9 "github.com/Sirupsen/logrus"
10 "github.com/codegangsta/cli"
11 common "github.com/iotbzh/xds-common/golib"
14 // Config parameters (json format) of /config command
16 Version string `json:"version"`
17 APIVersion string `json:"apiVersion"`
18 VersionGitTag string `json:"gitTag"`
19 Builder BuilderConfig `json:"builder"`
21 // Private (un-exported fields in REST GET /config route)
22 Options Options `json:"-"`
23 FileConf FileConfig `json:"-"`
24 Log *logrus.Logger `json:"-"`
25 LogVerboseOut io.Writer `json:"-"`
28 // Options set at the command line
36 // Config default values
38 DefaultAPIVersion = "1"
40 DefaultShareDir = "${HOME}/.xds-server/projects"
41 DefaultSTHomeDir = "${HOME}/.xds-server/syncthing-config"
42 DefaultSdkRootDir = "/xdt/sdk"
45 // Init loads the configuration on start-up
46 func Init(cliCtx *cli.Context, log *logrus.Logger) (*Config, error) {
49 dfltShareDir := DefaultShareDir
50 dfltSTHomeDir := DefaultSTHomeDir
51 if resDir, err := common.ResolveEnvVar(DefaultShareDir); err == nil {
54 if resDir, err := common.ResolveEnvVar(DefaultSTHomeDir); err == nil {
55 dfltSTHomeDir = resDir
58 // Define default configuration
60 Version: cliCtx.App.Metadata["version"].(string),
61 APIVersion: DefaultAPIVersion,
62 VersionGitTag: cliCtx.App.Metadata["git-tag"].(string),
63 Builder: BuilderConfig{},
66 ConfigFile: cliCtx.GlobalString("config"),
67 LogLevel: cliCtx.GlobalString("log"),
68 LogFile: cliCtx.GlobalString("logfile"),
69 NoFolderConfig: cliCtx.GlobalBool("no-folderconfig"),
72 WebAppDir: "webapp/dist",
73 ShareRootDir: dfltShareDir,
74 SdkRootDir: DefaultSdkRootDir,
75 HTTPPort: DefaultPort,
76 SThgConf: &SyncThingConf{Home: dfltSTHomeDir},
82 // config file settings overwrite default config
83 err = readGlobalConfig(&c, c.Options.ConfigFile)
88 // Update location of shared dir if needed
89 if !common.Exists(c.FileConf.ShareRootDir) {
90 if err := os.MkdirAll(c.FileConf.ShareRootDir, 0770); err != nil {
91 return nil, fmt.Errorf("No valid shared directory found: %v", err)
94 c.Log.Infoln("Share root directory: ", c.FileConf.ShareRootDir)
96 // Where Logs are redirected:
97 // default 'stdout' (logfile option default value)
98 // else use file (or filepath) set by --logfile option
99 // that may be overwritten by LogsDir field of config file
100 logF := c.Options.LogFile
101 logD := c.FileConf.LogsDir
102 if logF != "stdout" {
104 lf := filepath.Base(logF)
105 if lf == "" || lf == "." {
106 lf = "xds-server.log"
108 logF = filepath.Join(logD, lf)
110 logD = filepath.Dir(logF)
113 if logD == "" || logD == "." {
114 logD = "/tmp/xds/logs"
116 c.Options.LogFile = logF
117 c.FileConf.LogsDir = logD
119 if c.FileConf.LogsDir != "" && !common.Exists(c.FileConf.LogsDir) {
120 if err := os.MkdirAll(c.FileConf.LogsDir, 0770); err != nil {
121 return nil, fmt.Errorf("Cannot create logs dir: %v", err)
124 c.Log.Infoln("Logs file: ", c.Options.LogFile)
125 c.Log.Infoln("Logs directory: ", c.FileConf.LogsDir)