diff --git a/codexcrawler/application.nim b/codexcrawler/application.nim index 5ef5fab..1593a0c 100644 --- a/codexcrawler/application.nim +++ b/codexcrawler/application.nim @@ -44,8 +44,10 @@ proc initializeLists(app: Application): Future[?!void] {.async.} = # The use of global state in nim-metrics is not pleasant. proc onTodoMetric(value: int64) = todoNodesGauge.set(value) + proc onOkMetric(value: int64) = okNodesGauge.set(value) + proc onNokMetric(value: int64) = nokNodesGauge.set(value) diff --git a/codexcrawler/config.nim b/codexcrawler/config.nim index 1fa4328..8f648f7 100644 --- a/codexcrawler/config.nim +++ b/codexcrawler/config.nim @@ -6,7 +6,7 @@ let doc = Codex Network Crawler. Generates network metrics. Usage: - codexcrawler [--logLevel=] [--metricsAddress=] [--metricsPort=

] [--dataDir=

] [--discoveryPort=

] + codexcrawler [--logLevel=] [--metricsAddress=] [--metricsPort=

] [--dataDir=

] [--discoveryPort=

] [--bootNodes=] Options: --logLevel= Sets log level [default: TRACE] @@ -14,6 +14,7 @@ Options: --metricsPort=

Listen HTTP port of the metrics server [default: 8008] --dataDir=

Directory for storing data [default: crawler_data] --discoveryPort=

Port used for DHT [default: 8090] + --bootNodes= Semi-colon-separated list of Codex bootstrap SPRs [default: testnet_sprs] """ import strutils @@ -25,11 +26,29 @@ type CrawlerConfig* = ref object metricsPort*: Port dataDir*: string discPort*: Port + bootNodes*: seq[string] proc `$`*(config: CrawlerConfig): string = "CrawlerConfig:" & " logLevel=" & config.logLevel & " metricsAddress=" & $config.metricsAddress & " metricsPort=" & $config.metricsPort & " dataDir=" & - config.dataDir & " discPort=" & $config.discPort + config.dataDir & " discPort=" & $config.discPort & " bootNodes=" & + config.bootNodes.join(";") + +proc getDefaultTestnetBootNodes(): seq[string] = + @[ + "spr:CiUIAhIhAiJvIcA_ZwPZ9ugVKDbmqwhJZaig5zKyLiuaicRcCGqLEgIDARo8CicAJQgCEiECIm8hwD9nA9n26BUoNuarCEllqKDnMrIuK5qJxFwIaosQ3d6esAYaCwoJBJ_f8zKRAnU6KkYwRAIgM0MvWNJL296kJ9gWvfatfmVvT-A7O2s8Mxp8l9c8EW0CIC-h-H-jBVSgFjg3Eny2u33qF7BDnWFzo7fGfZ7_qc9P", + "spr:CiUIAhIhAyUvcPkKoGE7-gh84RmKIPHJPdsX5Ugm_IHVJgF-Mmu_EgIDARo8CicAJQgCEiEDJS9w-QqgYTv6CHzhGYog8ck92xflSCb8gdUmAX4ya78QoemesAYaCwoJBES39Q2RAnVOKkYwRAIgLi3rouyaZFS_Uilx8k99ySdQCP1tsmLR21tDb9p8LcgCIG30o5YnEooQ1n6tgm9fCT7s53k6XlxyeSkD_uIO9mb3", + "spr:CiUIAhIhA6_j28xa--PvvOUxH10wKEm9feXEKJIK3Z9JQ5xXgSD9EgIDARo8CicAJQgCEiEDr-PbzFr74--85TEfXTAoSb195cQokgrdn0lDnFeBIP0QzOGesAYaCwoJBK6Kf1-RAnVEKkcwRQIhAPUH5nQrqG4OW86JQWphdSdnPA98ErQ0hL9OZH9a4e5kAiBBZmUl9KnhSOiDgU3_hvjXrXZXoMxhGuZ92_rk30sNDA", + "spr:CiUIAhIhA7E4DEMer8nUOIUSaNPA4z6x0n9Xaknd28Cfw9S2-cCeEgIDARo8CicAJQgCEiEDsTgMQx6vydQ4hRJo08DjPrHSf1dqSd3bwJ_D1Lb5wJ4Qt_CesAYaCwoJBEDhWZORAnVYKkYwRAIgFNzhnftocLlVHJl1onuhbSUM7MysXPV6dawHAA0DZNsCIDRVu9gnPTH5UkcRXLtt7MLHCo4-DL-RCMyTcMxYBXL0", + "spr:CiUIAhIhAzZn3JmJab46BNjadVnLNQKbhnN3eYxwqpteKYY32SbOEgIDARo8CicAJQgCEiEDNmfcmYlpvjoE2Np1Wcs1ApuGc3d5jHCqm14phjfZJs4QrvWesAYaCwoJBKpA-TaRAnViKkcwRQIhANuMmZDD2c25xzTbKSirEpkZYoxbq-FU_lpI0K0e4mIVAiBfQX4yR47h1LCnHznXgDs6xx5DLO5q3lUcicqUeaqGeg", + "spr:CiUIAhIhAgybmRwboqDdUJjeZrzh43sn5mp8jt6ENIb08tLn4x01EgIDARo8CicAJQgCEiECDJuZHBuioN1QmN5mvOHjeyfmanyO3oQ0hvTy0ufjHTUQh4ifsAYaCwoJBI_0zSiRAnVsKkcwRQIhAJCb_z0E3RsnQrEePdJzMSQrmn_ooHv6mbw1DOh5IbVNAiBbBJrWR8eBV6ftzMd6ofa5khNA2h88OBhMqHCIzSjCeA", + "spr:CiUIAhIhAntGLadpfuBCD9XXfiN_43-V3L5VWgFCXxg4a8uhDdnYEgIDARo8CicAJQgCEiECe0Ytp2l-4EIP1dd-I3_jf5XcvlVaAUJfGDhry6EN2dgQsIufsAYaCwoJBNEmoCiRAnV2KkYwRAIgXO3bzd5VF8jLZG8r7dcLJ_FnQBYp1BcxrOvovEa40acCIDhQ14eJRoPwJ6GKgqOkXdaFAsoszl-HIRzYcXKeb7D9", + ] + +proc getBootNodes(input: string): seq[string] = + if input == "testnet_sprs": + return getDefaultTestnetBootNodes() + return input.split(";") proc parseConfig*(): CrawlerConfig = let args = docopt(doc, version = crawlerFullVersion) @@ -43,4 +62,5 @@ proc parseConfig*(): CrawlerConfig = metricsPort: Port(parseInt(get("--metricsPort"))), dataDir: get("--dataDir"), discPort: Port(parseInt(get("--discoveryPort"))), + bootNodes: getBootNodes(get("--bootNodes")), )