|
|
|
@ -36,6 +36,7 @@ var (
|
|
|
|
|
hwmonInvalidMetricChars = regexp.MustCompile("[^a-z0-9:_]") |
|
|
|
|
hwmonFilenameFormat = regexp.MustCompile(`^(?P<type>[^0-9]+)(?P<id>[0-9]*)?(_(?P<property>.+))?$`) |
|
|
|
|
hwmonLabelDesc = []string{"chip", "sensor"} |
|
|
|
|
hwmonChipNameLabelDesc = []string{"chip", "chip_name"} |
|
|
|
|
hwmonSensorTypes = []string{ |
|
|
|
|
"vrm", "beep_enable", "update_interval", "in", "cpu", "fan", |
|
|
|
|
"pwm", "temp", "curr", "power", "energy", "humidity", |
|
|
|
@ -143,6 +144,26 @@ func (c *hwMonCollector) updateHwmon(ch chan<- prometheus.Metric, dir string) (e
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
hwmonChipName, err := c.hwmonHumanReadableChipName(dir) |
|
|
|
|
|
|
|
|
|
if err == nil { |
|
|
|
|
// sensor chip metadata
|
|
|
|
|
desc := prometheus.NewDesc( |
|
|
|
|
"node_hwmon_chip_names", |
|
|
|
|
"Annotation metric for human-readable chip names", |
|
|
|
|
hwmonChipNameLabelDesc, |
|
|
|
|
nil, |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
ch <- prometheus.MustNewConstMetric( |
|
|
|
|
desc, |
|
|
|
|
prometheus.GaugeValue, |
|
|
|
|
1.0, |
|
|
|
|
hwmonName, |
|
|
|
|
hwmonChipName, |
|
|
|
|
) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// format all sensors
|
|
|
|
|
for sensor, sensorData := range data { |
|
|
|
|
|
|
|
|
@ -351,6 +372,27 @@ func (c *hwMonCollector) hwmonName(dir string) (string, error) {
|
|
|
|
|
return "", errors.New("Could not derive a monitoring name for " + dir) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (c *hwMonCollector) hwmonHumanReadableChipName(dir string) (string, error) { |
|
|
|
|
// this is similar to the methods in hwmonName, but with different
|
|
|
|
|
// precedences -- we can allow duplicates here.
|
|
|
|
|
|
|
|
|
|
// preference 1: is there a name file
|
|
|
|
|
|
|
|
|
|
sysnameRaw, nameErr := ioutil.ReadFile(path.Join(dir, "name")) |
|
|
|
|
if nameErr != nil { |
|
|
|
|
return "", nameErr |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if string(sysnameRaw) != "" { |
|
|
|
|
cleanName := cleanMetricName(string(sysnameRaw)) |
|
|
|
|
if cleanName != "" { |
|
|
|
|
return cleanName, nil |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return "", errors.New("Could not derive a human-readable chip type for " + dir) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (c *hwMonCollector) Update(ch chan<- prometheus.Metric) (err error) { |
|
|
|
|
// Step 1: scan /sys/class/hwmon, resolve all symlinks and call
|
|
|
|
|
// updatesHwmon for each folder
|
|
|
|
|