func prepareDashboardFile()

in dev/import-beats/kibana.go [88:131]


func prepareDashboardFile(dashboardFile []byte) (data []byte, needsMigration bool, err error) {
	// Rename indices (metricbeat, filebeat)
	dashboardFile = bytes.ReplaceAll(dashboardFile, []byte(`metricbeat-*`), []byte(`metrics-*`))
	dashboardFile = bytes.ReplaceAll(dashboardFile, []byte(`filebeat-*`), []byte(`logs-*`))

	var documents kibanaDocuments
	err = json.Unmarshal(dashboardFile, &documents)
	if err != nil {
		return nil, false, errors.Wrapf(err, "unmarshalling dashboard file failed")
	}

	// Single Kibana object, to be used with the saved objects API doesn't need migration.
	if len(documents.Objects) == 0 {
		var object mapStr
		err := json.Unmarshal(dashboardFile, &object)
		if err != nil {
			return nil, false, errors.Wrapf(err, "unmarshalling kibana object failed")
		}
		object, err = encodeFields(object)
		if err != nil {
			return nil, false, errors.Wrapf(err, "encoding fields failed")
		}
		data, err := json.Marshal(object)
		if err != nil {
			return nil, false, errors.Wrap(err, "marshalling kibana object")
		}
		return data, false, nil
	}

	// Full dashboard, to be used with the old import/export API, needs migration.
	for i, object := range documents.Objects {
		object, err = encodeFields(object)
		if err != nil {
			return nil, false, errors.Wrapf(err, "encoding fields failed")
		}
		documents.Objects[i] = object
	}

	data, err = json.Marshal(&documents)
	if err != nil {
		return nil, false, errors.Wrapf(err, "marshalling dashboard file failed")
	}
	return data, true, nil
}