Files
waf-platform/EdgeUser/internal/configloaders/user_price_config.go

77 lines
1.9 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Copyright 2022 Liuxiangchao iwind.liu@gmail.com. All rights reserved. Official site: https://goedge.cn .
package configloaders
import (
"bytes"
"encoding/json"
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
"github.com/TeaOSLab/EdgeCommon/pkg/systemconfigs"
"github.com/TeaOSLab/EdgeCommon/pkg/userconfigs"
"github.com/TeaOSLab/EdgeUser/internal/remotelogs"
"github.com/TeaOSLab/EdgeUser/internal/rpc"
"time"
)
var sharedUserPriceConfig *userconfigs.UserPriceConfig
var sharedUserPriceJSON []byte
func init() {
var ticker = time.NewTicker(1 * time.Minute)
go func() {
for range ticker.C {
_, err := LoadUserPriceConfig()
if err != nil {
if rpc.IsConnError(err) {
remotelogs.Debug("LoadUserPriceConfig", err.Error())
} else {
remotelogs.Error("LoadUserPriceConfig", err.Error())
}
}
}
}()
}
// LoadUserPriceConfig 加载用户计费设置
// 在没有error的情况下需要保证一定会返回一个不为空的配置
func LoadUserPriceConfig() (*userconfigs.UserPriceConfig, error) {
rpcClient, err := rpc.SharedRPC()
if err != nil {
return nil, err
}
resp, err := rpcClient.SysSettingRPC().ReadSysSetting(rpcClient.Context(0), &pb.ReadSysSettingRequest{Code: systemconfigs.SettingCodeUserPriceConfig})
if err != nil {
return nil, err
}
// 如果是相同,则不更新
if bytes.Equal(resp.ValueJSON, sharedUserPriceJSON) {
return sharedUserPriceConfig, nil
}
var config = userconfigs.DefaultUserPriceConfig()
if len(resp.ValueJSON) == 0 {
return config, nil
}
err = json.Unmarshal(resp.ValueJSON, config)
if err != nil {
return nil, err
}
sharedUserPriceConfig = config
sharedUserPriceJSON = resp.ValueJSON
return config, nil
}
func LoadCacheableUserPriceConfig() (*userconfigs.UserPriceConfig, error) {
if sharedUserPriceConfig != nil {
// clone是防止被修改
return sharedUserPriceConfig.Clone()
}
return LoadUserPriceConfig()
}