feat(migration): upgrade legacy ps1 scripts to single-binary Golang platform

This commit is contained in:
2026-03-24 14:37:44 +08:00
parent 82eeee50f1
commit f288be2a63
21 changed files with 569 additions and 3015 deletions

67
pkg/config/config.go Normal file
View File

@@ -0,0 +1,67 @@
package config
import (
"encoding/json"
"os"
"path/filepath"
"runtime"
)
// Config 存储程序的各类配置常量,支持通过读取 json 文件动态修改
type Config struct {
TargetIP string `json:"TargetIP"` // 检测目标 IP默认 192.168.3.3
MonitorWindowSeconds int `json:"MonitorWindowSeconds"` // 监控窗口期内持续失败才触发关机
ShutdownCountdown int `json:"ShutdownCountdown"` // 关机倒计时时间
NormalPingInterval int `json:"NormalPingInterval"` // 正常状态下的 ping 间隔
}
// DefaultConfig 提供一套开箱即用的默认配置
func DefaultConfig() *Config {
return &Config{
TargetIP: "192.168.3.3",
MonitorWindowSeconds: 180,
ShutdownCountdown: 60,
NormalPingInterval: 15,
}
}
// GetConfigDir 根据当前操作系统返回标准的配置存放路径
func GetConfigDir() string {
if runtime.GOOS == "windows" {
return `C:\ProgramData\SmartNetworkMonitor`
}
return `/etc/smart-network-monitor`
}
// GetLogDir 根据当前操作系统返回标准的日志存放路径
func GetLogDir() string {
if runtime.GOOS == "windows" {
return `C:\ProgramData\SmartNetworkMonitor\logs`
}
return `/var/log/smart-network-monitor`
}
// LoadConfig 从系统标准路径读取 config.json 并反序列化。如果不存在,则返回默认配置。
func LoadConfig() (*Config, error) {
configDir := GetConfigDir()
configPath := filepath.Join(configDir, "config.json")
data, err := os.ReadFile(configPath)
if err != nil {
if os.IsNotExist(err) {
// 文件不存在时,静默采用默认配置
return DefaultConfig(), nil
}
return nil, err
}
if len(data) >= 3 && data[0] == 0xef && data[1] == 0xbb && data[2] == 0xbf {
data = data[3:]
}
cfg := &Config{}
if err := json.Unmarshal(data, cfg); err != nil {
return nil, err
}
return cfg, nil
}