Files
EdgeAPI/internal/db/models/sys_setting_dao.go

131 lines
2.9 KiB
Go
Raw Normal View History

2020-09-26 08:06:40 +08:00
package models
import (
"encoding/json"
2020-09-26 08:06:40 +08:00
"fmt"
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
2020-09-26 08:06:40 +08:00
_ "github.com/go-sql-driver/mysql"
"github.com/iwind/TeaGo/Tea"
"github.com/iwind/TeaGo/dbs"
"github.com/iwind/TeaGo/types"
2020-09-26 08:06:40 +08:00
)
type SysSettingDAO dbs.DAO
type SettingCode = string
const (
SettingCodeServerGlobalConfig SettingCode = "serverGlobalConfig" // 服务相关全局设置
SettingCodeNodeMonitor SettingCode = "nodeMonitor" // 监控节点状态
SettingCodeClusterHealthCheck SettingCode = "clusterHealthCheck" // 集群健康检查
2020-09-26 08:06:40 +08:00
)
func NewSysSettingDAO() *SysSettingDAO {
return dbs.NewDAO(&SysSettingDAO{
DAOObject: dbs.DAOObject{
DB: Tea.Env,
Table: "edgeSysSettings",
Model: new(SysSetting),
PkName: "id",
},
}).(*SysSettingDAO)
}
2020-10-13 20:05:13 +08:00
var SharedSysSettingDAO *SysSettingDAO
func init() {
dbs.OnReady(func() {
SharedSysSettingDAO = NewSysSettingDAO()
})
}
2020-09-26 08:06:40 +08:00
// 设置配置
2020-10-02 17:22:32 +08:00
func (this *SysSettingDAO) UpdateSetting(codeFormat string, valueJSON []byte, codeFormatArgs ...interface{}) error {
if len(codeFormatArgs) > 0 {
codeFormat = fmt.Sprintf(codeFormat, codeFormatArgs...)
2020-09-26 08:06:40 +08:00
}
countRetries := 3
var lastErr error
for i := 0; i < countRetries; i++ {
settingId, err := this.Query().
2020-10-02 17:22:32 +08:00
Attr("code", codeFormat).
2020-09-26 08:06:40 +08:00
ResultPk().
FindInt64Col(0)
if err != nil {
return err
}
if settingId == 0 {
// 新建
op := NewSysSettingOperator()
2020-10-02 17:22:32 +08:00
op.Code = codeFormat
2020-09-26 08:06:40 +08:00
op.Value = valueJSON
_, err = this.Save(op)
if err != nil {
lastErr = err
// 因为错误的原因可能是因为code冲突所以这里我们继续执行
continue
}
return nil
}
// 修改
op := NewSysSettingOperator()
op.Id = settingId
op.Value = valueJSON
_, err = this.Save(op)
if err != nil {
return err
}
}
return lastErr
}
// 读取配置
func (this *SysSettingDAO) ReadSetting(code string, codeFormatArgs ...interface{}) (valueJSON []byte, err error) {
if len(codeFormatArgs) > 0 {
code = fmt.Sprintf(code, codeFormatArgs...)
2020-09-26 08:06:40 +08:00
}
col, err := this.Query().
Attr("code", code).
Result("value").
FindStringCol("")
return []byte(col), err
}
// 对比配置中的数字大小
func (this *SysSettingDAO) CompareInt64Setting(code string, anotherValue int64) (int8, error) {
valueJSON, err := this.ReadSetting(code)
if err != nil {
return 0, err
}
value := types.Int64(string(valueJSON))
if value > anotherValue {
return 1, nil
}
if value < anotherValue {
return -1, nil
}
return 0, nil
}
// 读取全局配置
func (this *SysSettingDAO) ReadGlobalConfig() (*serverconfigs.GlobalConfig, error) {
globalConfigData, err := this.ReadSetting(SettingCodeServerGlobalConfig)
if err != nil {
return nil, err
}
if len(globalConfigData) == 0 {
return &serverconfigs.GlobalConfig{}, nil
}
config := &serverconfigs.GlobalConfig{}
err = json.Unmarshal(globalConfigData, config)
if err != nil {
return nil, err
}
return config, nil
}