001    package jp.osdl.jbento2.analyzer;
002    
003    import java.text.DecimalFormat;
004    
005    public class ThroughputBuilder {
006    
007        private SampleList samples;
008        private DecimalFormat format = new DecimalFormat("#0.00");
009    
010        public ThroughputBuilder(SampleList samples) {
011            this.samples = samples;
012        }
013        
014        public String build() {
015            TextTable tt = new TextTable(5, TextTable.ALIGN_RIGHT, ",");
016            tt.setAlign(0, TextTable.ALIGN_LEFT);
017            tt.addRow(new String[] {
018                "RequestType", "tps", "tpm", "success", "error"
019            });
020            tt.addSeparator("-");
021            long start =
022                SampleUtils.getMinEndTime(samples).getMillitime();
023    
024            String[] requestTypes = SampleUtils.getRequestTypes(samples);
025            for (int i = 0; i < requestTypes.length; i++) {
026                buildRow(requestTypes[i], 
027                        SampleUtils.select(samples, requestTypes[i]), start, tt);
028            }
029            tt.addSeparator("-");
030            buildRow("TOTAL", samples, start, tt);
031            return tt.toString();
032        }
033    
034        private void buildRow(String label, SampleList sampleList,
035                              long start, TextTable tt) {
036            sampleList.sortByEndTime();
037            Stats stats = new Stats();
038            long termEnd = start + 1000;
039            int count = 0;
040            int successCount = 0;
041            int errorCount = 0;
042            for (int i = 0; i < sampleList.size(); i++) {
043                Sample sample =sampleList.get(i); 
044                if (sample.getEndTime().getMillitime() >= termEnd) {
045                    stats.add(count);
046                    count = 0;
047                    termEnd += 1000;
048                }
049                if (!sample.isError()) {
050                    count++;
051                    successCount++;
052                } else {
053                    errorCount++;   
054                }
055            }
056            tt.addRow(new String[] {
057                label,
058                format.format(stats.average()),
059                format.format(stats.average() * 60),
060                String.valueOf(successCount),
061                String.valueOf(errorCount)
062            });
063        }
064    }
065