MCPcopy Index your code
hub / github.com/cortexproject/cortex / buildNotifierConfig

Function buildNotifierConfig

pkg/ruler/notifier.go:94–137  ·  view source on GitHub ↗

Builds a Prometheus config.Config from a ruler.Config with just the required options to configure notifications to Alertmanager.

(rulerConfig *Config)

Source from the content-addressed store, hash-verified

92// Builds a Prometheus config.Config from a ruler.Config with just the required
93// options to configure notifications to Alertmanager.
94func buildNotifierConfig(rulerConfig *Config) (*config.Config, error) {
95 amURLs := strings.Split(rulerConfig.AlertmanagerURL, ",")
96 validURLs := make([]*url.URL, 0, len(amURLs))
97
98 srvDNSregexp := regexp.MustCompile(`^_.+._.+`)
99 for _, h := range amURLs {
100 url, err := url.Parse(h)
101 if err != nil {
102 return nil, err
103 }
104
105 if url.String() == "" {
106 continue
107 }
108
109 // Given we only support SRV lookups as part of service discovery, we need to ensure
110 // hosts provided follow this specification: _service._proto.name
111 // e.g. _http._tcp.alertmanager.com
112 if rulerConfig.AlertmanagerDiscovery && !srvDNSregexp.MatchString(url.Host) {
113 return nil, fmt.Errorf("when alertmanager-discovery is on, host name must be of the form _portname._tcp.service.fqdn (is %q)", url.Host)
114 }
115
116 validURLs = append(validURLs, url)
117 }
118
119 if len(validURLs) == 0 {
120 return &config.Config{}, nil
121 }
122 amConfigs := make([]*config.AlertmanagerConfig, 0, len(validURLs))
123 for _, url := range validURLs {
124 amConfigs = append(amConfigs, amConfigFromURL(rulerConfig, url, config.AlertmanagerAPIVersionV2))
125 }
126
127 promConfig := &config.Config{
128 GlobalConfig: config.GlobalConfig{
129 ExternalLabels: rulerConfig.ExternalLabels,
130 },
131 AlertingConfig: config.AlertingConfig{
132 AlertmanagerConfigs: amConfigs,
133 },
134 }
135
136 return promConfig, nil
137}
138
139func amConfigFromURL(rulerConfig *Config, url *url.URL, apiVersion config.AlertmanagerAPIVersion) *config.AlertmanagerConfig {
140 var sdConfig discovery.Configs

Callers 2

TestBuildNotifierConfigFunction · 0.85

Calls 3

amConfigFromURLFunction · 0.85
ParseMethod · 0.80
StringMethod · 0.65

Tested by 1

TestBuildNotifierConfigFunction · 0.68