X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=metrics.h;h=d515720ade805b8c4d43eeea23fe23955e7aa819;hb=96cb6414f85e0ef4d660b7bd56267303e80fcd05;hp=0371668bd2a1e25c1adaed613071ac8e3c6c0551;hpb=1836dccf699779d9092a75755cec96cea1734a2a;p=nageru diff --git a/metrics.h b/metrics.h index 0371668..d515720 100644 --- a/metrics.h +++ b/metrics.h @@ -28,6 +28,10 @@ public: TYPE_GAUGE, TYPE_HISTOGRAM, // Internal use only. }; + enum Laziness { + PRINT_ALWAYS, + PRINT_WHEN_NONEMPTY, + }; void add(const std::string &name, std::atomic *location, Type type = TYPE_COUNTER) { @@ -46,7 +50,14 @@ public: void add(const std::string &name, const std::vector> &labels, std::atomic *location, Type type = TYPE_COUNTER); void add(const std::string &name, const std::vector> &labels, std::atomic *location, Type type = TYPE_COUNTER); - void add(const std::string &name, const std::vector> &labels, Histogram *location); + void add(const std::string &name, const std::vector> &labels, Histogram *location, Laziness laziness = PRINT_ALWAYS); + + void remove(const std::string &name) + { + remove(name, {}); + } + + void remove(const std::string &name, const std::vector> &labels); std::string serialize() const; @@ -78,6 +89,7 @@ private: }; struct Metric { DataType data_type; + Laziness laziness; // Only for TYPE_HISTOGRAM. union { std::atomic *location_int64; std::atomic *location_double; @@ -99,7 +111,7 @@ public: void init_uniform(size_t num_buckets); // Sets up buckets 0..(N-1). void init_geometric(double min, double max, size_t num_buckets); void count_event(double val); - std::string serialize(const std::string &name, const std::vector> &labels) const; + std::string serialize(Metrics::Laziness laziness, const std::string &name, const std::vector> &labels) const; private: // Bucket counts number of events where val[i - 1] < x <= val[i].