added another control endpoint /_ctl/server-conns/{conn_id}/peers
This commit is contained in:
parent
41503373d3
commit
494f11836c
@ -105,6 +105,10 @@ type server_ctl_server_conns_id_routes_id_peers_id struct {
|
||||
server_ctl
|
||||
}
|
||||
|
||||
type server_ctl_server_conns_id_peers struct {
|
||||
server_ctl
|
||||
}
|
||||
|
||||
type server_ctl_server_routes struct {
|
||||
server_ctl
|
||||
}
|
||||
@ -633,6 +637,64 @@ oops:
|
||||
}
|
||||
// ------------------------------------
|
||||
|
||||
func (ctl *server_ctl_server_conns_id_peers) ServeHTTP(w http.ResponseWriter, req *http.Request) (int, error) {
|
||||
var s *Server
|
||||
var status_code int
|
||||
var err error
|
||||
var conn_id string
|
||||
var je *json.Encoder
|
||||
var cts *ServerConn
|
||||
|
||||
s = ctl.s
|
||||
je = json.NewEncoder(w)
|
||||
|
||||
conn_id = req.PathValue("conn_id")
|
||||
cts, err = s.FindServerConnByIdStr(conn_id)
|
||||
if err != nil {
|
||||
status_code = WriteJsonRespHeader(w, http.StatusNotFound)
|
||||
je.Encode(JsonErrmsg{Text: err.Error()})
|
||||
goto oops
|
||||
}
|
||||
|
||||
switch req.Method {
|
||||
case http.MethodGet:
|
||||
var jsp []json_out_server_peer
|
||||
var e *list.Element
|
||||
|
||||
jsp = make([]json_out_server_peer, 0)
|
||||
cts.pts_mtx.Lock()
|
||||
for e = cts.pts_list.Front(); e != nil; e = e.Next() {
|
||||
var pts *ServerPeerConn
|
||||
pts = e.Value.(*ServerPeerConn)
|
||||
jsp = append(jsp, json_out_server_peer{
|
||||
CId: pts.route.Cts.Id,
|
||||
RId: pts.route.Id,
|
||||
PId: 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(),
|
||||
})
|
||||
}
|
||||
cts.pts_mtx.Unlock()
|
||||
|
||||
status_code = WriteJsonRespHeader(w, http.StatusOK)
|
||||
if err = je.Encode(jsp); err != nil { goto oops }
|
||||
|
||||
default:
|
||||
status_code = WriteEmptyRespHeader(w, http.StatusMethodNotAllowed)
|
||||
}
|
||||
|
||||
//done:
|
||||
return status_code, nil
|
||||
|
||||
oops:
|
||||
return status_code, err
|
||||
}
|
||||
|
||||
// ------------------------------------
|
||||
|
||||
func (ctl *server_ctl_server_routes) ServeHTTP(w http.ResponseWriter, req *http.Request) (int, error) {
|
||||
var s *Server
|
||||
var status_code int
|
||||
|
@ -17,6 +17,7 @@ type ServerPeerConn struct {
|
||||
Created time.Time
|
||||
|
||||
node_in_server *list.Element
|
||||
node_in_conn *list.Element
|
||||
|
||||
stop_chan chan bool
|
||||
stop_req atomic.Bool
|
||||
@ -154,6 +155,11 @@ done_without_stop:
|
||||
spc.node_in_server = nil
|
||||
spc.route.Cts.S.pts_mtx.Unlock()
|
||||
|
||||
spc.route.Cts.pts_mtx.Lock()
|
||||
spc.route.Cts.pts_list.Remove(spc.node_in_conn)
|
||||
spc.node_in_conn = nil
|
||||
spc.route.Cts.pts_mtx.Unlock()
|
||||
|
||||
spc.route.Cts.S.bulletin.Enqueue(
|
||||
&ServerEvent{
|
||||
Kind: SERVER_EVENT_PEER_DELETED,
|
||||
|
10
server.go
10
server.go
@ -216,6 +216,9 @@ type ServerConn struct {
|
||||
route_map ServerRouteMap
|
||||
route_wg sync.WaitGroup
|
||||
|
||||
pts_mtx sync.Mutex
|
||||
pts_list *list.List
|
||||
|
||||
wg sync.WaitGroup
|
||||
stop_req atomic.Bool
|
||||
stop_chan chan bool
|
||||
@ -358,6 +361,10 @@ func (r *ServerRoute) AddNewServerPeerConn(c *net.TCPConn) (*ServerPeerConn, err
|
||||
pts.node_in_server = r.Cts.S.pts_list.PushBack(pts)
|
||||
r.Cts.S.pts_mtx.Unlock()
|
||||
|
||||
r.Cts.pts_mtx.Lock()
|
||||
pts.node_in_conn = r.Cts.pts_list.PushBack(pts)
|
||||
r.Cts.pts_mtx.Unlock()
|
||||
|
||||
r.Cts.S.bulletin.Enqueue(
|
||||
&ServerEvent{
|
||||
Kind: SERVER_EVENT_PEER_ADDED,
|
||||
@ -1415,6 +1422,8 @@ func NewServer(ctx context.Context, name string, logger Logger, cfg *ServerConfi
|
||||
s.WrapHttpHandler(&server_ctl_server_conns_id_routes_id_peers{server_ctl{s: &s, id: HS_ID_CTL}}))
|
||||
s.ctl_mux.Handle(s.Cfg.CtlPrefix + "/_ctl/server-conns/{conn_id}/routes/{route_id}/peers/{peer_id}",
|
||||
s.WrapHttpHandler(&server_ctl_server_conns_id_routes_id_peers_id{server_ctl{s: &s, id: HS_ID_CTL}}))
|
||||
s.ctl_mux.Handle(s.Cfg.CtlPrefix + "/_ctl/server-conns/{conn_id}/peers",
|
||||
s.WrapHttpHandler(&server_ctl_server_conns_id_peers{server_ctl{s: &s, id: HS_ID_CTL}}))
|
||||
s.ctl_mux.Handle(s.Cfg.CtlPrefix + "/_ctl/server-routes",
|
||||
s.WrapHttpHandler(&server_ctl_server_routes{server_ctl{s: &s, id: HS_ID_CTL}}))
|
||||
s.ctl_mux.Handle(s.Cfg.CtlPrefix + "/_ctl/server-peers",
|
||||
@ -1811,6 +1820,7 @@ func (s *Server) AddNewServerConn(remote_addr *net.Addr, local_addr *net.Addr, p
|
||||
|
||||
cts.stop_req.Store(false)
|
||||
cts.stop_chan = make(chan bool, 8)
|
||||
cts.pts_list = list.New()
|
||||
|
||||
s.cts_mtx.Lock()
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user