Skip to content
This repository was archived by the owner on Aug 12, 2023. It is now read-only.

Commit 07d04d7

Browse files
committed
Add endpoints for active relayers and traded tokens
1 parent beb7a09 commit 07d04d7

File tree

3 files changed

+137
-0
lines changed

3 files changed

+137
-0
lines changed

src/app/routes/v1/metrics.js

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ const Router = require('koa-router');
33

44
const { TIME_PERIOD } = require('../../../constants');
55
const checkTraderExists = require('../../../traders/check-trader-exists');
6+
const getActiveRelayerMetrics = require('../../../metrics/get-active-relayer-metrics');
7+
const getTradedTokenMetrics = require('../../../metrics/get-traded-token-metrics');
68
const getActiveTraderMetrics = require('../../../metrics/get-active-trader-metrics');
79
const getAssetBridgeMetrics = require('../../../metrics/get-asset-bridge-metrics');
810
const getAssetBridgingMetrics = require('../../../asset-bridges/get-asset-bridging-metrics');
@@ -237,6 +239,40 @@ const createRouter = () => {
237239
},
238240
);
239241

242+
router.get(
243+
'/active-relayer',
244+
middleware.timePeriod('period', TIME_PERIOD.MONTH),
245+
middleware.metricGranularity({
246+
period: 'period',
247+
granularity: 'granularity',
248+
}),
249+
async ({ params, response }, next) => {
250+
const { granularity, period } = params;
251+
const metrics = await getActiveRelayerMetrics(period, granularity);
252+
253+
response.body = metrics;
254+
255+
await next();
256+
},
257+
);
258+
259+
router.get(
260+
'/traded-token',
261+
middleware.timePeriod('period', TIME_PERIOD.MONTH),
262+
middleware.metricGranularity({
263+
period: 'period',
264+
granularity: 'granularity',
265+
}),
266+
async ({ params, response }, next) => {
267+
const { granularity, period } = params;
268+
const metrics = await getTradedTokenMetrics(period, granularity);
269+
270+
response.body = metrics;
271+
272+
await next();
273+
},
274+
);
275+
240276
return router;
241277
};
242278

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
const elasticsearch = require('../util/elasticsearch');
2+
const getDatesForMetrics = require('../util/get-dates-for-metrics');
3+
4+
const getActiveRelayerMetrics = async (period, granularity) => {
5+
const { dateFrom, dateTo } = getDatesForMetrics(period, granularity);
6+
7+
const results = await elasticsearch.getClient().search({
8+
body: {
9+
query: {
10+
bool: {
11+
filter: [
12+
{
13+
range: {
14+
date: {
15+
gte: dateFrom,
16+
lte: dateTo,
17+
},
18+
},
19+
},
20+
{ exists: { field: 'relayerId' } },
21+
],
22+
},
23+
},
24+
aggs: {
25+
metrics_by_date: {
26+
date_histogram: {
27+
field: 'date',
28+
calendar_interval: granularity,
29+
extended_bounds: {
30+
min: dateFrom,
31+
max: dateTo,
32+
},
33+
},
34+
aggs: {
35+
relayerCount: {
36+
cardinality: {
37+
field: 'relayerId',
38+
},
39+
},
40+
},
41+
},
42+
},
43+
},
44+
index: 'fills',
45+
size: 0,
46+
});
47+
48+
return results.body.aggregations.metrics_by_date.buckets.map(x => ({
49+
activeRelayers: x.relayerCount.value,
50+
date: new Date(x.key_as_string),
51+
}));
52+
};
53+
54+
module.exports = getActiveRelayerMetrics;
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
const elasticsearch = require('../util/elasticsearch');
2+
const getDatesForMetrics = require('../util/get-dates-for-metrics');
3+
4+
const getTradedTokenMetrics = async (period, granularity) => {
5+
const { dateFrom, dateTo } = getDatesForMetrics(period, granularity);
6+
7+
const results = await elasticsearch.getClient().search({
8+
body: {
9+
query: {
10+
range: {
11+
date: {
12+
gte: dateFrom,
13+
lte: dateTo,
14+
},
15+
},
16+
},
17+
aggs: {
18+
metrics_by_date: {
19+
date_histogram: {
20+
field: 'date',
21+
calendar_interval: granularity,
22+
extended_bounds: {
23+
min: dateFrom,
24+
max: dateTo,
25+
},
26+
},
27+
aggs: {
28+
tokenCount: {
29+
cardinality: {
30+
field: 'assets.tokenAddress',
31+
},
32+
},
33+
},
34+
},
35+
},
36+
},
37+
index: 'fills',
38+
size: 0,
39+
});
40+
41+
return results.body.aggregations.metrics_by_date.buckets.map(x => ({
42+
date: new Date(x.key_as_string),
43+
tradedTokens: x.tokenCount.value,
44+
}));
45+
};
46+
47+
module.exports = getTradedTokenMetrics;

0 commit comments

Comments
 (0)