From 07f430dfe9ac14ac74bdf95c52e21d80953b0230 Mon Sep 17 00:00:00 2001 From: wphan Date: Fri, 8 Dec 2023 10:45:14 -0800 Subject: [PATCH] add account_updates_per_second to metrics --- src/core/metrics.ts | 16 ++++++++++++++++ src/index.ts | 7 +++++++ 2 files changed, 23 insertions(+) diff --git a/src/core/metrics.ts b/src/core/metrics.ts index e1ea1da..5f69e29 100644 --- a/src/core/metrics.ts +++ b/src/core/metrics.ts @@ -39,6 +39,7 @@ enum METRIC_TYPES { endpoint_response_status = 'endpoint_response_status', gpa_fetch_duration = 'gpa_fetch_duration', last_ws_message_received_ts = 'last_ws_message_received_ts', + account_updates_per_sec = 'account_updates_per_sec', current_system_ts = 'current_system_ts', health_status = 'health_status', } @@ -125,6 +126,20 @@ lastWsReceivedTsGauge.addCallback((obs: ObservableResult) => { obs.observe(lastWsMsgReceivedTs, {}); }); +let lastAccountUpdatesPerSecond = 0; +const setAccountUpdatesPerSecond = (updatesPerSecond: number) => { + lastAccountUpdatesPerSecond = updatesPerSecond; +}; +const accountUpdatesPerSecondGauge = meter.createObservableGauge( + METRIC_TYPES.account_updates_per_sec, + { + description: 'Updates per second, the last second', + } +); +accountUpdatesPerSecondGauge.addCallback((obs: ObservableResult) => { + obs.observe(lastAccountUpdatesPerSecond, {}); +}); + const currentSystemTsGauge = meter.createObservableGauge( METRIC_TYPES.current_system_ts, { @@ -229,4 +244,5 @@ export { responseStatusCounter, handleHealthCheck, setLastReceivedWsMsgTs, + setAccountUpdatesPerSecond as setLastAccountUpdatesPerSecond, }; diff --git a/src/index.ts b/src/index.ts index 0e2c873..1b97b40 100644 --- a/src/index.ts +++ b/src/index.ts @@ -38,6 +38,7 @@ import * as http from 'http'; import { gpaFetchDurationHistogram, handleHealthCheck, + setLastAccountUpdatesPerSecond, setLastReceivedWsMsgTs, } from './core/metrics'; import { handleResponseTime } from './core/middleware'; @@ -254,6 +255,7 @@ const main = async () => { }; } + let updatesPerTenSecond = 0; const orderSubscriber = new OrderSubscriber({ driftClient, subscriptionConfig, @@ -262,8 +264,13 @@ const main = async () => { 'updateReceived', (_pubkey: PublicKey, _slot: number, _dataType: 'raw' | 'decoded') => { setLastReceivedWsMsgTs(Date.now()); + updatesPerTenSecond++; } ); + setInterval(() => { + setLastAccountUpdatesPerSecond(updatesPerTenSecond / 10); + updatesPerTenSecond = 0; + }, 10_000); dlobProvider = getDLOBProviderFromOrderSubscriber(orderSubscriber);