From feb8a0350399d73415f91bb3a1cb40351af2973b Mon Sep 17 00:00:00 2001 From: Fabian Reinartz Date: Fri, 3 Jul 2015 14:48:22 +0200 Subject: [PATCH] rules: load rule files relative to a base dir --- cmd/prometheus/main.go | 2 ++ rules/manager.go | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/cmd/prometheus/main.go b/cmd/prometheus/main.go index 214ba7d75..495254b9d 100644 --- a/cmd/prometheus/main.go +++ b/cmd/prometheus/main.go @@ -21,6 +21,7 @@ import ( _ "net/http/pprof" // Comment this line to disable pprof endpoint. "os" "os/signal" + "path/filepath" "strings" "syscall" "text/template" @@ -76,6 +77,7 @@ func Main() int { NotificationHandler: notificationHandler, QueryEngine: queryEngine, ExternalURL: cfg.web.ExternalURL, + BaseDir: filepath.Dir(cfg.configFile), }) flags := map[string]string{} diff --git a/rules/manager.go b/rules/manager.go index 3f31b712d..c862fe677 100644 --- a/rules/manager.go +++ b/rules/manager.go @@ -104,6 +104,7 @@ type Manager struct { notificationHandler *notification.NotificationHandler externalURL *url.URL + baseDir string } // ManagerOptions bundles options for the Manager. @@ -115,6 +116,7 @@ type ManagerOptions struct { SampleAppender storage.SampleAppender ExternalURL *url.URL + BaseDir string } // NewManager returns an implementation of Manager, ready to be started @@ -129,6 +131,7 @@ func NewManager(o *ManagerOptions) *Manager { queryEngine: o.QueryEngine, notificationHandler: o.NotificationHandler, externalURL: o.ExternalURL, + baseDir: o.BaseDir, } return manager } @@ -327,6 +330,10 @@ func (m *Manager) ApplyConfig(conf *config.Config) bool { var files []string for _, pat := range conf.RuleFiles { + if !filepath.IsAbs(pat) { + pat = filepath.Join(m.baseDir, pat) + } + fs, err := filepath.Glob(pat) if err != nil { // The only error can be a bad pattern. @@ -356,6 +363,7 @@ func (m *Manager) loadRuleFiles(filenames ...string) error { if err != nil { return fmt.Errorf("error parsing %s: %s", fn, err) } + for _, stmt := range stmts { switch r := stmt.(type) { case *promql.AlertStmt: