github.com/futurehomeno/fimpgo@v1.14.0/edgeapp/configs.go (about) 1 package edgeapp 2 3 import ( 4 "encoding/json" 5 "fmt" 6 "github.com/futurehomeno/fimpgo/utils" 7 log "github.com/sirupsen/logrus" 8 "io/ioutil" 9 "os" 10 "path/filepath" 11 "time" 12 ) 13 14 type Configs struct { 15 path string 16 WorkDir string `json:"-"` 17 InstanceAddress string `json:"instance_address"` 18 MqttServerURI string `json:"mqtt_server_uri"` 19 MqttUsername string `json:"mqtt_server_username"` 20 MqttPassword string `json:"mqtt_server_password"` 21 MqttClientIdPrefix string `json:"mqtt_client_id_prefix"` 22 LogFile string `json:"log_file"` 23 LogLevel string `json:"log_level"` 24 LogFormat string `json:"log_format"` 25 ConfiguredAt string `json:"configured_at"` 26 ConfiguredBy string `json:"configured_by"` 27 CustomConfigs interface{} `json:"custom_configs"` 28 } 29 30 // NewConfigs stores main application configurations 31 func NewConfigs(workDir string) *Configs { 32 conf := &Configs{WorkDir: workDir} 33 if err := conf.initFiles(); err != nil { 34 log.Error(err) 35 } 36 return conf 37 } 38 39 func (cf *Configs) initFiles() error { 40 cf.path = filepath.Join(cf.WorkDir, "data", "config.json") 41 if !utils.FileExists(cf.path) { 42 log.Info("Config file doesn't exist.Loading default config") 43 defaultConfigFile := filepath.Join(cf.WorkDir, "defaults", "config.json") 44 err := utils.CopyFile(defaultConfigFile, cf.path) 45 if err != nil { 46 fmt.Print(err) 47 panic("Can't copy config file.") 48 } 49 } 50 return nil 51 } 52 53 func (cf *Configs) LoadFromFile() error { 54 configFileBody, err := ioutil.ReadFile(cf.path) 55 if err != nil { 56 return err 57 } 58 err = json.Unmarshal(configFileBody, cf) 59 if err != nil { 60 return err 61 } 62 return nil 63 } 64 65 func (cf *Configs) SaveToFile() error { 66 cf.ConfiguredBy = "auto" 67 cf.ConfiguredAt = time.Now().Format(time.RFC3339) 68 bpayload, err := json.Marshal(cf) 69 err = ioutil.WriteFile(cf.path, bpayload, 0664) 70 if err != nil { 71 return err 72 } 73 return err 74 } 75 76 func (cf *Configs) GetDataDir() string { 77 return filepath.Join(cf.WorkDir, "data") 78 } 79 80 func (cf *Configs) GetDefaultDir() string { 81 return filepath.Join(cf.WorkDir, "defaults") 82 } 83 84 func (cf *Configs) LoadDefaults() error { 85 configFile := filepath.Join(cf.WorkDir, "data", "config.json") 86 if err := os.Remove(configFile); err != nil { 87 log.Error(err) 88 } 89 log.Info("Config file doesn't exist.Loading default config") 90 defaultConfigFile := filepath.Join(cf.WorkDir, "defaults", "config.json") 91 return utils.CopyFile(defaultConfigFile, configFile) 92 } 93 94 func (cf *Configs) SetCustomConfigs(config interface{}) { 95 cf.CustomConfigs = config 96 } 97 98 func (cf *Configs) GetCustomConfigs() interface{} { 99 return cf.CustomConfigs 100 } 101 102 //func (cf *Configs) IsConfigured()bool { 103 // // TODO : Add logic here 104 // return true 105 //} 106 107 type ConfigReport struct { 108 OpStatus string `json:"op_status"` 109 AppState AppStates `json:"app_state"` 110 }