提交 39cb6f70 编写于 作者: U unknown 提交者: Tom Huybrechts

[HUDSON-4621] limit amount of history shown for junit results

上级 6aa6b171
......@@ -25,9 +25,20 @@ package hudson.tasks.junit;
import hudson.model.AbstractBuild;
import hudson.model.Hudson;
import hudson.tasks.test.TestResult;
import hudson.tasks.test.TestObject;
import hudson.util.*;
import hudson.tasks.test.TestResult;
import hudson.util.ChartUtil;
import hudson.util.ColorPalette;
import hudson.util.DataSetBuilder;
import hudson.util.Graph;
import hudson.util.ShiftedCategoryAxis;
import hudson.util.StackedAreaRenderer2;
import java.awt.Color;
import java.awt.Paint;
import java.util.ArrayList;
import java.util.List;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
......@@ -38,10 +49,8 @@ import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.StackedAreaRenderer;
import org.jfree.data.category.CategoryDataset;
import org.jfree.ui.RectangleInsets;
import java.awt.*;
import java.util.ArrayList;
import java.util.List;
import org.kohsuke.stapler.Stapler;
import org.kohsuke.stapler.StaplerRequest;
/**
* History of {@link hudson.tasks.test.TestObject} over time.
......@@ -66,16 +75,21 @@ public class History {
return false;
}
public List<TestResult> getList(int start, int end) {
List<TestResult> list = new ArrayList<TestResult>();
end = Math.min(end, testObject.getOwner().getParent().getBuilds().size());
for (AbstractBuild<?,?> b: testObject.getOwner().getParent().getBuilds().subList(start, end)) {
if (b.isBuilding()) continue;
TestResult o = testObject.getResultInBuild(b);
if (o != null) {
list.add(o);
}
}
return list;
}
public List<TestResult> getList() {
List<TestResult> list = new ArrayList<TestResult>();
for (AbstractBuild<?,?> b: testObject.getOwner().getParent().getBuilds()) {
if (b.isBuilding()) continue;
TestResult o = testObject.getResultInBuild(b);
if (o != null) {
list.add(o);
}
}
return list;
return getList(0, testObject.getOwner().getParent().getBuilds().size());
}
/**
......@@ -83,9 +97,20 @@ public class History {
*/
public Graph getDurationGraph() {
return new GraphImpl("seconds") {
protected DataSetBuilder<String, ChartLabel> createDataSet() {
DataSetBuilder<String, ChartLabel> data = new DataSetBuilder<String, ChartLabel>();
for (hudson.tasks.test.TestResult o: getList()) {
List<TestResult> list;
try {
list = getList(
Integer.parseInt(Stapler.getCurrentRequest().getParameter("start")),
Integer.parseInt(Stapler.getCurrentRequest().getParameter("end")));
} catch (NumberFormatException e) {
list = getList();
}
for (hudson.tasks.test.TestResult o: list) {
data.add(((double) o.getDuration()) / (1000), "", new ChartLabel(o) {
@Override
public Color getColor() {
......@@ -100,6 +125,7 @@ public class History {
}
return data;
}
};
}
......@@ -111,7 +137,16 @@ public class History {
protected DataSetBuilder<String, ChartLabel> createDataSet() {
DataSetBuilder<String, ChartLabel> data = new DataSetBuilder<String, ChartLabel>();
for (TestResult o: getList()) {
List<TestResult> list;
try {
list = getList(
Integer.parseInt(Stapler.getCurrentRequest().getParameter("start")),
Integer.parseInt(Stapler.getCurrentRequest().getParameter("end")));
} catch (NumberFormatException e) {
list = getList();
}
for (TestResult o: list) {
data.add(o.getPassCount(), "2Passed", new ChartLabel(o));
data.add(o.getFailCount(), "1Failed", new ChartLabel(o));
data.add(o.getSkipCount(), "0Skipped", new ChartLabel(o));
......@@ -125,7 +160,7 @@ public class History {
private final String yLabel;
protected GraphImpl(String yLabel) {
super(testObject.getOwner().getTimestamp(),600,300);
super(-1,600,300); // cannot use timestamp, since ranges may change
this.yLabel = yLabel;
}
......
......@@ -35,7 +35,7 @@ THE SOFTWARE.
<td class="pane-header" style="width:5em">${%Test Result}</td>
</tr>
<tbody>
<j:forEach var="b" items="${it.owner.parent.builds}">
<j:forEach var="b" items="${it.owner.parent.builds}" begin="${start}" end="${end}">
<j:set var="test" value="${it.getResultInBuild(b)}"/>
<j:if test="${test != null}">
<tr>
......
......@@ -34,7 +34,7 @@ THE SOFTWARE.
<td class="pane-header" style="width:5em">${%Total}</td>
</tr>
<tbody>
<j:forEach var="b" items="${it.owner.parent.builds}">
<j:forEach var="b" items="${it.owner.parent.builds}" begin="${start}" end="${end}">
<j:set var="p" value="${it.getResultInBuild(b)}"/>
<j:if test="${p != null}">
<tr>
......
......@@ -25,18 +25,20 @@ THE SOFTWARE.
<!-- Displays the chart that show how long builds are taking -->
<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define" xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/lib/form" xmlns:i="jelly:fmt">
<l:layout title="${%title(it.testObject.displayName)}">
<j:set var="start" value="${request.getParameter('start')?:0}"/>
<j:set var="end" value="${request.getParameter('end')?:start+24}"/>
<j:set var="rangeParameters" value="start=${start}&amp;end=${end+1}"/>
<script type="text/javascript">
function setCount() {
document.getElementById("graph").src = "countGraph/png";
document.getElementById("graph").lazyMap = "countGraph/map";
document.getElementById("graph").src = "countGraph/png?${rangeParameters}";
document.getElementById("graph").lazyMap = "countGraph/map?${rangeParameters}";
document.getElementById("graph").alt = "[Count graph]";
document.getElementById("duration-link").style.display = "";
document.getElementById("count-link").style.display = "none";
}
function setDuration() {
document.getElementById("graph").src = "durationGraph/png"
document.getElementById("graph").lazyMap = "durationGraph/map"
document.getElementById("graph").src = "durationGraph/png?${rangeParameters}"
document.getElementById("graph").lazyMap = "durationGraph/map?${rangeParameters}"
document.getElementById("graph").alt = "[Duration graph]";
document.getElementById("duration-link").style.display = "none";
document.getElementById("count-link").style.display = "";
......@@ -49,7 +51,7 @@ THE SOFTWARE.
<j:choose>
<j:when test="${it.historyAvailable()}">
<div align="center">
<img id="graph" src="durationGraph/png" width="600" height="300" lazymap="durationGraph/map" alt="[Duration graph]"/>
<img id="graph" src="durationGraph/png?${rangeParameters}" width="600" height="300" lazymap="durationGraph/map?${rangeParameters}" alt="[Duration graph]"/>
</div>
<div align="center">
show
......@@ -62,6 +64,15 @@ THE SOFTWARE.
</j:otherwise>
</j:choose>
<st:include from="${it.testObject}" it="${it.testObject}" page="list.jelly" optional="true"/>
<div>
<j:if test="${start > 0}">
<a href="${app.rootUrl}${it.testObject.owner.url}testReport${it.testObject.url}/history${(start-25)>0?'?start='+(start-25):''}">${%Newer}</a>
</j:if>
 
<j:if test="${it.testObject.owner.project.builds.size() > end}">
<a href="${app.rootUrl}${it.testObject.owner.url}testReport${it.testObject.url}/history?start=${end+1}">${%Older}</a>
</j:if>
</div>
</l:main-panel>
</l:layout>
</j:jelly>
\ No newline at end of file
......@@ -34,7 +34,7 @@ THE SOFTWARE.
<td class="pane-header" style="width:5em">${%Total}</td>
</tr>
<tbody>
<j:forEach var="b" items="${it.owner.parent.builds}">
<j:forEach var="b" items="${it.owner.parent.builds}" begin="${start}" end="${end}">
<j:set var="p" value="${it.getResultInBuild(b)}"/>
<j:if test="${p != null}">
<tr>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册