user stats logging

This commit is contained in:
MrFry 2020-04-26 14:33:57 +02:00
parent 6ce52d00d9
commit 558e985773
2 changed files with 63 additions and 8 deletions

View file

@ -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()
}

View file

@ -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
}