初始化项目

This commit is contained in:
BBIT-Kai
2026-05-26 13:53:23 +08:00
commit 7e803e2cdb
27 changed files with 1820 additions and 0 deletions
+105
View File
@@ -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)
}