package service
|
|
import (
|
"encoding/json"
|
"strings"
|
"vamicro/config"
|
|
"basic.com/valib/bhomeclient.git"
|
"basic.com/valib/bhomedbapi.git"
|
"basic.com/valib/go-aiot.git/aiotProto/aiot"
|
"basic.com/valib/logger.git"
|
"gitee.com/LearingIt/goTypeTrans/trans"
|
)
|
|
const (
|
Token = "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjQ3NDUwMjU5MjMsInVzZXIiOiJ7XCJpZFwiOlwiZTZjY2QzNmQtNGYxNi00NmZjLTg4ZDUtMDczNjU4NjZkMjA1XCIsXCJwZXJtaXNzaW9uc1wiOltcInByb2R1Y3RNYW5nZTpwdWJsaXNoXCIsXCJjb2RlTWFuZ2U6dmlld1wiLFwiZGV2aWNlTWFuYWdlOmFkZFwiLFwiYWRtaW5NYW5hZ2VcIixcIm9yZGVyTWFuZ2VcIixcImRldmljZU1hbmFnZTp2aWV3XCIsXCJwcm9kdWN0TWFuZ2U6YWRkXCIsXCJhZG1pbk1hbmFnZTp2aWV3XCIsXCJjb2RlTWFuZ2U6YWRkXCIsXCJwcm9kdWN0TWFuZ2U6b2ZmU2FsZVwiLFwib3JkZXJNYW5nZTpjYW5jZWxcIixcInByb2R1Y3RDZW50ZXI6ZG93bmxvYWRcIixcInByb2R1Y3RDZW50ZXI6YnV5XCIsXCJwcm9kdWN0TWFuZ2U6dmlld1wiLFwiYXBpXCIsXCJob21lXCIsXCJvcmRlck1hbmdlOnBheVwiLFwiYWRtaW5NYW5hZ2U6YWRkXCIsXCJvcmRlck1hbmdlOmRvd25sb2FkXCIsXCJwcm9kdWN0Q2VudGVyXCIsXCJkZXZpY2VNYW5hZ2U6dW5iaW5kXCIsXCJvcmRlck1hbmdlOnZpZXdcIixcImFkbWluTWFuYWdlOmVkaXRcIixcImRldmljZU1hbmFnZVwiLFwidmlwTWFuYWdlOmFkZFwiLFwidmlwTWFuYWdlOnZpZXdcIixcInByb2R1Y3RDZW50ZXI6dmlld1wiLFwidmlwTWFuYWdlOmVkaXRcIixcInZpcE1hbmFnZVwiLFwicHJvZHVjdE1hbmdlOmVkaXRcIixcImNvZGVNYW5nZVwiLFwicHJvZHVjdE1hbmdlXCJdLFwidXNlcm5hbWVcIjpcImJhc2ljXCJ9In0.vwjAFkWuEyadRLvIOGK8LFE3MjpY3SQ7j6AlTXnQDG8"
|
)
|
|
// string转interface
|
func stringParams2paramsBody(params map[string]string) map[string]interface{} {
|
paramsBody := make(map[string]interface{})
|
for k, v := range params {
|
paramsBody[k] = v
|
}
|
return paramsBody
|
}
|
|
// interface转string
|
func interfaceParams2paramsBody(params map[string]interface{}) map[string]string {
|
paramsBody := make(map[string]string)
|
for k, v := range params {
|
paramsBody[k] = trans.Any2String(v)
|
}
|
return paramsBody
|
}
|
|
// 封装统一请求方法
|
func DoBusReq(topic string, nodeId string, method aiot.RequestMethod, contentType aiot.RequestContentType, params map[string]interface{}) ([]byte, error) {
|
var err error
|
var data []byte
|
logger.Debug("DoBusReq...", topic, nodeId, method, contentType, GetContentTypeString(contentType), params)
|
switch method {
|
case aiot.RequestMethod_Get:
|
// 发送get请求
|
return DoGetToBus(nodeId, topic, interfaceParams2paramsBody(params))
|
case aiot.RequestMethod_Post:
|
// post请求
|
return DoPostToBus(nodeId, topic, GetContentTypeString(contentType), params)
|
case aiot.RequestMethod_Put:
|
// put
|
return DoPutToBus(nodeId, topic, GetContentTypeString(contentType), params)
|
case aiot.RequestMethod_Delete:
|
// delete
|
return DoDeleteToBus(nodeId, topic, GetContentTypeString(contentType), params)
|
}
|
return data, err
|
}
|
|
// 获取节点IP
|
func GetNodeIp(nodeId string) (string, error) {
|
client := bhomedbapi.NewClient(bhomedbapi.WithNodes(nil))
|
params := map[string]interface{}{
|
"node_id": nodeId,
|
}
|
node, err := client.DoPostRequest("/data/api-v/cluster/findIpByNode", bhomedbapi.CONTENT_TYPE_JSON, params, nil, nil)
|
if err != nil {
|
logger.Error("Fail to execute GetNodeIp", err)
|
return "", err
|
}
|
|
var ret bhomeclient.Reply
|
err = json.Unmarshal(node, &ret)
|
if err != nil {
|
return "", err
|
}
|
ip := trans.Any2String(ret.Data)
|
if ip != "" && strings.Index(ip, ":") > 0 {
|
return ip[0:strings.Index(ip, ":")], nil
|
}
|
return ip, nil
|
}
|
|
// bus-get请求
|
func DoGetToBus(nodeId string, url string, params map[string]string) ([]byte, error) {
|
ip, _ := GetNodeIp(nodeId)
|
header := map[string]string{
|
"Authorization": Token,
|
}
|
client := bhomedbapi.NewClient(bhomedbapi.WithIp(ip), bhomedbapi.WithDevId(nodeId), bhomedbapi.WithTopic(url))
|
if client == nil || nodeId != config.Server.AnalyServerId {
|
logger.Warn("client is nil. return from bus to http")
|
client = bhomedbapi.HttpClient{}
|
url = "http://" + ip + ":8888/" + strings.Trim(url, "/")
|
}
|
return client.DoGetRequest(url, params, header)
|
}
|
|
// bus-post请求
|
func DoPostToBus(nodeId string, url string, contentType string, params map[string]interface{}) ([]byte, error) {
|
ip, _ := GetNodeIp(nodeId)
|
header := map[string]string{
|
"Authorization": Token,
|
}
|
client := bhomedbapi.NewClient(bhomedbapi.WithIp(ip), bhomedbapi.WithDevId(nodeId), bhomedbapi.WithTopic(url))
|
if client == nil || nodeId != config.Server.AnalyServerId {
|
logger.Warn("client is nil. return from bus to http")
|
client = bhomedbapi.HttpClient{}
|
url = "http://" + ip + ":8888/" + strings.Trim(url, "/")
|
}
|
return client.DoPostRequest(url, contentType, params, nil, header)
|
}
|
|
// bus-put请求
|
func DoPutToBus(nodeId string, url string, contentType string, params map[string]interface{}) ([]byte, error) {
|
ip, _ := GetNodeIp(nodeId)
|
header := map[string]string{
|
"Authorization": Token,
|
}
|
client := bhomedbapi.NewClient(bhomedbapi.WithIp(ip), bhomedbapi.WithDevId(nodeId), bhomedbapi.WithTopic(url))
|
if client == nil || nodeId != config.Server.AnalyServerId {
|
logger.Warn("client is nil. return from bus to http")
|
client = bhomedbapi.HttpClient{}
|
url = "http://" + ip + ":8888/" + strings.Trim(url, "/")
|
}
|
return client.DoPutRequest(url, contentType, params, header)
|
}
|
|
// bus-delete请求
|
func DoDeleteToBus(nodeId string, url string, contentType string, params map[string]interface{}) ([]byte, error) {
|
ip, _ := GetNodeIp(nodeId)
|
header := map[string]string{
|
"Authorization": Token,
|
}
|
client := bhomedbapi.NewClient(bhomedbapi.WithIp(ip), bhomedbapi.WithDevId(nodeId), bhomedbapi.WithTopic(url))
|
if client == nil || nodeId != config.Server.AnalyServerId {
|
logger.Warn("client is nil. return from bus to http")
|
client = bhomedbapi.HttpClient{}
|
url = "http://" + ip + ":8888/" + strings.Trim(url, "/")
|
}
|
return client.DoDeleteRequest(url, contentType, params, header)
|
}
|