diff --git a/.gitignore b/.gitignore index b718b098cce..d8bbb659011 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,4 @@ data/*.db data/log /bin/* /grafana-pro +grafana.custom.ini diff --git a/conf/grafana.dev.ini b/conf/grafana.dev.ini index a4f9f0f7ee7..043006518b5 100644 --- a/conf/grafana.dev.ini +++ b/conf/grafana.dev.ini @@ -1,38 +1,9 @@ -app_name = Grafana app_mode = development [server] -protocol = http -domain = localhost -root_url = %(protocol)s://%(domain)s:%(http_port)s/ -http_addr = -http_port = 3000 router_logging = false static_root_path = grafana/src - -[session] -; Either "memory", "file", default is "memory" -provider = file -; Provider config options -; memory: not have any config yet -; file: session file path, e.g. `data/sessions` -; redis: config like redis server addr, poolSize, password, e.g. `127.0.0.1:6379,100,grafana` -; mysql: go-sql-driver/mysql dsn config string, e.g. `root:password@/session_table` -provider_config = data/sessions -; Session cookie name -cookie_name = grafana_sess -; If you use session in https only, default is false -cookie_secure = false -; Enable set cookie, default is true -enable_set_cookie = true -; Session GC time interval, default is 86400 -gc_time_interval = 86400 -; Session life time, default is 86400 -session_life_time = 86400 -; session id hash func, Either "sha1", "sha256" or "md5" default is sha1 -session_id_hashfunc = sha1 -; Session hash key, default is use random string -session_id_hashkey = +root_url = %(protocol)s://%(domain)s:%(http_port)s/ [oauth] enabled = true @@ -53,56 +24,4 @@ scopes = https://www.googleapis.com/auth/userinfo.profile https://www.googleapis auth_url = https://accounts.google.com/o/oauth2/auth token_url = https://accounts.google.com/o/oauth2/token -[database] -; Either "mysql", "postgres" or "sqlite3", it's your choice -type = sqlite3 -host = 127.0.0.1:3306 -name = grafana -user = root -PASSWD = -; For "postgres" only, either "disable", "require" or "verify-full" -ssl_mode = disable -; For "sqlite3" only -path = data/grafana.db - -; [database] -; ; Either "mysql", "postgres" or "sqlite3", it's your choice -; type = postgres -; host = 127.0.0.1:5432 -; name = grafana -; user = grafana -; password = grafana -; ; For "postgres" only, either "disable", "require" or "verify-full" -; ssl_mode = disable -; ; For "sqlite3" only -; path = data/grafana.db -; -[log] -root_path = -; Either "console", "file", "conn", "smtp" or "database", default is "console" -; Use comma to separate multiple modes, e.g. "console, file" -mode = console -; Buffer length of channel, keep it as it is if you don't know what it is. -buffer_len = 10000 -; Either "Trace", "Debug", "Info", "Warn", "Error", "Critical", default is "Trace" -level = Trace - -; For "console" mode only -[log.console] -level = - -; For "file" mode only -[log.file] -level = -; This enables automated log rotate(switch of following options), default is true -log_rotate = true -; Max line number of single file, default is 1000000 -max_lines = 1000000 -; Max size shift of single file, default is 28 means 1 << 28, 256MB -max_lines_shift = 28 -; Segment log daily, default is true -daily_rotate = true -; Expired days of log file(delete after max days), default is 7 -max_days = 7 - diff --git a/conf/grafana.example.ini b/conf/grafana.ini similarity index 100% rename from conf/grafana.example.ini rename to conf/grafana.ini diff --git a/grafana b/grafana index 5feed2344ab..9be53f0a797 160000 --- a/grafana +++ b/grafana @@ -1 +1 @@ -Subproject commit 5feed2344ab8a5eb65ffeda9ccae8b768e9b8764 +Subproject commit 9be53f0a79753d22205a5db6ac42aa1e455a58c3 diff --git a/pkg/api/frontendsettings.go b/pkg/api/frontendsettings.go index b4854039685..fb78dcc89e1 100644 --- a/pkg/api/frontendsettings.go +++ b/pkg/api/frontendsettings.go @@ -6,6 +6,7 @@ import ( "github.com/torkelo/grafana-pro/pkg/bus" "github.com/torkelo/grafana-pro/pkg/middleware" m "github.com/torkelo/grafana-pro/pkg/models" + "github.com/torkelo/grafana-pro/pkg/setting" ) func getFrontendSettings(c *middleware.Context) (map[string]interface{}, error) { @@ -28,7 +29,7 @@ func getFrontendSettings(c *middleware.Context) (map[string]interface{}, error) url := ds.Url if ds.Access == m.DS_ACCESS_PROXY { - url = "/api/datasources/proxy/" + strconv.FormatInt(ds.Id, 10) + url = setting.AppSubUrl + "/api/datasources/proxy/" + strconv.FormatInt(ds.Id, 10) } var dsMap = map[string]interface{}{ @@ -56,12 +57,12 @@ func getFrontendSettings(c *middleware.Context) (map[string]interface{}, error) // add grafana backend data source datasources["grafana"] = map[string]interface{}{ "type": "grafana", - "url": "", "grafanaDB": true, } jsonObj := map[string]interface{}{ "datasources": datasources, + "appSubUrl": setting.AppSubUrl, } return jsonObj, nil diff --git a/pkg/setting/setting.go b/pkg/setting/setting.go index 05f4e4c707e..6a33c194bdb 100644 --- a/pkg/setting/setting.go +++ b/pkg/setting/setting.go @@ -80,39 +80,49 @@ func getWorkDir() string { return p } -func findConfigFile() string { +func findConfigFiles() []string { WorkDir = getWorkDir() ConfRootPath = path.Join(WorkDir, "conf") + filenames := make([]string, 0) configFile := path.Join(ConfRootPath, "grafana.ini") - //log.Info("Looking for config file: %v", configFile) if com.IsFile(configFile) { - return configFile - } - configFile = path.Join(ConfRootPath, "grafana.dev.ini") - //log.Info("Looking for config file: %v", configFile) - if com.IsFile(configFile) { - return configFile - } - configFile = path.Join(ConfRootPath, "grafana.example.ini") - //log.Info("Looking for config file: %v", configFile) - if com.IsFile(configFile) { - return configFile + filenames = append(filenames, configFile) } - log.Fatal(3, "Could not find any config file") - return "" + configFile = path.Join(ConfRootPath, "grafana.dev.ini") + if com.IsFile(configFile) { + filenames = append(filenames, configFile) + } + + configFile = path.Join(ConfRootPath, "grafana.custom.ini") + if com.IsFile(configFile) { + filenames = append(filenames, configFile) + } + + if len(filenames) == 0 { + log.Fatal(3, "Could not find any config file") + } + + return filenames } func NewConfigContext() { - configFile := findConfigFile() + configFiles := findConfigFiles() - log.Info("Loading config file: %v", configFile) + log.Info("Loading config files: %v", configFiles) var err error - Cfg, err = goconfig.LoadConfigFile(configFile) + Cfg, err = goconfig.LoadConfigFile(configFiles[0]) if err != nil { - log.Fatal(4, "Fail to parse %v, error: %v", configFile, err) + log.Fatal(4, "Fail to parse config file, error: %v", err) + } + + if len(configFiles) > 1 { + err = Cfg.AppendFiles(configFiles[1:]...) + if err != nil { + log.Fatal(4, "Fail to parse config file, error: %v", err) + } } AppName = Cfg.MustValue("", "app_name", "Grafana") @@ -128,7 +138,6 @@ func NewConfigContext() { } AppSubUrl = strings.TrimSuffix(url.Path, "/") - log.Info("AppSubUrl: %v", AppSubUrl) Protocol = HTTP if Cfg.MustValue("server", "protocol") == "https" {