src/main/kotlin/cn/flightfeather/supervision/common/executor/BgTask.kt
@@ -1,6 +1,5 @@
package cn.flightfeather.supervision.common.executor
import org.springframework.scheduling.annotation.Async
import java.time.LocalDateTime
import java.util.concurrent.Future
@@ -12,39 +11,50 @@
    val id: String,
    val name: String,
    private val task: () -> Boolean,
    private val onStatusChange: (status: BgTaskStatus) -> Unit
) {
    var taskStatus = BgTaskStatus(type, id, name)
    var future: Future<*>? = null
    fun ready() {
        taskStatus.status = TaskStatus.RUNNING
        taskStatus.startTime = LocalDateTime.now()
        setStatus(TaskStatus.RUNNING)
    }
    fun execute() {
        val res = task()
        if (res) success() else fail()
        try {
            val res = task()
            if (res) success() else fail()
        } catch (e: Exception) {
            fail()
            taskStatus.extra = e.message
        }
    }
    fun success() {
        taskStatus.status = TaskStatus.SUCCESS
        complete()
        setStatus(TaskStatus.SUCCESS)
    }
    fun fail() {
        taskStatus.status = TaskStatus.FAIL
        complete()
        setStatus(TaskStatus.FAIL)
    }
    fun shutdown() {
        if (future?.isCancelled == false && !future!!.isDone) {
            future!!.cancel(true)
            taskStatus.status = TaskStatus.SHUTDOWN
            complete()
        }
        complete()
        setStatus(TaskStatus.SHUTDOWN)
    }
    fun complete() {
        taskStatus.endTime = LocalDateTime.now()
    }
    fun setStatus(status: TaskStatus) {
        taskStatus.status = status
        onStatusChange(taskStatus)
    }
}