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
}