#!/usr/bin/env python
"""
chewperf.py: Chew an http perf log
bucketize
"""
import sys, time
def resets():
f = open(sys.argv[1]).read()
rawLines = f.split('\n')
times = []
for x in range(len(rawLines)):
line = rawLines[x].split()
try:
if line[-1] == "SIGNAL_STRENGTH":
ts = int(rawLines[x - 1].split()[-1])
times.append(ts)
except:
pass
return times
def augment():
f = open(sys.argv[1]).read()
rawLines = f.split('\r\n')
out = []
t0 = None
last = 0
for line in rawLines:
if "Pulled" in line:
chewed = [int(line.split()[5]), int(line.split()[7])]
if not t0: t0 = chewed[1]
tm = chewed[1] - t0
out.append("%s %d" % (line, (tm - last)))
last = tm
else:
out.append(line)
print "\n".join(out)
def chew():
f = open(sys.argv[1]).read()
rawLines = f.split('\n')
lines = [x for x in rawLines if "Pulled" in x]
sidx = lines[0].split().index("Pulled")
print "sidx", sidx
chewed = [[int(x.split()[sidx + 2]), int(x.split()[sidx + 4])] for x in lines]
t0 = chewed[0][1]
tLast = chewed[-1][1]
chewed = [[x[1] - t0, x[0]] for x in chewed]
totalTime = tLast - t0
bytes = sum(x[1] for x in chewed)
print "total time", totalTime, "bytes", bytes, "rate", bytes * 1000 / totalTime
buckets = {}
for x in chewed:
bucket = x[0] / 1000
bytes = x[1]
if bucket in buckets:
buckets[bucket] += bytes
else:
buckets[bucket] = bytes
top = max(buckets.keys())
for x in range(top):
if x not in buckets.keys():
buckets[x] = 0
# smooth
window = [0 for x in range(5)]
for x in range(len(buckets.items())):
window[x % len(window)] = buckets.items()[x][1]
print "%s\t%s" % (buckets.items()[x][0], sum(window) / len(window))
def main():
chew()
if __name__ == '__main__':
main()