func createKibanaContent()

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
}