mirror of
https://github.com/alexgo-io/redstone-cache-layer.git
synced 2026-01-12 16:53:15 +08:00
lite mode implementation
This commit is contained in:
@@ -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
26
Dockerfile.lite
Normal 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" ]
|
||||
@@ -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,
|
||||
|
||||
6
index.js
6
index.js
@@ -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);
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -14,7 +14,7 @@ module.exports.getRouter = (express) => {
|
||||
configs(router);
|
||||
providers(router);
|
||||
|
||||
if (!config.enableLightMode) {
|
||||
if (!config.enableLiteMode) {
|
||||
metrics(router);
|
||||
errors(router);
|
||||
}
|
||||
|
||||
@@ -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) },
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -4,5 +4,5 @@ module.exports = {
|
||||
defaultLocalPort: 9000,
|
||||
enableJsonLogs: false,
|
||||
maxLimitForPrices: 3000,
|
||||
enableLightMode: true,
|
||||
enableLiteMode: true,
|
||||
};
|
||||
@@ -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());
|
||||
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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",
|
||||
Reference in New Issue
Block a user