diff --git a/sysfs/net_class.go b/sysfs/net_class.go index e6e223984..ab1e3356b 100644 --- a/sysfs/net_class.go +++ b/sysfs/net_class.go @@ -20,6 +20,7 @@ import ( "io/ioutil" "os" "path/filepath" + "regexp" "github.com/prometheus/procfs/internal/util" ) @@ -63,7 +64,7 @@ type NetClassIface struct { type NetClass map[string]NetClassIface // NetClassDevices scans /sys/class/net for devices and returns them as a list of names. -func (fs FS) NetClassDevices() ([]string, error) { +func (fs FS) NetClassDevices(ignoredDevicesPattern *regexp.Regexp) ([]string, error) { var res []string path := fs.sys.Path(netclassPath) @@ -76,6 +77,9 @@ func (fs FS) NetClassDevices() ([]string, error) { if deviceDir.Mode().IsRegular() { continue } + if ignoredDevicesPattern.MatchString(deviceDir.Name()) { + continue + } res = append(res, deviceDir.Name()) } @@ -83,8 +87,8 @@ func (fs FS) NetClassDevices() ([]string, error) { } // NetClass returns info for all net interfaces (iface) read from /sys/class/net/. -func (fs FS) NetClass() (NetClass, error) { - devices, err := fs.NetClassDevices() +func (fs FS) NetClass(ignoredDevicesPattern *regexp.Regexp) (NetClass, error) { + devices, err := fs.NetClassDevices(ignoredDevicesPattern) if err != nil { return nil, err } diff --git a/sysfs/net_class_test.go b/sysfs/net_class_test.go index bc219f340..ca6e38e79 100644 --- a/sysfs/net_class_test.go +++ b/sysfs/net_class_test.go @@ -17,6 +17,7 @@ package sysfs import ( "reflect" + "regexp" "testing" ) @@ -26,7 +27,12 @@ func TestNewNetClassDevices(t *testing.T) { t.Fatal(err) } - devices, err := fs.NetClassDevices() + re, err := regexp.Compile("^$") + if err != nil { + t.Fatal(err) + } + + devices, err := fs.NetClassDevices(re) if err != nil { t.Fatal(err) } @@ -39,13 +45,39 @@ func TestNewNetClassDevices(t *testing.T) { } } +func TestNewNetClassDevicesFilter(t *testing.T) { + fs, err := NewFS(sysTestFixtures) + if err != nil { + t.Fatal(err) + } + + re, err := regexp.Compile("eth") + if err != nil { + t.Fatal(err) + } + + devices, err := fs.NetClassDevices(re) + if err != nil { + t.Fatal(err) + } + + if len(devices) != 0 { + t.Errorf("Unexpected number of devices, want %d, have %d", 0, len(devices)) + } +} + func TestNetClass(t *testing.T) { fs, err := NewFS(sysTestFixtures) if err != nil { t.Fatal(err) } - nc, err := fs.NetClass() + re, err := regexp.Compile("^$") + if err != nil { + t.Fatal(err) + } + + nc, err := fs.NetClass(re) if err != nil { t.Fatal(err) }