$96 GRAYBYTE WORDPRESS FILE MANAGER $83

SERVER : in-mum-web1330.main-hosting.eu #1 SMP Mon Feb 10 22:45:17 UTC 2025
SERVER IP : 88.222.243.104 | ADMIN IP 216.73.216.96
OPTIONS : CRL = ON | WGT = ON | SDO = OFF | PKEX = OFF
DEACTIVATED : NONE

/opt/releem/

HOME
Current File : /opt/releem//mysqlconfigurer.sh
#!/usr/bin/env bash
# mysqlconfigurer.sh - Version 1.23.3
# (C) Releem, Inc 2022
# All rights reserved

export PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
export EXTEND_TIMEOUT_USEC=18000000000

# Set sudo command
if [ "$EUID" -ne 0 ]; then
    sudo_cmd="sudo"
else
    sudo_cmd=""
fi

# Variables
VERSION="1.23.3"
RELEEM_CONF_DIR="/opt/releem/conf/"
RELEEM_CONF_FILE="/opt/releem/releem.conf"
RELEEM_DB_VERSION_FILE="${RELEEM_CONF_DIR}db_version"
RELEEM_INSTALL_FILE="${RELEEM_CONF_DIR}install.sh"
DB_MEMORY_LIMIT=0
RELEEM_AGENT_BINARY_URL="https://releem.s3.amazonaws.com/v2/releem-agent-$(arch)"
RELEEM_AGENT_SCRIPT_URL="https://releem.s3.amazonaws.com/v2/mysqlconfigurer.sh"
RELEEM_AGENT_INSTALL_SCRIPT_URL="https://releem.s3.amazonaws.com/v2/install.sh"


logfile="/var/log/releem-mysqlconfigurer.log"

# Set up a named pipe for logging
npipe=/tmp/$$.mysqlconfigurer.tmp
mknod $npipe p

# Log all output to a log for error checking
tee <$npipe $logfile &
exec 1>&-
exec 1>$npipe 2>&1

function on_exit() {
    if [[ "${RELEEM_REGION}" == "EU" ]]; then
        API_DOMAIN="api.eu.releem.com"
    else
        API_DOMAIN="api.releem.com"
    fi
    curl -s -L -d @$logfile -H "x-releem-api-key: $RELEEM_API_KEY" -H "Content-Type: application/json" -X POST https://${API_DOMAIN}/v2/events/configurer_log
    rm -f $npipe
}

trap on_exit EXIT

function update_agent() {
    trap - EXIT
    /opt/releem/releem-agent start > /dev/null || true
    NEW_VER=$(curl  -s -L https://releem.s3.amazonaws.com/v2/current_version_agent)
    if [ "$NEW_VER" != "$VERSION" ]; then
        if [ "$(printf '%s\n' "$NEW_VER" "$VERSION" | sort -V | head -n1)" = "$VERSION" ];
        then
            printf "\033[37m\n * Updating script \e[31;1m%s\e[0m -> \e[32;1m%s\e[0m\n" "$VERSION" "$NEW_VER"
            curl -s -L $RELEEM_AGENT_INSTALL_SCRIPT_URL > "$RELEEM_INSTALL_FILE"
            RELEEM_INSTANCE_TYPE=$RELEEM_INSTANCE_TYPE RELEEM_API_KEY=$RELEEM_API_KEY exec bash "$RELEEM_INSTALL_FILE" -u
            /opt/releem/releem-agent --event=agent_updated > /dev/null
        fi
    fi
}

function non_blocking_wait() {
    PID=$1
    if [ ! -d "/proc/$PID" ]; then
        wait $PID
        CODE=$?
    else
        CODE=150
    fi
    return $CODE
}


function wait_restart() {
  sleep 1
  flag=0
  spin[0]="-"
  spin[1]="\\"
  spin[2]="|"
  spin[3]="/"
  printf "\033[37m\n Waiting for service to start 1200 seconds ${spin[0]}"
  while /bin/true; do
    PID=$1
    non_blocking_wait $PID
    CODE=$?
    if [ $CODE -ne 150 ]; then
        printf "\033[0m\n PID $PID terminated with exit code $CODE"
        if [ $CODE -eq 0 ]; then
                RETURN_CODE=0
        else
                RETURN_CODE=7
        fi
        break
    fi
    flag=$(($flag + 1))
    if [ $flag == 1200 ]; then
        RETURN_CODE=6
        break
    fi
    i=`expr $flag % 4`
    printf "\b${spin[$i]}"
    sleep 1
  done
  printf "\033[0m\n"
  return $RETURN_CODE
}


function check_db_version() {
    if [ "$DATABASE_TYPE" == "postgresql" ];
    then
        return 0
    fi

    if [ -f "$RELEEM_DB_VERSION_FILE" ]; then
        db_version=$(cat $RELEEM_DB_VERSION_FILE)
    else
        printf "\033[37m\n * Please try again later or run Releem Agent manually:\033[0m"
        printf "\033[32m\n  /opt/releem/releem-agent -f \033[0m\n\n"
        exit 1;
    fi
    if [ -z $db_version ]; then
        printf "\033[37m\n * Please try again later or run Releem Agent manually:\033[0m"
        printf "\033[32m\n /opt/releem/releem-agent -f \033[0m\n\n"
        exit 1;
    fi
    requiredver="5.6.8"
    if [ "$(printf '%s\n' "$db_version" "$requiredver" | sort -V | head -n1)" = "$requiredver" ]; then
        return 0
    else
        return 1
    fi
}


function releem_rollback_config() {
    printf "\033[31m\n * Rolling back ${DATABASE_NAME} configuration.\033[0m\n"
    if [ "$DATABASE_TYPE" == "mysql" ]; then
        if ! check_db_version; then        
                printf "\033[31m\n * MySQL version is lower than 5.6.7. Check the documentation https://github.com/Releem/mysqlconfigurer#how-to-apply-the-recommended-configuration for applying the configuration. \033[0m\n"        
            exit 2
        fi
    fi
    if [ -z "$RELEEM_DB_CONFIG_DIR" -o ! -d "$RELEEM_DB_CONFIG_DIR" ]; then
        printf "\033[37m\n * ${DATABASE_NAME} configuration directory was not found.\033[0m"
        printf "\033[37m\n * Try to reinstall Releem Agent, and set the my.cnf location.\033[0m"
        exit 3;
    fi

    FLAG_RESTART_SERVICE=1
    if [ -z "$RELEEM_RESTART_SERVICE" ]; then
    	read -p "Restart ${DATABASE_NAME} service? (Y/N) " -n 1 -r
      echo    # move to a new line
      if [[ ! $REPLY =~ ^[Yy]$ ]]
      then
        printf "\033[37m\n * Confirmation to restart the service has not been received. Releem recommended configuration has not been rolled back.\033[0m\n"
        FLAG_RESTART_SERVICE=0
      fi
    elif [ "$RELEEM_RESTART_SERVICE" -eq 0 ]; then
      FLAG_RESTART_SERVICE=0
    fi
    if [ "$FLAG_RESTART_SERVICE" -eq 0 ]; then
        exit 5
    fi

    printf "\033[31m\n * Deleting the configuration file. \033[0m\n"
    rm -rf $RELEEM_DB_CONFIG_DIR/$RELEEM_DB_CONFIG_FILE_NAME
    #echo "----Test config-------"
    if [ -f "${RELEEM_CONF_DIR}${RELEEM_DB_CONFIG_FILE_NAME}.bkp" ]; then
        printf "\033[31m\n * Restoring the backup copy of the configuration file ${RELEEM_CONF_DIR}${RELEEM_DB_CONFIG_FILE_NAME}.bkp. \033[0m\n"
        cp -f "${RELEEM_CONF_DIR}${RELEEM_DB_CONFIG_FILE_NAME}.bkp" "${RELEEM_DB_CONFIG_DIR}/${RELEEM_DB_CONFIG_FILE_NAME}"
    fi

    if [ -z "$RELEEM_COMMAND_RESTART_SERVICE" ]; then
        printf "\033[37m\n * The command to restart the ${DATABASE_NAME} service was not found. Try to reinstall Releem Agent.\033[0m"
        exit 4;
    fi
    printf "\033[31m\n * Restarting ${DATABASE_NAME} with command '$RELEEM_COMMAND_RESTART_SERVICE'.\033[0m\n"
    eval "$RELEEM_COMMAND_RESTART_SERVICE" &
    wait_restart $!
    RESTART_CODE=$?

    if [ $RESTART_CODE -eq 0 ];
    then
        printf "\n`date +%Y%m%d-%H:%M:%S`\033[32m The ${DATABASE_NAME} service restarted successfully!\033[0m\n"
        rm -f "${RELEEM_CONF_DIR}${RELEEM_DB_CONFIG_FILE_NAME}.bkp"
    elif [ $RESTART_CODE -eq 6 ];
    then
        printf "\n`date +%Y%m%d-%H:%M:%S`\033[31m The ${DATABASE_NAME} service failed to restart in 1200 seconds. Check the ${DATABASE_NAME} error log. \033[0m\n"
    elif [ $RESTART_CODE -eq 7 ];
    then
        printf "\n`date +%Y%m%d-%H:%M:%S`\033[31m The ${DATABASE_NAME} service failed to restart. Check the ${DATABASE_NAME} error log. \033[0m\n" 
    fi
    /opt/releem/releem-agent --event=config_rollback > /dev/null
    exit "${RESTART_CODE}"
}



function releem_configure_database() {
    printf "\033[37m\n * Detected database type: $DATABASE_TYPE\033[0m\n"
    
    if [ "$DATABASE_TYPE" == "mysql" ]; then
        releem_configure_mysql
    elif [ "$DATABASE_TYPE" == "postgresql" ]; then
        releem_configure_postgresql_libraries
        releem_configure_postgresql
    else
        printf "\033[31m\n * Unknown database type: $DATABASE_TYPE. Supported types: mysql, postgresql\033[0m\n"
        printf "\033[37m\n * Please configure either mysql_user/mysql_password or pg_user/pg_password in releem.conf\033[0m\n"
        exit 1
    fi
}


function releem_configure_mysql() {
    FLAG_CONFIGURE=1
    status_ps=$($mysqlcmd  ${mysql_connection_string}  --user=${MYSQL_LOGIN} --password=${MYSQL_PASSWORD} -BNe "show global variables like 'performance_schema'" 2>/dev/null | awk '{print $2}')
    if [ "$status_ps" != "ON" ]; then
        FLAG_CONFIGURE=0
    fi

    status_slowlog=$($mysqlcmd  ${mysql_connection_string}  --user=${MYSQL_LOGIN} --password=${MYSQL_PASSWORD} -BNe "show global variables like 'slow_query_log'" 2>/dev/null | awk '{print $2}')
    if [ "$status_slowlog" != "ON" ]; then
        FLAG_CONFIGURE=0
    fi

    ps_digest_size=$($mysqlcmd  ${mysql_connection_string}  --user=${MYSQL_LOGIN} --password=${MYSQL_PASSWORD} -BNe "show global variables like 'performance_schema_digests_size'" 2>/dev/null | awk '{print $2}')
    if [ "$ps_digest_size" -lt 10000 ]; then
        FLAG_CONFIGURE=0
    fi

    if [ -z "$RELEEM_DB_CONFIG_DIR" ] || [ ! -d "$RELEEM_DB_CONFIG_DIR" ]; then
        printf "\033[31m\n MySQL configuration directory was not found.\n Try to reinstall Releem Agent.\033[0m"
        exit 3;
    fi
    if [ -f "$MYSQL_MY_CNF_PATH" ]; then
        if [ `$sudo_cmd grep -cE "!includedir $RELEEM_DB_CONFIG_DIR" $MYSQL_MY_CNF_PATH` -eq 0 ]; then
            printf "\033[31m\n Directive includedir was not found in the MySQL configuration file $MYSQL_MY_CNF_PATH.\n Try to reinstall Releem Agent.\n\033[0m"
            exit 11;
        fi
    fi
    printf "\033[37m\n * Enabling and configuring Performance schema and SlowLog to collect metrics and queries.\n\033[0m"
    echo "### This configuration was recommended by Releem. https://releem.com" | $sudo_cmd tee "$RELEEM_DB_CONFIG_DIR/collect_metrics.cnf" >/dev/null
    echo "[mysqld]" | $sudo_cmd tee -a "$RELEEM_DB_CONFIG_DIR/collect_metrics.cnf" >/dev/null
    echo "performance_schema = 1" | $sudo_cmd tee -a "$RELEEM_DB_CONFIG_DIR/collect_metrics.cnf" >/dev/null
    echo "slow_query_log = 1" | $sudo_cmd tee -a "$RELEEM_DB_CONFIG_DIR/collect_metrics.cnf" >/dev/null
    if [ "$ps_digest_size" -le 10000 ]; then
        echo "performance_schema_digests_size = 10000" | $sudo_cmd tee -a "$RELEEM_DB_CONFIG_DIR/collect_metrics.cnf" >/dev/null
    fi
    if [ -n "$RELEEM_QUERY_OPTIMIZATION" -a "$RELEEM_QUERY_OPTIMIZATION" = true ]; then
        performance_schema_setup_consumers_events_statements_current=$($mysqlcmd ${mysql_connection_string}  --user=${MYSQL_LOGIN} --password=${MYSQL_PASSWORD} -BNe "SELECT ENABLED FROM performance_schema.setup_consumers WHERE NAME = 'events_statements_current';" 2>/dev/null )
        performance_schema_setup_consumers_events_statements_history=$($mysqlcmd ${mysql_connection_string}  --user=${MYSQL_LOGIN} --password=${MYSQL_PASSWORD} -BNe "SELECT ENABLED FROM performance_schema.setup_consumers WHERE NAME = 'events_statements_history';" 2>/dev/null )
        # performance_schema_events_statements_history_size=$($mysqlcmd  ${mysql_connection_string}  --user=${MYSQL_LOGIN} --password=${MYSQL_PASSWORD} -BNe "show global variables like 'performance_schema_events_statements_history_size'" 2>/dev/null | awk '{print $2}')

        if [ "$performance_schema_setup_consumers_events_statements_current" != "YES" ]; then
            FLAG_CONFIGURE=0
        fi
        if [ "$performance_schema_setup_consumers_events_statements_history" != "YES" ]; then
            FLAG_CONFIGURE=0
        fi
        # if [ "$performance_schema_events_statements_history_size" != "150" ]; then
        #     FLAG_CONFIGURE=0
        # fi         
        echo "performance-schema-consumer-events-statements-history = ON" | $sudo_cmd tee -a "$RELEEM_DB_CONFIG_DIR/collect_metrics.cnf" >/dev/null
        echo "performance-schema-consumer-events-statements-current = ON" | $sudo_cmd tee -a "$RELEEM_DB_CONFIG_DIR/collect_metrics.cnf" >/dev/null
        # echo "performance_schema_events_statements_history_size = 500" | $sudo_cmd tee -a "$RELEEM_DB_CONFIG_DIR/collect_metrics.cnf" >/dev/null
    fi        
    chmod 644 $RELEEM_DB_CONFIG_DIR/collect_metrics.cnf

    if [ "$FLAG_CONFIGURE" -eq 1 ]; then
        printf "\033[37m\n * Performance schema and SlowLog are enabled and configured to collect metrics and queries.\033[0m\n"
        exit 0
    fi
    printf "\033[37m\n To apply changes to the MySQL configuration, you need to restart the service\n\033[0m\n"
    FLAG_RESTART_SERVICE=1
    if [ -z "$RELEEM_RESTART_SERVICE" ]; then
        read -p " Restart MySQL service? (Y/N) " -n 1 -r
        echo    # move to a new line
        if [[ ! $REPLY =~ ^[Yy]$ ]]
        then
            printf "\033[31m\n Confirmation to restart the service has not been received. \033[0m\n"
            FLAG_RESTART_SERVICE=0
        fi
    elif [ "$RELEEM_RESTART_SERVICE" -eq 0 ]; then
        FLAG_RESTART_SERVICE=0
    fi
    if [ "$FLAG_RESTART_SERVICE" -eq 0 ]; then
        printf "\033[31m\n For appling change in configuration MySQL need to restart service.\n Run the command \`bash /opt/releem/mysqlconfigurer.sh -p\` when it is possible to restart the service.\033[0m\n"
        exit 0
    fi
    #echo "-------Test config-------"
    printf "\033[37m\n Restarting MySQL service with command '$RELEEM_COMMAND_RESTART_SERVICE'.\033[0m\n"
    eval "$RELEEM_COMMAND_RESTART_SERVICE" &
    wait_restart $!
    RESTART_CODE=$?

    #if [[ $($mysqladmincmd  ${mysql_connection_string}  --user=${MYSQL_LOGIN} --password=${MYSQL_PASSWORD} ping 2>/dev/null || true) == "mysqld is alive" ]];
    if [ $RESTART_CODE -eq 0 ];
    then
        printf "\033[32m\n The MySQL service restarted successfully!\n Performance schema and SlowLog are enabled and configured to collect metrics and queries.\033[0m\n"
    elif [ $RESTART_CODE -eq 6 ];
    then
        printf "\033[31m\n The MySQL service failed to restart in 1200 seconds. Check the MySQL error log.\033[0m\n"
    elif [ $RESTART_CODE -eq 7 ];
    then
        printf "\n`date +%Y%m%d-%H:%M:%S`\033[31m The MySQL service failed to restart with error. Check the MySQL error log. \033[0m\n" 
    fi
    
    exit "${RESTART_CODE}"
}

function releem_configure_postgresql_libraries() {
    FLAG_CONFIGURE=1    
    shared_preload_libraries=$(PGPASSWORD=${PG_PASSWORD} $psqlcmd ${pg_connection_string} -U ${PG_LOGIN} -t -c "SHOW shared_preload_libraries;" 2>/dev/null | xargs)
    if [[ "$shared_preload_libraries" != *"pg_stat_statements"* ]]; then
        FLAG_CONFIGURE=0
    fi    
    printf "\033[37m\n * Enabling PostgreSQL Library pg_stat_statements for performance monitoring.\033[0m\n"
    if [ -z "$RELEEM_DB_CONFIG_DIR" ] || [ ! -d "$RELEEM_DB_CONFIG_DIR" ]; then
        printf "\033[31m\n PostgreSQL configuration directory was not found: $RELEEM_DB_CONFIG_DIR\033[0m\n"
        printf "\033[37m\n * Please ensure PostgreSQL is installed and the configuration directory exists.\033[0m\n"    
        exit 3;
    fi    
    echo "# This configuration was recommended by Releem. https://releem.com" | $sudo_cmd tee "$RELEEM_DB_CONFIG_DIR/collect_metrics.conf" >/dev/null
    echo "# PostgreSQL configuration for Releem metrics collection" | $sudo_cmd tee -a "$RELEEM_DB_CONFIG_DIR/collect_metrics.conf" >/dev/null
    echo "" | $sudo_cmd tee -a "$RELEEM_DB_CONFIG_DIR/collect_metrics.conf" >/dev/null
        
    if [[ "$shared_preload_libraries" == *"pg_stat_statements"* ]]; then
        echo "shared_preload_libraries = '${shared_preload_libraries}'" | $sudo_cmd tee -a "$RELEEM_DB_CONFIG_DIR/collect_metrics.conf" >/dev/null
    else    
        if [ "$shared_preload_libraries" == "" ]; then
            echo "shared_preload_libraries = 'pg_stat_statements'" | $sudo_cmd tee -a "$RELEEM_DB_CONFIG_DIR/collect_metrics.conf" >/dev/null
        else
            echo "shared_preload_libraries = '${shared_preload_libraries}, pg_stat_statements'" | $sudo_cmd tee -a "$RELEEM_DB_CONFIG_DIR/collect_metrics.conf" >/dev/null
        fi
    fi
    chmod 644 $RELEEM_DB_CONFIG_DIR/collect_metrics.conf

    if [ "$FLAG_CONFIGURE" -eq 1 ]; then
        printf "\033[37m\n   The Extention pg_stat_statements is enabled to collect metrics and queries.\033[0m\n"
        return
    fi
    printf "\033[37m To apply changes to the Postgresql configuration, you need to restart the service\n\033[0m\n"
    FLAG_RESTART_SERVICE=1
    if [ -z "$RELEEM_RESTART_SERVICE" ]; then
        read -p " Restart Postgresql service? (Y/N) " -n 1 -r
        echo    # move to a new line
        if [[ ! $REPLY =~ ^[Yy]$ ]]
        then
            printf "\033[31m Confirmation to restart the service has not been received. \033[0m\n"
            FLAG_RESTART_SERVICE=0
        fi
    elif [ "$RELEEM_RESTART_SERVICE" -eq 0 ]; then
        FLAG_RESTART_SERVICE=0
    fi
    if [ "$FLAG_RESTART_SERVICE" -eq 0 ]; then
        printf "\033[31m\n For appling change in configuration Postgresql need to restart service.\n Run the command \`bash /opt/releem/mysqlconfigurer.sh -p\` when it is possible to restart the service.\033[0m\n"
        exit 0
    fi
    #echo "-------Test config-------"
    printf "\033[37m Restarting Postgresql service with command '$RELEEM_COMMAND_RESTART_SERVICE'.\033[0m\n"
    eval "$RELEEM_COMMAND_RESTART_SERVICE" &
    wait_restart $!
    RESTART_CODE=$?

    if [ $RESTART_CODE -eq 0 ];
    then
        printf "\033[32m\n The Postgresql service restarted successfully!\n The Extention pg_stat_statements is enabled to collect metrics and queries.\033[0m\n"
    elif [ $RESTART_CODE -eq 6 ];
    then
        printf "\033[31m\n The Postgresql service failed to restart in 1200 seconds. Check the Postgresql error log.\033[0m\n"
        exit "${RESTART_CODE}"
    elif [ $RESTART_CODE -eq 7 ];
    then
        printf "\n`date +%Y%m%d-%H:%M:%S`\033[31m The Postgresql service failed to restart with error. Check the Postgresql error log. \033[0m\n" 
        exit "${RESTART_CODE}"
    fi
}

function releem_configure_postgresql() {
    FLAG_CONFIGURE=1
    
    # Check if logging is properly configured
    pg_stat_statements_track=$(PGPASSWORD=${PG_PASSWORD} $psqlcmd ${pg_connection_string} -U ${PG_LOGIN} -t -c "SHOW pg_stat_statements.track;"  | xargs)
    if [ "$pg_stat_statements_track" != "all" ]; then
        FLAG_CONFIGURE=0
    fi

    pg_stat_statements_max=$(PGPASSWORD=${PG_PASSWORD} $psqlcmd ${pg_connection_string}  -U ${PG_LOGIN} -t -c "SHOW pg_stat_statements.max;" | xargs)
    if [ "$pg_stat_statements_max" -lt 10000 ]; then
        FLAG_CONFIGURE=0
    fi


    printf "\033[37m\n * Configuring PostgreSQL to collect metrics and queries.\033[0m\n"
    if [ -z "$RELEEM_DB_CONFIG_DIR" ] || [ ! -d "$RELEEM_DB_CONFIG_DIR" ]; then
        printf "\033[31m\n The PostgreSQL configuration directory was not found: $RELEEM_DB_CONFIG_DIR\033[0m\n"
        printf "\033[37m\n Please ensure PostgreSQL is installed and the configuration directory exists.\033[0m\n"    
        exit 3;
    fi    
    echo "pg_stat_statements.track = all" | $sudo_cmd tee -a "$RELEEM_DB_CONFIG_DIR/collect_metrics.conf" >/dev/null
    if [ "$pg_stat_statements_max" -le 10000 ]; then
        echo "pg_stat_statements.max = 10000" | $sudo_cmd tee -a "$RELEEM_DB_CONFIG_DIR/collect_metrics.conf" >/dev/null
    fi
    chmod 644 $RELEEM_DB_CONFIG_DIR/collect_metrics.conf

    if [ "$FLAG_CONFIGURE" -eq 1 ]; then
        printf "\033[37m\n   The PostgreSQL is configured to collect metrics and queries.\033[0m\n"
        exit 0
    fi
    printf "\033[37m To apply changes to the Postgresql configuration, you need to restart the service\n\033[0m\n"
    FLAG_RESTART_SERVICE=1
    if [ -z "$RELEEM_RESTART_SERVICE" ]; then
        read -p " Restart Postgresql service? (Y/N) " -n 1 -r
        echo    # move to a new line
        if [[ ! $REPLY =~ ^[Yy]$ ]]
        then
            printf "\033[31m Confirmation to restart the service has not been received. \033[0m\n"
            FLAG_RESTART_SERVICE=0
        fi
    elif [ "$RELEEM_RESTART_SERVICE" -eq 0 ]; then
        FLAG_RESTART_SERVICE=0
    fi
    if [ "$FLAG_RESTART_SERVICE" -eq 0 ]; then
        printf "\033[31m\n For appling change in configuration Postgresql need to restart service.\n Run the command \`bash /opt/releem/mysqlconfigurer.sh -p\` when it is possible to restart the service.\033[0m\n"
        exit 0
    fi
    #echo "-------Test config-------"
    printf "\033[37m Restarting Postgresql service with command '$RELEEM_COMMAND_RESTART_SERVICE'.\033[0m\n"
    eval "$RELEEM_COMMAND_RESTART_SERVICE" &
    wait_restart $!
    RESTART_CODE=$?

    if [ $RESTART_CODE -eq 0 ];
    then
        printf "\033[32m\n The Postgresql service restarted successfully!\n The PostgreSQL is configured to collect metrics and queries.\033[0m\n"
    elif [ $RESTART_CODE -eq 6 ];
    then
        printf "\033[31m\n The Postgresql service failed to restart in 1200 seconds. Check the Postgresql error log.\033[0m\n"
    elif [ $RESTART_CODE -eq 7 ];
    then
        printf "\n`date +%Y%m%d-%H:%M:%S`\033[31m The Postgresql service failed to restart with error. Check the Postgresql error log. \033[0m\n" 
    fi

    exit "${RESTART_CODE}"
}


function releem_apply_config() {
    if [ "$1" == "auto" ];
    then
        releem_apply_auto
    elif [ "$1" == "automatic" ]; 
    then
        releem_apply_automatic
    elif [ "$1" == "initial" ]; 
    then        
        releem_apply_automatic "initial"
    else
        releem_apply_manual
    fi
}
 
function releem_apply_auto() {
    /opt/releem/releem-agent --task=apply_config > /dev/null
    printf "\n`date +%Y%m%d-%H:%M:%S`\033[32m Sending request to create a job to apply the configuration.\033[0m\n"
    exit 0
}

function releem_apply_manual() {
    if [ "$1" == "initial" ]; then
        DB_CONFIG_FILE_NAME="${RELEEM_DB_INITIAL_CONFIG_FILE_NAME}"
        DB_CONFIG_FILE="${RELEEM_DB_INITIAL_CONFIG_FILE}"
    else
        DB_CONFIG_FILE_NAME="${RELEEM_DB_CONFIG_FILE_NAME}"
        DB_CONFIG_FILE="${RELEEM_DB_CONFIG_FILE}"
    fi    
    if [ "$DATABASE_TYPE" == "mysql" ]; then
        if ! check_db_version; then        
                printf "\033[31m\n * MySQL version is lower than 5.6.7. Check the documentation https://github.com/Releem/mysqlconfigurer#how-to-apply-the-recommended-configuration for applying the configuration. \033[0m\n"        
            exit 2
        fi
        if [ -f "$MYSQL_MY_CNF_PATH" ]; then
            if [ `$sudo_cmd grep -cE "!includedir $RELEEM_DB_CONFIG_DIR" $MYSQL_MY_CNF_PATH` -eq 0 ]; then
                printf "\033[31m\n Directive includedir was not found in the MySQL configuration file $MYSQL_MY_CNF_PATH.\n Try to reinstall Releem Agent.\n\033[0m"
                exit 11;
            fi
        fi        
    fi
    if [ -z "$RELEEM_DB_CONFIG_DIR" -o ! -d "$RELEEM_DB_CONFIG_DIR" ]; then
        printf "\033[37m\n * ${DATABASE_NAME} configuration directory was not found.\033[0m"
        printf "\033[37m\n * Try to reinstall Releem Agent, and please set the my.cnf location.\033[0m"
        exit 3;
    fi

    printf "\n`date +%Y%m%d-%H:%M:%S`\033[37m Applying the recommended ${DATABASE_NAME} configuration.\033[0m\n"
    printf "\n`date +%Y%m%d-%H:%M:%S`\033[37m Getting the latest up-to-date configuration.\033[0m\n"
    /opt/releem/releem-agent -c >/dev/null 2>&1 || true
    if [ ! -f $RELEEM_DB_CONFIG_FILE ]; then
        printf "\033[37m\n * Recommended ${DATABASE_NAME} configuration was not found.\033[0m"
        printf "\033[37m\n * Please apply recommended configuration later or run Releem Agent manually:\033[0m"
        printf "\033[32m\n /opt/releem/releem-agent -f \033[0m\n\n"
        exit 1;
    fi
    diff_cmd=$(which diff || true)
    if [ -n "$diff_cmd" ];then
        diff "${RELEEM_DB_CONFIG_DIR}/${RELEEM_DB_CONFIG_FILE_NAME}" "$RELEEM_DB_CONFIG_FILE" > /dev/null 2>&1
        retVal=$?
        if [ $retVal -eq 0 ];
        then
            printf "\n`date +%Y%m%d-%H:%M:%S`\033[32m The new configuration is identical to the current configuration. No restart is required!\033[0m\n"
            exit 0
        fi
    fi

    FLAG_RESTART_SERVICE=1
    if [ -z "$RELEEM_RESTART_SERVICE" ]; then
      read -p "Restart ${DATABASE_NAME} service? (Y/N) " -n 1 -r
      echo    # move to a new line
      if [[ ! $REPLY =~ ^[Yy]$ ]]
      then
          printf "\n`date +%Y%m%d-%H:%M:%S`\033[37m Confirmation to restart the service has not been received. Releem recommended configuration has not been applied.\033[0m\n"
          FLAG_RESTART_SERVICE=0
      fi
    elif [ "$RELEEM_RESTART_SERVICE" -eq 0 ]; then
        FLAG_RESTART_SERVICE=0
    fi
    if [ "$FLAG_RESTART_SERVICE" -eq 0 ]; then
        exit 5
    fi

    printf "\n`date +%Y%m%d-%H:%M:%S`\033[37m Copying file $RELEEM_DB_CONFIG_FILE to directory $RELEEM_DB_CONFIG_DIR/.\033[0m\n"
    if [ ! -f "${RELEEM_CONF_DIR}${RELEEM_DB_CONFIG_FILE_NAME}.bkp" ]; then
        yes | cp -f "${RELEEM_DB_CONFIG_DIR}/${RELEEM_DB_CONFIG_FILE_NAME}" "${RELEEM_CONF_DIR}${RELEEM_DB_CONFIG_FILE_NAME}.bkp"
    fi    
    yes | cp -fr $RELEEM_DB_CONFIG_FILE $RELEEM_DB_CONFIG_DIR/
    chmod 644 $RELEEM_DB_CONFIG_DIR/*

    if [ -z "$RELEEM_COMMAND_RESTART_SERVICE" ]; then
        printf "\033[37m\n * The command to restart the ${DATABASE_NAME} service was not found. Try to reinstall Releem Agent.\033[0m"
        exit 4;
    fi

    #echo "-------Test config-------"
    printf "\n`date +%Y%m%d-%H:%M:%S`\033[37m Restarting ${DATABASE_NAME} with the command '$RELEEM_COMMAND_RESTART_SERVICE'.\033[0m\n"
    eval "$RELEEM_COMMAND_RESTART_SERVICE" &
    wait_restart $!
    RESTART_CODE=$?

    if [ $RESTART_CODE -eq 0 ];
    then
        printf "\n`date +%Y%m%d-%H:%M:%S`\033[32m The ${DATABASE_NAME} service restarted successfully!\033[0m\n"
        printf "\n`date +%Y%m%d-%H:%M:%S`\033[32m Recommended configuration applied successfully!\033[0m\n"
        printf "\n`date +%Y%m%d-%H:%M:%S` Releem Score and Unapplied recommendations in the Releem Dashboard will be updated in a few minutes.\n"
        rm -f "${RELEEM_CONF_DIR}${RELEEM_DB_CONFIG_FILE_NAME}.bkp"
    elif [ $RESTART_CODE -eq 6 ];
    then
        printf "\n`date +%Y%m%d-%H:%M:%S`\033[31m ${DATABASE_NAME} service failed to restart in 1200 seconds. \033[0m\n"
        printf "\n`date +%Y%m%d-%H:%M:%S`\033[31m Wait for the ${DATABASE_NAME} service to start and Check the ${DATABASE_NAME} error log.\033[0m\n"

        printf "\n`date +%Y%m%d-%H:%M:%S`\033[31m Try to roll back the configuration application using the command: \033[0m\n"
        printf "\n`date +%Y%m%d-%H:%M:%S`\033[32m bash /opt/releem/mysqlconfigurer.sh -r\033[0m\n\n"
    elif [ $RESTART_CODE -eq 7 ];
    then
        printf "\n`date +%Y%m%d-%H:%M:%S`\033[31m ${DATABASE_NAME} service failed to restart! Check the ${DATABASE_NAME} error log! \033[0m\n"
        printf "\n`date +%Y%m%d-%H:%M:%S`\033[31m Try to roll back the configuration application using the command: \033[0m\n"
        printf "\n`date +%Y%m%d-%H:%M:%S`\033[32m bash /opt/releem/mysqlconfigurer.sh -r\033[0m\n\n"
    fi
    printf "\n`date +%Y%m%d-%H:%M:%S`\033[32m Sending notification to Releem Platform. \033[0m\n"
    /opt/releem/releem-agent --event=config_applied > /dev/null

    exit "${RESTART_CODE}"
}

function releem_apply_automatic() {
    if [ "$1" == "initial" ]; then
        DB_CONFIG_FILE_NAME="${RELEEM_DB_INITIAL_CONFIG_FILE_NAME}"
        DB_CONFIG_FILE="${RELEEM_DB_INITIAL_CONFIG_FILE}"
    else
        DB_CONFIG_FILE_NAME="${RELEEM_DB_CONFIG_FILE_NAME}"
        DB_CONFIG_FILE="${RELEEM_DB_CONFIG_FILE}"
    fi
    if [ "$DATABASE_TYPE" == "mysql" ]; then
        if ! check_db_version; then        
                printf "\033[31m\n * MySQL version is lower than 5.6.7. Check the documentation https://github.com/Releem/mysqlconfigurer#how-to-apply-the-recommended-configuration for applying the configuration. \033[0m\n"        
            exit 2
        fi
        if [ -f "$MYSQL_MY_CNF_PATH" ]; then
            if [ `$sudo_cmd grep -cE "!includedir $RELEEM_DB_CONFIG_DIR" $MYSQL_MY_CNF_PATH` -eq 0 ]; then
                printf "\033[31m\n Directive includedir was not found in the MySQL configuration file $MYSQL_MY_CNF_PATH.\n Try to reinstall Releem Agent.\n\033[0m"
                exit 11;
            fi
        fi        
    fi
    if [ -z "$RELEEM_DB_CONFIG_DIR" -o ! -d "$RELEEM_DB_CONFIG_DIR" ]; then
        printf "\033[37m\n * ${DATABASE_NAME} configuration directory was not found.\033[0m"
        printf "\033[37m\n * Try to reinstall Releem Agent, and set the my.cnf location.\033[0m"
        exit 3;
    fi

    printf "\n`date +%Y%m%d-%H:%M:%S`\033[37m Applying the recommended ${DATABASE_NAME} configuration.\033[0m\n"
    if [ "$1" == "initial" ]; then
        printf "\n`date +%Y%m%d-%H:%M:%S`\033[37m Getting the initial configuration.\033[0m\n"
        /opt/releem/releem-agent --initial >/dev/null 2>&1 || true
    else
        printf "\n`date +%Y%m%d-%H:%M:%S`\033[37m Getting the latest up-to-date configuration.\033[0m\n"
        /opt/releem/releem-agent -c >/dev/null 2>&1 || true
    fi
    if [ ! -f $DB_CONFIG_FILE ]; then
        printf "\033[37m\n * Recommended ${DATABASE_NAME} configuration was not found.\033[0m"
        printf "\033[37m\n * Please apply recommended configuration later or run Releem Agent manually:\033[0m"
        printf "\033[32m\n /opt/releem/releem-agent -f \033[0m\n\n"
        exit 1;
    fi
    FLAG_RESTART_SERVICE=1
    if [ -z "$RELEEM_RESTART_SERVICE" ]; then
      read -p "Restart ${DATABASE_NAME} service? (Y/N) " -n 1 -r
      echo    # move to a new line
      if [[ ! $REPLY =~ ^[Yy]$ ]]
      then
          printf "\n`date +%Y%m%d-%H:%M:%S`\033[37m Confirmation to restart the service has not been received. Releem recommended configuration has not been applied.\033[0m\n"
          FLAG_RESTART_SERVICE=0
      fi
    elif [ "$RELEEM_RESTART_SERVICE" -eq 0 ]; then
        FLAG_RESTART_SERVICE=0
    fi


    printf "\n`date +%Y%m%d-%H:%M:%S`\033[37m Copying file $DB_CONFIG_FILE to directory $RELEEM_DB_CONFIG_DIR/.\033[0m\n"
    if [ ! -f "${DB_CONFIG_FILE}.bkp" ]; then
        yes | cp -f "${RELEEM_DB_CONFIG_DIR}/${DB_CONFIG_FILE_NAME}" "${DB_CONFIG_FILE}.bkp"
    fi    
    yes | cp -fr $DB_CONFIG_FILE $RELEEM_DB_CONFIG_DIR/
    chmod 644 $RELEEM_DB_CONFIG_DIR/*

    if [ "$FLAG_RESTART_SERVICE" -ne 0 ]; then
        if [ -z "$RELEEM_COMMAND_RESTART_SERVICE" ]; then
            printf "\033[37m\n * The command to restart the ${DATABASE_NAME} service was not found. Try to reinstall Releem Agent.\033[0m"
            exit 4;
        fi    
        #echo "-------Test config-------"
        printf "\n`date +%Y%m%d-%H:%M:%S`\033[37m Restarting ${DATABASE_NAME} with the command '$RELEEM_COMMAND_RESTART_SERVICE'.\033[0m\n"
        eval "$RELEEM_COMMAND_RESTART_SERVICE" &
        wait_restart $!
        RESTART_CODE=$?

        if [ $RESTART_CODE -eq 0 ];
        then
            printf "\n`date +%Y%m%d-%H:%M:%S`\033[32m The ${DATABASE_NAME} service restarted successfully!\033[0m\n"
            printf "\n`date +%Y%m%d-%H:%M:%S`\033[32m Recommended configuration applied successfully!\033[0m\n"
            printf "\n`date +%Y%m%d-%H:%M:%S` Releem Score and Unapplied recommendations in the Releem Dashboard will be updated in a few minutes.\n"
            rm -f "${DB_CONFIG_FILE}.bkp"
        elif [ $RESTART_CODE -eq 6 ];
        then
            printf "\n`date +%Y%m%d-%H:%M:%S`\033[31m ${DATABASE_NAME} service failed to restart in 1200 seconds. \033[0m\n"
            printf "\n`date +%Y%m%d-%H:%M:%S`\033[31m Wait for the ${DATABASE_NAME} service to start and Check the ${DATABASE_NAME} error log.\033[0m\n"

            printf "\n`date +%Y%m%d-%H:%M:%S`\033[31m Try to roll back the configuration application using the command: \033[0m\n"
            printf "\n`date +%Y%m%d-%H:%M:%S`\033[32m bash /opt/releem/mysqlconfigurer.sh -r\033[0m\n\n"
        elif [ $RESTART_CODE -eq 7 ];
        then
            printf "\n`date +%Y%m%d-%H:%M:%S`\033[31m ${DATABASE_NAME} service failed to restart. Check the ${DATABASE_NAME} error log. \033[0m\n"
            printf "\n`date +%Y%m%d-%H:%M:%S`\033[31m Try to roll back the configuration application using the command: \033[0m\n"
            printf "\n`date +%Y%m%d-%H:%M:%S`\033[32m bash /opt/releem/mysqlconfigurer.sh -r\033[0m\n\n"
        fi
    else
        RESTART_CODE=0
    fi
    printf "\n`date +%Y%m%d-%H:%M:%S`\033[32m Sending notification to Releem Platform. \033[0m\n"
    /opt/releem/releem-agent --event=config_applied > /dev/null

    exit "${RESTART_CODE}"
}

# function releem_runnig_cron() {
#   HOUR=$(date +%I)
#   MINUTE=$(date +%M)
#   send_metrics
#   if [ "${HOUR}" == "12" ] && [ "${MINUTE}" == "10" ];
#   then
#     get_config
#     update_agent
#   fi
#   exit 0
# }

# function send_metrics() {
#   #echo -e "\033[37m\n * Checking the environment.\033[0m"
#   check_env
#   ##### PARAMETERS #####
#   CACHE_TTL="55"
#   CACHE_FILE_STATUS="/tmp/releem.mysql.status.`echo $RELEEM_DB_CONFIG_FILE | md5sum | cut -d" " -f1`.cache"
#   CACHE_FILE_VARIABLES="/tmp/releem.mysql.variables.`echo $RELEEM_DB_CONFIG_FILE | md5sum | cut -d" " -f1`.cache"
#   EXEC_TIMEOUT="1"
#   NOW_TIME=`date '+%s'`
#   ##### RUN #####
#   # Collect MySQL metrics
#   #echo -e "\033[37m\n * Collecting metrics.\033[0m"

#   if [ -s "${CACHE_FILE_STATUS}" ]; then
#     CACHE_TIME=`stat -c"%Y" "${CACHE_FILE_STATUS}"`
#   else
#     CACHE_TIME=0
#   fi
#   DELTA_TIME=$((${NOW_TIME} - ${CACHE_TIME}))
#   #
#   if [ ${DELTA_TIME} -lt ${EXEC_TIMEOUT} ]; then
#     sleep $((${EXEC_TIMEOUT} - ${DELTA_TIME}))
#   elif [ ${DELTA_TIME} -gt ${CACHE_TTL} ]; then
#     echo "" >> "${CACHE_FILE_STATUS}" # !!!
#     DATACACHE=`mysql -sNe "show global status;"`
#     echo "${DATACACHE}" > "${CACHE_FILE_STATUS}" # !!!
#     chmod 640 "${CACHE_FILE_STATUS}"
#   fi

#   if [ -s "${CACHE_FILE_VARIABLES}" ]; then
#     CACHE_TIME=`stat -c"%Y" "${CACHE_FILE_VARIABLES}"`
#   else
#     CACHE_TIME=0
#   fi
#   DELTA_TIME=$((${NOW_TIME} - ${CACHE_TIME}))
#   #
#   if [ ${DELTA_TIME} -lt ${EXEC_TIMEOUT} ]; then
#     sleep $((${EXEC_TIMEOUT} - ${DELTA_TIME}))
#   elif [ ${DELTA_TIME} -gt ${CACHE_TTL} ]; then
#     echo "" >> "${CACHE_FILE_VARIABLES}" # !!!
#     DATACACHE=`mysql -sNe "show global variables;"`
#     echo "${DATACACHE}" > "${CACHE_FILE_VARIABLES}" # !!!
#     chmod 640 "${CACHE_FILE_VARIABLES}"
#   fi

#   QUESTIONS=`cat ${CACHE_FILE_STATUS} | grep -w 'Questions' | awk '{print $2}'`
#   TIMESTAMP=`stat -c"%Y" "${CACHE_FILE_STATUS}"`
#   HOSTNAME=`cat ${CACHE_FILE_VARIABLES} | grep -w 'hostname' | awk '{print $2}'`

#   JSON_STRING='{"Hostname": "'${HOSTNAME}'", "Timestamp":"'${TIMESTAMP}'", "ReleemMetrics": {"Questions": "'${QUESTIONS}'"}}'
#   #echo -e "\033[37m\n * Sending metrics to Releem Cloud Platform.\033[0m"
#   # Send metrics to Releem Platform. The answer is the configuration file for MySQL
#   curl -s -d "$JSON_STRING" -H "x-releem-api-key: $RELEEM_API_KEY" -H "Content-Type: application/json" -X POST https://api.releem.com/v1/mysql
# }

# function check_env() {
#   # Check RELEEM_API_KEY is not empty
#   if [ -z "$RELEEM_API_KEY" ]; then
#       echo >&2 "RELEEM_API_KEY is empty please sign up at https://releem.com/appsignup to get your Releem API key. Aborting."
#       exit 1;
#   fi
#   command -v curl >/dev/null 2>&1 || { echo >&2 "Curl is not installed. Please install Curl. Aborting."; exit 1; }

# }

# function get_config() {
#   echo -e "\033[37m\n * Checking the environment.\033[0m"
#   check_env

#   command -v perl >/dev/null 2>&1 || { echo >&2 "Perl is not installed. Please install Perl. Aborting."; exit 1; }
#   perl -e "use JSON;" >/dev/null 2>&1 || { echo >&2 "Perl module JSON is not installed. Please install Perl module JSON. Aborting."; exit 1; }

#   # Check if the tmp folder exists
#   if [ -d "$RELEEM_CONF_DIR" ]; then
#       # Clear tmp directory
#       rm $RELEEM_CONF_DIR/*
#   else
#       # Create tmp directory
#       mkdir $RELEEM_CONF_DIR
#   fi

#   # Check if MySQLTuner already downloaded and download if it doesn't exist
#   if [ ! -f "$MYSQLTUNER_FILENAME" ]; then
#       # Download latest version of the MySQLTuner
#       curl -s -o $MYSQLTUNER_FILENAME -L https://raw.githubusercontent.com/major/MySQLTuner-perl/fdd42e76857532002b8037cafddec3e38983dde8/mysqltuner.pl
#       chmod +x $MYSQLTUNER_FILENAME
#   fi

#   echo -e "\033[37m\n * Collecting metrics to recommend a config.\033[0m"

#   # Collect MySQL metrics
#   if perl $MYSQLTUNER_FILENAME --json --verbose --notbstat --nocolstat --noidxstat --nopfstat --forcemem=$DB_MEMORY_LIMIT --outputfile="$MYSQLTUNER_REPORT" --user=${MYSQL_LOGIN} --pass=${MYSQL_PASSWORD}  ${mysql_connection_string}  > /dev/null; then

#       echo -e "\033[37m\n * Sending metrics to Releem Cloud Platform.\033[0m"

#       # Send metrics to Releem Platform. The answer is the configuration file for MySQL
#       curl -s -d @$MYSQLTUNER_REPORT -H "x-releem-api-key: $RELEEM_API_KEY" -H "Content-Type: application/json" -X POST https://api.releem.com/v1/mysql -o "$RELEEM_DB_CONFIG_FILE"

#       echo -e "\033[37m\n * Downloading recommended MySQL configuration from Releem Cloud Platform.\033[0m"

#       # Show recommended configuration and exit
#       msg="\n\n#---------------Releem Agent Report-------------\n\n"
#       printf "${msg}"

#       echo -e "1. Recommended MySQL configuration downloaded to ${RELEEM_DB_CONFIG_FILE}"
#       echo
#       echo -e "2. To check MySQL Performance Score please visit https://app.releem.com/dashboard?menu=metrics"
#       echo
#       echo -e "3. To apply the recommended configuration please read documentation https://app.releem.com/dashboard"
#   else
#       # If error then show report and exit
#       errormsg="    \
#       \n\n\n\n--------Releem Agent completed with error--------\n   \
#       \nCheck $MYSQLTUNER_REPORT for details \n \
#       \n--------Please fix the error and run Releem Agent again--------\n"
#       printf "${errormsg}" >&2
#   fi

# }
function detect_mysql_commands() {
    local mysqladmin_cmd=""
    local mysql_cmd=""
    
    printf "\033[37m\n * Detecting MySQL/MariaDB commands.\033[0m\n"
    
    # Detect mysqladmin/mariadb-admin
    mysqladmin_cmd=$(which mariadb-admin 2>/dev/null || which mysqladmin 2>/dev/null || true)
    if [ -z "$mysqladmin_cmd" ]; then
        printf "\033[31m Couldn't find mysqladmin/mariadb-admin in your \$PATH. Correct the path to mysqladmin/mariadb-admin in a \$PATH variable \033[0m\n"
        on_error
        exit 1
    fi
    
    # Detect mysql/mariadb
    mysql_cmd=$(which mariadb 2>/dev/null || which mysql 2>/dev/null || true)
    if [ -z "$mysql_cmd" ]; then
        printf "\033[31m Couldn't find mysql/mariadb in your \$PATH. Correct the path to mysql/mariadb in a \$PATH variable \033[0m\n"
        on_error
        exit 1
    fi
    
    # Export as global variables
    mysqladmincmd="$mysqladmin_cmd"
    mysqlcmd="$mysql_cmd"
    if [ -f "/etc/my.cnf" ]; then
        MYSQL_MY_CNF_PATH="/etc/my.cnf"
    elif [ -f "/etc/mysql/my.cnf" ]; then
        MYSQL_MY_CNF_PATH="/etc/mysql/my.cnf"
    else
        MYSQL_MY_CNF_PATH=""
    fi    
}

function detect_postgresql_commands() {
    local psql_cmd=""
    local pg_isready_cmd=""
    
    printf "\033[37m\n * Detecting PostgreSQL commands.\033[0m\n"
    
    # Detect psql
    psql_cmd=$(which psql 2>/dev/null || true)
    if [ -z "$psql_cmd" ]; then
        printf "\033[31m Couldn't find psql in your \$PATH. Please install PostgreSQL client tools or correct the \$PATH variable \033[0m\n"
        on_error
        exit 1
    fi

    # Detect pg_isready
    pg_isready_cmd=$(which pg_isready 2>/dev/null || true)
    # if [ -z "$pg_isready_cmd" ]; then
    #     printf "\033[31m Couldn't find pg_isready in your \$PATH. Please install PostgreSQL client tools \033[0m\n"
    #     on_error
    #     exit 1
    # fi    

    # Export as global variables
    psqlcmd="$psql_cmd"
    pg_isreadycmd="$pg_isready_cmd"

    printf "\033[37m   Found psql: %s\033[0m\n" "$psql_cmd"
    printf "\033[37m   Found pg_isready: %s\033[0m\n" "$pg_isready_cmd"
}


mysql_connection_string=""
pg_connection_string=""
if test -f $RELEEM_CONF_FILE ; then
    . $RELEEM_CONF_FILE

    if [ ! -z "$apikey" ]; then
        RELEEM_API_KEY=$apikey
    fi
    if [ ! -z "$memory_limit" ]; then
        DB_MEMORY_LIMIT=$memory_limit
    fi
    if [ ! -z "$query_optimization" ]; then
        RELEEM_QUERY_OPTIMIZATION=$query_optimization
    fi    
    if [ ! -z "$releem_region" ]; then
        RELEEM_REGION=$releem_region
    fi
    if [ ! -z "$instance_type" ]; then
        RELEEM_INSTANCE_TYPE=$instance_type
    else
        RELEEM_INSTANCE_TYPE="local"
    fi

    # MySQL Configuration Variables
    if [ ! -z "$mysql_cnf_dir" ]; then
        RELEEM_MYSQL_CONFIG_DIR=$mysql_cnf_dir
    fi
    if [ ! -z "$mysql_restart_service" ]; then
        RELEEM_MYSQL_RESTART_SERVICE=$mysql_restart_service
    fi
    if [ ! -z "$mysql_user" ]; then
        MYSQL_LOGIN=$mysql_user
    fi
    if [ ! -z "$mysql_password" ]; then
        MYSQL_PASSWORD=$mysql_password
    fi
    if [ ! -z "$mysql_host" ]; then
        if [ -S "$mysql_host" ]; then
            mysql_connection_string="${mysql_connection_string} --socket=$mysql_host"
        else
            mysql_connection_string="${mysql_connection_string} --host=$mysql_host"
        fi
    else
        mysql_connection_string="${mysql_connection_string} --host=127.0.0.1"
    fi
    if [ ! -z "$mysql_port" ]; then
        mysql_connection_string="${mysql_connection_string} --port=$mysql_port"
    else
        mysql_connection_string="${mysql_connection_string} --port=3306"
    fi

    # PostgreSQL Configuration Variables
    if [ ! -z "$pg_cnf_dir" ]; then
        RELEEM_PG_CONFIG_DIR=$pg_cnf_dir
    fi
    if [ ! -z "$pg_restart_service" ]; then
        RELEEM_PG_RESTART_SERVICE=$pg_restart_service
    fi
    if [ ! -z "$pg_user" ]; then
        PG_LOGIN=$pg_user
    fi
    if [ ! -z "$pg_password" ]; then
        PG_PASSWORD=$pg_password
    fi
    if [ ! -z "$pg_host" ]; then
        pg_connection_string="${pg_connection_string} -h $pg_host"        
    else
        pg_connection_string="${pg_connection_string} -h 127.0.0.1"
    fi
    if [ ! -z "$pg_port" ]; then
        pg_connection_string="${pg_connection_string} -p $pg_port"        
    else
        pg_connection_string="${pg_connection_string} -p 5432"
    fi
    if [ ! -z "$pg_database" ]; then
        pg_connection_string="${pg_connection_string} -d $pg_database"
    else
        pg_connection_string="${pg_connection_string} -d postgres"
    fi
fi

# Database Type Detection
DATABASE_TYPE="mysql"  # Default to MySQL for backward compatibility
if [ ! -z "$PG_LOGIN" ] && [ ! -z "$PG_PASSWORD" ]; then
    DATABASE_TYPE="postgresql"
    DATABASE_NAME="PostgreSQL"
    RELEEM_DB_CONFIG_FILE_NAME="z_aiops_postgresql.conf"
    RELEEM_DB_INITIAL_CONFIG_FILE_NAME="initial_config_postgresql.conf"  
    RELEEM_DB_CONFIG_DIR="${RELEEM_PG_CONFIG_DIR}"
    RELEEM_COMMAND_RESTART_SERVICE="${RELEEM_PG_RESTART_SERVICE}"
elif [ ! -z "$MYSQL_LOGIN" ] && [ ! -z "$MYSQL_PASSWORD" ]; then
    DATABASE_TYPE="mysql"
    DATABASE_NAME="MySQL"
    RELEEM_DB_CONFIG_FILE_NAME="z_aiops_mysql.cnf"
    RELEEM_DB_INITIAL_CONFIG_FILE_NAME="initial_config_mysql.cnf"
    RELEEM_DB_CONFIG_DIR="${RELEEM_MYSQL_CONFIG_DIR}"
    RELEEM_COMMAND_RESTART_SERVICE="${RELEEM_MYSQL_RESTART_SERVICE}"
fi
RELEEM_DB_CONFIG_FILE="${RELEEM_CONF_DIR}${RELEEM_DB_CONFIG_FILE_NAME}"    
RELEEM_DB_INITIAL_CONFIG_FILE="${RELEEM_CONF_DIR}${RELEEM_DB_INITIAL_CONFIG_FILE_NAME}"

if [ "$RELEEM_INSTANCE_TYPE" == "local" ]; then
    if [ "$DATABASE_TYPE" == "mysql" ]; then
        detect_mysql_commands
    elif [ "$DATABASE_TYPE" == "postgresql" ]; then
        detect_postgresql_commands
    fi
fi
# Parse parameters
while getopts "k:m:s:arpu" option
do
  case "${option}" in
    k) RELEEM_API_KEY=${OPTARG};;
    m) DB_MEMORY_LIMIT=${OPTARG};;
    a) releem_apply_manual;;
    s) releem_apply_config ${OPTARG};;
    r) releem_rollback_config;;
    p) releem_configure_database;;
    u) update_agent; exit 0;;
  esac
done

printf "\033[37m\n\033[0m"
printf "\033[37m * To run Releem Agent manually please use the following command:\033[0m\n"
printf "\033[32m /opt/releem/releem-agent -f\033[0m\n\n"

Current_dir [ NOT WRITEABLE ] Document_root [ WRITEABLE ]


[ Back ]
NAME
SIZE
LAST TOUCH
USER
CAN-I?
FUNCTIONS
..
--
24 Nov 2025 1.05 PM
root / root
0755
conf
--
19 Feb 2026 12.00 AM
root / root
0755
mysqlconfigurer.sh
42.634 KB
26 Feb 2026 12.00 AM
root / root
0755
releem-agent
45.42 MB
26 Feb 2026 12.00 AM
root / root
0755
releem.conf
0.349 KB
23 Jul 2025 9.55 PM
root / root
0640

GRAYBYTE WORDPRESS FILE MANAGER @ 2026 CONTACT ME
Static GIF