master
go 76 lines 1.4 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 package consul
4
5 import (
6 "github.com/blang/semver/v4"
7 )
8
9 const (
10 // https://developer.hashicorp.com/consul/api-docs/agent#read-configuration
11 urlPathAgentSelf = "/v1/agent/self"
12 )
13
14 type consulConfig struct {
15 Config struct {
16 Datacenter string
17 PrimaryDatacenter string
18 NodeName string
19 NodeID string
20 Server bool
21 Version string
22 }
23 DebugConfig struct {
24 Telemetry struct {
25 MetricsPrefix string
26 DisableHostname bool
27 PrometheusOpts struct {
28 Expiration string
29 Name string
30 }
31 }
32 Cloud struct {
33 AuthURL string
34 ClientID string
35 ClientSecret string
36 Hostname string
37 ResourceID string
38 ScadaAddress string
39 }
40 }
41 Stats struct {
42 License struct {
43 ID string `json:"id"`
44 } `json:"license"`
45 }
46 }
47
48 func (c *Collector) collectConfiguration() error {
49 req, err := c.createRequest(urlPathAgentSelf)
50 if err != nil {
51 return err
52 }
53
54 var cfg consulConfig
55
56 if err := c.client().RequestJSON(req, &cfg); err != nil {
57 return err
58 }
59
60 c.cfg = &cfg
61 c.Debugf("consul config: %+v", cfg)
62
63 if !c.isTelemetryPrometheusEnabled() {
64 c.Warning("export of Prometheus metrics is disabled")
65 }
66
67 ver, err := semver.New(c.cfg.Config.Version)
68 if err != nil {
69 c.Warningf("error on parsing Consul version '%s': %v", c.cfg.Config.Version, err)
70 return nil
71 }
72
73 c.version = ver
74
75 return nil
76 }