mirror of
https://github.com/prometheus/node_exporter.git
synced 2024-12-31 16:37:31 -08:00
1c17481a42
Switch to Update using the Collecter Collect interface, due to not knowing all metricnames in all modules beforehand we can't use Describe and thus the full Collecter interface. Remove 'updates', it's meaning varies by module and doesn't add much.
53 lines
1.2 KiB
Go
53 lines
1.2 KiB
Go
// +build !nontp
|
|
|
|
package collector
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"time"
|
|
|
|
"github.com/beevik/ntp"
|
|
"github.com/golang/glog"
|
|
"github.com/prometheus/client_golang/prometheus"
|
|
)
|
|
|
|
var (
|
|
ntpServer = flag.String("ntpServer", "", "NTP server to use for ntp collector.")
|
|
ntpDrift = prometheus.NewGauge(prometheus.GaugeOpts{
|
|
Namespace: Namespace,
|
|
Name: "ntp_drift_seconds",
|
|
Help: "Time between system time and ntp time.",
|
|
})
|
|
)
|
|
|
|
type ntpCollector struct {
|
|
}
|
|
|
|
func init() {
|
|
Factories["ntp"] = NewNtpCollector
|
|
}
|
|
|
|
// Takes a config struct and prometheus registry and returns a new Collector exposing
|
|
// the offset between ntp and the current system time.
|
|
func NewNtpCollector(config Config) (Collector, error) {
|
|
if *ntpServer == "" {
|
|
return nil, fmt.Errorf("No NTP server specifies, see --ntpServer")
|
|
}
|
|
c := ntpCollector{}
|
|
|
|
return &c, nil
|
|
}
|
|
|
|
func (c *ntpCollector) Update(ch chan<- prometheus.Metric) (err error) {
|
|
t, err := ntp.Time(*ntpServer)
|
|
if err != nil {
|
|
return fmt.Errorf("Couldn't get ntp drift: %s", err)
|
|
}
|
|
drift := t.Sub(time.Now())
|
|
glog.V(1).Infof("Set ntp_drift_seconds: %f", drift.Seconds())
|
|
ntpDrift.Set(drift.Seconds())
|
|
ntpDrift.Collect(ch)
|
|
return err
|
|
}
|