From d5f9d551f635f5a6e405b4b9d047c1e7b5317a7d Mon Sep 17 00:00:00 2001 From: petruki <31597636+petruki@users.noreply.github.com> Date: Sat, 20 Apr 2024 14:07:24 -0700 Subject: [PATCH] Improved RPM getter and overall service performance --- .env-cmdrc-template | 1 + docker-compose.yml | 3 ++- package.json | 8 ++++---- src/client/relay/index.js | 4 ++-- src/external/switcher-api-facade.js | 17 ++++++++++------- tests/unit-test/switcher-api-facade.test.js | 14 +++----------- 6 files changed, 22 insertions(+), 25 deletions(-) diff --git a/.env-cmdrc-template b/.env-cmdrc-template index 6234f13..b82517d 100644 --- a/.env-cmdrc-template +++ b/.env-cmdrc-template @@ -19,6 +19,7 @@ "SWITCHER_API_LOGGER": false, "SWITCHER_API_ENABLE": false, + "SWITCHER_API_THROTTLE": 5000, "SWITCHER_API_URL": "http://localhost:3000", "SWITCHER_API_KEY": "MOCK_SWITCHER_API_KEY", "SWITCHER_API_DOMAIN": "MOCK_SWITCHER_API_DOMAIN", diff --git a/docker-compose.yml b/docker-compose.yml index 634f6de..9cf95c1 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -35,4 +35,5 @@ services: - SWITCHER_API_URL=${SWITCHER_API_URL} - SWITCHER_API_KEY=${SWITCHER_API_KEY} - SWITCHER_API_DOMAIN=${SWITCHER_API_DOMAIN} - - SWITCHER_API_ENVIRONMENT=${SWITCHER_API_ENVIRONMENT} \ No newline at end of file + - SWITCHER_API_ENVIRONMENT=${SWITCHER_API_ENVIRONMENT} + - SWITCHER_API_THROTTLE=${SWITCHER_API_THROTTLE} \ No newline at end of file diff --git a/package.json b/package.json index 90f1174..c897542 100644 --- a/package.json +++ b/package.json @@ -44,17 +44,17 @@ "express-rate-limit": "^7.2.0", "express-validator": "^7.0.1", "graphql": "^16.8.1", - "graphql-http": "^1.22.0", + "graphql-http": "^1.22.1", "graphql-tag": "^2.12.6", "helmet": "^7.1.0", "jsonwebtoken": "^9.0.2", "moment": "^2.30.1", "mongodb": "^6.5.0", - "mongoose": "^8.3.0", - "pino": "^8.19.0", + "mongoose": "^8.3.2", + "pino": "^8.20.0", "pino-pretty": "^11.0.0", "swagger-ui-express": "^5.0.0", - "switcher-client": "^3.2.1", + "switcher-client": "^4.0.2", "validator": "^13.11.0" }, "devDependencies": { diff --git a/src/client/relay/index.js b/src/client/relay/index.js index 21898d0..3346093 100644 --- a/src/client/relay/index.js +++ b/src/client/relay/index.js @@ -4,8 +4,8 @@ import { StrategiesToRelayDataType, RelayMethods } from '../../models/config.js' import { checkHttpsAgent } from '../../external/switcher-api-facade.js'; const agent = async (url) => { - const rejectUnauthorized = !(await checkHttpsAgent(url)); - return new https.Agent({ rejectUnauthorized }); + const response = await checkHttpsAgent(url); + return new https.Agent({ rejectUnauthorized: !(response?.result) }); }; export async function resolveNotification(relay, entry, environment) { diff --git a/src/external/switcher-api-facade.js b/src/external/switcher-api-facade.js index 8b170c1..40718d6 100644 --- a/src/external/switcher-api-facade.js +++ b/src/external/switcher-api-facade.js @@ -7,6 +7,7 @@ const environment = process.env.SWITCHER_API_ENVIRONMENT; const domainName = process.env.SWITCHER_API_DOMAIN; const url = process.env.SWITCHER_API_URL; const logger = process.env.SWITCHER_API_LOGGER == 'true'; +const throttle = process.env.SWITCHER_API_THROTTLE; const certPath = process.env.SSL_CERT; const component = 'switcherapi'; @@ -19,21 +20,23 @@ export const SwitcherKeys = Object.freeze({ async function checkFeature(feature, params) { const switcher = Switcher.factory(); - return switcher.isItOn(feature, params, true); + + if (throttle) { + switcher.throttle(throttle); + } + + return switcher.detail().isItOn(feature, params); } export async function getRateLimit(key, component) { if (process.env.SWITCHER_API_ENABLE === 'true' && key !== process.env.SWITCHER_API_KEY) { const domain = await getDomainById(component.domain); - const result = await checkFeature(SwitcherKeys.RATE_LIMIT, [ + const response = await checkFeature(SwitcherKeys.RATE_LIMIT, [ checkValue(String(domain.owner)) ]); - if (result) { - const log = Switcher.getLogger(SwitcherKeys.RATE_LIMIT) - .find(log => log.input[0][1] === String(domain.owner)); - - return JSON.parse(log.response.message).rate_limit; + if (response.result) { + return response.metadata.rate_limit; } } diff --git a/tests/unit-test/switcher-api-facade.test.js b/tests/unit-test/switcher-api-facade.test.js index b248b3c..1a1b9c8 100644 --- a/tests/unit-test/switcher-api-facade.test.js +++ b/tests/unit-test/switcher-api-facade.test.js @@ -4,13 +4,11 @@ import { getRateLimit } from '../../src/external/switcher-api-facade'; import { - setupDatabase, - domainDocument, + setupDatabase, component1, component1Key } from '../fixtures/db_api'; -import { Switcher, checkValue } from 'switcher-client'; -import ExecutionLogger from 'switcher-client/src/lib/utils/executionLogger'; +import { Switcher } from 'switcher-client'; import '../../src/db/mongoose'; @@ -29,13 +27,7 @@ describe('Testing Switcher API Facade', () => { test('UNIT_API_FACADE - Should read rate limit - 100 Request Per Minute', async () => { const call = async () => { - Switcher.assume(SwitcherKeys.RATE_LIMIT).true(); - ExecutionLogger.add( - { message: JSON.stringify({ rate_limit: 100 }) }, - SwitcherKeys.RATE_LIMIT, - [checkValue(domainDocument.owner.toString())] - ); - + Switcher.assume(SwitcherKeys.RATE_LIMIT).true().withMetadata({ rate_limit: 100 }); return getRateLimit(component1Key, component1); };