perf-stats.py 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #!/usr/bin/env python3
  2. import json
  3. import sys
  4. stages_data = {}
  5. if len(sys.argv) != 2:
  6. print("USAGE: {} <input file>".format(sys.argv[0]))
  7. sys.exit(1)
  8. with open(sys.argv[1]) as fh:
  9. for line in fh.readlines():
  10. if "COUNTER" in line:
  11. json_part = line[line.find("{"):]
  12. x = json.loads(json_part)
  13. counter = x['name']
  14. if not (counter in stages_data):
  15. stages_data[counter] = {'first_ts': x['now'], 'last_ts': x['now'], 'last_count': 0,
  16. 'data': [], 'max_speed': 0, 'min_speed': 9999999999.0,
  17. 'count': 0,
  18. 'max_speed_ts': 0, 'min_speed_ts': 0}
  19. stages_data[counter]['count'] += 1
  20. count_since_last = x['counts'] - stages_data[counter]['last_count']
  21. time_since_last = float(x['now'] - stages_data[counter]['last_ts'])
  22. if time_since_last > 1:
  23. speed = 1000.0 * (count_since_last / time_since_last)
  24. stages_data[counter]['data'].append(speed)
  25. if speed > stages_data[counter]['max_speed']:
  26. stages_data[counter]['max_speed'] = speed
  27. stages_data[counter]['max_speed_ts'] = x['now']
  28. if speed < stages_data[counter]['min_speed']:
  29. stages_data[counter]['min_speed'] = speed
  30. stages_data[counter]['min_speed_ts'] = x['now']
  31. stages_data[counter]['last_ts'] = x['now']
  32. stages_data[counter]['last_count'] = x['counts']
  33. for stage in stages_data.keys():
  34. stages_data[stage]['data'].sort()
  35. #mean_index = stages_data[stage]['count'] / 2
  36. mean = 0
  37. average = 0
  38. eightieth = 0
  39. data_len = len(stages_data[stage]['data'])
  40. mean_index = int(data_len / 2)
  41. eightieth_index = int(data_len * 0.8)
  42. #print("mean idx: {} data.len: {}".format(mean_index, data_len))
  43. if data_len > 0:
  44. mean = stages_data[stage]['data'][mean_index]
  45. average = float(sum(stages_data[stage]['data'])) / data_len
  46. eightieth = stages_data[stage]['data'][eightieth_index]
  47. print("stage: {} max: {:,.2f} min: {:.2f} count: {} total: {} mean: {:,.2f} average: {:,.2f} 80%: {:,.2f}".format(stage,
  48. stages_data[stage]['max_speed'],
  49. stages_data[stage]['min_speed'],
  50. stages_data[stage]['count'],
  51. stages_data[stage]['last_count'],
  52. mean, average, eightieth))
  53. num = 5
  54. idx = -1
  55. if data_len >= num:
  56. print(" top {}: ".format(num), end='')
  57. for x in range(0, num):
  58. print("{:,.2f} ".format(stages_data[stage]['data'][idx]), end='')
  59. idx -= 1
  60. if stages_data[stage]['data'][idx] < average:
  61. break
  62. print("")
  63. print(" max_ts: {} min_ts: {}".format(stages_data[stage]['max_speed_ts'], stages_data[stage]['min_speed_ts']))
  64. print("\n")