From 2ee8470004fc2f6c12e44852f3c1ee20cf543514 Mon Sep 17 00:00:00 2001 From: Matthias Rampke Date: Tue, 12 May 2015 14:24:48 +0000 Subject: [PATCH] remove cgo dependency by hardcoding `USER_HZ` (aka. `_SC_CLK_TCK`) to 100, which it is for all platforms Go supports. See prometheus/node_exporter#52 for discussion around this too. Closes prometheus/node_exporter#52. --- collector/stat.go | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/collector/stat.go b/collector/stat.go index 4913abb8..7c7beeb0 100644 --- a/collector/stat.go +++ b/collector/stat.go @@ -11,11 +11,9 @@ import ( "github.com/prometheus/client_golang/prometheus" ) -// #include -import "C" - const ( procStat = "/proc/stat" + userHz = 100 ) type statCollector struct { @@ -102,17 +100,17 @@ func (c *statCollector) Update(ch chan<- prometheus.Metric) (err error) { // Only some of these may be present, depending on kernel version. cpuFields := []string{"user", "nice", "system", "idle", "iowait", "irq", "softirq", "steal", "guest"} // OpenVZ guests lack the "guest" CPU field, which needs to be ignored. - expectedFieldNum := len(cpuFields)+1 + expectedFieldNum := len(cpuFields) + 1 if expectedFieldNum > len(parts) { expectedFieldNum = len(parts) } - for i, v := range parts[1 : expectedFieldNum] { + for i, v := range parts[1:expectedFieldNum] { value, err := strconv.ParseFloat(v, 64) if err != nil { return err } // Convert from ticks to seconds - value /= float64(C.sysconf(C._SC_CLK_TCK)) + value /= userHz c.cpu.With(prometheus.Labels{"cpu": parts[0], "mode": cpuFields[i]}).Set(value) } case parts[0] == "intr":