Add filtering options to select plugin at startup

This commit is contained in:
nicolas
2015-08-11 17:50:36 +02:00
parent 924700f381
commit e7ca9113bc
4 changed files with 343 additions and 9 deletions

View File

@@ -99,8 +99,14 @@ func (a *Agent) Connect() error {
}
// LoadPlugins loads the agent's plugins
func (a *Agent) LoadPlugins() ([]string, error) {
func (a *Agent) LoadPlugins(pluginsFilter string) ([]string, error) {
var names []string
var filters []string
pluginsFilter = strings.TrimSpace(pluginsFilter)
if pluginsFilter != "" {
filters = strings.Split(":"+pluginsFilter+":", ":")
}
for _, name := range a.Config.PluginsDeclared() {
creator, ok := plugins.Plugins[name]
@@ -108,15 +114,31 @@ func (a *Agent) LoadPlugins() ([]string, error) {
return nil, fmt.Errorf("Undefined but requested plugin: %s", name)
}
plugin := creator()
config, err := a.Config.ApplyPlugin(name, plugin)
if err != nil {
return nil, err
isPluginEnabled := false
if len(filters)>0 {
for _, runeValue := range filters {
if runeValue != "" && strings.ToLower(runeValue) == strings.ToLower(name) {
fmt.Printf("plugin [%s] is enabled (filter options)\n", name)
isPluginEnabled = true
break
}
}
} else {
// if no filter, we ALWAYS accept the plugin
isPluginEnabled = true
}
a.plugins = append(a.plugins, &runningPlugin{name, plugin, config})
names = append(names, name)
if isPluginEnabled {
plugin := creator()
config, err := a.Config.ApplyPlugin(name, plugin)
if err != nil {
return nil, err
}
a.plugins = append(a.plugins, &runningPlugin{name, plugin, config})
names = append(names, name)
}
}
sort.Strings(names)