|
@@ -9,13 +9,11 @@ namespace OhmGraphite
|
|
{
|
|
{
|
|
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
|
|
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
|
|
private readonly IGiveSensors _collector;
|
|
private readonly IGiveSensors _collector;
|
|
- private readonly string _localHost;
|
|
|
|
private MetricFactory _metrics;
|
|
private MetricFactory _metrics;
|
|
|
|
|
|
- public PrometheusCollection(IGiveSensors collector, string localHost, CollectorRegistry registry)
|
|
|
|
|
|
+ public PrometheusCollection(IGiveSensors collector, CollectorRegistry registry)
|
|
{
|
|
{
|
|
_collector = collector;
|
|
_collector = collector;
|
|
- _localHost = localHost;
|
|
|
|
registry.AddBeforeCollectCallback(UpdateMetrics);
|
|
registry.AddBeforeCollectCallback(UpdateMetrics);
|
|
_metrics = Metrics.WithCustomRegistry(registry);
|
|
_metrics = Metrics.WithCustomRegistry(registry);
|
|
}
|
|
}
|
|
@@ -25,23 +23,65 @@ namespace OhmGraphite
|
|
Logger.LogAction("prometheus update metrics", PollSensors);
|
|
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()
|
|
private void PollSensors()
|
|
{
|
|
{
|
|
foreach (var sensor in _collector.ReadAllSensors())
|
|
foreach (var sensor in _collector.ReadAllSensors())
|
|
{
|
|
{
|
|
|
|
+ string suffix = SuffixForSensorType(sensor.SensorType, out float multiplier);
|
|
|
|
+
|
|
_metrics.CreateGauge(
|
|
_metrics.CreateGauge(
|
|
- sensor.Identifier.Substring(1)
|
|
|
|
- .Replace('/', '_')
|
|
|
|
- .Replace("{", null)
|
|
|
|
- .Replace("}", null)
|
|
|
|
- .Replace('-', '_'),
|
|
|
|
|
|
+ String.Format(
|
|
|
|
+ "ohm_{0}_{1}",
|
|
|
|
+ Enum.GetName(typeof(HardwareType), sensor.HardwareType).ToLower(),
|
|
|
|
+ suffix
|
|
|
|
+ ),
|
|
"Metric reported by open hardware sensor",
|
|
"Metric reported by open hardware sensor",
|
|
- "host", "app", "hardware", "hardware_type", "sensor", "sensor_index")
|
|
|
|
- .WithLabels(_localHost, "ohm", 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);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|