in main.go [253:297]
func createMapping(cfg elasticsearchConfig) error {
// Versions of Elasticsearch prior to 7.0.0 require type names.
esVersion, err := getEsVersion(cfg.host, cfg.user, cfg.pass)
if err != nil {
return err
}
includeTypeName := esVersion.LT(semver.MustParse("7.0.0"))
var body bytes.Buffer
properties := map[string]interface{}{
"properties": esFieldProperties,
"dynamic_templates": []interface{}{esExtraMetricsDynamicTemplate},
}
if includeTypeName {
properties = map[string]interface{}{"_doc": properties}
}
if err := json.NewEncoder(&body).Encode(map[string]interface{}{"mappings": properties}); err != nil {
return err
}
mappingURL := cfg.host + "/" + cfg.index
req, err := http.NewRequest(http.MethodPut, mappingURL, &body)
if err != nil {
return err
}
if cfg.user != "" && cfg.pass != "" {
req.SetBasicAuth(cfg.user, cfg.pass)
}
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil {
return err
}
if err := handleResponse(resp); err != nil {
esErr, ok := err.(*esError)
if ok && esErr.Type == exceptionResourceAlreadyExists {
if *verboseFlag {
log.Printf("index %q already exists", cfg.index)
}
return nil
}
return err
}
return nil
}