Lotsa typescript bullshit

This commit is contained in:
mrfry 2020-11-24 10:47:04 +01:00
parent b7ac485689
commit b927988017
65 changed files with 801 additions and 8447 deletions

209
scripts/serverStats.js Normal file
View file

@ -0,0 +1,209 @@
// -----------------------------------------------------------------
// CONFIG
// -----------------------------------------------------------------
const maxStatLength = 15
const statNameSpacing = 5
const coloredWords = {
red: ['lred'],
}
// -----------------------------------------------------------------
const fs = require('fs')
const dir = process.argv[2]
if (!dir) {
console.log('No params')
process.exit()
}
function getDayIndex(offset) {
if (!offset) {
offset = 0
}
let date = new Date()
if (offset) {
date.setDate(date.getDate() + offset)
}
return (
date.getFullYear() +
'/' +
('0' + (date.getMonth() + 1)).slice(-2) +
'/' +
('0' + date.getDate()).slice(-2)
)
}
function C(color) {
if (color !== undefined) {
color = color.toLowerCase()
}
if (color === 'redbg') {
return '\x1b[41m'
}
if (color === 'bluebg') {
return '\x1b[44m'
}
if (color === 'green') {
return '\x1b[32m'
}
if (color === 'red') {
return '\x1b[31m'
}
if (color === 'yellow') {
return '\x1b[33m'
}
if (color === 'blue') {
return '\x1b[34m'
}
if (color === 'magenta') {
return '\x1b[35m'
}
if (color === 'cyan') {
return '\x1b[36m'
}
return '\x1b[0m'
}
function readJSON(name) {
return JSON.parse(fs.readFileSync(name, 'utf8'))
}
function tail(text, number) {
let splitedText = text.split('\n')
return splitedText.slice(Math.max(splitedText.length - number, 1)).join('\n')
}
function head(text, number) {
return text
.split('\n')
.slice(0, number)
.join('\n')
}
function readFile(name) {
return fs.readFileSync(name, 'utf8')
}
function getLetterNTimes(letter, number) {
let res = ''
while (res.length < number) {
res += letter
}
return res
}
function pCols() {
// console.log(arguments)
let maxLength = 0
Object.keys(arguments).forEach((key) => {
if (arguments[key].length > maxLength) {
maxLength = arguments[key].length
}
})
for (let i = 0; i < maxLength; i++) {
let row = []
Object.keys(arguments)
.reverse()
.forEach((key) => {
const val = arguments[key]
if (!val[i]) {
return
}
const keyName = val[i].name || ''
let slicedName = keyName.slice(0, maxStatLength)
let toColor = Object.keys(coloredWords).reduce((acc, key) => {
const colorArray = coloredWords[key]
const includes = colorArray.some((colorableIdName) => {
return keyName.includes(colorableIdName)
})
if (includes) {
return key
}
return acc
}, '')
while (slicedName.length < maxStatLength) {
slicedName = ' ' + slicedName
}
let ammount = val[i].val ? val[i].val.toString() : 0
while (ammount.length < 4) {
ammount = ammount + ' '
}
if (toColor) {
row.push(C(toColor) + slicedName + ': ' + ammount + C())
} else {
row.push(slicedName + ' ' + ammount)
}
})
console.log(row.join(getLetterNTimes(' ', statNameSpacing)))
}
}
// ------------------------------------------------------------------------------
const dailyStats = readJSON(`${dir}stats/vstats`)
function preProcessDailyStats(obj) {
return Object.keys(obj).map((key) => {
return { name: key, val: obj[key] }
})
}
pCols(
preProcessDailyStats(dailyStats[getDayIndex()]),
preProcessDailyStats(dailyStats[getDayIndex(-1)]),
preProcessDailyStats(dailyStats[getDayIndex(-2)])
)
// ------------------------------------------------------------------------------
const userIdTestSolving = readJSON(`${dir}stats/idvstats`)
function preProcessUIdTestSolving(obj) {
if (!obj) {
return [{ val: 0 }]
}
return [{ val: Object.keys(obj).length }]
}
pCols(
preProcessUIdTestSolving(userIdTestSolving[getDayIndex()]),
preProcessUIdTestSolving(userIdTestSolving[getDayIndex(-1)]),
preProcessUIdTestSolving(userIdTestSolving[getDayIndex(-2)])
)
// ------------------------------------------------------------------------------
const clientIdTestSolving = readJSON(`${dir}stats/uvstats`)
pCols(
preProcessUIdTestSolving(clientIdTestSolving[getDayIndex()]),
preProcessUIdTestSolving(clientIdTestSolving[getDayIndex(-1)]),
preProcessUIdTestSolving(clientIdTestSolving[getDayIndex(-2)])
)
// ------------------------------------------------------------------------------
const dailyDataCount = readFile(`${dir}stats/dailyDataCount`)
printLastDataCount([
JSON.parse(head(tail(dailyDataCount, 1), 1)),
JSON.parse(head(tail(dailyDataCount, 2), 1)),
JSON.parse(head(tail(dailyDataCount, 3), 1)),
])
function printLastDataCount(data) {
const res = [[], [], []]
data.forEach((dataCount, i) => {
res[i].push({ val: dataCount.userCount })
res[i].push({ val: dataCount.subjectCount })
res[i].push({ val: dataCount.questionCount })
})
pCols(...res)
}