| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- package config
- import (
- "bytes"
- "os"
- "reflect"
- "time"
- utilsConfig "git.familybaby.top/flight/utils/config"
- "github.com/sirupsen/logrus"
- _ "github.com/spf13/viper/remote"
- )
- var (
- local = utilsConfig.New()
- ServerName = "upgrade"
- log = logrus.WithField("module", "config")
- )
- func _default() {
- local.Register("viper", "remote", false)
- local.Register("viper", "provider", "")
- local.Register("viper", "endpoint", "")
- local.Register("viper", "path", "")
- local.Register("oss", "type", "local")
- local.Register("oss", "endpoint", "")
- local.Register("oss", "access_key", "")
- local.Register("oss", "access_secret", "")
- local.Register("oss", "bucket_name", "")
- local.Register("oss", "base_url", "")
- local.Register("oss", "secure", false)
- local.Register("database", "type", "sqlite3")
- local.Register("database", "url", "./sqlite.db")
- local.Register("database", "debug", false)
- local.Register("database", "sync", true)
- local.Register("log", "compress", true)
- local.Register("log", "disable_colors", false)
- local.Register("log", "disable_timestamp", false)
- local.Register("log", "caller", true)
- local.Register("log", "filename", "log.txt")
- local.Register("log", "level", "trace")
- local.Register("log", "max_age", 30)
- local.Register("log", "max_backups", 3)
- local.Register("log", "max_size", 10)
- local.Register("log", "output", "stdout")
- local.Register("log", "timestamp_format", "2006-01-02 15:04:05")
- local.Register("web", "cert", "")
- local.Register("web", "cors", true)
- local.Register("web", "debug", true)
- local.Register("web", "email", "")
- local.Register("web", "gzip", true)
- local.Register("web", "hosts", []string{})
- local.Register("web", "port", 8080)
- local.Register("web", "https", "")
- local.Register("web", "key", ServerName)
- local.Register("web", "jwt.expire", 7200)
- local.Register("web", "jwt.method", "SigningMethodHS256")
- local.Register("service", "name", ServerName)
- local.Register("service", "description", "通用ota 平台")
- isExist, err := local.ReadConfigAndFileExist()
- if err != nil || !isExist {
- _ = local.Store()
- }
- }
- var oldMap map[string]any
- func isSame() bool {
- if oldMap == nil {
- oldMap = local.Viper.AllSettings()
- //不做这个操作 将无法通过远程 更新本地配置
- b := bytes.NewReader(nil)
- _ = local.Viper.ReadConfig(b)
- log.Debug("清空 本地viper 配置")
- }
- newMap := local.Viper.AllSettings()
- return reflect.DeepEqual(oldMap, newMap)
- }
- func watchRemote() {
- for {
- time.Sleep(time.Second * 60) // delay after each request
- // currently, only tested with etcd support
- err := local.Viper.WatchRemoteConfigOnChannel()
- if err != nil {
- log.Errorf("unable to read remote config: %v", err)
- continue
- }
- //err = local.Viper.ReadRemoteConfig()
- //if err != nil {
- // log.Error("读取viper远端配置失败:", err)
- //}
- if !isSame() {
- err = local.Store()
- if err == nil {
- log.Debug("远端配置 修改, 将退出应用", err)
- os.Exit(0)
- }
- }
- }
- }
- func init() {
- _default()
- param, err := GetViperParam()
- if err != nil {
- log.Error("获取本地viper 配置错误:", err)
- } else {
- if param.Remote {
- local.Viper.SetConfigName("")
- err = local.Viper.AddRemoteProvider(
- param.Provider,
- param.Endpoint,
- param.Path,
- )
- if err != nil {
- log.Error("添加viper远端配置失败:", err)
- } else {
- err = local.Viper.ReadRemoteConfig()
- if err != nil {
- log.Error("读取viper远端配置失败:", err)
- } else {
- }
- go watchRemote()
- }
- }
- }
- }
- func GetViperParam() (c viper, err error) {
- err = local.Unmarshal(&c, "viper")
- return
- }
- func GetLogParam() (c Log, err error) {
- err = local.Unmarshal(&c, "log")
- return
- }
|