protected WorkflowReport parseWorkflowReport(JsonNode reportJson, Path workflowReportJson, ActivityReport actReport, WorkflowBundle workflowBundle) throws ParseException { Workflow wf = (Workflow) getSubject(reportJson, workflowBundle); WorkflowReport workflowReport = new WorkflowReport(wf); workflowReport.setParentReport(actReport); parseDates(reportJson, workflowReport); for (JsonNode invocJson : reportJson.path("invocations")) // NOTE: Invocation constructor will add to parents parseInvocation(invocJson, workflowReportJson, workflowReport); for (JsonNode procJson : reportJson.path("processorReports")) { ProcessorReport procReport = parseProcessorReport(procJson, workflowReportJson, workflowReport, workflowBundle); workflowReport.addProcessorReport(procReport); } return workflowReport; }
@Override public String toString() { DateFormat dateFormat = new SimpleDateFormat(dateFormatString); StringBuilder sb = new StringBuilder(); int max = getLongestName(this, 0); spaces(sb, max + 1); sb.append("Status "); sb.append("Queued "); sb.append("Started "); sb.append("Complete "); sb.append("Errors "); sb.append("Started "); sb.append("Finished\n"); sb.append(getSubject().getName()); spaces(sb, max - getSubject().getName().length() + 1); sb.append(getState()); spaces(sb, 10 - getState().name().length()); sb.append("-"); spaces(sb, 9); sb.append("-"); spaces(sb, 9); sb.append("-"); spaces(sb, 9); sb.append("-"); spaces(sb, 9); addDates(sb, getStartedDate(), getCompletedDate(), dateFormat); for (ProcessorReport processorReport : getProcessorReports()) addProcessor(sb, max, 0, processorReport, dateFormat); return sb.toString(); }
@Override public String getRunName(String runID) throws InvalidRunIdException { WorkflowReport workflowReport = getWorkflowReport(runID); return workflowReport.getSubject().getName() + "_" + ISO_8601.format(workflowReport.getCreatedDate()); }
private int getLongestName(WorkflowReport workflowReport, int level) { int result = 0; result = Math.max(result, getSubject().getName().length() + level); for (ProcessorReport processorReport : workflowReport.getProcessorReports()) { result = Math.max(result, processorReport.getSubject().getName().length()); for (ActivityReport activityReport : processorReport.getActivityReports()) { WorkflowReport nestedWorkflowReport = activityReport.getNestedWorkflowReport(); if (nestedWorkflowReport != null) result = Math.max(result, getLongestName(nestedWorkflowReport, level + 1)); } } return result; }
try (Bundle bundle = DataBundles.openBundle(bundlePath)) { WorkflowReport wfReport = workflowReportJson.load(bundle); assertEquals(State.COMPLETED, wfReport.getState()); assertNull(wfReport.getParentReport()); assertEquals(wfBundle.getMainWorkflow().getName(), wfReport.getSubject().getName()); URI mainWf = new URITools().uriForBean(wfBundle.getMainWorkflow()); assertEquals(mainWf, wfReport.getSubjectURI()); assertEquals(date(2013,1,2,13,37), wfReport.getCreatedDate()); assertEquals(date(2013,1,2,14,50), wfReport.getStartedDate()); assertEquals(date(2013,12,31,0,0), wfReport.getCompletedDate()); assertNull(wfReport.getCancelledDate()); assertNull(wfReport.getResumedDate()); assertNull(wfReport.getPausedDate()); assertTrue(wfReport.getResumedDates().isEmpty()); assertTrue(wfReport.getPausedDates().isEmpty()); assertEquals(1, wfReport.getInvocations().size()); Invocation wfInvov = wfReport.getInvocations().first(); assertEquals("wf0", wfInvov.getName()); assertEquals("wf0", wfInvov.getId()); assertEquals(2, wfReport.getProcessorReports().size()); for (ProcessorReport procRepo : wfReport.getProcessorReports()) { Processor processor = procRepo.getSubject(); assertTrue(wfBundle.getMainWorkflow().getProcessors().containsName(processor.getName()));
@Before public void dummyReport() throws Exception { wfReport = new WorkflowReport(wfBundle.getMainWorkflow()); dataBundle = DataBundles.createBundle(); wfReport.setDataBundle(dataBundle); wfReport.setCreatedDate(date(2013,1,2,13,37)); wfReport.setStartedDate(date(2013,1,2,14,50)); Invocation wfInvocation = new Invocation("wf0", null, wfReport); wfInvocation.setStartedDate(date(2013,1,2,14,51)); wfInvocation.setCompletedDate(date(2013,12,30,23,50)); wfReport.addInvocation(wfInvocation); processorReport.setJobsCompletedWithErrors(2); wfReport.addProcessorReport(processorReport); wfReport.setCompletedDate(date(2013,12,31,0,0));
private void addProcessor(StringBuilder sb, int max, int level, ProcessorReport processorReport, DateFormat dateFormat) { String processorName = processorReport.getSubject().getName(); spaces(sb, level); sb.append(processorName); spaces(sb, max - processorName.length() - level + 1); State processorState = processorReport.getState(); sb.append(processorState); spaces(sb, 10 - processorState.name().length()); String jobsQueued = String.valueOf(processorReport.getJobsQueued()); sb.append(jobsQueued); spaces(sb, 10 - jobsQueued.length()); String jobsStarted = String.valueOf(processorReport.getJobsStarted()); sb.append(jobsStarted); spaces(sb, 10 - jobsStarted.length()); String jobsCompleted = String.valueOf(processorReport.getJobsCompleted()); sb.append(jobsCompleted); spaces(sb, 10 - jobsCompleted.length()); String jobsCompletedWithErrors = String.valueOf(processorReport .getJobsCompletedWithErrors()); sb.append(jobsCompletedWithErrors); spaces(sb, 10 - jobsCompletedWithErrors.length()); addDates(sb, processorReport.getStartedDate(), processorReport.getCompletedDate(), dateFormat); for (ActivityReport activityReport : processorReport.getActivityReports()) { WorkflowReport nestedWorkflowReport = activityReport.getNestedWorkflowReport(); if (nestedWorkflowReport != null) for (ProcessorReport nestedProcessorReport : nestedWorkflowReport.getProcessorReports()) addProcessor(sb, max, level + 1, nestedProcessorReport, dateFormat); } }
public void save(WorkflowReport wfReport, Bundle dataBundle) throws IOException { Path path = getWorkflowRunReport(dataBundle); save(wfReport, path); if (!Files.exists(getWorkflow(dataBundle))) // Usually already done by Run constructor setWorkflowBundle(wfReport.getDataBundle(), wfReport.getSubject() .getParent()); }
public WorkflowReport generateWorkflowReport(Workflow workflow) { WorkflowReport workflowReport = createWorkflowReport(workflow); for (Processor processor : workflow.getProcessors()) { ProcessorReport processorReport = createProcessorReport(processor); processorReport.setParentReport(workflowReport); workflowReport.addProcessorReport(processorReport); for (ProcessorBinding processorBinding : scufl2Tools.processorBindingsForProcessor( processor, profile)) { Activity boundActivity = processorBinding.getBoundActivity(); ActivityReport activityReport = createActivityReport(boundActivity); activityReport.setParentReport(processorReport); if (scufl2Tools.containsNestedWorkflow(processor, profile)) { Workflow nestedWorkflow = scufl2Tools.nestedWorkflowForProcessor(processor, profile); WorkflowReport nestedWorkflowReport = generateWorkflowReport(nestedWorkflow); nestedWorkflowReport.setParentReport(activityReport); activityReport.setNestedWorkflowReport(nestedWorkflowReport); } processorReport.addActivityReport(activityReport); } } return workflowReport; }
public void resume() throws RunStateException, InvalidExecutionIdException { synchronized (workflowReport) { State state = workflowReport.getState(); if (!state.equals(PAUSED)) throw new RunStateException("Cannot resume a " + state + " run."); executionEnvironment.getExecutionService().resume(executionID); workflowReport.setResumedDate(new Date()); } }
public void pause() throws RunStateException, InvalidExecutionIdException { synchronized (workflowReport) { State state = workflowReport.getState(); if (!state.equals(RUNNING)) throw new RunStateException("Cannot pause a " + state + " run."); executionEnvironment.getExecutionService().pause(executionID); workflowReport.setPausedDate(new Date()); } }
public void cancel() throws RunStateException, InvalidExecutionIdException { synchronized (workflowReport) { State state = workflowReport.getState(); if (state.equals(CANCELLED) || state.equals(COMPLETED) || state.equals(FAILED)) throw new RunStateException("Cannot cancel a " + state + " run."); executionEnvironment.getExecutionService().cancel(executionID); workflowReport.setCancelledDate(new Date()); } } }
/** * Returns the current {@link State} of the <code>Run</code>. * * A <code>Run</code>'s state can be CREATED, RUNNING, COMPLETED, PAUSED, * CANCELLED or FAILED. * * @return the current <code>State</code> of the <code>Run</code> */ public State getState() { return workflowReport.getState(); }
@Test public void save() throws Exception { workflowReportJson.save(wfReport, dataBundle); Path path = wfReport.getDataBundle().getRoot().resolve("/workflowrun.json"); assertTrue("Did not save to expected path " + path, Files.exists(path)); assertEquals( "John Doe", DataBundles.getStringValue(wfReport.getDataBundle().getRoot() .resolve(inputsName))); assertEquals( "Hello, John Doe", DataBundles.getStringValue(wfReport.getDataBundle().getRoot() .resolve(outputsGreeting))); assertEquals( "Hello, ", DataBundles.getStringValue(wfReport.getDataBundle().getRoot() .resolve(inputString1))); assertEquals( "Hello, John Doe", DataBundles.getStringValue(wfReport.getDataBundle().getRoot() .resolve(output))); assertEquals( "Hello, ", DataBundles.getStringValue(wfReport.getDataBundle().getRoot() .resolve(actInputString1)));
public void start() throws RunStateException, InvalidExecutionIdException { synchronized (workflowReport) { State state = workflowReport.getState(); if (!state.equals(CREATED)) throw new RunStateException("Cannot start a " + state + " run."); executionEnvironment.getExecutionService().start(executionID); } }