Stoplight Report

This report has to be used in conjunction with a report template such as the HTML Template.


Meta-Data Script:

import com.urbancode.anthill3.domain.reporting.*;

ReportMetaData rmd = new ReportMetaData();

rmd.addColumn("Status");
rmd.addColumn("Project");
rmd.addColumn("Branch");
rmd.addColumn("Tests");
rmd.addColumn("Tests Passing");
rmd.addColumn("Line Coverage");
rmd.addColumn("Branch Coverage");
rmd.addColumn("Latest Stamp");
rmd.addColumn("Date");

return rmd;  

Report Script:

import com.urbancode.anthill3.dashboard.BuildLifeWorkflowCaseSummary;
import com.urbancode.anthill3.dashboard.DashboardFactory;
import com.urbancode.anthill3.domain.buildlife.BuildLife;
import com.urbancode.anthill3.domain.buildlife.BuildLifeFactory;
import com.urbancode.anthill3.domain.coverage.CoverageReport;
import com.urbancode.anthill3.domain.persistent.PersistenceException;
import com.urbancode.anthill3.domain.project.Project;
import com.urbancode.anthill3.domain.project.ProjectFactory;
import com.urbancode.anthill3.domain.reporting.ReportMetaData;
import com.urbancode.anthill3.domain.reporting.ReportOutput;
import com.urbancode.anthill3.domain.reporting.ReportRow;
import com.urbancode.anthill3.domain.test.TestReportFactory;
import com.urbancode.anthill3.domain.workflow.Workflow;
import com.urbancode.anthill3.domain.workflow.WorkflowStatusEnum;
import com.urbancode.anthill3.web.project.ProjectTasks;
import com.urbancode.anthill3.domain.test.TestReport;
import com.urbancode.anthill3.runtime.scripting.helpers.CoverageHelper;
import java.util.List;

        String serverUrl = reportUrl.substring(0, reportUrl.indexOf("/", 10));
        String buildLifeUrl = serverUrl + ProjectTasks.methodUrl("viewBuildLife");

        Project[] projectArray = ProjectFactory.getInstance().restoreAllActive();
        List workflowList = new java.util.ArrayList();

        for (int i = 0; i < projectArray.length; i++) {
            Workflow[] originatingArray = projectArray[i].getOriginatingWorkflowArray();
            for (int j = 0; j < originatingArray.length; j++) {
                workflowList.add(originatingArray[j]);
            }
        }

        ReportOutput output = new ReportOutput(metaData);

        Workflow[] workflows = new Workflow[ workflowList.size() ];
        workflowList.toArray(workflows);
        for (int i = 0; i < workflows.length; i++) {
            BuildLifeWorkflowCaseSummary[] mostRecentSummaryArray =
                    DashboardFactory.getInstance().getBuildLifeWorkflowSummariesByWorkflow(workflows[i].getId(), null, new Integer(1));
            if (mostRecentSummaryArray.length > 0) {
                BuildLifeWorkflowCaseSummary summary = mostRecentSummaryArray[0];
                
                ReportRow row = new ReportRow(output, "1");
                
                ///////// PROJECT /////////////////
                String projectName = summary.getProjectName();
                Long projectId = summary.getProjectId();
                String projectUrl = "/tasks/project/ProjectTasks/viewDashboard?projectId=" + projectId;
                // HTML OUTPUT
                // row.setColumnValue("Project", "<b><a href=\"" + projectUrl + "\">" + projectName + "</a></b>");
                // CSV OUTPUT
                row.setColumnValue("Project", projectName);

                ///////// BRANCH /////////////////
                row.setColumnValue("Branch", summary.getWorkflowName());
                
                ///////// DATE ///////////////////
                row.setColumnValue("Date", summary.getEndDate() == null ? "Running" : String.valueOf(summary.getEndDate()));

                ///////// STATUS /////////////////
                WorkflowStatusEnum workflowStatus = summary.getStatus();
                String workflowStatusColor = workflowStatus.getColor();
                String workflowStatusName = workflowStatus.getName();
                if ("Complete".equals(workflowStatusName)) {
                    workflowStatusName = "Success";
                }
                // HTML OUTPUT
                //row.setColumnValue("Status", "<font color=\"" + workflowStatusColor + "\">" + workflowStatusName + "</font>");
                // CSV OUTPUT
                row.setColumnValue("Status", workflowStatusName);

                ///////// STAMP /////////////////
                String stamp = summary.getLatestStamp();
                Long buildLifeId = summary.getBuildLifeId();
                buildLifeUrl = "/tasks/project/ProjectTasks/viewBuildLife?buildLifeId=" + buildLifeId;
                // HTML OUTPUT
                //row.setColumnValue("Latest Stamp", "<a href=\"" + buildLifeUrl + "\">" + stamp + "</a>");
                // CSV OUTPUT
                row.setColumnValue("Latest Stamp", stamp);

                ///////// TESTS ///////////////
                BuildLife buildLife = BuildLifeFactory.getInstance().restore(summary.getBuildLifeId());
                TestReport[] tests = TestReportFactory.getInstance().restoreAllForBuildLife(buildLife);
                
                int numberOfTests = 0;
                int numberOfSuccesses = 0;
                for (int j = 0; j < tests.length; j++) {
                    numberOfTests += tests[j].getNumberOfTests();
                    numberOfSuccesses += tests[j].getNumberOfSuccesses();
                }
                row.setColumnValue("Tests", "" + numberOfTests);
                
                ///////// TESTS PASSING /////////
                long testsPassingFinal = 0;
                if (numberOfTests > 0) {
                    testsPassingFinal = Math.round(((double)numberOfSuccesses / (double)numberOfTests) * 100.0);
                }
                row.setColumnValue("Tests Passing", "" + testsPassingFinal + "%");

                ///////// LINE COVERAGE //////////////
                ///////// BRANCH COVERAGE ////////////
                CoverageReport[] coverageReport = CoverageHelper.getForBuildLife(buildLife);
                long lineCoverageFinal = 0;
                long branchCoverageFinal = 0;
                if (coverageReport != null && coverageReport.length > 0) {
                    double lineCoverageTotal = 0.0;
                    int lineCoverageCount = 0;
                    double branchCoverageTotal = 0.0;
                    int branchCoverageCount = 0;
                    for( int k = 0; k < coverageReport.length; ++k) {
                        if (coverageReport[k].getLinePercentage() != null) {
                            lineCoverageTotal += coverageReport[k].getLinePercentage().doubleValue();
                            lineCoverageCount++;
                        }
                        if (coverageReport[k].getBranchPercentage() != null) {
                            branchCoverageTotal += coverageReport[k].getBranchPercentage().doubleValue();
                            branchCoverageCount++;
                        }
                    }
                    if (lineCoverageCount > 0) {
                        lineCoverageFinal = Math.round( 100.0 * (lineCoverageTotal / (double)lineCoverageCount));;
                    }
                    if (branchCoverageCount > 0) {
                        branchCoverageFinal = Math.round( 100.0 * (branchCoverageTotal / (double)branchCoverageCount));
                    }
                }
                
                row.setColumnValue("Line Coverage", "" + lineCoverageFinal + "%" );
                row.setColumnValue("Branch Coverage", "" + branchCoverageFinal + "%" );
                
                output.addRow(row);
            }
        }
        return output;


Related Content

AnthillPro Template Reports
Report Templates