This repository has been archived on 2026-03-28. You can view files and clone it, but cannot push or open issues or pull requests.
old-sysmonitord/internal/initializer/config.go

85 lines
1.9 KiB
Go

package initializer
import (
"encoding/json"
"fmt"
"io"
"net/http"
"time"
"github.com/wuko233/sysmonitord/internal/config"
)
type ConfigLoader struct {
client *http.Client
}
func NewConfigLoader() *ConfigLoader {
return &ConfigLoader{
client: &http.Client{Timeout: 10 * time.Second},
}
}
func (l *ConfigLoader) Load(officialURL, UserURL string) (*config.OfficialConfig, *config.UserConfig, error) {
var officialCfg config.OfficialConfig
var userCfg config.UserConfig
if err := l.fetchJSON(officialURL, &officialCfg); err != nil {
return nil, nil, fmt.Errorf("加载官方配置失败: %v", err)
}
if err := l.fetchJSON(UserURL, &userCfg); err != nil {
return nil, nil, fmt.Errorf("加载用户配置失败: %v", err)
}
return &officialCfg, &userCfg, nil
}
func (l *ConfigLoader) fetchJSON(url string, target interface{}) error {
resp, err := l.client.Get(url)
if err != nil {
return err
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
return fmt.Errorf("HTTP %s", resp.Status)
}
body, err := io.ReadAll(resp.Body)
if err != nil {
return err
}
return json.Unmarshal(body, target)
}
func determineServerURL(userCfg config.UserConfig) string {
if userCfg.Connection.CenterServerURL != "" {
return userCfg.Connection.CenterServerURL
}
// 默认地址
return "ws://localhost:8090/api/v1/ws"
}
func determineScanPaths(officialCfg config.OfficialConfig, userCfg config.UserConfig) []string {
// 从用户配置获取扫描路径
if len(userCfg.ScanPaths) > 0 {
return userCfg.ScanPaths
}
// 从官方配置获取扫描路径
if len(officialCfg.ScanPaths) > 0 {
return officialCfg.ScanPaths
}
// 默认扫描路径
return []string{"/bin", "/sbin", "/usr/bin", "/usr/sbin", "/etc", "/tmp", "/home"}
}
func determineWatchPaths(official config.OfficialConfig, user config.UserConfig) []string {
// 可复用扫描路径,或从 user.WatchPaths 读取
return determineScanPaths(official, user)
}