@@ -19,6 +19,7 @@ package collector
1919import (
2020 "errors"
2121 "fmt"
22+ "net"
2223 "os"
2324 "regexp"
2425
@@ -96,12 +97,12 @@ func (c *netClassCollector) netClassSysfsUpdate(ch chan<- prometheus.Metric) err
9697 infoDesc := prometheus .NewDesc (
9798 prometheus .BuildFQName (namespace , c .subsystem , "info" ),
9899 "Non-numeric data from /sys/class/net/<iface>, value is always 1." ,
99- []string {"device" , "address" , "broadcast" , "duplex" , "operstate" , "ifalias" },
100+ []string {"device" , "address" , "broadcast" , "duplex" , "operstate" , "adminstate" , " ifalias" },
100101 nil ,
101102 )
102103 infoValue := 1.0
103104
104- ch <- prometheus .MustNewConstMetric (infoDesc , prometheus .GaugeValue , infoValue , ifaceInfo .Name , ifaceInfo .Address , ifaceInfo .Broadcast , ifaceInfo .Duplex , ifaceInfo .OperState , ifaceInfo .IfAlias )
105+ ch <- prometheus .MustNewConstMetric (infoDesc , prometheus .GaugeValue , infoValue , ifaceInfo .Name , ifaceInfo .Address , ifaceInfo .Broadcast , ifaceInfo .Duplex , ifaceInfo .OperState , getAdminState ( ifaceInfo . Flags ), ifaceInfo .IfAlias )
105106
106107 pushMetric (ch , c .getFieldDesc ("address_assign_type" ), "address_assign_type" , ifaceInfo .AddrAssignType , prometheus .GaugeValue , ifaceInfo .Name )
107108 pushMetric (ch , c .getFieldDesc ("carrier" ), "carrier" , ifaceInfo .Carrier , prometheus .GaugeValue , ifaceInfo .Name )
@@ -170,3 +171,15 @@ func (c *netClassCollector) getNetClassInfo() (sysfs.NetClass, error) {
170171
171172 return netClass , nil
172173}
174+
175+ func getAdminState (flags * int64 ) string {
176+ if flags == nil {
177+ return "unknown"
178+ }
179+
180+ if * flags & int64 (net .FlagUp ) == 1 {
181+ return "up"
182+ }
183+
184+ return "down"
185+ }
0 commit comments