aboutsummaryrefslogtreecommitdiff
path: root/collector
diff options
context:
space:
mode:
authorPaul Gier <pgier@redhat.com>2020-02-20 04:03:33 -0600
committerGitHub <noreply@github.com>2020-02-20 11:03:33 +0100
commitb40954dce598577413d93ce32cc005b57c6371bb (patch)
tree911d0fb27f982d358ad526f830cecbe828fe2c4b /collector
parent3e1b0f1bee40af140c1349ab401392882ed658de (diff)
downloadprometheus_node_collector-b40954dce598577413d93ce32cc005b57c6371bb.tar.bz2
prometheus_node_collector-b40954dce598577413d93ce32cc005b57c6371bb.tar.xz
prometheus_node_collector-b40954dce598577413d93ce32cc005b57c6371bb.zip
new flag to disable all default collectors (#1460)
* new flag to disable all default collectors Signed-off-by: Paul Gier <pgier@redhat.com> Co-authored-by: Ben Kochie <superq@gmail.com>
Diffstat (limited to 'collector')
-rw-r--r--collector/collector.go31
1 files changed, 27 insertions, 4 deletions
diff --git a/collector/collector.go b/collector/collector.go
index 0fec09c..e9ea14c 100644
--- a/collector/collector.go
+++ b/collector/collector.go
@@ -23,7 +23,7 @@ import (
23 "github.com/go-kit/kit/log" 23 "github.com/go-kit/kit/log"
24 "github.com/go-kit/kit/log/level" 24 "github.com/go-kit/kit/log/level"
25 "github.com/prometheus/client_golang/prometheus" 25 "github.com/prometheus/client_golang/prometheus"
26 "gopkg.in/alecthomas/kingpin.v2" 26 kingpin "gopkg.in/alecthomas/kingpin.v2"
27) 27)
28 28
29// Namespace defines the common namespace to be used by all metrics. 29// Namespace defines the common namespace to be used by all metrics.
@@ -50,8 +50,9 @@ const (
50) 50)
51 51
52var ( 52var (
53 factories = make(map[string]func(logger log.Logger) (Collector, error)) 53 factories = make(map[string]func(logger log.Logger) (Collector, error))
54 collectorState = make(map[string]*bool) 54 collectorState = make(map[string]*bool)
55 forcedCollectors = map[string]bool{} // collectors which have been explicitly enabled or disabled
55) 56)
56 57
57func registerCollector(collector string, isDefaultEnabled bool, factory func(logger log.Logger) (Collector, error)) { 58func registerCollector(collector string, isDefaultEnabled bool, factory func(logger log.Logger) (Collector, error)) {
@@ -66,7 +67,7 @@ func registerCollector(collector string, isDefaultEnabled bool, factory func(log
66 flagHelp := fmt.Sprintf("Enable the %s collector (default: %s).", collector, helpDefaultState) 67 flagHelp := fmt.Sprintf("Enable the %s collector (default: %s).", collector, helpDefaultState)
67 defaultValue := fmt.Sprintf("%v", isDefaultEnabled) 68 defaultValue := fmt.Sprintf("%v", isDefaultEnabled)
68 69
69 flag := kingpin.Flag(flagName, flagHelp).Default(defaultValue).Bool() 70 flag := kingpin.Flag(flagName, flagHelp).Default(defaultValue).Action(collectorFlagAction(collector)).Bool()
70 collectorState[collector] = flag 71 collectorState[collector] = flag
71 72
72 factories[collector] = factory 73 factories[collector] = factory
@@ -78,6 +79,28 @@ type NodeCollector struct {
78 logger log.Logger 79 logger log.Logger
79} 80}
80 81
82// DisableDefaultCollectors sets the collector state to false for all collectors which
83// have not been explicitly enabled on the command line.
84func DisableDefaultCollectors() {
85 for c := range collectorState {
86 if _, ok := forcedCollectors[c]; !ok {
87 *collectorState[c] = false
88 }
89 }
90}
91
92// collectorFlagAction generates a new action function for the given collector
93// to track whether it has been explicitly enabled or disabled from the command line.
94// A new action function is needed for each collector flag because the ParseContext
95// does not contain information about which flag called the action.
96// See: https://github.com/alecthomas/kingpin/issues/294
97func collectorFlagAction(collector string) func(ctx *kingpin.ParseContext) error {
98 return func(ctx *kingpin.ParseContext) error {
99 forcedCollectors[collector] = true
100 return nil
101 }
102}
103
81// NewNodeCollector creates a new NodeCollector. 104// NewNodeCollector creates a new NodeCollector.
82func NewNodeCollector(logger log.Logger, filters ...string) (*NodeCollector, error) { 105func NewNodeCollector(logger log.Logger, filters ...string) (*NodeCollector, error) {
83 f := make(map[string]bool) 106 f := make(map[string]bool)