in dev/import-beats/variables.go [42:105]
func createMetricStreamVariables(configFileContent []byte, moduleName, dataStreamName string) ([]packages.Variable, error) {
var vars []packages.Variable
if len(configFileContent) == 0 {
return vars, nil
}
var moduleConfig []mapStr
err := yaml.Unmarshal(configFileContent, &moduleConfig)
if err != nil {
return nil, errors.Wrap(err, "unmarshalling module config failed")
}
foundConfigEntries := map[string]bool{}
for _, moduleConfigEntry := range moduleConfig {
flatEntry := moduleConfigEntry.flatten()
related, err := isConfigEntryRelatedToMetricset(flatEntry, dataStreamName)
if err != nil {
return nil, errors.Wrapf(err, "checking if config entry is related failed")
}
for name, value := range flatEntry {
if shouldConfigOptionBeIgnored(name, value) {
continue
}
if _, ok := foundConfigEntries[name]; ok {
continue // already processed this config option
}
if related || strings.HasPrefix(name, fmt.Sprintf("%s.", dataStreamName)) {
var isArray bool
variableType := determineInputVariableType(name, value)
if variableType == "yaml" {
m, err := yaml.Marshal(value)
if err != nil {
return nil, errors.Wrapf(err, "marshalling object configuration variable failed")
}
value = string(m)
} else {
_, isArray = value.([]interface{})
}
aVar := packages.Variable{
Name: name,
Type: variableType,
Title: toVariableTitle(name),
Multi: isArray,
Required: determineInputVariableIsRequired(value),
ShowUser: true,
Default: value,
}
vars = append(vars, aVar)
foundConfigEntries[name] = true
}
}
}
// sort variables to keep them in order while using version control.
sort.Slice(vars, func(i, j int) bool {
return sort.StringsAreSorted([]string{vars[i].Name, vars[j].Name})
})
return vars, nil
}