From 18652f9b84bd3b56ff84d07020158f897a80f375 Mon Sep 17 00:00:00 2001 From: Frederic Branczyk <fbranczyk@gmail.com> Date: Thu, 20 Oct 2016 11:17:36 +0200 Subject: [PATCH] grafana-watcher: wait for Grafana to be available and initialize --- grafana-watcher/main.go | 26 +++++++++++++++++++++++++- grafana-watcher/updater/dashboard.go | 9 +++++++++ grafana-watcher/updater/datasource.go | 8 ++++++++ 3 files changed, 42 insertions(+), 1 deletion(-) diff --git a/grafana-watcher/main.go b/grafana-watcher/main.go index 34096705..ede90e83 100644 --- a/grafana-watcher/main.go +++ b/grafana-watcher/main.go @@ -5,6 +5,7 @@ import ( "log" "os" "path/filepath" + "time" fsnotify "gopkg.in/fsnotify.v1" @@ -85,9 +86,32 @@ func main() { } g := grafana.New(*grafanaUrl) - du := updater.NewGrafanaDashboardUpdater(g.Dashboards(), filepath.Join(*watchDir, "*-dashboard.json")) + + for { + log.Println("Waiting for Grafana to be available.") + _, err := g.Datasources().All() + if err == nil { + break + } + time.Sleep(time.Second) + } + su := updater.NewGrafanaDatasourceUpdater(g.Datasources(), filepath.Join(*watchDir, "*-datasource.json")) + log.Println("Initializing datasources.") + err := su.Init() + if err != nil { + log.Fatal(err) + } + + du := updater.NewGrafanaDashboardUpdater(g.Dashboards(), filepath.Join(*watchDir, "*-dashboard.json")) + log.Println("Initializing dashboards.") + err = du.Init() + if err != nil { + log.Fatal(err) + } + w := newVolumeWatcher(*watchDir) + w.AddEventHandler(du) w.AddEventHandler(su) diff --git a/grafana-watcher/updater/dashboard.go b/grafana-watcher/updater/dashboard.go index 4094a1b0..754a9490 100644 --- a/grafana-watcher/updater/dashboard.go +++ b/grafana-watcher/updater/dashboard.go @@ -9,6 +9,7 @@ import ( ) type Updater interface { + Init() error OnModify() error } @@ -24,7 +25,15 @@ func NewGrafanaDashboardUpdater(c grafana.DashboardsInterface, g string) Updater } } +func (u *GrafanaDashboardUpdater) Init() error { + return u.updateDashboards() +} + func (u *GrafanaDashboardUpdater) OnModify() error { + return u.updateDashboards() +} + +func (u *GrafanaDashboardUpdater) updateDashboards() error { err := u.deleteAllDashboards() if err != nil { return err diff --git a/grafana-watcher/updater/datasource.go b/grafana-watcher/updater/datasource.go index ad96852c..77c50282 100644 --- a/grafana-watcher/updater/datasource.go +++ b/grafana-watcher/updater/datasource.go @@ -20,7 +20,15 @@ func NewGrafanaDatasourceUpdater(c grafana.DatasourcesInterface, g string) Updat } } +func (u *GrafanaDatasourceUpdater) Init() error { + return u.updateDatasources() +} + func (u *GrafanaDatasourceUpdater) OnModify() error { + return u.updateDatasources() +} + +func (u *GrafanaDatasourceUpdater) updateDatasources() error { err := u.deleteAllDatasources() if err != nil { return err -- GitLab