Version Differences for Per Project Workflow Summary

Line 1:
    + This report shows the user a list workflows (with their respective project), and the successes & failures on the workflows. It will also list durations of successes and failures. This report has to be used in conjunction with a report template such as the [[HTML Template]].  
       
    + ----  
       
    + ''Meta-Data Script:''  
       
    + <pre>import com.urbancode.anthill3.domain.reporting.*;  
    + import java.text.*;  
    + import java.util.*;  
       
    + ReportMetaData rmd = new ReportMetaData();  
       
    + SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd");  
       
    + TextParamMetaData startDateParam = new TextParamMetaData();  
       
    + startDateParam.setName("startDateStr");  
    + startDateParam.setLabel("Start Date");  
    + startDateParam.setDescription("The Interval Start Date yyyy-MM-dd");  
    + startDateParam.setRequired(true);  
       
    + Calendar cal = Calendar.getInstance();  
    + cal.add(Calendar.MONTH, -1);  
       
    + startDateParam.setDefaultValue(DATE_FORMAT.format(cal.getTime()));  
       
    + rmd.addParameter(startDateParam);  
       
    + TextParamMetaData endDateParam = new TextParamMetaData();  
       
    + endDateParam.setName("endDateStr");  
    + endDateParam.setLabel("End Date");  
    + endDateParam.setDescription("The Interval End Date yyyy-MM-dd");  
    + endDateParam.setRequired(true);  
    + endDateParam.setDefaultValue(DATE_FORMAT.format(new Date()));  
       
    + rmd.addParameter(endDateParam);  
       
    + // Configure columns  
    + rmd.addColumn("Project");  
    + rmd.addColumn("Workflow");  
    + rmd.addColumn("Successes");  
    + rmd.addColumn("Failures");  
    + rmd.addColumn("Duration (successes)");  
    + rmd.addColumn("Duration (failures)");  
       
    + // Lastly, return the meta data  
    + return rmd;  
    + </pre>  
       
    + ----  
       
    + ''Report Script:''  
       
    + <pre>import com.urbancode.anthill3.dashboard.*;  
    + import com.urbancode.anthill3.domain.reporting.*;  
    + import com.urbancode.anthill3.domain.project.*;  
    + import com.urbancode.anthill3.domain.workflow.WorkflowStatusEnum;  
    + import java.util.*;  
    + import java.text.*;  
    + import com.urbancode.commons.util.Duration;  
       
    + class WorkflowSummary {  
    + Long id = null;  
    + String name = null;  
    + int successes = 0;  
    + int failures = 0;  
    + long successTime = 0;  
    + long failTime = 0;  
    + }  
       
    + ReportOutput output = new ReportOutput(metaData);  
       
    + SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd hh:mm");  
       
    + Date startDate = DATE_FORMAT.parse(startDateStr + " 00:00");  
    + Date endDate = DATE_FORMAT.parse(endDateStr + " 23:59");  
    + Project[] projects = ProjectFactory.getInstance().restoreAllActive();  
       
    + WorkflowSummary total = new WorkflowSummary();  
    + total.name = " TOTAL";  
       
       
    + for (int i = 0; i < projects.length; i++) {  
    + Project project = projects[i];  
    + Map workflowNameToSummary = new HashMap();  
       
    + BuildLifeWorkflowCaseSummary[] summaries = DashboardFactory.getInstance().getBuildLifeWorkflowSummaries(project.getId(), startDate, endDate);  
       
    + for (int j = 0; j < summaries.length; j++) {  
    + BuildLifeWorkflowCaseSummary summary = summaries[j];  
       
    + boolean failed = (summary.getStatus() == WorkflowStatusEnum.FAILED || summary.getStatus() == WorkflowStatusEnum.ERROR);  
    +  
    + WorkflowSummary wfSummary = null;  
    + if (workflowNameToSummary.containsKey(summary.getWorkflowName())) {  
    + wfSummary = (WorkflowSummary) workflowNameToSummary.get(summary.getWorkflowName());  
    + }  
    + else {  
    + wfSummary = new WorkflowSummary();  
    + wfSummary.name = summary.getWorkflowName();  
    + wfSummary.id = summary.getWorkflowId();  
    + workflowNameToSummary.put(summary.getWorkflowName(), wfSummary);  
    + }  
       
    + if (failed) {  
    + wfSummary.failures++;  
    + total.failures++;  
    + if (summary.getEndDate() != null && summary.getStartDate() != null) {  
    + time = summary.getEndDate().getTime() - summary.getStartDate().getTime();  
    + wfSummary.failTime += time;  
    + total.failTime += time;  
    + }  
    + }  
    + else {  
    + wfSummary.successes++;  
    + total.successes++;  
    + if (summary.getEndDate() != null && summary.getStartDate() != null) {  
    + time = summary.getEndDate().getTime() - summary.getStartDate().getTime();  
    + wfSummary.successTime += time;  
    + total.successTime += time;  
    + }  
    + }  
    + }  
       
    + Iterator itr = workflowNameToSummary.values().iterator();  
    + while (itr.hasNext()) {  
    + // Only include workflows with Activity  
    +  
    + WorkflowSummary summary = (WorkflowSummary) itr.next();  
    + if (summary.successes > 0 || summary.failures > 0) {  
    + long numAvgSucDur = summary.successes == 0 ? 0 : summary.successTime / summary.successes;  
    + long numAvgFailDur = summary.failures == 0 ? 0 : summary.failTime / summary.failures;  
       
    + Duration successAvgDuration = new Duration(numAvgSucDur);  
    + Duration failedAvgDuration = new Duration(numAvgFailDur);  
       
    + ReportRow row = new ReportRow(output, project.getName() + "-" + summary.name);  
    + row.setColumnValue("Project", project.getName());  
    + row.setColumnValue("Workflow", summary.name);  
    + row.setColumnValue("Successes", summary.successes + "");  
    + row.setColumnValue("Failures", summary.failures + "");  
    + row.setColumnValue("Duration (successes)", successAvgDuration.getLeastUnit(true,false));  
    + row.setColumnValue("Duration (failures)", failedAvgDuration.getLeastUnit(true,false));  
       
    + output.addRow(row);  
    + }  
    + }  
    + }  
    +  
    + // Set up a summary row  
    + long numAvgSucDur = total.successes == 0 ? 0 : total.successTime / total.successes;  
       
    + long numAvgFailDur = total.failures == 0 ? 0 : total.failTime / total.failures;  
       
    + Duration successAvgDuration = new Duration(numAvgSucDur);  
    + Duration failedAvgDuration = new Duration(numAvgFailDur);  
       
    + ReportRow row = new ReportRow(output, "Total");  
    + row.setColumnValue("Project", "<b>Total<b>");  
    + row.setColumnValue("Workflow", " ");  
    + row.setColumnValue("Successes", total.successes + "");  
    + row.setColumnValue("Failures", total.failures + "");  
    + row.setColumnValue("Duration (successes)", successAvgDuration.getLeastUnit(true,false));  
    + row.setColumnValue("Duration (failures)", failedAvgDuration.getLeastUnit(true,false));  
    + output.addRow(row);  
       
    + return output;  
    + </pre>  
       
    + ----  
       
    + '''Related Content'''  
       
    + [[AnthillPro Template Reports]]<br/>  
    + [[Report Templates]]