UNPKG

cctail

Version:

Salesforce Commerce Cloud logs remote tail

96 lines (95 loc) 3.54 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const moment_1 = __importDefault(require("moment")); const logger_1 = __importDefault(require("./logger")); const logparser = { process: async function (files) { return Promise.all(files).then((values) => { return values.map((data) => { if (data[0].log.endsWith(".csv")) return this.parseCsv(data); else return this.parseLog(data); }).reduce((a, b) => { if (a.length === 0) return b; return a.concat(b); }); }); }, parseCsv: function (logdata) { let logfile = logdata[0].log.replace("/", "-"); let timestamp = logdata[0].date; let data = logdata[1]; let linesobj = []; let regexp = new RegExp((/([^\n]+)/g)); let mmatch; while (mmatch = regexp.exec(data)) { let start = mmatch.index; let end = start + mmatch[0].length; // Start > 0 guarantees we skip the first line, which is the CSV header. if (start > 0 && end > 0) { linesobj.push({ message: data.substring(start, end), timestamp: timestamp, level: logger_1.default.profile, logfile: logfile }); } } return linesobj; }, parseLog: function (logdata) { let logfile = logdata[0].log; let data = logdata[1]; let linesobj = []; let regexp = new RegExp((/\[([.0-9 .:-]*) GMT\] (DEBUG|INFO|WARN|ERROR|FATAL)? ?(.*)/g)); regexp.lastIndex = 0; let lastmatchend = 0; let mmatch; // eslint-disable-next-line no-cond-assign while (mmatch = regexp.exec(data)) { let start = mmatch.index; let end = start + mmatch[0].length; if (start > 0 && linesobj.length === 0) { linesobj.push({ message: data.substring(0, start - 1), timestamp: undefined, level: undefined, logfile: logfile }); } else if (start > (lastmatchend + 1)) { // append extra lines to the previous log linesobj[linesobj.length - 1].message += `${data.substring(lastmatchend, start - 1)}`; } // 2019-07-15 11:00:07.235 let timestamp = moment_1.default.utc(mmatch[1], "YYYY-MM-DD HH:mm:ss.SSS"); let level = mmatch[2] || 'INFO'; let message = mmatch[3]; lastmatchend = end; linesobj.push({ timestamp, level, message, logfile }); } if (linesobj.length > 0 && lastmatchend < data.length) { linesobj[linesobj.length - 1].message += `${data.substring(lastmatchend, data.length)}`; } if (lastmatchend === 0 && data && data.length > 0) { // no match linesobj.push({ message: data, timestamp: undefined, level: undefined, logfile: logfile }); } return linesobj; } }; exports.default = logparser;