1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-07-26 13:48:33 +02:00

feat: save memory on reading stats (#3472)

This commit is contained in:
Mateusz Kwasniewski 2023-04-06 15:34:08 +02:00 committed by GitHub
parent 2b1bf40b11
commit 126d2d2e45
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 18 additions and 18 deletions

View File

@ -110,16 +110,16 @@ export default class FeatureToggleStore implements IFeatureToggleStore {
return rows.map(this.rowToFeature); return rows.map(this.rowToFeature);
} }
async getByDate(queryModifiers: { async countByDate(queryModifiers: {
archived?: boolean; archived?: boolean;
project?: string; project?: string;
date?: string; date?: string;
range?: string[]; range?: string[];
dateAccessor: string; dateAccessor: string;
}): Promise<FeatureToggle[]> { }): Promise<number> {
const { project, archived, dateAccessor } = queryModifiers; const { project, archived, dateAccessor } = queryModifiers;
let query = this.db let query = this.db
.select(FEATURE_COLUMNS) .count()
.from(TABLE) .from(TABLE)
.where({ project }) .where({ project })
.modify(FeatureToggleStore.filterByArchived, archived); .modify(FeatureToggleStore.filterByArchived, archived);
@ -135,8 +135,8 @@ export default class FeatureToggleStore implements IFeatureToggleStore {
]); ]);
} }
const rows = await query; const queryResult = await query.first();
return rows.map(this.rowToFeature); return parseInt(queryResult.count || 0);
} }
/** /**

View File

@ -704,12 +704,12 @@ export default class ProjectService {
const dateMinusSixtyDays = subDays(new Date(), 60).toISOString(); const dateMinusSixtyDays = subDays(new Date(), 60).toISOString();
const [createdCurrentWindow, createdPastWindow] = await Promise.all([ const [createdCurrentWindow, createdPastWindow] = await Promise.all([
await this.featureToggleStore.getByDate({ await this.featureToggleStore.countByDate({
project: projectId, project: projectId,
dateAccessor: 'created_at', dateAccessor: 'created_at',
date: dateMinusThirtyDays, date: dateMinusThirtyDays,
}), }),
await this.featureToggleStore.getByDate({ await this.featureToggleStore.countByDate({
project: projectId, project: projectId,
dateAccessor: 'created_at', dateAccessor: 'created_at',
range: [dateMinusSixtyDays, dateMinusThirtyDays], range: [dateMinusSixtyDays, dateMinusThirtyDays],
@ -717,13 +717,13 @@ export default class ProjectService {
]); ]);
const [archivedCurrentWindow, archivedPastWindow] = await Promise.all([ const [archivedCurrentWindow, archivedPastWindow] = await Promise.all([
await this.featureToggleStore.getByDate({ await this.featureToggleStore.countByDate({
project: projectId, project: projectId,
archived: true, archived: true,
dateAccessor: 'archived_at', dateAccessor: 'archived_at',
date: dateMinusThirtyDays, date: dateMinusThirtyDays,
}), }),
await this.featureToggleStore.getByDate({ await this.featureToggleStore.countByDate({
project: projectId, project: projectId,
archived: true, archived: true,
dateAccessor: 'archived_at', dateAccessor: 'archived_at',
@ -795,10 +795,10 @@ export default class ProjectService {
updates: { updates: {
avgTimeToProdCurrentWindow: avgTimeToProdCurrentWindow:
currentWindowTimeToProdReadModel.calculateAverageTimeToProd(), currentWindowTimeToProdReadModel.calculateAverageTimeToProd(),
createdCurrentWindow: createdCurrentWindow.length, createdCurrentWindow: createdCurrentWindow,
createdPastWindow: createdPastWindow.length, createdPastWindow: createdPastWindow,
archivedCurrentWindow: archivedCurrentWindow.length, archivedCurrentWindow: archivedCurrentWindow,
archivedPastWindow: archivedPastWindow.length, archivedPastWindow: archivedPastWindow,
projectActivityCurrentWindow: projectActivityCurrentWindow, projectActivityCurrentWindow: projectActivityCurrentWindow,
projectActivityPastWindow: projectActivityPastWindow, projectActivityPastWindow: projectActivityPastWindow,
projectMembersAddedCurrentWindow: projectMembersAddedCurrentWindow:

View File

@ -25,13 +25,13 @@ export interface IFeatureToggleStore extends Store<FeatureToggle, string> {
revive(featureName: string): Promise<FeatureToggle>; revive(featureName: string): Promise<FeatureToggle>;
getAll(query?: Partial<IFeatureToggleQuery>): Promise<FeatureToggle[]>; getAll(query?: Partial<IFeatureToggleQuery>): Promise<FeatureToggle[]>;
getAllByNames(names: string[]): Promise<FeatureToggle[]>; getAllByNames(names: string[]): Promise<FeatureToggle[]>;
getByDate(queryModifiers: { countByDate(queryModifiers: {
archived?: boolean; archived?: boolean;
project?: string; project?: string;
date?: string; date?: string;
range?: string[]; range?: string[];
dateAccessor: string; dateAccessor: string;
}): Promise<FeatureToggle[]>; }): Promise<number>;
/** /**
* @deprecated - Variants should be fetched from FeatureEnvironmentStore (since variants are now; since 4.18, connected to environments) * @deprecated - Variants should be fetched from FeatureEnvironmentStore (since variants are now; since 4.18, connected to environments)
* @param featureName * @param featureName

View File

@ -213,13 +213,13 @@ export default class FakeFeatureToggleStore implements IFeatureToggleStore {
return Promise.resolve(newVariants); return Promise.resolve(newVariants);
} }
async getByDate(queryModifiers: { async countByDate(queryModifiers: {
archived?: boolean; archived?: boolean;
project?: string; project?: string;
date?: string; date?: string;
range?: string[]; range?: string[];
dateAccessor: string; dateAccessor: string;
}): Promise<FeatureToggle[]> { }): Promise<number> {
return this.features.filter((feature) => { return this.features.filter((feature) => {
if (feature.archived === queryModifiers.archived) { if (feature.archived === queryModifiers.archived) {
return true; return true;
@ -245,7 +245,7 @@ export default class FakeFeatureToggleStore implements IFeatureToggleStore {
) { ) {
return true; return true;
} }
}); }).length;
} }
dropAllVariants(): Promise<void> { dropAllVariants(): Promise<void> {