Build Per Time Period

This only report on the successes and the failures for a provided time interval. This report has to be used in conjunction with a report template such as the Bar Chart Template.


Meta-Data Script:

import com.urbancode.anthill3.domain.reporting.*;
import java.text.*;
import java.util.*;

ReportMetaData rmd = new ReportMetaData();

SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss z");

TextParamMetaData startDateParam = new TextParamMetaData();

startDateParam.setName("startDateStr");
startDateParam.setLabel("Start Date");
startDateParam.setDescription("The Interval Start Date yyyy-MM-dd kk:mm:ss z");
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 kk:mm:ss z");
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");

// Lastly, return the meta data
return rmd; 

Context Script:

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.*;

class WorkflowSummary {
  Long id = null;
  String name = null;
  int successes = 0;
  int failures = 0;
}

ReportOutput output = new ReportOutput(metaData);

SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss z");

Date startDate = DATE_FORMAT.parse(startDateStr);
Date endDate = DATE_FORMAT.parse(endDateStr);
Project[] projects = ProjectFactory.getInstance().restoreAllActive();

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++;
    }
    else {
      wfSummary.successes++;
    }

}

Iterator itr = workflowNameToSummary.values().iterator();
  while (itr.hasNext()) {
    WorkflowSummary summary = (WorkflowSummary) itr.next();
    if (project.getWorkflow(summary.id).isOriginating()) {
      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 + "");

output.addRow(row);
    }
  }
  
}
return output; 

Related Content

AnthillPro Template Reports
Report Templates