time_logger.py 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. import time
  2. from colorama import Fore
  3. from toolset.utils.output_helper import log
  4. class TimeLogger:
  5. '''
  6. Class for keeping track of and logging execution times
  7. for suite actions
  8. '''
  9. def __init__(self):
  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. 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. 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 log_build_end(self, log_prefix, file):
  58. total = int(time.time() - self.build_start)
  59. self.build_total = self.build_total + total
  60. log_str = "Build time: %s" % TimeLogger.output(total)
  61. self.build_logs.append({'log_prefix': log_prefix, 'str': log_str})
  62. log(log_str, prefix=log_prefix, file=file, color=Fore.YELLOW)
  63. def log_build_flush(self, file):
  64. for b_log in self.build_logs:
  65. log(b_log['str'],
  66. prefix=b_log['log_prefix'],
  67. file=file,
  68. color=Fore.YELLOW)
  69. self.build_logs = []
  70. def mark_test_starting(self):
  71. self.test_started = time.time()
  72. def mark_test_accepting_requests(self):
  73. self.accepting_requests = int(time.time() - self.test_started)
  74. def log_test_accepting_requests(self, log_prefix, file):
  75. log("Time until accepting requests: %s" % TimeLogger.output(
  76. self.accepting_requests),
  77. prefix=log_prefix,
  78. file=file,
  79. color=Fore.YELLOW)
  80. def mark_test_start(self):
  81. self.test_start = time.time()
  82. def log_test_end(self, log_prefix, file):
  83. total = int(time.time() - self.test_start)
  84. log("Total test time: %s" % TimeLogger.output(total),
  85. prefix=log_prefix,
  86. file=file,
  87. color=Fore.YELLOW)
  88. log("Total time building so far: %s" % TimeLogger.output(
  89. self.build_total),
  90. prefix="tfb: ",
  91. file=file,
  92. color=Fore.YELLOW)
  93. log("Total time verifying so far: %s" % TimeLogger.output(
  94. self.verify_total),
  95. prefix="tfb: ",
  96. file=file,
  97. color=Fore.YELLOW)
  98. if self.benchmarking_total > 0:
  99. log("Total time benchmarking so far: %s" % TimeLogger.output(
  100. self.benchmarking_total),
  101. prefix="tfb: ",
  102. file=file,
  103. color=Fore.YELLOW)
  104. running_time = int(time.time() - self.start)
  105. log("Total execution time so far: %s" %
  106. TimeLogger.output(running_time),
  107. prefix="tfb: ",
  108. file=file,
  109. color=Fore.YELLOW)
  110. def mark_verify_start(self):
  111. self.verify_start = time.time()
  112. def log_verify_end(self, log_prefix, file):
  113. total = int(time.time() - self.verify_start)
  114. self.verify_total = self.verify_total + total
  115. log("Verify time: %s" % TimeLogger.output(total),
  116. prefix=log_prefix,
  117. file=file,
  118. color=Fore.YELLOW)