diff --git a/apps/api/src/services/queues/statistics-gathering/statistics-gathering.processor.ts b/apps/api/src/services/queues/statistics-gathering/statistics-gathering.processor.ts index 07fc32585..f61713bcc 100644 --- a/apps/api/src/services/queues/statistics-gathering/statistics-gathering.processor.ts +++ b/apps/api/src/services/queues/statistics-gathering/statistics-gathering.processor.ts @@ -3,12 +3,14 @@ import { PropertyService } from '@ghostfolio/api/services/property/property.serv import { GATHER_STATISTICS_DOCKER_HUB_PULLS_PROCESS_JOB_NAME, GATHER_STATISTICS_GITHUB_CONTRIBUTORS_PROCESS_JOB_NAME, + GATHER_STATISTICS_GITHUB_FORKS_PROCESS_JOB_NAME, GATHER_STATISTICS_GITHUB_STARGAZERS_PROCESS_JOB_NAME, GATHER_STATISTICS_UPTIME_PROCESS_JOB_NAME, HEADER_KEY_TOKEN, PROPERTY_BETTER_UPTIME_MONITOR_ID, PROPERTY_DOCKER_HUB_PULLS, PROPERTY_GITHUB_CONTRIBUTORS, + PROPERTY_GITHUB_FORKS, PROPERTY_GITHUB_STARGAZERS, PROPERTY_UPTIME, STATISTICS_GATHERING_QUEUE @@ -71,6 +73,26 @@ export class StatisticsGatheringProcessor { ); } + @Process(GATHER_STATISTICS_GITHUB_FORKS_PROCESS_JOB_NAME) + public async gatherGitHubForksStatistics() { + Logger.log( + 'GitHub forks statistics gathering has been started', + 'StatisticsGatheringProcessor' + ); + + const gitHubForks = await this.countGitHubForks(); + + await this.propertyService.put({ + key: PROPERTY_GITHUB_FORKS, + value: String(gitHubForks) + }); + + Logger.log( + 'GitHub forks statistics gathering has been completed', + 'StatisticsGatheringProcessor' + ); + } + @Process(GATHER_STATISTICS_GITHUB_STARGAZERS_PROCESS_JOB_NAME) public async gatherGitHubStargazersStatistics() { Logger.log( @@ -159,6 +181,26 @@ export class StatisticsGatheringProcessor { } } + private async countGitHubForks(): Promise { + try { + const { forks_count } = (await fetch( + 'https://api.github.com/repos/ghostfolio/ghostfolio', + { + headers: { 'User-Agent': 'request' }, + signal: AbortSignal.timeout( + this.configurationService.get('REQUEST_TIMEOUT') + ) + } + ).then((res) => res.json())) as { forks_count: number }; + + return forks_count; + } catch (error) { + Logger.error(error, 'StatisticsGatheringProcessor - GitHub'); + + throw error; + } + } + private async countGitHubStargazers(): Promise { try { const { stargazers_count } = (await fetch( diff --git a/apps/api/src/services/queues/statistics-gathering/statistics-gathering.service.ts b/apps/api/src/services/queues/statistics-gathering/statistics-gathering.service.ts index 68c674688..026f7b377 100644 --- a/apps/api/src/services/queues/statistics-gathering/statistics-gathering.service.ts +++ b/apps/api/src/services/queues/statistics-gathering/statistics-gathering.service.ts @@ -1,6 +1,7 @@ import { GATHER_STATISTICS_DOCKER_HUB_PULLS_PROCESS_JOB_NAME, GATHER_STATISTICS_GITHUB_CONTRIBUTORS_PROCESS_JOB_NAME, + GATHER_STATISTICS_GITHUB_FORKS_PROCESS_JOB_NAME, GATHER_STATISTICS_GITHUB_STARGAZERS_PROCESS_JOB_NAME, GATHER_STATISTICS_PROCESS_JOB_OPTIONS, GATHER_STATISTICS_UPTIME_PROCESS_JOB_NAME, @@ -23,6 +24,7 @@ export class StatisticsGatheringService { [ GATHER_STATISTICS_DOCKER_HUB_PULLS_PROCESS_JOB_NAME, GATHER_STATISTICS_GITHUB_CONTRIBUTORS_PROCESS_JOB_NAME, + GATHER_STATISTICS_GITHUB_FORKS_PROCESS_JOB_NAME, GATHER_STATISTICS_GITHUB_STARGAZERS_PROCESS_JOB_NAME, GATHER_STATISTICS_UPTIME_PROCESS_JOB_NAME ].map((jobName) => {