From 08bcb5b8268b8075041083b6fb0ea7a6578d009b Mon Sep 17 00:00:00 2001 From: Aidan Date: Thu, 19 Dec 2024 22:44:33 -0500 Subject: [PATCH] improve logic of checking status, opt to restart server instead of exit, add comments, improve checking deps --- manage | 59 ++++++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 47 insertions(+), 12 deletions(-) diff --git a/manage b/manage index 861ce96..7844912 100755 --- a/manage +++ b/manage @@ -1,6 +1,6 @@ #!/bin/bash -SC_VERSION=1.2.1 +SC_VERSION=1.3.0 SC_CODENAME="bionic" PORT=5566 SETUP_FILE=".setup_complete" @@ -11,11 +11,17 @@ COLOR_YELLOW="\033[1;33m" COLOR_BLUE="\033[1;34m" COLOR_CYAN="\033[1;36m" +function command_exists() { + command -v "$1" &> /dev/null +} + function install_tools() { - if ! command -v node &> /dev/null 2>&1; then + # Check for NodeJS, and install if not found + if ! command_exists node; then echo -e "${COLOR_RED}NodeJS is not installed. Installing now...${COLOR_RESET}" echo -e "${COLOR_YELLOW}You may need to enter your sudo password.${COLOR_RESET}\n" curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash + # shellcheck disable=SC2155 export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" nvm install 20.18.0 @@ -24,7 +30,8 @@ function install_tools() { echo -e "${COLOR_GREEN}NodeJS is installed. Version: $(node -v)${COLOR_RESET}" fi - if ! command -v nc &> /dev/null 2>&1; then + # Check for Netcat, and install if not found + if ! command_exists nc; then echo -e "${COLOR_RED}Netcat is not installed. Installing now...${COLOR_RESET}" echo -e "${COLOR_YELLOW}You may need to enter your sudo password.${COLOR_RESET}\n" sudo apt-get install netcat-traditional @@ -33,7 +40,8 @@ function install_tools() { echo -e "${COLOR_GREEN}Netcat is installed.${COLOR_RESET}" fi - if ! command -v npm &> /dev/null 2>&1; then + # Check for NPM, and install if not found + if ! command_exists npm; then echo -e "${COLOR_RED}NPM is not installed. Installing now...${COLOR_RESET}" echo -e "${COLOR_YELLOW}You may need to enter your sudo password.${COLOR_RESET}\n" sudo apt-get update @@ -58,6 +66,7 @@ function install_tools() { fi } +# Show help message function show_help() { echo -e "${COLOR_GREEN}manage version:${COLOR_RESET} ${COLOR_BLUE}${SC_VERSION} ${SC_CODENAME}${COLOR_RESET}" echo -e "${COLOR_BLUE}Usage:${COLOR_RESET} ./manage [command]\n" @@ -69,6 +78,7 @@ function show_help() { echo -e " ${COLOR_CYAN}status, -s, --status${COLOR_RESET} Checks if the server is running.\n" } +# Check if essential directories exist (mainly for server startup/shutdown), and create them if they don't already exist function check_dirs() { local action=$1 local created_count=0 @@ -105,6 +115,7 @@ function check_dirs() { fi } +# Handles restarting of server function restart_server() { check_setup @@ -157,29 +168,38 @@ function restart_server() { echo -e "${COLOR_BLUE}Starting server...${COLOR_RESET}" npm start > node.log 2>&1 & - for i in {1..10}; do + MAX_RETRIES=10 + RETRY_INTERVAL=1 + + for ((i=1; i<=MAX_RETRIES; i++)); do PIDS=$(lsof -t -i:$PORT) if [ -n "$PIDS" ]; then echo -e "${COLOR_GREEN}\nDone. Server up and running on port $PORT!\n${COLOR_RESET}" break else - echo -e "${COLOR_YELLOW}Waiting for server to start on port $PORT...${COLOR_RESET}" - sleep 1 + echo -e "${COLOR_YELLOW}Waiting for server to start on port $PORT... Attempt $i/${MAX_RETRIES}${COLOR_RESET}" + sleep $RETRY_INTERVAL fi done + if [ -z "$PIDS" ]; then + echo -e "${COLOR_RED}Failed to start the server on port $PORT after $MAX_RETRIES attempts.${COLOR_RESET}" + fi + if [ -z "$PIDS" ]; then echo -e "${COLOR_RED}Something went wrong... Check node.log for more details${COLOR_RESET} (no process on port)" fi } +# Handles starting of server function start_server() { check_setup PID=$(lsof -t -i:$PORT) if [ -n "$PID" ]; then - echo -e "${COLOR_YELLOW}Server already running on port $PORT. Skipping server startup.${COLOR_RESET}" + echo -e "${COLOR_GREEN}Server already running on port $PORT, opting to restart.\n${COLOR_RESET}" + restart_server return fi @@ -215,22 +235,30 @@ function start_server() { echo -e "${COLOR_BLUE}Starting server...${COLOR_RESET}" npm start > node.log 2>&1 & - for i in {1..10}; do + MAX_RETRIES=10 + RETRY_INTERVAL=1 + + for ((i=1; i<=MAX_RETRIES; i++)); do PIDS=$(lsof -t -i:$PORT) if [ -n "$PIDS" ]; then echo -e "${COLOR_GREEN}\nDone. Server up and running on port $PORT!\n${COLOR_RESET}" break else - echo -e "${COLOR_YELLOW}Waiting for server to start on port $PORT...${COLOR_RESET}" - sleep 1 + echo -e "${COLOR_YELLOW}Waiting for server to start on port $PORT... Attempt $i/${MAX_RETRIES}${COLOR_RESET}" + sleep $RETRY_INTERVAL fi done + if [ -z "$PIDS" ]; then + echo -e "${COLOR_RED}Failed to start the server on port $PORT after $MAX_RETRIES attempts.${COLOR_RESET}" + fi + if [ -z "$PIDS" ]; then echo -e "${COLOR_RED}Something went wrong... Check node.log for more details${COLOR_RESET} (no process on port)" fi } +# Handles stopping of server function stop_server() { check_setup PID=$(lsof -t -i:$PORT) @@ -265,6 +293,7 @@ function stop_server() { fi } +# Checks if server is running function check_status() { check_setup PID=$(lsof -t -i:$PORT) @@ -276,6 +305,7 @@ function check_status() { fi } +# Master setup function/process function setup() { clear echo -e "${COLOR_BLUE}Welcome to the aidxnFUN 'manage' script setup!\n${COLOR_RESET}${COLOR_CYAN}You are running manage ${SC_VERSION} ${SC_CODENAME}${COLOR_RESET}\n" @@ -291,15 +321,18 @@ function setup() { read -n 1 -s -r -p "" clear + # Execute install tool script install_tools + # Install NPM dependencies npm install - echo -e "\n${COLOR_GREEN}Dependancy installation complete!${COLOR_RESET}" + echo -e "\n${COLOR_GREEN}Dependency installation complete!${COLOR_RESET}" echo -e "\n${COLOR_BLUE}If you would like to view the install logs, please do so, or click [ENTER] to continue to the next step.${COLOR_RESET}\n" read -n 1 -s -r -p "" clear echo -e "${COLOR_GREEN}Now, take a look at the commands you can use with this script:${COLOR_RESET}\n" + # Show the user help message show_help echo -e "\nPress any key to continue to the final step..." read -n 1 -s -r -p "" @@ -317,11 +350,13 @@ function setup() { } function check_setup() { + # Check if setup file exists if [ ! -f "$SETUP_FILE" ]; then setup fi } +# Handles user commands case $1 in up) check_setup