]> git.sesse.net Git - nageru/commitdiff
Mark the appropriate metrics as gauges.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Fri, 9 Jun 2017 17:35:13 +0000 (19:35 +0200)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Fri, 9 Jun 2017 17:35:13 +0000 (19:35 +0200)
audio_mixer.cpp
httpd.cpp
metrics.cpp
metrics.h

index 0cd8b712f903beba4b4430b40ef811aa1acf8ee2..6a694cbc4bbe2d34da5bc165eb9127e41ef1633c 100644 (file)
@@ -214,13 +214,13 @@ AudioMixer::AudioMixer(unsigned num_cards)
                }
        }
 
-       global_metrics.register_double_metric("audio_loudness_short_lufs", &metric_audio_loudness_short_lufs);
-       global_metrics.register_double_metric("audio_loudness_integrated_lufs", &metric_audio_loudness_integrated_lufs);
-       global_metrics.register_double_metric("audio_loudness_range_low_lufs", &metric_audio_loudness_range_low_lufs);
-       global_metrics.register_double_metric("audio_loudness_range_high_lufs", &metric_audio_loudness_range_high_lufs);
-       global_metrics.register_double_metric("audio_peak_dbfs", &metric_audio_peak_dbfs);
-       global_metrics.register_double_metric("audio_final_makeup_gain_db", &metric_audio_final_makeup_gain_db);
-       global_metrics.register_double_metric("audio_correlation", &metric_audio_correlation);
+       global_metrics.register_double_metric("audio_loudness_short_lufs", &metric_audio_loudness_short_lufs, Metrics::TYPE_GAUGE);
+       global_metrics.register_double_metric("audio_loudness_integrated_lufs", &metric_audio_loudness_integrated_lufs, Metrics::TYPE_GAUGE);
+       global_metrics.register_double_metric("audio_loudness_range_low_lufs", &metric_audio_loudness_range_low_lufs, Metrics::TYPE_GAUGE);
+       global_metrics.register_double_metric("audio_loudness_range_high_lufs", &metric_audio_loudness_range_high_lufs, Metrics::TYPE_GAUGE);
+       global_metrics.register_double_metric("audio_peak_dbfs", &metric_audio_peak_dbfs, Metrics::TYPE_GAUGE);
+       global_metrics.register_double_metric("audio_final_makeup_gain_db", &metric_audio_final_makeup_gain_db, Metrics::TYPE_GAUGE);
+       global_metrics.register_double_metric("audio_correlation", &metric_audio_correlation, Metrics::TYPE_GAUGE);
 }
 
 void AudioMixer::reset_resampler(DeviceSpec device_spec)
index 2b19779ea450f253a2dee0e689b121eda4733335..638c9853dde735e6282030aac990f2481841e6de 100644 (file)
--- a/httpd.cpp
+++ b/httpd.cpp
@@ -22,7 +22,7 @@ using namespace std;
 
 HTTPD::HTTPD()
 {
-       global_metrics.register_int_metric("num_connected_clients", &metric_num_connected_clients);
+       global_metrics.register_int_metric("num_connected_clients", &metric_num_connected_clients, Metrics::TYPE_GAUGE);
 }
 
 HTTPD::~HTTPD()
index 78f1e9854d62aef89797987865580681429dd3a3..dd2ff690a1aeac351364a1000670c6f392020969 100644 (file)
@@ -7,16 +7,16 @@ using namespace std;
 
 Metrics global_metrics;
 
-void Metrics::register_int_metric(const string &name, atomic<int64_t> *location)
+void Metrics::register_int_metric(const string &name, atomic<int64_t> *location, Metrics::Type type)
 {
        lock_guard<mutex> lock(mu);
-       int_metrics.emplace(name, location);
+       int_metrics.emplace(name, Metric<int64_t>{ type, location });
 }
 
-void Metrics::register_double_metric(const string &name, atomic<double> *location)
+void Metrics::register_double_metric(const string &name, atomic<double> *location, Metrics::Type type)
 {
        lock_guard<mutex> lock(mu);
-       double_metrics.emplace(name, location);
+       double_metrics.emplace(name, Metric<double>{ type, location });
 }
 
 string Metrics::serialize() const
@@ -28,10 +28,16 @@ string Metrics::serialize() const
 
        lock_guard<mutex> lock(mu);
        for (const auto &key_and_value : int_metrics) {
-               ss << "nageru_" << key_and_value.first.c_str() << " " << key_and_value.second->load() << "\n";
+               if (key_and_value.second.type == TYPE_GAUGE) {
+                       ss << "# TYPE nageru_" << key_and_value.first << " gauge\n";
+               }
+               ss << "nageru_" << key_and_value.first << " " << key_and_value.second.location->load() << "\n";
        }
        for (const auto &key_and_value : double_metrics) {
-               ss << "nageru_" << key_and_value.first.c_str() << " " << key_and_value.second->load() << "\n";
+               if (key_and_value.second.type == TYPE_GAUGE) {
+                       ss << "# TYPE nageru_" << key_and_value.first << " gauge\n";
+               }
+               ss << "nageru_" << key_and_value.first << " " << key_and_value.second.location->load() << "\n";
        }
 
        return ss.str();
index 6c72ad53ed71c6bc66b8923a643697d0dea16701..e54bbcf41b083ea1dcc36c2a2ab781cad81471dc 100644 (file)
--- a/metrics.h
+++ b/metrics.h
 
 class Metrics {
 public:
-       void register_int_metric(const std::string &name, std::atomic<int64_t> *location);
-       void register_double_metric(const std::string &name, std::atomic<double> *location);
+       enum Type {
+               TYPE_COUNTER,
+               TYPE_GAUGE,
+       };
+
+       void register_int_metric(const std::string &name, std::atomic<int64_t> *location, Type type = TYPE_COUNTER);
+       void register_double_metric(const std::string &name, std::atomic<double> *location, Type type = TYPE_COUNTER);
        std::string serialize() const;
 
 private:
+       template<class T>
+       struct Metric {
+               Type type;
+               std::atomic<T> *location;
+       };
+
        mutable std::mutex mu;
-       std::unordered_map<std::string, std::atomic<int64_t> *> int_metrics;
-       std::unordered_map<std::string, std::atomic<double> *> double_metrics;
+       std::unordered_map<std::string, Metric<int64_t>> int_metrics;
+       std::unordered_map<std::string, Metric<double>> double_metrics;
 };
 
 extern Metrics global_metrics;