mirror of
https://github.com/Unleash/unleash.git
synced 2025-11-10 01:19:53 +01:00
Upgrades biome to 1.6.1, and updates husky pre-commit hook. Most changes here are making type imports explicit.
226 lines
5.9 KiB
TypeScript
226 lines
5.9 KiB
TypeScript
import dbInit, {
|
|
type ITestDb,
|
|
} from '../../../../test/e2e/helpers/database-init';
|
|
import getLogger from '../../../../test/fixtures/no-logger';
|
|
import type { IClientMetricsStoreV2, IUnleashStores } from '../../../types';
|
|
import { endOfDay, setHours, startOfHour, subDays } from 'date-fns';
|
|
|
|
let stores: IUnleashStores;
|
|
let db: ITestDb;
|
|
let clientMetricsStore: IClientMetricsStoreV2;
|
|
|
|
beforeAll(async () => {
|
|
db = await dbInit('client_metrics_aggregation', getLogger);
|
|
stores = db.stores;
|
|
clientMetricsStore = stores.clientMetricsStoreV2;
|
|
});
|
|
|
|
afterAll(async () => {
|
|
await db.destroy();
|
|
});
|
|
|
|
beforeEach(async () => {
|
|
await clientMetricsStore.clearMetrics(0);
|
|
await clientMetricsStore.clearDailyMetrics(0);
|
|
});
|
|
|
|
test('aggregate daily metrics from previous day', async () => {
|
|
const yesterday = subDays(new Date(), 1);
|
|
await clientMetricsStore.batchInsertMetrics([
|
|
{
|
|
appName: 'test',
|
|
featureName: 'feature',
|
|
environment: 'development',
|
|
timestamp: setHours(yesterday, 10),
|
|
no: 0,
|
|
yes: 1,
|
|
variants: {
|
|
a: 1,
|
|
b: 0,
|
|
},
|
|
},
|
|
{
|
|
appName: 'test',
|
|
featureName: 'feature',
|
|
environment: 'development',
|
|
timestamp: setHours(yesterday, 11),
|
|
no: 1,
|
|
yes: 1,
|
|
variants: {
|
|
a: 0,
|
|
b: 1,
|
|
},
|
|
},
|
|
]);
|
|
|
|
await clientMetricsStore.aggregateDailyMetrics();
|
|
|
|
const hourlyMetrics = await clientMetricsStore.getMetricsForFeatureToggleV2(
|
|
'feature',
|
|
48,
|
|
);
|
|
expect(hourlyMetrics).toMatchObject([
|
|
{
|
|
featureName: 'feature',
|
|
appName: 'test',
|
|
environment: 'development',
|
|
timestamp: startOfHour(setHours(yesterday, 10)),
|
|
yes: 1,
|
|
no: 0,
|
|
variants: { a: 1, b: 0 },
|
|
},
|
|
{
|
|
featureName: 'feature',
|
|
appName: 'test',
|
|
environment: 'development',
|
|
timestamp: startOfHour(setHours(yesterday, 11)),
|
|
yes: 1,
|
|
no: 1,
|
|
variants: { a: 0, b: 1 },
|
|
},
|
|
]);
|
|
const dailyMetrics = await clientMetricsStore.getMetricsForFeatureToggleV2(
|
|
'feature',
|
|
49,
|
|
);
|
|
expect(dailyMetrics).toMatchObject([
|
|
{
|
|
featureName: 'feature',
|
|
appName: 'test',
|
|
environment: 'development',
|
|
timestamp: endOfDay(yesterday),
|
|
yes: 2,
|
|
no: 1,
|
|
variants: { a: 1, b: 1 },
|
|
},
|
|
]);
|
|
});
|
|
|
|
test('clear daily metrics', async () => {
|
|
const yesterday = subDays(new Date(), 1);
|
|
const twoDaysAgo = subDays(new Date(), 2);
|
|
await clientMetricsStore.batchInsertMetrics([
|
|
{
|
|
appName: 'test',
|
|
featureName: 'feature',
|
|
environment: 'development',
|
|
timestamp: yesterday,
|
|
no: 0,
|
|
yes: 1,
|
|
variants: {
|
|
a: 0,
|
|
b: 1,
|
|
},
|
|
},
|
|
{
|
|
appName: 'test',
|
|
featureName: 'feature',
|
|
environment: 'development',
|
|
timestamp: twoDaysAgo,
|
|
no: 0,
|
|
yes: 2,
|
|
variants: {
|
|
a: 1,
|
|
b: 1,
|
|
},
|
|
},
|
|
]);
|
|
await clientMetricsStore.aggregateDailyMetrics();
|
|
|
|
await clientMetricsStore.clearDailyMetrics(2);
|
|
|
|
const dailyMetrics = await clientMetricsStore.getMetricsForFeatureToggleV2(
|
|
'feature',
|
|
49,
|
|
);
|
|
expect(dailyMetrics).toMatchObject([
|
|
{
|
|
featureName: 'feature',
|
|
appName: 'test',
|
|
environment: 'development',
|
|
timestamp: endOfDay(yesterday),
|
|
yes: 1,
|
|
no: 0,
|
|
variants: { a: 0, b: 1 },
|
|
},
|
|
]);
|
|
});
|
|
|
|
test('clear daily metrics', async () => {
|
|
const yesterday = subDays(new Date(), 1);
|
|
const twoDaysAgo = subDays(new Date(), 2);
|
|
await clientMetricsStore.batchInsertMetrics([
|
|
{
|
|
appName: 'irrelevant',
|
|
featureName: 'irrelevant',
|
|
environment: 'irrelevant',
|
|
timestamp: yesterday,
|
|
no: 0,
|
|
yes: 1,
|
|
variants: {
|
|
a: 0,
|
|
b: 1,
|
|
},
|
|
},
|
|
{
|
|
appName: 'irrelevant',
|
|
featureName: 'irrelevant',
|
|
environment: 'irrelevant',
|
|
timestamp: twoDaysAgo,
|
|
no: 0,
|
|
yes: 2,
|
|
variants: {
|
|
a: 1,
|
|
b: 1,
|
|
},
|
|
},
|
|
]);
|
|
await clientMetricsStore.aggregateDailyMetrics();
|
|
|
|
await clientMetricsStore.clearDailyMetrics(2);
|
|
|
|
const results = await db.rawDatabase
|
|
.table('client_metrics_env_daily')
|
|
.select('*');
|
|
expect(results.length).toBe(1);
|
|
const variantResults = await db.rawDatabase
|
|
.table('client_metrics_env_variants_daily')
|
|
.select('*');
|
|
expect(variantResults.length).toBe(2);
|
|
});
|
|
|
|
test('count previous day metrics', async () => {
|
|
const yesterday = subDays(new Date(), 1);
|
|
await clientMetricsStore.batchInsertMetrics([
|
|
{
|
|
appName: 'test',
|
|
featureName: 'feature',
|
|
environment: 'development',
|
|
timestamp: setHours(yesterday, 10),
|
|
no: 0,
|
|
yes: 1,
|
|
variants: {
|
|
a: 1,
|
|
b: 0,
|
|
},
|
|
},
|
|
{
|
|
appName: 'test',
|
|
featureName: 'feature',
|
|
environment: 'development',
|
|
timestamp: setHours(yesterday, 11),
|
|
no: 1,
|
|
yes: 1,
|
|
variants: {
|
|
a: 0,
|
|
b: 1,
|
|
},
|
|
},
|
|
]);
|
|
|
|
const result =
|
|
await clientMetricsStore.countPreviousDayHourlyMetricsBuckets();
|
|
|
|
expect(result).toMatchObject({ enabledCount: 2, variantCount: 4 });
|
|
});
|