001    package jp.osdl.jbento2.analyzer;
002    
003    import java.text.DateFormat;
004    import java.text.SimpleDateFormat;
005    import java.util.Date;
006    import java.util.Iterator;
007    
008    public class ThroughputTimeLineBuilder {
009    
010        private SampleList samples;
011        private DateFormat formatter = new SimpleDateFormat("HH:mm:ss");
012    
013        public ThroughputTimeLineBuilder(SampleList samples) {
014            this.samples = samples;
015        }
016        
017        public String build() {
018            long start =
019                SampleUtils.getMinEndTime(samples).getMillitime();
020            long end = SampleUtils.getMaxEndTime(samples).getMillitime();
021            
022            int durationSeconds = (int) (end - start) / 1000  + 1;
023            
024            int[] success = new int[durationSeconds];
025            int[] error = new int[durationSeconds];
026            
027            Iterator ite = samples.iterator();
028            while (ite.hasNext()) {
029                Sample sample = (Sample) ite.next();
030                int index = (int) (sample.getEndTime().getMillitime() - start) / 1000;
031                if (sample.isError()) {
032                    error[index]++;
033                } else {
034                    success[index]++;
035                }
036            }
037            
038            TextTable tt = new TextTable(3, TextTable.ALIGN_RIGHT, ",");
039            tt.setAlign(0, TextTable.ALIGN_LEFT);
040            tt.addRow(new String[] {
041                "Time", "success", "error"
042            });
043            tt.addSeparator("-");
044    
045            for (int i = 0; i < durationSeconds; i++) {
046                tt.addRow(new String[] {
047                        formatter.format(new Date(start + i * 1000)),
048                        Integer.toString(success[i]),
049                        Integer.toString(error[i])});  
050            }
051            return tt.toString();
052        }
053    }
054