xframe/component/agollo/env/app_config.go

115 lines
2.6 KiB
Go
Executable File
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.

package env
import (
"encoding/json"
"fmt"
"net/url"
"strings"
"sync"
"git.wishpal.cn/wishpal_ironfan/xframe/component/agollo/env/config"
"git.wishpal.cn/wishpal_ironfan/xframe/component/agollo/utils"
"git.wishpal.cn/wishpal_ironfan/xframe/component/logger"
)
const (
defaultNotificationID = int64(-1)
comma = ","
)
var (
//app config
appConfig *config.AppConfig
//real servers ip
servers sync.Map
//next try connect period - 60 second
nextTryConnectPeriod int64 = 60
)
// InitConfig 使用指定配置初始化配置
func InitConfig(cfg *config.AppConfig) {
appConfig = cfg
}
// SplitNamespaces 根据namespace字符串分割后并执行callback函数
func SplitNamespaces(namespacesStr string, callback func(namespace string)) *sync.Map {
namespaces := sync.Map{}
split := strings.Split(namespacesStr, comma)
for _, namespace := range split {
if callback != nil {
callback(namespace)
}
namespaces.Store(namespace, defaultNotificationID)
}
return &namespaces
}
// SyncServerIPListSuccessCallBack 同步服务器列表成功后的回调
func SyncServerIPListSuccessCallBack(responseBody []byte) (o interface{}, err error) {
logger.Debugln("get all server info:", string(responseBody))
tmpServerInfo := make([]*config.ServerInfo, 0)
err = json.Unmarshal(responseBody, &tmpServerInfo)
if err != nil {
logger.Errorln("Unmarshal json Fail,Error:", err)
return
}
if len(tmpServerInfo) == 0 {
logger.Infoln("get no real server!")
return
}
for _, server := range tmpServerInfo {
if server == nil {
continue
}
servers.Store(server.HomepageURL, server)
}
return
}
// SetDownNode 设置失效节点
func SetDownNode(host string) {
if host == "" || appConfig == nil {
return
}
if host == appConfig.GetHost() {
appConfig.SetNextTryConnTime(nextTryConnectPeriod)
}
servers.Range(func(k, v interface{}) bool {
server := v.(*config.ServerInfo)
// if some node has down then select next node
if strings.Index(k.(string), host) > -1 {
server.IsDown = true
return false
}
return true
})
}
// GetAppConfig 获取app配置
func GetAppConfig() *config.AppConfig {
return appConfig
}
// GetServicesConfigURL 获取服务器列表url
func GetServicesConfigURL(config *config.AppConfig) string {
return fmt.Sprintf("%sservices/config?appId=%s&ip=%s",
config.GetHost(),
url.QueryEscape(config.AppID),
utils.GetInternal())
}
// GetPlainAppConfig 获取原始配置
func GetPlainAppConfig() *config.AppConfig {
return appConfig
}
// GetServers 获取服务器数组
func GetServers() *sync.Map {
return &servers
}