1
0
Эх сурвалжийг харах

Adding hardware type and sensor type to the metrics name

Henrique Gemignani Passos Lima 6 жил өмнө
parent
commit
2c8a7cc64a

+ 1 - 1
OhmGraphite.Test/PrometheusTest.cs

@@ -22,7 +22,7 @@ namespace OhmGraphite.Test
                 var resp = await client.GetAsync("http://localhost:21881/metrics");
                 Assert.True(resp.IsSuccessStatusCode);
                 var content = await resp.Content.ReadAsStringAsync();
-                Assert.Contains("# HELP ohm_temperature Metric reported by open hardware sensor", content);
+                Assert.Contains("# HELP ohm_cpu_temperature_celsius Metric reported by open hardware sensor", content);
             }
             finally
             {

+ 53 - 7
OhmGraphite/PrometheusCollection.cs

@@ -23,19 +23,65 @@ namespace OhmGraphite
             Logger.LogAction("prometheus update metrics", PollSensors);
         }
 
+        private string SuffixForSensorType(SensorType type, out float multiplier)
+        {
+            multiplier = 1.0f;
+            switch (type)
+            {
+                case SensorType.Voltage: // V
+                    return "voltage_volts";
+
+                case SensorType.Clock: // MHz
+                    multiplier = 1000000;
+                    return "clock_hertz";
+
+                case SensorType.Temperature: // °C
+                    return "temperature_celsius";
+
+                case SensorType.Frequency: // Hz
+                    return "frequency_hertz";
+
+                case SensorType.Power: // W
+                    return "power_watts";
+
+                case SensorType.Data: // GB = 2^30 Bytes
+                    multiplier = 1073741824;
+                    return "bytes";
+
+                case SensorType.SmallData: // MB = 2^20 Bytes
+                    multiplier = 1048576;
+                    return "bytes";
+
+                case SensorType.Throughput: // B/s
+                    return "throughput_bytes_per_second";
+
+                case SensorType.Load: // %
+                case SensorType.Control: // %
+                case SensorType.Level: // %
+                case SensorType.Fan: // RPM
+                case SensorType.Flow: // L/h
+                case SensorType.Factor: // 1
+                default:
+                    return type.ToString().ToLower();
+            }
+        }
+
         private void PollSensors()
         {
             foreach (var sensor in _collector.ReadAllSensors())
             {
+                string suffix = SuffixForSensorType(sensor.SensorType, out float multiplier);
+
                 _metrics.CreateGauge(
-                        "ohm_" + sensor.SensorType.ToString().ToLower(),
+                        String.Format(
+                            "ohm_{0}_{1}",
+                            Enum.GetName(typeof(HardwareType), sensor.HardwareType).ToLower(),
+                            suffix
+                        ),
                         "Metric reported by open hardware sensor",
-                        "hardware", "hardware_type", "sensor", "sensor_index")
-                    .WithLabels(sensor.Hardware,
-                        Enum.GetName(typeof(HardwareType), sensor.HardwareType),
-                        sensor.Sensor,
-                        sensor.SensorIndex.ToString())
-                    .Set(sensor.Value);
+                        "hardware", "sensor")
+                    .WithLabels(sensor.Hardware, sensor.Sensor)
+                    .Set(sensor.Value * multiplier);
             }
         }
     }