mirror of
https://github.com/grafana/grafana.git
synced 2025-07-29 22:22:25 +08:00
Refactoring PluginManager to be a self registering service (#11755)
* refator: refactored PluginManager to be a self registering service, a lot more work needed to fully make plugin manager use instance variables and not so many globals
This commit is contained in:

committed by
Carl Bergquist

parent
8f29d28572
commit
a8eed9d344
@ -11,8 +11,10 @@ import (
|
||||
"path/filepath"
|
||||
"reflect"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/grafana/grafana/pkg/log"
|
||||
"github.com/grafana/grafana/pkg/registry"
|
||||
"github.com/grafana/grafana/pkg/setting"
|
||||
"github.com/grafana/grafana/pkg/util"
|
||||
)
|
||||
@ -39,30 +41,12 @@ type PluginManager struct {
|
||||
log log.Logger
|
||||
}
|
||||
|
||||
func NewPluginManager(ctx context.Context) (*PluginManager, error) {
|
||||
err := initPlugins(ctx)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &PluginManager{
|
||||
log: log.New("plugins"),
|
||||
}, nil
|
||||
func init() {
|
||||
registry.RegisterService(&PluginManager{})
|
||||
}
|
||||
|
||||
func (p *PluginManager) Run(ctx context.Context) error {
|
||||
<-ctx.Done()
|
||||
|
||||
for _, p := range DataSources {
|
||||
p.Kill()
|
||||
}
|
||||
|
||||
p.log.Info("Stopped Plugins", "reason", ctx.Err())
|
||||
return ctx.Err()
|
||||
}
|
||||
|
||||
func initPlugins(ctx context.Context) error {
|
||||
func (pm *PluginManager) Init() error {
|
||||
pm.log = log.New("plugins")
|
||||
plog = log.New("plugins")
|
||||
|
||||
DataSources = map[string]*DataSourcePlugin{}
|
||||
@ -76,7 +60,7 @@ func initPlugins(ctx context.Context) error {
|
||||
"app": AppPlugin{},
|
||||
}
|
||||
|
||||
plog.Info("Starting plugin search")
|
||||
pm.log.Info("Starting plugin search")
|
||||
scan(path.Join(setting.StaticRootPath, "app/plugins"))
|
||||
|
||||
// check if plugins dir exists
|
||||
@ -99,13 +83,6 @@ func initPlugins(ctx context.Context) error {
|
||||
}
|
||||
|
||||
for _, ds := range DataSources {
|
||||
if ds.Backend {
|
||||
err := ds.initBackendPlugin(ctx, plog)
|
||||
if err != nil {
|
||||
plog.Error("Failed to init plugin.", "error", err, "plugin", ds.Id)
|
||||
}
|
||||
}
|
||||
|
||||
ds.initFrontendPlugin()
|
||||
}
|
||||
|
||||
@ -113,8 +90,40 @@ func initPlugins(ctx context.Context) error {
|
||||
app.initApp()
|
||||
}
|
||||
|
||||
go StartPluginUpdateChecker()
|
||||
go updateAppDashboards()
|
||||
return nil
|
||||
}
|
||||
|
||||
func (pm *PluginManager) startBackendPlugins(ctx context.Context) error {
|
||||
for _, ds := range DataSources {
|
||||
if ds.Backend {
|
||||
if err := ds.startBackendPlugin(ctx, plog); err != nil {
|
||||
pm.log.Error("Failed to init plugin.", "error", err, "plugin", ds.Id)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (pm *PluginManager) Run(ctx context.Context) error {
|
||||
pm.startBackendPlugins(ctx)
|
||||
pm.updateAppDashboards()
|
||||
pm.checkForUpdates()
|
||||
|
||||
ticker := time.NewTicker(time.Minute * 10)
|
||||
for {
|
||||
select {
|
||||
case <-ticker.C:
|
||||
pm.checkForUpdates()
|
||||
case <-ctx.Done():
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
// kil backend plugins
|
||||
for _, p := range DataSources {
|
||||
p.Kill()
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
Reference in New Issue
Block a user