diff --git a/packages/analytics/src/Domain/Statistics/StatisticsStoreInterface.ts b/packages/analytics/src/Domain/Statistics/StatisticsStoreInterface.ts index 39a17c777..631661193 100644 --- a/packages/analytics/src/Domain/Statistics/StatisticsStoreInterface.ts +++ b/packages/analytics/src/Domain/Statistics/StatisticsStoreInterface.ts @@ -12,4 +12,5 @@ export interface StatisticsStoreInterface { setMeasure(measure: StatisticsMeasure, value: number, periods: Period[]): Promise getMeasureAverage(measure: StatisticsMeasure, period: Period): Promise getMeasureTotal(measure: StatisticsMeasure, periodOrPeriodKey: Period | string): Promise + getMeasureIncrementCounts(measure: StatisticsMeasure, period: Period): Promise } diff --git a/packages/analytics/src/Infra/Redis/RedisStatisticsStore.ts b/packages/analytics/src/Infra/Redis/RedisStatisticsStore.ts index 451bcc458..ac7175f28 100644 --- a/packages/analytics/src/Infra/Redis/RedisStatisticsStore.ts +++ b/packages/analytics/src/Infra/Redis/RedisStatisticsStore.ts @@ -8,6 +8,17 @@ import { StatisticsStoreInterface } from '../../Domain/Statistics/StatisticsStor export class RedisStatisticsStore implements StatisticsStoreInterface { constructor(private periodKeyGenerator: PeriodKeyGeneratorInterface, private redisClient: IORedis.Redis) {} + async getMeasureIncrementCounts(measure: StatisticsMeasure, period: Period): Promise { + const increments = await this.redisClient.get( + `count:increments:${measure}:timespan:${this.periodKeyGenerator.getPeriodKey(period)}`, + ) + if (increments === null) { + return 0 + } + + return +increments + } + async setMeasure(measure: StatisticsMeasure, value: number, periods: Period[]): Promise { const pipeline = this.redisClient.pipeline() @@ -45,16 +56,15 @@ export class RedisStatisticsStore implements StatisticsStoreInterface { } async getMeasureAverage(measure: StatisticsMeasure, period: Period): Promise { - const increments = await this.redisClient.get( - `count:increments:${measure}:timespan:${this.periodKeyGenerator.getPeriodKey(period)}`, - ) - if (increments === null) { + const increments = await this.getMeasureIncrementCounts(measure, period) + + if (increments === 0) { return 0 } const totalValue = await this.getMeasureTotal(measure, period) - return totalValue / +increments + return totalValue / increments } async getYesterdayOutOfSyncIncidents(): Promise { diff --git a/packages/api-gateway/bin/report.ts b/packages/api-gateway/bin/report.ts index 8ffb307a3..6273ce433 100644 --- a/packages/api-gateway/bin/report.ts +++ b/packages/api-gateway/bin/report.ts @@ -121,6 +121,7 @@ const requestReport = async ( period, totalValue: await statisticsStore.getMeasureTotal(statisticMeasureName, period), average: await statisticsStore.getMeasureAverage(statisticMeasureName, period), + increments: await statisticsStore.getMeasureIncrementCounts(statisticMeasureName, period), }) } } diff --git a/packages/domain-events/src/Domain/Event/DailyAnalyticsReportGeneratedEventPayload.ts b/packages/domain-events/src/Domain/Event/DailyAnalyticsReportGeneratedEventPayload.ts index 8b3aae8d0..60d965a26 100644 --- a/packages/domain-events/src/Domain/Event/DailyAnalyticsReportGeneratedEventPayload.ts +++ b/packages/domain-events/src/Domain/Event/DailyAnalyticsReportGeneratedEventPayload.ts @@ -16,6 +16,7 @@ export interface DailyAnalyticsReportGeneratedEventPayload { name: string totalValue: number average: number + increments: number period: number }> activityStatisticsOverTime: Array<{