139 lines
4.6 KiB
Go
139 lines
4.6 KiB
Go
|
package config
|
|||
|
|
|||
|
import (
|
|||
|
"fmt"
|
|||
|
"os"
|
|||
|
|
|||
|
"git.hpds.cc/Component/logging"
|
|||
|
consulApi "github.com/hashicorp/consul/api"
|
|||
|
_ "github.com/spf13/viper/remote"
|
|||
|
yaml "gopkg.in/yaml.v3"
|
|||
|
)
|
|||
|
|
|||
|
type DataMinioConfig struct {
|
|||
|
Name string `yaml:"name" json:"name" toml:"name"`
|
|||
|
Mode string `yaml:"mode" json:"mode"`
|
|||
|
Consul ConsulConfig `yaml:"consul,omitempty"`
|
|||
|
Db DbConfig `yaml:"db"`
|
|||
|
Logging LogOptions `yaml:"logging"`
|
|||
|
Minio MinioConfig `yaml:"minio"`
|
|||
|
Node HpdsNode `yaml:"node,omitempty"`
|
|||
|
Funcs []FuncConfig `yaml:"functions,omitempty"`
|
|||
|
}
|
|||
|
|
|||
|
type ConsulConfig struct {
|
|||
|
Host string `yaml:"host,omitempty"`
|
|||
|
Port int `yaml:"port,omitempty"`
|
|||
|
Interval int `yaml:"interval,omitempty"`
|
|||
|
Timeout int `yaml:"timeout,omitempty"`
|
|||
|
Deregister int `yaml:"deregister,omitempty"`
|
|||
|
Tags []string `yaml:"tags,omitempty"`
|
|||
|
}
|
|||
|
type DbConfig struct {
|
|||
|
Conn string `yaml:"conn"`
|
|||
|
DriveName string `yaml:"drive_name"`
|
|||
|
}
|
|||
|
|
|||
|
type LogOptions struct {
|
|||
|
Path string `yaml:"path" json:"path" toml:"path"` // 文件保存地方
|
|||
|
Prefix string `yaml:"prefix" json:"prefix" toml:"prefix"` // 日志文件前缀
|
|||
|
ErrorFileSuffix string `yaml:"errorFileSuffix" json:"errorFileSuffix" toml:"errorFileSuffix"` // error日志文件后缀
|
|||
|
WarnFileSuffix string `yaml:"warnFileSuffix" json:"warnFileSuffix" toml:"warnFileSuffix"` // warn日志文件后缀
|
|||
|
InfoFileSuffix string `yaml:"infoFileSuffix" json:"infoFileSuffix" toml:"infoFileSuffix"` // info日志文件后缀
|
|||
|
DebugFileSuffix string `yaml:"debugFileSuffix" json:"debugFileSuffix" toml:"debugFileSuffix"` // debug日志文件后缀
|
|||
|
Level string `yaml:"level" json:"level" toml:"level"` // 日志等级
|
|||
|
MaxSize int `yaml:"maxSize" json:"maxSize" toml:"maxSize"` // 日志文件大小(M)
|
|||
|
MaxBackups int `yaml:"maxBackups" json:"maxBackups" toml:"maxBackups"` // 最多存在多少个切片文件
|
|||
|
MaxAge int `yaml:"maxAge" json:"maxAge" toml:"maxAge"` // 保存的最大天数
|
|||
|
Development bool `yaml:"development" json:"development" toml:"development"` // 是否是开发模式
|
|||
|
}
|
|||
|
|
|||
|
type MinioConfig struct {
|
|||
|
Protocol string `yaml:"protocol"` //http or https
|
|||
|
Endpoint string `yaml:"endpoint"`
|
|||
|
AccessKeyId string `yaml:"accessKeyId"`
|
|||
|
SecretAccessKey string `yaml:"secretAccessKey"`
|
|||
|
Bucket string `yaml:"bucket"`
|
|||
|
}
|
|||
|
|
|||
|
type HpdsNode struct {
|
|||
|
Host string `yaml:"host"`
|
|||
|
Port int `yaml:"port"`
|
|||
|
Token string `yaml:"token,omitempty"`
|
|||
|
}
|
|||
|
|
|||
|
type FuncConfig struct {
|
|||
|
Name string `yaml:"name"`
|
|||
|
DataTag uint8 `yaml:"dataTag"`
|
|||
|
MqType uint `yaml:"mqType"` //消息类型, 发布,1;订阅;2
|
|||
|
}
|
|||
|
|
|||
|
func ParseConfigByFile(path string) (cfg *DataMinioConfig, err error) {
|
|||
|
buffer, err := os.ReadFile(path)
|
|||
|
if err != nil {
|
|||
|
return nil, err
|
|||
|
}
|
|||
|
return load(buffer)
|
|||
|
}
|
|||
|
|
|||
|
func load(buf []byte) (cfg *DataMinioConfig, err error) {
|
|||
|
|
|||
|
cfg = new(DataMinioConfig)
|
|||
|
cfg.Funcs = make([]FuncConfig, 0)
|
|||
|
err = yaml.Unmarshal(buf, cfg)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
func UpdateLocalConfig(cfg *DataMinioConfig, fn string) error {
|
|||
|
data, err := yaml.Marshal(cfg)
|
|||
|
if err != nil {
|
|||
|
return err
|
|||
|
}
|
|||
|
err = os.WriteFile(fn, data, 0600)
|
|||
|
return err
|
|||
|
}
|
|||
|
|
|||
|
func UpdateRemoteConfig(cfg *DataMinioConfig) error {
|
|||
|
consulClient, err := consulApi.NewClient(&consulApi.Config{Address: fmt.Sprintf("%s:%d", cfg.Consul.Host, cfg.Consul.Port)})
|
|||
|
if err != nil {
|
|||
|
return err
|
|||
|
}
|
|||
|
val, err := yaml.Marshal(cfg)
|
|||
|
if err != nil {
|
|||
|
return err
|
|||
|
}
|
|||
|
p := &consulApi.KVPair{Key: fmt.Sprintf("hpds-pavement/hpds_data_minio/%s/%s", cfg.Mode, cfg.Name), Value: val}
|
|||
|
if _, err = consulClient.KV().Put(p, nil); err != nil {
|
|||
|
return err
|
|||
|
}
|
|||
|
return nil
|
|||
|
}
|
|||
|
|
|||
|
func GetRemoteConfig(remoteAddr, path string) (cfg *DataMinioConfig, err error) {
|
|||
|
consulClient, err := consulApi.NewClient(&consulApi.Config{Address: remoteAddr})
|
|||
|
if err != nil {
|
|||
|
return nil, err
|
|||
|
}
|
|||
|
kv, _, err := consulClient.KV().Get(path, nil)
|
|||
|
if err != nil {
|
|||
|
return nil, err
|
|||
|
}
|
|||
|
return load(kv.Value)
|
|||
|
}
|
|||
|
|
|||
|
func LoadLoggerConfig(opt LogOptions) *logging.Logger {
|
|||
|
return logging.NewLogger(
|
|||
|
logging.SetPath(opt.Path),
|
|||
|
logging.SetPrefix(opt.Prefix),
|
|||
|
logging.SetDevelopment(opt.Development),
|
|||
|
logging.SetDebugFileSuffix(opt.DebugFileSuffix),
|
|||
|
logging.SetWarnFileSuffix(opt.WarnFileSuffix),
|
|||
|
logging.SetErrorFileSuffix(opt.ErrorFileSuffix),
|
|||
|
logging.SetInfoFileSuffix(opt.InfoFileSuffix),
|
|||
|
logging.SetMaxAge(opt.MaxAge),
|
|||
|
logging.SetMaxBackups(opt.MaxBackups),
|
|||
|
logging.SetMaxSize(opt.MaxSize),
|
|||
|
logging.SetLevel(logging.LogLevel["debug"]),
|
|||
|
)
|
|||
|
}
|