Server stats now fills console width

This commit is contained in:
mrfry 2021-06-22 10:04:22 +02:00
parent e0a58f514b
commit 5192acfd90

View file

@ -8,12 +8,10 @@ const colWidth = 40
const maxStatLength = colWidth // Math.floor(cols / 4)
const statNameSpacing = 4
const beforeRowSpace = 13
const rowsToPrint = Math.floor(cols / (colWidth + statNameSpacing + beforeRowSpace / 3 + 5)) || 1
const colsToPrint =
Math.floor(cols / (colWidth + statNameSpacing + beforeRowSpace / 3 + 5)) || 1
const coloredWords = {
red: [
'lred',
'thanks'
],
red: ['lred', 'thanks'],
cyan: [
'getveteranpw',
'pwrequest',
@ -39,7 +37,7 @@ const coloredWords = {
'contacts.json',
'patreon',
'donate',
'userfiles'
'userfiles',
],
blue: [
'isadding',
@ -52,12 +50,7 @@ const coloredWords = {
'registerscript',
'install',
],
magenta: [
'addPost',
'comment',
'postfeedback',
'quickvote',
],
magenta: ['addPost', 'comment', 'postfeedback', 'quickvote'],
}
const filterFromDailyStats = [
'savedQuestions',
@ -162,10 +155,7 @@ function tail(text, number) {
}
function head(text, number) {
return text
.split('\n')
.slice(0, number)
.join('\n')
return text.split('\n').slice(0, number).join('\n')
}
function countLinesMatching(text, toMatch) {
@ -178,6 +168,20 @@ function countLinesMatching(text, toMatch) {
return count
}
function getDayName(day) {
switch (day) {
case 0:
case undefined:
return 'Today'
case -1:
return 'Yesterday'
case -2:
return 'Before yesterday'
default:
return `Day ${day.toString()}`
}
}
function readFile(name) {
if (fs.existsSync(name)) {
return fs.readFileSync(name, 'utf8')
@ -196,7 +200,7 @@ function pCols(cols, rowTitles, colorNames, firstRowColor) {
// console.log(cols)
let maxLength = 0
cols.reverse().forEach((col, i) => {
if (i >= rowsToPrint) {
if (i >= colsToPrint) {
return
}
if (col.length > maxLength) {
@ -209,9 +213,8 @@ function pCols(cols, rowTitles, colorNames, firstRowColor) {
for (let i = 0; i < maxLength; i++) {
const row = []
cols
.forEach((val, colIndex) => {
if (colIndex >= rowsToPrint) {
cols.forEach((val, colIndex) => {
if (colIndex >= colsToPrint) {
return
}
if (!val[i]) {
@ -309,7 +312,7 @@ function preProcessDailyStats(obj) {
if (i === index) {
return {
...x,
val: z.val + x.val
val: z.val + x.val,
}
}
return z
@ -331,12 +334,15 @@ function preProcessDailyStats(obj) {
}
})
}
function getDailyStat(day) {
return preProcessDailyStats(dailyStats[getDayIndex(day)])
}
pCols(
[
preProcessDailyStats(dailyStats[getDayIndex()]),
preProcessDailyStats(dailyStats[getDayIndex(-1)]),
preProcessDailyStats(dailyStats[getDayIndex(-2)]),
...[...Array(colsToPrint).keys()].map((x) => {
return getDailyStat(-x)
}),
],
null,
true
@ -359,15 +365,18 @@ function preProcessUIdTestSolving(obj, minLength) {
return Object.keys(obj).length.toString()
}
}
function getUserIdTestSolving(day) {
return [
getDayName(day),
preProcessUIdTestSolving(userIdTestSolving[getDayIndex(day)]),
]
}
pCols(
[
['Today', preProcessUIdTestSolving(userIdTestSolving[getDayIndex()])],
['Yesterday', preProcessUIdTestSolving(userIdTestSolving[getDayIndex(-1)])],
[
'Before yesterday',
preProcessUIdTestSolving(userIdTestSolving[getDayIndex(-2)]),
],
...[...Array(colsToPrint).keys()].map((x) => {
return getUserIdTestSolving(-x)
}),
],
null,
false,
@ -377,24 +386,19 @@ pCols(
// ------------------------------------------------------------------------------
printHeader('User id requests')
const clientIdTestSolving = readJSON(`${dir}stats/uvstats`)
function getUserIdRequests(day) {
return [
getDayName(day),
preProcessUIdTestSolving(clientIdTestSolving[getDayIndex(day)]),
preProcessUIdTestSolving(clientIdTestSolving[getDayIndex(day)], 5),
]
}
pCols(
[
[
'Today',
preProcessUIdTestSolving(clientIdTestSolving[getDayIndex()]),
preProcessUIdTestSolving(clientIdTestSolving[getDayIndex()], 5),
],
[
'Yesterday',
preProcessUIdTestSolving(clientIdTestSolving[getDayIndex(-1)]),
preProcessUIdTestSolving(clientIdTestSolving[getDayIndex(-1)], 5),
],
[
'Before Yesterday',
preProcessUIdTestSolving(clientIdTestSolving[getDayIndex(-2)]),
preProcessUIdTestSolving(clientIdTestSolving[getDayIndex(-2)], 5),
],
...[...Array(colsToPrint).keys()].map((x) => {
return getUserIdRequests(-x)
}),
],
['', 'All', 'More than 5'],
false,
@ -404,15 +408,18 @@ pCols(
// ------------------------------------------------------------------------------
printHeader('Daily data count')
const dailyDataCount = readFile(`${dir}stats/dailyDataCount`)
function getDailyDataCount(count) {
return [...Array(count).keys()].map((x) => {
return JSON.parse(head(tail(dailyDataCount, x + 1), 1))
})
}
printLastDataCount([
JSON.parse(head(tail(dailyDataCount, 1), 1)),
JSON.parse(head(tail(dailyDataCount, 2), 1)),
JSON.parse(head(tail(dailyDataCount, 3), 1)),
])
printLastDataCount(getDailyDataCount(colsToPrint))
function printLastDataCount(data) {
const res = [['Today'], ['Yesterday'], ['Before yesterday']]
const res = [...Array(colsToPrint).keys()].map((x) => {
return [getDayName(-x)]
})
data.forEach((dataCount, i) => {
res[i].push(dataCount.userCount.toString())
res[i].push(dataCount.subjectCount.toString())
@ -423,26 +430,24 @@ function printLastDataCount(data) {
}
// ------------------------------------------------------------------------------
printHeader('Daily script install / update check count')
const todaysLogs = readFile(`${dir}stats/vlogs/log`)
const yesterdaysLogs = readFile(`${dir}stats/vlogs/${getDayIndex(-1)}`) || ''
const beforeYesterdaysLogs = readFile(`${dir}stats/vlogs/${getDayIndex(-2)}`) || ''
function getDailyScriptStat(day) {
const log =
!day || day === 0
? readFile(`${dir}stats/vlogs/log`)
: readFile(`${dir}stats/vlogs/${getDayIndex(day)}`)
const installs = [
[
'Today',
countLinesMatching(todaysLogs, '?install').toString(),
countLinesMatching(todaysLogs, '?up').toString(),
],
[
'Yesterday',
countLinesMatching(yesterdaysLogs, '?install').toString(),
countLinesMatching(yesterdaysLogs, '?up').toString(),
],
[
'Before yesterday',
countLinesMatching(beforeYesterdaysLogs, '?install').toString(),
countLinesMatching(beforeYesterdaysLogs, '?up').toString(),
],
if (!log) {
return [getDayName(day), 0, 0]
}
return [
getDayName(day),
countLinesMatching(log, '?install').toString(),
countLinesMatching(log, '?up').toString(),
]
}
const installs = [...Array(colsToPrint).keys()].map((x) => {
return getDailyScriptStat(-x)
})
pCols(installs, ['', 'Installs', 'Updates'], false, 'green')