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