SutisLog.js 9.9 KB
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;