From 92d122bc50cfdad9878b5edaed543df651c4f2ca Mon Sep 17 00:00:00 2001 From: gmega Date: Mon, 22 Jun 2026 14:32:27 -0300 Subject: [PATCH] chore: unify debug endpoints across REST and logos module APIs --- .../requests/node_debug_request.nim | 15 ++--------- openapi.yaml | 4 --- storage/rest/api.nim | 26 ++++-------------- storage/rest/json.nim | 27 +++++++++++++++++++ storage/storage.nim | 2 ++ storage/utils/json.nim | 5 ++-- 6 files changed, 39 insertions(+), 40 deletions(-) diff --git a/library/storage_thread_requests/requests/node_debug_request.nim b/library/storage_thread_requests/requests/node_debug_request.nim index 8bf3106c..a60b34bf 100644 --- a/library/storage_thread_requests/requests/node_debug_request.nim +++ b/library/storage_thread_requests/requests/node_debug_request.nim @@ -49,19 +49,8 @@ proc destroyShared(self: ptr NodeDebugRequest) = proc getDebug( storage: ptr StorageServer ): Future[Result[string, string]] {.async: (raises: []).} = - let node = storage[].node - let table = RestRoutingTable.init(node.discovery.protocol.routingTable) - - let json = %*{ - "id": $node.switch.peerInfo.peerId, - "addrs": node.switch.peerInfo.addrs.mapIt($it), - "spr": - if node.discovery.dhtRecord.isSome: node.discovery.dhtRecord.get.toURI else: "", - "announceAddresses": node.discovery.announceAddrs, - "table": table, - } - - return ok($json) + let nodeInfo = %DebugInfo.init(storage[].node) + return ok($nodeInfo) proc getPeer( storage: ptr StorageServer, peerId: cstring diff --git a/openapi.yaml b/openapi.yaml index 041127ee..e4560e96 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -103,7 +103,6 @@ components: required: - id - addrs - - repo - spr - announceAddresses - table @@ -115,9 +114,6 @@ components: type: array items: $ref: "#/components/schemas/MultiAddress" - repo: - type: string - description: Path of the data repository where all nodes data are stored spr: $ref: "#/components/schemas/SPR" announceAddresses: diff --git a/storage/rest/api.nim b/storage/rest/api.nim index af13d71f..9b4e0ef1 100644 --- a/storage/rest/api.nim +++ b/storage/rest/api.nim @@ -557,7 +557,7 @@ proc initNodeApi(node: StorageNodeRef, conf: StorageConf, router: var RestRouter return RestApiResponse.error(Http500, "Unknown error dialling peer", headers = headers) -proc initDebugApi(node: StorageNodeRef, conf: StorageConf, router: var RestRouter) = +proc initDebugApi(node: StorageNodeRef, router: var RestRouter) = let allowedOrigin = router.allowedOrigin router.api(MethodGet, "/api/storage/v1/debug/info") do() -> RestApiResponse: @@ -566,27 +566,11 @@ proc initDebugApi(node: StorageNodeRef, conf: StorageConf, router: var RestRoute var headers = buildCorsHeaders("GET", allowedOrigin) try: - let table = RestRoutingTable.init(node.discovery.protocol.routingTable) - - let json = %*{ - "id": $node.switch.peerInfo.peerId, - "addrs": node.switch.peerInfo.addrs.mapIt($it), - "repo": $conf.dataDir, - "spr": - if node.discovery.dhtRecord.isSome: node.discovery.dhtRecord.get.toURI else: "", - "providerRecord": - if node.discovery.providerRecord.isSome: - node.discovery.providerRecord.get.toURI - else: - "", - "announceAddresses": node.discovery.announceAddrs, - "table": table, - "storage": {"version": $storageVersion, "revision": $storageRevision}, - } - # return pretty json for human readability return RestApiResponse.response( - json.pretty(), contentType = "application/json", headers = headers + DebugInfo.init(node).toJson(pretty = true), + contentType = "application/json", + headers = headers, ) except CatchableError as exc: trace "Excepting processing request", exc = exc.msg @@ -648,6 +632,6 @@ proc initRestApi*( initDataApi(node, repoStore, router) initNodeApi(node, conf, router) - initDebugApi(node, conf, router) + initDebugApi(node, router) return router diff --git a/storage/rest/json.nim b/storage/rest/json.nim index 6a65b7b3..f782a8fb 100644 --- a/storage/rest/json.nim +++ b/storage/rest/json.nim @@ -2,6 +2,8 @@ import pkg/questionable import pkg/libp2p import pkg/codexdht/discv5/node as dn import pkg/codexdht/discv5/routing_table as rt +import ../node +import ../conf import ../utils/json import ../manifest import ../units @@ -41,6 +43,20 @@ type quotaUsedBytes* {.serialize.}: NBytes quotaReservedBytes* {.serialize.}: NBytes + VersionInfo* = object + version* {.serialize.}: string + revision* {.serialize.}: string + + DebugInfo* = object + id* {.serialize.}: PeerId + addrs* {.serialize.}: seq[MultiAddress] + repo* {.serialize.}: string + spr* {.serialize.}: Option[SignedPeerRecord] + providerRecord* {.serialize.}: Option[SignedPeerRecord] + announceAddresses* {.serialize.}: seq[MultiAddress] + table* {.serialize.}: RestRoutingTable + storage* {.serialize.}: VersionInfo + proc init*(_: type RestContentList, content: seq[RestContent]): RestContentList = RestContentList(content: content) @@ -74,3 +90,14 @@ proc init*(_: type RestNodeId, id: NodeId): RestNodeId = proc `%`*(obj: RestNodeId): JsonNode = % $obj.id + +proc init*(_: type DebugInfo, node: StorageNodeRef): DebugInfo = + DebugInfo( + id: node.switch.peerInfo.peerId, + addrs: node.switch.peerInfo.addrs, + spr: node.discovery.dhtRecord, + providerRecord: node.discovery.providerRecord, + announceAddresses: node.discovery.announceAddrs, + table: RestRoutingTable.init(node.discovery.protocol.routingTable), + storage: VersionInfo(version: $storageVersion, revision: $storageRevision), + ) diff --git a/storage/storage.nim b/storage/storage.nim index 558f24b1..57f7c894 100644 --- a/storage/storage.nim +++ b/storage/storage.nim @@ -103,6 +103,8 @@ proc start*(s: StorageServer) {.async.} = raise newException(StorageError, "Failed to load Mix relay pool: " & error.msg) mixProto = MixProtocol.new(mixNodeInfo, switch) + info "Starting node with Mix relay pool", count = relayPool.len + for info in relayPool.values: mixProto.nodePool.add(info) diff --git a/storage/utils/json.nim b/storage/utils/json.nim index 1ee7147c..744994aa 100644 --- a/storage/utils/json.nim +++ b/storage/utils/json.nim @@ -3,6 +3,7 @@ from pkg/libp2p import Cid, PeerId, SignedPeerRecord, MultiAddress, AddressInfo, init, `$` import pkg/contractabi import pkg/codexdht/discv5/node as dn +import pkg/codexdht/discv5/spr as spr import pkg/serde/json import pkg/questionable/results import ../errors @@ -19,8 +20,8 @@ func `%`*(cid: Cid): JsonNode = func `%`*(obj: PeerId): JsonNode = % $obj -func `%`*(obj: SignedPeerRecord): JsonNode = - % $obj +proc `%`*(obj: SignedPeerRecord): JsonNode = + %obj.toURI func `%`*(obj: dn.Address): JsonNode = % $obj