package configloaders import ( "encoding/json" "github.com/TeaOSLab/EdgeAdmin/internal/rpc" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" "github.com/TeaOSLab/EdgeCommon/pkg/systemconfigs" ) const UpgradeSettingName = "upgradeConfig" var sharedUpgradeConfig *systemconfigs.UpgradeConfig func LoadUpgradeConfig() (*systemconfigs.UpgradeConfig, error) { locker.Lock() defer locker.Unlock() if sharedUpgradeConfig != nil { return sharedUpgradeConfig, nil } rpcClient, err := rpc.SharedRPC() if err != nil { return nil, err } resp, err := rpcClient.SysSettingRPC().ReadSysSetting(rpcClient.Context(0), &pb.ReadSysSettingRequest{ Code: UpgradeSettingName, }) if err != nil { return nil, err } if len(resp.ValueJSON) == 0 { sharedUpgradeConfig = systemconfigs.NewUpgradeConfig() return sharedUpgradeConfig, nil } config := systemconfigs.NewUpgradeConfig() err = json.Unmarshal(resp.ValueJSON, config) if err != nil { sharedUpgradeConfig = systemconfigs.NewUpgradeConfig() return sharedUpgradeConfig, nil } sharedUpgradeConfig = config return sharedUpgradeConfig, nil } func UpdateUpgradeConfig(config *systemconfigs.UpgradeConfig) error { locker.Lock() defer locker.Unlock() rpcClient, err := rpc.SharedRPC() if err != nil { return err } valueJSON, err := json.Marshal(config) if err != nil { return err } _, err = rpcClient.SysSettingRPC().UpdateSysSetting(rpcClient.Context(0), &pb.UpdateSysSettingRequest{ Code: UpgradeSettingName, ValueJSON: valueJSON, }) if err != nil { return err } sharedUpgradeConfig = config return nil }