UNPKG

nda-installer

Version:

An application to deploy NodeJS projects from an internet browser

127 lines (105 loc) 3.72 kB
'use strict'; /** * NDA is protected by DMCA (2022). * It's source code is licensed under GNU AGPL 3.0 */ const fs = require('fs'); const path = require('path'); const lineReader = require('line-reader'); const projectConfig = require('../../config/project-configs'); const { currentDateTime } = require('./utilities'); const CHILD_PROCESS_LOG_PATH = projectConfig.CHILD_PROCESS_LOG_PATH; const LOG_TYPES = { '_0': 'INFO:', '_1': 'WARNING:', '_2': 'ERROR:' }; const storeToFile = (dateObj, msgContent, UID) => { let logFilePath = UID ? `${UID}_${dateObj}.txt` : `System_${dateObj}.txt`; let completeLogPath = path.resolve(CHILD_PROCESS_LOG_PATH, logFilePath); if (!fs.existsSync(completeLogPath)) { fs.writeFileSync(completeLogPath, ''); } fs.appendFileSync(completeLogPath, '\n' + msgContent); }; const writeLog = (response = null, statusCode = null, message, msgType = '_0', UID = null) => { message = message.toString(); if (msgType === '_1') { message = message.replace(LOG_TYPES._1, ''); } message = message.trim(); let dateTime = currentDateTime(); let msgContent = `${dateTime} ${LOG_TYPES[msgType]} ${message}`; storeToFile(dateTime.split(' ')[0], msgContent, UID); if (response) { return response.status(statusCode).json({ message }); } }; const getErrorType = (errMsg) => { let msgType = '_1'; if (errMsg && errMsg.toString().indexOf('WARNING') < 0) { msgType = '_2'; } return msgType; }; const latestLogFile = (UID, recent) => { let logFiles = fs.readdirSync(path.resolve(CHILD_PROCESS_LOG_PATH)); let logsByUID = []; if (recent) { let todayDate = currentDateTime().split(' ')[0]; return `${UID}_${todayDate}.txt`; } if (logFiles && logFiles.length > 0) { for (let i = 0; i < logFiles.length; i++) { let fileName = logFiles[i]; if (fileName.split('_')[0].toString().trim() === UID.toString().trim()) { let fileDate = fileName.split('_')[1].split('.')[0]; logsByUID.push({ id: fileName, date: new Date(fileDate) }); } } } if (logsByUID.length > 0) { logsByUID = logsByUID.sort((a, b) => { return new Date(b.date) - new Date(a.date); }); } return logsByUID[0] ? logsByUID[0].id : ''; }; const logContents = (filePath, index = 0, recent, limitInput, callback) => { let content = '', count = 0; let fileContent = fs.readFileSync(path.resolve(filePath)).toString().trim(); let totalLines = fileContent.split('\n').length; totalLines = totalLines > 0 ? totalLines + 1 : 0; if (recent) { index = totalLines > 10 ? totalLines - 10 : 0; } let defaultLimit = limitInput && parseInt(limitInput) > 100 ? parseInt(limitInput) : 100; let limit = index > 0 ? eval(parseInt(index) + defaultLimit) : defaultLimit; lineReader.eachLine(path.resolve(filePath), function (line, last, cb) { count++; if (count > index) { content += line; content += '\n'; } if (last || count >= limit) { cb(false); callback({ content, count, totalLines }); } else { cb(); } }); }; const deleteProjectLogs = (UID) => { let logFiles = fs.readdirSync(path.resolve(CHILD_PROCESS_LOG_PATH)); if (logFiles && logFiles.length > 0) { for (let i = 0; i < logFiles.length; i++) { let fileName = logFiles[i]; if (fileName.split('_')[0].toString().trim() === UID.toString().trim()) { fs.unlinkSync(path.resolve(CHILD_PROCESS_LOG_PATH, fileName)); } } } }; module.exports = { writeLog, getErrorType, latestLogFile, logContents, deleteProjectLogs };