diff options
author | Paul Gier <pgier@redhat.com> | 2019-04-10 11:16:12 -0500 |
---|---|---|
committer | Ben Kochie <superq@gmail.com> | 2019-04-10 18:16:12 +0200 |
commit | b1298677aa13a5f48dd5303120fa4a4bd4579ab9 (patch) | |
tree | a5674890c7713d3d1bd9438a2c3629daa3ca373b /collector/netclass_linux.go | |
parent | fbe390709f5370cd9092233239208fb51f46d15f (diff) | |
download | prometheus_node_collector-b1298677aa13a5f48dd5303120fa4a4bd4579ab9.tar.bz2 prometheus_node_collector-b1298677aa13a5f48dd5303120fa4a4bd4579ab9.tar.xz prometheus_node_collector-b1298677aa13a5f48dd5303120fa4a4bd4579ab9.zip |
Early init of procfs (#1315)
Minor change to match naming convention in other collectors.
Initialize the proc or sys FS instance once while initializing
each collector instead of re-creating for each metric update.
Signed-off-by: Paul Gier <pgier@redhat.com>
Diffstat (limited to 'collector/netclass_linux.go')
-rw-r--r-- | collector/netclass_linux.go | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/collector/netclass_linux.go b/collector/netclass_linux.go index d70db58..d02ead6 100644 --- a/collector/netclass_linux.go +++ b/collector/netclass_linux.go | |||
@@ -30,6 +30,7 @@ var ( | |||
30 | ) | 30 | ) |
31 | 31 | ||
32 | type netClassCollector struct { | 32 | type netClassCollector struct { |
33 | fs sysfs.FS | ||
33 | subsystem string | 34 | subsystem string |
34 | ignoredDevicesPattern *regexp.Regexp | 35 | ignoredDevicesPattern *regexp.Regexp |
35 | metricDescs map[string]*prometheus.Desc | 36 | metricDescs map[string]*prometheus.Desc |
@@ -41,8 +42,13 @@ func init() { | |||
41 | 42 | ||
42 | // NewNetClassCollector returns a new Collector exposing network class stats. | 43 | // NewNetClassCollector returns a new Collector exposing network class stats. |
43 | func NewNetClassCollector() (Collector, error) { | 44 | func NewNetClassCollector() (Collector, error) { |
45 | fs, err := sysfs.NewFS(*sysPath) | ||
46 | if err != nil { | ||
47 | return nil, fmt.Errorf("failed to open sysfs: %v", err) | ||
48 | } | ||
44 | pattern := regexp.MustCompile(*netclassIgnoredDevices) | 49 | pattern := regexp.MustCompile(*netclassIgnoredDevices) |
45 | return &netClassCollector{ | 50 | return &netClassCollector{ |
51 | fs: fs, | ||
46 | subsystem: "network", | 52 | subsystem: "network", |
47 | ignoredDevicesPattern: pattern, | 53 | ignoredDevicesPattern: pattern, |
48 | metricDescs: map[string]*prometheus.Desc{}, | 54 | metricDescs: map[string]*prometheus.Desc{}, |
@@ -50,7 +56,7 @@ func NewNetClassCollector() (Collector, error) { | |||
50 | } | 56 | } |
51 | 57 | ||
52 | func (c *netClassCollector) Update(ch chan<- prometheus.Metric) error { | 58 | func (c *netClassCollector) Update(ch chan<- prometheus.Metric) error { |
53 | netClass, err := getNetClassInfo(c.ignoredDevicesPattern) | 59 | netClass, err := c.getNetClassInfo() |
54 | if err != nil { | 60 | if err != nil { |
55 | return fmt.Errorf("could not get net class info: %s", err) | 61 | return fmt.Errorf("could not get net class info: %s", err) |
56 | } | 62 | } |
@@ -162,19 +168,15 @@ func pushMetric(ch chan<- prometheus.Metric, subsystem string, name string, valu | |||
162 | ch <- prometheus.MustNewConstMetric(fieldDesc, valueType, float64(value), ifaceName) | 168 | ch <- prometheus.MustNewConstMetric(fieldDesc, valueType, float64(value), ifaceName) |
163 | } | 169 | } |
164 | 170 | ||
165 | func getNetClassInfo(ignore *regexp.Regexp) (sysfs.NetClass, error) { | 171 | func (c *netClassCollector) getNetClassInfo() (sysfs.NetClass, error) { |
166 | fs, err := sysfs.NewFS(*sysPath) | 172 | netClass, err := c.fs.NewNetClass() |
167 | if err != nil { | ||
168 | return nil, err | ||
169 | } | ||
170 | netClass, err := fs.NewNetClass() | ||
171 | 173 | ||
172 | if err != nil { | 174 | if err != nil { |
173 | return netClass, fmt.Errorf("error obtaining net class info: %s", err) | 175 | return netClass, fmt.Errorf("error obtaining net class info: %s", err) |
174 | } | 176 | } |
175 | 177 | ||
176 | for device := range netClass { | 178 | for device := range netClass { |
177 | if ignore.MatchString(device) { | 179 | if c.ignoredDevicesPattern.MatchString(device) { |
178 | delete(netClass, device) | 180 | delete(netClass, device) |
179 | } | 181 | } |
180 | } | 182 | } |