var fs = require('fs'); var os = require("os"); var config = null; var logCfg = require('../config/config'); var dateFormat = require('dateformat'); function SutisLog() { } function getDateTimeFormat(time) { var years = new Date().getFullYear(); var months = new Date().getMonth() + 1; var day = new Date().getDate(); var hours = new Date().getHours(); var mins = new Date().getMinutes(); var monthFormatted = months < 10 ? "0" + months : months; var dayFormatted = day < 10 ? "0" + day : day; var hourFormatted = hours < 10 ? "0" + hours : hours; var result = ""; var minFormatted = null; var div = null; if ((mins % time) > 0) { minFormatted = ((Math.floor(mins / time)) * time); } else { minFormatted = mins; } minFormatted = minFormatted < 10 ? "0" + minFormatted : minFormatted; result = '' + years + monthFormatted + dayFormatted + hourFormatted + minFormatted; return result; } function getDateTimeLogFormat() { var dates = new Date(); var years = dates.getFullYear(); var months = dates.getMonth() + 1; var day = dates.getDate(); var hours = dates.getHours(); var minutes = dates.getMinutes(); var second = new Date().getSeconds(); var millisecs = dates.getMilliseconds(); var monthFormatted = months < 10 ? "0" + months : months; var dayFormatted = day < 10 ? "0" + day : day; var hourFormatted = hours < 10 ? "0" + hours : hours; var minFormatted = minutes < 10 ? "0" + minutes : minutes; var secFormatted = second < 10 ? "0" + second : second; var milliFormatted = null; if (millisecs < 10) { milliFormatted = "00" + millisecs; } else if (millisecs < 100) { milliFormatted = "0" + millisecs; } else { milliFormatted = millisecs; } // return '[' + years + '-' + monthFormatted + '-' + dayFormatted + ' ' + hourFormatted + ':' + minFormatted + ':' + secFormatted + ':' + milliFormatted + ']'; var detail = years + monthFormatted + dayFormatted + ' ' + hourFormatted + ':' + minFormatted + ':' + secFormatted + '|' + os.hostname() + '|' + logCfg.log.projectName + '|'; return detail; } function getLogFileName() { return os.hostname() + '_' + logCfg.log.projectName + '_' + getDateTimeFormat(logCfg.log.logTime) + '.log'; } function getStatFileName() { return os.hostname() + '_' + logCfg.log.projectName + '_' + getDateTimeFormat(logCfg.log.statTime) + '.stat'; } function getAlarmFileName() { return os.hostname() + '_' + logCfg.log.projectName + '_' + getDateTimeFormat(logCfg.log.alarmTime) + '.stat'; } function getSummaryFileName() { return os.hostname() + '_' + logCfg.log.projectName + '_' + getDateTimeFormat(logCfg.log.summaryTime) + '.summary'; } function getDetailFileName() { return os.hostname() + '_' + logCfg.log.projectName + '_' + getDateTimeFormat(logCfg.log.detailTime) + '.detail'; } SutisLog.prototype.info = function (logMessage) { var stream = fs.createWriteStream(logCfg.log.logPath + '/' + getLogFileName(), { 'flags': 'a' }); stream.once('open', function (fd) { stream.write(getDateTimeLogFormat() + ' - info: ' + logMessage + '\n'); stream.end(); }); }; SutisLog.prototype.error = function (logMessage) { var stream = fs.createWriteStream(logCfg.log.logPath + '/' + getLogFileName(), { 'flags': 'a' }); stream.once('open', function (fd) { stream.write(getDateTimeLogFormat() + ' - error: ' + logMessage + '\n'); stream.end(); }); }; // session, cmd, identity, resultCode, resultDescription SutisLog.prototype.summaryLog = function (session, cmd, identity, resultCode, resultDescription) { var dateFMT = 'yyyymmdd HH:MM:ss'; var stream = fs.createWriteStream(logCfg.log.summaryPath + '/' + getSummaryFileName(), { 'flags': 'a' }); // var test = { // x1: function() { // stream.once('open', function (fd) { // stream.write(getDateTimeLogFormat() + ' - summary: ' + 'txt-+-+-+dhjsdhfjkshfjsd' + '\n'); // stream.end(); // }); // } // } // return test; var summaryLog = { requestTime: new Date(), session: session, initInvoke: '', //only equinox platform cmd: cmd, identity: identity, resultCode: resultCode, resultDescription: resultDescription, blockDetail: [], addSuccessBlock: function(node, cmd, statusCode, detail){ this.blockDetail.push('['+ node+'; '+cmd+'(1); ['+ statusCode+'; '+detail+'(1)]]'); }, addErrorBlock: function(node, cmd, statusCode, detail, errorDetail){ this.blockDetail.push('['+ node+'; '+cmd+'(1); ['+ statusCode+'; '+detail+'(1)]]'); }, flush : function(){ var endTime = new Date(); var txt = dateFormat(this.requestTime, dateFMT) + '|'; txt += this.session +'|'; txt += this.initInvoke +'|' txt += this.cmd +'|' txt += this.identity +'|' txt += this.resultCode +'|' txt += this.resultDescription +'|' txt += this.blockDetail +'|' txt += dateFormat(endTime, dateFMT) +'|' txt += (endTime.getTime() - this.requestTime.getTime()); stream.once('open', function (fd) { stream.write(txt + '\n'); stream.end(); }); } }; return summaryLog; }; SutisLog.prototype.detail = function (req, cmd, size, mtime) { var stream = fs.createWriteStream(logCfg.log.detailPath + '/' + getDetailFileName(), { 'flags': 'a' }); var nodeName = 'SRFP-Genesis'; var dateFormat = require('dateformat'); // var dateFMT = 'l'; var dateFMT = 'yyyymmdd HH:MM:ss.l'; function dateTimeReq(dateFMT) { var date = new Date(); var dateMs = 'l'; var dateFor = dateFormat(date, dateFMT); var dateForms = dateFormat(date, dateMs); return [dateFor, dateForms] } function dateTimeRes(dateFMT) { // var time = new Date(); // var dateTime = formatDate(new Date(), dateFMT) // return [dateTime,time.getTime()]; var date = new Date(); var dateMs = 'l'; var dateFor = dateFormat(date, dateFMT); var dateForms = dateFormat(date, dateMs); return [dateFor, dateForms] } var requestTime = dateTimeReq(dateFMT); var responseTime = dateTimeRes(dateFMT); var processTime = parseInt(responseTime[1] - requestTime[1]); var appDetail = '{' + '"' + nodeName + '.Details' + '":{' + '"Session":"' + req.query.commandId + '",' + '"Scenario":"' + cmd + '",' + '"Identity":"",' + '"InputTimeStamp":"' + requestTime[0] + '",' + '"Input":' + '[' + '{' + '"Event":"' + nodeName + '.' + cmd + '",' + '"Type":"REQ",' + '"RawData":"' + req.protocol + '://' + req.get('host') + req.originalUrl + '",' + '"Data":' + '{' + '"Name":"' + req.query.name + '",' + '"Type":"' + req.query.type + '",' + '"CommandId":"' + req.query.commandId + '"' + '}' + '}' + '],' + '"OutputTimeStamp":"' + responseTime[0] + '",' + '"Output":' + '[' + '{' + '"Event":"' + nodeName + '.' + cmd + '",' + '"Type":"' + 'RES",' + '"RawData":"' + req.query.name + '",' + '"Data":' + '{' + '"Size":"' + size + '",' + '"Modified":"' + mtime + '"' + '}' + '}' + '],' + '"ProcessingTime":"' + processTime + ' ms"' + '}' + '}'; stream.once('open', function (fd) { stream.write(getDateTimeLogFormat() + appDetail + '\n'); stream.end(); }); }; SutisLog.prototype.statRecv = function (cmd, errCode) { var nodeName = 'SRFP-Genesis'; var stream = fs.createWriteStream(logCfg.log.statPath + '/' + getStatFileName(), { 'flags': 'a' }); var statName = nodeName; if (errCode == 20000 || errCode == 40401 || errCode == 40101) { statName = statName + ' Received Request'; } else if (errCode == 40400) { statName = statName + ' Received Unknown URL Request'; } else if (errCode == 40300) { statName = statName + ' Received Bad ' + cmd + ' Request'; } else { statName = statName + ' Received ' + cmd + ' error'; } stream.once('open', function (fd) { stream.write(getDateTimeLogFormat() + statName + '\n'); stream.end(); }); }; SutisLog.prototype.statRetn = function (cmd, errCode) { var nodeName = 'SRFP-Genesis'; var stream = fs.createWriteStream(logCfg.log.statPath + '/' + getStatFileName(), { 'flags': 'a' }); var statName = nodeName; if (errCode == 20000) { statName = statName + ' Returned ' + cmd + ' Success'; } else if (errCode == 40400) { statName = statName + ' Returned Unknown URL'; } else if (errCode == 40300 || errCode == 40401 || errCode == 40101 || errCode == 50000) { statName = statName + ' Returned ' + cmd + ' Error'; } else { // statName = statName + ' Returned ' + cmd + ' err ' + statDesc; } stream.once('open', function (fd) { stream.write(getDateTimeLogFormat() + statName + '\n'); stream.end(); }); }; SutisLog.prototype.alarm = function (cmd, errCode) { var nodeName = 'SRFP-Genesis'; var stream = fs.createWriteStream(logCfg.log.alarmPath + '/' + getAlarmFileName(), { 'flags': 'a' }); var alarmName = nodeName; if (errCode == 40400) { alarmName = alarmName + ' Received Unknown URL Request'; } else if (errCode == 40300) { alarmName = alarmName + ' Received Bad ' + cmd + ' Request'; } else { // alarmName = alarmName + ' Received ' + cmd + ' err ' + statDesc; } stream.once('open', function (fd) { stream.write(getDateTimeLogFormat() + alarmName + '\n'); stream.end(); }); }; module.exports = SutisLog;