qps.hpp 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #pragma once
  2. #include <mutex>
  3. #include "base/define.h"
  4. #include "util/system.h"
  5. namespace ylib
  6. {
  7. namespace network
  8. {
  9. class qps
  10. {
  11. public:
  12. qps()
  13. {
  14. m_record = false;
  15. }
  16. void request(const uint64& size, bool no_count = false)
  17. {
  18. if (m_record == false)
  19. return;
  20. std::unique_lock<std::mutex> guard(m_mutex);
  21. if (no_count == false)
  22. request_sec_count++;
  23. request_sec_size += size;
  24. }
  25. void response(const uint64& size, bool no_count = false)
  26. {
  27. if (m_record == false)
  28. return;
  29. std::unique_lock<std::mutex> guard(m_mutex);
  30. if (no_count == false)
  31. response_sec_count++;
  32. response_sec_size += size;
  33. }
  34. void record(uint32 wait_msec = 1000)
  35. {
  36. request_sec_count = 0;
  37. request_sec_size = 0;
  38. response_sec_count = 0;
  39. response_sec_size = 0;
  40. m_record = true;
  41. system::sleep_msec(wait_msec);
  42. m_record = false;
  43. }
  44. public:
  45. // 每秒请求数
  46. uint64 request_sec_count;
  47. // 每秒请求大小
  48. uint64 request_sec_size;
  49. // 每秒回复数
  50. uint64 response_sec_count;
  51. // 每秒回复大小
  52. uint64 response_sec_size;
  53. private:
  54. std::mutex m_mutex;
  55. // record
  56. bool m_record;
  57. };
  58. }
  59. }