1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-10-18 11:14:57 +02:00
unleash.unleash/src/lib/features/metrics/sizes/largest-resources-read-model.ts
Gastón Fournier abe160eb7d
feat: Unleash v7 ESM migration (#9877)
We're migrating to ESM, which will allow us to import the latest
versions of our dependencies.

Co-Authored-By: Christopher Kolstad <chriswk@getunleash.io>
2025-05-14 09:47:12 +02:00

65 lines
2.1 KiB
TypeScript

import type { Db } from '../../../db/db.js';
import type { ILargestResourcesReadModel } from './largest-resources-read-model-type.js';
export class LargestResourcesReadModel implements ILargestResourcesReadModel {
private db: Db;
constructor(db: Db) {
this.db = db;
}
async getLargestProjectEnvironments(
limit: number,
): Promise<Array<{ project: string; environment: string; size: number }>> {
const result = await this.db('feature_strategies')
.select('project_name', 'environment')
.sum({
total_size: this.db.raw(
'pg_column_size(constraints) + pg_column_size(variants) + pg_column_size(parameters)',
),
})
.groupBy('project_name', 'environment')
.orderBy('total_size', 'desc')
.limit(limit);
return result.map(
(row: {
project_name: string;
environment: string;
total_size: string;
}) => ({
project: row.project_name,
environment: row.environment,
size: Number(row.total_size),
}),
);
}
async getLargestFeatureEnvironments(
limit: number,
): Promise<Array<{ feature: string; environment: string; size: number }>> {
const result = await this.db('feature_strategies')
.select('feature_name', 'environment')
.sum({
total_size: this.db.raw(
'pg_column_size(constraints) + pg_column_size(variants) + pg_column_size(parameters)',
),
})
.groupBy('feature_name', 'environment')
.orderBy('total_size', 'desc')
.limit(limit);
return result.map(
(row: {
feature_name: string;
environment: string;
total_size: string;
}) => ({
feature: row.feature_name,
environment: row.environment,
size: Number(row.total_size),
}),
);
}
}