|
|
| Line 1: | |||
| + | 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.project.*; | ||
| + | import com.urbancode.anthill3.domain.reporting.*; | ||
| + | import com.urbancode.anthill3.domain.userprofile.*; | ||
| + | import java.text.SimpleDateFormat; | ||
| + | import java.util.*; | ||
| + | ReportMetaData rmd = new ReportMetaData(); | ||
| + | // Add some projects to choose from | ||
| + | SelectParamMetaData params = new SelectParamMetaData(); | ||
| + | Project[] allMyProjectsArray = ProjectFactory.getInstance().restoreAllActive(); | ||
| + | String[] labels = new String[allMyProjectsArray.length + 1]; | ||
| + | String[] values = new String[allMyProjectsArray.length + 1]; | ||
| + | for (int i = 0; i < allMyProjectsArray.length; i++) { | ||
| + | labels[i] = allMyProjectsArray[i].getName(); | ||
| + | values[i] = allMyProjectsArray[i].getId().toString(); | ||
| + | } | ||
| + | labels[allMyProjectsArray.length] = "All"; | ||
| + | values[allMyProjectsArray.length] = "all"; | ||
| + | params.setLabels(labels); | ||
| + | params.setValues(values); | ||
| + | params.setName("project"); | ||
| + | params.setLabel("Project"); | ||
| + | params.setDescription("Select the project to evaluate successful and failed executions of that project. Or select 'All' to display all projects together."); | ||
| + | rmd.addParameter(params); | ||
| + | // Add the months to choose from | ||
| + | SelectParamMetaData monthParams = new SelectParamMetaData(); | ||
| + | TimeZone timeZone = UserProfileFactory.getTimeZone(); | ||
| + | Calendar cal = Calendar.getInstance(timeZone); | ||
| + | int monthsToHave = 12; | ||
| + | String[] monthLabels = new String[monthsToHave]; | ||
| + | String[] monthValues = new String[monthsToHave]; | ||
| + | SimpleDateFormat monthOnly = new SimpleDateFormat("MMMM"); | ||
| + | for (int i = 1; i <= monthsToHave; i++) { | ||
| + | monthLabels[monthsToHave - i] = monthOnly.format(cal.getTime()); | ||
| + | monthValues[monthsToHave - i] = "" + cal.get(Calendar.MONTH); | ||
| + | cal.add(Calendar.MONTH, -1); | ||
| + | } | ||
| + | monthParams.setLabels(monthLabels); | ||
| + | monthParams.setValues(monthValues); | ||
| + | monthParams.setName("month"); | ||
| + | monthParams.setLabel("Month"); | ||
| + | monthParams.setDescription("Select the month to run this report against."); | ||
| + | rmd.addParameter(monthParams); | ||
| + | // Configure columns | ||
| + | rmd.addColumn("Action"); | ||
| + | rmd.addColumn("Environment"); | ||
| + | rmd.addColumn("Latest Stamp"); | ||
| + | rmd.addColumn("Build Life"); | ||
| + | rmd.addColumn("Agent(s)"); | ||
| + | rmd.addColumn("Status"); | ||
| + | rmd.addColumn("Build Date"); | ||
| + | rmd.addColumn("Deploy Date"); | ||
| + | return rmd; | ||
| + | </pre> | ||
| + | ---- | ||
| + | ''Report Script:'' | ||
| + | <pre>import com.urbancode.anthill3.dashboard.*; | ||
| + | import com.urbancode.anthill3.domain.reporting.*; | ||
| + | import com.urbancode.anthill3.domain.userprofile.*; | ||
| + | import com.urbancode.anthill3.domain.workflow.*; | ||
| + | import com.urbancode.anthill3.domain.buildlife.*; | ||
| + | import com.urbancode.commons.util.Duration; | ||
| + | import java.util.*; | ||
| + | |||
| + | // Get the timezone for the current user | ||
| + | TimeZone timeZone = UserProfileFactory.getTimeZone(); | ||
| + | Calendar cal = Calendar.getInstance(timeZone); | ||
| + | // Figure out the project to use. "project" is the name of the parameter in the meta data script. It's provided here. | ||
| + | Long projectId = null; | ||
| + | if (project == null || project.equals("all")) { | ||
| + | // leave as null; | ||
| + | } | ||
| + | else { | ||
| + | projectId = Long.parseLong(project); | ||
| + | } | ||
| + | // Get workflows for the last month | ||
| + | int monthId = Integer.parseInt(month); | ||
| + | // Get workflows for the last month | ||
| + | int monthId = Integer.parseInt(month); | ||
| + | if (monthId > cal.get(Calendar.MONTH) ) { | ||
| + | // We are looking at last year not the future | ||
| + | cal.add(Calendar.YEAR, -1); | ||
| + | } | ||
| + | cal.set(Calendar.MONTH, monthId); | ||
| + | cal.set(Calendar.DAY_OF_MONTH, 1); | ||
| + | cal.set(Calendar.HOUR, 0); | ||
| + | cal.set(Calendar.MINUTE, 0); | ||
| + | cal.set(Calendar.SECOND, 0); | ||
| + | cal.set(Calendar.MILLISECOND, 0); | ||
| + | startDate = cal.getTime(); | ||
| + | cal.add(Calendar.MONTH, 1); | ||
| + | endDate = cal.getTime(); | ||
| + | BuildLifeWorkflowCaseSummary[] summaries = DashboardFactory.getInstance().getBuildLifeWorkflowSummaries(projectId, startDate, endDate); | ||
| + | ReportOutput output = new ReportOutput(metaData); | ||
| + | for (int i = 0; i < summaries.length; i++) { | ||
| + | try { | ||
| + | buildLife = BuildLifeFactory.getInstance().restore(summaries[i].getBuildLifeId()); | ||
| + | workflow = WorkflowCaseFactory.getInstance().restore(summaries[i].getCaseId()); | ||
| + | originating = WorkflowCaseFactory.getInstance().restoreOriginatingForBuildLife(buildLife); | ||
| + | |||
| + | // Only include non-originating workflows | ||
| + | if (!workflow.getWorkflow().isOriginating() && | ||
| + | workflow.getServerGroup().getShortName() != null && | ||
| + | !workflow.getServerGroup().getShortName().equals("DEV")) { | ||
| + | // Calculate Duration | ||
| + | Duration duration = new Duration(summaries[i].getStartDate(),summaries[i].getEndDate()); | ||
| + | // calculate the agent(s) invloved | ||
| + | jobs = workflow.getJobTraceArray(); | ||
| + | String agents = ""; | ||
| + | for (int j = 0; j < jobs.length; j++) { | ||
| + | agents += (jobs[j].getAgent().getName() + " "); | ||
| + | } | ||
| + | ReportRow row = new ReportRow(output, "1"); | ||
| + | row.setColumnValue("Action", summaries[i].getWorkflowName()); | ||
| + | row.setColumnValue("Environment", workflow.getServerGroup().getName()); | ||
| + | row.setColumnValue("Latest Stamp", summaries[i].getLatestStamp()); | ||
| + | row.setColumnValue("Build Life", summaries[i].getBuildLifeId().toString()); | ||
| + | row.setColumnValue("Agent(s)",agents); | ||
| + | row.setColumnValue("Status", summaries[i].getStatus().getName()); | ||
| + | row.setColumnValue("Build Date", originating.getEndDate() == null ? "Running": String.valueOf(originating.getEndDate())); | ||
| + | row.setColumnValue("Deploy Date", summaries[i].getEndDate() == null ? "Running": String.valueOf(summaries[i].getEndDate()) + "\n"); | ||
| + | |||
| + | output.addRow(row); | ||
| + | } | ||
| + | } | ||
| + | catch (Exception e) { | ||
| + | ReportRow row = new ReportRow(output, "1"); | ||
| + | row.setColumnValue("Action", summaries[i].getWorkflowName()); | ||
| + | row.setColumnValue("Environment", "Error"); | ||
| + | row.setColumnValue("Latest Stamp", "Error"); | ||
| + | row.setColumnValue("Build Life", summaries[i].getBuildLifeId().toString()); | ||
| + | row.setColumnValue("Agent(s)","Error"); | ||
| + | row.setColumnValue("Status", "Error"); | ||
| + | row.setColumnValue("Build Date", originating.getEndDate() == null ? "Running": String.valueOf(originating.getEndDate())); | ||
| + | row.setColumnValue("Deploy Date", "Error" + "\n"); | ||
| + | output.addRow(row); | ||
| + | } | ||
| + | } | ||
| + | return output; | ||
| + | </pre> | ||
| + | ---- | ||
| + | '''Related Content''' | ||
| + | [[AnthillPro Template Reports]]<br/> | ||
| + | [[Report Templates]] | ||