You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
88 lines
2.0 KiB
88 lines
2.0 KiB
#!/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()
|