diff --git a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/BenchmarkJobManager.java b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/BenchmarkJobManager.java index 5e336bd62f5622a37f9f7aa3ee5ee6d58c7e627b..756073c43933a14686576fb86313b30fa7a9e0cf 100644 --- a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/BenchmarkJobManager.java +++ b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/BenchmarkJobManager.java @@ -14,6 +14,8 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -65,8 +67,8 @@ public class BenchmarkJobManager { } @Override - public boolean fileExists(Path filePath) { - File f = new File(filePath.toString()); + public boolean fileExists(String filePath) { + File f = new File(job.getDirectory().resolve(filePath).toString()); return f.exists() && !f.isDirectory(); } }; @@ -189,6 +191,10 @@ public class BenchmarkJobManager { break; } scanner.close(); + + // Order tasks chronologically + List<String> chronologicList = Constants.STATISTICS_TASK_NAME_MAP.keySet().stream().collect(Collectors.toList()); + Collections.sort(tasks, Comparator.comparingInt(task -> chronologicList.indexOf(task.getDescription()))); } private void setDownloaded(boolean b) { diff --git a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/Constants.java b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/Constants.java index 2dcdc852be4c5132da36037174118f856e30e3e9..9ecfeb47fe8183f8c78e75466f97ce1cd173ba26 100644 --- a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/Constants.java +++ b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/Constants.java @@ -1,6 +1,6 @@ package cz.it4i.fiji.haas_spim_benchmark.core; -import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.Map; public interface Constants { @@ -22,7 +22,7 @@ public interface Constants { String STATISTICS_RESOURCES_WALL_TIME = "resources_used.walltime"; String STATISTICS_RESOURCES_CPU_PERCENTAGE = "resources_used.cpupercent"; - Map<String, String> STATISTICS_TASK_NAME_MAP = new HashMap<String, String>() { + Map<String, String> STATISTICS_TASK_NAME_MAP = new LinkedHashMap<String, String>() { private static final long serialVersionUID = 1L; { put("define_xml_tif", "Define dataset"); @@ -36,6 +36,7 @@ public interface Constants { put("define_output", "Define output"); put("hdf5_xml_output", "Define hdf5 output"); put("resave_hdf5_output", "Resave output to hdf5"); + put("done", "Done"); }}; String STATISTICS_SUMMARY_FILENAME = "summary.csv"; } diff --git a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/SPIMComputationAccessor.java b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/SPIMComputationAccessor.java index 39151ca434b506f873741dae844360934863ffbb..5c01528dc5befd2462c2ee6c0eb1f7ca205181e6 100644 --- a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/SPIMComputationAccessor.java +++ b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/SPIMComputationAccessor.java @@ -5,5 +5,5 @@ import java.nio.file.Path; import cz.it4i.fiji.haas.HaaSOutputHolder; public interface SPIMComputationAccessor extends HaaSOutputHolder { - boolean fileExists(Path fileName); + boolean fileExists(String fileName); } diff --git a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/TaskComputation.java b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/TaskComputation.java index af869e56765636d16a861800e6a58341e7449fe5..82fd4bce4a05f7096db730aa6a5fd5c00d154ba4 100644 --- a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/TaskComputation.java +++ b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/TaskComputation.java @@ -24,6 +24,7 @@ public class TaskComputation { } } + private final SPIMComputationAccessor computationAccessor; private final Task task; private final int timepoint; private final Collection<String> inputs; @@ -34,14 +35,16 @@ public class TaskComputation { //TASK 1011 what states will be defined and how it will be defined private JobState state = JobState.Unknown; - public TaskComputation(SPIMComputationAccessor outputHolder, Task task, int timepoint) { + public TaskComputation(SPIMComputationAccessor computationAccessor, Task task, int timepoint) { + this.computationAccessor = computationAccessor; this.task = task; - this.timepoint = timepoint; - ParsedTaskComputationValues parsedValues = parseStuff(outputHolder); + this.timepoint = timepoint; + ParsedTaskComputationValues parsedValues = parseStuff(computationAccessor); this.inputs = parsedValues.inputs; this.outputs = parsedValues.outputs; this.logs = parsedValues.logs; this.id = parsedValues.id; + updateState(); } public JobState getState() { @@ -59,14 +62,39 @@ public class TaskComputation { private void updateState() { //TASK 1011 This should never happen, add some error handling to resolveId() if (id == null) { + state = JobState.Unknown; return; } - //String snakeOutput = outputHolder.getActualOutput(); - - //TASK 1011 - //resolve if job is queued (defined id), started (exists log file), finished (in log is Finished job 10.) or - //or failed (some error in log) + state = JobState.Queued; + + // Check whether a log file exists + if (!logs.stream().anyMatch(logFile -> computationAccessor.fileExists(logFile))) { + return; + } + + state = JobState.Running; + + // Check whether the corresponding job has finished + final String OUTPUT_PARSING_FINISHED_JOB = "Finished job "; + final String desiredPatternFinishedJob = OUTPUT_PARSING_FINISHED_JOB + id.toString(); + final String OUTPUT_PARSING_ERRONEOUS_JOB = "Error job "; + final String desiredPatternErroneousJob = OUTPUT_PARSING_ERRONEOUS_JOB + id.toString(); + String currentLine; + Scanner scanner = new Scanner(computationAccessor.getActualOutput()); + while (scanner.hasNextLine()) { + currentLine = scanner.nextLine(); + if (currentLine.contains(desiredPatternErroneousJob)) { + state = JobState.Failed; + break; + } else if (currentLine.contains(desiredPatternFinishedJob)) { + state = JobState.Finished; + break; + } + } + scanner.close(); + + return; } private Long getId() {