mirror of
https://github.com/TeaOSLab/EdgeNode.git
synced 2025-11-03 15:00:26 +08:00
在edge-node conns命令中显示连接时长
This commit is contained in:
10
internal/conns/info.go
Normal file
10
internal/conns/info.go
Normal file
@@ -0,0 +1,10 @@
|
||||
// Copyright 2022 Liuxiangchao iwind.liu@gmail.com. All rights reserved. Official site: https://goedge.cn .
|
||||
|
||||
package conns
|
||||
|
||||
import "net"
|
||||
|
||||
type ConnInfo struct {
|
||||
Conn net.Conn
|
||||
CreatedAt int64
|
||||
}
|
||||
@@ -5,19 +5,20 @@ package conns
|
||||
import (
|
||||
"net"
|
||||
"sync"
|
||||
"time"
|
||||
)
|
||||
|
||||
var SharedMap = NewMap()
|
||||
|
||||
type Map struct {
|
||||
m map[string]map[int]net.Conn // ip => { port => Conn }
|
||||
m map[string]map[int]*ConnInfo // ip => { port => ConnInfo }
|
||||
|
||||
locker sync.RWMutex
|
||||
}
|
||||
|
||||
func NewMap() *Map {
|
||||
return &Map{
|
||||
m: map[string]map[int]net.Conn{},
|
||||
m: map[string]map[int]*ConnInfo{},
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,15 +34,20 @@ func (this *Map) Add(conn net.Conn) {
|
||||
var ip = tcpAddr.IP.String()
|
||||
var port = tcpAddr.Port
|
||||
|
||||
var connInfo = &ConnInfo{
|
||||
Conn: conn,
|
||||
CreatedAt: time.Now().Unix(),
|
||||
}
|
||||
|
||||
this.locker.Lock()
|
||||
defer this.locker.Unlock()
|
||||
connMap, ok := this.m[ip]
|
||||
if !ok {
|
||||
this.m[ip] = map[int]net.Conn{
|
||||
port: conn,
|
||||
this.m[ip] = map[int]*ConnInfo{
|
||||
port: connInfo,
|
||||
}
|
||||
} else {
|
||||
connMap[port] = conn
|
||||
connMap[port] = connInfo
|
||||
}
|
||||
}
|
||||
|
||||
@@ -86,8 +92,8 @@ func (this *Map) CloseIPConns(ip string) {
|
||||
|
||||
// 复制,防止在Close时产生并发冲突
|
||||
if ok {
|
||||
for _, conn := range connMap {
|
||||
conns = append(conns, conn)
|
||||
for _, connInfo := range connMap {
|
||||
conns = append(conns, connInfo.Conn)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -103,14 +109,14 @@ func (this *Map) CloseIPConns(ip string) {
|
||||
}
|
||||
}
|
||||
|
||||
func (this *Map) AllConns() []net.Conn {
|
||||
func (this *Map) AllConns() []*ConnInfo {
|
||||
this.locker.RLock()
|
||||
defer this.locker.RUnlock()
|
||||
|
||||
var result = []net.Conn{}
|
||||
var result = []*ConnInfo{}
|
||||
for _, m := range this.m {
|
||||
for _, conn := range m {
|
||||
result = append(result, conn)
|
||||
for _, connInfo := range m {
|
||||
result = append(result, connInfo)
|
||||
}
|
||||
}
|
||||
return result
|
||||
|
||||
@@ -879,16 +879,19 @@ func (this *Node) listenSock() error {
|
||||
},
|
||||
})
|
||||
case "conns":
|
||||
var addrs = []string{}
|
||||
var connMaps = []maps.Map{}
|
||||
var connMap = conns.SharedMap.AllConns()
|
||||
for _, conn := range connMap {
|
||||
addrs = append(addrs, conn.RemoteAddr().String())
|
||||
for _, connInfo := range connMap {
|
||||
connMaps = append(connMaps, maps.Map{
|
||||
"addr": connInfo.Conn.RemoteAddr().String(),
|
||||
"age": time.Now().Unix() - connInfo.CreatedAt,
|
||||
})
|
||||
}
|
||||
|
||||
_ = cmd.Reply(&gosock.Command{
|
||||
Params: map[string]interface{}{
|
||||
"addrs": addrs,
|
||||
"total": len(addrs),
|
||||
"conns": connMaps,
|
||||
"total": len(connMaps),
|
||||
},
|
||||
})
|
||||
case "dropIP":
|
||||
|
||||
Reference in New Issue
Block a user