package hudson.plugins.performance.parsers; import hudson.Extension; import hudson.plugins.performance.descriptors.PerformanceReportParserDescriptor; import hudson.plugins.performance.reports.PerformanceReport; import hudson.plugins.performance.data.TaurusFinalStats; import org.kohsuke.stapler.DataBoundConstructor; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import java.io.File; /** * Parser for Taurus */ public class TaurusParser extends AbstractParser { @Extension public static class DescriptorImpl extends PerformanceReportParserDescriptor { @Override public String getDisplayName() { return "Taurus"; } } @DataBoundConstructor public TaurusParser(String glob) { super(glob); } @Override public String getDefaultGlobPattern() { return "**/*.xml"; } @Override protected PerformanceReport parse(File reportFile) throws Exception { return readFromXML(reportFile); } private PerformanceReport readFromXML(File reportFile) throws Exception { final PerformanceReport report = new PerformanceReport(); report.setReportFileName(reportFile.getName()); DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse(reportFile); doc.getDocumentElement().normalize(); Node URLNode = doc.getElementsByTagName("ReportURL").item(0); if (URLNode != null) { reportURL = URLNode.getTextContent(); } NodeList nList = doc.getElementsByTagName("Group"); for (int temp = 0; temp < nList.getLength(); temp++) { Node nNode = nList.item(temp); if (!((Element) nNode).getAttribute("label").isEmpty()) { TaurusFinalStats statusReport = getTaurusFinalStats((Element) nNode); statusReport.setLabel(((Element) nNode).getAttribute("label")); report.addSample(statusReport, false); } else { TaurusFinalStats statusReport = getTaurusFinalStats((Element) nNode); statusReport.setLabel(TaurusFinalStats.DEFAULT_TAURUS_LABEL); report.addSample(statusReport, true); } } return report; } private TaurusFinalStats getTaurusFinalStats(Element group) { final TaurusFinalStats report = new TaurusFinalStats(); report.setBytes(Long.valueOf(((Element) group.getElementsByTagName("bytes").item(0)).getAttribute("value"))); report.setFail(Integer.valueOf(((Element) group.getElementsByTagName("fail").item(0)).getAttribute("value"))); report.setSucc(Integer.valueOf(((Element) group.getElementsByTagName("succ").item(0)).getAttribute("value"))); report.setThroughput(Long.valueOf(((Element) group.getElementsByTagName("throughput").item(0)).getAttribute("value"))); report.setAverageResponseTime(Double.valueOf(((Element) group.getElementsByTagName("avg_rt").item(0)).getAttribute("value")) * 1000); // to ms NodeList perc = group.getElementsByTagName("perc"); for (int i = 0; i < perc.getLength(); i++) { Node nNode = perc.item(i); if (((Element) nNode).getAttribute("param").equals("50.0")) { report.setPerc50(Double.valueOf(((Element) nNode).getAttribute("value")) * 1000); // to ms } else if (((Element) nNode).getAttribute("param").equals("90.0")) { report.setPerc90(Double.valueOf(((Element) nNode).getAttribute("value")) * 1000); // to ms } else if (((Element) nNode).getAttribute("param").equals("0.0")) { report.setPerc0(Double.valueOf(((Element) nNode).getAttribute("value")) * 1000); // to ms } else if (((Element) nNode).getAttribute("param").equals("100.0")) { report.setPerc100(Double.valueOf(((Element) nNode).getAttribute("value")) * 1000); // to ms } } return report; } }