|
1 | 1 | import {type CallFrameValidationMode, Rpc, EvmRpcDataSource, EvmRpcClient} from '@subsquid/evm-rpc' |
2 | 2 | import type {Block, DataSource} from '@subsquid/util-internal-data-service' |
3 | 3 | import {createLogger} from '@subsquid/logger' |
| 4 | +import type {RpcMetrics} from '@subsquid/rpc-client' |
4 | 5 | import {Mapping} from './mapping' |
5 | 6 |
|
6 | 7 |
|
@@ -36,7 +37,13 @@ export interface DataSourceOptions { |
36 | 37 | } |
37 | 38 |
|
38 | 39 |
|
39 | | -export function createDataSource(options: DataSourceOptions): DataSource<Block> { |
| 40 | +export interface DataSourceSetup { |
| 41 | + source: DataSource<Block> |
| 42 | + getRpcMetrics(): RpcMetrics |
| 43 | +} |
| 44 | + |
| 45 | + |
| 46 | +export function createDataSource(options: DataSourceOptions): DataSourceSetup { |
40 | 47 | let httpRpcClient = new EvmRpcClient({ |
41 | 48 | url: options.httpRpc, |
42 | 49 | maxBatchCallSize: options.httpRpcMaxBatchCallSize, |
@@ -78,8 +85,12 @@ export function createDataSource(options: DataSourceOptions): DataSource<Block> |
78 | 85 | strideSize: options.httpRpcStrideSize, |
79 | 86 | strideConcurrency: options.httpRpcStrideConcurrency |
80 | 87 | }) |
81 | | - return new Mapping(rpcSource, { |
| 88 | + let source = new Mapping(rpcSource, { |
82 | 89 | withTraces: options.withTraces, |
83 | 90 | withStateDiffs: options.withStatediffs, |
84 | 91 | }) |
| 92 | + return { |
| 93 | + source, |
| 94 | + getRpcMetrics: () => httpRpcClient.getMetrics() |
| 95 | + } |
85 | 96 | } |
0 commit comments