func getMappingFor()

in pkg/client/elasticsearch/discovery.go [119:150]


func getMappingFor(logger logr.Logger, metricSet config.MetricSet, esClient *esv8.Client, recorder *recorder) error {
	req := esapi.IndicesGetMappingRequest{Index: metricSet.Indices}
	res, err := req.Do(context.Background(), esClient)
	if err != nil {
		return fmt.Errorf("discovery error, got response: %s", err)
	}
	defer res.Body.Close()
	if res.IsError() {
		return fmt.Errorf("[%s] Error getting index mapping %v", res.Status(), metricSet.Indices)
	} else {
		// Deserialize the response into a map.
		var r map[string]interface{}
		if err := json.NewDecoder(res.Body).Decode(&r); err != nil {
			return fmt.Errorf("error parsing the response body: %s", err)
		} else {
			if len(r) == 0 {
				logger.Info("Mapping is empty", "index_pattern", strings.Join(metricSet.Indices, ","))
				return nil
			}
			// Process mapping
			for _, indexMapping := range r {
				m := indexMapping.(map[string]interface{})
				mapping, hasMapping := m["mappings"]
				if !hasMapping {
					return fmt.Errorf("discovery error: no 'mapping' field in %s", metricSet.Indices)
				}
				recorder.processMappingDocument(mapping, metricSet.Fields, metricSet.Indices)
			}
		}
	}
	return nil
}