From 39b9d3d9e28c2b7a8923acfd7b48d37cfd7da06f Mon Sep 17 00:00:00 2001 From: j Date: Sun, 17 Mar 2024 23:25:38 -0400 Subject: [PATCH] redis configuration with bottleneck and shutdown method --- src/rdrama/session/SessionManager.ts | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/rdrama/session/SessionManager.ts b/src/rdrama/session/SessionManager.ts index dd4801f..8986b1b 100644 --- a/src/rdrama/session/SessionManager.ts +++ b/src/rdrama/session/SessionManager.ts @@ -1,6 +1,10 @@ import axios, { AxiosInstance, AxiosError, AxiosResponse, AxiosRequestConfig } from 'axios'; import axiosRetry from 'axios-retry'; import Bottleneck from 'bottleneck'; +import dotenv from 'dotenv'; + +// Load environment variables from .env file +dotenv.config(); class SessionManager { private static instance: SessionManager; @@ -8,8 +12,19 @@ class SessionManager { private limiter: Bottleneck; private constructor() { + + // Initialize the Bottleneck limiter this.limiter = new Bottleneck({ + id: "rDramaAPI-limiter", + datastore: "ioredis", + clearDatastore: false, + clientOptions: { + host: process.env.REDIS_HOST, + port: Number(process.env.REDIS_PORT), + password: process.env.REDIS_PASSWORD || undefined, // Use undefined if no password is set + enableOfflineQueue: true + }, maxConcurrent: 1, // Maximum number of concurrent requests minTime: 1000 // Minimum time between dispatches of requests in milliseconds }); @@ -38,6 +53,10 @@ class SessionManager { return SessionManager.instance; } + public async shutdown(): Promise { + await this.limiter.disconnect(); + } + private retryDelayStrategy(retryCount: number, error: AxiosError): number { const retryAfter = error.response?.headers['retry-after']; if (retryAfter) { @@ -52,6 +71,7 @@ class SessionManager { return status === 429 || status >= 500; } + private wrapAxiosInstance(instance: AxiosInstance): void { // Wrap the get method const originalGet = instance.get; @@ -81,6 +101,8 @@ class SessionManager { public setAuthorizationToken(token: string): void { this.axiosInstance.defaults.headers.common['Authorization'] = `${token}`; } + + } export default SessionManager;