in dev/import-beats/kibana.go [299:397]
func migrateObject(object mapStr, moduleName string, dataStreamNames []string) (data []byte, newID string, err error) {
err = object.delete("updated_at")
if err != nil {
return nil, "", errors.Wrapf(err, "removing field updated_at failed")
}
err = object.delete("version")
if err != nil {
return nil, "", errors.Wrapf(err, "removing field version failed")
}
object, err = decodeFields(object)
if err != nil {
return nil, "", errors.Wrapf(err, "decoding fields failed")
}
object, err = stripReferencesToEventModule(object, moduleName, dataStreamNames)
if err != nil {
return nil, "", errors.Wrapf(err, "stripping references to event module failed")
}
id, err := object.getValue("id")
if err != nil {
return nil, "", errors.Wrapf(err, "retrieving id failed")
}
origID, ok := id.(string)
if !ok {
return nil, "", errors.New("expected id to be a string")
}
newID = updateObjectID(origID, moduleName)
_, err = object.put("id", newID)
if err != nil {
return nil, "", errors.Wrapf(err, "putting new ID failed")
}
// Update any references to other objects in this object
refs, err := object.getValue("references")
if err != nil {
return nil, "", errors.Wrap(err, "retrieving references failed")
}
references, ok := refs.([]interface{})
if !ok {
return nil, "", errors.New("expected references to be an array of objects")
}
for _, r := range references {
ref, ok := r.(map[string]interface{})
if !ok {
return nil, "", errors.New("expected reference to be an object")
}
reference := mapStr(ref)
// Exclude index pattern references
rt, err := reference.getValue("type")
if err != nil {
return nil, "", errors.Wrap(err, "retrieving reference type failed")
}
refType, ok := rt.(string)
if !ok {
return nil, "", errors.New("expected reference type to be a string")
}
if refType == "index-pattern" {
continue
}
refID, err := reference.getValue("id")
if err != nil {
return nil, "", errors.Wrapf(err, "retrieving reference id failed")
}
origRefID, ok := refID.(string)
if !ok {
return nil, "", errors.New("expected reference id to be a string")
}
newRefID := updateObjectID(origRefID, moduleName)
if _, err := reference.put("id", newRefID); err != nil {
return nil, "", errors.Wrapf(err, "putting new reference ID failed")
}
}
data, err = json.MarshalIndent(object, "", " ")
if err != nil {
return nil, "", errors.Wrapf(err, "marshalling object failed")
}
data = replaceFieldEventDatasetWithDataStreamDataset(data)
data = replaceBlacklistedWords(data)
data = removeECSTextualSuffixes(data)
err = verifyKibanaObjectConvertion(data)
if err != nil {
return nil, "", errors.Wrapf(err, "Kibana object convertion failed")
}
return data, newID, nil
}