func GetPromConfig()

in internal/manifests/targetallocator/adapters/config_to_prom_config.go [66:139]


func GetPromConfig(cfg string) (map[interface{}]interface{}, error) {
	prometheus, err := adapters.ConfigFromString(cfg)
	if err != nil {
		return nil, err
	}

	scrapeConfigs, err := getScrapeConfigsFromPromConfig(prometheus)
	if err != nil {
		return nil, err
	}

	for i, config := range scrapeConfigs {
		scrapeConfig, ok := config.(map[interface{}]interface{})
		if !ok {
			return nil, errorNotAMapAtIndex("scrape_config", i)
		}

		relabelConfigsProperty, ok := scrapeConfig["relabel_configs"]
		if !ok {
			continue
		}

		relabelConfigs, ok := relabelConfigsProperty.([]interface{})
		if !ok {
			return nil, errorNotAListAtIndex("relabel_configs", i)
		}

		for i, rc := range relabelConfigs {
			relabelConfig, rcErr := rc.(map[interface{}]interface{})
			if !rcErr {
				return nil, errorNotAMapAtIndex("relabel_config", i)
			}

			replacementProperty, rcErr := relabelConfig["replacement"]
			if !rcErr {
				continue
			}

			_, rcErr = replacementProperty.(string)
			if !rcErr {
				return nil, errorNotAStringAtIndex("replacement", i)
			}
		}

		metricRelabelConfigsProperty, ok := scrapeConfig["metric_relabel_configs"]
		if !ok {
			continue
		}

		metricRelabelConfigs, ok := metricRelabelConfigsProperty.([]interface{})
		if !ok {
			return nil, errorNotAListAtIndex("metric_relabel_configs", i)
		}

		for i, rc := range metricRelabelConfigs {
			relabelConfig, ok := rc.(map[interface{}]interface{})
			if !ok {
				return nil, errorNotAMapAtIndex("metric_relabel_config", i)
			}

			replacementProperty, ok := relabelConfig["replacement"]
			if !ok {
				continue
			}

			_, ok = replacementProperty.(string)
			if !ok {
				return nil, errorNotAStringAtIndex("replacement", i)
			}
		}
	}

	return prometheus, nil
}