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>
This commit is contained in:
Paul Gier 2019-04-10 11:16:12 -05:00 committed by Ben Kochie
commit b1298677aa
8 changed files with 63 additions and 47 deletions

View file

@ -30,6 +30,7 @@ var (
)
type netClassCollector struct {
fs sysfs.FS
subsystem string
ignoredDevicesPattern *regexp.Regexp
metricDescs map[string]*prometheus.Desc
@ -41,8 +42,13 @@ func init() {
// NewNetClassCollector returns a new Collector exposing network class stats.
func NewNetClassCollector() (Collector, error) {
fs, err := sysfs.NewFS(*sysPath)
if err != nil {
return nil, fmt.Errorf("failed to open sysfs: %v", err)
}
pattern := regexp.MustCompile(*netclassIgnoredDevices)
return &netClassCollector{
fs: fs,
subsystem: "network",
ignoredDevicesPattern: pattern,
metricDescs: map[string]*prometheus.Desc{},
@ -50,7 +56,7 @@ func NewNetClassCollector() (Collector, error) {
}
func (c *netClassCollector) Update(ch chan<- prometheus.Metric) error {
netClass, err := getNetClassInfo(c.ignoredDevicesPattern)
netClass, err := c.getNetClassInfo()
if err != nil {
return fmt.Errorf("could not get net class info: %s", err)
}
@ -162,19 +168,15 @@ func pushMetric(ch chan<- prometheus.Metric, subsystem string, name string, valu
ch <- prometheus.MustNewConstMetric(fieldDesc, valueType, float64(value), ifaceName)
}
func getNetClassInfo(ignore *regexp.Regexp) (sysfs.NetClass, error) {
fs, err := sysfs.NewFS(*sysPath)
if err != nil {
return nil, err
}
netClass, err := fs.NewNetClass()
func (c *netClassCollector) getNetClassInfo() (sysfs.NetClass, error) {
netClass, err := c.fs.NewNetClass()
if err != nil {
return netClass, fmt.Errorf("error obtaining net class info: %s", err)
}
for device := range netClass {
if ignore.MatchString(device) {
if c.ignoredDevicesPattern.MatchString(device) {
delete(netClass, device)
}
}