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.
87 lines
2.0 KiB
87 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()
|
|
|