From 833216dc9e729e9427f7c4cdf769be6d4b3f1d30 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Beno=C3=AEt=20Knecht?= <bknecht@protonmail.ch>
Date: Tue, 14 Jun 2022 20:04:59 +0200
Subject: [PATCH] collector: Make udev data path optional
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Instead of hard-coding the path to `/run/udev/data`, intoduce a
`--path.udev.data` flag that defaults to that value.

Signed-off-by: BenoƮt Knecht <bknecht@protonmail.ch>
---
 collector/diskstats_linux.go |  2 +-
 collector/paths.go           | 11 ++++++++---
 2 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/collector/diskstats_linux.go b/collector/diskstats_linux.go
index 893684e5..83247828 100644
--- a/collector/diskstats_linux.go
+++ b/collector/diskstats_linux.go
@@ -349,7 +349,7 @@ func (c *diskstatsCollector) Update(ch chan<- prometheus.Metric) error {
 }
 
 func udevDeviceInformation(major, minor uint32) (udevInfo, error) {
-	filename := fmt.Sprintf("/run/udev/data/b%d:%d", major, minor)
+	filename := udevDataFilePath(fmt.Sprintf("b%d:%d", major, minor))
 
 	data, err := os.Open(filename)
 	if err != nil {
diff --git a/collector/paths.go b/collector/paths.go
index 5f5a7b44..61aa6470 100644
--- a/collector/paths.go
+++ b/collector/paths.go
@@ -23,9 +23,10 @@ import (
 
 var (
 	// The path of the proc filesystem.
-	procPath   = kingpin.Flag("path.procfs", "procfs mountpoint.").Default(procfs.DefaultMountPoint).String()
-	sysPath    = kingpin.Flag("path.sysfs", "sysfs mountpoint.").Default("/sys").String()
-	rootfsPath = kingpin.Flag("path.rootfs", "rootfs mountpoint.").Default("/").String()
+	procPath     = kingpin.Flag("path.procfs", "procfs mountpoint.").Default(procfs.DefaultMountPoint).String()
+	sysPath      = kingpin.Flag("path.sysfs", "sysfs mountpoint.").Default("/sys").String()
+	rootfsPath   = kingpin.Flag("path.rootfs", "rootfs mountpoint.").Default("/").String()
+	udevDataPath = kingpin.Flag("path.udev.data", "udev data path.").Default("/run/udev/data").String()
 )
 
 func procFilePath(name string) string {
@@ -40,6 +41,10 @@ func rootfsFilePath(name string) string {
 	return filepath.Join(*rootfsPath, name)
 }
 
+func udevDataFilePath(name string) string {
+	return filepath.Join(*udevDataPath, name)
+}
+
 func rootfsStripPrefix(path string) string {
 	if *rootfsPath == "/" {
 		return path