yekonga-server
Version:
Yekonga Server
104 lines (84 loc) • 3.53 kB
JavaScript
// @ts-nocheck
/*global Yekonga, serverLibrary */
const fs = serverLibrary.fs;
const path = serverLibrary.path;
// const util = require('util');
const datetime = serverLibrary.moment;
const express = serverLibrary.express;
// *************************************************************************************************
var defaultInterval = 60 * 60 * 24 * 1000;
var defaultDateFormat = 'YYYY-MM-DD HH:mm:ss';
// *************************************************************************************************
module.exports = function(options) {
const output = (options && options.output)? options.output: false;
const dir = path.dirname(options.path);
var extracted = path.basename(options.path).split('.');
extracted.pop();
const extension = path.extname(options.path);
const basename = extracted.join('.');
return (request, response, next) => {
const requestStart = Date.now();
const filename = basename + `-` + datetime().format('YYYY-MM-DD') + extension;
const logPath = path.join(dir, filename);
if (!fs.existsSync(logPath)) {
Yekonga.Helper.writeFile(logPath, '');
}
try {
var oldWrite = response.write,
oldEnd = response.end;
var chunks = [];
response.write = function (chunk) {
chunks.push(Buffer.from(chunk));
return oldWrite.apply(response, arguments);
};
response.end = function (chunk) {
if (chunk) {
chunks.push(Buffer.from(chunk));
}
const { Client } = request.Yekonga;
const { rawHeaders, httpVersion, method, socket, url, body } = request;
const { remoteAddress, remoteFamily } = socket;
const { headers, ipAddress, host } = Client || {};
var loggerContent = {
timestamp: Date.now(),
processingTime: Date.now() - requestStart,
request: {
rawHeaders: headers,
httpVersion,
method,
remoteAddress: ipAddress,
remoteFamily,
host,
url,
body,
}
}
if(output) {
var responseBody = Buffer.concat(chunks).toString('utf8');
try {
if(typeof responseBody === 'string') {
responseBody = JSON.parse(responseBody);
}
} catch (error) {
responseBody = Buffer.concat(chunks).toString('utf8');
}
loggerContent.response = {
body: responseBody,
statusCode: response.statusCode,
}
}
var data = JSON.stringify(loggerContent);
fs.appendFile(logPath, data + "\n", (error) => {
chunks = null;
loggerContent = null;
});
oldEnd.apply(response, arguments);
};
} catch (error) {
console.error(error.message)
}
if(typeof next === 'function') {
return next();
}
};
}