package com.groupon.jenkins.dotci.metrics; import com.groupon.jenkins.dynamic.build.DynamicBuild; import com.groupon.jenkins.dynamic.build.api.metrics.JobMetric; import com.groupon.jenkins.dynamic.build.api.metrics.charts.Chart; import com.groupon.jenkins.dynamic.build.api.metrics.charts.ChartColor; import com.groupon.jenkins.dynamic.build.api.metrics.charts.LineChart; import hudson.Extension; import hudson.plugins.cobertura.CoberturaBuildAction; import hudson.plugins.cobertura.Ratio; import hudson.plugins.cobertura.targets.CoverageMetric; import org.mongodb.morphia.query.Query; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @Extension public class CodeCoverageMetric extends JobMetric { @Override public Chart getChart() { List<DynamicBuild> builds = getCoverageBuilds(); List<String> buildNumbers = new ArrayList<String>(); List<Long> lineCoverages= new ArrayList<Long>(); List<Long> methodsCoverages= new ArrayList<Long>(); List<Long> packagesCoverages= new ArrayList<Long>(); List<Long> filesCoverages= new ArrayList<Long>(); for(DynamicBuild build: builds){ buildNumbers.add(build.getNumber() +"") ; CoberturaBuildAction coberturaAction = build.getAction(CoberturaBuildAction.class);; Ratio lineCoverage = coberturaAction.getResult().getCoverage(CoverageMetric.LINE); lineCoverages.add(new Long(lineCoverage.getPercentage())); Ratio methodCoverage = coberturaAction.getResult().getCoverage(CoverageMetric.METHOD); methodsCoverages.add(new Long(methodCoverage.getPercentage())); Ratio packageCoverage = coberturaAction.getResult().getCoverage(CoverageMetric.PACKAGES); packagesCoverages.add(new Long(packageCoverage.getPercentage())); Ratio filesCoverage = coberturaAction.getResult().getCoverage(CoverageMetric.FILES); filesCoverages.add(new Long(filesCoverage.getPercentage())); } return new LineChart(buildNumbers, Arrays.asList( new LineChart.DataSet("Line", lineCoverages, ChartColor.BLUE), new LineChart.DataSet("Method", methodsCoverages, ChartColor.YELLOW), new LineChart.DataSet("Packages", packagesCoverages,ChartColor.GREEN), new LineChart.DataSet("Files", filesCoverages, ChartColor.RED) ), "Build Number","Coverage(%)"); } private List<DynamicBuild> getCoverageBuilds() { Query<DynamicBuild> query = getQuery().filter("actions.className", CoberturaBuildAction.class.getName()).limit(getBuildCount()); return getBuilds(query); } @Override public String getTitle() { return "Code Coverage"; } @Override public boolean isApplicable() { return getCoverageBuilds().size() > 0 ; } }