Plugin initialization info
diff --git a/apid.go b/apid.go index 3086699..9ada144 100644 --- a/apid.go +++ b/apid.go
@@ -10,7 +10,6 @@ var ( APIDInitializedEvent = systemEvent{"apid initialized"} - PluginsInitializedEvent = systemEvent{"plugins initialized"} APIListeningEvent = systemEvent{"api listening"} pluginInitFuncs []PluginInitFunc @@ -25,7 +24,7 @@ Log() LogService } -type PluginInitFunc func(Services) error +type PluginInitFunc func(Services) (PluginData, error) // passed Services can be a factory - makes copies and maintains returned references // eg. apid.Initialize(factory.DefaultServicesFactory()) @@ -51,13 +50,17 @@ func InitializePlugins() { log := Log() log.Debugf("Initializing plugins...") - for _, p := range pluginInitFuncs { - err := p(services) + pie := PluginsInitializedEvent{ + Description: "plugins initialized", + } + for _, pif := range pluginInitFuncs { + pluginData, err := pif(services) if err != nil { log.Panicf("Error initializing plugin: %s", err) } + pie.Plugins = append(pie.Plugins, pluginData) } - Events().Emit(SystemEventsSelector, PluginsInitializedEvent) + Events().Emit(SystemEventsSelector, pie) log.Debugf("done initializing plugins") }
diff --git a/events/events_test.go b/events/events_test.go index ab7a3bf..804d1f9 100644 --- a/events/events_test.go +++ b/events/events_test.go
@@ -252,6 +252,41 @@ em.Emit("selector2", e2) em.Emit("selector1", e1) }) + + It("should publish PluginsInitialized event", func(done Done) { + xData := make(map[string]interface{}) + xData["schemaVersion"] = "1.2.3" + p := func(s apid.Services) (pd apid.PluginData, err error) { + pd = apid.PluginData{ + Name: "test plugin", + Version: "1.0.0", + ExtraData: xData, + } + return + } + apid.RegisterPlugin(p) + + h := func(event apid.Event) { + defer GinkgoRecover() + + if pie, ok := event.(apid.PluginsInitializedEvent); ok { + + apid.Events().Close() + + Expect(len(pie.Plugins)).Should(Equal(1)) + p := pie.Plugins[0] + Expect(p.Name).To(Equal("test plugin")) + Expect(p.Version).To(Equal("1.0.0")) + Expect(p.ExtraData["schemaVersion"]).To(Equal("1.2.3")) + + close(done) + } + } + apid.Events().ListenFunc(apid.SystemEventsSelector, h) + + apid.InitializePlugins() + }) + }) type test_handler struct {
diff --git a/events_service.go b/events_service.go index 9f56f93..0e249c9 100644 --- a/events_service.go +++ b/events_service.go
@@ -41,3 +41,14 @@ Event Event Count int } + +type PluginsInitializedEvent struct { + Description string + Plugins []PluginData +} + +type PluginData struct { + Name string + Version string + ExtraData map[string]interface{} +}