aboutsummaryrefslogtreecommitdiff
path: root/collector/netclass_linux.go
diff options
context:
space:
mode:
authorPaul Gier <pgier@redhat.com>2019-04-10 11:16:12 -0500
committerBen Kochie <superq@gmail.com>2019-04-10 18:16:12 +0200
commitb1298677aa13a5f48dd5303120fa4a4bd4579ab9 (patch)
treea5674890c7713d3d1bd9438a2c3629daa3ca373b /collector/netclass_linux.go
parentfbe390709f5370cd9092233239208fb51f46d15f (diff)
downloadprometheus_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.go18
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
32type netClassCollector struct { 32type 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.
43func NewNetClassCollector() (Collector, error) { 44func 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
52func (c *netClassCollector) Update(ch chan<- prometheus.Metric) error { 58func (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
165func getNetClassInfo(ignore *regexp.Regexp) (sysfs.NetClass, error) { 171func (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 }