From aa3e49f8c5c4f14255febb5abe5c6f0544e145cb Mon Sep 17 00:00:00 2001 From: Fredrik Oseberg Date: Thu, 22 Sep 2022 14:44:40 +0200 Subject: [PATCH] feat: initial counter --- src/lib/routes/client-api/request-counter.ts | 47 ++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 src/lib/routes/client-api/request-counter.ts diff --git a/src/lib/routes/client-api/request-counter.ts b/src/lib/routes/client-api/request-counter.ts new file mode 100644 index 0000000000..12500371c7 --- /dev/null +++ b/src/lib/routes/client-api/request-counter.ts @@ -0,0 +1,47 @@ +datefns; + +export default class RequestCounter { + private requestCache: Object; + private longTermCache: Object; + private interval: number; + + constructor() { + this.requestCache = {}; + this.longTermCache = []; + + this.interval = setInterval(() => { + this.requestCache.endTime = new Date(); + + const longTermCacheObject = { + ...this.requestCache, + rps: this.calculateRPS(), + }; + + this.longTermCache.push(longTermCacheObject); + + this.requestCache = this.createBucket(); + }, 300000).unref(); + } + + createBucket = () => { + const bucket = { + count: 0, + startTime: new Date(), + endTime: null, + }; + return bucket; + }; + + recordRequest = (appName: string): Promise => { + if (this.requestCache[appName]) { + this.requestCache[count] += 1; + } else { + this.requestCache[appName] = { count: 1 }; + } + }; + + calculateRPS = () => { + const { count } = this.requestCache; + return count / 300; + }; +}