diff --git a/.env b/.env index 936ba59..c4303ce 100644 --- a/.env +++ b/.env @@ -7,18 +7,20 @@ NODE_ENV = development TESTNET_DB_PORT = 5432 TESTNET_DB_HOST = localhost -TESTNET_DB_USERNAME = root +TESTNET_DB_USERNAME = postgres TESTNET_DB_PASSWORD = blaze.ws -TESTNET_DB_DATABASE = epic_data_new +TESTNET_DB_DATABASE = epicnew FLOONET_DB_PORT = 5432 FLOONET_DB_HOST = localhost -FLOONET_DB_USERNAME = root +FLOONET_DB_USERNAME = postgres FLOONET_DB_PASSWORD = blaze.ws -FLOONET_DB_DATABASE = epic - +FLOONET_DB_DATABASE = epicnew TESTNET_PEER_URL = http://116.203.152.58:3413/v1/peers/connected FLOONET_PEER_URL = http://116.203.152.58:13413/v1/peers/connected TIME_ZONE = utc + +REDIS_KEY = explorer2 +REDIS_EXPIRY = 60 \ No newline at end of file diff --git a/package.json b/package.json index 06ad8d8..4efc90f 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "start": "ng serve", "build": "ng build", "lint": "ng lint", - "copyToLive":"rm -rf live && cp -rf dist live", + "copyToLive": "rm -rf live && cp -rf dist live", "build:client-and-server-bundles": "ng build --prod && ng run explorer2-epic:server:production", "build:prerender": "npm run build:client-and-server-bundles && npm run compile:server && npm run generate:prerender", "build:ssr": "npm run build:client-and-server-bundles && npm run compile:server && npm run move:build && npm run copyToLive", @@ -30,6 +30,7 @@ "@nguniversal/express-engine": "^7.0.2", "@nguniversal/module-map-ngfactory-loader": "^7.0.2", "@ngx-translate/core": "^11.0.1", + "axios": "^0.19.0", "babel-preset-es2015": "^6.24.1", "body-parser": "^1.19.0", "class-transformer": "^0.2.3", @@ -46,6 +47,7 @@ "pg": "^7.11.0", "pg-native": "^3.0.0", "plotly.js": "^1.48.3", + "redis": "^2.8.0", "rxjs": "~6.4.0", "socket.io": "^2.2.0", "socket.io-client": "^2.2.0", @@ -61,9 +63,11 @@ "@angular/cli": "~8.0.2", "@angular/compiler-cli": "~8.0.0", "@angular/language-service": "~8.0.0", - "@types/node": "~8.9.4", "@types/jasmine": "~3.3.8", "@types/jasminewd2": "~2.0.3", + "@types/memory-cache": "^0.2.0", + "@types/node": "~8.9.4", + "@types/redis": "^2.8.13", "codelyzer": "^5.0.0", "jasmine-core": "~3.4.0", "jasmine-spec-reporter": "~4.2.1", diff --git a/server/controllers/BlockchainBlock.ts b/server/controllers/BlockchainBlock.ts index d9cbff7..c686295 100644 --- a/server/controllers/BlockchainBlock.ts +++ b/server/controllers/BlockchainBlock.ts @@ -2,7 +2,7 @@ import express from 'express'; import { Global } from "../global"; import { Request, Response, NextFunction } from 'express'; import { getRepository, getConnection } from 'typeorm'; -import { validationMiddleware } from '../middlewares'; +import { validationMiddleware, redisMiddleware } from '../middlewares'; import { InternalServerErrorException, NoDataFoundException, @@ -208,6 +208,7 @@ export class BlockchainBlockController { this.router.post( `${this.path}`, validationMiddleware(BlockchainBlockCreateDto), + redisMiddleware(process.env.REDIS_EXPIRY), this.BlockchainBlockCreate, ); @@ -251,6 +252,7 @@ export class BlockchainBlockController { this.router.get( `${this.path}/totaldiff`, validationMiddleware(TotalDifficultyNBlockDto, true), + redisMiddleware(process.env.REDIS_EXPIRY), this.TotalDifficultyNBlock, ); @@ -286,6 +288,7 @@ export class BlockchainBlockController { this.router.get( `${this.path}/blockcount`, validationMiddleware(TotalDifficultyNBlockDto, true), + redisMiddleware(process.env.REDIS_EXPIRY), this.BlockCount, ); @@ -315,6 +318,7 @@ export class BlockchainBlockController { this.router.get( `${this.path}/blockinterval`, validationMiddleware(TotalDifficultyNBlockDto, true), + redisMiddleware(process.env.REDIS_EXPIRY), this.BlockInterval, ); @@ -350,6 +354,7 @@ export class BlockchainBlockController { this.router.get( `${this.path}/stackblock`, validationMiddleware(TotalDifficultyNBlockDto, true), + redisMiddleware(process.env.REDIS_EXPIRY), this.StackBlock, ); @@ -385,6 +390,7 @@ export class BlockchainBlockController { this.router.get( `${this.path}/blockpiechart`, validationMiddleware(TotalDifficultyNBlockDto, true), + redisMiddleware(process.env.REDIS_EXPIRY), this.BlockPieChart, ); @@ -420,6 +426,7 @@ export class BlockchainBlockController { this.router.get( `${this.path}/hashrate`, validationMiddleware(TotalDifficultyNBlockDto, true), + redisMiddleware(process.env.REDIS_EXPIRY), this.HashRate, ); @@ -442,6 +449,7 @@ export class BlockchainBlockController { this.router.get( `${this.path}/latesblockdetails`, validationMiddleware(TotalDifficultyNBlockDto, true), + redisMiddleware(process.env.REDIS_EXPIRY), this.LatestDifficultyNBlock, ); @@ -477,6 +485,7 @@ export class BlockchainBlockController { this.router.get( `${this.path}/blockspersec`, validationMiddleware(TotalDifficultyNBlockDto, true), + redisMiddleware(process.env.REDIS_EXPIRY), this.BlockchainBlockPerSecond, ); @@ -512,6 +521,7 @@ export class BlockchainBlockController { this.router.get( `${this.path}/supplygrowth`, validationMiddleware(TotalDifficultyNBlockDto, true), + redisMiddleware(process.env.REDIS_EXPIRY), this.SupplyGrowth, ); @@ -547,6 +557,7 @@ export class BlockchainBlockController { this.router.get( `${this.path}/blockminedchart`, validationMiddleware(TotalDifficultyNBlockDto, true), + redisMiddleware(process.env.REDIS_EXPIRY), this.BlockMineChart, ); @@ -580,6 +591,7 @@ export class BlockchainBlockController { this.router.get( `${this.path}/list`, validationMiddleware(BlockchainBlockPaginationDto), + redisMiddleware(process.env.REDIS_EXPIRY), this.BlockchainBlockPagination, ); @@ -608,6 +620,7 @@ export class BlockchainBlockController { this.router.get( `${this.path}/:hash`, validationMiddleware(BlockchainBlockSingleViewDto, true), + redisMiddleware(process.env.REDIS_EXPIRY), this.BlockchainBlockFetch, ); @@ -637,6 +650,7 @@ export class BlockchainBlockController { this.router.patch( `${this.path}`, validationMiddleware(BlockchainBlockUpdateDto), + redisMiddleware(process.env.REDIS_EXPIRY), this.BlockchainBlockUpdate, ); @@ -665,6 +679,7 @@ export class BlockchainBlockController { this.router.delete( `${this.path}/:hash`, validationMiddleware(BlockchainBlockSingleViewDto), + redisMiddleware(process.env.REDIS_EXPIRY), this.BlockchainBlockDelete, ); } diff --git a/server/controllers/BlockchainInput.ts b/server/controllers/BlockchainInput.ts index f46e00e..05a676b 100644 --- a/server/controllers/BlockchainInput.ts +++ b/server/controllers/BlockchainInput.ts @@ -1,7 +1,7 @@ import express from 'express'; import { Request, Response, NextFunction } from 'express'; import { getRepository,getConnection } from 'typeorm'; -import { validationMiddleware } from '../middlewares'; +import { validationMiddleware, redisMiddleware } from '../middlewares'; import { InternalServerErrorException, NoDataFoundException, @@ -63,6 +63,7 @@ export class BlockchainInputController { this.router.post( `${this.path}`, validationMiddleware(BlockchainInputCreateDto), + redisMiddleware(process.env.REDIS_EXPIRY), this.BlockchainInputCreate, ); @@ -101,6 +102,7 @@ export class BlockchainInputController { this.router.get( `${this.path}/list`, validationMiddleware(BlockchainInputPaginationDto), + redisMiddleware(process.env.REDIS_EXPIRY), this.BlockchainInputPagination, ); @@ -129,6 +131,7 @@ export class BlockchainInputController { this.router.get( `${this.path}/:id`, validationMiddleware(BlockchainInputSingleViewDto), + redisMiddleware(process.env.REDIS_EXPIRY), this.BlockchainInputFetch, ); @@ -158,6 +161,7 @@ export class BlockchainInputController { this.router.patch( `${this.path}`, validationMiddleware(BlockchainInputUpdateDto), + redisMiddleware(process.env.REDIS_EXPIRY), this.BlockchainInputUpdate, ); @@ -186,6 +190,7 @@ export class BlockchainInputController { this.router.delete( `${this.path}/:id`, validationMiddleware(BlockchainInputSingleViewDto), + redisMiddleware(process.env.REDIS_EXPIRY), this.BlockchainInputDelete, ); } diff --git a/server/controllers/BlockchainKernel.ts b/server/controllers/BlockchainKernel.ts index 29c9a58..9c02987 100644 --- a/server/controllers/BlockchainKernel.ts +++ b/server/controllers/BlockchainKernel.ts @@ -1,7 +1,7 @@ import express from 'express'; import { Request, Response, NextFunction } from 'express'; import { getRepository, getConnection } from 'typeorm'; -import { validationMiddleware } from '../middlewares'; +import { validationMiddleware, redisMiddleware } from '../middlewares'; import { Global } from "../global"; import * as path from 'path'; import { @@ -84,6 +84,7 @@ export class BlockchainKernelController { this.router.post( `${this.path}`, validationMiddleware(BlockchainKernelCreateDto), + redisMiddleware(process.env.REDIS_EXPIRY), this.BlockchainKernelCreate, ); @@ -119,6 +120,7 @@ export class BlockchainKernelController { this.router.get( `${this.path}/transactionfee`, validationMiddleware(TransactionFeeDto, true), + redisMiddleware(process.env.REDIS_EXPIRY), this.TransactionFee, ); @@ -211,6 +213,7 @@ export class BlockchainKernelController { this.router.get( `${this.path}/transactionheatmap`, validationMiddleware(TransactionFeeDto, true), + redisMiddleware(process.env.REDIS_EXPIRY), this.HeatmapChart, ); @@ -246,6 +249,7 @@ export class BlockchainKernelController { this.router.get( `${this.path}/transactionlinechart`, validationMiddleware(TransactionFeeDto, true), + redisMiddleware(process.env.REDIS_EXPIRY), this.TransactionChart, ); @@ -284,6 +288,7 @@ export class BlockchainKernelController { this.router.get( `${this.path}/list`, validationMiddleware(BlockchainKernelPaginationDto), + redisMiddleware(process.env.REDIS_EXPIRY), this.BlockchainKernelPagination, ); @@ -312,6 +317,7 @@ export class BlockchainKernelController { this.router.get( `${this.path}/:id`, validationMiddleware(BlockchainKernelSingleViewDto), + redisMiddleware(process.env.REDIS_EXPIRY), this.BlockchainKernelFetch, ); @@ -341,6 +347,7 @@ export class BlockchainKernelController { this.router.patch( `${this.path}`, validationMiddleware(BlockchainKernelUpdateDto), + redisMiddleware(process.env.REDIS_EXPIRY), this.BlockchainKernelUpdate, ); @@ -369,6 +376,7 @@ export class BlockchainKernelController { this.router.delete( `${this.path}/:id`, validationMiddleware(BlockchainKernelSingleViewDto), + redisMiddleware(process.env.REDIS_EXPIRY), this.BlockchainKernelDelete, ); } diff --git a/server/controllers/BlockchainOutput.ts b/server/controllers/BlockchainOutput.ts index f0acb9f..4b2a17a 100644 --- a/server/controllers/BlockchainOutput.ts +++ b/server/controllers/BlockchainOutput.ts @@ -1,7 +1,7 @@ import express from 'express'; import { Request, Response, NextFunction } from 'express'; import { getRepository, getConnection } from 'typeorm'; -import { validationMiddleware } from '../middlewares'; +import { validationMiddleware, redisMiddleware } from '../middlewares'; import { Global } from "../global"; import { @@ -77,6 +77,7 @@ export class BlockchainOutputController { this.router.post( `${this.path}`, validationMiddleware(BlockchainOutputCreateDto), + redisMiddleware(process.env.REDIS_EXPIRY), this.BlockchainOutputCreate, ); @@ -115,6 +116,7 @@ export class BlockchainOutputController { this.router.get( `${this.path}/list`, validationMiddleware(BlockchainOutputPaginationDto), + redisMiddleware(process.env.REDIS_EXPIRY), this.BlockchainOutputPagination, ); @@ -143,6 +145,7 @@ export class BlockchainOutputController { this.router.get( `${this.path}/:id`, validationMiddleware(BlockchainOutputSingleViewDto), + redisMiddleware(process.env.REDIS_EXPIRY), this.BlockchainOutputFetch, ); @@ -172,6 +175,7 @@ export class BlockchainOutputController { this.router.patch( `${this.path}`, validationMiddleware(BlockchainOutputUpdateDto), + redisMiddleware(process.env.REDIS_EXPIRY), this.BlockchainOutputUpdate, ); @@ -200,6 +204,7 @@ export class BlockchainOutputController { this.router.delete( `${this.path}/:id`, validationMiddleware(BlockchainOutputSingleViewDto), + redisMiddleware(process.env.REDIS_EXPIRY), this.BlockchainOutputDelete, ); } diff --git a/server/middlewares/index.ts b/server/middlewares/index.ts index e9a4fb2..2cd56c0 100644 --- a/server/middlewares/index.ts +++ b/server/middlewares/index.ts @@ -1,2 +1,3 @@ export * from './error.middleware'; export * from './validator.middleware'; +export * from './redis.middleware'; \ No newline at end of file diff --git a/server/middlewares/redis.middleware.ts b/server/middlewares/redis.middleware.ts new file mode 100644 index 0000000..8f77d74 --- /dev/null +++ b/server/middlewares/redis.middleware.ts @@ -0,0 +1,45 @@ +import { NextFunction, Request, Response } from 'express'; +import { HttpException } from '../exceptions/index'; +import * as redis from 'redis'; +import { Global } from "../global"; +import { Duration } from 'moment'; + +// connect to Redis +const REDIS_URL = process.env.REDIS_URL; +const client = redis.createClient(REDIS_URL); + +client.on('connect', () => { + console.log(`connected to redis`); +}); +client.on('error', err => { + console.log(`Error: ${err}`); +}); + +export function redisMiddleware( + duration: any, + ) { + console.log(duration); + return (request, response, next) => { + // Global.network = request.headers.network; + let key = process.env.REDIS_KEY + Global.network + request.originalUrl || request.url + client.get(key, function(err, reply){ + if(reply && duration!=0){ + console.log("key : ", key); + console.log("reply : ", reply); + console.log("---------------------------------------------------------------------------------------"); + console.log(`enabled`); + response.send(reply); + }else{ + console.log(`raw`); + response.sendResponse = response.send; + response.send = (body) => { + client.set(key, JSON.stringify(body), 'EX', duration, function(err){ + //client.set(key, JSON.stringify(body)); + response.sendResponse(body); + }); + } + next(); + } + }); + } +} \ No newline at end of file diff --git a/src/environments/environment.ts b/src/environments/environment.ts index cea3f9d..ca7d702 100644 --- a/src/environments/environment.ts +++ b/src/environments/environment.ts @@ -4,7 +4,7 @@ export const environment = { production: false, - domain: '/', + domain: 'https://explorer.epic.tech/', apiUrl: 'https://explorer.epic.tech/epic_explorer/v1', };