Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

hwmon: Provide annotation metric to link chip sysfs paths to human-readable chip types #359

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions collector/fixtures/e2e-output.txt
Original file line number Diff line number Diff line change
Expand Up @@ -477,6 +477,11 @@ node_filefd_maximum 1.631329e+06
# HELP node_forks Total number of forks.
# TYPE node_forks counter
node_forks 26442
# HELP node_hwmon_chip_names Annotation metric for human-readable chip names
# TYPE node_hwmon_chip_names gauge
node_hwmon_chip_names{chip="nct6779",chip_name="nct6779"} 1
node_hwmon_chip_names{chip="platform_coretemp_0",chip_name="coretemp"} 1
node_hwmon_chip_names{chip="platform_coretemp_1",chip_name="coretemp"} 1
# HELP node_hwmon_fan_alarm Hardware sensor alarm status (fan)
# TYPE node_hwmon_fan_alarm gauge
node_hwmon_fan_alarm{chip="nct6779",sensor="fan2"} 0
Expand Down
42 changes: 42 additions & 0 deletions collector/hwmon_linux.go
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down Expand Up @@ -143,6 +144,26 @@ func (c *hwMonCollector) updateHwmon(ch chan<- prometheus.Metric, dir string) (e
}
}

hwmonChipName, err := c.hwmonHumanReadableChipName(dir)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please remove newline, it's uncommon to have a newline between returning and error and checking it.

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 {

Expand Down Expand Up @@ -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
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you move this above the function and start with "hwmonHumanReadableChipName is similar to ...."?

// 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
Expand Down