diff --git a/src/lib/db/project-store.ts b/src/lib/db/project-store.ts index c2f45f21b7..f9be0306fd 100644 --- a/src/lib/db/project-store.ts +++ b/src/lib/db/project-store.ts @@ -559,7 +559,11 @@ class ProjectStore implements IProjectStore { async getProjectModeCounts(): Promise { const result: ProjectModeCount[] = await this.db - .select(`${SETTINGS_TABLE}.project_mode as mode`) + .select( + this.db.raw( + `COALESCE(${SETTINGS_TABLE}.project_mode, 'open') as mode`, + ), + ) .count(`${TABLE}.id as count`) .from(`${TABLE}`) .join( @@ -567,7 +571,9 @@ class ProjectStore implements IProjectStore { `${TABLE}.id`, `${SETTINGS_TABLE}.project`, ) - .groupBy(`${SETTINGS_TABLE}.project_mode`); + .groupBy( + this.db.raw(`COALESCE(${SETTINGS_TABLE}.project_mode, 'open')`), + ); return result.map(this.mapProjectModeCount); } diff --git a/src/lib/features/instance-stats/instance-stats-service.ts b/src/lib/features/instance-stats/instance-stats-service.ts index 26631e84ba..9cce8af42c 100644 --- a/src/lib/features/instance-stats/instance-stats-service.ts +++ b/src/lib/features/instance-stats/instance-stats-service.ts @@ -48,9 +48,10 @@ export interface InstanceStats { activeUsers: Awaited>; } -export interface InstanceStatsSigned extends InstanceStats { +export type InstanceStatsSigned = Omit & { + projects: number; sum: string; -} +}; export class InstanceStatsService { private logger: Logger; @@ -280,10 +281,13 @@ export class InstanceStatsService { async getSignedStats(): Promise { const instanceStats = await this.getStats(); + const totalProjects = instanceStats.projects + .map((p) => p.count) + .reduce((a, b) => a + b, 0); const sum = sha256( - `${instanceStats.instanceId}${instanceStats.users}${instanceStats.featureToggles}${instanceStats.projects}${instanceStats.roles}${instanceStats.groups}${instanceStats.environments}${instanceStats.segments}`, + `${instanceStats.instanceId}${instanceStats.users}${instanceStats.featureToggles}${totalProjects}${instanceStats.roles}${instanceStats.groups}${instanceStats.environments}${instanceStats.segments}`, ); - return { ...instanceStats, sum }; + return { ...instanceStats, sum, projects: totalProjects }; } } diff --git a/src/lib/routes/admin-api/instance-admin.ts b/src/lib/routes/admin-api/instance-admin.ts index 030cc848f1..9b8a343e75 100644 --- a/src/lib/routes/admin-api/instance-admin.ts +++ b/src/lib/routes/admin-api/instance-admin.ts @@ -7,7 +7,6 @@ import Controller from '../controller'; import { NONE } from '../../types/permissions'; import { UiConfigSchema } from '../../openapi/spec/ui-config-schema'; import { - InstanceStats, InstanceStatsService, InstanceStatsSigned, } from '../../features/instance-stats/instance-stats-service'; @@ -97,11 +96,7 @@ class InstanceAdminController extends Controller { featureToggles: 29, groups: 3, instanceId: 'ed3861ae-78f9-4e8c-8e57-b57efc15f82b', - projects: [ - { mode: 'open', count: 5 }, - { mode: 'protected', count: 2 }, - { mode: 'private', count: 1 }, - ], + projects: 4, roles: 5, customRootRoles: 2, customRootRolesInUse: 1, @@ -123,7 +118,7 @@ class InstanceAdminController extends Controller { async getStatistics( req: AuthedRequest, - res: Response, + res: Response, ): Promise { const instanceStats = await this.instanceStatsService.getSignedStats(); res.json(instanceStats);