func newModuleRegistry()

in filebeat/fileset/modules.go [55:143]


func newModuleRegistry(modulesPath string,
	moduleConfigs []*ModuleConfig,
	overrides *ModuleOverrides,
	beatInfo beat.Info,
	filesetOverrides FilesetOverrides,
) (*ModuleRegistry, error) {
	reg := ModuleRegistry{
		registry: []Module{},
		log:      beatInfo.Logger.Named(logName),
	}

	for _, mcfg := range moduleConfigs {
		// an empty ModuleConfig can reach this so we only force enable a
		// config if the Module name is set and Enabled pointer is valid.
		if (filesetOverrides.EnableAllFilesets || filesetOverrides.ForceEnableModuleFilesets) && mcfg.Module != "" && mcfg.Enabled != nil {
			*mcfg.Enabled = true
		}
		if mcfg.Module == "" || (mcfg.Enabled != nil && !(*mcfg.Enabled)) {
			continue
		}
		// Look for moved modules
		if moduleName, moved := getCurrentModuleName(modulesPath, mcfg.Module); moved {
			reg.log.Warnf("Configuration uses the old name %q for module %q, please update your configuration.", mcfg.Module, moduleName)
			mcfg.Module = moduleName
		}
		moduleFilesets, err := getModuleFilesets(modulesPath, mcfg.Module)
		if err != nil {
			return nil, fmt.Errorf("error getting filesets for module %s: %w", mcfg.Module, err)
		}
		module := Module{
			config:   *mcfg,
			filesets: []Fileset{},
		}
		if filesetOverrides.ForceEnableModuleFilesets {
			if mcfg.Filesets == nil {
				mcfg.Filesets = make(map[string]*FilesetConfig)
			}
			for _, fName := range moduleFilesets {
				if _, ok := mcfg.Filesets[fName]; !ok {
					mcfg.Filesets[fName] = &FilesetConfig{Enabled: func() *bool { b := true; return &b }()}
				}
			}
		}

		for filesetName, fcfg := range mcfg.Filesets {
			fcfg, err = applyOverrides(fcfg, mcfg.Module, filesetName, overrides)
			if err != nil {
				return nil, fmt.Errorf("error applying overrides on fileset %s/%s: %w", mcfg.Module, filesetName, err)
			}

			// ModuleConfig can have empty Filesets so we only force
			// enable if the Enabled pointer is valid
			if (filesetOverrides.EnableAllFilesets || filesetOverrides.ForceEnableModuleFilesets) && fcfg.Enabled != nil {
				*fcfg.Enabled = true
			}
			if fcfg.Enabled != nil && !(*fcfg.Enabled) {
				continue
			}
			found := false
			for _, name := range moduleFilesets {
				if filesetName == name {
					found = true
				}
			}
			if !found {
				return nil, fmt.Errorf("fileset %s/%s is configured but doesn't exist", mcfg.Module, filesetName)
			}

			fileset, err := New(modulesPath, filesetName, mcfg.Module, fcfg)
			if err != nil {
				return nil, err
			}
			if err = fileset.Read(beatInfo); err != nil {
				return nil, fmt.Errorf("error reading fileset %s/%s: %w", mcfg.Module, filesetName, err)
			}
			module.filesets = append(module.filesets, *fileset)
		}
		reg.registry = append(reg.registry, module)
	}

	reg.log.Infof("Enabled modules/filesets: %s", reg.InfoString())
	for _, mod := range reg.registry {
		filesets := reg.ModuleConfiguredFilesets(mod)
		if len(filesets) == 0 {
			return nil, fmt.Errorf("module %s is configured but has no enabled filesets", mod.config.Module)
		}
	}
	return &reg, nil
}