Adds endpoint

This commit is contained in:
benbierens 2023-10-09 10:58:23 +02:00
parent 040434aa19
commit 0da746de7c
No known key found for this signature in database
GPG Key ID: FE44815D96D0A1AA
2 changed files with 36 additions and 3 deletions

View File

@ -93,6 +93,26 @@ proc formatPeerRecord(peerRecord: PeerRecord): JsonNode =
}
return jobj
proc formatBlockExchangePeers(peers: OrderedTable[PeerId, BlockExcPeerCtx]): JsonNode =
let jarray = newJArray()
for peerId, peerContext in peers.pairs:
let jblocksArray = newJArray()
for cid, presence in peerContext.blocks:
jblocksArray.add(%*{
"cid": $presence.cid,
"have": $presence.have,
"price": $presence.price
})
jarray.add(%*{
"peerid": $peerId,
"hasBlocks": jblocksArray,
"wants": $peerContext.peerWants.len,
"exchanged": $peerContext.exchanged,
})
return jarray
proc initRestApi*(node: CodexNodeRef, conf: CodexConf): RestRouter =
var router = RestRouter.init(validate)
router.api(
@ -321,6 +341,16 @@ proc initRestApi*(node: CodexNodeRef, conf: CodexConf): RestRouter =
trace "debug/peer returning peer record"
return RestApiResponse.response($json)
router.api(
MethodGet,
"/api/codex/v1/debug/blockexchange") do () -> RestApiResponse:
let json = %*{
"peers": formatBlockExchangePeers(node.engine.peers.peers),
"taskQueue": $node.engine.taskQueue.len,
"pendingBlocks": $node.engine.pendingBlocks.blocks.len
}
return RestApiResponse.response($json)
router.api(
MethodGet,
"/api/codex/v1/sales/slots") do () -> RestApiResponse:

View File

@ -294,10 +294,13 @@ method listBlocks*(
await idleAsync()
iter.finished = queryIter.finished
if not queryIter.finished:
if pair =? (await queryIter.next()) and cid =? pair.key:
if pair =? (await queryIter.next()) and key =? pair.key:
doAssert pair.data.len == 0
trace "Retrieved record from repo", cid
return Cid.init(cid.value).option
trace "Retrieved record from repo", key
without cid =? Cid.init(key.value):
error "Could not init Cid for key", key
raise Defect.newException("Repostore: Could not init Cid from key during listBlocks iteration.")
return cid.option
return Cid.none