summaryrefslogtreecommitdiffstats
path: root/src/go/collectors/go.d.plugin/modules/consul/collect_checks.go
blob: 88ea4612bb3ff14b1484779d09ab9e258265d7dd (plain)
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
// SPDX-License-Identifier: GPL-3.0-or-later

package consul

const (
	// https://www.consul.io/api-docs/agent/check#list-checks
	urlPathAgentChecks = "/v1/agent/checks"
)

type agentCheck struct {
	Node        string
	CheckID     string
	Name        string
	Status      string
	ServiceID   string
	ServiceName string
	ServiceTags []string
}

func (c *Consul) collectChecks(mx map[string]int64) error {
	var checks map[string]*agentCheck

	if err := c.doOKDecode(urlPathAgentChecks, &checks); err != nil {
		return err
	}

	for id, check := range checks {
		if !c.checks[id] {
			c.checks[id] = true
			c.addHealthCheckCharts(check)
		}

		mx["health_check_"+id+"_passing_status"] = boolToInt(check.Status == "passing")
		mx["health_check_"+id+"_warning_status"] = boolToInt(check.Status == "warning")
		mx["health_check_"+id+"_critical_status"] = boolToInt(check.Status == "critical")
		mx["health_check_"+id+"_maintenance_status"] = boolToInt(check.Status == "maintenance")
	}

	for id := range c.checks {
		if _, ok := checks[id]; !ok {
			delete(c.checks, id)
			c.removeHealthCheckCharts(id)
		}
	}

	return nil
}