diff --git a/src/server/index.ts b/src/server/index.ts index 47bdb5851..23442bc49 100644 --- a/src/server/index.ts +++ b/src/server/index.ts @@ -17,5 +17,5 @@ if ( typeof redisClient !== 'undefined' && rateLimiter.settings?.trackBucketCapacity === true ) { - startGlobalBucketCapacityLogger(redisClient, 5000); + startGlobalBucketCapacityLogger(redisClient, 60000); } diff --git a/src/server/lib/rate-limit/logger.ts b/src/server/lib/rate-limit/logger.ts index e6fa7dc5d..a1a4e36d0 100644 --- a/src/server/lib/rate-limit/logger.ts +++ b/src/server/lib/rate-limit/logger.ts @@ -1,6 +1,7 @@ import Redis from 'ioredis'; import { logger } from '@/server/lib/serverSideLogger'; import { LogLevel } from '@/shared/model/Logger'; +import { trackMetric } from '../trackMetric'; /** * Starts a timer to keep track of global bucket capacity @@ -39,7 +40,8 @@ const logValues = (keys: string[], values: Array) => { keys.forEach((key, index) => { const value = values[index]; if (value) { - const tokensLeft = JSON.parse(value)?.tokens; + const tokensLeft: number = JSON.parse(value)?.tokens; + trackMetric('RateLimitBucketCapacity', { bucket: key }, tokensLeft); logger.log(LogLevel.INFO, `Bucket(${key})`, undefined, { bucket_capacity: tokensLeft, }); diff --git a/src/server/lib/trackMetric.ts b/src/server/lib/trackMetric.ts index 2eeeaaa2e..4236947d2 100644 --- a/src/server/lib/trackMetric.ts +++ b/src/server/lib/trackMetric.ts @@ -24,6 +24,7 @@ const defaultDimensions = { export const trackMetric = ( metricName: Metrics, dimensions?: MetricDimensions, + value: number = 1, ): void => { if (process.env.RUNNING_IN_PLAYWRIGHT === 'true') { // return void in playwright @@ -49,7 +50,7 @@ export const trackMetric = ( Value, }), ), - Value: 1, + Value: value, Unit: 'Count', }, ], diff --git a/src/server/models/Metrics.ts b/src/server/models/Metrics.ts index 7a7505a38..f855acf2d 100644 --- a/src/server/models/Metrics.ts +++ b/src/server/models/Metrics.ts @@ -95,7 +95,8 @@ type UnconditionalMetrics = | 'StrongPassword'}` | `PasscodePasswordNotCompleteRemediation-${'ResetPassword' | 'Register'}-${'STAGED' | 'PROVISIONED'}-${'Start' | 'Complete'}` | `ExistingUserInCreateAccountFlow` - | `UserFlow-${UserFlow}-${string}`; + | `UserFlow-${UserFlow}-${string}` + | 'RateLimitBucketCapacity'; // Combine all the metrics above together into a type export type Metrics =