Advertisement
Guest User

Untitled

a guest
Feb 6th, 2016
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.48 KB | None | 0 0
  1. #!/usr/local/sina_mobile/python2.7/bin/python
  2. #
  3.  
  4. import fileinput
  5. import signal
  6. import sys
  7. import re
  8.  
  9. class SubReqParser:
  10. stats = {}
  11. times = {}
  12.  
  13. def __init__(self, interval = 5, subreq = ''):
  14. self.interval = interval
  15. self.subreq = subreq
  16. self.pattern = re.compile('^\[([^\]]+)\s+\+0800\]\s+(\S+)\s+(\S+)\s+(\S+)')
  17. signal.signal(signal.SIGTERM, self.sigterm_handler)
  18. signal.signal(signal.SIGINT, self.sigterm_handler)
  19.  
  20. def run(self):
  21. #for line in fileinput.input():
  22. for line in sys.stdin:
  23. self.parse_line(line)
  24.  
  25. def sigterm_handler(self, _signo, _stack_frame):
  26. # Raises SystemExit(0):
  27. self.print_s()
  28. sys.exit(0)
  29.  
  30. def print_s(self):
  31. #print "\nStats Result:"
  32. print "\t{:20}\t{:15}\t{:>8}%\t{:>10}\t{:>10}".format("Time", "Resp Time(ms)", "Error Rate", "Error Count", "Total(QPS)")
  33. for api in self.stats.keys():
  34. print api + ":"
  35. for ts in sorted(self.stats[api].keys()):
  36. total = self.stats[api][ts]["total"]
  37. err = self.stats[api][ts]["error"]
  38. 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)
  39. self.stats = {}
  40.  
  41. def parse_line(self, line):
  42. m = self.pattern.match(line)
  43. if m:
  44. ts = m.group(1)
  45. api = m.group(2)
  46. status = m.group(3)
  47. resp_time = float(m.group(4)) * 1000
  48.  
  49. if self.subreq != '' and self.subreq != api:
  50. return
  51.  
  52. if not self.stats.has_key(api):
  53. self.stats[api] = {}
  54.  
  55. if not self.stats[api].has_key(ts):
  56. self.stats[api][ts] = {
  57. "total": 0,
  58. "error": 0,
  59. "time": 0
  60. }
  61.  
  62. self.stats[api][ts]["total"] += 1
  63. self.stats[api][ts]["time"] += resp_time
  64.  
  65. if status != "200":
  66. self.stats[api][ts]["error"] += 1
  67.  
  68. if not self.times.has_key(ts):
  69. self.times[ts] = 1
  70. if len(self.times) >= self.interval:
  71. self.times = {}
  72. self.print_s()
  73.  
  74. if __name__ == "__main__":
  75.  
  76. interval = 5
  77. subreq = ''
  78. argc = len(sys.argv)
  79. if argc > 1:
  80. interval = int(sys.argv[1])
  81. if argc > 2:
  82. subreq = sys.argv[2]
  83.  
  84. parser = SubReqParser(interval, subreq)
  85. parser.run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement