初始化项目
This commit is contained in:
@@ -0,0 +1,105 @@
|
||||
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)
|
||||
}
|
||||
Reference in New Issue
Block a user