| #!/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() |