From 26a385d7abe2181530426f49e0fe918d06917ca1 Mon Sep 17 00:00:00 2001 From: mischief Date: Sun, 15 Apr 2018 04:42:02 +0000 Subject: [PATCH] collector: implement node_boot_time_seconds for OpenBSD/NetBSD/Darwin Signed-off-by: mischief --- collector/boot_time_bsd.go | 56 ++++++++++++++++++++++++++++++++++++++ collector/exec_bsd.go | 9 ------ collector/sysctl_bsd.go | 2 +- 3 files changed, 57 insertions(+), 10 deletions(-) create mode 100644 collector/boot_time_bsd.go diff --git a/collector/boot_time_bsd.go b/collector/boot_time_bsd.go new file mode 100644 index 00000000..cc2e8953 --- /dev/null +++ b/collector/boot_time_bsd.go @@ -0,0 +1,56 @@ +// Copyright 2018 The Prometheus Authors +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// +build freebsd dragonfly openbsd netbsd darwin +// +build !noboottime + +package collector + +import ( + "github.com/prometheus/client_golang/prometheus" +) + +type bootTimeCollector struct{ boottime bsdSysctl } + +func init() { + registerCollector("boottime", defaultEnabled, newBootTimeCollector) +} + +// newBootTimeCollector returns a new Collector exposing system boot time on BSD systems. +func newBootTimeCollector() (Collector, error) { + return &bootTimeCollector{ + boottime: bsdSysctl{ + name: "boot_time_seconds", + description: "Unix time of last boot, including microseconds.", + mib: "kern.boottime", + dataType: bsdSysctlTypeStructTimeval, + }, + }, nil +} + +// Update pushes boot time onto ch +func (c *bootTimeCollector) Update(ch chan<- prometheus.Metric) error { + v, err := c.boottime.Value() + if err != nil { + return err + } + + ch <- prometheus.MustNewConstMetric( + prometheus.NewDesc( + prometheus.BuildFQName(namespace, "", c.boottime.name), + c.boottime.description, + nil, nil, + ), prometheus.GaugeValue, v) + + return nil +} diff --git a/collector/exec_bsd.go b/collector/exec_bsd.go index 3ee84798..e4b780bd 100644 --- a/collector/exec_bsd.go +++ b/collector/exec_bsd.go @@ -39,9 +39,6 @@ func NewExecCollector() (Collector, error) { // vm.stats.sys.v_intr: Device interrupts // vm.stats.sys.v_soft: Software interrupts // vm.stats.vm.v_forks: Number of fork() calls - // - // From sys/kern/kern_tc.c: - // kern.boottime is an S,timeval return &execCollector{ sysctls: []bsdSysctl{ @@ -75,12 +72,6 @@ func NewExecCollector() (Collector, error) { description: "Number of fork() calls since system boot. Resets at architecture unsigned integer.", mib: "vm.stats.vm.v_forks", }, - { - name: "boot_time_seconds", - description: "Unix time of last boot, including microseconds.", - mib: "kern.boottime", - dataType: bsdSysctlTypeStructTimeval, - }, }, }, nil } diff --git a/collector/sysctl_bsd.go b/collector/sysctl_bsd.go index 878e2428..d6d4c57d 100644 --- a/collector/sysctl_bsd.go +++ b/collector/sysctl_bsd.go @@ -11,7 +11,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -// +build freebsd dragonfly +// +build freebsd dragonfly openbsd netbsd darwin // +build !nomeminfo package collector