UNPKG

http-up

Version:

Simple share folder via http with upload

226 lines (149 loc) 5.7 kB
'use strict'; const fs = require('fs'); const chalk = require('chalk'); const dateTime = require('node-datetime'); const process = require('process'); exports.new = (db) => { let o = {}; o.is_dbwrite = true; o.attr = (name, val) => { if(typeof val == "undefined"){ return o[name]; } if(typeof val != "undefined"){ o[name] = val; } return o; }; o.export_to = async (filename) => { await db.all( `select * from event_log order by id`, [ ], (err, data) => { if(err){ console.log(err); return; } data.forEach((el) => { el.msg = el.msg.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g, ''); //console.log('el.msg=', el.msg); }); try { fs.writeFileSync(filename, JSON.stringify(data)); } catch (err) { console.log(err); } process.exit(); return; } ); }; // write(req, '200', 'core', 'some message', 'other msg') // write(undefined, '', 'core', 'some message', 'other msg') o.write = (req, code, tag, ...msg) => { let ret = []; if(process.pid){ ret.push(process.pid); } let dt = dateTime.create(); let formatted = dt.format('Y-m-d H:M:S.N'); ret.push(formatted); let client_ip = '0.0.0.0'; if(req){ try { client_ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress; //client_ip = client_ip.toString(); client_ip += ''; ret.push(client_ip); } catch(err) { //console.log('client_ip detect err=', err); client_ip = '0.0.0.0'; } }else{ ret.push(''); } let req_auth_user = ''; if (req && req.auth && req.auth.user) { ret.push(req.auth.user); req_auth_user = req.auth.user; }else{ ret.push(''); } let color = 'green'; if (code) { if(code != 200){ color = 'red'; } ret.push( chalk[color](code) ); }else{ code = ''; ret.push(''); } ret.push( tag ); console.log( chalk[color]('|')+' ['+ret.join('] [')+']', ...msg ); if(o.is_dbwrite){ db.run( `insert into event_log (proc_id, dt, ip, login, code, tag, msg) values(?, ?, ?, ?, ?, ?, ?)`, [ process.pid, formatted, client_ip, req_auth_user, code, tag, msg.join(' ') ], (err) => { if(err){ console.log('insert into event_log err=', err); } }, ); } return '['+ret.join('] [')+'] '; } o.admin_log = (res) => { db.all( ` select * from event_log order by id desc limit 20 `, [ ], (err, data) => { if(err){ console.log(err); return; } data.forEach((el) => { el.msg = el.msg.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g, ''); el.is_not_200 = false; if( el.code != 200 ){ el.is_not_200 = true; } }); db.all( ` select * from event_log where code != 200 order by id desc limit 10 `, [ ], (err2, data2) => { if(err2){ console.log(err2); return; } data2.forEach((el) => { el.msg = el.msg.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g, ''); el.is_not_200 = true; }); res.render('admin/log', { last_problems: data2, last_records: data, }); return; } ); } ); } return o; };