代码拉取完成,页面将自动刷新
package cloud
import (
"net/url"
"os"
"path/filepath"
"strings"
"time"
"gitee.com/tomatomeatman/golang-repository/bricks2/model/emity"
"gitee.com/tomatomeatman/golang-repository/bricks2/utils/function/httputil"
"gitee.com/tomatomeatman/golang-repository/bricks2/utils/ginutil"
Log "github.com/cihub/seelog"
"gopkg.in/ini.v1"
)
var (
appCfg *ini.File //配置文件变量
glbAppiCloudApp = 0 //是否要加入分布式系统(0:待初始化;1:是;2:否)
)
/**
* 初始化
*/
func init() {
if !(hasSection("CloudCenter")) {
return
}
go ginutil.RegisterController("/cloud/monitor", ginutil.POST, CloudMonitor)
go ginutil.RegisterController("/cloud/monitor", ginutil.GET, CloudMonitor)
}
/**
* 注册服务到注册中心
*/
func RegistraCloud() {
if !(hasSection("CloudCenter")) {
return
}
cloudCenterSite := readConfigKey("CloudCenter", "Site", "")
cloudCenterUser := readConfigKey("CloudCenter", "User", "")
cloudCenterPassword := readConfigKey("CloudCenter", "Password", "")
DomainName := readConfigKey("System", "DomainName", "")
DomainPort := readConfigKey("System", "DomainPort", "")
Port := readConfigKey("System", "Port", "8080")
Name := readConfigKey("System", "Name", "")
var json strings.Builder
json.WriteString("{\"sSign\":\"")
json.WriteString(Name)
json.WriteString("Server\",\"serverPort\":\"")
json.WriteString(Port)
json.WriteString("\",\"serverIp\":\"unknown\",\"domainName\":\"")
json.WriteString(DomainName)
json.WriteString("\",\"domainPort\":\"")
json.WriteString(DomainPort)
json.WriteString("\"}")
var host strings.Builder
host.WriteString("http://")
host.WriteString(cloudCenterSite)
host.WriteString("/add")
params := map[string]interface{}{
"user": cloudCenterUser,
"key": cloudCenterPassword,
"sSign": Name + "Server",
"sRegisterTxt": url.QueryEscape(json.String()),
}
urlStr := strings.Replace(host.String(), "http://http://", "http://", 1)
appCfg = nil //释放
for {
me := httputil.DoGet(urlStr, params, nil)
if me.Gsuccess {
//fmt.Println("注册服务成功")
Log.Info("注册服务成功")
return
}
Log.Error("注册服务失败,返回内容:", me)
time.Sleep(time.Second * 5) //休眠5秒
}
}
// #region @Api {title=中心监听接口}
// @return {type=json explainType=MsgEmity<string> explain=返回响应}
// @RequestMapping {name=ServerIp type=GET value=/cloud/monitor}
// #endregion
func CloudMonitor(ctx ginutil.Context) interface{} {
return emity.MsgEmity{}.Success(time.Now().Format("2006-01-02 15:04:05"), "访问成功")
}
// 判断配置组是否存在
func hasSection(sectionName string) bool {
if !iniCfg() {
return false
}
section, _ := appCfg.GetSection(sectionName) // return appCfg.HasSection(sectionName)//这种方式不安全
if section == nil {
return false
}
if len(section.Keys()) == 0 {
return false
}
return true
}
// 初始化配置文件变量
func iniCfg() bool {
if nil != appCfg {
return true
}
root := ""
exePath, err := os.Executable()
if err != nil {
root = "."
}
root, _ = filepath.EvalSymlinks(filepath.Dir(exePath))
configFilePath := strings.Replace(root+"/config/app.ini", "\\", "/", -1)
_, err = os.Stat(configFilePath) //os.Stat获取文件信息
if err != nil {
if !os.IsExist(err) {
Log.Error("配置文件不存在", err)
return false
}
}
appCfg, err = ini.Load(configFilePath)
if err != nil {
Log.Error("配置文件读取错误", err)
return false
}
return true
}
// 读取配置值
func readConfigKey(section, key, def string) string {
title := appCfg.Section(section)
value, _ := title.GetKey(key)
if value == nil {
return def
}
return value.String()
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。