refactor: provisioning service refactoring

This commit is contained in:
Torkel Ödegaard
2018-05-01 15:51:15 +02:00
parent 14bb7832af
commit 053c2039bb
6 changed files with 49 additions and 37 deletions

View File

@ -26,9 +26,14 @@ import (
"github.com/grafana/grafana/pkg/middleware" "github.com/grafana/grafana/pkg/middleware"
"github.com/grafana/grafana/pkg/models" "github.com/grafana/grafana/pkg/models"
"github.com/grafana/grafana/pkg/plugins" "github.com/grafana/grafana/pkg/plugins"
"github.com/grafana/grafana/pkg/registry"
"github.com/grafana/grafana/pkg/setting" "github.com/grafana/grafana/pkg/setting"
) )
func init() {
registry.RegisterService(&HTTPServer{})
}
type HTTPServer struct { type HTTPServer struct {
log log.Logger log log.Logger
macaron *macaron.Macaron macaron *macaron.Macaron
@ -41,12 +46,14 @@ type HTTPServer struct {
Bus bus.Bus `inject:""` Bus bus.Bus `inject:""`
} }
func (hs *HTTPServer) Init() { func (hs *HTTPServer) Init() error {
hs.log = log.New("http.server") hs.log = log.New("http.server")
hs.cache = gocache.New(5*time.Minute, 10*time.Minute) hs.cache = gocache.New(5*time.Minute, 10*time.Minute)
return nil
} }
func (hs *HTTPServer) Start(ctx context.Context) error { func (hs *HTTPServer) Run(ctx context.Context) error {
var err error var err error
hs.context = ctx hs.context = ctx

View File

@ -17,7 +17,6 @@ import (
"github.com/grafana/grafana/pkg/middleware" "github.com/grafana/grafana/pkg/middleware"
"github.com/grafana/grafana/pkg/registry" "github.com/grafana/grafana/pkg/registry"
"github.com/grafana/grafana/pkg/services/dashboards" "github.com/grafana/grafana/pkg/services/dashboards"
"github.com/grafana/grafana/pkg/services/provisioning"
"golang.org/x/sync/errgroup" "golang.org/x/sync/errgroup"
@ -37,6 +36,7 @@ import (
_ "github.com/grafana/grafana/pkg/services/alerting" _ "github.com/grafana/grafana/pkg/services/alerting"
_ "github.com/grafana/grafana/pkg/services/cleanup" _ "github.com/grafana/grafana/pkg/services/cleanup"
_ "github.com/grafana/grafana/pkg/services/notifications" _ "github.com/grafana/grafana/pkg/services/notifications"
_ "github.com/grafana/grafana/pkg/services/provisioning"
_ "github.com/grafana/grafana/pkg/services/search" _ "github.com/grafana/grafana/pkg/services/search"
) )
@ -75,10 +75,6 @@ func (g *GrafanaServerImpl) Start() error {
login.Init() login.Init()
social.NewOAuthService() social.NewOAuthService()
if err := provisioning.Init(g.context, setting.HomePath, g.cfg.Raw); err != nil {
return fmt.Errorf("Failed to provision Grafana from config. error: %v", err)
}
tracingCloser, err := tracing.Init(g.cfg.Raw) tracingCloser, err := tracing.Init(g.cfg.Raw)
if err != nil { if err != nil {
return fmt.Errorf("Tracing settings is not valid. error: %v", err) return fmt.Errorf("Tracing settings is not valid. error: %v", err)
@ -116,7 +112,7 @@ func (g *GrafanaServerImpl) Start() error {
g.log.Info("Initializing " + reflect.TypeOf(service).Elem().Name()) g.log.Info("Initializing " + reflect.TypeOf(service).Elem().Name())
if err := service.Init(); err != nil { if err := service.Init(); err != nil {
return fmt.Errorf("Service init failed %v", err) return fmt.Errorf("Service init failed: %v", err)
} }
} }

View File

@ -69,7 +69,7 @@ func (cr *configReader) readConfig() ([]*DashboardsAsConfig, error) {
parsedDashboards, err := cr.parseConfigs(file) parsedDashboards, err := cr.parseConfigs(file)
if err != nil { if err != nil {
return nil, err
} }
if len(parsedDashboards) > 0 { if len(parsedDashboards) > 0 {

View File

@ -10,19 +10,16 @@ import (
type DashboardProvisioner struct { type DashboardProvisioner struct {
cfgReader *configReader cfgReader *configReader
log log.Logger log log.Logger
ctx context.Context
} }
func Provision(ctx context.Context, configDirectory string) (*DashboardProvisioner, error) { func NewDashboardProvisioner(configDirectory string) *DashboardProvisioner {
log := log.New("provisioning.dashboard") log := log.New("provisioning.dashboard")
d := &DashboardProvisioner{ d := &DashboardProvisioner{
cfgReader: &configReader{path: configDirectory, log: log}, cfgReader: &configReader{path: configDirectory, log: log},
log: log, log: log,
ctx: ctx,
} }
err := d.Provision(ctx) return d
return d, err
} }
func (provider *DashboardProvisioner) Provision(ctx context.Context) error { func (provider *DashboardProvisioner) Provision(ctx context.Context) error {

View File

@ -2,30 +2,40 @@ package provisioning
import ( import (
"context" "context"
"fmt"
"path" "path"
"path/filepath"
"github.com/grafana/grafana/pkg/registry"
"github.com/grafana/grafana/pkg/services/provisioning/dashboards" "github.com/grafana/grafana/pkg/services/provisioning/dashboards"
"github.com/grafana/grafana/pkg/services/provisioning/datasources" "github.com/grafana/grafana/pkg/services/provisioning/datasources"
ini "gopkg.in/ini.v1" "github.com/grafana/grafana/pkg/setting"
) )
func Init(ctx context.Context, homePath string, cfg *ini.File) error { func init() {
provisioningPath := makeAbsolute(cfg.Section("paths").Key("provisioning").String(), homePath) registry.RegisterService(&ProvisioningService{})
}
datasourcePath := path.Join(provisioningPath, "datasources") type ProvisioningService struct {
Cfg *setting.Cfg `inject:""`
}
func (ps *ProvisioningService) Init() error {
datasourcePath := path.Join(ps.Cfg.ProvisioningPath, "datasources")
if err := datasources.Provision(datasourcePath); err != nil { if err := datasources.Provision(datasourcePath); err != nil {
return fmt.Errorf("Datasource provisioning error: %v", err)
}
return nil
}
func (ps *ProvisioningService) Run(ctx context.Context) error {
dashboardPath := path.Join(ps.Cfg.ProvisioningPath, "dashboards")
dashProvisioner := dashboards.NewDashboardProvisioner(dashboardPath)
if err := dashProvisioner.Provision(ctx); err != nil {
return err return err
} }
dashboardPath := path.Join(provisioningPath, "dashboards") <-ctx.Done()
_, err := dashboards.Provision(ctx, dashboardPath) return ctx.Err()
return err
}
func makeAbsolute(path string, root string) string {
if filepath.IsAbs(path) {
return path
}
return filepath.Join(root, path)
} }

View File

@ -52,12 +52,11 @@ var (
ApplicationName string ApplicationName string
// Paths // Paths
LogsPath string LogsPath string
HomePath string HomePath string
DataPath string DataPath string
PluginsPath string PluginsPath string
ProvisioningPath string CustomInitPath = "conf/custom.ini"
CustomInitPath = "conf/custom.ini"
// Log settings. // Log settings.
LogModes []string LogModes []string
@ -187,6 +186,9 @@ var (
type Cfg struct { type Cfg struct {
Raw *ini.File Raw *ini.File
// Paths
ProvisioningPath string
// SMTP email settings // SMTP email settings
Smtp SmtpSettings Smtp SmtpSettings
@ -516,7 +518,7 @@ func (cfg *Cfg) Load(args *CommandLineArgs) error {
Env = iniFile.Section("").Key("app_mode").MustString("development") Env = iniFile.Section("").Key("app_mode").MustString("development")
InstanceName = iniFile.Section("").Key("instance_name").MustString("unknown_instance_name") InstanceName = iniFile.Section("").Key("instance_name").MustString("unknown_instance_name")
PluginsPath = makeAbsolute(iniFile.Section("paths").Key("plugins").String(), HomePath) PluginsPath = makeAbsolute(iniFile.Section("paths").Key("plugins").String(), HomePath)
ProvisioningPath = makeAbsolute(iniFile.Section("paths").Key("provisioning").String(), HomePath) cfg.ProvisioningPath = makeAbsolute(iniFile.Section("paths").Key("provisioning").String(), HomePath)
server := iniFile.Section("server") server := iniFile.Section("server")
AppUrl, AppSubUrl = parseAppUrlAndSubUrl(server) AppUrl, AppSubUrl = parseAppUrlAndSubUrl(server)
@ -719,6 +721,6 @@ func (cfg *Cfg) LogConfigSources() {
logger.Info("Path Data", "path", DataPath) logger.Info("Path Data", "path", DataPath)
logger.Info("Path Logs", "path", LogsPath) logger.Info("Path Logs", "path", LogsPath)
logger.Info("Path Plugins", "path", PluginsPath) logger.Info("Path Plugins", "path", PluginsPath)
logger.Info("Path Provisioning", "path", ProvisioningPath) logger.Info("Path Provisioning", "path", cfg.ProvisioningPath)
logger.Info("App mode " + Env) logger.Info("App mode " + Env)
} }