- Removed HighPrecisionTemperature property and just mapped it to Temperature

- Converted decikelvin to Celsius
- Added a loop to get the values from each zone
- Added documentation for percent passive limit and throttle reasons
This commit is contained in:
Stewart Thomson 2019-07-15 09:50:02 -04:00
parent 1a67ca54b6
commit 47656b16bd
2 changed files with 42 additions and 43 deletions

View File

@ -12,38 +12,37 @@ func init() {
// A ThermalZoneCollector is a Prometheus collector for WMI Win32_PerfRawData_Counters_ThermalZoneInformation metrics
type ThermalZoneCollector struct {
HighPrecisionTemperature *prometheus.Desc
PercentPassiveLimit *prometheus.Desc
Temperature *prometheus.Desc
ThrottleReasons *prometheus.Desc
PercentPassiveLimit *prometheus.Desc
Temperature *prometheus.Desc
ThrottleReasons *prometheus.Desc
}
// NewThermalZoneCollector ...
func NewThermalZoneCollector() (Collector, error) {
const subsystem = "thermalzone"
return &ThermalZoneCollector{
HighPrecisionTemperature: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "high_precision_temperature"),
"(HighPrecisionTemperature)",
nil,
Temperature: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "temperature_celsius"),
"(Temperature)",
[]string{
"Name",
},
nil,
),
PercentPassiveLimit: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "percent_passive_limit"),
"(PercentPassiveLimit)",
nil,
nil,
),
Temperature: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "temperature"),
"(Temperature)",
nil,
[]string{
"Name",
},
nil,
),
ThrottleReasons: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "throttle_reasons"),
"(ThrottleReasons)",
nil,
[]string{
"Name",
},
nil,
),
}, nil
@ -60,13 +59,12 @@ func (c *ThermalZoneCollector) Collect(ch chan<- prometheus.Metric) error {
}
// Win32_PerfRawData_Counters_ThermalZoneInformation docs:
// - <add link to documentation here>
// https://wutils.com/wmi/root/cimv2/win32_perfrawdata_counters_thermalzoneinformation/
type Win32_PerfRawData_Counters_ThermalZoneInformation struct {
Name string
HighPrecisionTemperature uint32
PercentPassiveLimit uint32
Temperature uint32
ThrottleReasons uint32
}
@ -77,29 +75,29 @@ func (c *ThermalZoneCollector) collect(ch chan<- prometheus.Metric) (*prometheus
return nil, err
}
ch <- prometheus.MustNewConstMetric(
c.HighPrecisionTemperature,
prometheus.GaugeValue,
float64(dst[0].HighPrecisionTemperature),
)
for _, info := range dst {
//Divide by 10 and subtract 273.15 to convert decikelvin to celsius
ch <- prometheus.MustNewConstMetric(
c.Temperature,
prometheus.GaugeValue,
(float64(info.HighPrecisionTemperature)/10.0)-273.15,
info.Name,
)
ch <- prometheus.MustNewConstMetric(
c.PercentPassiveLimit,
prometheus.GaugeValue,
float64(dst[0].PercentPassiveLimit),
)
ch <- prometheus.MustNewConstMetric(
c.PercentPassiveLimit,
prometheus.GaugeValue,
float64(info.PercentPassiveLimit),
info.Name,
)
ch <- prometheus.MustNewConstMetric(
c.Temperature,
prometheus.GaugeValue,
float64(dst[0].Temperature),
)
ch <- prometheus.MustNewConstMetric(
c.ThrottleReasons,
prometheus.GaugeValue,
float64(dst[0].ThrottleReasons),
)
ch <- prometheus.MustNewConstMetric(
c.ThrottleReasons,
prometheus.GaugeValue,
float64(info.ThrottleReasons),
info.Name,
)
}
return nil, nil
}

View File

@ -16,10 +16,11 @@ None
Name | Description | Type | Labels
-----|-------------|------|-------
`wmi_thermalzone_high_precision_temperature` | _Not yet documented_ | gauge | None
`wmi_thermalzone_percent_passive_limit` | _Not yet documented_ | gauge | None
`wmi_thermalzone_temperature ` | _Not yet documented_ | gauge | None
`wmi_thermalzone_throttle_reasons ` | _Not yet documented_ | gauge | None
`wmi_thermalzone_percent_passive_limit` | % Passive Limit is the current limit this thermal zone is placing on the devices it controls. A limit of 100% indicates the devices are unconstrained. A limit of 0% indicates the devices are fully constrained. | gauge | None
`wmi_thermalzone_temperature_celsius ` | Temperature of the thermal zone, in degrees Celsius. | gauge | None
`wmi_thermalzone_throttle_reasons ` | Throttle Reasons indicate reasons why the thermal zone is limiting performance of the devices it controls. 0x0 The zone is not throttled. 0x1 The zone is throttled for thermal reasons. 0x2 The zone is throttled to limit electrical current. | gauge | None
[`Throttle reasons` source](https://docs.microsoft.com/en-us/windows-hardware/design/device-experiences/examples--requirements-and-diagnostics)
### Example metric
_This collector does not yet have explained examples, we would appreciate your help adding them!_