in dev/import-beats/kibana.go [160:220]
func createKibanaContent(kibanaMigrator *kibanaMigrator, modulePath string, moduleName string,
dataStreamNames []string) (kibanaContent, error) {
if kibanaMigrator.skipKibana {
log.Printf("\tKibana migrator disabled, skipped (modulePath: %s)", modulePath)
return kibanaContent{}, nil
}
kibana := kibanaContent{
files: map[string]map[string][]byte{},
}
kibanaPath := filepath.Join(modulePath, "_meta", "kibana", "7")
dashboardIDMap := make(map[string]string, 0)
err := filepath.Walk(kibanaPath, func(path string, info fs.FileInfo, err error) error {
if errors.Is(err, os.ErrNotExist) {
return nil // elasticsearch module: _meta/kibana/7 doesn't exist
}
if info.IsDir() {
return nil
}
log.Printf("\tkibana file found: %s", info.Name())
extracted, idMap, err := extractKibanaObject(kibanaMigrator, path, moduleName, dataStreamNames)
if err != nil {
return errors.Wrapf(err, "converting kibana file")
}
for origID, newID := range idMap {
dashboardIDMap[origID] = newID
}
for objectType, objects := range extracted {
if _, ok := kibana.files[objectType]; !ok {
kibana.files[objectType] = map[string][]byte{}
}
for k, v := range objects {
kk := string(replaceBlacklistedWords([]byte(k)))
kibana.files[objectType][kk] = v
}
}
return nil
})
if err != nil {
return kibanaContent{}, err
}
// Make a pass over all asset files and replace dashboard links in them
for objectType, files := range kibana.files {
for filename, data := range files {
for origID, newID := range dashboardIDMap {
data = updateDashboardLinks(data, origID, newID)
kibana.files[objectType][filename] = data
}
}
}
return kibana, nil
}