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  }