package pluginmanager import "context" // PluginManager orchestrates the lifecycle of a set of plugins type PluginManager interface { // Run starts a plugin manager and should return early Run() // Shutdown should gracefully shutdown all plugins managed by the manager. // It must block until shutdown is complete Shutdown() // PluginType is the type of plugin which the manager manages PluginType() string } // FingerprintingPluginManager is an interface that exposes fingerprinting // coordination for plugin managers type FingerprintingPluginManager interface { PluginManager // WaitForFirstFingerprint returns a channel that is closed once all plugin // instances managed by the plugin manager have fingerprinted once. A // context can be passed which when done will also close the channel WaitForFirstFingerprint(context.Context) <-chan struct{} }