Coverage Report - kg.apc.jmeter.reporters.ConsoleStatusLogger
 
Classes in this File Line Coverage Branch Coverage Complexity
ConsoleStatusLogger
97%
40/41
71%
10/14
1.7
ConsoleStatusLogger$JMeterLoggerOutputStream
100%
4/4
N/A
1.7
 
 1  
 // TODO: work out clear distributed mode behavior
 2  
 // TODO: limit precision for error rate
 3  
 package kg.apc.jmeter.reporters;
 4  
 
 5  
 import java.io.PrintStream;
 6  
 import java.io.Serializable;
 7  
 import org.apache.jmeter.JMeter;
 8  
 import org.apache.jmeter.engine.event.LoopIterationEvent;
 9  
 import org.apache.jmeter.engine.util.NoThreadClone;
 10  
 import org.apache.jmeter.reporters.AbstractListenerElement;
 11  
 import org.apache.jmeter.samplers.SampleEvent;
 12  
 import org.apache.jmeter.samplers.SampleListener;
 13  
 import org.apache.jmeter.samplers.SampleResult;
 14  
 import org.apache.jmeter.testelement.TestListener;
 15  
 import org.apache.jmeter.testelement.TestStateListener;
 16  
 import org.apache.jmeter.threads.JMeterContextService;
 17  
 import org.apache.jorphan.logging.LoggingManager;
 18  
 import org.apache.log.Logger;
 19  
 
 20  12
 public class ConsoleStatusLogger extends AbstractListenerElement
 21  
         implements SampleListener, Serializable,
 22  
         NoThreadClone, TestStateListener {
 23  
 
 24  1
     private static final Logger log = LoggingManager.getLoggerForClass();
 25  
     private PrintStream out;
 26  9
     private long cur = 0;
 27  
     private int count;
 28  
     private int threads;
 29  
     private int sumRTime;
 30  
     private int sumLatency;
 31  
     private int errors;
 32  
     private long begin;
 33  
 
 34  9
     private static class JMeterLoggerOutputStream extends PrintStream {
 35  
 
 36  
         public JMeterLoggerOutputStream(Logger log) {
 37  3
             super(System.out);
 38  3
         }
 39  
 
 40  
         @Override
 41  
         public void println(String msg) {
 42  3
             log.info(msg);
 43  3
         }
 44  
     }
 45  
 
 46  
     @Override
 47  
     public synchronized void sampleOccurred(SampleEvent se) {
 48  
         // TODO: make the interval configurable
 49  6
         long sec = System.currentTimeMillis() / 1000;
 50  6
         if (sec != cur && count > 0) {
 51  3
             if (cur == 0) {
 52  1
                 begin = sec;
 53  
             }
 54  
 
 55  3
             log.debug(cur + " " + begin);
 56  3
             flush(sec - begin);
 57  3
             cur = sec;
 58  
         }
 59  6
         SampleResult res = se.getResult();
 60  
 
 61  6
         count++;
 62  6
         sumRTime += res.getTime();
 63  6
         sumLatency += res.getLatency();
 64  6
         errors += res.isSuccessful() ? 0 : 1;
 65  6
         threads = res.getAllThreads();
 66  6
     }
 67  
 
 68  
     private void flush(long sec) {
 69  3
         String msg = '#' + Long.toString(sec) + '\t';
 70  3
         msg += "Threads: " + threads + '/' + JMeterContextService.getTotalThreads() + '\t';
 71  3
         msg += "Samples: " + count + '\t';
 72  3
         msg += "Latency: " + sumLatency / (count > 0 ? count : 1) + '\t';
 73  3
         msg += "Resp.Time: " + sumRTime / (count > 0 ? count : 1) + '\t';
 74  3
         msg += "Errors: " + errors;
 75  3
         out.println(msg);
 76  
 
 77  3
         count = 0;
 78  3
         sumRTime = 0;
 79  3
         sumLatency = 0;
 80  3
         errors = 0;
 81  3
     }
 82  
 
 83  
     @Override
 84  
     public void sampleStarted(SampleEvent se) {
 85  1
     }
 86  
 
 87  
     @Override
 88  
     public void sampleStopped(SampleEvent se) {
 89  1
     }
 90  
 
 91  
     @Override
 92  
     public void testStarted() {
 93  3
         if (JMeter.isNonGUI()) {
 94  0
             out = System.out;
 95  
         } else {
 96  3
             out = new JMeterLoggerOutputStream(log);
 97  
         }
 98  3
         cur = 0;
 99  3
     }
 100  
 
 101  
     @Override
 102  
     public void testStarted(String string) {
 103  1
         testStarted();
 104  1
     }
 105  
 
 106  
     @Override
 107  
     public void testEnded() {
 108  1
     }
 109  
 
 110  
     @Override
 111  
     public void testEnded(String string) {
 112  1
     }
 113  
 }