@ -131,7 +131,7 @@ func NewSystemdCollector(logger log.Logger) (Collector, error) {
"Total number of refused socket connections" , [ ] string { "name" } , nil )
systemdVersionDesc := prometheus . NewDesc (
prometheus . BuildFQName ( namespace , subsystem , "version" ) ,
"Detected systemd version" , [ ] string { } , nil )
"Detected systemd version" , [ ] string { "version" } , nil )
if * oldUnitExclude != "" {
if ! unitExcludeSet {
@ -183,12 +183,16 @@ func (c *systemdCollector) Update(ch chan<- prometheus.Metric) error {
}
defer conn . Close ( )
systemdVersion := c . getSystemdVersion ( conn )
systemdVersion , systemdVersionFull := c . getSystemdVersion ( conn )
if systemdVersion < minSystemdVersionSystemState {
level . Debug ( c . logger ) . Log ( "msg" , "Detected systemd version is lower than minimum, some systemd state and timer metrics will not be available" , "current" , systemdVersion , "minimum" , minSystemdVersionSystemState )
}
ch <- prometheus . MustNewConstMetric (
c . systemdVersionDesc , prometheus . GaugeValue , systemdVersion )
c . systemdVersionDesc ,
prometheus . GaugeValue ,
systemdVersion ,
systemdVersionFull ,
)
allUnits , err := c . getAllUnits ( conn )
if err != nil {
@ -487,18 +491,19 @@ func filterUnits(units []unit, includePattern, excludePattern *regexp.Regexp, lo
return filtered
}
func ( c * systemdCollector ) getSystemdVersion ( conn * dbus . Conn ) float64 {
func ( c * systemdCollector ) getSystemdVersion ( conn * dbus . Conn ) ( float64 , string ) {
version , err := conn . GetManagerProperty ( "Version" )
if err != nil {
level . Debug ( c . logger ) . Log ( "msg" , "Unable to get systemd version property, defaulting to 0" )
return 0
return 0 , ""
}
version = strings . TrimPrefix ( strings . TrimSuffix ( version , ` " ` ) , ` " ` )
level . Debug ( c . logger ) . Log ( "msg" , "Got systemd version" , "version" , version )
version = systemdVersionRE . FindString ( version )
v , err := strconv . ParseFloat ( v ersion, 64 )
parsedVersion : = systemdVersionRE . FindString ( version )
v , err := strconv . ParseFloat ( parsedV ersion, 64 )
if err != nil {
level . Debug ( c . logger ) . Log ( "msg" , "Got invalid systemd version" , "version" , version )
return 0
return 0 , ""
}
return v
return v , version
}