001 package jp.osdl.jbento2.analyzer;
002
003 import java.io.IOException;
004 import java.io.Reader;
005 import java.util.Iterator;
006 import java.util.List;
007 import java.util.regex.Matcher;
008 import java.util.regex.Pattern;
009
010 import org.apache.commons.io.IOUtils;
011
012 public class JMeterSampleParser implements SampleParser {
013
014 private static Pattern timeStampPattern =
015 Pattern.compile("timeStamp=\"(\\d+)\"");
016 private static Pattern timePattern =
017 Pattern.compile("time=\"(\\d+)\"");
018 private static Pattern labelPattern =
019 Pattern.compile("label=\"([^\"]+)\"");
020 private static Pattern threadNamePattern =
021 Pattern.compile("threadName=\"([^\"]+)\"");
022 private static Pattern responseCodePattern =
023 Pattern.compile("responseCode=\"([^\"]+)\"");
024
025 public SampleList parse(Reader reader) throws IOException {
026 List lines = IOUtils.readLines(reader);
027 SampleList result = new SampleList();
028 for (Iterator it = lines.iterator(); it.hasNext(); ) {
029 String line = (String)it.next();
030 Sample s = new Sample();
031 try {
032 Matcher m = null;
033
034 m = timeStampPattern.matcher(line);
035 m.find();
036 long timeStamp = Long.parseLong(m.group(1));
037 s.addTime(new Time(timeStamp));
038
039 m = timePattern.matcher(line);
040 m.find();
041 s.addTime(new Time(timeStamp + Long.parseLong(m.group(1))));
042 m = threadNamePattern.matcher(line);
043
044 m.find();
045 s.setClientId(m.group(1));
046 m = labelPattern.matcher(line);
047
048 m.find();
049 s.setRequestType(m.group(1));
050 m = responseCodePattern.matcher(line);
051
052 m.find();
053 s.setError(Integer.parseInt(m.group(1)) >= 400);
054 result.add(s);
055 } catch (Exception ex) {
056 // incomplete line - JMeter was killed.
057 continue;
058 }
059 }
060 return result;
061 }
062 }