]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/exporter/DaemonMetricCollector.cc
update ceph source to reef 18.2.0
[ceph.git] / ceph / src / exporter / DaemonMetricCollector.cc
index 88e53f573464de0cb25258e4aa17084ea7f9fecb..f4f7240fcfcb2fc384f90972aa5abba855d910da 100644 (file)
@@ -121,40 +121,46 @@ void DaemonMetricCollector::dump_asok_metrics() {
     for (auto &perf_group_item : counter_schema) {
       std::string perf_group = {perf_group_item.key().begin(),
                                 perf_group_item.key().end()};
-      json_object perf_group_object = perf_group_item.value().as_object();
-      auto counters = perf_group_object["counters"].as_object();
-      auto counters_labels = perf_group_object["labels"].as_object();
-      auto counters_values =
-          counter_dump[perf_group].as_object()["counters"].as_object();
-      labels_t labels;
-
-      for(auto &label: counters_labels) {
-        std::string label_key = {label.key().begin(), label.key().end()};
-        labels[label_key] = quote(label.value().as_string().c_str());
-      }
-      for (auto &counter : counters) {
-        json_object counter_group = counter.value().as_object();
-        if (counter_group["priority"].as_int64() < prio_limit) {
-          continue;        
-        }
-        std::string counter_name_init =  {counter.key().begin(), counter.key().end()};
-        std::string counter_name = perf_group + "_" + counter_name_init;
-        promethize(counter_name);
-
-        if (counters_labels.empty()) {
-          auto labels_and_name = get_labels_and_metric_name(daemon_name, counter_name);
-          labels = labels_and_name.first;
-          counter_name = labels_and_name.second;
+      json_array perf_group_schema_array = perf_group_item.value().as_array();
+      json_array perf_group_dump_array = counter_dump[perf_group].as_array();
+      for (auto schema_itr = perf_group_schema_array.begin(),
+                dump_itr = perf_group_dump_array.begin();
+           schema_itr != perf_group_schema_array.end() &&
+           dump_itr != perf_group_dump_array.end();
+           ++schema_itr, ++dump_itr) {
+        auto counters = schema_itr->at("counters").as_object();
+        auto counters_labels = schema_itr->at("labels").as_object();
+        auto counters_values = dump_itr->at("counters").as_object();
+        labels_t labels;
+
+        for (auto &label: counters_labels) {
+          std::string label_key = {label.key().begin(), label.key().end()};
+          labels[label_key] = quote(label.value().as_string().c_str());
         }
-        // For now this is only required for rgw multi-site metrics
-        auto multisite_labels_and_name = add_fixed_name_metrics(counter_name);
-        if (!multisite_labels_and_name.first.empty()) {
-          labels.insert(multisite_labels_and_name.first.begin(), multisite_labels_and_name.first.end());
-          counter_name = multisite_labels_and_name.second;
+        for (auto &counter : counters) {
+          json_object counter_group = counter.value().as_object();
+          if (counter_group["priority"].as_int64() < prio_limit) {
+            continue;
+          }
+          std::string counter_name_init =  {counter.key().begin(), counter.key().end()};
+          std::string counter_name = perf_group + "_" + counter_name_init;
+          promethize(counter_name);
+
+          if (counters_labels.empty()) {
+            auto labels_and_name = get_labels_and_metric_name(daemon_name, counter_name);
+            labels = labels_and_name.first;
+            counter_name = labels_and_name.second;
+          }
+          // For now this is only required for rgw multi-site metrics
+          auto multisite_labels_and_name = add_fixed_name_metrics(counter_name);
+          if (!multisite_labels_and_name.first.empty()) {
+            labels.insert(multisite_labels_and_name.first.begin(), multisite_labels_and_name.first.end());
+            counter_name = multisite_labels_and_name.second;
+          }
+          labels.insert({"ceph_daemon", quote(daemon_name)});
+          auto perf_values = counters_values.at(counter_name_init);
+          dump_asok_metric(counter_group, perf_values, counter_name, labels);
         }
-        labels.insert({"ceph_daemon", quote(daemon_name)});
-        auto perf_values = counters_values.at(counter_name_init);
-        dump_asok_metric(counter_group, perf_values, counter_name, labels);
       }
     }
     std::string config_show =
@@ -348,19 +354,11 @@ void DaemonMetricCollector::dump_asok_metric(json_object perf_info,
 
   if (type & PERFCOUNTER_LONGRUNAVG) {
     int64_t count = perf_values.as_object()["avgcount"].as_int64();
-    add_metric(builder, count, name + "_count", description, metric_type,
+    add_metric(builder, count, name + "_count", description + " Count", "counter",
                labels);
     json_value sum_value = perf_values.as_object()["sum"];
-    add_double_or_int_metric(builder, sum_value, name + "_sum", description,
+    add_double_or_int_metric(builder, sum_value, name + "_sum", description + " Total",
                              metric_type, labels);
-  } else if (type & PERFCOUNTER_TIME) {
-    if (perf_values.is_int64()) {
-      double value = perf_values.as_int64() / 1000000000.0f;
-      add_metric(builder, value, name, description, metric_type, labels);
-    } else if (perf_values.is_double()) {
-      double value = perf_values.as_double() / 1000000000.0f;
-      add_metric(builder, value, name, description, metric_type, labels);
-    }
   } else {
     add_double_or_int_metric(builder, perf_values, name, description,
                              metric_type, labels);