Use xds-common go library.
[src/xds/xds-server.git] / lib / xdsconfig / config.go
1 package xdsconfig
2
3 import (
4         "fmt"
5
6         "os"
7
8         "github.com/Sirupsen/logrus"
9         "github.com/codegangsta/cli"
10         common "github.com/iotbzh/xds-common/golib"
11 )
12
13 // Config parameters (json format) of /config command
14 type Config struct {
15         Version       string        `json:"version"`
16         APIVersion    string        `json:"apiVersion"`
17         VersionGitTag string        `json:"gitTag"`
18         Builder       BuilderConfig `json:"builder"`
19         Folders       FoldersConfig `json:"folders"`
20
21         // Private (un-exported fields in REST GET /config route)
22         FileConf FileConfig     `json:"-"`
23         Log      *logrus.Logger `json:"-"`
24 }
25
26 // Config default values
27 const (
28         DefaultAPIVersion = "1"
29         DefaultPort       = "8000"
30         DefaultShareDir   = "/mnt/share"
31         DefaultSdkRootDir = "/xdt/sdk"
32 )
33
34 // Init loads the configuration on start-up
35 func Init(cliCtx *cli.Context, log *logrus.Logger) (*Config, error) {
36         var err error
37
38         // Define default configuration
39         c := Config{
40                 Version:       cliCtx.App.Metadata["version"].(string),
41                 APIVersion:    DefaultAPIVersion,
42                 VersionGitTag: cliCtx.App.Metadata["git-tag"].(string),
43                 Builder:       BuilderConfig{},
44                 Folders:       FoldersConfig{},
45                 FileConf: FileConfig{
46                         WebAppDir:    "webapp/dist",
47                         ShareRootDir: DefaultShareDir,
48                         SdkRootDir:   DefaultSdkRootDir,
49                         HTTPPort:     DefaultPort,
50                 },
51                 Log: log,
52         }
53
54         // config file settings overwrite default config
55         err = updateConfigFromFile(&c, cliCtx.GlobalString("config"))
56         if err != nil {
57                 return nil, err
58         }
59
60         // Update location of shared dir if needed
61         if !common.Exists(c.FileConf.ShareRootDir) {
62                 if err := os.MkdirAll(c.FileConf.ShareRootDir, 0770); err != nil {
63                         return nil, fmt.Errorf("No valid shared directory found: %v", err)
64                 }
65         }
66         c.Log.Infoln("Share root directory: ", c.FileConf.ShareRootDir)
67
68         if c.FileConf.LogsDir != "" && !common.Exists(c.FileConf.LogsDir) {
69                 if err := os.MkdirAll(c.FileConf.LogsDir, 0770); err != nil {
70                         return nil, fmt.Errorf("Cannot create logs dir: %v", err)
71                 }
72         }
73         c.Log.Infoln("Logs directory: ", c.FileConf.LogsDir)
74
75         return &c, nil
76 }