-
Notifications
You must be signed in to change notification settings - Fork 1.2k
/
jmx.go
104 lines (85 loc) · 2.16 KB
/
jmx.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
// Unless explicitly stated otherwise all files in this repository are licensed
// under the Apache License Version 2.0.
// This product includes software developed at Datadog (https://www.datadoghq.com/).
// Copyright 2016-present Datadog, Inc.
package check
import (
yaml "gopkg.in/yaml.v2"
"github.com/DataDog/datadog-agent/comp/core/autodiscovery/integration"
agentconfig "github.com/DataDog/datadog-agent/pkg/config"
)
// IsJMXConfig checks if a certain YAML config contains at least one instance of a JMX config
func IsJMXConfig(config integration.Config) bool {
for _, instance := range config.Instances {
if IsJMXInstance(config.Name, instance, config.InitConfig) {
return true
}
}
return false
}
// IsJMXInstance checks if a certain YAML instance is a JMX config
func IsJMXInstance(name string, instance integration.Data, initConfig integration.Data) bool {
if _, ok := agentconfig.StandardJMXIntegrations[name]; ok {
return true
}
rawInstance := integration.RawMap{}
err := yaml.Unmarshal(instance, &rawInstance)
if err != nil {
return false
}
x, ok := rawInstance["loader"]
if ok {
loaderName, ok := x.(string)
if ok {
return loaderName == "jmx"
}
}
x, ok = rawInstance["is_jmx"]
if ok {
isInstanceJMX, ok := x.(bool)
if ok && isInstanceJMX {
return true
}
}
rawInitConfig := integration.RawMap{}
err = yaml.Unmarshal(initConfig, &rawInitConfig)
if err != nil {
return false
}
x, ok = rawInitConfig["loader"]
if ok {
loaderName, ok := x.(string)
if ok {
return loaderName == "jmx"
}
}
x, ok = rawInitConfig["is_jmx"]
if !ok {
return false
}
isInitConfigJMX, ok := x.(bool)
if !ok {
return false
}
return isInitConfigJMX
}
// CollectDefaultMetrics returns if the config is for a JMX check which has collect_default_metrics: true
func CollectDefaultMetrics(c integration.Config) bool {
if !IsJMXConfig(c) {
return false
}
rawInitConfig := integration.RawMap{}
err := yaml.Unmarshal(c.InitConfig, &rawInitConfig)
if err != nil {
return false
}
x, ok := rawInitConfig["collect_default_metrics"]
if !ok {
return false
}
collect, ok := x.(bool)
if !collect || !ok {
return false
}
return true
}