diff --git a/app/controllers/test.controller.js b/app/controllers/test.controller.js index 6d0ba89..acc9941 100644 --- a/app/controllers/test.controller.js +++ b/app/controllers/test.controller.js @@ -1,5 +1,7 @@ const { sequelize,Test} = require('../models') const { logMsg } = require('../services/logger.js'); +const fs = require('fs'); +const path = require('path'); exports.Welcome = (req, res) => { @@ -19,3 +21,117 @@ exports.Welcome = (req, res) => }; + + +exports.readLogFileName = async (req , res) => +{ + try + { + folderName = req; + const logFilePath = 'storage/log'; + + const fileNames = fs.readdirSync(logFilePath); + // Remove the first element (0th index) + const [, ...data] = fileNames; + return data; + + } + catch(err) + { + res.status(500).send({'status':404, + message: err.message || "Some error occurred while inserting statements." ,'data': "No data" + }); + } //end of try catch +}; + + +exports.readLogFile = async (req , res) => +{ + try + { + folderName = req.body.folder; + fileName = req.body.file; + const logFilePath = 'storage/log/'+fileName; + + fs.readFile(logFilePath, 'utf8', (err, data) => { + if (err) { + console.error(err); + res.status(500).send({'status':404,'message': err.message || "Error reading log file." ,'data': "No data"}); + } + res.send({'status':200 , message:"Success." ,'data': data}); + }); + + } + catch(err) + { + res.status(500).send({'status':404, + message: err.message || "Some error occurred while inserting statements." ,'data': "No data" + }); + } //end of try catch +}; + + +exports.viewLandingPage = async (req , res) => +{ + try + { + moduleName = [ { "module":"MAINAPP","folder":"smc_cet_mainapp_backend"} ]; + img = [] + for(const [index,val] of moduleName.entries()) + { + fileName = await this.readLogFileName(val.folder); + for (let i = 0; i < fileName.length; i++) + { + filePath = 'storage/log/'+fileName[i]; + const logData = fs.readFileSync(filePath); + // Convert the file content to Base64 + const base64Data = logData.toString('base64'); + // Create Base64 URL from Base64 data + const base64Url = `data:application/octet-stream;base64,${encodeURIComponent(base64Data)}`; + img.push(base64Url) + } + moduleName[index] = await Object.assign(val,{'file':fileName , 'img':img}); + }; + res.render( 'module' , { 'data' : moduleName } ,function (err, html ) { + res.send(html) + }) + } + catch(err) + { + res.status(500).send({'status':404, + message: err.message || "Some error occurred while inserting statements." ,'data': "No data" + }); + } //end of try catch +}; + + +exports.deleteLogFile = async (req , res) => +{ + try + { + folderName = req.body.folder; + fileName = req.body.file; + + // folderName = 'smc_cet_creditpd_backend'; + // fileName = 'msg.log.2023-07-10'; + const logFilePath = 'storage/log/'+fileName; + fs.unlink(logFilePath, (err) => { + if (err) { + console.error(`Error deleting file: ${err}`); + return; + } + + console.log('File deleted successfully.'); + res.send({'status':200 , message:"Success." ,'data': 'No data'}); + }); + + } + catch(err) + { + res.status(500).send({'status':404, + message: err.message || "Some error occurred while inserting statements." ,'data': "No data" + }); + } //end of try catch +}; + + diff --git a/app/routes/routes.js b/app/routes/routes.js index a1cfb94..4a976ea 100644 --- a/app/routes/routes.js +++ b/app/routes/routes.js @@ -2546,6 +2546,15 @@ router.delete("/DeleteTradeReference", Entitycontroller.DeleteTradeReference); router.get("/mainLandingPage", Loancontroller.mainLandingPage); +router.get("/getfilename", Testcontroller.readLogFileName); + +router.post("/readlogs", Testcontroller.readLogFile); + +router.get("/view", Testcontroller.viewLandingPage); + +router.post("/deletelog", Testcontroller.deleteLogFile); + + // routes started here app.use('/api', router); }; diff --git a/app/views/module.ejs b/app/views/module.ejs new file mode 100644 index 0000000..0c2c6f4 --- /dev/null +++ b/app/views/module.ejs @@ -0,0 +1,337 @@ + + + + + + + + + + +
+ <% for (let i = 0; i < data.length; i++) { %> +
+
+
+

+ LOGS + +

+
+ <%= data[i].file.length %> +
+
+
+ <% for (let j = 0; j < data[i].file.length; j++) { %> +
+ +
+ <% } %> +
+
+ Close +
+
+
+
+
+ <% } %> +
+ + + + + + + + + + \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 90d6f87..44d83af 100644 --- a/package-lock.json +++ b/package-lock.json @@ -600,7 +600,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" }, @@ -609,7 +608,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "requires": { "color-name": "~1.1.4" } @@ -617,8 +615,7 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" } } }, @@ -923,7 +920,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -932,14 +928,12 @@ "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -1283,6 +1277,14 @@ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, + "ejs": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", + "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", + "requires": { + "jake": "^10.8.5" + } + }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -1414,6 +1416,32 @@ "moment": "^2.29.1" } }, + "filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "requires": { + "minimatch": "^5.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, "filesize": { "version": "1.6.7", "resolved": "https://registry.npmjs.org/filesize/-/filesize-1.6.7.tgz", @@ -1492,6 +1520,11 @@ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" }, + "fs": { + "version": "0.0.1-security", + "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", + "integrity": "sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==" + }, "fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", @@ -1934,6 +1967,32 @@ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, + "jake": { + "version": "10.8.7", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", + "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", + "requires": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "dependencies": { + "async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, "js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -2561,6 +2620,15 @@ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, + "path": { + "version": "0.12.7", + "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", + "integrity": "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==", + "requires": { + "process": "^0.11.1", + "util": "^0.10.3" + } + }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -3438,6 +3506,21 @@ "prepend-http": "^2.0.0" } }, + "util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" + } + } + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", diff --git a/package.json b/package.json index 705d64d..dc98697 100644 --- a/package.json +++ b/package.json @@ -15,10 +15,13 @@ "date-fns": "^2.28.0", "dist": "^0.1.2", "dotenv": "^10.0.0", + "ejs": "^3.1.9", "express": "^4.17.1", "formula-yearfrac": "^0.0.1", + "fs": "0.0.1-security", "log4js": "^6.3.0", "mssql": "^7.2.0", + "path": "^0.12.7", "request": "^2.88.2", "sequelize": "^6.21.1", "swagger-jsdoc": "^6.1.0", diff --git a/server.js b/server.js index c17fe63..ada62d8 100644 --- a/server.js +++ b/server.js @@ -1,6 +1,7 @@ require('dotenv').config(); const express = require('express') -const app = express() +const app = express(); +const path = require('path'); // Enable CORS for all routes const cors = require('cors'); app.use(cors()); @@ -14,6 +15,9 @@ app.use(function(req, res, next) { }) const {logMsg} = require('./app/services/logger.js'); +app.set('views', path.join(__dirname, 'app\\views')); +app.set('view engine', 'ejs'); + const swaggerJsdoc = require('swagger-jsdoc'); const swaggerUi = require('swagger-ui-express');