time_logger.py 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. import time
  2. from colorama import Fore
  3. class TimeLogger:
  4. '''
  5. Class for keeping track of and logging execution times
  6. for suite actions
  7. '''
  8. def __init__(self, config):
  9. self.log = config.log
  10. self.start = time.time()
  11. self.benchmarking_start = 0
  12. self.benchmarking_total = 0
  13. self.database_starting = 0
  14. self.database_started = 0
  15. self.build_start = 0
  16. self.build_total = 0
  17. self.test_started = 0
  18. self.accepting_requests = 0
  19. self.test_start = 0
  20. self.test_total = 0
  21. self.verify_start = 0
  22. self.verify_total = 0
  23. self.build_logs = []
  24. @staticmethod
  25. def output(sec):
  26. output = ""
  27. h = sec // 3600
  28. m = (sec // 60) % 60
  29. s = sec % 60
  30. if h > 0:
  31. output = "%sh" % h
  32. if m > 0:
  33. output = output + "%sm " % m
  34. output = output + "%ss" % s
  35. return output
  36. def mark_starting_database(self):
  37. self.database_starting = time.time()
  38. def mark_started_database(self):
  39. self.database_started = int(time.time() - self.database_starting)
  40. def log_database_start_time(self, log_prefix, file):
  41. self.log("Time starting database: %s" % TimeLogger.output(
  42. self.database_started),
  43. prefix=log_prefix,
  44. file=file,
  45. color=Fore.YELLOW)
  46. def mark_benchmarking_start(self):
  47. self.benchmarking_start = time.time()
  48. def log_benchmarking_end(self, log_prefix, file):
  49. total = int(time.time() - self.benchmarking_start)
  50. self.benchmarking_total = self.benchmarking_total + total
  51. self.log("Benchmarking time: %s" % TimeLogger.output(total),
  52. prefix=log_prefix,
  53. file=file,
  54. color=Fore.YELLOW)
  55. def mark_build_start(self):
  56. self.build_start = time.time()
  57. def time_since_start(self):
  58. return time.time() - self.build_start
  59. def log_build_end(self, log_prefix, file):
  60. total = int(time.time() - self.build_start)
  61. self.build_total = self.build_total + total
  62. log_str = "Build time: %s" % TimeLogger.output(total)
  63. self.build_logs.append({'log_prefix': log_prefix, 'str': log_str})
  64. self.log(log_str, prefix=log_prefix, file=file, color=Fore.YELLOW)
  65. def log_build_flush(self, file):
  66. for b_log in self.build_logs:
  67. self.log(b_log['str'],
  68. prefix=b_log['log_prefix'],
  69. file=file,
  70. color=Fore.YELLOW)
  71. self.build_logs = []
  72. def mark_test_starting(self):
  73. self.test_started = time.time()
  74. def mark_test_accepting_requests(self):
  75. self.accepting_requests = int(time.time() - self.test_started)
  76. def log_test_accepting_requests(self, log_prefix, file):
  77. self.log("Time until accepting requests: %s" % TimeLogger.output(
  78. self.accepting_requests),
  79. prefix=log_prefix,
  80. file=file,
  81. color=Fore.YELLOW)
  82. def mark_test_start(self):
  83. self.test_start = time.time()
  84. def log_test_end(self, log_prefix, file):
  85. total = int(time.time() - self.test_start)
  86. self.log("Total test time: %s" % TimeLogger.output(total),
  87. prefix=log_prefix,
  88. file=file,
  89. color=Fore.YELLOW)
  90. self.log("Total time building so far: %s" % TimeLogger.output(
  91. self.build_total),
  92. prefix="tfb: ",
  93. file=file,
  94. color=Fore.YELLOW)
  95. self.log("Total time verifying so far: %s" % TimeLogger.output(
  96. self.verify_total),
  97. prefix="tfb: ",
  98. file=file,
  99. color=Fore.YELLOW)
  100. if self.benchmarking_total > 0:
  101. self.log("Total time benchmarking so far: %s" % TimeLogger.output(
  102. self.benchmarking_total),
  103. prefix="tfb: ",
  104. file=file,
  105. color=Fore.YELLOW)
  106. running_time = int(time.time() - self.start)
  107. self.log("Total execution time so far: %s" %
  108. TimeLogger.output(running_time),
  109. prefix="tfb: ",
  110. file=file,
  111. color=Fore.YELLOW)
  112. def mark_verify_start(self):
  113. self.verify_start = time.time()
  114. def log_verify_end(self, log_prefix, file):
  115. total = int(time.time() - self.verify_start)
  116. self.verify_total = self.verify_total + total
  117. self.log("Verify time: %s" % TimeLogger.output(total),
  118. prefix=log_prefix,
  119. file=file,
  120. color=Fore.YELLOW)