added fields to hold creation time in various structures

This commit is contained in:
hyung-hwan 2025-03-14 22:51:23 +09:00
parent f1f74ed48d
commit 3714138656
3 changed files with 91 additions and 10 deletions

View File

@ -23,6 +23,7 @@ type json_out_server_conn struct {
ServerAddr string `json:"server-addr"` ServerAddr string `json:"server-addr"`
ClientAddr string `json:"client-addr"` ClientAddr string `json:"client-addr"`
ClientToken string `json:"client-token"` ClientToken string `json:"client-token"`
CreatedMilli int64 `json:"created-milli"`
Routes []json_out_server_route `json:"routes"` Routes []json_out_server_route `json:"routes"`
} }
@ -33,6 +34,7 @@ type json_out_server_route struct {
ServerPeerOption string `json:"server-peer-option"` ServerPeerOption string `json:"server-peer-option"`
ServerPeerSvcAddr string `json:"server-peer-svc-addr"` // actual listening address ServerPeerSvcAddr string `json:"server-peer-svc-addr"` // actual listening address
ServerPeerSvcNet string `json:"server-peer-svc-net"` ServerPeerSvcNet string `json:"server-peer-svc-net"`
CreatedMilli int64 `json:"created-milli"`
} }
type json_out_server_peer struct { type json_out_server_peer struct {
@ -41,6 +43,7 @@ type json_out_server_peer struct {
ServerLocalAddr string `json:"server-local-addr"` ServerLocalAddr string `json:"server-local-addr"`
ClientPeerAddr string `json:"client-peer-addr"` ClientPeerAddr string `json:"client-peer-addr"`
ClientLocalAddr string `json:"client-local-addr"` ClientLocalAddr string `json:"client-local-addr"`
CreatedMilli int64 `json:"created-milli"`
} }
type json_out_server_stats struct { type json_out_server_stats struct {
@ -213,6 +216,7 @@ func (ctl *server_ctl_server_conns) ServeHTTP(w http.ResponseWriter, req *http.R
ServerPeerSvcAddr: r.SvcAddr.String(), ServerPeerSvcAddr: r.SvcAddr.String(),
ServerPeerSvcNet: r.SvcPermNet.String(), ServerPeerSvcNet: r.SvcPermNet.String(),
ServerPeerOption: r.SvcOption.String(), ServerPeerOption: r.SvcOption.String(),
CreatedMilli: r.Created.UnixMilli(),
}) })
} }
cts.route_mtx.Unlock() cts.route_mtx.Unlock()
@ -221,6 +225,7 @@ func (ctl *server_ctl_server_conns) ServeHTTP(w http.ResponseWriter, req *http.R
ClientAddr: cts.RemoteAddr.String(), ClientAddr: cts.RemoteAddr.String(),
ServerAddr: cts.LocalAddr.String(), ServerAddr: cts.LocalAddr.String(),
ClientToken: cts.ClientToken.Get(), ClientToken: cts.ClientToken.Get(),
CreatedMilli: cts.Created.UnixMilli(),
Routes: jsp, Routes: jsp,
}) })
} }
@ -284,6 +289,7 @@ func (ctl *server_ctl_server_conns_id) ServeHTTP(w http.ResponseWriter, req *htt
ServerPeerSvcAddr: r.SvcAddr.String(), ServerPeerSvcAddr: r.SvcAddr.String(),
ServerPeerSvcNet: r.SvcPermNet.String(), ServerPeerSvcNet: r.SvcPermNet.String(),
ServerPeerOption: r.SvcOption.String(), ServerPeerOption: r.SvcOption.String(),
CreatedMilli: r.Created.UnixMilli(),
}) })
} }
cts.route_mtx.Unlock() cts.route_mtx.Unlock()
@ -292,6 +298,7 @@ func (ctl *server_ctl_server_conns_id) ServeHTTP(w http.ResponseWriter, req *htt
ClientAddr: cts.RemoteAddr.String(), ClientAddr: cts.RemoteAddr.String(),
ServerAddr: cts.LocalAddr.String(), ServerAddr: cts.LocalAddr.String(),
ClientToken: cts.ClientToken.Get(), ClientToken: cts.ClientToken.Get(),
CreatedMilli: cts.Created.UnixMilli(),
Routes: jsp, Routes: jsp,
} }
@ -353,6 +360,7 @@ func (ctl *server_ctl_server_conns_id_routes) ServeHTTP(w http.ResponseWriter, r
ServerPeerSvcAddr: r.SvcAddr.String(), ServerPeerSvcAddr: r.SvcAddr.String(),
ServerPeerSvcNet: r.SvcPermNet.String(), ServerPeerSvcNet: r.SvcPermNet.String(),
ServerPeerOption: r.SvcOption.String(), ServerPeerOption: r.SvcOption.String(),
CreatedMilli: r.Created.UnixMilli(),
}) })
} }
cts.route_mtx.Unlock() cts.route_mtx.Unlock()
@ -440,6 +448,7 @@ func (ctl *server_ctl_server_conns_id_routes_id) ServeHTTP(w http.ResponseWriter
ServerPeerSvcAddr: r.SvcAddr.String(), ServerPeerSvcAddr: r.SvcAddr.String(),
ServerPeerSvcNet: r.SvcPermNet.String(), ServerPeerSvcNet: r.SvcPermNet.String(),
ServerPeerOption: r.SvcOption.String(), ServerPeerOption: r.SvcOption.String(),
CreatedMilli: r.Created.UnixMilli(),
}) })
if err != nil { goto oops } if err != nil { goto oops }
@ -501,8 +510,9 @@ func (ctl *server_ctl_server_conns_id_routes_id_peers) ServeHTTP(w http.Response
Id: p.conn_id, Id: p.conn_id,
ServerPeerAddr: p.conn.RemoteAddr().String(), ServerPeerAddr: p.conn.RemoteAddr().String(),
ServerLocalAddr: p.conn.LocalAddr().String(), ServerLocalAddr: p.conn.LocalAddr().String(),
ClientPeerAddr: p.client_peer_raddr, ClientPeerAddr: p.client_peer_raddr.Get(),
ClientLocalAddr: p.client_peer_laddr, ClientLocalAddr: p.client_peer_laddr.Get(),
CreatedMilli: p.Created.UnixMilli(),
}) })
} }
r.pts_mtx.Unlock() r.pts_mtx.Unlock()
@ -558,8 +568,9 @@ func (ctl *server_ctl_server_conns_id_routes_id_peers_id) ServeHTTP(w http.Respo
Id: p.conn_id, Id: p.conn_id,
ServerPeerAddr: p.conn.RemoteAddr().String(), ServerPeerAddr: p.conn.RemoteAddr().String(),
ServerLocalAddr: p.conn.LocalAddr().String(), ServerLocalAddr: p.conn.LocalAddr().String(),
ClientPeerAddr: p.client_peer_raddr, ClientPeerAddr: p.client_peer_raddr.Get(),
ClientLocalAddr: p.client_peer_laddr, ClientLocalAddr: p.client_peer_laddr.Get(),
CreatedMilli: p.Created.UnixMilli(),
} }
status_code = WriteJsonRespHeader(w, http.StatusOK) status_code = WriteJsonRespHeader(w, http.StatusOK)

View File

@ -13,6 +13,7 @@ type ServerPeerConn struct {
route *ServerRoute route *ServerRoute
conn_id PeerId conn_id PeerId
conn *net.TCPConn conn *net.TCPConn
Created time.Time
stop_chan chan bool stop_chan chan bool
stop_req atomic.Bool stop_req atomic.Bool
@ -21,8 +22,8 @@ type ServerPeerConn struct {
client_peer_started atomic.Bool client_peer_started atomic.Bool
client_peer_stopped atomic.Bool client_peer_stopped atomic.Bool
client_peer_eof atomic.Bool client_peer_eof atomic.Bool
client_peer_laddr string client_peer_laddr Atom[string]
client_peer_raddr string client_peer_raddr Atom[string]
} }
func NewServerPeerConn(r *ServerRoute, c *net.TCPConn, id PeerId) *ServerPeerConn { func NewServerPeerConn(r *ServerRoute, c *net.TCPConn, id PeerId) *ServerPeerConn {
@ -31,6 +32,7 @@ func NewServerPeerConn(r *ServerRoute, c *net.TCPConn, id PeerId) *ServerPeerCon
spc.route = r spc.route = r
spc.conn = c spc.conn = c
spc.conn_id = id spc.conn_id = id
spc.Created = time.Now()
spc.stop_chan = make(chan bool, 8) spc.stop_chan = make(chan bool, 8)
spc.stop_req.Store(false) spc.stop_req.Store(false)
@ -143,6 +145,15 @@ done:
done_without_stop: done_without_stop:
spc.ReqStop() spc.ReqStop()
spc.route.RemoveServerPeerConn(spc) spc.route.RemoveServerPeerConn(spc)
spc.route.Cts.S.bulletin.Enqueue(
&ServerEvent{
Kind: SERVER_EVENT_PEER_DELETED,
Data: &ServerEventPeerDeleted {
Conn: spc.route.Cts.Id, Route: spc.route.Id, Peer: spc.conn_id,
},
},
)
} }
func (spc *ServerPeerConn) ReqStop() { func (spc *ServerPeerConn) ReqStop() {
@ -170,17 +181,33 @@ func (spc *ServerPeerConn) ReportPacket(packet_type PACKET_KIND, event_data inte
pd, ok = event_data.(*PeerDesc) pd, ok = event_data.(*PeerDesc)
if !ok { if !ok {
// something wrong. leave it unknown. // something wrong. leave it unknown.
spc.client_peer_laddr = "" spc.client_peer_laddr.Set("")
spc.client_peer_raddr = "" spc.client_peer_raddr.Set("")
} else { } else {
spc.client_peer_laddr = pd.LocalAddrStr spc.client_peer_laddr.Set(pd.LocalAddrStr)
spc.client_peer_raddr = pd.RemoteAddrStr spc.client_peer_raddr.Set(pd.RemoteAddrStr)
} }
if spc.client_peer_started.CompareAndSwap(false, true) { if spc.client_peer_started.CompareAndSwap(false, true) {
spc.client_peer_status_chan <- true spc.client_peer_status_chan <- true
} }
spc.route.Cts.S.bulletin.Enqueue(
&ServerEvent{
Kind: SERVER_EVENT_PEER_UPDATED,
Data: &ServerEventPeerAdded{
Conn: spc.route.Cts.Id,
Route: spc.route.Id,
Peer: spc.conn_id,
ServerPeerAddr: spc.conn.RemoteAddr().String(),
ServerLocalAddr: spc.conn.LocalAddr().String(),
ClientPeerAddr: spc.client_peer_raddr.Get(),
ClientLocalAddr: spc.client_peer_laddr.Get(),
CreatedMilli: spc.Created.UnixMilli(),
},
},
)
case PACKET_KIND_PEER_ABORTED: case PACKET_KIND_PEER_ABORTED:
spc.ReqStop() spc.ReqStop()

View File

@ -70,10 +70,13 @@ type ServerConfig struct {
type ServerEventKind int type ServerEventKind int
const ( const (
SERVER_EVENT_CONN_ADDED = iota SERVER_EVENT_CONN_ADDED = iota
SERVER_EVENT_CONN_UPDATED
SERVER_EVENT_CONN_DELETED SERVER_EVENT_CONN_DELETED
SERVER_EVENT_ROUTE_ADDED SERVER_EVENT_ROUTE_ADDED
SERVER_EVENT_ROUTE_UPDATED
SERVER_EVENT_ROUTE_DELETED SERVER_EVENT_ROUTE_DELETED
SERVER_EVENT_PEER_ADDED SERVER_EVENT_PEER_ADDED
SERVER_EVENT_PEER_UPDATED
SERVER_EVENT_PEER_DELETED SERVER_EVENT_PEER_DELETED
) )
@ -87,6 +90,7 @@ type ServerEventConnAdded struct {
ServerAddr string `json:"server-addr"` ServerAddr string `json:"server-addr"`
ClientAddr string `json:"client-addr"` ClientAddr string `json:"client-addr"`
ClientToken string `json:"client-token"` ClientToken string `json:"client-token"`
CreatedMilli int64 `json:"created-milli"`
} }
type ServerEventConnDeleted struct { type ServerEventConnDeleted struct {
@ -101,6 +105,7 @@ type ServerEventRouteAdded struct {
ServerPeerOption string `json:"server-peer-option"` ServerPeerOption string `json:"server-peer-option"`
ServerPeerSvcAddr string `json:"server-peer-svc-addr"` ServerPeerSvcAddr string `json:"server-peer-svc-addr"`
ServerPeerSvcNet string `json:"server-peer-svc-net"` ServerPeerSvcNet string `json:"server-peer-svc-net"`
CreatedMilli int64 `json:"created-milli"`
} }
type ServerEventRouteDeleted struct { type ServerEventRouteDeleted struct {
@ -108,6 +113,23 @@ type ServerEventRouteDeleted struct {
Route RouteId `json:"route-id"` Route RouteId `json:"route-id"`
} }
type ServerEventPeerAdded struct {
Conn ConnId `json:"conn-id"`
Route RouteId `json:"route-id"`
Peer PeerId `json:"peer-id"`
ServerPeerAddr string `json:"server-peer-addr"`
ServerLocalAddr string `json:"server-local-addr"`
ClientPeerAddr string `json:"client-peer-addr"`
ClientLocalAddr string `json:"client-local-addr"`
CreatedMilli int64 `json:"created-milli"`
}
type ServerEventPeerDeleted struct {
Conn ConnId `json:"conn-id"`
Route RouteId `json:"route-id"`
Peer PeerId `json:"peer-id"`
}
type ServerEventBulletin = Bulletin[*ServerEvent] type ServerEventBulletin = Bulletin[*ServerEvent]
type ServerEventSubscription = BulletinSubscription[*ServerEvent] type ServerEventSubscription = BulletinSubscription[*ServerEvent]
@ -176,6 +198,7 @@ type ServerConn struct {
S *Server S *Server
Id ConnId Id ConnId
Sid string // for logging Sid string // for logging
Created time.Time
ClientToken Atom[string] // provided by client ClientToken Atom[string] // provided by client
RemoteAddr net.Addr // client address that created this structure RemoteAddr net.Addr // client address that created this structure
@ -194,6 +217,7 @@ type ServerConn struct {
type ServerRoute struct { type ServerRoute struct {
Cts *ServerConn Cts *ServerConn
Id RouteId Id RouteId
Created time.Time
svc_l *net.TCPListener svc_l *net.TCPListener
SvcAddr *net.TCPAddr // actual listening address SvcAddr *net.TCPAddr // actual listening address
@ -270,6 +294,7 @@ func NewServerRoute(cts *ServerConn, id RouteId, option RouteOption, ptc_addr st
r.Cts = cts r.Cts = cts
r.Id = id r.Id = id
r.Created = time.Now()
r.svc_l = l r.svc_l = l
r.SvcAddr = svcaddr r.SvcAddr = svcaddr
r.SvcReqAddr = svc_requested_addr r.SvcReqAddr = svc_requested_addr
@ -320,6 +345,21 @@ func (r *ServerRoute) AddNewServerPeerConn(c *net.TCPConn) (*ServerPeerConn, err
r.pts_map[pts.conn_id] = pts r.pts_map[pts.conn_id] = pts
r.Cts.S.stats.peers.Add(1) r.Cts.S.stats.peers.Add(1)
r.Cts.S.bulletin.Enqueue(
&ServerEvent{
Kind: SERVER_EVENT_PEER_ADDED,
Data: &ServerEventPeerAdded{
Conn: r.Cts.Id,
Route: r.Id,
Peer: pts.conn_id,
ServerPeerAddr: pts.conn.RemoteAddr().String(),
ServerLocalAddr: pts.conn.LocalAddr().String(),
ClientPeerAddr: pts.client_peer_raddr.Get(),
ClientLocalAddr: pts.client_peer_laddr.Get(),
CreatedMilli: pts.Created.UnixMilli(),
},
},
)
return pts, nil return pts, nil
} }
@ -537,6 +577,7 @@ func (cts *ServerConn) AddNewServerRoute(route_id RouteId, proto RouteOption, pt
ServerPeerSvcAddr: r.SvcAddr.String(), ServerPeerSvcAddr: r.SvcAddr.String(),
ServerPeerSvcNet: r.SvcPermNet.String(), ServerPeerSvcNet: r.SvcPermNet.String(),
ServerPeerOption: r.SvcOption.String(), ServerPeerOption: r.SvcOption.String(),
CreatedMilli: r.Created.UnixMilli(),
}, },
}, },
) )
@ -996,6 +1037,7 @@ func (s *Server) PacketStream(strm Hodu_PacketStreamServer) error {
ServerAddr: cts.LocalAddr.String(), ServerAddr: cts.LocalAddr.String(),
ClientAddr: cts.RemoteAddr.String(), ClientAddr: cts.RemoteAddr.String(),
ClientToken: cts.ClientToken.Get(), ClientToken: cts.ClientToken.Get(),
CreatedMilli: cts.Created.UnixMilli(),
}, },
}, },
) )
@ -1713,6 +1755,7 @@ func (s *Server) AddNewServerConn(remote_addr *net.Addr, local_addr *net.Addr, p
var ok bool var ok bool
cts.S = s cts.S = s
cts.Created = time.Now()
cts.route_map = make(ServerRouteMap) cts.route_map = make(ServerRouteMap)
cts.RemoteAddr = *remote_addr cts.RemoteAddr = *remote_addr
cts.LocalAddr = *local_addr cts.LocalAddr = *local_addr