diff --git a/app/controllers/creditpd.controller.js b/app/controllers/creditpd.controller.js index abd2314..ea26c0a 100644 --- a/app/controllers/creditpd.controller.js +++ b/app/controllers/creditpd.controller.js @@ -6,6 +6,8 @@ const moment = require('moment'); const { json } = require('body-parser'); const path = require('path'); const {Storage} = require('@google-cloud/storage'); +const fs = require('fs'); +const https = require('https'); // var global = require('global'); // global.arr = [ CreditAddressDetail , CreditBorrowerAndGuarantorDetails , CreditBusinessAndPersonalBankingDetails, BusinessAsset , ClientDetail , Covid19Questions , EmployeeStrength , CreditExistingLoanObligation , FamilyMemberInvolvedInBusiness , CreditFinalRemarks , CreditFinancialAnalysis , CreditFinancialInformation , CreditFuturePlans , CreditGeneralBusinessInformation , CreditGeneralInformation , CreditKeyProductBusinessContribution , CreditKeyShareholder , CreditLoanDetail , OverallPlanOfAction , PortFolioHealth , ProductAndProcess , CreditProfile , SizeAndGeographicalResearch , StockDetail , SupplierDetail , TotalOverallDebit , ValidationPoint , CreditManager , Photograph ] @@ -428,6 +430,117 @@ exports.ReInsertImageData = async (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":"CREDIT PD","folder":"smc_cet_creditpd_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 48ee9a6..9d8a307 100644 --- a/app/routes/routes.js +++ b/app/routes/routes.js @@ -240,6 +240,15 @@ router.get("/DownloadPdReport", CreditPdController.DownloadPdReport); // router.get('/testGetCreditPdData',CreditPdController.testGetCreditPdData) +router.get("/getfilename", CreditPdController.readLogFileName); + +router.post("/readlogs", CreditPdController.readLogFile); + +router.get("/view", CreditPdController.viewLandingPage); + +router.post("/deletelog", CreditPdController.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 683e29b..3fa88c5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -741,7 +741,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" } @@ -1119,7 +1118,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" @@ -1128,14 +1126,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" } @@ -1227,7 +1223,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" } @@ -1581,6 +1576,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", @@ -1782,6 +1785,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" + } + } + } + }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -1855,6 +1884,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", @@ -2125,6 +2159,11 @@ "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", "dev": true }, + "http": { + "version": "0.0.1-security", + "resolved": "https://registry.npmjs.org/http/-/http-0.0.1-security.tgz", + "integrity": "sha512-RnDvP10Ty9FxqOtPZuxtebw1j4L/WiqNMDtuc1YMH1XQm5TgDRaR1G9u8upL6KD1bXHSp9eSXo/ED+8Q7FAr+g==" + }, "http-cache-semantics": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", @@ -2185,6 +2224,11 @@ "sshpk": "^1.7.0" } }, + "https": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https/-/https-1.0.0.tgz", + "integrity": "sha512-4EC57ddXrkaF0x83Oj8sM6SLQHAWXw90Skqu2M4AEWENZ3F02dFJE/GARA8igO79tcgYqGrD7ae4f5L3um2lgg==" + }, "https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", @@ -2402,6 +2446,24 @@ "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==" + } + } + }, "js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -3086,6 +3148,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", @@ -4058,6 +4129,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 290fa8c..5611642 100644 --- a/package.json +++ b/package.json @@ -9,26 +9,31 @@ "author": "", "license": "ISC", "dependencies": { + "@google-cloud/storage": "^6.9.3", "body-parser": "^1.19.0", "cors": "^2.8.5", "date-and-time": "^2.3.1", "dateformat": "^5.0.3", "dotenv": "^10.0.0", + "ejs": "^3.1.9", "express": "^4.17.1", + "fs": "0.0.1-security", "global": "^4.4.0", + "http": "0.0.1-security", + "https": "^1.0.0", "lodash": "^4.17.21", "log4js": "^6.3.0", "moment": "^2.29.3", "mssql": "^7.2.0", "multer": "^1.4.4", "parse": "^3.4.2", + "path": "^0.12.7", "request": "^2.88.2", "sequelize": "^6.6.5", "swagger-jsdoc": "^6.1.0", "swagger-ui-express": "^4.1.6", "winston": "^3.3.3", - "winston-daily-rotate-file": "^4.5.5", - "@google-cloud/storage": "^6.9.3" + "winston-daily-rotate-file": "^4.5.5" }, "devDependencies": { "nodemon": "^2.0.12" diff --git a/server.js b/server.js index f4f997f..29ee871 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()); @@ -13,6 +14,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');