diff --git a/scripts/serverStats.js b/scripts/serverStats.js index 231d042..0849a71 100644 --- a/scripts/serverStats.js +++ b/scripts/serverStats.js @@ -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,54 +213,53 @@ function pCols(cols, rowTitles, colorNames, firstRowColor) { for (let i = 0; i < maxLength; i++) { const row = [] - cols - .forEach((val, colIndex) => { - if (colIndex >= rowsToPrint) { - return - } - if (!val[i]) { - row.push(getLetterNTimes(' ', maxStatLength + statNameSpacing + 2)) - return - } + cols.forEach((val, colIndex) => { + if (colIndex >= colsToPrint) { + return + } + if (!val[i]) { + row.push(getLetterNTimes(' ', maxStatLength + statNameSpacing + 2)) + return + } - const keyName = val[i].name || val[i] + const keyName = val[i].name || val[i] - let slicedName = keyName.slice(0, maxStatLength) - const toColor = colorNames - ? Object.keys(coloredWords).reduce((acc, key) => { - const colorArray = coloredWords[key] + let slicedName = keyName.slice(0, maxStatLength) + const toColor = colorNames + ? Object.keys(coloredWords).reduce((acc, key) => { + const colorArray = coloredWords[key] - const includes = colorArray.some((colorableIdName) => { - return keyName - .toLowerCase() - .includes(colorableIdName.toLowerCase()) - }) + const includes = colorArray.some((colorableIdName) => { + return keyName + .toLowerCase() + .includes(colorableIdName.toLowerCase()) + }) - if (includes) { - return key - } + if (includes) { + return key + } - return acc - }, '') - : false + return acc + }, '') + : false - const sep = (i + 1) % 5 === 0 ? '.' : ' ' + const sep = (i + 1) % 5 === 0 ? '.' : ' ' - while (slicedName.length < maxStatLength) { - slicedName = slicedName + sep - } + while (slicedName.length < maxStatLength) { + slicedName = slicedName + sep + } - let ammount = val[i].val ? val[i].val.toString() : '' - while (ammount.length < 5) { - ammount = ammount + ' ' - } + let ammount = val[i].val ? val[i].val.toString() : '' + while (ammount.length < 5) { + ammount = ammount + ' ' + } - if (toColor) { - row.push(C(toColor) + slicedName + ' ' + ammount + C()) - } else { - row.push(slicedName + ' ' + ammount) - } - }) + if (toColor) { + row.push(C(toColor) + slicedName + ' ' + ammount + C()) + } else { + row.push(slicedName + ' ' + ammount) + } + }) // ROW TITLE --------------------------------------------------- let currRowTitle = @@ -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')