mirror of
https://github.com/logos-messaging/logos-messaging-nim.git
synced 2026-01-08 00:43:06 +00:00
chore: return all peers from rest admin (#3395)
* Updated version of getting peers by /admin endpoints
This commit is contained in:
parent
2d6e5ef9ad
commit
98c3979119
@ -120,7 +120,9 @@ suite "Waku v2 Rest API - Admin":
|
|||||||
check:
|
check:
|
||||||
getRes.status == 200
|
getRes.status == 200
|
||||||
$getRes.contentType == $MIMETYPE_JSON
|
$getRes.contentType == $MIMETYPE_JSON
|
||||||
getRes.data.len() == 0
|
getRes.data.len() == 1
|
||||||
|
getRes.data[0].multiaddr == nonExistentPeer
|
||||||
|
getRes.data[0].connected == CannotConnect
|
||||||
|
|
||||||
asyncTest "Get filter data":
|
asyncTest "Get filter data":
|
||||||
await allFutures(
|
await allFutures(
|
||||||
@ -274,7 +276,7 @@ suite "Waku v2 Rest API - Admin":
|
|||||||
check:
|
check:
|
||||||
postRes.status == 200
|
postRes.status == 200
|
||||||
|
|
||||||
let getRes = await client.getConnectedRelayPeers()
|
let getRes = await client.getRelayPeers()
|
||||||
|
|
||||||
check:
|
check:
|
||||||
getRes.status == 200
|
getRes.status == 200
|
||||||
@ -286,13 +288,13 @@ suite "Waku v2 Rest API - Admin":
|
|||||||
# Check peer 3
|
# Check peer 3
|
||||||
|
|
||||||
# Todo: investigate why the test setup missing remote peer's shard info
|
# Todo: investigate why the test setup missing remote peer's shard info
|
||||||
# let getRes2 = await client.getConnectedRelayPeersByShard(0)
|
# let getRes2 = await client.getRelayPeersByShard(0)
|
||||||
# check:
|
# check:
|
||||||
# getRes2.status == 200
|
# getRes2.status == 200
|
||||||
# $getRes2.contentType == $MIMETYPE_JSON
|
# $getRes2.contentType == $MIMETYPE_JSON
|
||||||
# getRes2.data.peers.len() == 2
|
# getRes2.data.peers.len() == 2
|
||||||
|
|
||||||
let getRes3 = await client.getConnectedRelayPeersByShard(99)
|
let getRes3 = await client.getRelayPeersByShard(99)
|
||||||
check:
|
check:
|
||||||
getRes3.status == 200
|
getRes3.status == 200
|
||||||
$getRes3.contentType == $MIMETYPE_JSON
|
$getRes3.contentType == $MIMETYPE_JSON
|
||||||
|
|||||||
@ -28,6 +28,10 @@ proc getPeerById*(
|
|||||||
rest, endpoint: "/admin/v1/peer/{peerId}", meth: HttpMethod.MethodGet
|
rest, endpoint: "/admin/v1/peer/{peerId}", meth: HttpMethod.MethodGet
|
||||||
.}
|
.}
|
||||||
|
|
||||||
|
proc getServicePeers*(): RestResponse[seq[WakuPeer]] {.
|
||||||
|
rest, endpoint: "/admin/v1/peers/service", meth: HttpMethod.MethodGet
|
||||||
|
.}
|
||||||
|
|
||||||
proc getConnectedPeers*(): RestResponse[seq[WakuPeer]] {.
|
proc getConnectedPeers*(): RestResponse[seq[WakuPeer]] {.
|
||||||
rest, endpoint: "/admin/v1/peers/connected", meth: HttpMethod.MethodGet
|
rest, endpoint: "/admin/v1/peers/connected", meth: HttpMethod.MethodGet
|
||||||
.}
|
.}
|
||||||
@ -38,16 +42,14 @@ proc getConnectedPeersByShard*(
|
|||||||
rest, endpoint: "/admin/v1/peers/connected/on/{shardId}", meth: HttpMethod.MethodGet
|
rest, endpoint: "/admin/v1/peers/connected/on/{shardId}", meth: HttpMethod.MethodGet
|
||||||
.}
|
.}
|
||||||
|
|
||||||
proc getConnectedRelayPeers*(): RestResponse[PeersOfShards] {.
|
proc getRelayPeers*(): RestResponse[PeersOfShards] {.
|
||||||
rest, endpoint: "/admin/v1/peers/connected/relay", meth: HttpMethod.MethodGet
|
rest, endpoint: "/admin/v1/peers/relay", meth: HttpMethod.MethodGet
|
||||||
.}
|
.}
|
||||||
|
|
||||||
proc getConnectedRelayPeersByShard*(
|
proc getRelayPeersByShard*(
|
||||||
shardId: uint16
|
shardId: uint16
|
||||||
): RestResponse[PeersOfShard] {.
|
): RestResponse[PeersOfShard] {.
|
||||||
rest,
|
rest, endpoint: "/admin/v1/peers/relay/on/{shardId}", meth: HttpMethod.MethodGet
|
||||||
endpoint: "/admin/v1/peers/connected/relay/on/{shardId}",
|
|
||||||
meth: HttpMethod.MethodGet
|
|
||||||
.}
|
.}
|
||||||
|
|
||||||
proc getMeshPeers*(): RestResponse[PeersOfShards] {.
|
proc getMeshPeers*(): RestResponse[PeersOfShards] {.
|
||||||
|
|||||||
@ -34,12 +34,13 @@ logScope:
|
|||||||
const ROUTE_ADMIN_V1_PEERS* = "/admin/v1/peers" # returns all peers
|
const ROUTE_ADMIN_V1_PEERS* = "/admin/v1/peers" # returns all peers
|
||||||
const ROUTE_ADMIN_V1_SINGLE_PEER* = "/admin/v1/peer/{peerId}"
|
const ROUTE_ADMIN_V1_SINGLE_PEER* = "/admin/v1/peer/{peerId}"
|
||||||
|
|
||||||
|
const ROUTE_ADMIN_V1_SERVICE_PEERS* = "/admin/v1/peers/service" # returns all peers
|
||||||
|
|
||||||
const ROUTE_ADMIN_V1_CONNECTED_PEERS* = "/admin/v1/peers/connected"
|
const ROUTE_ADMIN_V1_CONNECTED_PEERS* = "/admin/v1/peers/connected"
|
||||||
const ROUTE_ADMIN_V1_CONNECTED_PEERS_ON_SHARD* =
|
const ROUTE_ADMIN_V1_CONNECTED_PEERS_ON_SHARD* =
|
||||||
"/admin/v1/peers/connected/on/{shardId}"
|
"/admin/v1/peers/connected/on/{shardId}"
|
||||||
const ROUTE_ADMIN_V1_CONNECTED_RELAY_PEERS* = "/admin/v1/peers/connected/relay"
|
const ROUTE_ADMIN_V1_RELAY_PEERS* = "/admin/v1/peers/relay"
|
||||||
const ROUTE_ADMIN_V1_CONNECTED_RELAY_PEERS_ON_SHARD* =
|
const ROUTE_ADMIN_V1_RELAY_PEERS_ON_SHARD* = "/admin/v1/peers/relay/on/{shardId}"
|
||||||
"/admin/v1/peers/connected/relay/on/{shardId}"
|
|
||||||
const ROUTE_ADMIN_V1_MESH_PEERS* = "/admin/v1/peers/mesh"
|
const ROUTE_ADMIN_V1_MESH_PEERS* = "/admin/v1/peers/mesh"
|
||||||
const ROUTE_ADMIN_V1_MESH_PEERS_ON_SHARD* = "/admin/v1/peers/mesh/on/{shardId}"
|
const ROUTE_ADMIN_V1_MESH_PEERS_ON_SHARD* = "/admin/v1/peers/mesh/on/{shardId}"
|
||||||
|
|
||||||
@ -62,46 +63,48 @@ proc tuplesToWakuPeers(peers: var WakuPeers, peersTup: seq[PeerProtocolTuple]) =
|
|||||||
peer.origin,
|
peer.origin,
|
||||||
)
|
)
|
||||||
|
|
||||||
proc populateAdminPeerInfo(peers: var WakuPeers, node: WakuNode, codec: string) =
|
proc populateAdminPeerInfo(
|
||||||
let peersForCodec = node.peerManager.switch.peerStore.peers(codec).mapIt(
|
peers: var WakuPeers, node: WakuNode, codec: Option[string] = none[string]()
|
||||||
(
|
) =
|
||||||
multiaddr: constructMultiaddrStr(it),
|
if codec.isNone():
|
||||||
protocol: codec,
|
peers = node.peerManager.switch.peerStore.peers().mapIt(WakuPeer.init(it))
|
||||||
shards: it.getShards(),
|
else:
|
||||||
connected: it.connectedness,
|
let peersTuples = node.peerManager.switch.peerStore.peers(codec.get()).mapIt(
|
||||||
agent: it.agent,
|
(
|
||||||
origin: it.origin,
|
multiaddr: constructMultiaddrStr(it),
|
||||||
|
protocol: codec.get(),
|
||||||
|
shards: it.getShards(),
|
||||||
|
connected: it.connectedness,
|
||||||
|
agent: it.agent,
|
||||||
|
origin: it.origin,
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
tuplesToWakuPeers(peers, peersTuples)
|
||||||
tuplesToWakuPeers(peers, peersForCodec)
|
|
||||||
|
proc populateAdminPeerInfoForAll(node: WakuNode): WakuPeers =
|
||||||
|
var peers: WakuPeers = @[]
|
||||||
|
populateAdminPeerInfo(peers, node)
|
||||||
|
return peers
|
||||||
|
|
||||||
proc populateAdminPeerInfoForCodecs(node: WakuNode, codecs: seq[string]): WakuPeers =
|
proc populateAdminPeerInfoForCodecs(node: WakuNode, codecs: seq[string]): WakuPeers =
|
||||||
var peers: WakuPeers = @[]
|
var peers: WakuPeers = @[]
|
||||||
|
|
||||||
for codec in codecs:
|
for codec in codecs:
|
||||||
populateAdminPeerInfo(peers, node, codec)
|
populateAdminPeerInfo(peers, node, some(codec))
|
||||||
|
|
||||||
return peers
|
return peers
|
||||||
|
|
||||||
proc installAdminV1GetPeersHandler(router: var RestRouter, node: WakuNode) =
|
proc installAdminV1GetPeersHandler(router: var RestRouter, node: WakuNode) =
|
||||||
router.api(MethodGet, ROUTE_ADMIN_V1_PEERS) do() -> RestApiResponse:
|
router.api(MethodGet, ROUTE_ADMIN_V1_PEERS) do() -> RestApiResponse:
|
||||||
let peers = populateAdminPeerInfoForCodecs(
|
let peers = populateAdminPeerInfoForAll(node)
|
||||||
node,
|
|
||||||
@[
|
|
||||||
WakuRelayCodec, WakuFilterSubscribeCodec, WakuStoreCodec, WakuLegacyStoreCodec,
|
|
||||||
WakuLegacyLightPushCodec, WakuLightPushCodec, WakuPeerExchangeCodec,
|
|
||||||
WakuReconciliationCodec,
|
|
||||||
],
|
|
||||||
)
|
|
||||||
|
|
||||||
let resp = RestApiResponse.jsonResponse(peers, status = Http200)
|
let resp = RestApiResponse.jsonResponse(peers, status = Http200).valueOr:
|
||||||
if resp.isErr():
|
error "An error occurred while building the json response: ", error = error
|
||||||
error "An error occurred while building the json response: ", error = resp.error
|
|
||||||
return RestApiResponse.internalServerError(
|
return RestApiResponse.internalServerError(
|
||||||
fmt("An error occurred while building the json response: {resp.error}")
|
fmt("An error occurred while building the json response: {error}")
|
||||||
)
|
)
|
||||||
|
|
||||||
return resp.get()
|
return resp
|
||||||
|
|
||||||
router.api(MethodGet, ROUTE_ADMIN_V1_SINGLE_PEER) do(
|
router.api(MethodGet, ROUTE_ADMIN_V1_SINGLE_PEER) do(
|
||||||
peerId: string
|
peerId: string
|
||||||
@ -115,19 +118,18 @@ proc installAdminV1GetPeersHandler(router: var RestRouter, node: WakuNode) =
|
|||||||
if node.peerManager.switch.peerStore.peerExists(peerIdVal):
|
if node.peerManager.switch.peerStore.peerExists(peerIdVal):
|
||||||
let peerInfo = node.peerManager.switch.peerStore.getPeer(peerIdVal)
|
let peerInfo = node.peerManager.switch.peerStore.getPeer(peerIdVal)
|
||||||
let peer = WakuPeer.init(peerInfo)
|
let peer = WakuPeer.init(peerInfo)
|
||||||
let resp = RestApiResponse.jsonResponse(peer, status = Http200)
|
let resp = RestApiResponse.jsonResponse(peer, status = Http200).valueOr:
|
||||||
if resp.isErr():
|
error "An error occurred while building the json response: ", error = error
|
||||||
error "An error occurred while building the json response: ", error = resp.error
|
|
||||||
return RestApiResponse.internalServerError(
|
return RestApiResponse.internalServerError(
|
||||||
fmt("An error occurred while building the json response: {resp.error}")
|
fmt("An error occurred while building the json response: {error}")
|
||||||
)
|
)
|
||||||
|
|
||||||
return resp.get()
|
return resp
|
||||||
else:
|
else:
|
||||||
return RestApiResponse.notFound(fmt("Peer with ID {peerId} not found"))
|
return RestApiResponse.notFound(fmt("Peer with ID {peerId} not found"))
|
||||||
|
|
||||||
router.api(MethodGet, ROUTE_ADMIN_V1_CONNECTED_PEERS) do() -> RestApiResponse:
|
router.api(MethodGet, ROUTE_ADMIN_V1_SERVICE_PEERS) do() -> RestApiResponse:
|
||||||
let allPeers = populateAdminPeerInfoForCodecs(
|
let peers = populateAdminPeerInfoForCodecs(
|
||||||
node,
|
node,
|
||||||
@[
|
@[
|
||||||
WakuRelayCodec, WakuFilterSubscribeCodec, WakuStoreCodec, WakuLegacyStoreCodec,
|
WakuRelayCodec, WakuFilterSubscribeCodec, WakuStoreCodec, WakuLegacyStoreCodec,
|
||||||
@ -136,16 +138,26 @@ proc installAdminV1GetPeersHandler(router: var RestRouter, node: WakuNode) =
|
|||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
let connectedPeers = allPeers.filterIt(it.connected == Connectedness.Connected)
|
let resp = RestApiResponse.jsonResponse(peers, status = Http200).valueOr:
|
||||||
|
error "An error occurred while building the json response: ", error = error
|
||||||
let resp = RestApiResponse.jsonResponse(connectedPeers, status = Http200)
|
|
||||||
if resp.isErr():
|
|
||||||
error "An error occurred while building the json response: ", error = resp.error
|
|
||||||
return RestApiResponse.internalServerError(
|
return RestApiResponse.internalServerError(
|
||||||
fmt("An error occurred while building the json response: {resp.error}")
|
fmt("An error occurred while building the json response: {error}")
|
||||||
)
|
)
|
||||||
|
|
||||||
return resp.get()
|
return resp
|
||||||
|
|
||||||
|
router.api(MethodGet, ROUTE_ADMIN_V1_CONNECTED_PEERS) do() -> RestApiResponse:
|
||||||
|
let allPeers = populateAdminPeerInfoForAll(node)
|
||||||
|
|
||||||
|
let connectedPeers = allPeers.filterIt(it.connected == Connectedness.Connected)
|
||||||
|
|
||||||
|
let resp = RestApiResponse.jsonResponse(connectedPeers, status = Http200).valueOr:
|
||||||
|
error "An error occurred while building the json response: ", error = error
|
||||||
|
return RestApiResponse.internalServerError(
|
||||||
|
fmt("An error occurred while building the json response: {error}")
|
||||||
|
)
|
||||||
|
|
||||||
|
return resp
|
||||||
|
|
||||||
router.api(MethodGet, ROUTE_ADMIN_V1_CONNECTED_PEERS_ON_SHARD) do(
|
router.api(MethodGet, ROUTE_ADMIN_V1_CONNECTED_PEERS_ON_SHARD) do(
|
||||||
shardId: uint16
|
shardId: uint16
|
||||||
@ -153,29 +165,21 @@ proc installAdminV1GetPeersHandler(router: var RestRouter, node: WakuNode) =
|
|||||||
let shard = shardId.valueOr:
|
let shard = shardId.valueOr:
|
||||||
return RestApiResponse.badRequest(fmt("Invalid shardId: {error}"))
|
return RestApiResponse.badRequest(fmt("Invalid shardId: {error}"))
|
||||||
|
|
||||||
let allPeers = populateAdminPeerInfoForCodecs(
|
let allPeers = populateAdminPeerInfoForAll(node)
|
||||||
node,
|
|
||||||
@[
|
|
||||||
WakuRelayCodec, WakuFilterSubscribeCodec, WakuStoreCodec, WakuLegacyStoreCodec,
|
|
||||||
WakuLegacyLightPushCodec, WakuLightPushCodec, WakuPeerExchangeCodec,
|
|
||||||
WakuReconciliationCodec,
|
|
||||||
],
|
|
||||||
)
|
|
||||||
|
|
||||||
let connectedPeers = allPeers.filterIt(
|
let connectedPeers = allPeers.filterIt(
|
||||||
it.connected == Connectedness.Connected and it.shards.contains(shard)
|
it.connected == Connectedness.Connected and it.shards.contains(shard)
|
||||||
)
|
)
|
||||||
|
|
||||||
let resp = RestApiResponse.jsonResponse(connectedPeers, status = Http200)
|
let resp = RestApiResponse.jsonResponse(connectedPeers, status = Http200).valueOr:
|
||||||
if resp.isErr():
|
error "An error occurred while building the json response: ", error = error
|
||||||
error "An error occurred while building the json response: ", error = resp.error
|
|
||||||
return RestApiResponse.internalServerError(
|
return RestApiResponse.internalServerError(
|
||||||
fmt("An error occurred while building the json response: {resp.error}")
|
fmt("An error occurred while building the json response: {error}")
|
||||||
)
|
)
|
||||||
|
|
||||||
return resp.get()
|
return resp
|
||||||
|
|
||||||
router.api(MethodGet, ROUTE_ADMIN_V1_CONNECTED_RELAY_PEERS) do() -> RestApiResponse:
|
router.api(MethodGet, ROUTE_ADMIN_V1_RELAY_PEERS) do() -> RestApiResponse:
|
||||||
if node.wakuRelay.isNil():
|
if node.wakuRelay.isNil():
|
||||||
return RestApiResponse.serviceUnavailable(
|
return RestApiResponse.serviceUnavailable(
|
||||||
"Error: Relay Protocol is not mounted to the node"
|
"Error: Relay Protocol is not mounted to the node"
|
||||||
@ -195,16 +199,15 @@ proc installAdminV1GetPeersHandler(router: var RestRouter, node: WakuNode) =
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
let resp = RestApiResponse.jsonResponse(relayPeers, status = Http200)
|
let resp = RestApiResponse.jsonResponse(relayPeers, status = Http200).valueOr:
|
||||||
if resp.isErr():
|
error "An error occurred while building the json response: ", error = error
|
||||||
error "An error occurred while building the json response: ", error = resp.error
|
|
||||||
return RestApiResponse.internalServerError(
|
return RestApiResponse.internalServerError(
|
||||||
fmt("An error occurred while building the json response: {resp.error}")
|
fmt("An error occurred while building the json response: {error}")
|
||||||
)
|
)
|
||||||
|
|
||||||
return resp.get()
|
return resp
|
||||||
|
|
||||||
router.api(MethodGet, ROUTE_ADMIN_V1_CONNECTED_RELAY_PEERS_ON_SHARD) do(
|
router.api(MethodGet, ROUTE_ADMIN_V1_RELAY_PEERS_ON_SHARD) do(
|
||||||
shardId: uint16
|
shardId: uint16
|
||||||
) -> RestApiResponse:
|
) -> RestApiResponse:
|
||||||
let shard = shardId.valueOr:
|
let shard = shardId.valueOr:
|
||||||
@ -223,14 +226,13 @@ proc installAdminV1GetPeersHandler(router: var RestRouter, node: WakuNode) =
|
|||||||
shard: shard, peers: toSeq(pubsubPeers).mapIt(WakuPeer.init(it, node.peerManager))
|
shard: shard, peers: toSeq(pubsubPeers).mapIt(WakuPeer.init(it, node.peerManager))
|
||||||
)
|
)
|
||||||
|
|
||||||
let resp = RestApiResponse.jsonResponse(relayPeer, status = Http200)
|
let resp = RestApiResponse.jsonResponse(relayPeer, status = Http200).valueOr:
|
||||||
if resp.isErr():
|
error "An error occurred while building the json response: ", error = error
|
||||||
error "An error occurred while building the json response: ", error = resp.error
|
|
||||||
return RestApiResponse.internalServerError(
|
return RestApiResponse.internalServerError(
|
||||||
fmt("An error occurred while building the json response: {resp.error}")
|
fmt("An error occurred while building the json response: {error}")
|
||||||
)
|
)
|
||||||
|
|
||||||
return resp.get()
|
return resp
|
||||||
|
|
||||||
router.api(MethodGet, ROUTE_ADMIN_V1_MESH_PEERS) do() -> RestApiResponse:
|
router.api(MethodGet, ROUTE_ADMIN_V1_MESH_PEERS) do() -> RestApiResponse:
|
||||||
if node.wakuRelay.isNil():
|
if node.wakuRelay.isNil():
|
||||||
@ -252,14 +254,13 @@ proc installAdminV1GetPeersHandler(router: var RestRouter, node: WakuNode) =
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
let resp = RestApiResponse.jsonResponse(relayPeers, status = Http200)
|
let resp = RestApiResponse.jsonResponse(relayPeers, status = Http200).valueOr:
|
||||||
if resp.isErr():
|
error "An error occurred while building the json response: ", error = error
|
||||||
error "An error occurred while building the json response: ", error = resp.error
|
|
||||||
return RestApiResponse.internalServerError(
|
return RestApiResponse.internalServerError(
|
||||||
fmt("An error occurred while building the json response: {resp.error}")
|
fmt("An error occurred while building the json response: {error}")
|
||||||
)
|
)
|
||||||
|
|
||||||
return resp.get()
|
return resp
|
||||||
|
|
||||||
router.api(MethodGet, ROUTE_ADMIN_V1_MESH_PEERS_ON_SHARD) do(
|
router.api(MethodGet, ROUTE_ADMIN_V1_MESH_PEERS_ON_SHARD) do(
|
||||||
shardId: uint16
|
shardId: uint16
|
||||||
@ -280,14 +281,13 @@ proc installAdminV1GetPeersHandler(router: var RestRouter, node: WakuNode) =
|
|||||||
shard: shard, peers: toSeq(peers).mapIt(WakuPeer.init(it, node.peerManager))
|
shard: shard, peers: toSeq(peers).mapIt(WakuPeer.init(it, node.peerManager))
|
||||||
)
|
)
|
||||||
|
|
||||||
let resp = RestApiResponse.jsonResponse(relayPeer, status = Http200)
|
let resp = RestApiResponse.jsonResponse(relayPeer, status = Http200).valueOr:
|
||||||
if resp.isErr():
|
error "An error occurred while building the json response: ", error = error
|
||||||
error "An error occurred while building the json response: ", error = resp.error
|
|
||||||
return RestApiResponse.internalServerError(
|
return RestApiResponse.internalServerError(
|
||||||
fmt("An error occurred while building the json response: {resp.error}")
|
fmt("An error occurred while building the json response: {error}")
|
||||||
)
|
)
|
||||||
|
|
||||||
return resp.get()
|
return resp
|
||||||
|
|
||||||
proc installAdminV1PostPeersHandler(router: var RestRouter, node: WakuNode) =
|
proc installAdminV1PostPeersHandler(router: var RestRouter, node: WakuNode) =
|
||||||
router.api(MethodPost, ROUTE_ADMIN_V1_PEERS) do(
|
router.api(MethodPost, ROUTE_ADMIN_V1_PEERS) do(
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user