debug_metrics.cpp 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #include "debug_metrics.h"
  2. #include <util/generic/hash.h>
  3. #include <util/generic/singleton.h>
  4. #include <util/string/cast.h>
  5. #include <util/system/mutex.h>
  6. namespace NYT {
  7. namespace NDetail {
  8. ////////////////////////////////////////////////////////////////////////////////
  9. class TDebugMetrics {
  10. public:
  11. static TDebugMetrics& Get()
  12. {
  13. return *Singleton<TDebugMetrics>();
  14. }
  15. void Inc(TStringBuf name)
  16. {
  17. auto g = Guard(Lock_);
  18. auto it = Metrics_.find(name);
  19. if (it == Metrics_.end()) {
  20. it = Metrics_.emplace(ToString(name), 0).first;
  21. }
  22. ++it->second;
  23. }
  24. ui64 Get(TStringBuf name) const
  25. {
  26. auto g = Guard(Lock_);
  27. auto it = Metrics_.find(name);
  28. if (it == Metrics_.end()) {
  29. return 0;
  30. } else {
  31. return it->second;
  32. }
  33. }
  34. private:
  35. TMutex Lock_;
  36. THashMap<TString, ui64> Metrics_;
  37. };
  38. ////////////////////////////////////////////////////////////////////////////////
  39. void IncDebugMetricImpl(TStringBuf name)
  40. {
  41. TDebugMetrics::Get().Inc(name);
  42. }
  43. ui64 GetDebugMetric(TStringBuf name)
  44. {
  45. return TDebugMetrics::Get().Get(name);
  46. }
  47. ////////////////////////////////////////////////////////////////////////////////
  48. } // namespace NDetail
  49. } // namespace NYT