master
go 87 lines 1.94 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 package consul
4
5 import (
6 "fmt"
7 "net/http"
8 "slices"
9
10 "github.com/netdata/netdata/go/plugins/pkg/web"
11 )
12
13 const (
14 precision = 1000
15 )
16
17 func (c *Collector) collect() (map[string]int64, error) {
18 if c.cfg == nil {
19 if err := c.collectConfiguration(); err != nil {
20 return nil, err
21 }
22
23 c.addGlobalChartsOnce.Do(c.addGlobalCharts)
24 }
25
26 mx := make(map[string]int64)
27
28 if err := c.collectChecks(mx); err != nil {
29 return nil, err
30 }
31
32 if c.isServer() {
33 if !c.isCloudManaged() {
34 c.addServerAutopilotChartsOnce.Do(c.addServerAutopilotHealthCharts)
35 // 'operator/autopilot/health' is disabled in Cloud managed (403: Operation is not allowed in managed Consul clusters)
36 if err := c.collectAutopilotHealth(mx); err != nil {
37 return nil, err
38 }
39 }
40 if err := c.collectNetworkRTT(mx); err != nil {
41 return nil, err
42 }
43 }
44
45 if c.isTelemetryPrometheusEnabled() {
46 if err := c.collectMetricsPrometheus(mx); err != nil {
47 return nil, err
48 }
49 }
50
51 return mx, nil
52 }
53
54 func (c *Collector) isTelemetryPrometheusEnabled() bool {
55 return c.cfg.DebugConfig.Telemetry.PrometheusOpts.Expiration != "0s"
56 }
57
58 func (c *Collector) isCloudManaged() bool {
59 return c.cfg.DebugConfig.Cloud.ClientSecret != "" || c.cfg.DebugConfig.Cloud.ResourceID != ""
60 }
61
62 func (c *Collector) hasLicense() bool {
63 return c.cfg.Stats.License.ID != ""
64 }
65
66 func (c *Collector) isServer() bool {
67 return c.cfg.Config.Server
68 }
69
70 func (c *Collector) client(statusCodes ...int) *web.Client {
71 return web.DoHTTP(c.httpClient).OnNokCode(func(resp *http.Response) (bool, error) {
72 return slices.Contains(statusCodes, resp.StatusCode), nil
73 })
74 }
75
76 func (c *Collector) createRequest(urlPath string) (*http.Request, error) {
77 req, err := web.NewHTTPRequestWithPath(c.RequestConfig, urlPath)
78 if err != nil {
79 return nil, fmt.Errorf("failed to create '%s' request: %w", urlPath, err)
80 }
81
82 if c.ACLToken != "" {
83 req.Header.Set("X-Consul-Token", c.ACLToken)
84 }
85
86 return req, nil
87 }