flexbiz-server
Version:
Flexible Server
8 lines (7 loc) • 2.75 kB
JavaScript
const mongoose=require("mongoose"),Schema=mongoose.Schema,{onAfterCommit}=require("../libs/sessionContext.js"),logSchema=new Schema({id_app:{type:String},id_func:{type:String},action:{type:String},description:{type:String},data:{},result:Schema.Types.Mixed,ip:{type:String},user_agent:{type:String},status:{type:Boolean,default:!0},date_created:{type:Date,default:Date.now,expires:15552E3},date_updated:{type:Date,default:Date.now},user_created:{type:String,default:""},user_updated:{type:String,default:""}});
(global.configs||{}).createIndexes&&(logSchema.index({id_app:1,date_created:-1},{background:!0}),logSchema.index({id_app:1,user_created:1,date_created:-1},{background:!0}),logSchema.index({id_app:1,ip:1},{background:!0}),logSchema.index({id_app:1,id_func:1,action:1,date_created:-1}),logSchema.index({id_app:1,id_func:1,"data.data.id_link":1}),logSchema.index({id_app:1,id_func:1,"data.newData.id_link":1}),logSchema.index({id_app:1,"data.id":1}),logSchema.index({id_app:1,"data.id":1,"data.data.id_link":1,
"data.oldData.id_link":1,action:1,date_created:-1}));const Log=mongoose.models.log||mongoose.model("log",logSchema);
class LogBuffer{constructor($gracefulShutdown_model$$,$batchSize$$=1E3,$flushInterval$$=5E3){this.model=$gracefulShutdown_model$$;this.buffer=[];this.batchSize=$batchSize$$;this.flushInterval=$flushInterval$$;this.timer=null;this.startTimer();$gracefulShutdown_model$$=async()=>{Logger.info("Server stopping... Flushing logs...");await this.flush()};process.on("SIGTERM",$gracefulShutdown_model$$);process.on("SIGINT",$gracefulShutdown_model$$)}startTimer(){this.timer&&clearInterval(this.timer);this.timer=
setInterval(()=>this.flush(),this.flushInterval)}add($logData$$){this.buffer.push($logData$$);this.buffer.length>=this.batchSize&&this.flush()}async flush(){if(this.buffer.length!==0){var $logsToWrite$$=[...this.buffer];this.buffer=[];this.startTimer();try{await this.model.insertMany($logsToWrite$$,{ordered:!1})}catch($err$$){Logger.error("\u274c[log] L\u1ed7i ghi log batch:",$err$$.message)}}}}const accessLogBuffer=new LogBuffer(Log);
Log.create=async function($log$$,$user_created$$,$user_agent$$,$req$$){onAfterCommit(()=>{const $l$$={id_app:$log$$.id_app,id_func:$log$$.id_func,action:$log$$.action,description:$log$$.description,data:$log$$.data,result:$log$$.result,user_agent:$user_agent$$,user_created:$user_created$$,date_created:new Date};if($req$$){let $ip$$=$req$$.ip;!$ip$$&&$req$$.headers&&$req$$.headers["x-forwarded-for"]&&($ip$$=$req$$.headers["x-forwarded-for"].split(",")[0].trim());!$ip$$&&$req$$.connection&&($ip$$=$req$$.connection.remoteAddress);
$ip$$&&$ip$$.includes("::ffff:")&&($ip$$=$ip$$.split("::ffff:")[1]);$l$$.ip=$ip$$||""}accessLogBuffer.add($l$$)})};module.exports=Log;