Author: [email protected]
Date: Tue Mar 22 14:26:56 2011
New Revision: 893

Log:
[AMDATU-332] Fixed proper working of -omit

Modified:
   
trunk/etc/performancetest/src/main/java/org/amdatu/test/performance/analysis/ReportSummary.java
   
trunk/etc/performancetest/src/main/java/org/amdatu/test/performance/analysis/Statistics.java
   
trunk/etc/performancetest/src/main/java/org/amdatu/test/performance/analysis/ZSamples.java
   
trunk/etc/performancetest/src/main/java/org/amdatu/test/performance/main/Main.java
   
trunk/etc/performancetest/src/main/java/org/amdatu/test/performance/runtest/AmdatuLauncher.java
   
trunk/etc/performancetest/src/main/java/org/amdatu/test/performance/runtest/JMeterRunner.java

Modified: 
trunk/etc/performancetest/src/main/java/org/amdatu/test/performance/analysis/ReportSummary.java
==============================================================================
--- 
trunk/etc/performancetest/src/main/java/org/amdatu/test/performance/analysis/ReportSummary.java
     (original)
+++ 
trunk/etc/performancetest/src/main/java/org/amdatu/test/performance/analysis/ReportSummary.java
     Tue Mar 22 14:26:56 2011
@@ -34,14 +34,12 @@
  */
 public class ReportSummary {
     private String m_resultDir;
-    private int m_omit;
     private List<JMeterPlanReport> m_reports = new 
ArrayList<JMeterPlanReport>();
-    
-    public ReportSummary(String resultDir, int omit) {
+
+    public ReportSummary(String resultDir) {
         m_resultDir = resultDir;
-        m_omit = omit;
     }
-    
+
     public void mergeAndAdd(JMeterResultsParser x, JMeterResultsParser y) 
throws IOException, MathException {
         JMeterPlanReport report = new JMeterPlanReport(x.getName());
         Map<String, List<XYSample>> resultsX = x.getResults();
@@ -49,13 +47,13 @@
         for (String key : resultsX.keySet()) {
             List<XYSample> samplesX = resultsX.get(key);
             List<XYSample> samplesY = resultsY.get(key);
-            ZSamples mergedReport = new ZSamples(m_resultDir, samplesX, 
samplesY, m_omit);
+            ZSamples mergedReport = new ZSamples(m_resultDir, samplesX, 
samplesY);
             report.addSampleResult(mergedReport);
         }
         report.setThroughput(x.getThroughput(), y.getThroughput());
         m_reports.add(report);
     }
-    
+
     public List<JMeterPlanReport> getReports() {
         return m_reports;
     }
@@ -96,11 +94,15 @@
             pw.println("<style type=\"text/css\">");
             pw.println("body { background:#19233E; font-family: Arial, 
Helvetica, sans-serif; font-size: 14px; color: #ffffff;}");
             pw.println("h1, h2 { margin: 0; font-weight: normal; color: 
#ffffff;}");
-            pw.println("table { border-bottom: 1px solid #24130F; border-left: 
1px solid #24130F; border-right: 1px solid #24130F; background: #323C52;}");
+            pw.println("table { border-top: 1px solid #24130F; border-bottom: 
1px solid #24130F; border-left: 1px solid #24130F; border-right: 1px solid 
#24130F; background: #323C52;}");
             pw.println("td.good {background: #325552;}");
             pw.println("td.reallygood {background: #007F0E;}");
             pw.println("td.bad {background: #5D3C52;}");
             pw.println("td.reallybad {background: #FF0000;}");
+            pw.println("table.results th {width:120px;}");
+            pw.println("table.results td {text-align:center;}");
+            pw.println("th {border-right: 1px solid #24130F; background: 
#323C62;}");
+            pw.println("td {border-top: 1px solid #24130F; border-right: 1px 
solid #24130F; }");
             pw.println("h1 { font-size: 44px; }");
             pw.println("h2 { font-size: 18px; }");
             pw.println("</style>");
@@ -117,71 +119,71 @@
                 pw.println("<tr><td>Throughput X</td><td>" + 
report.getThroughputX() + " req/s</td></tr>");
                 pw.println("<tr><td>Throughput Y</td><td>" + 
report.getThroughputY() + " req/s</td></tr></table>");
                 pw.println("<br/>");
-                pw.println("<table>");
-                
+                pw.println("<table class=\"results\">");
+
                 // Print headers
                 pw.println("<tr><th/>");
                 for (ZSamples sample : report.getSamples()) {
                     pw.println("<th>" + sample.name+ "</th>");
                 }
                 pw.println("</tr>");
-                
+
                 // Sample mean size (m)
                 pw.println("<tr><td>m</td>");
                 for (ZSamples sample : report.getSamples()) {
                     pw.println("<td>" + sample.sampleMeanSize + "</td>");
                 }
                 pw.println("</tr>");
-                
+
                 // Sample size (n)
                 pw.println("<tr><td>n</td>");
                 for (ZSamples sample : report.getSamples()) {
                     pw.println("<td>" + sample.sampleSize + "</td>");
                 }
                 pw.println("</tr>");
-                
+
                 // Mean of X
                 pw.println("<tr><td>M<sub>x</sub></td>");
                 for (ZSamples sample : report.getSamples()) {
                     pw.println("<td>" + round(sample.sampleMeanX) + "</td>");
                 }
                 pw.println("</tr>");
-                
+
                 // Mean of Y
                 pw.println("<tr><td>M<sub>y</sub></td>");
                 for (ZSamples sample : report.getSamples()) {
                     pw.println("<td>" + round(sample.sampleMeanY) + "</td>");
                 }
                 pw.println("</tr>");
-                
+
                 // Mean of Z
                 pw.println("<tr><td>M<sub>z</sub></td>");
                 for (ZSamples sample : report.getSamples()) {
                     pw.println("<td>" + round(sample.sampleMean) + "</td>");
                 }
                 pw.println("</tr>");
-                
+
                 // Standard deviation of Z
                 pw.println("<tr><td>S<sub>z</sub></td>");
                 for (ZSamples sample : report.getSamples()) {
                     pw.println("<td>" + round(sample.sampleSD) + "</td>");
                 }
                 pw.println("</tr>");
-                
+
                 // t-value of Z
                 pw.println("<tr><td>t<sub>z</sub></td>");
                 for (ZSamples sample : report.getSamples()) {
                     pw.println("<td>" + round(sample.t) + "</td>");
                 }
                 pw.println("</tr>");
-                
+
                 // Probability of t-value
                 pw.println("<tr><td>Pt<sub>z</sub></td>");
                 for (ZSamples sample : report.getSamples()) {
                     pw.println("<td>" + round(sample.p) + "</td>");
                 }
                 pw.println("</tr>");
-                
+
                 // [power] difference between X and Y
                 pw.println("<tr><td>D<sub>z</sub></td>");
                 for (ZSamples sample : report.getSamples()) {
@@ -190,10 +192,10 @@
                     } else {
                         pw.println(bad(round(sample.D)));
                     }
-                    
+
                 }
                 pw.println("</tr>");
-                
+
                 // Percentile [power] difference between X and Y
                 pw.println("<tr><td>&Delta;<sub>z</sub></td>");
                 for (ZSamples sample : report.getSamples()) {
@@ -208,21 +210,21 @@
                     }
                 }
                 pw.println("</tr>");
-                
+
                 // H0 hypothesis
                 pw.println("<tr><td>H<sub>0</sub></td>");
                 for (ZSamples sample : report.getSamples()) {
                     pw.println("<td>" + (sample.H0 ? "accepted" : "rejected") 
+ "</td>");
                 }
                 pw.println("</tr>");
-                
+
                 // H0 hypothesis power
                 pw.println("<tr><td>H<sub>0</sub> power</td>");
                 for (ZSamples sample : report.getSamples()) {
                     pw.println("<td>" + sample.power + "</td>");
                 }
                 pw.println("</tr>");
-                
+
                 // Success rate X
                 pw.println("<tr><td>Success rate X</td>");
                 for (ZSamples sample : report.getSamples()) {
@@ -233,7 +235,7 @@
                     }
                 }
                 pw.println("</tr>");
-                
+
                 // Success rate Y
                 pw.println("<tr><td>Success rate Y</td>");
                 for (ZSamples sample : report.getSamples()) {
@@ -244,7 +246,7 @@
                     }
                 }
                 pw.println("</tr>");
-               
+
                 pw.println("</table></p>");
             }    
             pw.println("</body></html>");
@@ -261,12 +263,12 @@
             }
         }
     }
-    
+
     private String toMegaBytes(long bytes) {
         long mb = bytes/(1024*1024);
         return mb + " Mb";
     }
-    
+
     private void addLegend(PrintWriter pw) {
         pw.println("<h2>Legend</h2>");
         pw.println("Version X represents the new version, compared against the 
original version Y</br/><p>");
@@ -287,7 +289,7 @@
         pw.println("<tr>" + reallyBad("really bad") + "</tr></table>");
         pw.println("</p>");
     }
-    
+
     private String round(double d) {
         DecimalFormat df = new DecimalFormat("####0.00");
         return df.format(d);
@@ -297,15 +299,15 @@
     private String good(Object value) {
         return "<td class=\"good\">" + value + "</td>";
     }
-    
+
     private String bad(Object value) {
         return "<td class=\"bad\">" + value + "</td>";
     }
-    
+
     private String reallyGood(Object value) {
         return "<td class=\"reallygood\">" + value + "</td>";
     }
-    
+
     private String reallyBad(Object value) {
         return "<td class=\"reallybad\">" + value + "</td>";
     }

Modified: 
trunk/etc/performancetest/src/main/java/org/amdatu/test/performance/analysis/Statistics.java
==============================================================================
--- 
trunk/etc/performancetest/src/main/java/org/amdatu/test/performance/analysis/Statistics.java
        (original)
+++ 
trunk/etc/performancetest/src/main/java/org/amdatu/test/performance/analysis/Statistics.java
        Tue Mar 22 14:26:56 2011
@@ -45,9 +45,9 @@
         m_resultsDir = resultsDir;
     }
     
-    public void analyze(int omit) throws ParserConfigurationException, 
SAXException, IOException, MathException {
+    public void analyze() throws ParserConfigurationException, SAXException, 
IOException, MathException {
         // Analyze
-        m_report = new ReportSummary(m_resultsDir, omit);
+        m_report = new ReportSummary(m_resultsDir);
         for (String sample : getJMeterReports()) {
             File reportX = new File(sample + "X");
             File reportY = new File(sample + "Y");

Modified: 
trunk/etc/performancetest/src/main/java/org/amdatu/test/performance/analysis/ZSamples.java
==============================================================================
--- 
trunk/etc/performancetest/src/main/java/org/amdatu/test/performance/analysis/ZSamples.java
  (original)
+++ 
trunk/etc/performancetest/src/main/java/org/amdatu/test/performance/analysis/ZSamples.java
  Tue Mar 22 14:26:56 2011
@@ -53,11 +53,9 @@
     int sampleMeanSize = 0;
     int sampleSize = 0;
     private String m_resultsDir;
-    private int m_omit;
 
-    public ZSamples(String resultsDir, List<XYSample> x, List<XYSample> y, int 
omit) throws IOException, MathException {
+    public ZSamples(String resultsDir, List<XYSample> x, List<XYSample> y) 
throws IOException, MathException {
         m_resultsDir = resultsDir;
-        m_omit = omit;
 
         preProcess(x, y);
 
@@ -166,7 +164,7 @@
         successRateY = 0;
         double meanX = 0, meanY = 0;
         int count = 0;
-        for (int i=m_omit; i<Math.min(x.size(), y.size()); i++) {
+        for (int i=0; i<Math.min(x.size(), y.size()); i++) {
             if (count > 0 && count == newSampleSize) {
                 m_samplesX.add(meanX / newSampleSize);
                 m_samplesY.add(meanY / newSampleSize);
@@ -190,7 +188,7 @@
             meanY = 0;
         }
     
-        successRateX /= (x.size() - m_omit);
-        successRateY /= (y.size() - m_omit);        
+        successRateX /= Math.min(x.size(), y.size());
+        successRateY /= Math.min(x.size(), y.size());        
     }
 }

Modified: 
trunk/etc/performancetest/src/main/java/org/amdatu/test/performance/main/Main.java
==============================================================================
--- 
trunk/etc/performancetest/src/main/java/org/amdatu/test/performance/main/Main.java
  (original)
+++ 
trunk/etc/performancetest/src/main/java/org/amdatu/test/performance/main/Main.java
  Tue Mar 22 14:26:56 2011
@@ -34,7 +34,7 @@
  * @author ivol
  */
 public class Main {
-    private final static int TEST_LOOPS = 4;
+    private final static int TEST_LOOPS = 1;
     
     private static String VERBOSE_ARG = "-verbose";
     private static String ANALYZE_ARG = "-analyze";
@@ -167,14 +167,14 @@
                         }
                         try {
                             launcherX.start();
-                            jmeterX.run();
+                            jmeterX.run(omit);
                         } finally {
                             launcherX.stop();
                         }
                         
                         try {
                             launcherY.start();
-                            jmeterY.run();
+                            jmeterY.run(omit);
                         } finally {
                             launcherY.stop();
                         }
@@ -183,7 +183,7 @@
                             int h0Count = 0;
                             int h0Accepted = 0;
                             Statistics stats = new Statistics(resultsDir);
-                            stats.analyze(omit);
+                            stats.analyze();
                             stats.printHtml(n);
                             for (JMeterPlanReport report : 
stats.getReport().getReports()) {
                                 for (ZSamples sample : report.getSamples()) {
@@ -211,11 +211,10 @@
                 if (!arguments.containsKey(RESULTSDIR_ARG)) {
                     printUsage();
                 } else {
-                    int omit = arguments.containsKey(OMIT_ARG) ? 
Integer.parseInt(arguments.get(OMIT_ARG).toString()) : 0;
                     String resultsDir = 
arguments.get(RESULTSDIR_ARG).toString();
                     Statistics stats = new Statistics(resultsDir);
-                    stats.analyze(omit);
-                    stats.print(n);
+                    stats.analyze();
+                    stats.print(n-1);
                     System.out.println("Amdatu performance test analysis 
completed.");
                 }
             }

Modified: 
trunk/etc/performancetest/src/main/java/org/amdatu/test/performance/runtest/AmdatuLauncher.java
==============================================================================
--- 
trunk/etc/performancetest/src/main/java/org/amdatu/test/performance/runtest/AmdatuLauncher.java
     (original)
+++ 
trunk/etc/performancetest/src/main/java/org/amdatu/test/performance/runtest/AmdatuLauncher.java
     Tue Mar 22 14:26:56 2011
@@ -99,8 +99,8 @@
         }
         
         // For safety, additional wait for 5 seconds
-        System.out.println("Amdatu seems up and running, waiting another 3 
seconds...");
-        Thread.sleep(3000);
+        System.out.println("Amdatu seems up and running, waiting another 5 
seconds...");
+        Thread.sleep(5000);
         
         long diff = System.currentTimeMillis() - before;
         System.out.println("Amdatu startup completed in " + diff + " ms, 
running JMeter test plans");

Modified: 
trunk/etc/performancetest/src/main/java/org/amdatu/test/performance/runtest/JMeterRunner.java
==============================================================================
--- 
trunk/etc/performancetest/src/main/java/org/amdatu/test/performance/runtest/JMeterRunner.java
       (original)
+++ 
trunk/etc/performancetest/src/main/java/org/amdatu/test/performance/runtest/JMeterRunner.java
       Tue Mar 22 14:26:56 2011
@@ -16,17 +16,22 @@
  */
 package org.amdatu.test.performance.runtest;
 
+import java.io.BufferedWriter;
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
+import java.io.FileWriter;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.RandomAccessFile;
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.List;
 
 import org.amdatu.test.performance.Utils;
+import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
+import org.apache.commons.io.LineIterator;
 
 /**
  * This class is responsible to run all JMeter plans present in the configured 
directory.
@@ -37,13 +42,14 @@
     public final static String SAMPLES = "-samples.";
     public final static String SAMPLES_X = SAMPLES + "X";
     public final static String SAMPLES_Y = SAMPLES + "Y";
-    
+
     private File m_rootTmpDir;
     private String m_jmeterPlansDir;
     private String m_resultsDir;
     private String m_version;
     private Process m_jmeterProcess;
-    
+    private File m_sampleFile;
+
     public JMeterRunner(String jmeterPlansDir, String version, String 
resultsDir, File rootTmpDir) {
         m_jmeterPlansDir = jmeterPlansDir;
         m_version = version;
@@ -51,18 +57,18 @@
         m_rootTmpDir = rootTmpDir;
     }
 
-    public void run() throws FileNotFoundException, IOException, 
InterruptedException {
+    public void run(int omit) throws FileNotFoundException, IOException, 
InterruptedException {
         File resultDir = new File(m_resultsDir);
         File jmeterLogFile = new File(resultDir, "jmeter.log");
-        
+
         File jmeterDir = installJMeter();
         jmeterDir = new File(jmeterDir, "bin");
         File plans = new File(m_jmeterPlansDir);
-        
+
         for (File jmeterPlan : plans.listFiles()) {
             if (jmeterPlan.isFile()) {
                 // Run the JMeter plan!
-                File sampleFile = new File(resultDir, jmeterPlan.getName() + 
SAMPLES + m_version);
+                m_sampleFile = new File(resultDir, jmeterPlan.getName() + 
SAMPLES + m_version);
                 List<String> command = new ArrayList<String>();
                 command.add("cmd.exe");
                 command.add("/C");
@@ -71,7 +77,11 @@
                 command.add("-t");
                 command.add(jmeterPlan.getAbsolutePath());
                 command.add("-l");
-                command.add(sampleFile.getAbsolutePath());
+                if (omit <= 0) {
+                    command.add(m_sampleFile.getAbsolutePath());
+                } else {
+                    command.add(m_sampleFile.getAbsolutePath()+ ".tmp");
+                }
                 command.add("-j");
                 command.add(jmeterLogFile.getAbsolutePath());
                 ProcessBuilder processBuilder = new ProcessBuilder(command);
@@ -79,8 +89,13 @@
                 System.out.println("Running JMeter plan '" + 
jmeterPlan.getAbsolutePath() + "' from directory '" + 
jmeterDir.getAbsolutePath() + "'");
                 m_jmeterProcess = processBuilder.start();
                 Utils.dispatchOutput(m_jmeterProcess);
-                
+
                 m_jmeterProcess.waitFor();
+
+                if (omit > 0) {
+                    merge(m_sampleFile.getAbsolutePath()+ ".tmp", omit);
+                    new File(m_sampleFile.getAbsolutePath()+ ".tmp").delete();
+                }
             }
         }
     }
@@ -96,7 +111,7 @@
                 is = url.openStream();
                 File jmeterFile = new File(m_rootTmpDir, "jmeter-2.4.zip");
                 IOUtils.copy(is, new FileOutputStream(jmeterFile));
-                
+
                 // And unzip
                 File target = new File(m_rootTmpDir, "jmeter-2.4");
                 Utils.unzip(jmeterFile, target);
@@ -110,4 +125,59 @@
             return jmeter;
         }
     }
+
+    private void merge(String file, int omit) throws IOException {
+        // Merge the results of this temporary file in the large results file, 
but omitting omit results
+        File targetFile = new File(file.replace(".tmp", ""));
+        boolean isNewFile = !targetFile.exists();
+        LineIterator iter = FileUtils.lineIterator(new File(file));
+        int count = 0;
+        BufferedWriter bw = new BufferedWriter(new FileWriter(targetFile, 
true));
+        String eol = System.getProperty("line.separator");
+        if (!isNewFile) {
+            removeEndTestResults();
+        }
+        try {
+            while (iter.hasNext()) {
+                String line = iter.next();
+                boolean write  = false;
+                if (line.startsWith("<httpSample") || 
line.startsWith("</testResults>")) {
+                    count++;
+                    if (count >= omit) {
+                        write = true;
+                    }
+                } else if (isNewFile) {
+                    write = true; 
+                }
+                if (write) {
+                    bw.append(line + eol);
+                }
+            }
+        } finally {
+            iter.close();
+            bw.flush();
+            bw.close();
+        }
+    }
+
+    public void removeEndTestResults() throws IOException {
+        long length = m_sampleFile.length();
+        long offset = m_sampleFile.length()-1;
+        boolean endFound = false;
+        RandomAccessFile fis = new RandomAccessFile(m_sampleFile, "rw");
+        try {
+            while(!endFound && offset >= 0) {
+                offset--;
+                byte[] bytes = new byte[(int) (length-offset)];
+                fis.seek(offset);
+                fis.read(bytes, 0, (int) (length-offset));
+                endFound = new String(bytes, 
"UTF-8").indexOf("</testResults>") != -1;
+                if (endFound) {
+                    fis.setLength(offset);           
+                }
+            }
+        } finally {
+            fis.close();
+        }
+    }
 }
_______________________________________________
Amdatu-commits mailing list
[email protected]
http://lists.amdatu.org/mailman/listinfo/amdatu-commits

Reply via email to