mirror of
https://github.com/fankes/komari-agent.git
synced 2025-10-19 02:59:23 +08:00
feat: ping错误时不再上传数据
This commit is contained in:
@@ -103,23 +103,23 @@ func icmpPing(target string, timeout time.Duration) (int64, error) {
|
|||||||
// 先解析 IP 地址
|
// 先解析 IP 地址
|
||||||
ip, err := resolveIP(target)
|
ip, err := resolveIP(target)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, err
|
return -1, err
|
||||||
}
|
}
|
||||||
|
|
||||||
pinger, err := ping.NewPinger(ip)
|
pinger, err := ping.NewPinger(ip)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, err
|
return -1, err
|
||||||
}
|
}
|
||||||
pinger.Count = 1
|
pinger.Count = 1
|
||||||
pinger.Timeout = timeout
|
pinger.Timeout = timeout
|
||||||
pinger.SetPrivileged(true)
|
pinger.SetPrivileged(true)
|
||||||
err = pinger.Run()
|
err = pinger.Run()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, err
|
return -1, err
|
||||||
}
|
}
|
||||||
stats := pinger.Statistics()
|
stats := pinger.Statistics()
|
||||||
if stats.PacketsRecv == 0 {
|
if stats.PacketsRecv == 0 {
|
||||||
return 0, errors.New("no packets received")
|
return -1, errors.New("no packets received")
|
||||||
}
|
}
|
||||||
return stats.AvgRtt.Milliseconds(), nil
|
return stats.AvgRtt.Milliseconds(), nil
|
||||||
}
|
}
|
||||||
@@ -128,7 +128,7 @@ func tcpPing(target string, timeout time.Duration) (int64, error) {
|
|||||||
addr := strings.Split(target, ":")
|
addr := strings.Split(target, ":")
|
||||||
ip, err := resolveIP(addr[0])
|
ip, err := resolveIP(addr[0])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, err
|
return -1, err
|
||||||
}
|
}
|
||||||
|
|
||||||
port := "80"
|
port := "80"
|
||||||
@@ -139,7 +139,7 @@ func tcpPing(target string, timeout time.Duration) (int64, error) {
|
|||||||
start := time.Now()
|
start := time.Now()
|
||||||
conn, err := net.DialTimeout("tcp", targetAddr, timeout)
|
conn, err := net.DialTimeout("tcp", targetAddr, timeout)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, err
|
return -1, err
|
||||||
}
|
}
|
||||||
defer conn.Close()
|
defer conn.Close()
|
||||||
return time.Since(start).Milliseconds(), nil
|
return time.Since(start).Milliseconds(), nil
|
||||||
@@ -171,7 +171,7 @@ func httpPing(target string, timeout time.Duration) (int64, error) {
|
|||||||
resp, err := client.Get(target)
|
resp, err := client.Get(target)
|
||||||
latency := time.Since(start).Milliseconds()
|
latency := time.Since(start).Milliseconds()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, err
|
return -1, err
|
||||||
}
|
}
|
||||||
defer resp.Body.Close()
|
defer resp.Body.Close()
|
||||||
if resp.StatusCode >= 200 && resp.StatusCode < 400 {
|
if resp.StatusCode >= 200 && resp.StatusCode < 400 {
|
||||||
@@ -185,27 +185,31 @@ func NewPingTask(conn *ws.SafeConn, taskID uint, pingType, pingTarget string) {
|
|||||||
log.Printf("Invalid task ID: %d", taskID)
|
log.Printf("Invalid task ID: %d", taskID)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
var err error = nil
|
||||||
pingResult := 0
|
var latency int64
|
||||||
|
pingResult := -1
|
||||||
timeout := 3 * time.Second // 默认超时时间
|
timeout := 3 * time.Second // 默认超时时间
|
||||||
switch pingType {
|
switch pingType {
|
||||||
case "icmp":
|
case "icmp":
|
||||||
if latency, err := icmpPing(pingTarget, timeout); err == nil {
|
if latency, err = icmpPing(pingTarget, timeout); err == nil {
|
||||||
pingResult = int(latency)
|
pingResult = int(latency)
|
||||||
}
|
}
|
||||||
case "tcp":
|
case "tcp":
|
||||||
if latency, err := tcpPing(pingTarget, timeout); err == nil {
|
if latency, err = tcpPing(pingTarget, timeout); err == nil {
|
||||||
pingResult = int(latency)
|
pingResult = int(latency)
|
||||||
}
|
}
|
||||||
case "http":
|
case "http":
|
||||||
if latency, err := httpPing(pingTarget, timeout); err == nil {
|
if latency, err = httpPing(pingTarget, timeout); err == nil {
|
||||||
pingResult = int(latency)
|
pingResult = int(latency)
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
log.Printf("Unsupported ping type: %s", pingType)
|
log.Printf("Unsupported ping type: %s", pingType)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Ping task %d failed: %v", taskID, err)
|
||||||
|
pingResult = -1 // 如果有错误,设置结果为 -1
|
||||||
|
}
|
||||||
payload := map[string]interface{}{
|
payload := map[string]interface{}{
|
||||||
"type": "ping_result",
|
"type": "ping_result",
|
||||||
"task_id": taskID,
|
"task_id": taskID,
|
||||||
@@ -213,6 +217,9 @@ func NewPingTask(conn *ws.SafeConn, taskID uint, pingType, pingTarget string) {
|
|||||||
"value": pingResult,
|
"value": pingResult,
|
||||||
"finished_at": time.Now(),
|
"finished_at": time.Now(),
|
||||||
}
|
}
|
||||||
|
if pingResult == -1 {
|
||||||
|
return
|
||||||
|
}
|
||||||
if err := conn.WriteJSON(payload); err != nil {
|
if err := conn.WriteJSON(payload); err != nil {
|
||||||
log.Printf("Failed to write JSON to WebSocket: %v", err)
|
log.Printf("Failed to write JSON to WebSocket: %v", err)
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user