From 21b7c6b0483ccfc3e9983af61fb049498c0f5fb7 Mon Sep 17 00:00:00 2001 From: Julius Volz Date: Tue, 31 Mar 2015 18:07:40 +0200 Subject: [PATCH 1/2] Always build the procfs collector. The cgo dependency in the "procfs" package is being removed in: https://github.com/prometheus/procfs/pull/4 So now it should be fine to always import the "procfs" package and have it determine dynamically at runtime whether the proc filesystem is actually there. This fixes a problem for users which were vendoring client_golang on MacOS X, but building the result on Linux (the procfs package was missing in the vendored packages). --- prometheus/process_collector_procfs.go | 2 -- prometheus/process_collector_rest.go | 24 ------------------------ 2 files changed, 26 deletions(-) delete mode 100644 prometheus/process_collector_rest.go diff --git a/prometheus/process_collector_procfs.go b/prometheus/process_collector_procfs.go index 5a09ded..b291d2b 100644 --- a/prometheus/process_collector_procfs.go +++ b/prometheus/process_collector_procfs.go @@ -11,8 +11,6 @@ // See the License for the specific language governing permissions and // limitations under the License. -// +build linux,cgo plan9,cgo solaris,cgo - package prometheus import "github.com/prometheus/procfs" diff --git a/prometheus/process_collector_rest.go b/prometheus/process_collector_rest.go deleted file mode 100644 index 0b3698a..0000000 --- a/prometheus/process_collector_rest.go +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2015 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 !linux,!plan9,!solaris !cgo - -package prometheus - -func processCollectSupported() bool { - return false -} - -func (c *processCollector) processCollect(ch chan<- Metric) { - panic("unreachable") -} From 2b9d181f5bb94c41fa161cac68c56421057b1df5 Mon Sep 17 00:00:00 2001 From: Julius Volz Date: Tue, 31 Mar 2015 18:24:46 +0200 Subject: [PATCH 2/2] Merge process_collector{,procfs}.go files into one. --- prometheus/process_collector.go | 47 ++++++++++++++++++++ prometheus/process_collector_procfs.go | 61 -------------------------- 2 files changed, 47 insertions(+), 61 deletions(-) delete mode 100644 prometheus/process_collector_procfs.go diff --git a/prometheus/process_collector.go b/prometheus/process_collector.go index 7fd1227..222bf01 100644 --- a/prometheus/process_collector.go +++ b/prometheus/process_collector.go @@ -13,6 +13,8 @@ package prometheus +import "github.com/prometheus/procfs" + type processCollector struct { pid int collectFn func(chan<- Metric) @@ -100,3 +102,48 @@ func (c *processCollector) Describe(ch chan<- *Desc) { func (c *processCollector) Collect(ch chan<- Metric) { c.collectFn(ch) } + +func processCollectSupported() bool { + if _, err := procfs.NewStat(); err == nil { + return true + } + return false +} + +// TODO(ts): Bring back error reporting by reverting 7faf9e7 as soon as the +// client allows users to configure the error behavior. +func (c *processCollector) processCollect(ch chan<- Metric) { + pid, err := c.pidFn() + if err != nil { + return + } + + p, err := procfs.NewProc(pid) + if err != nil { + return + } + + if stat, err := p.NewStat(); err == nil { + c.cpuTotal.Set(stat.CPUTime()) + ch <- c.cpuTotal + c.vsize.Set(float64(stat.VirtualMemory())) + ch <- c.vsize + c.rss.Set(float64(stat.ResidentMemory())) + ch <- c.rss + + if startTime, err := stat.StartTime(); err == nil { + c.startTime.Set(startTime) + ch <- c.startTime + } + } + + if fds, err := p.FileDescriptorsLen(); err == nil { + c.openFDs.Set(float64(fds)) + ch <- c.openFDs + } + + if limits, err := p.NewLimits(); err == nil { + c.maxFDs.Set(float64(limits.OpenFiles)) + ch <- c.maxFDs + } +} diff --git a/prometheus/process_collector_procfs.go b/prometheus/process_collector_procfs.go deleted file mode 100644 index b291d2b..0000000 --- a/prometheus/process_collector_procfs.go +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2015 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. - -package prometheus - -import "github.com/prometheus/procfs" - -func processCollectSupported() bool { - if _, err := procfs.NewStat(); err == nil { - return true - } - return false -} - -// TODO(ts): Bring back error reporting by reverting 7faf9e7 as soon as the -// client allows users to configure the error behavior. -func (c *processCollector) processCollect(ch chan<- Metric) { - pid, err := c.pidFn() - if err != nil { - return - } - - p, err := procfs.NewProc(pid) - if err != nil { - return - } - - if stat, err := p.NewStat(); err == nil { - c.cpuTotal.Set(stat.CPUTime()) - ch <- c.cpuTotal - c.vsize.Set(float64(stat.VirtualMemory())) - ch <- c.vsize - c.rss.Set(float64(stat.ResidentMemory())) - ch <- c.rss - - if startTime, err := stat.StartTime(); err == nil { - c.startTime.Set(startTime) - ch <- c.startTime - } - } - - if fds, err := p.FileDescriptorsLen(); err == nil { - c.openFDs.Set(float64(fds)) - ch <- c.openFDs - } - - if limits, err := p.NewLimits(); err == nil { - c.maxFDs.Set(float64(limits.OpenFiles)) - ch <- c.maxFDs - } -}