1*90c8c64dSAndroid Build Coastguard Worker#!/usr/bin/env python 2*90c8c64dSAndroid Build Coastguard Worker 3*90c8c64dSAndroid Build Coastguard Worker""" 4*90c8c64dSAndroid Build Coastguard Worker chewperf.py: Chew an http perf log 5*90c8c64dSAndroid Build Coastguard Worker bucketize 6*90c8c64dSAndroid Build Coastguard Worker 7*90c8c64dSAndroid Build Coastguard Worker""" 8*90c8c64dSAndroid Build Coastguard Worker 9*90c8c64dSAndroid Build Coastguard Workerimport sys, time 10*90c8c64dSAndroid Build Coastguard Worker 11*90c8c64dSAndroid Build Coastguard Workerdef resets(): 12*90c8c64dSAndroid Build Coastguard Worker f = open(sys.argv[1]).read() 13*90c8c64dSAndroid Build Coastguard Worker rawLines = f.split('\n') 14*90c8c64dSAndroid Build Coastguard Worker 15*90c8c64dSAndroid Build Coastguard Worker times = [] 16*90c8c64dSAndroid Build Coastguard Worker for x in range(len(rawLines)): 17*90c8c64dSAndroid Build Coastguard Worker line = rawLines[x].split() 18*90c8c64dSAndroid Build Coastguard Worker try: 19*90c8c64dSAndroid Build Coastguard Worker if line[-1] == "SIGNAL_STRENGTH": 20*90c8c64dSAndroid Build Coastguard Worker ts = int(rawLines[x - 1].split()[-1]) 21*90c8c64dSAndroid Build Coastguard Worker times.append(ts) 22*90c8c64dSAndroid Build Coastguard Worker except: 23*90c8c64dSAndroid Build Coastguard Worker pass 24*90c8c64dSAndroid Build Coastguard Worker 25*90c8c64dSAndroid Build Coastguard Worker return times 26*90c8c64dSAndroid Build Coastguard Worker 27*90c8c64dSAndroid Build Coastguard Workerdef augment(): 28*90c8c64dSAndroid Build Coastguard Worker f = open(sys.argv[1]).read() 29*90c8c64dSAndroid Build Coastguard Worker rawLines = f.split('\r\n') 30*90c8c64dSAndroid Build Coastguard Worker 31*90c8c64dSAndroid Build Coastguard Worker out = [] 32*90c8c64dSAndroid Build Coastguard Worker t0 = None 33*90c8c64dSAndroid Build Coastguard Worker last = 0 34*90c8c64dSAndroid Build Coastguard Worker for line in rawLines: 35*90c8c64dSAndroid Build Coastguard Worker if "Pulled" in line: 36*90c8c64dSAndroid Build Coastguard Worker chewed = [int(line.split()[5]), int(line.split()[7])] 37*90c8c64dSAndroid Build Coastguard Worker if not t0: t0 = chewed[1] 38*90c8c64dSAndroid Build Coastguard Worker tm = chewed[1] - t0 39*90c8c64dSAndroid Build Coastguard Worker out.append("%s %d" % (line, (tm - last))) 40*90c8c64dSAndroid Build Coastguard Worker last = tm 41*90c8c64dSAndroid Build Coastguard Worker else: 42*90c8c64dSAndroid Build Coastguard Worker out.append(line) 43*90c8c64dSAndroid Build Coastguard Worker print "\n".join(out) 44*90c8c64dSAndroid Build Coastguard Worker 45*90c8c64dSAndroid Build Coastguard Workerdef chew(): 46*90c8c64dSAndroid Build Coastguard Worker f = open(sys.argv[1]).read() 47*90c8c64dSAndroid Build Coastguard Worker rawLines = f.split('\n') 48*90c8c64dSAndroid Build Coastguard Worker lines = [x for x in rawLines if "Pulled" in x] 49*90c8c64dSAndroid Build Coastguard Worker 50*90c8c64dSAndroid Build Coastguard Worker sidx = lines[0].split().index("Pulled") 51*90c8c64dSAndroid Build Coastguard Worker print "sidx", sidx 52*90c8c64dSAndroid Build Coastguard Worker chewed = [[int(x.split()[sidx + 2]), int(x.split()[sidx + 4])] for x in lines] 53*90c8c64dSAndroid Build Coastguard Worker 54*90c8c64dSAndroid Build Coastguard Worker t0 = chewed[0][1] 55*90c8c64dSAndroid Build Coastguard Worker tLast = chewed[-1][1] 56*90c8c64dSAndroid Build Coastguard Worker chewed = [[x[1] - t0, x[0]] for x in chewed] 57*90c8c64dSAndroid Build Coastguard Worker 58*90c8c64dSAndroid Build Coastguard Worker totalTime = tLast - t0 59*90c8c64dSAndroid Build Coastguard Worker bytes = sum(x[1] for x in chewed) 60*90c8c64dSAndroid Build Coastguard Worker print "total time", totalTime, "bytes", bytes, "rate", bytes * 1000 / totalTime 61*90c8c64dSAndroid Build Coastguard Worker 62*90c8c64dSAndroid Build Coastguard Worker buckets = {} 63*90c8c64dSAndroid Build Coastguard Worker for x in chewed: 64*90c8c64dSAndroid Build Coastguard Worker bucket = x[0] / 1000 65*90c8c64dSAndroid Build Coastguard Worker bytes = x[1] 66*90c8c64dSAndroid Build Coastguard Worker if bucket in buckets: 67*90c8c64dSAndroid Build Coastguard Worker buckets[bucket] += bytes 68*90c8c64dSAndroid Build Coastguard Worker else: 69*90c8c64dSAndroid Build Coastguard Worker buckets[bucket] = bytes 70*90c8c64dSAndroid Build Coastguard Worker 71*90c8c64dSAndroid Build Coastguard Worker top = max(buckets.keys()) 72*90c8c64dSAndroid Build Coastguard Worker for x in range(top): 73*90c8c64dSAndroid Build Coastguard Worker if x not in buckets.keys(): 74*90c8c64dSAndroid Build Coastguard Worker buckets[x] = 0 75*90c8c64dSAndroid Build Coastguard Worker 76*90c8c64dSAndroid Build Coastguard Worker # smooth 77*90c8c64dSAndroid Build Coastguard Worker window = [0 for x in range(5)] 78*90c8c64dSAndroid Build Coastguard Worker 79*90c8c64dSAndroid Build Coastguard Worker for x in range(len(buckets.items())): 80*90c8c64dSAndroid Build Coastguard Worker window[x % len(window)] = buckets.items()[x][1] 81*90c8c64dSAndroid Build Coastguard Worker print "%s\t%s" % (buckets.items()[x][0], sum(window) / len(window)) 82*90c8c64dSAndroid Build Coastguard Worker 83*90c8c64dSAndroid Build Coastguard Workerdef main(): 84*90c8c64dSAndroid Build Coastguard Worker chew() 85*90c8c64dSAndroid Build Coastguard Worker 86*90c8c64dSAndroid Build Coastguard Workerif __name__ == '__main__': 87*90c8c64dSAndroid Build Coastguard Worker main() 88