|
@@ -4,11 +4,11 @@ import (
|
|
|
"fmt"
|
|
|
"github.com/gogf/gf/v2/frame/g"
|
|
|
"github.com/gogf/gf/v2/os/glog"
|
|
|
+ "github.com/robfig/cron"
|
|
|
"golang.org/x/crypto/ssh"
|
|
|
"golang.org/x/net/context"
|
|
|
"net"
|
|
|
"nodeMonitor/internal/model"
|
|
|
- "nodeMonitor/internal/model/entity"
|
|
|
"nodeMonitor/internal/service"
|
|
|
"nodeMonitor/library/nettools"
|
|
|
"sync"
|
|
@@ -34,18 +34,8 @@ func Ping(ctx context.Context) {
|
|
|
//go PingStatus(ctx)
|
|
|
}
|
|
|
|
|
|
-func PingStatus(ctx context.Context) {
|
|
|
- var wg sync.WaitGroup
|
|
|
- nodeList, err := service.Node().GetNode(ctx)
|
|
|
- if err != nil {
|
|
|
- glog.Debug(ctx, err.Error())
|
|
|
- return
|
|
|
- }
|
|
|
- for _, target := range nodeList {
|
|
|
- wg.Add(1)
|
|
|
- go CheckNodeStatus(ctx, target, &wg)
|
|
|
- }
|
|
|
- wg.Wait()
|
|
|
+func PingStatus(ctx context.Context, nextTime time.Time) {
|
|
|
+ CheckNodeStatus(ctx, nextTime)
|
|
|
}
|
|
|
|
|
|
func PingTask(ctx context.Context, t string, wg *sync.WaitGroup, pingType int, hostPort int, serverid int) {
|
|
@@ -137,66 +127,55 @@ func AddPingLog(ctx context.Context, pingres model.PingSt, addr string, serverid
|
|
|
return
|
|
|
}
|
|
|
|
|
|
-func CheckNodeStatus(ctx context.Context, target *entity.Node, wg *sync.WaitGroup) {
|
|
|
-
|
|
|
- //获取不通的IP进程url请求
|
|
|
- status, err := service.Ping().GetStatus(ctx, target.Id)
|
|
|
+func CheckNodeStatus(ctx context.Context, nextTime time.Time) {
|
|
|
+ glog.Info(ctx, nextTime)
|
|
|
+ nodeList, err := service.Node().GetNode(ctx)
|
|
|
if err != nil {
|
|
|
- glog.Error(ctx, err.Error())
|
|
|
+ glog.Debug(ctx, err.Error())
|
|
|
return
|
|
|
}
|
|
|
- if status {
|
|
|
-
|
|
|
- node, err := service.Node().GetNodeUrlCount(ctx, target.Id)
|
|
|
- if err != nil {
|
|
|
- glog.Debug(ctx, err.Error())
|
|
|
- return
|
|
|
- }
|
|
|
- //var ping_rest nettools.IPingResult
|
|
|
- urlcount := node.UrlCount
|
|
|
- urlret := ""
|
|
|
- ipstatus := 0
|
|
|
- glog.Debug(ctx, "start url req .....")
|
|
|
- client := g.Client()
|
|
|
- client.SetTimeout(30 * time.Second)
|
|
|
- r, err := client.Get(ctx, target.Url)
|
|
|
+ for _, target := range nodeList {
|
|
|
+ //获取不通的IP进程url请求
|
|
|
+ status, err := service.Ping().GetStatus(ctx, target.Id)
|
|
|
if err != nil {
|
|
|
- glog.Debug(ctx, err.Error())
|
|
|
+ glog.Error(ctx, err.Error())
|
|
|
return
|
|
|
}
|
|
|
- defer r.Close()
|
|
|
- glog.Debug(ctx, "req :", target.Url, "status :", r.Status)
|
|
|
- //如果成功是放回IP,如果不成功是返回空
|
|
|
- if r.StatusCode == 200 {
|
|
|
- urlret = r.ReadAllString()
|
|
|
- //for i := 0; i < 20; i++ {
|
|
|
- // if target.PingType == 0 {
|
|
|
- // tcpping := nettools.NewIcmpPing(target.Host, time.Second*4)
|
|
|
- // ping_rest = tcpping.Ping()
|
|
|
- // } else {
|
|
|
- // tcpping := nettools.NewTcpPing(target.Host, target.Port, time.Second*4)
|
|
|
- // ping_rest = tcpping.Ping()
|
|
|
- // }
|
|
|
- //}
|
|
|
- }
|
|
|
+ if status {
|
|
|
|
|
|
- //if ping_rest.Error() == nil {
|
|
|
- // ipstatus = 200
|
|
|
- //} else {
|
|
|
- // ipstatus = 400
|
|
|
- //}
|
|
|
+ node, err := service.Node().GetNodeUrlCount(ctx, target.Id)
|
|
|
+ if err != nil {
|
|
|
+ glog.Debug(ctx, err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ //var ping_rest nettools.IPingResult
|
|
|
+ urlcount := node.UrlCount
|
|
|
+ urlret := ""
|
|
|
+ ipstatus := 0
|
|
|
+ glog.Debug(ctx, "start url req .....")
|
|
|
+ client := g.Client()
|
|
|
+ client.SetTimeout(30 * time.Second)
|
|
|
+ r, err := client.Get(ctx, target.Url)
|
|
|
+ if err != nil {
|
|
|
+ glog.Debug(ctx, err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ defer r.Close()
|
|
|
+ glog.Debug(ctx, "req :", target.Url, "status :", r.Status)
|
|
|
+ //如果成功是放回IP,如果不成功是返回空
|
|
|
+ if r.StatusCode == 200 {
|
|
|
+ urlret = r.ReadAllString()
|
|
|
+ }
|
|
|
+ urlcount++
|
|
|
+ err = service.Node().UPdateNodeUrlCount(ctx, target.Id, urlcount, urlret, ipstatus)
|
|
|
+ if err != nil {
|
|
|
+ glog.Debug(ctx, err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
|
|
|
- urlcount++
|
|
|
- err = service.Node().UPdateNodeUrlCount(ctx, target.Id, urlcount, urlret, ipstatus)
|
|
|
- if err != nil {
|
|
|
- glog.Debug(ctx, err.Error())
|
|
|
- return
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
|
|
|
- wg.Done()
|
|
|
-
|
|
|
}
|
|
|
|
|
|
func SSHTaskCommand(ctx context.Context, host string, port int, serverid int) {
|
|
@@ -238,3 +217,13 @@ func SSHTaskCommand(ctx context.Context, host string, port int, serverid int) {
|
|
|
}
|
|
|
glog.Debug(ctx, result)
|
|
|
}
|
|
|
+
|
|
|
+func GetCronNextTime(cronStr string, t time.Time) (nextTime time.Time, err error) {
|
|
|
+ p := cron.NewParser(cron.Second | cron.Minute | cron.Hour | cron.Dom | cron.Month | cron.Dow)
|
|
|
+ s, err := p.Parse(cronStr)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ nextTime = s.Next(t)
|
|
|
+ return
|
|
|
+}
|