sige 1 year ago
parent
commit
5c6856cdb4
  1. 51
      src/src/main/java/com/my/graphiteDigesterBg/diframe/DiTaskBase.java

51
src/src/main/java/com/my/graphiteDigesterBg/diframe/DiTaskBase.java

@ -1,7 +1,9 @@
package com.my.graphiteDigesterBg.diframe;
import com.my.graphiteDigesterBg.diframe.model.DiMdbTaskExecution;
import com.my.graphiteDigesterBg.diframe.model.DiMdbUser;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Map;
abstract public class DiTaskBase implements DiTask {
// logger
public static final Logger LOG = LoggerFactory.getLogger(DiTaskExecutor.class);
@ -15,23 +17,61 @@ abstract public class DiTaskBase implements DiTask {
private Boolean isRequestTaskStop = false;
// user
private DiMdbUser user;
// execution
private final DiMdbTaskExecution execution;
// constructor
public DiTaskBase() {
this.uuid = java.util.UUID.randomUUID().toString();
this.status = TaskStatus.NEW;
this.user = null;
var tmpExecution = new DiMdbTaskExecution();
tmpExecution.uuid = this.uuid;
tmpExecution.status = "NEW";
tmpExecution.runtimeStatus = "";
tmpExecution.message = "";
tmpExecution.createdAt = (int)(System.currentTimeMillis() / 1000);
tmpExecution.userId = 0;
tmpExecution.name = "";
tmpExecution.save();
// why ? 遇到这个问题的时候作者10天前才更新 再等等吧 ~~~
// @link https://discourse.hibernate.org/t/not-implemented-by-sqlite-jdbc-driver/8435/7
this.execution = DiActiveRecord.findOne(DiMdbTaskExecution.class, Map.of("uuid", this.uuid));
}
@Override
public void init() {
Task task = this.getClass().getAnnotation(Task.class);
this.execution.name = task.name();
this.execution.userId = null == this.user ? 0 :this.user.id;
this.execution.save();
}
@Override
public void setStatus(TaskStatus status) {
this.status = status;
this.execution.status = status.toString();
this.execution.save();
LOG.info("[Task #{}] Status => {}", this.getUUID(), this.getStatus());
if ( TaskStatus.READY.equals(this.getStatus()) ) {
this.getDevice().getTaskManager().getExecutor().notifyTaskReady();
}
}
// set runtime status
protected void setRuntimeStatus( String status ) {
this.execution.runtimeStatus = status;
this.execution.save();
}
// clear runtime status
protected void clearRuntimeStatus() {
this.execution.runtimeStatus = "";
this.execution.save();
}
@Override
public DiDevice getDevice() {
return this.device;
@ -65,9 +105,18 @@ abstract public class DiTaskBase implements DiTask {
// run
@Override
public void run() {
this.status = TaskStatus.FINISHED;
try {
this.execute();
} catch ( Exception e ) {
this.execution.status = "ERROR";
this.execution.message = e.getMessage();
this.execution.save();
}
}
// execute task - implement this method in subclass
abstract protected void execute();
@Override
public void stop() {
this.isRequestTaskStop = true;

Loading…
Cancel
Save