50 lines
1.2 KiB
Go
50 lines
1.2 KiB
Go
package network
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"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) LoadConfigs(urls ConfigUrls) (config.OfficialConfig, config.UserConfig, error) {
|
|
var official config.OfficialConfig
|
|
var user config.UserConfig
|
|
// 1. 下载官方配置
|
|
if err := l.fetchJSON(urls.OfficialConfigUrl, &official); err != nil {
|
|
return official, user, fmt.Errorf("下载官方配置失败: %v", err)
|
|
}
|
|
// 2. 下载用户配置
|
|
if err := l.fetchJSON(urls.UserConfigUrl, &user); err != nil {
|
|
return official, user, fmt.Errorf("下载用户配置失败: %v", err)
|
|
}
|
|
return official, user, nil
|
|
}
|
|
|
|
func (l *ConfigLoader) fetchJSON(url string, target interface{}) error {
|
|
resp, err := l.client.Get(url)
|
|
if err != nil {
|
|
return fmt.Errorf("请求失败: %v", err)
|
|
}
|
|
defer resp.Body.Close()
|
|
|
|
if resp.StatusCode != http.StatusOK {
|
|
return fmt.Errorf("非200响应: %d", resp.StatusCode)
|
|
}
|
|
return json.NewDecoder(resp.Body).Decode(target)
|
|
}
|