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
}