Skip to content

Commit 9fcbcc8

Browse files
authored
Add sql script latency metrics (#2356)
1 parent cc1b795 commit 9fcbcc8

22 files changed

+197
-9
lines changed

indexer/services/ender/__tests__/handlers/funding-handler.test.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,14 @@ describe('fundingHandler', () => {
233233
}));
234234
expect(stats.gauge).toHaveBeenCalledWith('ender.funding_index_update_event', 0.1, { ticker: 'BTC-USD' });
235235
expect(stats.gauge).toHaveBeenCalledWith('ender.funding_index_update', 0.1, { ticker: 'BTC-USD' });
236+
expect(stats.timing).toHaveBeenCalledWith(
237+
'ender.handle_funding_event.sql_latency',
238+
expect.any(Number),
239+
{
240+
className: 'FundingHandler',
241+
eventType: 'FundingEvent',
242+
},
243+
);
236244
});
237245

238246
it('successfully processes and clears cache for a new funding rate', async () => {

indexer/services/ender/src/handlers/asset-handler.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { stats } from '@dydxprotocol-indexer/base';
12
import {
23
AssetFromDatabase,
34
AssetModel,
@@ -6,6 +7,7 @@ import {
67
import { AssetCreateEventV1 } from '@dydxprotocol-indexer/v4-protos';
78
import * as pg from 'pg';
89

10+
import config from '../config';
911
import { ConsolidatedKafkaEvent } from '../lib/types';
1012
import { Handler } from './handler';
1113

@@ -18,6 +20,12 @@ export class AssetCreationHandler extends Handler<AssetCreateEventV1> {
1820

1921
// eslint-disable-next-line @typescript-eslint/require-await
2022
public async internalHandle(resultRow: pg.QueryResultRow): Promise<ConsolidatedKafkaEvent[]> {
23+
// Handle latency from resultRow
24+
stats.timing(
25+
`${config.SERVICE_NAME}.handle_asset_event.sql_latency`,
26+
Number(resultRow.latency),
27+
this.generateTimingStatsOptions(),
28+
);
2129
const asset: AssetFromDatabase = AssetModel.fromJson(
2230
resultRow.asset) as AssetFromDatabase;
2331
assetRefresher.addAsset(asset);

indexer/services/ender/src/handlers/funding-handler.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,13 @@ export class FundingHandler extends Handler<FundingEventMessage> {
141141
});
142142
stats.increment(`${config.SERVICE_NAME}.handle_funding_event.failure`, 1);
143143
}
144+
145+
// Handle latency from resultRow
146+
stats.timing(
147+
`${config.SERVICE_NAME}.handle_funding_event.sql_latency`,
148+
Number(resultRow.latency),
149+
this.generateTimingStatsOptions(),
150+
);
144151
}
145152

146153
await Promise.all(promises);

indexer/services/ender/src/handlers/liquidity-tier-handler.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { stats } from '@dydxprotocol-indexer/base';
12
import {
23
LiquidityTiersFromDatabase,
34
LiquidityTiersModel,
@@ -9,6 +10,7 @@ import { LiquidityTierUpsertEventV1, LiquidityTierUpsertEventV2 } from '@dydxpro
910
import _ from 'lodash';
1011
import * as pg from 'pg';
1112

13+
import config from '../config';
1214
import { generatePerpetualMarketMessage } from '../helpers/kafka-helper';
1315
import { ConsolidatedKafkaEvent } from '../lib/types';
1416
import { Handler } from './handler';
@@ -21,6 +23,12 @@ export class LiquidityTierHandlerBase<T> extends Handler<T> {
2123

2224
// eslint-disable-next-line @typescript-eslint/require-await
2325
public async internalHandle(resultRow: pg.QueryResultRow): Promise<ConsolidatedKafkaEvent[]> {
26+
// Handle latency from resultRow
27+
stats.timing(
28+
`${config.SERVICE_NAME}.handle_liquidity_tier_event.sql_latency`,
29+
Number(resultRow.latency),
30+
this.generateTimingStatsOptions(),
31+
);
2432
const liquidityTier: LiquidityTiersFromDatabase = LiquidityTiersModel.fromJson(
2533
resultRow.liquidity_tier,
2634
) as LiquidityTiersFromDatabase;

indexer/services/ender/src/handlers/markets/market-create-handler.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
import { logger } from '@dydxprotocol-indexer/base';
1+
import { logger, stats } from '@dydxprotocol-indexer/base';
22
import { MarketEventV1 } from '@dydxprotocol-indexer/v4-protos';
33
import * as pg from 'pg';
44

5+
import config from '../../config';
56
import { ConsolidatedKafkaEvent } from '../../lib/types';
67
import { Handler } from '../handler';
78

@@ -14,12 +15,18 @@ export class MarketCreateHandler extends Handler<MarketEventV1> {
1415
}
1516

1617
// eslint-disable-next-line @typescript-eslint/require-await
17-
public async internalHandle(_: pg.QueryResultRow): Promise<ConsolidatedKafkaEvent[]> {
18+
public async internalHandle(resultRow: pg.QueryResultRow): Promise<ConsolidatedKafkaEvent[]> {
1819
logger.info({
1920
at: 'MarketCreateHandler#handle',
2021
message: 'Received MarketEvent with MarketCreate.',
2122
event: this.event,
2223
});
24+
// Handle latency from resultRow
25+
stats.timing(
26+
`${config.SERVICE_NAME}.handle_market_create_event.sql_latency`,
27+
Number(resultRow.latency),
28+
this.generateTimingStatsOptions(),
29+
);
2330

2431
return [];
2532
}

indexer/services/ender/src/handlers/markets/market-modify-handler.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
import { logger } from '@dydxprotocol-indexer/base';
1+
import { logger, stats } from '@dydxprotocol-indexer/base';
22
import { MarketEventV1 } from '@dydxprotocol-indexer/v4-protos';
33
import * as pg from 'pg';
44

5+
import config from '../../config';
56
import { ConsolidatedKafkaEvent } from '../../lib/types';
67
import { Handler } from '../handler';
78

@@ -14,13 +15,20 @@ export class MarketModifyHandler extends Handler<MarketEventV1> {
1415
}
1516

1617
// eslint-disable-next-line @typescript-eslint/require-await
17-
public async internalHandle(_: pg.QueryResultRow): Promise<ConsolidatedKafkaEvent[]> {
18+
public async internalHandle(resultRow: pg.QueryResultRow): Promise<ConsolidatedKafkaEvent[]> {
1819
logger.info({
1920
at: 'MarketModifyHandler#handle',
2021
message: 'Received MarketEvent with MarketModify.',
2122
event: this.event,
2223
});
2324

25+
// Handle latency from resultRow
26+
stats.timing(
27+
`${config.SERVICE_NAME}.handle_market_modify_event.sql_latency`,
28+
Number(resultRow.latency),
29+
this.generateTimingStatsOptions(),
30+
);
31+
2432
return [];
2533
}
2634
}

indexer/services/ender/src/handlers/markets/market-price-update-handler.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { logger } from '@dydxprotocol-indexer/base';
1+
import { logger, stats } from '@dydxprotocol-indexer/base';
22
import {
33
MarketFromDatabase,
44
OraclePriceFromDatabase,
@@ -8,6 +8,7 @@ import {
88
import { MarketEventV1 } from '@dydxprotocol-indexer/v4-protos';
99
import * as pg from 'pg';
1010

11+
import config from '../../config';
1112
import { generateOraclePriceContents } from '../../helpers/kafka-helper';
1213
import {
1314
ConsolidatedKafkaEvent,
@@ -35,6 +36,13 @@ export class MarketPriceUpdateHandler extends Handler<MarketEventV1> {
3536
const oraclePrice: OraclePriceFromDatabase = OraclePriceModel.fromJson(
3637
resultRow.oracle_price) as OraclePriceFromDatabase;
3738

39+
// Handle latency from resultRow
40+
stats.timing(
41+
`${config.SERVICE_NAME}.handle_market_price_update_event.sql_latency`,
42+
Number(resultRow.latency),
43+
this.generateTimingStatsOptions(),
44+
);
45+
3846
return [
3947
this.generateKafkaEvent(
4048
oraclePrice, market.pair,

indexer/services/ender/src/handlers/order-fills/deleveraging-handler.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { logger } from '@dydxprotocol-indexer/base';
1+
import { logger, stats } from '@dydxprotocol-indexer/base';
22
import {
33
FillFromDatabase,
44
FillModel,
@@ -15,6 +15,7 @@ import {
1515
import { DeleveragingEventV1 } from '@dydxprotocol-indexer/v4-protos';
1616
import * as pg from 'pg';
1717

18+
import config from '../../config';
1819
import { SUBACCOUNT_ORDER_FILL_EVENT_TYPE } from '../../constants';
1920
import { annotateWithPnl, convertPerpetualPosition } from '../../helpers/kafka-helper';
2021
import { ConsolidatedKafkaEvent } from '../../lib/types';
@@ -95,6 +96,12 @@ export class DeleveragingHandler extends AbstractOrderFillHandler<DeleveragingEv
9596
liquidatedFill,
9697
),
9798
];
99+
// Handle latency from resultRow
100+
stats.timing(
101+
`${config.SERVICE_NAME}.handle_deleveraging_event.sql_latency`,
102+
Number(resultRow.latency),
103+
this.generateTimingStatsOptions(),
104+
);
98105
return kafkaEvents;
99106
}
100107
}

indexer/services/ender/src/handlers/order-fills/liquidation-handler.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { stats } from '@dydxprotocol-indexer/base';
12
import {
23
FillFromDatabase,
34
FillModel,
@@ -22,6 +23,7 @@ import { IndexerOrderId, LiquidationOrderV1 } from '@dydxprotocol-indexer/v4-pro
2223
import Long from 'long';
2324
import * as pg from 'pg';
2425

26+
import config from '../../config';
2527
import { STATEFUL_ORDER_ORDER_FILL_EVENT_TYPE, SUBACCOUNT_ORDER_FILL_EVENT_TYPE } from '../../constants';
2628
import { annotateWithPnl, convertPerpetualPosition } from '../../helpers/kafka-helper';
2729
import { redisClient } from '../../helpers/redis/redis-controller';
@@ -99,6 +101,12 @@ export class LiquidationHandler extends AbstractOrderFillHandler<OrderFillWithLi
99101
perpetualMarketRefresher.getPerpetualMarketsMap(),
100102
market,
101103
);
104+
// Handle latency from resultRow
105+
stats.timing(
106+
`${config.SERVICE_NAME}.handle_liquidation_event.sql_latency`,
107+
Number(resultRow.latency),
108+
this.generateTimingStatsOptions(),
109+
);
102110

103111
if (this.event.liquidity === Liquidity.MAKER) {
104112
// Must be done in this order, because fills refer to an order

indexer/services/ender/src/handlers/order-fills/order-handler.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { stats } from '@dydxprotocol-indexer/base';
12
import {
23
FillFromDatabase,
34
FillModel,
@@ -24,6 +25,7 @@ import {
2425
import Long from 'long';
2526
import * as pg from 'pg';
2627

28+
import config from '../../config';
2729
import { STATEFUL_ORDER_ORDER_FILL_EVENT_TYPE, SUBACCOUNT_ORDER_FILL_EVENT_TYPE } from '../../constants';
2830
import { annotateWithPnl, convertPerpetualPosition } from '../../helpers/kafka-helper';
2931
import { sendOrderFilledNotification } from '../../helpers/notifications/notifications-functions';
@@ -133,6 +135,13 @@ export class OrderHandler extends AbstractOrderFillHandler<OrderFillWithLiquidit
133135
return kafkaEvents;
134136
}
135137

138+
// Handle latency from resultRow
139+
stats.timing(
140+
`${config.SERVICE_NAME}.handle_order_fill_event.sql_latency`,
141+
Number(resultRow.latency),
142+
this.generateTimingStatsOptions(),
143+
);
144+
136145
return kafkaEvents;
137146
}
138147

0 commit comments

Comments
 (0)