You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

53 lines
2.0 KiB

2 years ago
  1. from fe.bench.workload import Workload
  2. from fe.bench.workload import NewOrder
  3. from fe.bench.workload import Payment
  4. import time
  5. import threading
  6. class Session(threading.Thread):
  7. def __init__(self, wl: Workload):
  8. threading.Thread.__init__(self)
  9. self.workload = wl
  10. self.new_order_request = []
  11. self.payment_request = []
  12. self.payment_i = 0
  13. self.new_order_i = 0
  14. self.payment_ok = 0
  15. self.new_order_ok = 0
  16. self.time_new_order = 0
  17. self.time_payment = 0
  18. self.thread = None
  19. self.gen_procedure()
  20. def gen_procedure(self):
  21. for i in range(0, self.workload.procedure_per_session):
  22. new_order = self.workload.get_new_order()
  23. self.new_order_request.append(new_order)
  24. def run(self):
  25. self.run_gut()
  26. def run_gut(self):
  27. for new_order in self.new_order_request:
  28. before = time.time()
  29. ok, order_id = new_order.run()
  30. after = time.time()
  31. self.time_new_order = self.time_new_order + after - before
  32. self.new_order_i = self.new_order_i + 1
  33. if ok:
  34. self.new_order_ok = self.new_order_ok + 1
  35. payment = Payment(new_order.buyer, order_id)
  36. self.payment_request.append(payment)
  37. if self.new_order_i % 100 or self.new_order_i == len(self.new_order_request):
  38. self.workload.update_stat(self.new_order_i, self.payment_i, self.new_order_ok, self.payment_ok,
  39. self.time_new_order, self.time_payment)
  40. for payment in self.payment_request:
  41. before = time.time()
  42. ok = payment.run()
  43. after = time.time()
  44. self.time_payment = self.time_payment + after - before
  45. self.payment_i = self.payment_i + 1
  46. if ok:
  47. self.payment_ok = self.payment_ok + 1
  48. self.payment_request = []