mirror of
https://gitlab.com/MrFry/mrfrys-node-server
synced 2025-04-01 20:24:18 +02:00
Merge branch 'master' of gitlab.com:MrFry/mrfrys-node-server
This commit is contained in:
commit
c13035a8df
6 changed files with 175 additions and 154 deletions
|
@ -4,5 +4,6 @@ dist
|
||||||
stats
|
stats
|
||||||
data
|
data
|
||||||
publicDirs
|
publicDirs
|
||||||
|
nextStatic
|
||||||
devel
|
devel
|
||||||
.git
|
.git
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
hr() {
|
hr() {
|
||||||
printf '\033[0;32m%*s\033[0m\n' "$(tput cols)" '' | tr ' ' '='
|
if [ -t 0 ]; then
|
||||||
|
printf '\033[0;32m%*s\033[0m\n' "$(tput cols)" '' | tr ' ' '='
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
log() {
|
log() {
|
||||||
|
@ -80,16 +82,14 @@ touch publicDirs/qminingPublic/version
|
||||||
touch publicDirs/qminingPublic/motd
|
touch publicDirs/qminingPublic/motd
|
||||||
|
|
||||||
if [ -z "$(ls -A ./data/dbs)" ]; then
|
if [ -z "$(ls -A ./data/dbs)" ]; then
|
||||||
|
log "Making DB-s"
|
||||||
pushd src/standaloneUtils
|
pushd src/standaloneUtils
|
||||||
NS_LOGLEVEL=2 node dbSetup.js
|
NS_LOGLEVEL=2 node dbSetup.js
|
||||||
mv *.db ../../data/dbs
|
mv *.db ../../data/dbs
|
||||||
popd
|
popd
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
log "Disabling next telemetry"
|
||||||
npx --yes next telemetry disable
|
npx --yes next telemetry disable
|
||||||
|
|
||||||
hr
|
log "Done!"
|
||||||
echo "Done!"
|
|
||||||
echo "npm start {loglevel}"
|
|
||||||
echo "To start server"
|
|
||||||
hr
|
|
||||||
|
|
|
@ -21,14 +21,18 @@ elif [ "$1" == "stop" ]; then
|
||||||
docker stop $(getContainerId)
|
docker stop $(getContainerId)
|
||||||
elif [ "$1" == "start" ]; then
|
elif [ "$1" == "start" ]; then
|
||||||
# --entrypoint bash \
|
# --entrypoint bash \
|
||||||
docker start -i $(getContainerId)
|
scripts/setup.sh
|
||||||
|
docker start $(getContainerId)
|
||||||
elif [ "$1" == "run" ]; then
|
elif [ "$1" == "run" ]; then
|
||||||
# --entrypoint bash \
|
# --entrypoint bash \
|
||||||
docker run -it \
|
scripts/setup.sh
|
||||||
-p 8080:80 \
|
|
||||||
--mount src="$(pwd)/stats",target=/server/stats,type=bind \
|
docker run \
|
||||||
--mount src="$(pwd)/data",target=/server/data,type=bind \
|
--network host \
|
||||||
--mount src="$(pwd)/publicDirs",target=/server/publicDirs,type=bind \
|
--mount src="$(pwd)/stats",target="/server/stats",type=bind \
|
||||||
|
--mount src="$(pwd)/data",target="/server/data",type=bind \
|
||||||
|
--mount src="$(pwd)/publicDirs",target="/server/publicDirs",type=bind \
|
||||||
|
--mount src="/etc/letsencrypt",target="/etc/letsencrypt",type=bind \
|
||||||
qminer/mrfrys-node-server
|
qminer/mrfrys-node-server
|
||||||
elif [ "$1" == "bash" ]; then
|
elif [ "$1" == "bash" ]; then
|
||||||
docker exec -it $(getContainerId) /bin/bash
|
docker exec -it $(getContainerId) /bin/bash
|
||||||
|
|
|
@ -74,7 +74,8 @@ const filterFromDailyStats = [
|
||||||
'.xml',
|
'.xml',
|
||||||
'.aspx',
|
'.aspx',
|
||||||
'/questionDbs/',
|
'/questionDbs/',
|
||||||
'/chatFiles/'
|
'/chatFiles/',
|
||||||
|
'rss'
|
||||||
]
|
]
|
||||||
|
|
||||||
// -----------------------------------------------------------------
|
// -----------------------------------------------------------------
|
||||||
|
@ -291,165 +292,180 @@ function pCols(cols, rowTitles, colorNames, firstRowColor) {
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------
|
||||||
printHeader('Daily stats')
|
printHeader('Daily stats')
|
||||||
|
try {
|
||||||
const dailyStats = readJSON(`${dir}stats/vstats`)
|
const dailyStats = readJSON(`${dir}stats/vstats`)
|
||||||
function preProcessDailyStats(obj) {
|
function preProcessDailyStats(obj) {
|
||||||
const formatted = Object.keys(obj).reduce((acc, key) => {
|
const formatted = Object.keys(obj).reduce((acc, key) => {
|
||||||
const includes = filterFromDailyStats.some((keyword) => {
|
const includes = filterFromDailyStats.some((keyword) => {
|
||||||
return key.toLowerCase().includes(keyword.toLowerCase())
|
return key.toLowerCase().includes(keyword.toLowerCase())
|
||||||
})
|
|
||||||
if (!includes) {
|
|
||||||
acc.push({ name: key.replace(/\.html/g, ''), val: obj[key] })
|
|
||||||
}
|
|
||||||
return acc
|
|
||||||
}, [])
|
|
||||||
|
|
||||||
const merged = formatted.reduce((acc, x) => {
|
|
||||||
const index = acc.findIndex((y) => {
|
|
||||||
return x.name === y.name
|
|
||||||
})
|
|
||||||
|
|
||||||
if (index !== -1) {
|
|
||||||
acc = acc.map((z, i) => {
|
|
||||||
if (i === index) {
|
|
||||||
return {
|
|
||||||
...x,
|
|
||||||
val: z.val + x.val,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return z
|
|
||||||
})
|
})
|
||||||
} else {
|
if (!includes) {
|
||||||
acc.push(x)
|
acc.push({ name: key.replace(/\.html/g, ''), val: obj[key] })
|
||||||
}
|
}
|
||||||
|
return acc
|
||||||
|
}, [])
|
||||||
|
|
||||||
return acc
|
const merged = formatted.reduce((acc, x) => {
|
||||||
}, [])
|
const index = acc.findIndex((y) => {
|
||||||
|
return x.name === y.name
|
||||||
|
})
|
||||||
|
|
||||||
return merged.sort((a, b) => {
|
if (index !== -1) {
|
||||||
if (a.name > b.name) {
|
acc = acc.map((z, i) => {
|
||||||
return 1
|
if (i === index) {
|
||||||
} else if (a.name < b.name) {
|
return {
|
||||||
return -1
|
...x,
|
||||||
} else {
|
val: z.val + x.val,
|
||||||
return 0
|
}
|
||||||
}
|
}
|
||||||
})
|
return z
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
acc.push(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
return acc
|
||||||
|
}, [])
|
||||||
|
|
||||||
|
return merged.sort((a, b) => {
|
||||||
|
if (a.name > b.name) {
|
||||||
|
return 1
|
||||||
|
} else if (a.name < b.name) {
|
||||||
|
return -1
|
||||||
|
} else {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
function getDailyStat(day) {
|
||||||
|
return preProcessDailyStats(dailyStats[getDayIndex(day)])
|
||||||
|
}
|
||||||
|
|
||||||
|
pCols(
|
||||||
|
[
|
||||||
|
...[...Array(colsToPrint).keys()].map((x) => {
|
||||||
|
return getDailyStat(-x)
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
null,
|
||||||
|
true
|
||||||
|
)
|
||||||
|
} catch (e) {
|
||||||
|
console.error(e)
|
||||||
}
|
}
|
||||||
function getDailyStat(day) {
|
|
||||||
return preProcessDailyStats(dailyStats[getDayIndex(day)])
|
|
||||||
}
|
|
||||||
|
|
||||||
pCols(
|
|
||||||
[
|
|
||||||
...[...Array(colsToPrint).keys()].map((x) => {
|
|
||||||
return getDailyStat(-x)
|
|
||||||
}),
|
|
||||||
],
|
|
||||||
null,
|
|
||||||
true
|
|
||||||
)
|
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------
|
||||||
printHeader('User id test solving')
|
printHeader('User id test solving')
|
||||||
const userIdTestSolving = readJSON(`${dir}stats/idvstats`)
|
try {
|
||||||
function preProcessUIdTestSolving(obj, minLength) {
|
const userIdTestSolving = readJSON(`${dir}stats/idvstats`)
|
||||||
if (!obj) {
|
function preProcessUIdTestSolving(obj, minLength) {
|
||||||
return '0'
|
if (!obj) {
|
||||||
|
return '0'
|
||||||
|
}
|
||||||
|
if (minLength) {
|
||||||
|
return Object.keys(obj)
|
||||||
|
.filter((key) => {
|
||||||
|
return obj[key] > minLength
|
||||||
|
})
|
||||||
|
.length.toString()
|
||||||
|
} else {
|
||||||
|
return Object.keys(obj).length.toString()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (minLength) {
|
function getUserIdTestSolving(day) {
|
||||||
return Object.keys(obj)
|
return [
|
||||||
.filter((key) => {
|
getDayName(day),
|
||||||
return obj[key] > minLength
|
preProcessUIdTestSolving(userIdTestSolving[getDayIndex(day)]),
|
||||||
})
|
]
|
||||||
.length.toString()
|
|
||||||
} else {
|
|
||||||
return Object.keys(obj).length.toString()
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
function getUserIdTestSolving(day) {
|
|
||||||
return [
|
|
||||||
getDayName(day),
|
|
||||||
preProcessUIdTestSolving(userIdTestSolving[getDayIndex(day)]),
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
||||||
pCols(
|
pCols(
|
||||||
[
|
[
|
||||||
...[...Array(colsToPrint).keys()].map((x) => {
|
...[...Array(colsToPrint).keys()].map((x) => {
|
||||||
return getUserIdTestSolving(-x)
|
return getUserIdTestSolving(-x)
|
||||||
}),
|
}),
|
||||||
],
|
],
|
||||||
null,
|
null,
|
||||||
false,
|
false,
|
||||||
'green'
|
'green'
|
||||||
)
|
)
|
||||||
|
} catch(e) {
|
||||||
|
console.error(e)
|
||||||
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------
|
||||||
printHeader('User id requests')
|
printHeader('User id requests')
|
||||||
const clientIdTestSolving = readJSON(`${dir}stats/uvstats`)
|
try {
|
||||||
function getUserIdRequests(day) {
|
const clientIdTestSolving = readJSON(`${dir}stats/uvstats`)
|
||||||
return [
|
function getUserIdRequests(day) {
|
||||||
getDayName(day),
|
return [
|
||||||
preProcessUIdTestSolving(clientIdTestSolving[getDayIndex(day)]),
|
getDayName(day),
|
||||||
preProcessUIdTestSolving(clientIdTestSolving[getDayIndex(day)], 5),
|
preProcessUIdTestSolving(clientIdTestSolving[getDayIndex(day)]),
|
||||||
]
|
preProcessUIdTestSolving(clientIdTestSolving[getDayIndex(day)], 5),
|
||||||
}
|
]
|
||||||
|
}
|
||||||
|
|
||||||
pCols(
|
pCols(
|
||||||
[
|
[
|
||||||
...[...Array(colsToPrint).keys()].map((x) => {
|
...[...Array(colsToPrint).keys()].map((x) => {
|
||||||
return getUserIdRequests(-x)
|
return getUserIdRequests(-x)
|
||||||
}),
|
}),
|
||||||
],
|
],
|
||||||
['', 'All', 'More than 5'],
|
['', 'All', 'More than 5'],
|
||||||
false,
|
false,
|
||||||
'green'
|
'green'
|
||||||
)
|
)
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------
|
||||||
printHeader('Daily data count')
|
printHeader('Daily data count')
|
||||||
const dailyDataCount = readFile(`${dir}stats/dailyDataCount`)
|
const dailyDataCount = readFile(`${dir}stats/dailyDataCount`)
|
||||||
function getDailyDataCount(count) {
|
function getDailyDataCount(count) {
|
||||||
return [...Array(count).keys()].map((x) => {
|
return [...Array(count).keys()].map((x) => {
|
||||||
return JSON.parse(head(tail(dailyDataCount, x + 1), 1))
|
return JSON.parse(head(tail(dailyDataCount, x + 1), 1))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
printLastDataCount(getDailyDataCount(colsToPrint))
|
printLastDataCount(getDailyDataCount(colsToPrint))
|
||||||
|
|
||||||
function printLastDataCount(data) {
|
function printLastDataCount(data) {
|
||||||
const res = [...Array(colsToPrint).keys()].map((x) => {
|
const res = [...Array(colsToPrint).keys()].map((x) => {
|
||||||
return [getDayName(-x)]
|
return [getDayName(-x)]
|
||||||
})
|
})
|
||||||
data.forEach((dataCount, i) => {
|
data.forEach((dataCount, i) => {
|
||||||
res[i].push(dataCount.userCount.toString())
|
res[i].push(dataCount.userCount.toString())
|
||||||
res[i].push(dataCount.subjectCount.toString())
|
res[i].push(dataCount.subjectCount.toString())
|
||||||
res[i].push(dataCount.questionCount.toString())
|
res[i].push(dataCount.questionCount.toString())
|
||||||
})
|
})
|
||||||
|
|
||||||
pCols(res, ['', 'Users', 'Subjects', 'Questions'], false, 'green')
|
pCols(res, ['', 'Users', 'Subjects', 'Questions'], false, 'green')
|
||||||
|
}
|
||||||
|
} catch(e) {
|
||||||
|
console.error(e)
|
||||||
}
|
}
|
||||||
// ------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------
|
||||||
printHeader('Daily script install / update check count')
|
printHeader('Daily script install / update check count')
|
||||||
function getDailyScriptStat(day) {
|
try {
|
||||||
const log =
|
function getDailyScriptStat(day) {
|
||||||
!day || day === 0
|
const log =
|
||||||
? readFile(`${dir}stats/vlogs/log`)
|
!day || day === 0
|
||||||
: readFile(`${dir}stats/vlogs/${getDayIndex(day)}`)
|
? readFile(`${dir}stats/vlogs/log`)
|
||||||
|
: readFile(`${dir}stats/vlogs/${getDayIndex(day)}`)
|
||||||
|
|
||||||
if (!log) {
|
if (!log) {
|
||||||
return [getDayName(day), 0, 0]
|
return [getDayName(day), 0, 0]
|
||||||
|
}
|
||||||
|
return [
|
||||||
|
getDayName(day),
|
||||||
|
countLinesMatching(log, '?install').toString(),
|
||||||
|
countLinesMatching(log, '?up').toString(),
|
||||||
|
]
|
||||||
}
|
}
|
||||||
return [
|
|
||||||
getDayName(day),
|
const installs = [...Array(colsToPrint).keys()].map((x) => {
|
||||||
countLinesMatching(log, '?install').toString(),
|
return getDailyScriptStat(-x)
|
||||||
countLinesMatching(log, '?up').toString(),
|
})
|
||||||
]
|
|
||||||
|
pCols(installs, ['', 'Installs', 'Updates'], false, 'green')
|
||||||
|
} catch(e) {
|
||||||
|
console.error(e)
|
||||||
}
|
}
|
||||||
|
|
||||||
const installs = [...Array(colsToPrint).keys()].map((x) => {
|
|
||||||
return getDailyScriptStat(-x)
|
|
||||||
})
|
|
||||||
|
|
||||||
pCols(installs, ['', 'Installs', 'Updates'], false, 'green')
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
scripts/make.sh
|
scripts/make.sh
|
||||||
npm run start
|
npm run start > /dev/null
|
||||||
|
|
|
@ -24,8 +24,8 @@ console.log('Current working directory: ' + process.cwd())
|
||||||
const startHTTPS = true
|
const startHTTPS = true
|
||||||
const isRoot = process.getuid && process.getuid() === 0
|
const isRoot = process.getuid && process.getuid() === 0
|
||||||
|
|
||||||
const port = isRoot ? 80 : 8080
|
const port = 8080
|
||||||
const httpsport = isRoot ? 443 : 5001
|
const httpsport = 5001
|
||||||
|
|
||||||
// import os from 'os'
|
// import os from 'os'
|
||||||
// os.setPriority(10)
|
// os.setPriority(10)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue