Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/local/sina_mobile/python2.7/bin/python
- #
- import fileinput
- import signal
- import sys
- import re
- class SubReqParser:
- stats = {}
- times = {}
- def __init__(self, interval = 5, subreq = ''):
- self.interval = interval
- self.subreq = subreq
- self.pattern = re.compile('^\[([^\]]+)\s+\+0800\]\s+(\S+)\s+(\S+)\s+(\S+)')
- signal.signal(signal.SIGTERM, self.sigterm_handler)
- signal.signal(signal.SIGINT, self.sigterm_handler)
- def run(self):
- #for line in fileinput.input():
- for line in sys.stdin:
- self.parse_line(line)
- def sigterm_handler(self, _signo, _stack_frame):
- # Raises SystemExit(0):
- self.print_s()
- sys.exit(0)
- def print_s(self):
- #print "\nStats Result:"
- print "\t{:20}\t{:15}\t{:>8}%\t{:>10}\t{:>10}".format("Time", "Resp Time(ms)", "Error Rate", "Error Count", "Total(QPS)")
- for api in self.stats.keys():
- print api + ":"
- for ts in sorted(self.stats[api].keys()):
- total = self.stats[api][ts]["total"]
- err = self.stats[api][ts]["error"]
- print "\t{:20}\t{:15.3f}\t{:>8.2f}%\t{:>10d}\t{:>10d}".format(ts, self.stats[api][ts]["time"]/total, err*100/total, err, total)
- self.stats = {}
- def parse_line(self, line):
- m = self.pattern.match(line)
- if m:
- ts = m.group(1)
- api = m.group(2)
- status = m.group(3)
- resp_time = float(m.group(4)) * 1000
- if self.subreq != '' and self.subreq != api:
- return
- if not self.stats.has_key(api):
- self.stats[api] = {}
- if not self.stats[api].has_key(ts):
- self.stats[api][ts] = {
- "total": 0,
- "error": 0,
- "time": 0
- }
- self.stats[api][ts]["total"] += 1
- self.stats[api][ts]["time"] += resp_time
- if status != "200":
- self.stats[api][ts]["error"] += 1
- if not self.times.has_key(ts):
- self.times[ts] = 1
- if len(self.times) >= self.interval:
- self.times = {}
- self.print_s()
- if __name__ == "__main__":
- interval = 5
- subreq = ''
- argc = len(sys.argv)
- if argc > 1:
- interval = int(sys.argv[1])
- if argc > 2:
- subreq = sys.argv[2]
- parser = SubReqParser(interval, subreq)
- parser.run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement