106 lines
2.3 KiB
Go
106 lines
2.3 KiB
Go
package config
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"time"
|
|
|
|
"gopkg.in/yaml.v3"
|
|
)
|
|
|
|
// 常量
|
|
const (
|
|
// 版本号
|
|
APP_VERSION = 29
|
|
|
|
BASE_URL = "https://ai.ronsunny.cn:8090"
|
|
//BASE_URL = "http://127.0.0.1:13011"
|
|
LOG_FILE_DIC = "./logs"
|
|
LOG_CHECK_INTERVAL_HOURS = 10 // 文件轮询检查间隔(秒)
|
|
MQTT_BROKER = "tls://ai.ronsunny.cn:8093"
|
|
PASSWORD = "123456"
|
|
|
|
DOCKER_REGISTRY = "ai.ronsunny.cn:13011"
|
|
DOCKER_USERNAME = "iot_device"
|
|
DOCKER_PASSWORD = "Bbit000000"
|
|
DOCKER_IMAGE = "ai.ronsunny.cn:13011/bbit_iot/ce_sentinel"
|
|
DOCKER_CONTAINER_NAME = "BBIT_Project"
|
|
DOCKER_TIME_OUT = 30 * time.Second
|
|
|
|
DAEMON_UPDATE_CHECK_INTERVAL_SECONDS = 5 // 文件轮询检查间隔(秒)
|
|
DAEMON_ALIVE_GAP_SECONDS = 30
|
|
)
|
|
|
|
var (
|
|
DOCKER_CONTAINER_BINDS = []string{
|
|
"/opt/sentinel/logs:/app/logs:rw",
|
|
}
|
|
)
|
|
|
|
type AppConfig struct {
|
|
VersionCode int `yaml:"version_code"`
|
|
PID int `yaml:"pid"`
|
|
NeedUpdate bool `yaml:"need_update"`
|
|
/**
|
|
状态 语义
|
|
CONNECTED MQTT 已连,设备可控
|
|
DEGRADED MQTT 短暂失联,容忍期
|
|
CONTROL_LOST MQTT 长期失联,不应继续运行
|
|
*/
|
|
ControlState string `yaml:"control_state"` // CONNECTED / DEGRADED / CONTROL_LOST
|
|
LastAliveAt int64 `yaml:"last_alive_at"` // Unix 秒
|
|
}
|
|
|
|
func LoadConfig() *AppConfig {
|
|
cfg := &AppConfig{}
|
|
if err := loadLocalConfig(cfg); err != nil {
|
|
print("[daemon] 加载配置失败,当作新状态处理:", err)
|
|
}
|
|
return cfg
|
|
}
|
|
|
|
func loadLocalConfig[T any](cfg *T) error {
|
|
exePath, err := os.Executable()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
dir := filepath.Dir(exePath)
|
|
cfgPath := filepath.Join(dir, "config.yaml")
|
|
|
|
// 不存在就创建一个默认的
|
|
if _, err := os.Stat(cfgPath); os.IsNotExist(err) {
|
|
cfg := &AppConfig{
|
|
VersionCode: -1,
|
|
PID: -1,
|
|
NeedUpdate: false,
|
|
}
|
|
return WriteLocalConfig(cfg)
|
|
}
|
|
|
|
data, err := os.ReadFile(cfgPath)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := yaml.Unmarshal(data, cfg); err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
func WriteLocalConfig(cfg any) error {
|
|
exePath, err := os.Executable()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
dir := filepath.Dir(exePath)
|
|
cfgPath := filepath.Join(dir, "config.yaml")
|
|
|
|
data, err := yaml.Marshal(cfg)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return os.WriteFile(cfgPath, data, 0644)
|
|
}
|