in dev/import-beats/packages.go [111:243]
func (r *packageRepository) createPackagesFromSource(beatsDir, beatName, beatType string) error {
beatPath := filepath.Join(beatsDir, beatName)
beatModulesPath := filepath.Join(beatPath, "module")
moduleDirs, err := ioutil.ReadDir(beatModulesPath)
if err != nil {
return errors.Wrapf(err, "cannot read directory '%s'", beatModulesPath)
}
for _, moduleDir := range moduleDirs {
if !moduleDir.IsDir() {
continue
}
moduleName := moduleDir.Name()
if !r.packageSelected(moduleName) {
continue
}
log.Printf("%s %s: module found\n", beatName, moduleName)
if _, ok := ignoredModules[moduleName]; ok {
log.Printf("%s %s: module skipped\n", beatName, moduleName)
continue
}
modulePath := path.Join(beatModulesPath, moduleName)
_, ok := r.packages[moduleName]
if !ok {
r.packages[moduleName] = newPackageContent(moduleName)
}
aPackage := r.packages[moduleName]
manifest := aPackage.manifest
// fields
moduleFields, maybeTitle, err := loadModuleFields(modulePath)
if err != nil {
return err
}
moduleFields, filteredEcsModuleFieldNames, err := filterMigratedFields(moduleFields, r.ecsFields.names())
if err != nil {
return err
}
// title
if maybeTitle != "" {
manifest.Title = &maybeTitle
manifest.Description = maybeTitle + " Integration"
}
// img
beatDocsPath := selectDocsPath(beatsDir, beatName)
images, err := createImages(beatDocsPath, modulePath)
if err != nil {
return err
}
aPackage.images = append(aPackage.images, images...)
// img/icons
// The condition prevents from adding an icon multiple times (e.g. for metricbeat and filebeat).
if len(manifest.Icons) == 0 {
icons, err := createIcons(r.iconRepository, moduleName)
if err != nil {
return err
}
aPackage.images = append(aPackage.images, icons...)
manifestIcons, err := icons.toManifestImages()
if err != nil {
return err
}
manifest.Icons = append(manifest.Icons, manifestIcons...)
}
// img/screenshots
screenshots, err := images.toManifestImages()
if err != nil {
return err
}
manifest.Screenshots = append(manifest.Screenshots, screenshots...)
// docs
if len(aPackage.docs) == 0 {
packageDocsPath := filepath.Join("packages", moduleDir.Name(), "_dev", "build", "docs")
docs, err := createDocTemplates(packageDocsPath)
if err != nil {
return err
}
aPackage.docs = append(aPackage.docs, docs...)
}
// dataStreams
moduleTitle := "TODO"
if manifest.Title != nil {
moduleTitle = *manifest.Title
}
dataStreams, err := createDataStreams(beatType, modulePath, moduleName, moduleTitle, moduleFields, filteredEcsModuleFieldNames, r.ecsFields)
if err != nil {
return err
}
dataStreams, inputVarsPerInputType, err := compactDataStreamVariables(dataStreams)
if err != nil {
return err
}
aPackage.addDataStreams(dataStreams)
// policyTemplates
aPackage.policyTemplate, err = updatePolicyTemplate(aPackage.policyTemplate, updatePolicyTemplateParameters{
moduleName: moduleName,
moduleTitle: moduleTitle,
packageType: beatType,
dataStreams: dataStreams,
inputVars: inputVarsPerInputType,
})
if err != nil {
return err
}
manifest.PolicyTemplates = aPackage.policyTemplate.toMetadataPolicyTemplates()
// kibana
kibana, err := createKibanaContent(r.kibanaMigrator, modulePath, moduleName, dataStreams.names())
if err != nil {
return err
}
aPackage.addKibanaContent(kibana)
manifest.Conditions = createConditions()
aPackage.manifest = manifest
r.packages[moduleDir.Name()] = aPackage
}
return nil
}