package hudson.plugins.PerfPublisher;
import hudson.model.HealthReport;
import hudson.plugins.PerfPublisher.Report.ReportContainer;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.renderer.category.StackedAreaRenderer;
import org.jfree.data.category.CategoryDataset;
/**
* Creates a health report for integer values based on healthy and unhealthy
* thresholds.
*
* @see HealthReport
* @author Ulli Hafner
*/
public class HealthReportBuilder implements Serializable {
/** Unique identifier of this class. */
private static final long serialVersionUID = 5191317904662711835L;
/** Health descriptor. */
private final HealthDescriptor healthDescriptor;
/**
* Creates a new instance of {@link HealthReportBuilder}.
*
* @param healthDescriptor
* health descriptor
*/
public HealthReportBuilder(final HealthDescriptor healthDescriptor) {
this.healthDescriptor = healthDescriptor;
}
/**
* Computes the healthiness of a build based on the specified results.
* Reports a health of 100% when the specified counter is less than
* {@link #healthy}. Reports a health of 0% when the specified counter is
* greater than {@link #unHealthy}. The computation takes only annotations
* of the specified severity into account.
*
* @param result
* annotations of the current build
* @return the healthiness of a build
*/
public HealthReport computeHealth(HealthDescriptor healthDescriptor, final ReportContainer result) {
double percentOfFailedTest = result.getPercentOfFailedTest();
int numberOfFailedTest = result.getNumberOfFailedTest();
int percentage;
if (percentOfFailedTest < healthDescriptor.getMinHealth()) {
percentage = 100;
}
else if (percentOfFailedTest > healthDescriptor.getMaxHealth()) {
percentage = 0;
}
else {
int div = (healthDescriptor.getMaxHealth() - healthDescriptor.getMinHealth());
if (div != 0) {
percentage = 100 - (((int)percentOfFailedTest - healthDescriptor.getMinHealth()) * 100 / div);
} else {
percentage = 0;
}
}
return new HealthReport(percentage, "PerfPublisher : "+numberOfFailedTest+" ("+percentOfFailedTest+"%) failed tests were reported");
}
/**
* Returns whether this health report build is enabled, i.e. at least one of
* the health or failed thresholds are provided.
*
* @return <code>true</code> if health or failed thresholds are provided
*/
public boolean isEnabled() {
return healthDescriptor.isHealthAnalyse();
}
}