001 package jp.osdl.jbento2.analyzer;
002
003 import java.io.IOException;
004 import java.io.InputStream;
005 import java.io.Reader;
006 import java.util.Iterator;
007 import java.util.List;
008 import java.util.Properties;
009
010 import org.apache.commons.io.IOUtils;
011
012 public class CsvSampleParser implements SampleParser {
013
014 public SampleList parse(Reader reader) throws IOException {
015 Properties prop = loadProperties();
016
017 int startTimePosition = Integer.parseInt(prop.getProperty("startTime"));
018 int responseTimePosition = Integer.parseInt(prop.getProperty("responseTime"));
019 int requestTypePosition = Integer.parseInt(prop.getProperty("requestType"));
020 int responseCodePosition = Integer.parseInt(prop.getProperty("responseCode"));
021 int clientIdPosition = Integer.parseInt(prop.getProperty("clientId"));
022
023 List lines = IOUtils.readLines(reader);
024 SampleList result = new SampleList();
025 for (Iterator it = lines.iterator(); it.hasNext(); ) {
026 String line = (String)it.next();
027 Sample s = new Sample();
028 try {
029 String[] items = line.split(",");
030 s.setClientId(items[clientIdPosition]);
031 s.setRequestType(items[requestTypePosition]);
032
033 long startTime = Long.parseLong(items[startTimePosition]);
034 s.addTime(new Time(startTime));
035 long responseTime = Long.parseLong(items[responseTimePosition]);
036 s.addTime(new Time(startTime + responseTime));
037
038 s.setError(Integer.parseInt(items[responseCodePosition]) >= 400);
039
040 } catch (Exception ex) {
041 // incomplete line - JMeter was killed.
042 continue;
043 }
044 result.add(s);
045 }
046 return result;
047 }
048
049 private Properties loadProperties() throws IOException {
050 Properties p = new Properties();
051 InputStream in = null;
052 try {
053 in = getClass().getResourceAsStream("csv.properties");
054 p.load(in);
055 } catch (IOException ex) {
056 throw ex;
057 } finally {
058 IOUtils.closeQuietly(in);
059 }
060 return p;
061 }
062 }