feat: add server status install script
This commit is contained in:
parent
28b326bdb2
commit
2967fcd05d
1
.github/workflows/reporter-release.yml
vendored
1
.github/workflows/reporter-release.yml
vendored
@ -25,3 +25,4 @@ jobs:
|
|||||||
goversion: 1.21.1
|
goversion: 1.21.1
|
||||||
binary_name: "tianji-reporter"
|
binary_name: "tianji-reporter"
|
||||||
compress_assets: "OFF"
|
compress_assets: "OFF"
|
||||||
|
asset_name: "${BINARY_NAME}-${GOOS}-${GOARCH}"
|
||||||
|
@ -48,6 +48,7 @@
|
|||||||
"express-async-errors": "^3.1.1",
|
"express-async-errors": "^3.1.1",
|
||||||
"express-validator": "^7.0.1",
|
"express-validator": "^7.0.1",
|
||||||
"filesize": "^10.0.12",
|
"filesize": "^10.0.12",
|
||||||
|
"fs-extra": "^11.1.1",
|
||||||
"is-localhost-ip": "^2.0.0",
|
"is-localhost-ip": "^2.0.0",
|
||||||
"jsonwebtoken": "^9.0.2",
|
"jsonwebtoken": "^9.0.2",
|
||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
@ -104,7 +105,6 @@
|
|||||||
"@vitejs/plugin-react": "^4.0.4",
|
"@vitejs/plugin-react": "^4.0.4",
|
||||||
"autoprefixer": "^10.4.15",
|
"autoprefixer": "^10.4.15",
|
||||||
"cross-env": "^7.0.3",
|
"cross-env": "^7.0.3",
|
||||||
"fs-extra": "^11.1.1",
|
|
||||||
"nodemon": "^2.0.22",
|
"nodemon": "^2.0.22",
|
||||||
"postcss": "^8.4.29",
|
"postcss": "^8.4.29",
|
||||||
"prisma": "^5.4.2",
|
"prisma": "^5.4.2",
|
||||||
|
@ -85,6 +85,9 @@ dependencies:
|
|||||||
filesize:
|
filesize:
|
||||||
specifier: ^10.0.12
|
specifier: ^10.0.12
|
||||||
version: 10.0.12
|
version: 10.0.12
|
||||||
|
fs-extra:
|
||||||
|
specifier: ^11.1.1
|
||||||
|
version: 11.1.1
|
||||||
is-localhost-ip:
|
is-localhost-ip:
|
||||||
specifier: ^2.0.0
|
specifier: ^2.0.0
|
||||||
version: 2.0.0
|
version: 2.0.0
|
||||||
@ -249,9 +252,6 @@ devDependencies:
|
|||||||
cross-env:
|
cross-env:
|
||||||
specifier: ^7.0.3
|
specifier: ^7.0.3
|
||||||
version: 7.0.3
|
version: 7.0.3
|
||||||
fs-extra:
|
|
||||||
specifier: ^11.1.1
|
|
||||||
version: 11.1.1
|
|
||||||
nodemon:
|
nodemon:
|
||||||
specifier: ^2.0.22
|
specifier: ^2.0.22
|
||||||
version: 2.0.22
|
version: 2.0.22
|
||||||
@ -3780,8 +3780,8 @@ packages:
|
|||||||
dependencies:
|
dependencies:
|
||||||
graceful-fs: 4.2.11
|
graceful-fs: 4.2.11
|
||||||
jsonfile: 6.1.0
|
jsonfile: 6.1.0
|
||||||
universalify: 2.0.0
|
universalify: 2.0.1
|
||||||
dev: true
|
dev: false
|
||||||
|
|
||||||
/fs-extra@8.1.0:
|
/fs-extra@8.1.0:
|
||||||
resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==}
|
resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==}
|
||||||
@ -3946,6 +3946,7 @@ packages:
|
|||||||
|
|
||||||
/graceful-fs@4.2.11:
|
/graceful-fs@4.2.11:
|
||||||
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
|
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
|
||||||
|
dev: false
|
||||||
|
|
||||||
/graphlib@2.1.8:
|
/graphlib@2.1.8:
|
||||||
resolution: {integrity: sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==}
|
resolution: {integrity: sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==}
|
||||||
@ -4372,10 +4373,10 @@ packages:
|
|||||||
/jsonfile@6.1.0:
|
/jsonfile@6.1.0:
|
||||||
resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
|
resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
|
||||||
dependencies:
|
dependencies:
|
||||||
universalify: 2.0.0
|
universalify: 2.0.1
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
graceful-fs: 4.2.11
|
graceful-fs: 4.2.11
|
||||||
dev: true
|
dev: false
|
||||||
|
|
||||||
/jsonwebtoken@9.0.2:
|
/jsonwebtoken@9.0.2:
|
||||||
resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==}
|
resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==}
|
||||||
@ -7046,10 +7047,10 @@ packages:
|
|||||||
engines: {node: '>= 4.0.0'}
|
engines: {node: '>= 4.0.0'}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/universalify@2.0.0:
|
/universalify@2.0.1:
|
||||||
resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==}
|
resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
|
||||||
engines: {node: '>= 10.0.0'}
|
engines: {node: '>= 10.0.0'}
|
||||||
dev: true
|
dev: false
|
||||||
|
|
||||||
/unpipe@1.0.0:
|
/unpipe@1.0.0:
|
||||||
resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
|
resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
|
||||||
|
174
scripts/install.sh
Normal file
174
scripts/install.sh
Normal file
@ -0,0 +1,174 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#=================================================
|
||||||
|
# System Required: CentOS/Debian/ArchLinux with Systemd Support
|
||||||
|
# Description: Tianji Report
|
||||||
|
# Author: moonrailgun
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
Green_font_prefix="\033[32m" && Red_font_prefix="\033[31m" && Red_background_prefix="\033[41;37m" && Font_color_suffix="\033[0m"
|
||||||
|
Info="${Green_font_prefix}[Info]${Font_color_suffix}"
|
||||||
|
Error="${Red_font_prefix}[Error]${Font_color_suffix}"
|
||||||
|
Tip="${Green_font_prefix}[Tip]${Font_color_suffix}"
|
||||||
|
|
||||||
|
function check_sys() {
|
||||||
|
if [[ -f /etc/redhat-release ]]; then
|
||||||
|
release="centos"
|
||||||
|
elif grep -q -E -i "debian|ubuntu" /etc/issue; then
|
||||||
|
release="debian"
|
||||||
|
elif grep -q -E -i "centos|red hat|redhat" /etc/issue; then
|
||||||
|
release="centos"
|
||||||
|
elif grep -q -E -i "Arch|Manjaro" /etc/issue; then
|
||||||
|
release="arch"
|
||||||
|
elif grep -q -E -i "debian|ubuntu" /proc/version; then
|
||||||
|
release="debian"
|
||||||
|
elif grep -q -E -i "centos|red hat|redhat" /proc/version; then
|
||||||
|
release="centos"
|
||||||
|
else
|
||||||
|
echo -e "Tianji Report not support this linux version"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
bit=$(uname -m)
|
||||||
|
}
|
||||||
|
|
||||||
|
function check_pid() {
|
||||||
|
PID=$(pgrep -f "tianji-reporter")
|
||||||
|
}
|
||||||
|
|
||||||
|
function install_dependencies() {
|
||||||
|
case ${release} in
|
||||||
|
centos)
|
||||||
|
yum install -y wget curl
|
||||||
|
;;
|
||||||
|
debian)
|
||||||
|
apt-get update -y
|
||||||
|
apt-get install -y wget curl
|
||||||
|
;;
|
||||||
|
arch)
|
||||||
|
pacman -Syu --noconfirm wget curl
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
function input_dsn() {
|
||||||
|
defaultServer="{{DEFAULT_SERVER}}"
|
||||||
|
read -p "${Info} Please input server url(default: $defaultWorkspace)" serverUrl
|
||||||
|
serverUrl=${serverUrl:$defaultWorkspace}
|
||||||
|
|
||||||
|
defaultWorkspace="{{DEFAULT_WORKSPACE}}"
|
||||||
|
read -p "${Info} Please input workspaceId(default: $defaultWorkspace)" workspace
|
||||||
|
workspace=${workspace:$defaultWorkspace}
|
||||||
|
}
|
||||||
|
|
||||||
|
service_conf=/usr/lib/systemd/system/tianji-reporter.service
|
||||||
|
|
||||||
|
function write_service() {
|
||||||
|
echo -e "${Info} Write to systemd configuration"
|
||||||
|
cat >${service_conf} <<-EOF
|
||||||
|
[Unit]
|
||||||
|
Description=Tianji-Report
|
||||||
|
Documentation=https://github.com/msgbyte/tianji
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
ExecStart=/usr/local/tianji/reporter/tianji-reporter --url "${serverUrl}" --workspace "${workspace}"
|
||||||
|
ExecReload=/bin/kill -HUP $MAINPID
|
||||||
|
Restart=on-failure
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function enable_service() {
|
||||||
|
write_service
|
||||||
|
systemctl enable tianji-reporter
|
||||||
|
systemctl start tianji-reporter
|
||||||
|
check_pid
|
||||||
|
if [[ -n ${PID} ]]; then
|
||||||
|
echo -e "${Info} Tianji Reporter Started!"
|
||||||
|
else
|
||||||
|
echo -e "${Error} Tianji Reporter Start Failed!"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function restart_service() {
|
||||||
|
write_service
|
||||||
|
systemctl daemon-reload
|
||||||
|
systemctl restart tianji-reporter
|
||||||
|
check_pid
|
||||||
|
if [[ -n ${PID} ]]; then
|
||||||
|
echo -e "${Info} Tianji Reporter Started!"
|
||||||
|
else
|
||||||
|
echo -e "${Error} Tianji Reporter Start Failed!"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function reset_config() {
|
||||||
|
restart_service
|
||||||
|
}
|
||||||
|
|
||||||
|
function install_client() {
|
||||||
|
case ${bit} in
|
||||||
|
x86_64)
|
||||||
|
arch=amd64
|
||||||
|
;;
|
||||||
|
# i386)
|
||||||
|
# arch=386
|
||||||
|
# ;;
|
||||||
|
aarch64 | aarch64_be | arm64 | armv8b | armv8l)
|
||||||
|
arch=arm64
|
||||||
|
;;
|
||||||
|
# arm | armv6l | armv7l | armv5tel | armv5tejl)
|
||||||
|
# arch=arm
|
||||||
|
# ;;
|
||||||
|
# mips | mips64)
|
||||||
|
# arch=mips
|
||||||
|
# ;;
|
||||||
|
*)
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
echo -e "${Info} Downloading ${arch} binary file..."
|
||||||
|
mkdir -p /usr/local/tianji/reporter/
|
||||||
|
cd /tmp && wget "https://github.com/msgbyte/tianji/releases/latest/download/tianji-reporter-linux-${arch}"
|
||||||
|
mv tianji-reporter-linux-${arch} /usr/local/tianji/reporter/tianji-reporter
|
||||||
|
chmod +x /usr/local/tianji/reporter/tianji-reporter
|
||||||
|
enable_service
|
||||||
|
}
|
||||||
|
|
||||||
|
function auto_install() {
|
||||||
|
dsn=$(echo ${*})
|
||||||
|
install_client
|
||||||
|
}
|
||||||
|
|
||||||
|
function uninstall_client() {
|
||||||
|
systemctl stop tianji-reporter
|
||||||
|
systemctl disable tianji-reporter
|
||||||
|
rm -rf /usr/local/tianji/reporter/
|
||||||
|
rm -rf /usr/lib/systemd/system/tianji-reporter.service
|
||||||
|
}
|
||||||
|
|
||||||
|
check_sys
|
||||||
|
case "$1" in
|
||||||
|
uninstall|uni)
|
||||||
|
uninstall_client
|
||||||
|
;;
|
||||||
|
reset_conf|re)
|
||||||
|
input_dsn
|
||||||
|
reset_config
|
||||||
|
;;
|
||||||
|
-dsn)
|
||||||
|
shift 1
|
||||||
|
install_dependencies
|
||||||
|
auto_install ${*}
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
install_dependencies
|
||||||
|
input_dsn
|
||||||
|
install_client
|
||||||
|
;;
|
||||||
|
esac
|
@ -1,9 +1,15 @@
|
|||||||
import { Router } from 'express';
|
import { Router } from 'express';
|
||||||
import { body, header, validate } from '../middleware/validate';
|
import { body, header, param, validate } from '../middleware/validate';
|
||||||
import { recordServerStatus } from '../model/serverStatus';
|
import { recordServerStatus } from '../model/serverStatus';
|
||||||
|
import fs from 'fs-extra';
|
||||||
|
import path from 'path';
|
||||||
|
|
||||||
export const serverStatusRouter = Router();
|
export const serverStatusRouter = Router();
|
||||||
|
|
||||||
|
const installScript = fs.readFileSync(
|
||||||
|
path.resolve(process.cwd(), './scripts/install.sh')
|
||||||
|
);
|
||||||
|
|
||||||
serverStatusRouter.post(
|
serverStatusRouter.post(
|
||||||
'/report',
|
'/report',
|
||||||
validate(
|
validate(
|
||||||
@ -22,3 +28,20 @@ serverStatusRouter.post(
|
|||||||
res.send('success');
|
res.send('success');
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
serverStatusRouter.get(
|
||||||
|
'/:workspaceId/install.sh',
|
||||||
|
validate(param('workspaceId').isString()),
|
||||||
|
async (req, res) => {
|
||||||
|
const { workspaceId } = req.params;
|
||||||
|
const server = `${req.protocol}://${req.get('Host')}`;
|
||||||
|
|
||||||
|
res
|
||||||
|
.setHeader('Content-Type', 'text/plain')
|
||||||
|
.send(
|
||||||
|
String(installScript)
|
||||||
|
.replace('{{DEFAULT_SERVER}}', server)
|
||||||
|
.replace('{{DEFAULT_WORKSPACE}}', workspaceId)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
Loading…
Reference in New Issue
Block a user