updated to return connections, routes, peers in ascending order by id over the control endpoint
This commit is contained in:
parent
b6fb296608
commit
e56c45b3bf
@ -215,8 +215,8 @@ func (ctl *client_ctl_client_conns) ServeHTTP(w http.ResponseWriter, req *http.R
|
||||
|
||||
switch req.Method {
|
||||
case http.MethodGet:
|
||||
var cts *ClientConn
|
||||
var js []json_out_client_conn
|
||||
var ci ConnId
|
||||
// var q url.Values
|
||||
|
||||
// q = req.URL.Query()
|
||||
@ -227,14 +227,19 @@ func (ctl *client_ctl_client_conns) ServeHTTP(w http.ResponseWriter, req *http.R
|
||||
|
||||
js = make([]json_out_client_conn, 0)
|
||||
c.cts_mtx.Lock()
|
||||
for _, cts = range c.cts_map {
|
||||
var r *ClientRoute
|
||||
for _, ci = range c.cts_map.get_sorted_keys() {
|
||||
var cts *ClientConn
|
||||
var jsp []json_out_client_route
|
||||
var ri RouteId
|
||||
|
||||
cts = c.cts_map[ci]
|
||||
jsp = make([]json_out_client_route, 0)
|
||||
cts.route_mtx.Lock()
|
||||
for _, r = range cts.route_map {
|
||||
for _, ri = range cts.route_map.get_sorted_keys() {
|
||||
var r *ClientRoute
|
||||
var spla string = ""
|
||||
|
||||
r = cts.route_map[ri]
|
||||
if r.server_peer_listen_addr != nil { spla = r.server_peer_listen_addr.String() }
|
||||
jsp = append(jsp, json_out_client_route{
|
||||
Id: r.Id,
|
||||
@ -247,6 +252,7 @@ func (ctl *client_ctl_client_conns) ServeHTTP(w http.ResponseWriter, req *http.R
|
||||
LifetimeStart: r.LifetimeStart.Unix(),
|
||||
})
|
||||
}
|
||||
cts.route_mtx.Unlock()
|
||||
js = append(js, json_out_client_conn{
|
||||
Id: cts.Id,
|
||||
ReqServerAddrs: cts.cfg.ServerAddrs,
|
||||
@ -256,7 +262,6 @@ func (ctl *client_ctl_client_conns) ServeHTTP(w http.ResponseWriter, req *http.R
|
||||
ClientToken: cts.Token,
|
||||
Routes: jsp,
|
||||
})
|
||||
cts.route_mtx.Unlock()
|
||||
}
|
||||
c.cts_mtx.Unlock()
|
||||
|
||||
@ -336,14 +341,17 @@ func (ctl *client_ctl_client_conns_id) ServeHTTP(w http.ResponseWriter, req *htt
|
||||
|
||||
switch req.Method {
|
||||
case http.MethodGet:
|
||||
var r *ClientRoute
|
||||
var jsp []json_out_client_route
|
||||
var js *json_out_client_conn
|
||||
var ri RouteId
|
||||
|
||||
jsp = make([]json_out_client_route, 0)
|
||||
cts.route_mtx.Lock()
|
||||
for _, r = range cts.route_map {
|
||||
for _, ri = range cts.route_map.get_sorted_keys() {
|
||||
var r *ClientRoute
|
||||
var spla string = ""
|
||||
|
||||
r = cts.route_map[ri];
|
||||
if r.server_peer_listen_addr != nil { spla = r.server_peer_listen_addr.String() }
|
||||
jsp = append(jsp, json_out_client_route{
|
||||
Id: r.Id,
|
||||
@ -356,6 +364,7 @@ func (ctl *client_ctl_client_conns_id) ServeHTTP(w http.ResponseWriter, req *htt
|
||||
LifetimeStart: r.LifetimeStart.Unix(),
|
||||
})
|
||||
}
|
||||
cts.route_mtx.Unlock()
|
||||
js = &json_out_client_conn{
|
||||
Id: cts.Id,
|
||||
ReqServerAddrs: cts.cfg.ServerAddrs,
|
||||
@ -365,7 +374,6 @@ func (ctl *client_ctl_client_conns_id) ServeHTTP(w http.ResponseWriter, req *htt
|
||||
ClientToken: cts.Token,
|
||||
Routes: jsp,
|
||||
}
|
||||
cts.route_mtx.Unlock()
|
||||
|
||||
status_code = WriteJsonRespHeader(w, http.StatusOK)
|
||||
if err = je.Encode(js); err != nil { goto oops }
|
||||
@ -409,13 +417,16 @@ func (ctl *client_ctl_client_conns_id_routes) ServeHTTP(w http.ResponseWriter, r
|
||||
|
||||
switch req.Method {
|
||||
case http.MethodGet:
|
||||
var r *ClientRoute
|
||||
var jsp []json_out_client_route
|
||||
var ri RouteId
|
||||
|
||||
jsp = make([]json_out_client_route, 0)
|
||||
cts.route_mtx.Lock()
|
||||
for _, r = range cts.route_map {
|
||||
for _, ri = range cts.route_map.get_sorted_keys() {
|
||||
var r *ClientRoute
|
||||
var spla string = ""
|
||||
|
||||
r = cts.route_map[ri]
|
||||
if r.server_peer_listen_addr != nil { spla = r.server_peer_listen_addr.String() }
|
||||
jsp = append(jsp, json_out_client_route{
|
||||
Id: r.Id,
|
||||
@ -696,12 +707,15 @@ func (ctl *client_ctl_client_conns_id_routes_id_peers) ServeHTTP(w http.Response
|
||||
|
||||
switch req.Method {
|
||||
case http.MethodGet:
|
||||
var p *ClientPeerConn
|
||||
var jcp []json_out_client_peer
|
||||
var pi PeerId
|
||||
|
||||
jcp = make([]json_out_client_peer, 0)
|
||||
r.ptc_mtx.Lock()
|
||||
for _, p = range r.ptc_map {
|
||||
for _, pi = range r.ptc_map.get_sorted_keys() {
|
||||
var p *ClientPeerConn
|
||||
|
||||
p = r.ptc_map[pi]
|
||||
jcp = append(jcp, json_out_client_peer{
|
||||
Id: p.conn_id,
|
||||
ClientPeerAddr: p.conn.RemoteAddr().String(),
|
||||
|
47
client.go
47
client.go
@ -7,6 +7,7 @@ import "fmt"
|
||||
import "log"
|
||||
import "net"
|
||||
import "net/http"
|
||||
import "slices"
|
||||
import "strconv"
|
||||
import "sync"
|
||||
import "sync/atomic"
|
||||
@ -24,10 +25,10 @@ import "github.com/prometheus/client_golang/prometheus/promhttp"
|
||||
|
||||
type PacketStreamClient grpc.BidiStreamingClient[Packet, Packet]
|
||||
|
||||
type ClientConnMap = map[ConnId]*ClientConn
|
||||
type ClientRouteMap = map[RouteId]*ClientRoute
|
||||
type ClientPeerConnMap = map[PeerId]*ClientPeerConn
|
||||
type ClientPeerCancelFuncMap = map[PeerId]context.CancelFunc
|
||||
type ClientConnMap map[ConnId]*ClientConn
|
||||
type ClientRouteMap map[RouteId]*ClientRoute
|
||||
type ClientPeerConnMap map[PeerId]*ClientPeerConn
|
||||
type ClientPeerCancelFuncMap map[PeerId]context.CancelFunc
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
type ClientRouteConfig struct {
|
||||
@ -1286,6 +1287,44 @@ func (cts *ClientConn) ReportEvent(route_id RouteId, pts_id PeerId, event_type P
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
func (m ClientPeerConnMap) get_sorted_keys() []PeerId {
|
||||
var ks []PeerId
|
||||
var peer *ClientPeerConn
|
||||
|
||||
ks = make([]PeerId, 0, len(m))
|
||||
for _, peer = range m {
|
||||
ks = append(ks, peer.conn_id)
|
||||
}
|
||||
slices.Sort(ks)
|
||||
return ks
|
||||
}
|
||||
|
||||
func (m ClientRouteMap) get_sorted_keys() []RouteId {
|
||||
var ks []RouteId
|
||||
var route *ClientRoute
|
||||
|
||||
ks = make([]RouteId, 0, len(m))
|
||||
for _, route = range m {
|
||||
ks = append(ks, route.Id)
|
||||
}
|
||||
slices.Sort(ks)
|
||||
return ks
|
||||
}
|
||||
|
||||
func (m ClientConnMap) get_sorted_keys() []ConnId {
|
||||
var ks []ConnId
|
||||
var cts *ClientConn
|
||||
|
||||
ks = make([]ConnId, 0, len(m))
|
||||
for _, cts = range m {
|
||||
ks = append(ks, cts.Id)
|
||||
}
|
||||
slices.Sort(ks)
|
||||
return ks
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
type client_ctl_log_writer struct {
|
||||
cli *Client
|
||||
}
|
||||
|
@ -177,18 +177,22 @@ func (ctl *server_ctl_server_conns) ServeHTTP(w http.ResponseWriter, req *http.R
|
||||
|
||||
switch req.Method {
|
||||
case http.MethodGet:
|
||||
var cts *ServerConn
|
||||
var js []json_out_server_conn
|
||||
var ci ConnId
|
||||
|
||||
js = make([]json_out_server_conn, 0)
|
||||
s.cts_mtx.Lock()
|
||||
for _, cts = range s.cts_map {
|
||||
var r *ServerRoute
|
||||
for _, ci = range s.cts_map.get_sorted_keys() {
|
||||
var cts *ServerConn
|
||||
var jsp []json_out_server_route
|
||||
var ri RouteId
|
||||
|
||||
cts = s.cts_map[ci]
|
||||
jsp = make([]json_out_server_route, 0)
|
||||
cts.route_mtx.Lock()
|
||||
for _, r = range cts.route_map {
|
||||
for _, ri = range cts.route_map.get_sorted_keys() {
|
||||
var r *ServerRoute
|
||||
r = cts.route_map[ri]
|
||||
jsp = append(jsp, json_out_server_route{
|
||||
Id: r.Id,
|
||||
ClientPeerAddr: r.PtcAddr,
|
||||
@ -198,6 +202,7 @@ func (ctl *server_ctl_server_conns) ServeHTTP(w http.ResponseWriter, req *http.R
|
||||
ServerPeerOption: r.SvcOption.String(),
|
||||
})
|
||||
}
|
||||
cts.route_mtx.Unlock()
|
||||
js = append(js, json_out_server_conn{
|
||||
Id: cts.Id,
|
||||
ClientAddr: cts.RemoteAddr.String(),
|
||||
@ -205,7 +210,6 @@ func (ctl *server_ctl_server_conns) ServeHTTP(w http.ResponseWriter, req *http.R
|
||||
ClientToken: cts.ClientToken,
|
||||
Routes: jsp,
|
||||
})
|
||||
cts.route_mtx.Unlock()
|
||||
}
|
||||
s.cts_mtx.Unlock()
|
||||
|
||||
@ -250,13 +254,16 @@ func (ctl *server_ctl_server_conns_id) ServeHTTP(w http.ResponseWriter, req *htt
|
||||
|
||||
switch req.Method {
|
||||
case http.MethodGet:
|
||||
var r *ServerRoute
|
||||
var jsp []json_out_server_route
|
||||
var js *json_out_server_conn
|
||||
var ri RouteId
|
||||
|
||||
jsp = make([]json_out_server_route, 0)
|
||||
cts.route_mtx.Lock()
|
||||
for _, r = range cts.route_map {
|
||||
for _, ri = range cts.route_map.get_sorted_keys() {
|
||||
var r *ServerRoute
|
||||
|
||||
r = cts.route_map[ri]
|
||||
jsp = append(jsp, json_out_server_route{
|
||||
Id: r.Id,
|
||||
ClientPeerAddr: r.PtcAddr,
|
||||
@ -266,6 +273,7 @@ func (ctl *server_ctl_server_conns_id) ServeHTTP(w http.ResponseWriter, req *htt
|
||||
ServerPeerOption: r.SvcOption.String(),
|
||||
})
|
||||
}
|
||||
cts.route_mtx.Unlock()
|
||||
js = &json_out_server_conn{
|
||||
Id: cts.Id,
|
||||
ClientAddr: cts.RemoteAddr.String(),
|
||||
@ -273,7 +281,6 @@ func (ctl *server_ctl_server_conns_id) ServeHTTP(w http.ResponseWriter, req *htt
|
||||
ClientToken: cts.ClientToken,
|
||||
Routes: jsp,
|
||||
}
|
||||
cts.route_mtx.Unlock()
|
||||
|
||||
status_code = WriteJsonRespHeader(w, http.StatusOK)
|
||||
if err = je.Encode(js); err != nil { goto oops }
|
||||
@ -317,12 +324,15 @@ func (ctl *server_ctl_server_conns_id_routes) ServeHTTP(w http.ResponseWriter, r
|
||||
|
||||
switch req.Method {
|
||||
case http.MethodGet:
|
||||
var r *ServerRoute
|
||||
var jsp []json_out_server_route
|
||||
var ri RouteId
|
||||
|
||||
jsp = make([]json_out_server_route, 0)
|
||||
cts.route_mtx.Lock()
|
||||
for _, r = range cts.route_map {
|
||||
for _, ri = range cts.route_map.get_sorted_keys() {
|
||||
var r *ServerRoute
|
||||
|
||||
r = cts.route_map[ri]
|
||||
jsp = append(jsp, json_out_server_route{
|
||||
Id: r.Id,
|
||||
ClientPeerAddr: r.PtcAddr,
|
||||
@ -466,12 +476,14 @@ func (ctl *server_ctl_server_conns_id_routes_id_peers) ServeHTTP(w http.Response
|
||||
|
||||
switch req.Method {
|
||||
case http.MethodGet:
|
||||
var p *ServerPeerConn
|
||||
var jcp []json_out_server_peer
|
||||
var pi PeerId
|
||||
|
||||
jcp = make([]json_out_server_peer, 0)
|
||||
r.pts_mtx.Lock()
|
||||
for _, p = range r.pts_map {
|
||||
for _, pi = range r.pts_map.get_sorted_keys() {
|
||||
var p *ServerPeerConn
|
||||
p = r.pts_map[pi];
|
||||
jcp = append(jcp, json_out_server_peer{
|
||||
Id: p.conn_id,
|
||||
ServerPeerAddr: p.conn.RemoteAddr().String(),
|
||||
|
49
server.go
49
server.go
@ -9,6 +9,7 @@ import "log"
|
||||
import "net"
|
||||
import "net/http"
|
||||
import "net/netip"
|
||||
import "slices"
|
||||
import "strconv"
|
||||
import "sync"
|
||||
import "sync/atomic"
|
||||
@ -33,12 +34,12 @@ const HS_ID_WPX string = "wpx"
|
||||
const HS_ID_PXY string = "pxy"
|
||||
const HS_ID_PXY_WS string = "pxy-ws"
|
||||
|
||||
type ServerConnMapByAddr = map[net.Addr]*ServerConn
|
||||
type ServerConnMapByClientToken = map[string]*ServerConn
|
||||
type ServerConnMap = map[ConnId]*ServerConn
|
||||
type ServerRouteMap = map[RouteId]*ServerRoute
|
||||
type ServerPeerConnMap = map[PeerId]*ServerPeerConn
|
||||
type ServerSvcPortMap = map[PortId]ConnRouteId
|
||||
type ServerConnMapByAddr map[net.Addr]*ServerConn
|
||||
type ServerConnMapByClientToken map[string]*ServerConn
|
||||
type ServerConnMap map[ConnId]*ServerConn
|
||||
type ServerRouteMap map[RouteId]*ServerRoute
|
||||
type ServerPeerConnMap map[PeerId]*ServerPeerConn
|
||||
type ServerSvcPortMap map[PortId]ConnRouteId
|
||||
|
||||
type ServerWpxResponseTransformer func(r *ServerRouteProxyInfo, resp *http.Response) io.Reader
|
||||
type ServerWpxForeignPortProxyMaker func(wpx_type string, port_id string) (*ServerRouteProxyInfo, error)
|
||||
@ -957,6 +958,42 @@ func (cc *ConnCatcher) HandleConn(ctx context.Context, cs stats.ConnStats) {
|
||||
}
|
||||
}
|
||||
|
||||
// ------------------------------------
|
||||
func (m ServerPeerConnMap) get_sorted_keys() []PeerId {
|
||||
var ks []PeerId
|
||||
var peer *ServerPeerConn
|
||||
|
||||
ks = make([]PeerId, 0, len(m))
|
||||
for _, peer = range m {
|
||||
ks = append(ks, peer.conn_id)
|
||||
}
|
||||
slices.Sort(ks)
|
||||
return ks
|
||||
}
|
||||
|
||||
func (m ServerRouteMap) get_sorted_keys() []RouteId {
|
||||
var ks []RouteId
|
||||
var route *ServerRoute
|
||||
|
||||
ks = make([]RouteId, 0, len(m))
|
||||
for _, route = range m {
|
||||
ks = append(ks, route.Id)
|
||||
}
|
||||
slices.Sort(ks)
|
||||
return ks
|
||||
}
|
||||
|
||||
func (m ServerConnMap) get_sorted_keys() []ConnId {
|
||||
var ks []ConnId
|
||||
var cts *ServerConn
|
||||
|
||||
ks = make([]ConnId, 0, len(m))
|
||||
for _, cts = range m {
|
||||
ks = append(ks, cts.Id)
|
||||
}
|
||||
slices.Sort(ks)
|
||||
return ks
|
||||
}
|
||||
// ------------------------------------
|
||||
|
||||
type wrappedStream struct {
|
||||
|
Loading…
x
Reference in New Issue
Block a user