func validate()

in pkg/config/config.go [163:214]


func validate(config *Config) error {
	for i := range config.MetricServers {
		server := config.MetricServers[i]
		if server.Rename != nil {
			if len(server.Rename.Matches) == 0 || len(server.Rename.As) == 0 {
				return fmt.Errorf("%s: rename directive must contain both \"matches\" and \"as\" fields", server.Name)
			}
		}
		if server.ServerType == "" {
			return fmt.Errorf("%s: server type is not set", server.Name)
		}
		switch server.ServerType {
		case "custom":
			if !server.ClientConfig.IsDefined() {
				return fmt.Errorf("%s: HTTP client configuration is not defined in upstream custom metric server", server.Name)
			}
			if len(server.MetricSets) > 0 {
				return fmt.Errorf("%s: metricSets is not allowed in upstream custom metric server", server.Name)
			}
		case "elasticsearch":
			if len(server.MetricSets) == 0 {
				return fmt.Errorf("%s: no metricSets defined", server.Name)

			}
			if !server.ClientConfig.IsDefined() {
				return fmt.Errorf("%s: Elasticsearch requires clientConfig to be set", server.Name)
			}
			// Compile the regular expressions
			for i := range server.MetricSets {
				if len(server.MetricSets[i].Fields) == 0 {
					// User did not provide a field pattern, we assume the user wants all numeric fields in this index to be available.
					server.MetricSets[i].Fields = append(server.MetricSets[i].Fields, defaultFieldSet)
				}
				metricSet := server.MetricSets[i]
				for j := range metricSet.Fields {
					field := metricSet.Fields[j]
					metricSet.Fields[j].compiledPatterns = make([]regexp.Regexp, len(field.Patterns))
					for k, pattern := range field.Patterns {
						compiledPattern, err := regexp.Compile(pattern)
						if err != nil {
							return fmt.Errorf("%s: error while compiling regular expression %s: %v", server.Name, pattern, err)
						}
						metricSet.Fields[j].compiledPatterns[k] = *compiledPattern
					}
				}
			}
		default:
			return fmt.Errorf("%s: unknown metric server type: %s", server.Name, server.ServerType)
		}
	}
	return nil
}