Skip to content

Commit 298e981

Browse files
authored
feat: add new transaction metrics - postman (#1741)
* feat: add new transaction metrics - postman * fix: include new db migration * fix: add counters * fix: add receipt receive time * fix: update claim creation date for retries * fix: add direction to histogram metrics * fix: update metrics
1 parent 23ab6bb commit 298e981

File tree

13 files changed

+75
-14
lines changed

13 files changed

+75
-14
lines changed

postman/scripts/runPostman.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ async function main() {
1313
isCalldataEnabled: process.env.L1_L2_CALLDATA_ENABLED === "true",
1414
listener: {
1515
pollingInterval: process.env.L1_LISTENER_INTERVAL ? parseInt(process.env.L1_LISTENER_INTERVAL) : undefined,
16+
receiptPollingInterval: process.env.L1_LISTENER_RECEIPT_POLLING_INTERVAL
17+
? parseInt(process.env.L1_LISTENER_RECEIPT_POLLING_INTERVAL)
18+
: undefined,
1619
maxFetchMessagesFromDb: process.env.MAX_FETCH_MESSAGES_FROM_DB
1720
? parseInt(process.env.MAX_FETCH_MESSAGES_FROM_DB)
1821
: undefined,
@@ -76,6 +79,9 @@ async function main() {
7679
isCalldataEnabled: process.env.L2_L1_CALLDATA_ENABLED === "true",
7780
listener: {
7881
pollingInterval: process.env.L2_LISTENER_INTERVAL ? parseInt(process.env.L2_LISTENER_INTERVAL) : undefined,
82+
receiptPollingInterval: process.env.L2_LISTENER_RECEIPT_POLLING_INTERVAL
83+
? parseInt(process.env.L2_LISTENER_RECEIPT_POLLING_INTERVAL)
84+
: undefined,
7985
maxFetchMessagesFromDb: process.env.MAX_FETCH_MESSAGES_FROM_DB
8086
? parseInt(process.env.MAX_FETCH_MESSAGES_FROM_DB)
8187
: undefined,

postman/src/application/postman/api/metrics/TransactionMetricsUpdater.ts

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,33 @@ export class TransactionMetricsUpdater implements ITransactionMetricsUpdater {
66
LineaPostmanMetrics.TransactionProcessingTime,
77
[0.1, 0.5, 1, 2, 3, 5, 7, 10],
88
"Time taken to process a transaction",
9+
["direction"],
10+
);
11+
12+
this.metricsService.createHistogram(
13+
LineaPostmanMetrics.TransactionInfuraConfirmationTime,
14+
[0.1, 0.5, 1, 2, 3, 5, 7, 10],
15+
"Time taken to receive the transaction receipt from Infura",
16+
["direction"],
917
);
1018
}
1119

12-
public addTransactionProcessingTime(transactionProcessingTimeInSeconds: number): void {
20+
public addTransactionProcessingTime(direction: string, transactionProcessingTimeInSeconds: number): void {
1321
return this.metricsService.addValueToHistogram(
1422
LineaPostmanMetrics.TransactionProcessingTime,
1523
transactionProcessingTimeInSeconds,
24+
{ direction },
25+
);
26+
}
27+
28+
public addTransactionInfuraConfirmationTime(
29+
direction: string,
30+
transactionInfuraConfirmationTimeInSeconds: number,
31+
): void {
32+
return this.metricsService.addValueToHistogram(
33+
LineaPostmanMetrics.TransactionInfuraConfirmationTime,
34+
transactionInfuraConfirmationTimeInSeconds,
35+
{ direction },
1636
);
1737
}
1838
}

postman/src/application/postman/api/metrics/__tests__/TransactionMetricsUpdater.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ describe("TransactionMetricsUpdater", () => {
1212
});
1313

1414
it("should get correct values after add histogram value", async () => {
15-
transactionMetricsUpdater.addTransactionProcessingTime(2);
16-
transactionMetricsUpdater.addTransactionProcessingTime(3);
15+
transactionMetricsUpdater.addTransactionProcessingTime("L1_TO_L2", 2);
16+
transactionMetricsUpdater.addTransactionProcessingTime("L1_TO_L2", 3);
1717

1818
const histogramValues = await metricsService.getHistogramMetricsValues(
1919
LineaPostmanMetrics.TransactionProcessingTime,

postman/src/application/postman/app/PostmanServiceClient.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@ export class PostmanServiceClient {
242242
l2MessageClaimingPersister,
243243
{
244244
direction: Direction.L1_TO_L2,
245-
pollingInterval: config.l2Config.listener.pollingInterval,
245+
pollingInterval: config.l2Config.listener.receiptPollingInterval,
246246
},
247247
new WinstonLogger(`L2${MessagePersistingPoller.name}`, config.loggerOptions),
248248
);
@@ -369,7 +369,7 @@ export class PostmanServiceClient {
369369
l1MessageClaimingPersister,
370370
{
371371
direction: Direction.L2_TO_L1,
372-
pollingInterval: config.l1Config.listener.pollingInterval,
372+
pollingInterval: config.l1Config.listener.receiptPollingInterval,
373373
},
374374
new WinstonLogger(`L1${MessagePersistingPoller.name}`, config.loggerOptions),
375375
);

postman/src/application/postman/app/config/__tests__/utils.test.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ describe("Config utils", () => {
9696
maxBlocksToFetchLogs: DEFAULT_MAX_BLOCKS_TO_FETCH_LOGS,
9797
maxFetchMessagesFromDb: DEFAULT_MAX_FETCH_MESSAGES_FROM_DB,
9898
pollingInterval: DEFAULT_LISTENER_INTERVAL,
99+
receiptPollingInterval: DEFAULT_LISTENER_INTERVAL,
99100
},
100101
messageServiceContractAddress: TEST_CONTRACT_ADDRESS_1,
101102
rpcUrl: TEST_RPC_URL,
@@ -129,6 +130,7 @@ describe("Config utils", () => {
129130
maxBlocksToFetchLogs: DEFAULT_MAX_BLOCKS_TO_FETCH_LOGS,
130131
maxFetchMessagesFromDb: DEFAULT_MAX_FETCH_MESSAGES_FROM_DB,
131132
pollingInterval: DEFAULT_LISTENER_INTERVAL,
133+
receiptPollingInterval: DEFAULT_LISTENER_INTERVAL,
132134
},
133135
messageServiceContractAddress: TEST_CONTRACT_ADDRESS_2,
134136
rpcUrl: TEST_RPC_URL,
@@ -215,6 +217,7 @@ describe("Config utils", () => {
215217
maxBlocksToFetchLogs: DEFAULT_MAX_BLOCKS_TO_FETCH_LOGS,
216218
maxFetchMessagesFromDb: DEFAULT_MAX_FETCH_MESSAGES_FROM_DB,
217219
pollingInterval: DEFAULT_LISTENER_INTERVAL + 1000,
220+
receiptPollingInterval: DEFAULT_LISTENER_INTERVAL,
218221
},
219222
messageServiceContractAddress: TEST_CONTRACT_ADDRESS_1,
220223
rpcUrl: TEST_RPC_URL,
@@ -248,6 +251,7 @@ describe("Config utils", () => {
248251
maxBlocksToFetchLogs: DEFAULT_MAX_BLOCKS_TO_FETCH_LOGS,
249252
maxFetchMessagesFromDb: DEFAULT_MAX_FETCH_MESSAGES_FROM_DB,
250253
pollingInterval: DEFAULT_LISTENER_INTERVAL + 1000,
254+
receiptPollingInterval: DEFAULT_LISTENER_INTERVAL,
251255
},
252256
messageServiceContractAddress: TEST_CONTRACT_ADDRESS_2,
253257
rpcUrl: TEST_RPC_URL,

postman/src/application/postman/app/config/config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ export type ClaimingConfig = Omit<Required<ClaimingOptions>, "feeRecipientAddres
101101
*/
102102
export type ListenerOptions = {
103103
pollingInterval?: number;
104+
receiptPollingInterval?: number;
104105
initialFromBlock?: number;
105106
blockConfirmation?: number;
106107
maxFetchMessagesFromDb?: number;

postman/src/application/postman/app/config/utils.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ export function getConfig(postmanOptions: PostmanOptions): PostmanConfig {
5757
isCalldataEnabled: l1Options.isCalldataEnabled ?? DEFAULT_CALLDATA_ENABLED,
5858
listener: {
5959
pollingInterval: l1Options.listener.pollingInterval ?? DEFAULT_LISTENER_INTERVAL,
60+
receiptPollingInterval: l1Options.listener.receiptPollingInterval ?? DEFAULT_LISTENER_INTERVAL,
6061
maxFetchMessagesFromDb: l1Options.listener.maxFetchMessagesFromDb ?? DEFAULT_MAX_FETCH_MESSAGES_FROM_DB,
6162
maxBlocksToFetchLogs: l1Options.listener.maxBlocksToFetchLogs ?? DEFAULT_MAX_BLOCKS_TO_FETCH_LOGS,
6263
initialFromBlock: l1Options.listener.initialFromBlock ?? DEFAULT_INITIAL_FROM_BLOCK,
@@ -92,6 +93,7 @@ export function getConfig(postmanOptions: PostmanOptions): PostmanConfig {
9293
enableLineaEstimateGas: l2Options.enableLineaEstimateGas ?? false,
9394
listener: {
9495
pollingInterval: l2Options.listener.pollingInterval ?? DEFAULT_LISTENER_INTERVAL,
96+
receiptPollingInterval: l2Options.listener.receiptPollingInterval ?? DEFAULT_LISTENER_INTERVAL,
9597
maxFetchMessagesFromDb: l2Options.listener.maxFetchMessagesFromDb ?? DEFAULT_MAX_FETCH_MESSAGES_FROM_DB,
9698
maxBlocksToFetchLogs: l2Options.listener.maxBlocksToFetchLogs ?? DEFAULT_MAX_BLOCKS_TO_FETCH_LOGS,
9799
initialFromBlock: l2Options.listener.initialFromBlock ?? DEFAULT_INITIAL_FROM_BLOCK,

postman/src/application/postman/persistence/dataSource.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { DBOptions } from "./config/types";
1010
import { MessageEntity } from "./entities/Message.entity";
1111
import { AddCompressedTxSizeColumn1718026260629 } from "./migrations/1718026260629-AddCompressedTxSizeColumn";
1212
import { AddSponsorshipMetrics1745569276097 } from "./migrations/1745569276097-AddSponsorshipMetrics";
13+
1314
export class DB {
1415
public static create(config: DBOptions): DataSource {
1516
return new DataSource({

postman/src/core/metrics/IMetricsService.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ export enum LineaPostmanMetrics {
2121
SponsorshipFeesGwei = "linea_postman_sponsorship_fees_gwei_total", // Represent up to ~9_007_199 ETH
2222

2323
TransactionProcessingTime = "linea_postman_l2_transaction_tx_processing_time",
24+
TransactionInfuraConfirmationTime = "linea_postman_l2_transaction_tx_infura_confirmation_time",
2425
}
2526

2627
export interface IMetricsService {
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
export interface ITransactionMetricsUpdater {
2-
addTransactionProcessingTime(transactionProcessingTimeInSeconds: number): void;
2+
addTransactionProcessingTime(direction: string, transactionProcessingTimeInSeconds: number): void;
3+
addTransactionInfuraConfirmationTime(direction: string, transactionBroadcastTimeInSeconds: number): void;
34
}

0 commit comments

Comments
 (0)