2025-02-10 14:49:30 +01:00
|
|
|
import pkg/chronos
|
|
|
|
|
import pkg/questionable/results
|
|
|
|
|
|
2025-02-10 16:24:54 +01:00
|
|
|
import ./state
|
2025-02-13 10:49:50 +01:00
|
|
|
import ./services/clock
|
2025-02-12 13:25:37 +01:00
|
|
|
import ./services/metrics
|
|
|
|
|
import ./services/dht
|
2025-03-18 13:42:22 +01:00
|
|
|
|
|
|
|
|
import ./services/marketplace
|
|
|
|
|
|
2025-02-10 14:49:30 +01:00
|
|
|
import ./component
|
2025-03-19 15:52:50 +01:00
|
|
|
import ./components/dhtcrawler
|
2025-02-10 14:49:30 +01:00
|
|
|
import ./components/timetracker
|
2025-02-10 16:24:54 +01:00
|
|
|
import ./components/nodestore
|
2025-02-11 16:31:23 +01:00
|
|
|
import ./components/dhtmetrics
|
2025-02-12 13:50:12 +01:00
|
|
|
import ./components/todolist
|
2025-03-18 18:22:31 +01:00
|
|
|
import ./components/chainmetrics
|
2025-03-21 10:39:46 +01:00
|
|
|
import ./components/chaincrawler
|
|
|
|
|
import ./components/requeststore
|
2025-02-10 14:49:30 +01:00
|
|
|
|
2025-06-02 16:16:41 +02:00
|
|
|
proc createComponents*(
|
|
|
|
|
state: State
|
|
|
|
|
): Future[?!seq[Component]] {.async: (raises: [CancelledError]).} =
|
2025-02-10 14:49:30 +01:00
|
|
|
var components: seq[Component] = newSeq[Component]()
|
2025-02-13 10:49:50 +01:00
|
|
|
let clock = createClock()
|
|
|
|
|
|
2025-02-10 16:24:54 +01:00
|
|
|
without dht =? (await createDht(state)), err:
|
2025-02-10 14:49:30 +01:00
|
|
|
return failure(err)
|
|
|
|
|
|
2025-02-13 10:49:50 +01:00
|
|
|
without nodeStore =? createNodeStore(state, clock), err:
|
2025-02-10 16:24:54 +01:00
|
|
|
return failure(err)
|
|
|
|
|
|
2025-03-24 14:11:32 +01:00
|
|
|
without requestStore =? createRequestStore(state), err:
|
2025-03-21 10:39:46 +01:00
|
|
|
return failure(err)
|
|
|
|
|
|
2025-02-12 13:25:37 +01:00
|
|
|
let
|
|
|
|
|
metrics = createMetrics(state.config.metricsAddress, state.config.metricsPort)
|
2025-02-12 15:16:59 +01:00
|
|
|
todoList = createTodoList(state, metrics)
|
2025-03-20 15:27:17 +01:00
|
|
|
marketplace = createMarketplace(state, clock)
|
2025-03-24 14:11:32 +01:00
|
|
|
chainMetrics = ChainMetrics.new(state, metrics, requestStore, marketplace)
|
2025-02-11 14:02:30 +01:00
|
|
|
|
2025-02-11 16:31:23 +01:00
|
|
|
without dhtMetrics =? createDhtMetrics(state, metrics), err:
|
|
|
|
|
return failure(err)
|
|
|
|
|
|
2025-02-12 14:43:12 +01:00
|
|
|
components.add(dht)
|
2025-02-12 13:25:37 +01:00
|
|
|
components.add(todoList)
|
2025-02-10 16:24:54 +01:00
|
|
|
components.add(nodeStore)
|
2025-03-19 15:52:50 +01:00
|
|
|
components.add(DhtCrawler.new(state, dht, todoList))
|
2025-02-13 10:49:50 +01:00
|
|
|
components.add(TimeTracker.new(state, nodeStore, dht, clock))
|
2025-02-11 16:31:23 +01:00
|
|
|
components.add(dhtMetrics)
|
2025-03-18 14:55:52 +01:00
|
|
|
components.add(marketplace)
|
2025-03-18 18:22:31 +01:00
|
|
|
components.add(chainMetrics)
|
2025-03-21 10:39:46 +01:00
|
|
|
components.add(ChainCrawler.new(state, requestStore, marketplace))
|
2025-02-12 13:50:12 +01:00
|
|
|
|
2025-02-10 14:49:30 +01:00
|
|
|
return success(components)
|