diff --git a/middlewares/reqlogger.middleware.js b/middlewares/reqlogger.middleware.js index 00672c4..dbfbd33 100644 --- a/middlewares/reqlogger.middleware.js +++ b/middlewares/reqlogger.middleware.js @@ -32,7 +32,7 @@ module.exports = function (options) { logger.LogReq(req, true, res.statusCode) if (toLog) { logger.LogReq(req) } - if (res.statusCode !== 404) { logger.LogStat(req.url, ip, hostname) } + if (res.statusCode !== 404) { logger.LogStat(req.url, ip, hostname, req.session.user) } }) next() } diff --git a/utils/logger.js b/utils/logger.js index ce13a49..3149bae 100755 --- a/utils/logger.js +++ b/utils/logger.js @@ -41,6 +41,8 @@ const logFile = '/nlogs/nlogs' const allLogFile = '/nlogs/log' const statFile = 'stats/stats' const vStatFile = 'stats/vstats' +const uStatsFile = 'stats/ustats' +const uvStatsFile = 'stats/uvstats' const nologFile = './nolog' const colors = [ @@ -56,8 +58,10 @@ const writeInterval = 10 const debugLevel = parseInt(process.env.NS_LOGLEVEL) || 0 Log('Loglevel is: ' + debugLevel) -let data = {} -let vData = {} +let data = {} // visit data +let vData = {} // visit data, but daily +let uData = {} // visit data, but per user +let uvData = {} // visit data, but per user and daily let writes = 0 let noLogips = [] @@ -173,6 +177,20 @@ function setNoLogReadInterval () { function Load () { Log('Loading logger...') + try { + uData = JSON.parse(utils.ReadFile(uStatsFile)) + } catch (e) { + Log('Error at loading logs! (@ first run its normal)', GetColor('redbg')) + console.log(e) + } + + try { + uvData = JSON.parse(utils.ReadFile(uvStatsFile)) + } catch (e) { + Log('Error at loading logs! (@ first run its normal)', GetColor('redbg')) + console.log(e) + } + try { var prevData = utils.ReadFile(statFile) data = JSON.parse(prevData) @@ -191,7 +209,7 @@ function Load () { setNoLogReadInterval() } -function LogStat (url, ip, hostname) { +function LogStat (url, ip, hostname, userId) { let nolog = noLogips.some((x) => { return x.includes(ip) }) @@ -201,10 +219,35 @@ function LogStat (url, ip, hostname) { url = hostname + url.split('?')[0] Inc(url) + AddUserIdStat(userId) + IncUserStat(userId) AddVisitStat(url) Save() } +function IncUserStat (userId) { + try { + if (uData[userId] === undefined) { uData[userId] = 0 } + uData[userId]++ + } catch (e) { + Log('Error at making user ID stats!', GetColor('redbg')) + console.error(e) + } +} + +function AddUserIdStat (userId) { + try { + var m = new Date() + const now = m.getFullYear() + '/' + ('0' + (m.getMonth() + 1)).slice(-2) + '/' + ('0' + m.getDate()).slice(-2) + if (uvData[now] === undefined) { uvData[now] = {} } + if (uvData[now][userId] === undefined) { uvData[now][userId] = 0 } + uvData[now][userId]++ + } catch (e) { + Log('Error at making user ID stats!', GetColor('redbg')) + console.error(e) + } +} + function Inc (value) { if (value.startsWith('/?')) { value = '/' } if (data[value] === undefined) { data[value] = 0 } @@ -222,19 +265,31 @@ function AddVisitStat (name) { function Save () { writes++ if (writes === writeInterval) { + try { + utils.WriteFile(JSON.stringify(uData), uStatsFile) + } catch (e) { + Log('Error at writing logs! (more in stderr)', GetColor('redbg')) + console.error(e) + } + try { + utils.WriteFile(JSON.stringify(uvData), uvStatsFile) + } catch (e) { + Log('Error at writing logs! (more in stderr)', GetColor('redbg')) + console.error(e) + } try { utils.WriteFile(JSON.stringify(data), statFile) // Log("Stats wrote."); } catch (e) { - Log('Error at writing logs!', GetColor('redbg')) - console.log(e) + Log('Error at writing logs! (more in stderr)', GetColor('redbg')) + console.error(e) } try { utils.WriteFile(JSON.stringify(vData), vStatFile) // Log("Stats wrote."); } catch (e) { - Log('Error at writing visit logs!', GetColor('redbg')) - console.log(e) + Log('Error at writing visit logs! (more in stderr)', GetColor('redbg')) + console.error(e) } writes = 0 }