在edge-node conns命令中显示连接时长

This commit is contained in:
GoEdgeLab
2022-12-02 17:03:16 +08:00
parent 1630d65c46
commit 4383ee9297
3 changed files with 35 additions and 16 deletions

View File

@@ -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