105 lines
2.4 KiB
Go
105 lines
2.4 KiB
Go
/************************************************************
|
||
** @Description: notify
|
||
** @Author: george hao
|
||
** @Date: 2019-06-26 15:17
|
||
** @Last Modified by: george hao
|
||
** @Last Modified time: 2019-06-26 15:17
|
||
*************************************************************/
|
||
package server
|
||
|
||
import (
|
||
"encoding/json"
|
||
"fmt"
|
||
"github.com/george518/PPGo_Job/libs"
|
||
"strconv"
|
||
)
|
||
|
||
//启动时注册
|
||
func Register() error {
|
||
//获取本机ip以及端口 todo ip合法性判断
|
||
if C.TcpIp == "auto" {
|
||
tcpIp := libs.GetHostIp(C.IpType)
|
||
if tcpIp == "" {
|
||
return fmt.Errorf("无法获取本机IP,请手工在配置文件里设置")
|
||
}
|
||
SaveConfig("TcpIp", tcpIp)
|
||
}
|
||
param := make(map[string]string, 0)
|
||
if C.ServerName == "auto" {
|
||
serverName := "agent-" + C.TcpIp + "-" + strconv.Itoa(C.TcpPort)
|
||
SaveConfig("ServerName", serverName)
|
||
}
|
||
|
||
param["server_ip"] = C.TcpIp
|
||
param["port"] = strconv.Itoa(C.TcpPort)
|
||
param["server_name"] = C.ServerName
|
||
param["detail"] = "自动注册执行器"
|
||
param["connection_type"] = "2"
|
||
param["group_id"] = C.GroupId
|
||
|
||
if C.RegisterUrl == "" {
|
||
return fmt.Errorf("自动注册地址配置错误")
|
||
}
|
||
body, err := libs.HttpGet(C.RegisterUrl, param)
|
||
if err != nil {
|
||
return err
|
||
}
|
||
|
||
m := make(map[string]interface{})
|
||
err = json.Unmarshal([]byte(body), &m)
|
||
if err != nil {
|
||
return err
|
||
}
|
||
|
||
if _, ok := m["status"]; ok {
|
||
if m["status"] == float64(0) {
|
||
//回写serverId
|
||
serverId := int(m["message"].(float64))
|
||
SaveConfig("ServerId", strconv.Itoa(serverId))
|
||
return nil
|
||
} else {
|
||
return fmt.Errorf("自动注册失败:%v", m["message"])
|
||
}
|
||
}
|
||
|
||
return fmt.Errorf("自动注册失败")
|
||
}
|
||
|
||
//程序异常退出的通知
|
||
func Close() error {
|
||
|
||
param := make(map[string]string, 0)
|
||
param["server_ip"] = C.TcpIp
|
||
param["port"] = strconv.Itoa(C.TcpPort)
|
||
param["status"] = "1"
|
||
|
||
if C.UpdateStatusUrl == "" {
|
||
return fmt.Errorf("执行器退出通知异常,请到系统中修改状态")
|
||
}
|
||
body, err := libs.HttpGet(C.UpdateStatusUrl, param)
|
||
if err != nil {
|
||
return err
|
||
}
|
||
|
||
m := make(map[string]interface{})
|
||
err = json.Unmarshal([]byte(body), &m)
|
||
if err != nil {
|
||
return err
|
||
}
|
||
|
||
if _, ok := m["status"]; ok {
|
||
if m["status"] == float64(0) {
|
||
return nil
|
||
} else {
|
||
return fmt.Errorf("执行器退出通知异常:%v", m["message"])
|
||
}
|
||
}
|
||
|
||
return fmt.Errorf("执行器退出通知异常:未知原因")
|
||
}
|
||
|
||
//心跳机制
|
||
func Heartbeat() error {
|
||
return nil
|
||
}
|