Skip to content

Commit 5d39145

Browse files
reorganize prometheus converter code and limit surface area of dependencies between converters (#5406)
Signed-off-by: erikbaranowski <[email protected]>
1 parent 818191b commit 5d39145

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

62 files changed

+480
-479
lines changed

converter/internal/common/convert_targets.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,24 @@ import (
77
"github.com/grafana/river/token/builder"
88
)
99

10+
// NewDiscoveryExports will return a new [discovery.Exports] with a specific
11+
// key for converter component exports. The argument will be tokenized
12+
// as a component export string rather than the standard [discovery.Target]
13+
// RiverTokenize.
14+
func NewDiscoveryExports(expr string) discovery.Exports {
15+
return discovery.Exports{
16+
Targets: NewDiscoveryTargets(expr),
17+
}
18+
}
19+
20+
// NewDiscoveryTargets will return a new [[]discovery.Target] with a specific
21+
// key for converter component exports. The argument will be tokenized
22+
// as a component export string rather than the standard [discovery.Target]
23+
// RiverTokenize.
24+
func NewDiscoveryTargets(expr string) []discovery.Target {
25+
return []discovery.Target{map[string]string{"__expr__": expr}}
26+
}
27+
1028
// ConvertTargets implements [builder.Tokenizer]. This allows us to set
1129
// component.Arguments with an implementation that can be tokenized with
1230
// custom behaviour for converting.

converter/internal/prometheusconvert/common.go renamed to converter/internal/common/http_client_config.go

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
package prometheusconvert
1+
package common
22

33
import (
44
"github.com/grafana/agent/component/common/config"
5-
"github.com/grafana/agent/component/discovery"
65
"github.com/grafana/agent/converter/diag"
76
"github.com/grafana/river/rivertypes"
87
prom_config "github.com/prometheus/common/config"
@@ -108,21 +107,3 @@ func ToTLSConfig(tlsConfig *prom_config.TLSConfig) *config.TLSConfig {
108107
MinVersion: config.TLSVersion(tlsConfig.MinVersion),
109108
}
110109
}
111-
112-
// NewDiscoveryExports will return a new [discovery.Exports] with a specific
113-
// key for converter component exports. The argument will be tokenized
114-
// as a component export string rather than the standard [discovery.Target]
115-
// RiverTokenize.
116-
func NewDiscoveryExports(expr string) discovery.Exports {
117-
return discovery.Exports{
118-
Targets: newDiscoveryTargets(expr),
119-
}
120-
}
121-
122-
// newDiscoveryTargets will return a new [[]discovery.Target] with a specific
123-
// key for converter component exports. The argument will be tokenized
124-
// as a component export string rather than the standard [discovery.Target]
125-
// RiverTokenize.
126-
func newDiscoveryTargets(expr string) []discovery.Target {
127-
return []discovery.Target{map[string]string{"__expr__": expr}}
128-
}

converter/internal/prometheusconvert/prometheus_blocks.go renamed to converter/internal/prometheusconvert/build/prometheus_blocks.go

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package prometheusconvert
1+
package build
22

33
import (
44
"fmt"
@@ -8,24 +8,24 @@ import (
88
"github.com/grafana/river/token/builder"
99
)
1010

11-
// prometheusBlocks is a type for categorizing River Blocks before appending
11+
// PrometheusBlocks is a type for categorizing River Blocks before appending
1212
// them to a River File. This gives control over the order they are written
1313
// versus appending them in the order the Blocks are created.
14-
type prometheusBlocks struct {
15-
discoveryBlocks []prometheusBlock
16-
discoveryRelabelBlocks []prometheusBlock
17-
prometheusScrapeBlocks []prometheusBlock
18-
prometheusRelabelBlocks []prometheusBlock
19-
prometheusRemoteWriteBlocks []prometheusBlock
14+
type PrometheusBlocks struct {
15+
DiscoveryBlocks []prometheusBlock
16+
DiscoveryRelabelBlocks []prometheusBlock
17+
PrometheusScrapeBlocks []prometheusBlock
18+
PrometheusRelabelBlocks []prometheusBlock
19+
PrometheusRemoteWriteBlocks []prometheusBlock
2020
}
2121

22-
func NewPrometheusBlocks() *prometheusBlocks {
23-
return &prometheusBlocks{
24-
discoveryBlocks: []prometheusBlock{},
25-
discoveryRelabelBlocks: []prometheusBlock{},
26-
prometheusScrapeBlocks: []prometheusBlock{},
27-
prometheusRelabelBlocks: []prometheusBlock{},
28-
prometheusRemoteWriteBlocks: []prometheusBlock{},
22+
func NewPrometheusBlocks() *PrometheusBlocks {
23+
return &PrometheusBlocks{
24+
DiscoveryBlocks: []prometheusBlock{},
25+
DiscoveryRelabelBlocks: []prometheusBlock{},
26+
PrometheusScrapeBlocks: []prometheusBlock{},
27+
PrometheusRelabelBlocks: []prometheusBlock{},
28+
PrometheusRemoteWriteBlocks: []prometheusBlock{},
2929
}
3030
}
3131

@@ -37,47 +37,47 @@ func NewPrometheusBlocks() *prometheusBlocks {
3737
// 3. Prometheus scrape component(s)
3838
// 4. Prometheus relabel component(s) (if any)
3939
// 5. Prometheus remote_write
40-
func (pb *prometheusBlocks) AppendToFile(f *builder.File) {
41-
for _, promBlock := range pb.discoveryBlocks {
40+
func (pb *PrometheusBlocks) AppendToFile(f *builder.File) {
41+
for _, promBlock := range pb.DiscoveryBlocks {
4242
f.Body().AppendBlock(promBlock.block)
4343
}
4444

45-
for _, promBlock := range pb.discoveryRelabelBlocks {
45+
for _, promBlock := range pb.DiscoveryRelabelBlocks {
4646
f.Body().AppendBlock(promBlock.block)
4747
}
4848

49-
for _, promBlock := range pb.prometheusScrapeBlocks {
49+
for _, promBlock := range pb.PrometheusScrapeBlocks {
5050
f.Body().AppendBlock(promBlock.block)
5151
}
5252

53-
for _, promBlock := range pb.prometheusRelabelBlocks {
53+
for _, promBlock := range pb.PrometheusRelabelBlocks {
5454
f.Body().AppendBlock(promBlock.block)
5555
}
5656

57-
for _, promBlock := range pb.prometheusRemoteWriteBlocks {
57+
for _, promBlock := range pb.PrometheusRemoteWriteBlocks {
5858
f.Body().AppendBlock(promBlock.block)
5959
}
6060
}
6161

62-
func (pb *prometheusBlocks) getScrapeInfo() diag.Diagnostics {
62+
func (pb *PrometheusBlocks) GetScrapeInfo() diag.Diagnostics {
6363
var diags diag.Diagnostics
6464

65-
for _, promScrapeBlock := range pb.prometheusScrapeBlocks {
65+
for _, promScrapeBlock := range pb.PrometheusScrapeBlocks {
6666
detail := promScrapeBlock.detail
6767

68-
for _, promDiscoveryBlock := range pb.discoveryBlocks {
68+
for _, promDiscoveryBlock := range pb.DiscoveryBlocks {
6969
if strings.HasPrefix(promDiscoveryBlock.label, promScrapeBlock.label) {
7070
detail = fmt.Sprintln(detail) + fmt.Sprintf(" A %s.%s component", strings.Join(promDiscoveryBlock.name, "."), promDiscoveryBlock.label)
7171
}
7272
}
7373

74-
for _, promDiscoveryRelabelBlock := range pb.discoveryRelabelBlocks {
74+
for _, promDiscoveryRelabelBlock := range pb.DiscoveryRelabelBlocks {
7575
if strings.HasPrefix(promDiscoveryRelabelBlock.label, promScrapeBlock.label) {
7676
detail = fmt.Sprintln(detail) + fmt.Sprintf(" A %s.%s component", strings.Join(promDiscoveryRelabelBlock.name, "."), promDiscoveryRelabelBlock.label)
7777
}
7878
}
7979

80-
for _, promRelabelBlock := range pb.prometheusRelabelBlocks {
80+
for _, promRelabelBlock := range pb.PrometheusRelabelBlocks {
8181
if strings.HasPrefix(promRelabelBlock.label, promScrapeBlock.label) {
8282
detail = fmt.Sprintln(detail) + fmt.Sprintf(" A %s.%s component", strings.Join(promRelabelBlock.name, "."), promRelabelBlock.label)
8383
}
@@ -86,7 +86,7 @@ func (pb *prometheusBlocks) getScrapeInfo() diag.Diagnostics {
8686
diags.AddWithDetail(diag.SeverityLevelInfo, promScrapeBlock.summary, detail)
8787
}
8888

89-
for _, promRemoteWriteBlock := range pb.prometheusRemoteWriteBlocks {
89+
for _, promRemoteWriteBlock := range pb.PrometheusRemoteWriteBlocks {
9090
diags.AddWithDetail(diag.SeverityLevelInfo, promRemoteWriteBlock.summary, promRemoteWriteBlock.detail)
9191
}
9292

@@ -101,7 +101,7 @@ type prometheusBlock struct {
101101
detail string
102102
}
103103

104-
func newPrometheusBlock(block *builder.Block, name []string, label string, summary string, detail string) prometheusBlock {
104+
func NewPrometheusBlock(block *builder.Block, name []string, label string, summary string, detail string) prometheusBlock {
105105
return prometheusBlock{
106106
block: block,
107107
name: name,

converter/internal/prometheusconvert/azure.go renamed to converter/internal/prometheusconvert/component/azure.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package prometheusconvert
1+
package component
22

33
import (
44
"time"
@@ -8,16 +8,17 @@ import (
88
"github.com/grafana/agent/component/discovery/azure"
99
"github.com/grafana/agent/converter/diag"
1010
"github.com/grafana/agent/converter/internal/common"
11+
"github.com/grafana/agent/converter/internal/prometheusconvert/build"
1112
"github.com/grafana/river/rivertypes"
1213
prom_azure "github.com/prometheus/prometheus/discovery/azure"
1314
)
1415

15-
func appendDiscoveryAzure(pb *prometheusBlocks, label string, sdConfig *prom_azure.SDConfig) discovery.Exports {
16+
func appendDiscoveryAzure(pb *build.PrometheusBlocks, label string, sdConfig *prom_azure.SDConfig) discovery.Exports {
1617
discoveryAzureArgs := toDiscoveryAzure(sdConfig)
1718
name := []string{"discovery", "azure"}
1819
block := common.NewBlockWithOverride(name, label, discoveryAzureArgs)
19-
pb.discoveryBlocks = append(pb.discoveryBlocks, newPrometheusBlock(block, name, label, "", ""))
20-
return NewDiscoveryExports("discovery.azure." + label + ".targets")
20+
pb.DiscoveryBlocks = append(pb.DiscoveryBlocks, build.NewPrometheusBlock(block, name, label, "", ""))
21+
return common.NewDiscoveryExports("discovery.azure." + label + ".targets")
2122
}
2223

2324
func toDiscoveryAzure(sdConfig *prom_azure.SDConfig) *azure.Arguments {
@@ -36,12 +37,12 @@ func toDiscoveryAzure(sdConfig *prom_azure.SDConfig) *azure.Arguments {
3637
ProxyURL: config.URL(sdConfig.HTTPClientConfig.ProxyURL),
3738
FollowRedirects: sdConfig.HTTPClientConfig.FollowRedirects,
3839
EnableHTTP2: sdConfig.HTTPClientConfig.EnableHTTP2,
39-
TLSConfig: *ToTLSConfig(&sdConfig.HTTPClientConfig.TLSConfig),
40+
TLSConfig: *common.ToTLSConfig(&sdConfig.HTTPClientConfig.TLSConfig),
4041
}
4142
}
4243

43-
func validateDiscoveryAzure(sdConfig *prom_azure.SDConfig) diag.Diagnostics {
44-
return ValidateHttpClientConfig(&sdConfig.HTTPClientConfig)
44+
func ValidateDiscoveryAzure(sdConfig *prom_azure.SDConfig) diag.Diagnostics {
45+
return common.ValidateHttpClientConfig(&sdConfig.HTTPClientConfig)
4546
}
4647

4748
func toManagedIdentity(sdConfig *prom_azure.SDConfig) *azure.ManagedIdentity {

converter/internal/prometheusconvert/consul.go renamed to converter/internal/prometheusconvert/component/consul.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package prometheusconvert
1+
package component
22

33
import (
44
"time"
@@ -7,20 +7,21 @@ import (
77
"github.com/grafana/agent/component/discovery/consul"
88
"github.com/grafana/agent/converter/diag"
99
"github.com/grafana/agent/converter/internal/common"
10+
"github.com/grafana/agent/converter/internal/prometheusconvert/build"
1011
"github.com/grafana/river/rivertypes"
1112
prom_consul "github.com/prometheus/prometheus/discovery/consul"
1213
)
1314

14-
func appendDiscoveryConsul(pb *prometheusBlocks, label string, sdConfig *prom_consul.SDConfig) discovery.Exports {
15+
func appendDiscoveryConsul(pb *build.PrometheusBlocks, label string, sdConfig *prom_consul.SDConfig) discovery.Exports {
1516
discoveryConsulArgs := toDiscoveryConsul(sdConfig)
1617
name := []string{"discovery", "consul"}
1718
block := common.NewBlockWithOverride(name, label, discoveryConsulArgs)
18-
pb.discoveryBlocks = append(pb.discoveryBlocks, newPrometheusBlock(block, name, label, "", ""))
19-
return NewDiscoveryExports("discovery.consul." + label + ".targets")
19+
pb.DiscoveryBlocks = append(pb.DiscoveryBlocks, build.NewPrometheusBlock(block, name, label, "", ""))
20+
return common.NewDiscoveryExports("discovery.consul." + label + ".targets")
2021
}
2122

22-
func validateDiscoveryConsul(sdConfig *prom_consul.SDConfig) diag.Diagnostics {
23-
return ValidateHttpClientConfig(&sdConfig.HTTPClientConfig)
23+
func ValidateDiscoveryConsul(sdConfig *prom_consul.SDConfig) diag.Diagnostics {
24+
return common.ValidateHttpClientConfig(&sdConfig.HTTPClientConfig)
2425
}
2526

2627
func toDiscoveryConsul(sdConfig *prom_consul.SDConfig) *consul.Arguments {
@@ -43,6 +44,6 @@ func toDiscoveryConsul(sdConfig *prom_consul.SDConfig) *consul.Arguments {
4344
ServiceTags: sdConfig.ServiceTags,
4445
NodeMeta: sdConfig.NodeMeta,
4546
RefreshInterval: time.Duration(sdConfig.RefreshInterval),
46-
HTTPClientConfig: *ToHttpClientConfig(&sdConfig.HTTPClientConfig),
47+
HTTPClientConfig: *common.ToHttpClientConfig(&sdConfig.HTTPClientConfig),
4748
}
4849
}

converter/internal/prometheusconvert/digitalocean.go renamed to converter/internal/prometheusconvert/component/digitalocean.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package prometheusconvert
1+
package component
22

33
import (
44
"reflect"
@@ -9,20 +9,21 @@ import (
99
"github.com/grafana/agent/component/discovery/digitalocean"
1010
"github.com/grafana/agent/converter/diag"
1111
"github.com/grafana/agent/converter/internal/common"
12+
"github.com/grafana/agent/converter/internal/prometheusconvert/build"
1213
"github.com/grafana/river/rivertypes"
1314
prom_config "github.com/prometheus/common/config"
1415
prom_digitalocean "github.com/prometheus/prometheus/discovery/digitalocean"
1516
)
1617

17-
func appendDiscoveryDigitalOcean(pb *prometheusBlocks, label string, sdConfig *prom_digitalocean.SDConfig) discovery.Exports {
18+
func appendDiscoveryDigitalOcean(pb *build.PrometheusBlocks, label string, sdConfig *prom_digitalocean.SDConfig) discovery.Exports {
1819
discoveryDigitalOceanArgs := toDiscoveryDigitalOcean(sdConfig)
1920
name := []string{"discovery", "digitalocean"}
2021
block := common.NewBlockWithOverride(name, label, discoveryDigitalOceanArgs)
21-
pb.discoveryBlocks = append(pb.discoveryBlocks, newPrometheusBlock(block, name, label, "", ""))
22-
return NewDiscoveryExports("discovery.digitalocean." + label + ".targets")
22+
pb.DiscoveryBlocks = append(pb.DiscoveryBlocks, build.NewPrometheusBlock(block, name, label, "", ""))
23+
return common.NewDiscoveryExports("discovery.digitalocean." + label + ".targets")
2324
}
2425

25-
func validateDiscoveryDigitalOcean(sdConfig *prom_digitalocean.SDConfig) diag.Diagnostics {
26+
func ValidateDiscoveryDigitalOcean(sdConfig *prom_digitalocean.SDConfig) diag.Diagnostics {
2627
var diags diag.Diagnostics
2728

2829
if sdConfig.HTTPClientConfig.BasicAuth != nil {
@@ -41,7 +42,7 @@ func validateDiscoveryDigitalOcean(sdConfig *prom_digitalocean.SDConfig) diag.Di
4142
diags.Add(diag.SeverityLevelError, "unsupported oauth2 for digitalocean_sd_configs")
4243
}
4344

44-
diags.AddAll(ValidateHttpClientConfig(&sdConfig.HTTPClientConfig))
45+
diags.AddAll(common.ValidateHttpClientConfig(&sdConfig.HTTPClientConfig))
4546

4647
return diags
4748
}

converter/internal/prometheusconvert/dns.go renamed to converter/internal/prometheusconvert/component/dns.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package prometheusconvert
1+
package component
22

33
import (
44
"time"
@@ -7,18 +7,19 @@ import (
77
"github.com/grafana/agent/component/discovery/dns"
88
"github.com/grafana/agent/converter/diag"
99
"github.com/grafana/agent/converter/internal/common"
10+
"github.com/grafana/agent/converter/internal/prometheusconvert/build"
1011
prom_dns "github.com/prometheus/prometheus/discovery/dns"
1112
)
1213

13-
func appendDiscoveryDns(pb *prometheusBlocks, label string, sdConfig *prom_dns.SDConfig) discovery.Exports {
14+
func appendDiscoveryDns(pb *build.PrometheusBlocks, label string, sdConfig *prom_dns.SDConfig) discovery.Exports {
1415
discoveryDnsArgs := toDiscoveryDns(sdConfig)
1516
name := []string{"discovery", "dns"}
1617
block := common.NewBlockWithOverride(name, label, discoveryDnsArgs)
17-
pb.discoveryBlocks = append(pb.discoveryBlocks, newPrometheusBlock(block, name, label, "", ""))
18-
return NewDiscoveryExports("discovery.dns." + label + ".targets")
18+
pb.DiscoveryBlocks = append(pb.DiscoveryBlocks, build.NewPrometheusBlock(block, name, label, "", ""))
19+
return common.NewDiscoveryExports("discovery.dns." + label + ".targets")
1920
}
2021

21-
func validateDiscoveryDns(sdConfig *prom_dns.SDConfig) diag.Diagnostics {
22+
func ValidateDiscoveryDns(sdConfig *prom_dns.SDConfig) diag.Diagnostics {
2223
return make(diag.Diagnostics, 0)
2324
}
2425

converter/internal/prometheusconvert/docker.go renamed to converter/internal/prometheusconvert/component/docker.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package prometheusconvert
1+
package component
22

33
import (
44
"time"
@@ -7,19 +7,20 @@ import (
77
"github.com/grafana/agent/component/discovery/docker"
88
"github.com/grafana/agent/converter/diag"
99
"github.com/grafana/agent/converter/internal/common"
10+
"github.com/grafana/agent/converter/internal/prometheusconvert/build"
1011
prom_docker "github.com/prometheus/prometheus/discovery/moby"
1112
)
1213

13-
func appendDiscoveryDocker(pb *prometheusBlocks, label string, sdConfig *prom_docker.DockerSDConfig) discovery.Exports {
14+
func appendDiscoveryDocker(pb *build.PrometheusBlocks, label string, sdConfig *prom_docker.DockerSDConfig) discovery.Exports {
1415
discoveryDockerArgs := toDiscoveryDocker(sdConfig)
1516
name := []string{"discovery", "docker"}
1617
block := common.NewBlockWithOverride(name, label, discoveryDockerArgs)
17-
pb.discoveryBlocks = append(pb.discoveryBlocks, newPrometheusBlock(block, name, label, "", ""))
18-
return NewDiscoveryExports("discovery.docker." + label + ".targets")
18+
pb.DiscoveryBlocks = append(pb.DiscoveryBlocks, build.NewPrometheusBlock(block, name, label, "", ""))
19+
return common.NewDiscoveryExports("discovery.docker." + label + ".targets")
1920
}
2021

21-
func validateDiscoveryDocker(sdConfig *prom_docker.DockerSDConfig) diag.Diagnostics {
22-
return ValidateHttpClientConfig(&sdConfig.HTTPClientConfig)
22+
func ValidateDiscoveryDocker(sdConfig *prom_docker.DockerSDConfig) diag.Diagnostics {
23+
return common.ValidateHttpClientConfig(&sdConfig.HTTPClientConfig)
2324
}
2425

2526
func toDiscoveryDocker(sdConfig *prom_docker.DockerSDConfig) *docker.Arguments {
@@ -33,7 +34,7 @@ func toDiscoveryDocker(sdConfig *prom_docker.DockerSDConfig) *docker.Arguments {
3334
HostNetworkingHost: sdConfig.HostNetworkingHost,
3435
RefreshInterval: time.Duration(sdConfig.RefreshInterval),
3536
Filters: toDockerFilters(sdConfig.Filters),
36-
HTTPClientConfig: *ToHttpClientConfig(&sdConfig.HTTPClientConfig),
37+
HTTPClientConfig: *common.ToHttpClientConfig(&sdConfig.HTTPClientConfig),
3738
}
3839
}
3940

0 commit comments

Comments
 (0)