1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-07-02 01:17:58 +02:00

chore: aggregate daily metrics query time instrumentation (#9764)

This commit is contained in:
Mateusz Kwasniewski 2025-04-15 14:52:03 +02:00 committed by GitHub
parent 06ade698e3
commit 67d59d6141
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 20 additions and 1 deletions

View File

@ -92,6 +92,7 @@ export const createStores = (
clientInstanceStore: new ClientInstanceStore(db, eventBus, getLogger),
clientMetricsStoreV2: new ClientMetricsStoreV2(
db,
eventBus,
getLogger,
config.flagResolver,
),

View File

@ -89,6 +89,7 @@ export const createInstanceStatsService = (db: Db, config: IUnleashConfig) => {
);
const clientMetricsStoreV2 = new ClientMetricsStoreV2(
db,
eventBus,
getLogger,
flagResolver,
);

View File

@ -10,6 +10,9 @@ import { endOfDay, startOfHour } from 'date-fns';
import { collapseHourlyMetrics, spreadVariants } from './collapseHourlyMetrics';
import type { Db } from '../../../db/db';
import type { IFlagResolver } from '../../../types';
import metricsHelper from '../../../util/metrics-helper';
import { DB_TIME } from '../../../metric-events';
import type EventEmitter from 'events';
interface ClientMetricsBaseTable {
feature_name: string;
@ -134,10 +137,22 @@ export class ClientMetricsStoreV2 implements IClientMetricsStoreV2 {
private flagResolver: IFlagResolver;
constructor(db: Db, getLogger: LogProvider, flagResolver: IFlagResolver) {
private metricTimer: Function;
constructor(
db: Db,
eventBus: EventEmitter,
getLogger: LogProvider,
flagResolver: IFlagResolver,
) {
this.db = db;
this.logger = getLogger('client-metrics-store-v2.js');
this.flagResolver = flagResolver;
this.metricTimer = (action) =>
metricsHelper.wrapTimer(eventBus, DB_TIME, {
store: 'client-metrics',
action,
});
}
async get(key: IClientMetricsEnvKey): Promise<IClientMetricsEnv> {
@ -393,6 +408,7 @@ export class ClientMetricsStoreV2 implements IClientMetricsStoreV2 {
// aggregates all hourly metrics from a previous day into daily metrics
async aggregateDailyMetrics(): Promise<void> {
const stopTimer = this.metricTimer('aggregateDailyMetrics');
const rawQuery: string = `
INSERT INTO ${DAILY_TABLE} (feature_name, app_name, environment, date, yes, no)
SELECT
@ -435,5 +451,6 @@ export class ClientMetricsStoreV2 implements IClientMetricsStoreV2 {
// have to be run serially since variants table has FK on yes/no metrics
await this.db.raw(rawQuery);
await this.db.raw(rawVariantsQuery);
stopTimer();
}
}