diff options
author | Paul Gier <pgier@redhat.com> | 2020-02-20 04:03:33 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-02-20 11:03:33 +0100 |
commit | b40954dce598577413d93ce32cc005b57c6371bb (patch) | |
tree | 911d0fb27f982d358ad526f830cecbe828fe2c4b /collector | |
parent | 3e1b0f1bee40af140c1349ab401392882ed658de (diff) | |
download | prometheus_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.go | 31 |
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 | ||
52 | var ( | 52 | var ( |
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 | ||
57 | func registerCollector(collector string, isDefaultEnabled bool, factory func(logger log.Logger) (Collector, error)) { | 58 | func 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. | ||
84 | func 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 | ||
97 | func 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. |
82 | func NewNodeCollector(logger log.Logger, filters ...string) (*NodeCollector, error) { | 105 | func NewNodeCollector(logger log.Logger, filters ...string) (*NodeCollector, error) { |
83 | f := make(map[string]bool) | 106 | f := make(map[string]bool) |