001 package jp.osdl.jbento2.analyzer; 002 003 import java.text.DecimalFormat; 004 import java.util.Iterator; 005 006 007 public class ResponseTimeBuilder { 008 009 private SampleList samples; 010 private DecimalFormat format = new DecimalFormat("#0.00"); 011 012 public ResponseTimeBuilder(SampleList samples) { 013 this.samples = samples; 014 } 015 016 public String build() { 017 TextTable tt = new TextTable(11, TextTable.ALIGN_RIGHT, ","); 018 tt.setAlign(0, TextTable.ALIGN_LEFT); 019 tt.addRow(new String[] { 020 "RequestType", "Ave.", "Var.", "S.D.", "min.", "50%", "60%", "70%", "80%", "90%", "max." 021 }); 022 tt.addSeparator("-"); 023 String[] requestTypes = SampleUtils.getRequestTypes(samples); 024 for (int i = 0; i < requestTypes.length; i++) { 025 buildRow(requestTypes[i], 026 SampleUtils.select(samples, requestTypes[i]), 027 tt); 028 } 029 tt.addSeparator("-"); 030 buildRow("TOTAL", samples, tt); 031 return tt.toString(); 032 } 033 034 private void buildRow(String label, SampleList samples, TextTable tt) { 035 Stats stats = new Stats(); 036 for (Iterator it = samples.iterator(); it.hasNext(); ) { 037 Sample sample = (Sample)it.next(); 038 stats.add(sample.getEndTime().getMillitime() - 039 sample.getStartTime().getMillitime()); 040 } 041 tt.addRow(new String[] { 042 label, 043 format.format(stats.average()), 044 format.format(stats.variance()), 045 format.format(stats.sd()), 046 String.valueOf(stats.min()), 047 String.valueOf(stats.percentile(50)), 048 String.valueOf(stats.percentile(60)), 049 String.valueOf(stats.percentile(70)), 050 String.valueOf(stats.percentile(80)), 051 String.valueOf(stats.percentile(90)), 052 String.valueOf(stats.max()), 053 }); 054 } 055 } 056