in internal/manifests/targetallocator/adapters/config_to_prom_config.go [145:204]
func AddHTTPSDConfigToPromConfig(prometheus map[interface{}]interface{}, taServiceName string) (map[interface{}]interface{}, error) {
prometheusConfigProperty, ok := prometheus["config"]
if !ok {
return nil, errorNoComponent("prometheusConfig")
}
prometheusConfig, ok := prometheusConfigProperty.(map[interface{}]interface{})
if !ok {
return nil, errorNotAMap("prometheusConfig")
}
scrapeConfigsProperty, ok := prometheusConfig["scrape_configs"]
if !ok {
return nil, errorNoComponent("scrape_configs")
}
scrapeConfigs, ok := scrapeConfigsProperty.([]interface{})
if !ok {
return nil, errorNotAList("scrape_configs")
}
sdRegex := regexp.MustCompile(`^.*(sd|static)_configs$`)
for i, config := range scrapeConfigs {
scrapeConfig, ok := config.(map[interface{}]interface{})
if !ok {
return nil, errorNotAMapAtIndex("scrape_config", i)
}
// Check for other types of service discovery configs (e.g. dns_sd_configs, file_sd_configs, etc.)
for key := range scrapeConfig {
keyStr, keyErr := key.(string)
if !keyErr {
continue
}
if sdRegex.MatchString(keyStr) {
delete(scrapeConfig, key)
}
}
jobNameProperty, ok := scrapeConfig["job_name"]
if !ok {
return nil, errorNotAStringAtIndex("job_name", i)
}
jobName, ok := jobNameProperty.(string)
if !ok {
return nil, errorNotAStringAtIndex("job_name is not a string", i)
}
escapedJob := url.QueryEscape(jobName)
scrapeConfig["http_sd_configs"] = []interface{}{
map[string]interface{}{
"url": fmt.Sprintf("https://%s:%d/jobs/%s/targets", taServiceName, naming.TargetAllocatorServicePort, escapedJob),
},
}
}
return prometheus, nil
}