浏览代码

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

Torkel Ödegaard 10 年之前
父节点
当前提交
6de584aafc
共有 4 个文件被更改,包括 60 次插入32 次删除
  1. 0 10
      conf/dev.ini
  2. 4 2
      main.go
  3. 43 10
      pkg/setting/setting.go
  4. 13 10
      pkg/setting/setting_test.go

+ 0 - 10
conf/dev.ini

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

+ 4 - 2
main.go

@@ -25,6 +25,7 @@ var commit = "NA"
 var buildstamp string
 
 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")
 
 func init() {
@@ -65,8 +66,9 @@ func main() {
 
 func initRuntime() {
 	setting.NewConfigContext(&setting.CommandLineArgs{
-		Config: *configFile,
-		Args:   flag.Args(),
+		Config:   *configFile,
+		HomePath: *homePath,
+		Args:     flag.Args(),
 	})
 
 	log.Info("Starting Grafana")

+ 43 - 10
pkg/setting/setting.go

@@ -106,14 +106,14 @@ var (
 )
 
 type CommandLineArgs struct {
-	Config string
-	Args   []string
+	Config   string
+	HomePath string
+	Args     []string
 }
 
 func init() {
 	IsWindows = runtime.GOOS == "windows"
 	log.NewLogger(0, "console", `{"level": 0}`)
-	HomePath, _ = filepath.Abs(".")
 }
 
 func parseAppUrlAndSubUrl(section *ini.Section) (string, string) {
@@ -226,6 +226,14 @@ func evalConfigValues() {
 }
 
 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.BlockMode = false
 	if err != nil {
@@ -256,8 +264,6 @@ func loadSpecifedConfigFile(configFile string) {
 func loadConfiguration(args *CommandLineArgs) {
 	var err error
 
-	args.Config = evalEnvVarExpression(args.Config)
-
 	// load config defaults
 	defaultConfigFile := path.Join(HomePath, "conf/defaults.ini")
 	configFiles = append(configFiles, defaultConfigFile)
@@ -276,9 +282,7 @@ func loadConfiguration(args *CommandLineArgs) {
 	applyCommandLineDefaultProperties(commandLineProps)
 
 	// load specified config file
-	if args.Config != "" {
-		loadSpecifedConfigFile(args.Config)
-	}
+	loadSpecifedConfigFile(args.Config)
 
 	// apply environment overrides
 	applyEnvVariableOverrides()
@@ -290,11 +294,40 @@ func loadConfiguration(args *CommandLineArgs) {
 	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) {
+	setHomePath(args)
 	loadConfiguration(args)
 
 	DataPath = makeAbsolute(Cfg.Section("paths").Key("data").String(), HomePath)
-
 	initLogging(args)
 
 	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")
 	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)
 	EnableGzip = server.Key("enable_gzip").MustBool(false)
 

+ 13 - 10
pkg/setting/setting_test.go

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