mirror of
https://github.com/gotoeasy/glogcenter.git
synced 2025-09-15 12:58:34 +08:00
130 lines
3.5 KiB
Go
130 lines
3.5 KiB
Go
package controller
|
|
|
|
import (
|
|
"glc/com"
|
|
"glc/conf"
|
|
"glc/gweb"
|
|
"glc/www/cluster"
|
|
"glc/www/service"
|
|
"io"
|
|
"net/http"
|
|
"strings"
|
|
|
|
"github.com/gotoeasy/glang/cmn"
|
|
)
|
|
|
|
// 从本节点取集群信息
|
|
func ClusterGetClusterInfoController(req *gweb.HttpRequest) *gweb.HttpResult {
|
|
if conf.IsEnableSecurityKey() && req.GetHeader(conf.GetHeaderSecurityKey()) != conf.GetSecurityKey() {
|
|
return gweb.Error(403, "未经授权的访问,拒绝服务")
|
|
}
|
|
|
|
kv, err := service.GetSysmntItem(cluster.KEY_CLUSTER)
|
|
if kv == nil || err != nil {
|
|
return gweb.Error500("没找到集群信息 " + err.Error())
|
|
}
|
|
|
|
return gweb.Result(kv.ToJson())
|
|
}
|
|
|
|
// 作为Master接收保存集群信息
|
|
func ClusterMasterSaveKvDataController(req *gweb.HttpRequest) *gweb.HttpResult {
|
|
if conf.IsEnableSecurityKey() && req.GetHeader(conf.GetHeaderSecurityKey()) != conf.GetSecurityKey() {
|
|
return gweb.Error(403, "未经授权的访问,拒绝服务")
|
|
}
|
|
|
|
// 参数
|
|
pkv := &service.KeyValue{}
|
|
err := req.BindJSON(pkv)
|
|
if err != nil || pkv.Key == "" {
|
|
cmn.Error("请求参数有误", err)
|
|
return gweb.Error500(err.Error())
|
|
}
|
|
|
|
// 保存
|
|
dkv, err := service.SetSysmntItem(pkv)
|
|
if err != nil {
|
|
cmn.Error(err)
|
|
return gweb.Error500(err.Error())
|
|
}
|
|
|
|
// 转发
|
|
cl := &cluster.ClusterInfo{}
|
|
cl.LoadJson(dkv.Value)
|
|
urls := cmn.Split(cl.NodeUrls, ";")
|
|
jsonstr := dkv.ToJson()
|
|
for i := 0; i < len(urls); i++ {
|
|
if urls[i] != com.GetLocalGlcUrl() {
|
|
go httpClusterAsyncData(urls[i], jsonstr) // 异步转发其他节点保存,暂且忽略失败
|
|
}
|
|
}
|
|
|
|
return gweb.Result(dkv.ToJson())
|
|
}
|
|
|
|
// 接收其他节点发来的同步信息
|
|
func ClusterMasterAsyncDataController(req *gweb.HttpRequest) *gweb.HttpResult {
|
|
cmn.Info("接收其他节点发来的同步信息")
|
|
if conf.IsEnableSecurityKey() && req.GetHeader(conf.GetHeaderSecurityKey()) != conf.GetSecurityKey() {
|
|
cmn.Info("接收其他节点发来的同步信息", 403, "未经授权的访问")
|
|
return gweb.Error(403, "未经授权的访问,拒绝服务")
|
|
}
|
|
|
|
pkv := &service.KeyValue{}
|
|
err := req.BindJSON(pkv)
|
|
if err != nil || pkv.Key == "" {
|
|
cmn.Error("接收其他节点发来的同步信息", "请求参数有误", err)
|
|
return gweb.Error500("请求参数有误" + err.Error())
|
|
}
|
|
|
|
dkv, err := service.SetSysmntItem(pkv)
|
|
if err != nil {
|
|
cmn.Error("接收其他节点发来的同步信息", "保存失败", err)
|
|
} else {
|
|
cmn.Info("接收其他节点发来的同步信息", dkv.ToJson())
|
|
}
|
|
return gweb.Result(dkv.ToJson())
|
|
}
|
|
|
|
func httpClusterAsyncData(serverUrl string, kvJson string) *service.KeyValue {
|
|
|
|
// 请求
|
|
req, err := http.NewRequest("POST", serverUrl+conf.GetContextPath()+"/sys/cluster/async", strings.NewReader(kvJson))
|
|
if err != nil {
|
|
cmn.Error("异步发送集群信息到", serverUrl, "失败1", err)
|
|
return nil
|
|
}
|
|
|
|
// 请求头
|
|
req.Header.Set("Content-Type", "application/json;charset=UTF-8")
|
|
req.Header.Set(conf.GetHeaderSecurityKey(), conf.GetSecurityKey())
|
|
|
|
// 读取响应内容
|
|
client := http.Client{}
|
|
res, err := client.Do(req)
|
|
if err != nil {
|
|
cmn.Error("异步发送集群信息到", serverUrl, "失败2", err)
|
|
return nil
|
|
}
|
|
defer res.Body.Close()
|
|
|
|
by, err := io.ReadAll(res.Body)
|
|
if err != nil {
|
|
cmn.Error("异步发送集群信息到", serverUrl, "失败3", err)
|
|
return nil
|
|
}
|
|
|
|
rs := &gweb.HttpResult{}
|
|
rs.LoadBytes(by)
|
|
if !rs.Success {
|
|
cmn.Error("异步发送集群信息到", serverUrl, "失败4", rs.Message)
|
|
return nil
|
|
}
|
|
|
|
cmn.Info("异步发送集群信息到", serverUrl, "成功")
|
|
|
|
kv := &service.KeyValue{}
|
|
kv.LoadJson(rs.Result.(string))
|
|
return kv
|
|
}
|