Skip to content

Commit 67d59d6

Browse files
authored
chore: aggregate daily metrics query time instrumentation (#9764)
1 parent 06ade69 commit 67d59d6

File tree

3 files changed

+20
-1
lines changed

3 files changed

+20
-1
lines changed

src/lib/db/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ export const createStores = (
9292
clientInstanceStore: new ClientInstanceStore(db, eventBus, getLogger),
9393
clientMetricsStoreV2: new ClientMetricsStoreV2(
9494
db,
95+
eventBus,
9596
getLogger,
9697
config.flagResolver,
9798
),

src/lib/features/instance-stats/createInstanceStatsService.ts

+1
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ export const createInstanceStatsService = (db: Db, config: IUnleashConfig) => {
8989
);
9090
const clientMetricsStoreV2 = new ClientMetricsStoreV2(
9191
db,
92+
eventBus,
9293
getLogger,
9394
flagResolver,
9495
);

src/lib/features/metrics/client-metrics/client-metrics-store-v2.ts

+18-1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ import { endOfDay, startOfHour } from 'date-fns';
1010
import { collapseHourlyMetrics, spreadVariants } from './collapseHourlyMetrics';
1111
import type { Db } from '../../../db/db';
1212
import type { IFlagResolver } from '../../../types';
13+
import metricsHelper from '../../../util/metrics-helper';
14+
import { DB_TIME } from '../../../metric-events';
15+
import type EventEmitter from 'events';
1316

1417
interface ClientMetricsBaseTable {
1518
feature_name: string;
@@ -134,10 +137,22 @@ export class ClientMetricsStoreV2 implements IClientMetricsStoreV2 {
134137

135138
private flagResolver: IFlagResolver;
136139

137-
constructor(db: Db, getLogger: LogProvider, flagResolver: IFlagResolver) {
140+
private metricTimer: Function;
141+
142+
constructor(
143+
db: Db,
144+
eventBus: EventEmitter,
145+
getLogger: LogProvider,
146+
flagResolver: IFlagResolver,
147+
) {
138148
this.db = db;
139149
this.logger = getLogger('client-metrics-store-v2.js');
140150
this.flagResolver = flagResolver;
151+
this.metricTimer = (action) =>
152+
metricsHelper.wrapTimer(eventBus, DB_TIME, {
153+
store: 'client-metrics',
154+
action,
155+
});
141156
}
142157

143158
async get(key: IClientMetricsEnvKey): Promise<IClientMetricsEnv> {
@@ -393,6 +408,7 @@ export class ClientMetricsStoreV2 implements IClientMetricsStoreV2 {
393408

394409
// aggregates all hourly metrics from a previous day into daily metrics
395410
async aggregateDailyMetrics(): Promise<void> {
411+
const stopTimer = this.metricTimer('aggregateDailyMetrics');
396412
const rawQuery: string = `
397413
INSERT INTO ${DAILY_TABLE} (feature_name, app_name, environment, date, yes, no)
398414
SELECT
@@ -435,5 +451,6 @@ export class ClientMetricsStoreV2 implements IClientMetricsStoreV2 {
435451
// have to be run serially since variants table has FK on yes/no metrics
436452
await this.db.raw(rawQuery);
437453
await this.db.raw(rawVariantsQuery);
454+
stopTimer();
438455
}
439456
}

0 commit comments

Comments
 (0)