From 13be860e257b0635156f01f040e74145a29ba434 Mon Sep 17 00:00:00 2001 From: Ben Kochie Date: Sun, 20 Jun 2021 09:17:16 +0200 Subject: [PATCH] Add time zone offset metric Add the time zone and offset in seconds. Closes: https://github.com/prometheus/node_exporter/issues/2052 Signed-off-by: Ben Kochie --- CHANGELOG.md | 1 + collector/time.go | 26 +++++++++++++++++++------- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 12898ad3c1..c5ab0b4b0d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ NOTE: Filesystem collector flags have been renamed. `--collector.filesystem.igno * [CHANGE] Rename filesystem collector flags to match other collectors #2012 * [FEATURE] Add flag to ignore network speed if it is unknown #1989 +* [ENHANCEMENT] Add time zone offset metric #2060 * [BUGFIX] Add ErrorLog plumbing to promhttp #1887 ## 1.1.2 / 2021-03-05 diff --git a/collector/time.go b/collector/time.go index f55c564e5a..9fa09b55d6 100644 --- a/collector/time.go +++ b/collector/time.go @@ -24,8 +24,9 @@ import ( ) type timeCollector struct { - desc *prometheus.Desc - logger log.Logger + nowDesc *prometheus.Desc + zoneDesc *prometheus.Desc + logger log.Logger } func init() { @@ -35,19 +36,30 @@ func init() { // NewTimeCollector returns a new Collector exposing the current system time in // seconds since epoch. func NewTimeCollector(logger log.Logger) (Collector, error) { + const subsystem = "time" return &timeCollector{ - desc: prometheus.NewDesc( - namespace+"_time_seconds", + nowDesc: prometheus.NewDesc( + prometheus.BuildFQName(namespace, subsystem, "seconds"), "System time in seconds since epoch (1970).", nil, nil, ), + zoneDesc: prometheus.NewDesc( + prometheus.BuildFQName(namespace, subsystem, "zone_offset_seconds"), + "System time zone offset in seconds.", + []string{"time_zone"}, nil, + ), logger: logger, }, nil } func (c *timeCollector) Update(ch chan<- prometheus.Metric) error { - now := float64(time.Now().UnixNano()) / 1e9 - level.Debug(c.logger).Log("msg", "Return time", "now", now) - ch <- prometheus.MustNewConstMetric(c.desc, prometheus.GaugeValue, now) + now := time.Now() + nowSec := float64(now.UnixNano()) / 1e9 + zone, zoneOffset := now.Zone() + + level.Debug(c.logger).Log("msg", "Return time", "now", nowSec) + ch <- prometheus.MustNewConstMetric(c.nowDesc, prometheus.GaugeValue, nowSec) + level.Debug(c.logger).Log("msg", "Zone offset", "offset", zoneOffset, "time_zone", zone) + ch <- prometheus.MustNewConstMetric(c.zoneDesc, prometheus.GaugeValue, float64(zoneOffset), zone) return nil }