|
@@ -6,12 +6,12 @@ import (
|
|
|
"github.com/gogf/gf/v2/os/glog"
|
|
|
"github.com/robfig/cron"
|
|
|
"golang.org/x/crypto/ssh"
|
|
|
+ "golang.org/x/crypto/ssh/knownhosts"
|
|
|
"golang.org/x/net/context"
|
|
|
"net"
|
|
|
"nodeMonitor/internal/model"
|
|
|
"nodeMonitor/internal/service"
|
|
|
"nodeMonitor/internal/telegram"
|
|
|
- "nodeMonitor/internal/websocket"
|
|
|
"nodeMonitor/library/nettools"
|
|
|
"sync"
|
|
|
"time"
|
|
@@ -138,13 +138,16 @@ func CheckNodeStatus(ctx context.Context, nextTime time.Time) {
|
|
|
}
|
|
|
for _, target := range nodeList {
|
|
|
//获取不通的IP进程url请求
|
|
|
+ glog.Info(ctx, "获取不通的IP进程url请求")
|
|
|
+
|
|
|
status, err := service.Ping().GetStatus(ctx, target.Id)
|
|
|
if err != nil {
|
|
|
glog.Error(ctx, err.Error())
|
|
|
return
|
|
|
}
|
|
|
if status {
|
|
|
-
|
|
|
+ glog.Info(ctx, "查询到15分钟的数据")
|
|
|
+ service.TaskLog().Create(ctx, "task_url", "查询到15分钟的数据")
|
|
|
node, err := service.Node().GetNodeUrlCount(ctx, target.Id)
|
|
|
if err != nil {
|
|
|
glog.Error(ctx, err.Error())
|
|
@@ -155,49 +158,33 @@ func CheckNodeStatus(ctx context.Context, nextTime time.Time) {
|
|
|
urlcount := node.UrlCount
|
|
|
urlret := ""
|
|
|
ipstatus := 0
|
|
|
- glog.Error(ctx, "start url req .....")
|
|
|
+ glog.Info(ctx, "start url req .....")
|
|
|
s := fmt.Sprintf("url_log ---- 开始请求%s\n", target.Url)
|
|
|
- websocket.SendToAll(&websocket.WResponse{
|
|
|
- Event: "sys_log",
|
|
|
- Data: g.Map{
|
|
|
- "msg": s,
|
|
|
- },
|
|
|
- })
|
|
|
+ glog.Info(ctx, s)
|
|
|
+ service.TaskLog().Create(ctx, "task_url", s)
|
|
|
client := g.Client()
|
|
|
client.SetTimeout(30 * time.Second)
|
|
|
r, err := client.Get(ctx, target.Url)
|
|
|
if err != nil {
|
|
|
s := fmt.Sprintf("url_log ---- 请求错误%s\n", err.Error())
|
|
|
- websocket.SendToAll(&websocket.WResponse{
|
|
|
- Event: "sys_log",
|
|
|
- Data: g.Map{
|
|
|
- "msg": s,
|
|
|
- },
|
|
|
- })
|
|
|
+ service.TaskLog().Create(ctx, "task_url", s)
|
|
|
+ glog.Info(ctx, s)
|
|
|
glog.Error(ctx, err.Error())
|
|
|
return
|
|
|
}
|
|
|
defer r.Close()
|
|
|
+ service.TaskLog().Create(ctx, "task_url", fmt.Sprintf("%s --- %s\n", target.Url, r.Status))
|
|
|
glog.Info(ctx, "req :", target.Url, "status :", r.Status)
|
|
|
//如果成功是放回IP,如果不成功是返回空
|
|
|
if r.StatusCode == 200 {
|
|
|
urlret = r.ReadAllString()
|
|
|
s := fmt.Sprintf("url_log ---- url结果和状态%s --- %d\n", urlret, r.StatusCode)
|
|
|
- websocket.SendToAll(&websocket.WResponse{
|
|
|
- Event: "sys_log",
|
|
|
- Data: g.Map{
|
|
|
- "msg": s,
|
|
|
- },
|
|
|
- })
|
|
|
+ service.TaskLog().Create(ctx, "task_url", s)
|
|
|
}
|
|
|
urlcount++
|
|
|
s = fmt.Sprintf("url_log --- url执行次数%d\n", urlcount)
|
|
|
- websocket.SendToAll(&websocket.WResponse{
|
|
|
- Event: "sys_log",
|
|
|
- Data: g.Map{
|
|
|
- "msg": s,
|
|
|
- },
|
|
|
- })
|
|
|
+ glog.Info(ctx, s)
|
|
|
+ service.TaskLog().Create(ctx, "task_url", s)
|
|
|
err = service.Node().UPdateNodeUrlCount(ctx, target.Id, urlcount, urlret, ipstatus)
|
|
|
if err != nil {
|
|
|
glog.Error(ctx, err.Error())
|
|
@@ -206,23 +193,16 @@ func CheckNodeStatus(ctx context.Context, nextTime time.Time) {
|
|
|
} else {
|
|
|
if target.IsNotice == 1 {
|
|
|
|
|
|
- s := fmt.Sprintf("telegram_log --- %s 节点需要更新换IP,立即执行\n", target.Host)
|
|
|
- websocket.SendToAll(&websocket.WResponse{
|
|
|
- Event: "sys_log",
|
|
|
- Data: g.Map{
|
|
|
- "msg": s,
|
|
|
- },
|
|
|
- })
|
|
|
- err := telegram.SetTelegramMess(ctx, s)
|
|
|
+ s := fmt.Sprintf("telegram_log --- %s 节点需要更新换IP,立即执行\n", target.Name)
|
|
|
+ glog.Info(ctx, s)
|
|
|
+ service.TaskLog().Create(ctx, "telegram_log", s)
|
|
|
+ not := fmt.Sprintf(" @new_pumpcloud %s 节点需要更新换IP,请帮我立即更换,谢谢!\n", target.Name)
|
|
|
+ service.TaskLog().Create(ctx, "telegram_log", s)
|
|
|
+ err := telegram.SetTelegramMess(ctx, not)
|
|
|
if err != nil {
|
|
|
glog.Error(ctx, err.Error())
|
|
|
s := fmt.Sprintf("telegram_log --- 电报发送: %s", err.Error())
|
|
|
- websocket.SendToAll(&websocket.WResponse{
|
|
|
- Event: "sys_log",
|
|
|
- Data: g.Map{
|
|
|
- "msg": s,
|
|
|
- },
|
|
|
- })
|
|
|
+ service.TaskLog().Create(ctx, "telegram_log", s)
|
|
|
return
|
|
|
}
|
|
|
}
|
|
@@ -245,32 +225,26 @@ func SSHTaskCommand(ctx context.Context, host string, port int, serverid int) {
|
|
|
|
|
|
if nodeconfig.Sshcommand == "" && nodeconfig.Sshpassword == "" && nodeconfig.Sshusername == "" {
|
|
|
glog.Info(ctx, "服务器命令账号密码为空")
|
|
|
- websocket.SendToAll(&websocket.WResponse{
|
|
|
- Event: "sys_log",
|
|
|
- Data: g.Map{
|
|
|
- "msg": "ssh_log --- 服务器命令账号密码为空",
|
|
|
- },
|
|
|
- })
|
|
|
+ service.TaskLog().Create(ctx, "task_ssh", "服务器命令账号密码为空")
|
|
|
return
|
|
|
}
|
|
|
-
|
|
|
+ hostKeyCallback, err := knownhosts.New("~/.ssh/known_hosts")
|
|
|
+ if err != nil {
|
|
|
+ glog.Error(ctx, err.Error())
|
|
|
+ }
|
|
|
s2 := fmt.Sprintf("%s:%d\n", host, port)
|
|
|
+ service.TaskLog().Create(ctx, "task_ssh", s2)
|
|
|
// 建立SSH客户端连接
|
|
|
client, err := ssh.Dial("tcp", s2, &ssh.ClientConfig{
|
|
|
User: nodeconfig.Sshusername,
|
|
|
Auth: []ssh.AuthMethod{ssh.Password(nodeconfig.Sshpassword)},
|
|
|
- HostKeyCallback: ssh.InsecureIgnoreHostKey(),
|
|
|
+ HostKeyCallback: hostKeyCallback,
|
|
|
})
|
|
|
if err != nil {
|
|
|
//log.Fatalf("SSH dial error: %s", err.Error())
|
|
|
s := fmt.Sprintf("ssh_log --- SSH dial error: %s", err.Error())
|
|
|
- websocket.SendToAll(&websocket.WResponse{
|
|
|
- Event: "sys_log",
|
|
|
- Data: g.Map{
|
|
|
- "msg": s,
|
|
|
- },
|
|
|
- })
|
|
|
- glog.Error(ctx, "SSH dial error:", err.Error())
|
|
|
+ service.TaskLog().Create(ctx, "task_ssh", s)
|
|
|
+ glog.Info(ctx, "SSH dial error:", err.Error())
|
|
|
return
|
|
|
}
|
|
|
// 建立新会话
|
|
@@ -278,35 +252,28 @@ func SSHTaskCommand(ctx context.Context, host string, port int, serverid int) {
|
|
|
defer session.Close()
|
|
|
if err != nil {
|
|
|
s := fmt.Sprintf("ssh_log --- new session error: %s", err.Error())
|
|
|
- websocket.SendToAll(&websocket.WResponse{
|
|
|
- Event: "sys_log",
|
|
|
- Data: g.Map{
|
|
|
- "msg": s,
|
|
|
- },
|
|
|
- })
|
|
|
- glog.Error(ctx, "new session error:", err.Error())
|
|
|
+ service.TaskLog().Create(ctx, "task_ssh", s)
|
|
|
+ //websocket.SendToAll(&websocket.WResponse{
|
|
|
+ // Event: "sys_log",
|
|
|
+ // Data: g.Map{
|
|
|
+ // "msg": s,
|
|
|
+ // },
|
|
|
+ //})
|
|
|
+ glog.Info(ctx, "new session error:", err.Error())
|
|
|
return
|
|
|
}
|
|
|
|
|
|
s := fmt.Sprintf("ssh_log --- 执行命令 %s", nodeconfig.Sshcommand)
|
|
|
- websocket.SendToAll(&websocket.WResponse{
|
|
|
- Event: "sys_log",
|
|
|
- Data: g.Map{
|
|
|
- "msg": s,
|
|
|
- },
|
|
|
- })
|
|
|
+ glog.Info(ctx, "ssh_log --- 执行命令:", s)
|
|
|
+ service.TaskLog().Create(ctx, "task_ssh", s)
|
|
|
result, err := session.Output(nodeconfig.Sshcommand)
|
|
|
if err != nil {
|
|
|
- glog.Error(ctx, err.Error())
|
|
|
+ glog.Info(ctx, err.Error())
|
|
|
return
|
|
|
}
|
|
|
s = fmt.Sprintf("ssh_log ---- 执行命令结果 %s", string(result))
|
|
|
- websocket.SendToAll(&websocket.WResponse{
|
|
|
- Event: "sys_log",
|
|
|
- Data: g.Map{
|
|
|
- "msg": s,
|
|
|
- },
|
|
|
- })
|
|
|
+ glog.Info(ctx, s)
|
|
|
+ service.TaskLog().Create(ctx, "task_ssh", s)
|
|
|
glog.Info(ctx, result)
|
|
|
}
|
|
|
|
|
@@ -323,4 +290,5 @@ func GetCronNextTime(cronStr string, t time.Time) (nextTime time.Time, err error
|
|
|
func ClearLog(ctx context.Context) {
|
|
|
service.Ping().ClearLog(ctx)
|
|
|
service.Node().UpdateAllNodeMs(ctx)
|
|
|
+ service.TaskLog().ClearTasLog(ctx)
|
|
|
}
|