136 lines
2.9 KiB
Java
136 lines
2.9 KiB
Java
package eu.dnetlib.wfs.procs;
|
|
|
|
import java.time.LocalDateTime;
|
|
import java.util.HashMap;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.concurrent.CopyOnWriteArrayList;
|
|
|
|
import org.apache.commons.lang3.math.NumberUtils;
|
|
|
|
import eu.dnetlib.domain.wfs.jobs.JobStatus;
|
|
import eu.dnetlib.domain.wfs.jobs.WfRunningJob;
|
|
import eu.dnetlib.wfs.utils.ProcessCallback;
|
|
|
|
/**
|
|
* Created by michele on 19/11/15.
|
|
*/
|
|
public class WorkflowProcess implements Comparable<WorkflowProcess> {
|
|
|
|
public enum StartMode {
|
|
AUTO,
|
|
MANUAL,
|
|
DISABLED
|
|
}
|
|
|
|
private final String id;
|
|
private final WfRunningJob jobDetails;
|
|
|
|
private ProcessCallback callback;
|
|
private List<RuntimeEnv> envs = new CopyOnWriteArrayList<>();
|
|
|
|
private final Map<String, List<RuntimeEnv>> pausedJoinNodeEnvs = new HashMap<>();
|
|
private final Map<String, String> outputParams = new HashMap<>();
|
|
|
|
private Throwable error;
|
|
|
|
public WorkflowProcess(final WfRunningJob jobDetails) {
|
|
this.id = jobDetails.getProcessId();
|
|
this.jobDetails = jobDetails;
|
|
}
|
|
|
|
public String getId() {
|
|
return this.id;
|
|
}
|
|
|
|
public WfRunningJob getJobDetails() {
|
|
return this.jobDetails;
|
|
}
|
|
|
|
public Map<String, List<RuntimeEnv>> getPausedJoinNodeEnvs() {
|
|
return this.pausedJoinNodeEnvs;
|
|
}
|
|
|
|
public List<RuntimeEnv> getEnvs() {
|
|
return this.envs;
|
|
}
|
|
|
|
public void kill() {
|
|
// TODO (MEDIUM PRIORITY)
|
|
this.jobDetails.setStatus(JobStatus.killed);
|
|
}
|
|
|
|
public boolean isTerminated() {
|
|
return (this.error != null) || switch (this.jobDetails.getStatus()) {
|
|
case success, failure, killed -> true;
|
|
default -> false;
|
|
};
|
|
}
|
|
|
|
@Override
|
|
public String toString() {
|
|
return String.format("[process id='%s']", this.id);
|
|
}
|
|
|
|
@Override
|
|
public int compareTo(final WorkflowProcess other) {
|
|
final int n1 = this.jobDetails.getPriority();
|
|
final int n2 = other.jobDetails.getPriority();
|
|
return NumberUtils.compare(n1, n2);
|
|
}
|
|
|
|
public Throwable getError() {
|
|
return this.error;
|
|
}
|
|
|
|
public void setError(final Throwable error) {
|
|
this.error = error;
|
|
}
|
|
|
|
public Map<String, String> getOutputParams() {
|
|
return this.outputParams;
|
|
}
|
|
|
|
public RuntimeEnv newEnv(final Map<String, Object> attrs) {
|
|
final RuntimeEnv env = new RuntimeEnv();
|
|
env.addAttributes(attrs);
|
|
this.envs.add(env);
|
|
return env;
|
|
}
|
|
|
|
public void complete(final RuntimeEnv env) {
|
|
final LocalDateTime now = LocalDateTime.now();
|
|
|
|
this.jobDetails.setLastUpdate(now);
|
|
|
|
this.jobDetails.setEndDate(now);
|
|
this.jobDetails.setStatus(env.getError() != null ? JobStatus.failure : JobStatus.success);
|
|
|
|
if (env.getError() != null) {
|
|
setError(env.getError());
|
|
}
|
|
|
|
if (this.callback != null) {
|
|
if (env.getError() != null) {
|
|
this.callback.onFail(this, env.getError());
|
|
} else {
|
|
this.callback.onSuccess(this);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
public ProcessCallback getCallback() {
|
|
return this.callback;
|
|
}
|
|
|
|
public void setCallback(final ProcessCallback callback) {
|
|
this.callback = callback;
|
|
}
|
|
|
|
public void setEnvs(final List<RuntimeEnv> envs) {
|
|
this.envs = envs;
|
|
}
|
|
|
|
}
|