140 lines
3.4 KiB
Bash
Executable File
140 lines
3.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
skill_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
project_dir="$(cd "${skill_dir}/../../.." && pwd)"
|
|
local_log="${project_dir}/.local/logs/backend.log"
|
|
|
|
online_ssh_host="${SHZ_ONLINE_SSH_HOST:-root@39.98.44.136}"
|
|
online_ssh_port="${SHZ_ONLINE_SSH_PORT:-6022}"
|
|
online_remote_log_dir="${SHZ_ONLINE_LOG_DIR:-/opt/service/project/shz-backend/logs}"
|
|
|
|
test_ssh_host="${SHZ_TEST_SSH_HOST:-root@47.111.103.66}"
|
|
test_ssh_port="${SHZ_TEST_SSH_PORT:-22}"
|
|
test_remote_log_dir="${SHZ_TEST_LOG_DIR:-/data/code/shz-backend/logs}"
|
|
|
|
usage() {
|
|
cat <<'EOF'
|
|
Usage:
|
|
view.sh local [lines] [--follow]
|
|
view.sh online|production [backend|error|info|user] [lines] [--follow]
|
|
view.sh test [backend|error|info|user] [lines] [--follow]
|
|
|
|
Examples:
|
|
view.sh local 200
|
|
view.sh local 100 --follow
|
|
view.sh online backend 200
|
|
view.sh test error 200
|
|
view.sh online error 500 --follow
|
|
EOF
|
|
}
|
|
|
|
validate_lines() {
|
|
local lines="$1"
|
|
if [[ ! "${lines}" =~ ^[0-9]+$ ]] || (( lines < 1 || lines > 5000 )); then
|
|
echo "Lines must be an integer between 1 and 5000: ${lines}" >&2
|
|
exit 2
|
|
fi
|
|
}
|
|
|
|
validate_follow() {
|
|
local follow="${1:-}"
|
|
if [[ -n "${follow}" && "${follow}" != "--follow" ]]; then
|
|
echo "Unknown option: ${follow}" >&2
|
|
usage >&2
|
|
exit 2
|
|
fi
|
|
}
|
|
|
|
view_local() {
|
|
local lines="${1:-200}"
|
|
local follow="${2:-}"
|
|
validate_lines "${lines}"
|
|
validate_follow "${follow}"
|
|
|
|
if [[ ! -f "${local_log}" ]]; then
|
|
echo "Local log does not exist: ${local_log}" >&2
|
|
echo "Start the project first with: ./local.sh start" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [[ "${follow}" == "--follow" ]]; then
|
|
tail -n "${lines}" -F -- "${local_log}"
|
|
else
|
|
tail -n "${lines}" -- "${local_log}"
|
|
fi
|
|
}
|
|
|
|
view_remote() {
|
|
local target="$1"
|
|
local kind="${2:-backend}"
|
|
local lines="${3:-200}"
|
|
local follow="${4:-}"
|
|
local ssh_host ssh_port remote_log_dir remote_file
|
|
|
|
case "${target}" in
|
|
online|production)
|
|
ssh_host="${online_ssh_host}"
|
|
ssh_port="${online_ssh_port}"
|
|
remote_log_dir="${online_remote_log_dir}"
|
|
;;
|
|
test)
|
|
ssh_host="${test_ssh_host}"
|
|
ssh_port="${test_ssh_port}"
|
|
remote_log_dir="${test_remote_log_dir}"
|
|
;;
|
|
*)
|
|
echo "Unknown remote environment: ${target}" >&2
|
|
usage >&2
|
|
exit 2
|
|
;;
|
|
esac
|
|
|
|
case "${kind}" in
|
|
backend) remote_file="${remote_log_dir}/backend.log" ;;
|
|
error) remote_file="${remote_log_dir}/sys-error.log" ;;
|
|
info) remote_file="${remote_log_dir}/sys-info.log" ;;
|
|
user) remote_file="${remote_log_dir}/sys-user.log" ;;
|
|
*)
|
|
echo "Unknown log type: ${kind}" >&2
|
|
usage >&2
|
|
exit 2
|
|
;;
|
|
esac
|
|
|
|
validate_lines "${lines}"
|
|
validate_follow "${follow}"
|
|
|
|
local -a ssh_args=(-o BatchMode=yes -o ConnectTimeout=10)
|
|
if [[ -n "${ssh_port}" ]]; then
|
|
ssh_args+=(-p "${ssh_port}")
|
|
fi
|
|
|
|
if [[ "${follow}" == "--follow" ]]; then
|
|
ssh "${ssh_args[@]}" "${ssh_host}" \
|
|
tail -n "${lines}" -F -- "${remote_file}"
|
|
else
|
|
ssh "${ssh_args[@]}" "${ssh_host}" \
|
|
tail -n "${lines}" -- "${remote_file}"
|
|
fi
|
|
}
|
|
|
|
target="${1:-}"
|
|
case "${target}" in
|
|
local)
|
|
[[ $# -le 3 ]] || { usage >&2; exit 2; }
|
|
view_local "${2:-200}" "${3:-}"
|
|
;;
|
|
online|production|test)
|
|
[[ $# -le 4 ]] || { usage >&2; exit 2; }
|
|
view_remote "${target}" "${2:-backend}" "${3:-200}" "${4:-}"
|
|
;;
|
|
help|-h|--help)
|
|
usage
|
|
;;
|
|
*)
|
|
usage >&2
|
|
exit 2
|
|
;;
|
|
esac
|