locustEvents.py

72 lines | 1.817 kB Blame History Raw Download
from locust import events
import time
try:
   import cPickle as pickle
except:
   import pickle

metrics = {
            'req_success':[],
            'throughput':[],
            'downloads':[],
            'req_errors':[]
          }
downloads=0

reqError = events.EventHook()
def req_error(**kw):
    metrics['req_errors'].append({'timestamp':time.time(), 'msg':kw.get('message','')})
    print "Req Error: %s"%kw.get("message","unknown")
reqError += req_error

def req_success(request_type, name, response_time, response_length, **kw):
    #print "hello"
    metrics['req_success'].append({'time':response_time, 'len':response_length, 'timestamp':time.time()})
events.request_success += req_success

downloadStart = events.EventHook()
def on_download_start(**kw):
    global downloads, metrics
    size = kw.get('size',-1)
    downloads += 1
    print "Downlod Started: %d"%downloads
    metrics['downloads'].append({ 'time':time.time(), 'downloads':downloads})
downloadStart += on_download_start

downloadEnd = events.EventHook()
def on_download_end(**kw):
    global downloads, metrics
    size = kw.get('size',-1)
    downloads -=1
    print "Download Ended: %d"%downloads
    metrics['downloads'].append({'time':time.time(), 'downloads':downloads})

downloadEnd += on_download_end

chunkHook = events.EventHook()
bytesRecvd = 0
timeSpent = 0.0
def on_chunk(**kw):
    global bytesRecvd, timeSpent, metrics, downloads
    bytesRecvd += kw.get('bytesRead',0)
    timeSpent += kw.get('seconds', 0.0)
    rate = 0
    if timeSpent > 0:
        rate= bytesRecvd/timeSpent
    metrics['throughput'].append({'time':time.time(), 'len':bytesRecvd, 'timeSpent':timeSpent, 'downloads':downloads, 'rate':rate})	
chunkHook += on_chunk

def exiting():
    # pass
    global metrics
    tfin = int(time.time())
    f = open('../results/%d_results.pkl'%tfin, 'wb')
    pickle.dump(metrics, f)
    f.flush()
    f.close()
    print "Req metrics captured: %d"%len(metrics)




events.quitting += exiting