61 lines
1.9 KiB
Go
61 lines
1.9 KiB
Go
package configs
|
|||
|
|
|
||
|
|
import "fmt"
|
||
|
|
|
||
|
|
// EditableConfig 是管理员可以在 WebUI 里修改的配置子集。
|
||
|
|
//
|
||
|
|
// 只收录改完立即生效的项。监听地址、数据库、session 密钥这类需要重启
|
||
|
|
// 或改错会导致服务起不来的配置,只能改配置文件。
|
||
|
|
type EditableConfig struct {
|
||
|
|
EnableRegistry bool `json:"enable_registry"`
|
||
|
|
TimeoutDurationHours int `json:"timeout_duration_hours"`
|
||
|
|
CheckIntervalMinutes int `json:"check_interval_minutes"`
|
||
|
|
LogRetainCount int `json:"log_retain_count"`
|
||
|
|
}
|
||
|
|
|
||
|
|
// Editable 从完整配置中取出可编辑的部分
|
||
|
|
func (c Config) Editable() EditableConfig {
|
||
|
|
return EditableConfig{
|
||
|
|
EnableRegistry: c.EnableRegistry,
|
||
|
|
TimeoutDurationHours: c.TimeoutDurationHours,
|
||
|
|
CheckIntervalMinutes: c.CheckIntervalMinutes,
|
||
|
|
LogRetainCount: c.LogRetainCount,
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// Validate 校验管理员提交的配置
|
||
|
|
func (e EditableConfig) Validate() error {
|
||
|
|
if e.TimeoutDurationHours < 1 || e.TimeoutDurationHours > 72 {
|
||
|
|
return fmt.Errorf("规则重试时长必须在 1~72 小时之间")
|
||
|
|
}
|
||
|
|
if e.CheckIntervalMinutes < 1 || e.CheckIntervalMinutes > 1440 {
|
||
|
|
return fmt.Errorf("检查间隔必须在 1~1440 分钟之间")
|
||
|
|
}
|
||
|
|
if e.LogRetainCount < 0 || e.LogRetainCount > 100000 {
|
||
|
|
return fmt.Errorf("日志保留条数必须在 0~100000 之间,0 表示不限制")
|
||
|
|
}
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// ApplyEditable 把可编辑部分合并进当前配置并持久化,返回更新后的完整配置
|
||
|
|
func ApplyEditable(e EditableConfig) (Config, error) {
|
||
|
|
if err := e.Validate(); err != nil {
|
||
|
|
return Config{}, err
|
||
|
|
}
|
||
|
|
|
||
|
|
current, err := GetConfig()
|
||
|
|
if err != nil {
|
||
|
|
return Config{}, err
|
||
|
|
}
|
||
|
|
|
||
|
|
current.EnableRegistry = e.EnableRegistry
|
||
|
|
current.TimeoutDurationHours = e.TimeoutDurationHours
|
||
|
|
current.CheckIntervalMinutes = e.CheckIntervalMinutes
|
||
|
|
current.LogRetainCount = e.LogRetainCount
|
||
|
|
|
||
|
|
if err := Save(current); err != nil {
|
||
|
|
return Config{}, err
|
||
|
|
}
|
||
|
|
return current, nil
|
||
|
|
}
|