func InputManagerFromCfg()

in dev-tools/v2tool/manager/manager.go [37:68]


func InputManagerFromCfg(cfgPath string) (*InputManager, error) {
	fileData, err := os.ReadFile(cfgPath)
	if err != nil {
		return nil, fmt.Errorf("error reading config from file %s: %w", cfgPath, err)
	}

	inputMgrCfg := Config{}
	err = yaml.Unmarshal(fileData, &inputMgrCfg)
	if err != nil {
		return nil, fmt.Errorf("error unmarshalling yaml for file %s: %w", cfgPath, err)
	}

	// restructure the config into the InputManager
	units := []Unit{}
	for _, input := range inputMgrCfg.Inputs.Inputs {
		ruleCfg, ok := inputMgrCfg.Rules[input.Id]
		if !ok {
			keys := make([]string, 0, len(inputMgrCfg.Rules))
			for k := range inputMgrCfg.Rules {
				keys = append(keys, k)
			}
			return nil, fmt.Errorf("could not find rules for input with ID '%s', available rules are %v", input.Id, keys)
		}

		unit, err := newUnit(input, ruleCfg)
		if err != nil {
			return nil, fmt.Errorf("Error adding unit of ID %s: %w", input.Id, err)
		}
		units = append(units, unit)
	}
	return &InputManager{logger: logp.L().Named("input-manager"), Units: units, clientArgs: inputMgrCfg.Args}, nil
}