lite mode implementation

This commit is contained in:
hatskier
2021-11-03 15:49:12 +01:00
parent 657db4d983
commit 9b7f9fac3e
14 changed files with 574 additions and 2211 deletions

View File

@@ -1,26 +0,0 @@
# This Dockerfile contains a docker container configuration
# for redstone cache layer express app with the light mode
# So the app doesn't store historical data and uses
# memory as a storage instead of Mongo DB
FROM public.ecr.aws/lambda/nodejs:14
WORKDIR /var/task/
COPY package.json package.json
COPY yarn.lock yarn.lock
RUN npm i -g yarn
RUN yarn
COPY . .
# secrets.json is not required in light mode
# because a cache-layer in light mode doesn't
# connect to the remote mongo DB
RUN rm ".secrets.json"
ENV MODE=PROD
ENV LIGHT_MODE = true
CMD [ "index.handler" ]

26
Dockerfile.lite Normal file
View File

@@ -0,0 +1,26 @@
# This Dockerfile contains a docker container configuration
# for redstone cache layer express app with the lite mode
# The app in the lite mode doesn't store historical data and uses
# memory as a storage instead of Mongo DB
FROM node:14
WORKDIR /var/task/
COPY package.json package.json
COPY yarn.lock yarn.lock
RUN yarn
COPY . .
# secrets.json is not required in lite mode
# because a cache-layer in lite mode doesn't
# connect to the remote mongo DB
RUN rm -f ".secrets.json"
ENV MODE=PROD
ENV LIGHT_MODE = true
EXPOSE 9000
CMD [ "yarn", "start" ]

View File

@@ -1,10 +1,10 @@
const enableLightMode = !!getEnv("LIGHT_MODE", false);
const enableLiteMode = !!getEnv("LIGHT_MODE", false);
const dbUrls = {
local: "mongodb://localhost:27017/redstone",
};
if (!enableLightMode) {
if (!enableLiteMode) {
const secrets = require("./.secrets.json");
dbUrls["prod"] = secrets.dbUrl;
}
@@ -30,7 +30,7 @@ function isProd() {
}
module.exports = {
enableLightMode,
enableLiteMode,
dbUrl: getDbUrl(),
bigLimitWithMargin: 1200,
defaultLimit: 1,

View File

@@ -4,11 +4,15 @@ const { hideBin } = require("yargs/helpers");
const config = require("./config");
const app = require("./app");
const logger = require("./helpers/logger");
const {
connectToMongoMemoryServer,
connectToRemoteMongo,
} = require("./helpers/mongo");
const argv = yargs(hideBin(process.argv)).argv;
// Connecting to mongoDB
if (config.enableLightMode) {
if (config.enableLiteMode) {
connectToMongoMemoryServer();
} else {
connectToRemoteMongo(argv.db || config.dbUrl);

View File

@@ -4,6 +4,7 @@
"main": "index.js",
"license": "MIT",
"scripts": {
"start": "node -e 'require(\"./index\").runLocalServer()'",
"dev": "MODE=LOCAL node -e 'require(\"./index\").runLocalServer()'",
"test": "jest --coverage",
"test:ci": "NODE_ENV=test jest --ci --reporters='default' --reporters='./helpers/GithubActionsReporter'"
@@ -22,7 +23,7 @@
"lodash": "^4.17.21",
"mongodb-memory-server": "^7.5.1",
"mongoose": "^5.12.3",
"redstone-node": "^0.4.17",
"redstone-node": "^0.4.20",
"yargs": "^17.0.1"
},
"devDependencies": {

View File

@@ -14,7 +14,7 @@ module.exports.getRouter = (express) => {
configs(router);
providers(router);
if (!config.enableLightMode) {
if (!config.enableLiteMode) {
metrics(router);
errors(router);
}

View File

@@ -15,8 +15,8 @@ module.exports = (router) => {
* This endpoint is used for publishing a new price package
*/
router.post("/packages", asyncHandler(async (req, res) => {
// Cleaning older packages of the same provider before in the light mode
if (config.enableLightMode) {
// Cleaning older packages of the same provider before in the lite mode
if (config.enableLiteMode) {
await tryCleanCollection(Package, {
signer: req.body.signer,
timestamp: { $lt: Number(req.body.timestamp) },

View File

@@ -268,8 +268,8 @@ module.exports = (router) => {
await assertValidSignature(priceToVerify);
// Cleaning older prices for the same provider before posting
// new ones in the light mode
if (config.enableLightMode) {
// new ones in the lite mode
if (config.enableLiteMode) {
await tryCleanCollection(Price, {
provider: reqBody[0].provider,
timestamp: { $lt: Number(reqBody[0].timestamp) },
@@ -285,8 +285,8 @@ module.exports = (router) => {
await assertValidSignature(reqBody);
// Cleaning prices for the same provider and symbol before posting
// a new one in the light mode
if (config.enableLightMode) {
// a new one in the lite mode
if (config.enableLiteMode) {
await tryCleanCollection(Price, {
provider: reqBody.provider,
symbol: reqBody.symbol,

View File

@@ -4,5 +4,5 @@ module.exports = {
defaultLocalPort: 9000,
enableJsonLogs: false,
maxLimitForPrices: 3000,
enableLightMode: true,
enableLiteMode: true,
};

View File

@@ -2,7 +2,7 @@ const request = require("supertest");
const app = require("../../app");
const testDB = require("../test-db");
jest.mock("../../config", () => require("../helpers/light-mode-config"));
jest.mock("../../config", () => require("../helpers/lite-mode-config"));
describe("Testing configs route", () => {
beforeAll(async () => await testDB.connect());

View File

@@ -6,7 +6,7 @@ const Price = require("../../models/price");
const Package = require("../../models/package");
const { getProviders } = require("../../providers");
jest.mock("../../config", () => require("../helpers/light-mode-config"));
jest.mock("../../config", () => require("../helpers/lite-mode-config"));
const provider = getProviderForTests();

View File

@@ -7,7 +7,7 @@ const testDB = require("../test-db");
const { getProviders } = require("../../providers");
const Price = require("../../models/price");
jest.mock("../../config", () => require("../helpers/light-mode-config"));
jest.mock("../../config", () => require("../helpers/lite-mode-config"));
const provider = getProviderForTests();

View File

@@ -2,7 +2,7 @@ const request = require("supertest");
const app = require("../../app");
const testDB = require("../test-db");
jest.mock("../../config", () => require("../helpers/light-mode-config"));
jest.mock("../../config", () => require("../helpers/lite-mode-config"));
const providers = [
"redstone",

2694
yarn.lock

File diff suppressed because it is too large Load Diff