diff --git a/src/app.test.ts b/src/app.test.ts index 9be1e6e..0c615b1 100644 --- a/src/app.test.ts +++ b/src/app.test.ts @@ -159,6 +159,10 @@ describe('Express app (without Arranger)', () => { count: 867, }, ], + members: { + totalCount: 12343, + publicCount: 345, + }, }; (getStatistics as jest.Mock).mockImplementation(() => expectedStats); diff --git a/src/endpoints/statistics/index.ts b/src/endpoints/statistics/index.ts index b091791..a7b0581 100644 --- a/src/endpoints/statistics/index.ts +++ b/src/endpoints/statistics/index.ts @@ -4,7 +4,9 @@ import filesize from 'filesize'; import EsInstance from '../../ElasticSearchClientInstance'; import { esFileIndex, + esMembersIndex, esParticipantIndex, + esPublicMemberIndex, esStudyIndex, esVariantIndex, familyIdKey, @@ -23,6 +25,11 @@ export type Diagnosis = { count: number; }; +export type MembersCount = { + totalCount: number; + publicCount: number; +}; + export type Statistics = { files: number; fileSize: string; @@ -37,6 +44,7 @@ export type Statistics = { downSyndromeStatus: Record; race: Record; diagnosis: Diagnosis[]; + members: MembersCount; }; const fetchFileStats = async (client: Client): Promise => { @@ -289,6 +297,22 @@ export const fetchTopDiagnosis = async (client: Client): Promise => })); }; +export const fetchMemberStats = async (client: Client): Promise => { + if (project === PROJECT_INCLUDE) return; + + const { body: members } = await client.count({ + index: esMembersIndex, + }); + + const { body: publicMembers } = await client.count({ + index: esPublicMemberIndex, + }); + return { + totalCount: members?.count, + publicCount: publicMembers?.count, + }; +}; + export const getStatistics = async (): Promise => { const client = EsInstance.getInstance(); const results = await Promise.all([ @@ -306,6 +330,7 @@ export const getStatistics = async (): Promise => { const diagnosis = await fetchTopDiagnosis(client); + const members = await fetchMemberStats(client); return { files: results[0], studies: results[1], @@ -320,6 +345,7 @@ export const getStatistics = async (): Promise => { downSyndromeStatus: results[9][1], race: results[9][2], diagnosis, + members, }; }; diff --git a/src/env.ts b/src/env.ts index 211646b..4683189 100644 --- a/src/env.ts +++ b/src/env.ts @@ -23,6 +23,10 @@ export const esParticipantIndex = process.env.ES_PARTICIPANT_INDEX || 'participa export const esBiospecimenIndex = process.env.ES_BIOSPECIMEN_INDEX || 'biospecimen_centric'; export const esVariantIndex = process.env.ES_VARIANT_INDEX || 'variant_centric'; +export const esMembersIndex = process.env.ES_MEMBERS_INDEX || 'members'; + +export const esPublicMemberIndex = process.env.ES_PUBLIC_MEMBERS_INDEX || 'members-public'; + export const maxNOfGenomicFeatureSuggestions = process.env.MAX_NUMBER_OF_GF_SUGGESTIONS || 5; export const indexNameGeneFeatureSuggestion = process.env.GENES_SUGGESTIONS_INDEX_NAME;