mirror of
				https://gitlab.com/MrFry/mrfrys-node-server
				synced 2025-04-01 20:24:18 +02:00 
			
		
		
		
	Lotsa typescript bullshit
This commit is contained in:
		
							
								
								
									
										209
									
								
								scripts/serverStats.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										209
									
								
								scripts/serverStats.js
									
									
									
									
									
										Normal 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) | ||||
| } | ||||
		Reference in New Issue
	
	Block a user