Updated to config file finding, and added homepath command line option

pull/1782/head
Torkel Ödegaard 10 years ago
parent cc427b1307
commit 6de584aafc
  1. 10
      conf/dev.ini
  2. 6
      main.go
  3. 53
      pkg/setting/setting.go
  4. 23
      pkg/setting/setting_test.go

@ -1,10 +0,0 @@
app_mode = development
[server]
router_logging = false
[log]
level = Trace

@ -25,6 +25,7 @@ var commit = "NA"
var buildstamp string var buildstamp string
var configFile = flag.String("config", "", "path to config file") var configFile = flag.String("config", "", "path to config file")
var homePath = flag.String("homepath", "", "path to grafana install/home path, defaults to working directory")
var pidFile = flag.String("pidfile", "", "path to pid file") var pidFile = flag.String("pidfile", "", "path to pid file")
func init() { func init() {
@ -65,8 +66,9 @@ func main() {
func initRuntime() { func initRuntime() {
setting.NewConfigContext(&setting.CommandLineArgs{ setting.NewConfigContext(&setting.CommandLineArgs{
Config: *configFile, Config: *configFile,
Args: flag.Args(), HomePath: *homePath,
Args: flag.Args(),
}) })
log.Info("Starting Grafana") log.Info("Starting Grafana")

@ -106,14 +106,14 @@ var (
) )
type CommandLineArgs struct { type CommandLineArgs struct {
Config string Config string
Args []string HomePath string
Args []string
} }
func init() { func init() {
IsWindows = runtime.GOOS == "windows" IsWindows = runtime.GOOS == "windows"
log.NewLogger(0, "console", `{"level": 0}`) log.NewLogger(0, "console", `{"level": 0}`)
HomePath, _ = filepath.Abs(".")
} }
func parseAppUrlAndSubUrl(section *ini.Section) (string, string) { func parseAppUrlAndSubUrl(section *ini.Section) (string, string) {
@ -226,6 +226,14 @@ func evalConfigValues() {
} }
func loadSpecifedConfigFile(configFile string) { func loadSpecifedConfigFile(configFile string) {
if configFile == "" {
configFile = filepath.Join(HomePath, "conf/custom.ini")
// return without error if custom file does not exist
if !pathExists(configFile) {
return
}
}
userConfig, err := ini.Load(configFile) userConfig, err := ini.Load(configFile)
userConfig.BlockMode = false userConfig.BlockMode = false
if err != nil { if err != nil {
@ -256,8 +264,6 @@ func loadSpecifedConfigFile(configFile string) {
func loadConfiguration(args *CommandLineArgs) { func loadConfiguration(args *CommandLineArgs) {
var err error var err error
args.Config = evalEnvVarExpression(args.Config)
// load config defaults // load config defaults
defaultConfigFile := path.Join(HomePath, "conf/defaults.ini") defaultConfigFile := path.Join(HomePath, "conf/defaults.ini")
configFiles = append(configFiles, defaultConfigFile) configFiles = append(configFiles, defaultConfigFile)
@ -276,9 +282,7 @@ func loadConfiguration(args *CommandLineArgs) {
applyCommandLineDefaultProperties(commandLineProps) applyCommandLineDefaultProperties(commandLineProps)
// load specified config file // load specified config file
if args.Config != "" { loadSpecifedConfigFile(args.Config)
loadSpecifedConfigFile(args.Config)
}
// apply environment overrides // apply environment overrides
applyEnvVariableOverrides() applyEnvVariableOverrides()
@ -290,11 +294,40 @@ func loadConfiguration(args *CommandLineArgs) {
evalConfigValues() evalConfigValues()
} }
func pathExists(path string) bool {
_, err := os.Stat(path)
if err == nil {
return true
}
if os.IsNotExist(err) {
return false
}
return false
}
func setHomePath(args *CommandLineArgs) {
if args.HomePath != "" {
HomePath = args.HomePath
return
}
HomePath, _ = filepath.Abs(".")
// check if homepath is correct
if pathExists(filepath.Join(HomePath, "conf/defaults.ini")) {
return
}
// try down one path
if pathExists(filepath.Join(HomePath, "../conf/defaults.ini")) {
HomePath = filepath.Join(HomePath, "../")
}
}
func NewConfigContext(args *CommandLineArgs) { func NewConfigContext(args *CommandLineArgs) {
setHomePath(args)
loadConfiguration(args) loadConfiguration(args)
DataPath = makeAbsolute(Cfg.Section("paths").Key("data").String(), HomePath) DataPath = makeAbsolute(Cfg.Section("paths").Key("data").String(), HomePath)
initLogging(args) initLogging(args)
AppName = Cfg.Section("").Key("app_name").MustString("Grafana") AppName = Cfg.Section("").Key("app_name").MustString("Grafana")
@ -314,7 +347,7 @@ func NewConfigContext(args *CommandLineArgs) {
HttpAddr = server.Key("http_addr").MustString("0.0.0.0") HttpAddr = server.Key("http_addr").MustString("0.0.0.0")
HttpPort = server.Key("http_port").MustString("3000") HttpPort = server.Key("http_port").MustString("3000")
StaticRootPath = server.Key("static_root_path").MustString(path.Join(HomePath, "public")) StaticRootPath = makeAbsolute(server.Key("static_root_path").String(), HomePath)
RouterLogging = server.Key("router_logging").MustBool(false) RouterLogging = server.Key("router_logging").MustBool(false)
EnableGzip = server.Key("enable_gzip").MustBool(false) EnableGzip = server.Key("enable_gzip").MustBool(false)

@ -10,12 +10,10 @@ import (
func TestLoadingSettings(t *testing.T) { func TestLoadingSettings(t *testing.T) {
HomePath, _ = filepath.Abs("../../")
Convey("Testing loading settings from ini file", t, func() { Convey("Testing loading settings from ini file", t, func() {
Convey("Given the default ini files", func() { Convey("Given the default ini files", func() {
NewConfigContext(&CommandLineArgs{}) NewConfigContext(&CommandLineArgs{HomePath: "../../"})
So(AppName, ShouldEqual, "Grafana") So(AppName, ShouldEqual, "Grafana")
So(AdminUser, ShouldEqual, "admin") So(AdminUser, ShouldEqual, "admin")
@ -23,7 +21,7 @@ func TestLoadingSettings(t *testing.T) {
Convey("Should be able to override via environment variables", func() { Convey("Should be able to override via environment variables", func() {
os.Setenv("GF_SECURITY_ADMIN_USER", "superduper") os.Setenv("GF_SECURITY_ADMIN_USER", "superduper")
NewConfigContext(&CommandLineArgs{}) NewConfigContext(&CommandLineArgs{HomePath: "../../"})
So(AdminUser, ShouldEqual, "superduper") So(AdminUser, ShouldEqual, "superduper")
So(DataPath, ShouldEqual, filepath.Join(HomePath, "data")) So(DataPath, ShouldEqual, filepath.Join(HomePath, "data"))
@ -40,7 +38,8 @@ func TestLoadingSettings(t *testing.T) {
Convey("Should be able to override via command line", func() { Convey("Should be able to override via command line", func() {
NewConfigContext(&CommandLineArgs{ NewConfigContext(&CommandLineArgs{
Args: []string{"cfg:paths.data=/tmp/data", "cfg:paths.logs=/tmp/logs"}, HomePath: "../../",
Args: []string{"cfg:paths.data=/tmp/data", "cfg:paths.logs=/tmp/logs"},
}) })
So(DataPath, ShouldEqual, "/tmp/data") So(DataPath, ShouldEqual, "/tmp/data")
@ -49,6 +48,7 @@ func TestLoadingSettings(t *testing.T) {
Convey("Should be able to override defaults via command line", func() { Convey("Should be able to override defaults via command line", func() {
NewConfigContext(&CommandLineArgs{ NewConfigContext(&CommandLineArgs{
HomePath: "../../",
Args: []string{ Args: []string{
"cfg:default.server.domain=test2", "cfg:default.server.domain=test2",
}, },
@ -60,8 +60,9 @@ func TestLoadingSettings(t *testing.T) {
Convey("Defaults can be overriden in specified config file", func() { Convey("Defaults can be overriden in specified config file", func() {
NewConfigContext(&CommandLineArgs{ NewConfigContext(&CommandLineArgs{
Args: []string{"cfg:default.paths.data=/tmp/data"}, HomePath: "../../",
Config: filepath.Join(HomePath, "tests/config-files/override.ini"), Config: filepath.Join(HomePath, "tests/config-files/override.ini"),
Args: []string{"cfg:default.paths.data=/tmp/data"},
}) })
So(DataPath, ShouldEqual, "/tmp/override") So(DataPath, ShouldEqual, "/tmp/override")
@ -69,8 +70,9 @@ func TestLoadingSettings(t *testing.T) {
Convey("Command line overrides specified config file", func() { Convey("Command line overrides specified config file", func() {
NewConfigContext(&CommandLineArgs{ NewConfigContext(&CommandLineArgs{
Args: []string{"cfg:paths.data=/tmp/data"}, HomePath: "../../",
Config: filepath.Join(HomePath, "tests/config-files/override.ini"), Config: filepath.Join(HomePath, "tests/config-files/override.ini"),
Args: []string{"cfg:paths.data=/tmp/data"},
}) })
So(DataPath, ShouldEqual, "/tmp/data") So(DataPath, ShouldEqual, "/tmp/data")
@ -79,7 +81,8 @@ func TestLoadingSettings(t *testing.T) {
Convey("Can use environment variables in config values", func() { Convey("Can use environment variables in config values", func() {
os.Setenv("GF_DATA_PATH", "/tmp/env_override") os.Setenv("GF_DATA_PATH", "/tmp/env_override")
NewConfigContext(&CommandLineArgs{ NewConfigContext(&CommandLineArgs{
Args: []string{"cfg:paths.data=${GF_DATA_PATH}"}, HomePath: "../../",
Args: []string{"cfg:paths.data=${GF_DATA_PATH}"},
}) })
So(DataPath, ShouldEqual, "/tmp/env_override") So(DataPath, ShouldEqual, "/tmp/env_override")

Loading…
Cancel
Save