Mercurial > hg > orthanc
diff OrthancFramework/Sources/MetricsRegistry.h @ 5337:b376abae664a
Metrics can be stored either as floating-point numbers, or as integers
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 27 Jun 2023 17:55:09 +0200 |
parents | dd9795dc380d |
children | 48b8dae6dc77 |
line wrap: on
line diff
--- a/OrthancFramework/Sources/MetricsRegistry.h Tue Jun 27 15:56:04 2023 +0200 +++ b/OrthancFramework/Sources/MetricsRegistry.h Tue Jun 27 17:55:09 2023 +0200 @@ -39,19 +39,27 @@ namespace Orthanc { - enum MetricsUpdate + enum MetricsUpdatePolicy { - MetricsUpdate_Directly, - MetricsUpdate_MaxOver10Seconds, - MetricsUpdate_MaxOver1Minute, - MetricsUpdate_MinOver10Seconds, - MetricsUpdate_MinOver1Minute + MetricsUpdatePolicy_Directly, + MetricsUpdatePolicy_MaxOver10Seconds, + MetricsUpdatePolicy_MaxOver1Minute, + MetricsUpdatePolicy_MinOver10Seconds, + MetricsUpdatePolicy_MinOver1Minute + }; + + enum MetricsDataType + { + MetricsDataType_Float, + MetricsDataType_Integer }; class ORTHANC_PUBLIC MetricsRegistry : public boost::noncopyable { private: class Item; + class FloatItem; + class IntegerItem; typedef std::map<std::string, Item*> Content; @@ -61,7 +69,8 @@ // The mutex must be locked Item& GetItemInternal(const std::string& name, - MetricsUpdate update); + MetricsUpdatePolicy policy, + MetricsDataType type); public: MetricsRegistry(); @@ -73,22 +82,35 @@ void SetEnabled(bool enabled); void Register(const std::string& name, - MetricsUpdate update); + MetricsUpdatePolicy policy, + MetricsDataType type); - void SetValue(const std::string& name, - int64_t value, - MetricsUpdate update); + void SetFloatValue(const std::string& name, + float value, + MetricsUpdatePolicy policy /* only used if this is a new metrics */); + + void SetFloatValue(const std::string& name, + float value) + { + SetFloatValue(name, value, MetricsUpdatePolicy_Directly); + } - void SetValue(const std::string& name, - int64_t value) + void SetIntegerValue(const std::string& name, + int64_t value, + MetricsUpdatePolicy policy /* only used if this is a new metrics */); + + void SetIntegerValue(const std::string& name, + int64_t value) { - SetValue(name, value, MetricsUpdate_Directly); + SetIntegerValue(name, value, MetricsUpdatePolicy_Directly); } + + void IncrementIntegerValue(const std::string& name, + int64_t delta); - void IncrementValue(const std::string& name, - int64_t delta); + MetricsUpdatePolicy GetUpdatePolicy(const std::string& metrics); - MetricsUpdate GetMetricsUpdate(const std::string& name); + MetricsDataType GetDataType(const std::string& metrics); // https://prometheus.io/docs/instrumenting/exposition_formats/#text-based-format void ExportPrometheusText(std::string& s); @@ -105,7 +127,7 @@ public: SharedMetrics(MetricsRegistry& registry, const std::string& name, - MetricsUpdate update); + MetricsUpdatePolicy policy); void Add(int64_t delta); }; @@ -128,7 +150,7 @@ private: MetricsRegistry& registry_; std::string name_; - MetricsUpdate update_; + MetricsUpdatePolicy policy_; bool active_; boost::posix_time::ptime start_; @@ -140,7 +162,7 @@ Timer(MetricsRegistry& registry, const std::string& name, - MetricsUpdate update); + MetricsUpdatePolicy policy); ~Timer(); };