From beec17d86e9792d8aa1712a4e223f5b9a18b9e9f Mon Sep 17 00:00:00 2001 From: Fredrik Oseberg Date: Thu, 22 Sep 2022 15:24:26 +0200 Subject: [PATCH] fix: types --- src/lib/routes/client-api/feature.ts | 1 + src/lib/routes/client-api/request-counter.ts | 34 ++++++++++++++------ 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/src/lib/routes/client-api/feature.ts b/src/lib/routes/client-api/feature.ts index 3b5438ca26..4167983ea8 100644 --- a/src/lib/routes/client-api/feature.ts +++ b/src/lib/routes/client-api/feature.ts @@ -218,6 +218,7 @@ export default class FeatureController extends Controller { let commonFields = { features, version }; if (this.requestCounter.isRPSOverTresholdForApp(appName)) { + // @ts-ignore commonFields.backOff = 10; } diff --git a/src/lib/routes/client-api/request-counter.ts b/src/lib/routes/client-api/request-counter.ts index 50e2beb73c..4d17df646d 100644 --- a/src/lib/routes/client-api/request-counter.ts +++ b/src/lib/routes/client-api/request-counter.ts @@ -1,13 +1,26 @@ +interface IRequestBucket { + apps: IRequestBucketApps; + startTime: Date; + endTime?: Date; +} + +interface IRequestBucketApps { + [appName: string]: { + count: number; + rps?: number; + }; +} + export default class RequestCounter { - private requestCache: Object; - private longTermCache: Object; - private interval: number; + private requestCache: IRequestBucket; + + private longTermCache: IRequestBucket[]; constructor() { this.requestCache = this.createBucket(); this.longTermCache = []; - this.interval = setInterval(() => { + setInterval(() => { this.requestCache.endTime = new Date(); const longTermCacheObject = this.calculateRPS(this.requestCache); @@ -18,7 +31,7 @@ export default class RequestCounter { }, 300000).unref(); } - createBucket = () => { + createBucket = (): IRequestBucket => { const bucket = { apps: {}, startTime: new Date(), @@ -28,10 +41,10 @@ export default class RequestCounter { }; recordRequest = (appName: string): void => { - if (this.requestCache['apps'][appName]) { - this.requestCache['apps'][appName].count += 1; + if (this.requestCache.apps[appName]) { + this.requestCache.apps[appName].count += 1; } else { - this.requestCache['apps'][appName] = { count: 1 }; + this.requestCache.apps[appName] = { count: 1 }; } }; @@ -39,7 +52,7 @@ export default class RequestCounter { return this.longTermCache; }; - calculateRPS = (requestCache: Object) => { + calculateRPS = (requestCache: IRequestBucket): IRequestBucket => { Object.keys(requestCache.apps).forEach((appName) => { const app = requestCache.apps[appName]; const rps = app.count / 300; @@ -49,7 +62,8 @@ export default class RequestCounter { return requestCache; }; - isRPSOverTresholdForApp = (appName: string) => { + // @ts-ignore + isRPSOverTresholdForApp = (appName: string): Boolean => { return true; }; }