func (this *EngineConfig) loadPluginSection(section *conf.Conf) { pluginCommons := new(pluginCommons) pluginCommons.load(section) if pluginCommons.disabled { Globals().Printf("[%s]disabled\n", pluginCommons.name) return } wrapper := new(PluginWrapper) var ok bool if wrapper.pluginCreator, ok = availablePlugins[pluginCommons.class]; !ok { pretty.Printf("allPlugins: %# v\n", availablePlugins) panic("unknown plugin type: " + pluginCommons.class) } wrapper.configCreator = func() *conf.Conf { return section } wrapper.name = pluginCommons.name plugin := wrapper.pluginCreator() plugin.Init(section) pluginCats := pluginTypeRegex.FindStringSubmatch(pluginCommons.class) if len(pluginCats) < 2 { panic("invalid plugin type: " + pluginCommons.class) } pluginCategory := pluginCats[1] if pluginCategory == "Input" { this.InputRunners[wrapper.name] = NewInputRunner(wrapper.name, plugin.(Input), pluginCommons) this.inputWrappers[wrapper.name] = wrapper if pluginCommons.ticker > 0 { this.InputRunners[wrapper.name].setTickLength(time.Duration(pluginCommons.ticker) * time.Second) } return } foRunner := NewFORunner(wrapper.name, plugin, pluginCommons) matcher := NewMatcher(section.StringList("match", nil), foRunner) foRunner.matcher = matcher switch pluginCategory { case "Filter": this.router.addFilterMatcher(matcher) this.FilterRunners[foRunner.name] = foRunner this.filterWrappers[foRunner.name] = wrapper case "Output": this.router.addOutputMatcher(matcher) this.OutputRunners[foRunner.name] = foRunner this.outputWrappers[foRunner.name] = wrapper } }
func (this *pluginCommons) load(section *conf.Conf) { this.name = section.String("name", "") if this.name == "" { pretty.Printf("%# v\n", *section) panic(fmt.Sprintf("invalid plugin config: %v", *section)) } this.class = section.String("class", "") if this.class == "" { this.class = this.name } this.comment = section.String("comment", "") this.ticker = section.Int("ticker_interval", Globals().TickerLength) this.disabled = section.Bool("disabled", false) }