mirror of
https://gitlab.com/MrFry/mrfrys-node-server
synced 2025-04-01 20:24:18 +02:00
user stats logging
This commit is contained in:
parent
6ce52d00d9
commit
558e985773
2 changed files with 63 additions and 8 deletions
|
@ -32,7 +32,7 @@ module.exports = function (options) {
|
||||||
|
|
||||||
logger.LogReq(req, true, res.statusCode)
|
logger.LogReq(req, true, res.statusCode)
|
||||||
if (toLog) { logger.LogReq(req) }
|
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()
|
next()
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,6 +41,8 @@ const logFile = '/nlogs/nlogs'
|
||||||
const allLogFile = '/nlogs/log'
|
const allLogFile = '/nlogs/log'
|
||||||
const statFile = 'stats/stats'
|
const statFile = 'stats/stats'
|
||||||
const vStatFile = 'stats/vstats'
|
const vStatFile = 'stats/vstats'
|
||||||
|
const uStatsFile = 'stats/ustats'
|
||||||
|
const uvStatsFile = 'stats/uvstats'
|
||||||
const nologFile = './nolog'
|
const nologFile = './nolog'
|
||||||
|
|
||||||
const colors = [
|
const colors = [
|
||||||
|
@ -56,8 +58,10 @@ const writeInterval = 10
|
||||||
const debugLevel = parseInt(process.env.NS_LOGLEVEL) || 0
|
const debugLevel = parseInt(process.env.NS_LOGLEVEL) || 0
|
||||||
Log('Loglevel is: ' + debugLevel)
|
Log('Loglevel is: ' + debugLevel)
|
||||||
|
|
||||||
let data = {}
|
let data = {} // visit data
|
||||||
let vData = {}
|
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 writes = 0
|
||||||
|
|
||||||
let noLogips = []
|
let noLogips = []
|
||||||
|
@ -173,6 +177,20 @@ function setNoLogReadInterval () {
|
||||||
|
|
||||||
function Load () {
|
function Load () {
|
||||||
Log('Loading logger...')
|
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 {
|
try {
|
||||||
var prevData = utils.ReadFile(statFile)
|
var prevData = utils.ReadFile(statFile)
|
||||||
data = JSON.parse(prevData)
|
data = JSON.parse(prevData)
|
||||||
|
@ -191,7 +209,7 @@ function Load () {
|
||||||
setNoLogReadInterval()
|
setNoLogReadInterval()
|
||||||
}
|
}
|
||||||
|
|
||||||
function LogStat (url, ip, hostname) {
|
function LogStat (url, ip, hostname, userId) {
|
||||||
let nolog = noLogips.some((x) => {
|
let nolog = noLogips.some((x) => {
|
||||||
return x.includes(ip)
|
return x.includes(ip)
|
||||||
})
|
})
|
||||||
|
@ -201,10 +219,35 @@ function LogStat (url, ip, hostname) {
|
||||||
|
|
||||||
url = hostname + url.split('?')[0]
|
url = hostname + url.split('?')[0]
|
||||||
Inc(url)
|
Inc(url)
|
||||||
|
AddUserIdStat(userId)
|
||||||
|
IncUserStat(userId)
|
||||||
AddVisitStat(url)
|
AddVisitStat(url)
|
||||||
Save()
|
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) {
|
function Inc (value) {
|
||||||
if (value.startsWith('/?')) { value = '/' }
|
if (value.startsWith('/?')) { value = '/' }
|
||||||
if (data[value] === undefined) { data[value] = 0 }
|
if (data[value] === undefined) { data[value] = 0 }
|
||||||
|
@ -222,19 +265,31 @@ function AddVisitStat (name) {
|
||||||
function Save () {
|
function Save () {
|
||||||
writes++
|
writes++
|
||||||
if (writes === writeInterval) {
|
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 {
|
try {
|
||||||
utils.WriteFile(JSON.stringify(data), statFile)
|
utils.WriteFile(JSON.stringify(data), statFile)
|
||||||
// Log("Stats wrote.");
|
// Log("Stats wrote.");
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
Log('Error at writing logs!', GetColor('redbg'))
|
Log('Error at writing logs! (more in stderr)', GetColor('redbg'))
|
||||||
console.log(e)
|
console.error(e)
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
utils.WriteFile(JSON.stringify(vData), vStatFile)
|
utils.WriteFile(JSON.stringify(vData), vStatFile)
|
||||||
// Log("Stats wrote.");
|
// Log("Stats wrote.");
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
Log('Error at writing visit logs!', GetColor('redbg'))
|
Log('Error at writing visit logs! (more in stderr)', GetColor('redbg'))
|
||||||
console.log(e)
|
console.error(e)
|
||||||
}
|
}
|
||||||
writes = 0
|
writes = 0
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue