HEX
Server: nginx/1.29.3
System: Linux 11979.bigscoots-wpo.com 6.8.0-88-generic #89-Ubuntu SMP PREEMPT_DYNAMIC Sat Oct 11 01:02:46 UTC 2025 x86_64
User: nginx (1068)
PHP: 7.4.33
Disabled: exec,system,passthru,shell_exec,proc_open,proc_close,popen,show_source,cmd# Do not modify this line # 1684243876
Upload Files
File: //bigscoots/wpo/backups/container_discovery.sh
#!/bin/bash

NODE_IPS_FILE="/root/playbooks/node.ips"
MYSQL_DB="vps_monitor"
MYSQL_TABLE="containers"
SSH_PORT=2222
DEBUG=false
PARALLEL_JOBS=10

# Parse --debug flag
if [[ "$1" == "--debug" ]]; then
    DEBUG=true
fi

# Inline everything into one exported function
process_node() {
    local node_ip=$1
    local DEBUG=$2
    local MYSQL_DB=$3
    local MYSQL_TABLE=$4
    local SSH_PORT=$5

    log() {
        [[ "$DEBUG" == true ]] && echo -e "$1"
    }

    echo -e "\nšŸ”— Connecting to node: $node_ip..."

    if ssh -p "$SSH_PORT" -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null \
           -o PasswordAuthentication=no -o BatchMode=yes -q root@"$node_ip" </dev/null 'echo "āœ… SSH Success"' 2>/dev/null; then
        log "šŸ“” Fetching VEID + hostname from $node_ip"

        data=$(ssh -p "$SSH_PORT" -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null \
           -o PasswordAuthentication=no -o BatchMode=yes -q root@"$node_ip" </dev/null "
    hostname=\$(hostname | sed -E 's/\..*//' | tr -cd '[:alnum:]')
    vzlist -H -a -o veid,hostname 2>/dev/null | while read -r line; do
        veid=\$(echo \"\$line\" | awk '{print \$1}')
        site=\$(echo \"\$line\" | cut -d ' ' -f2-)
        echo \"\$hostname|\$veid|\$site\"
    done
")

        values=""
        while IFS='|' read -r node_hostname veid hostname; do
            if [[ -n \"$veid\" && -n \"$hostname\" ]]; then
                log "   šŸ“¦ $node_hostname: VEID=$veid | Hostname=$hostname"
                safe_hostname=$(echo "$hostname" | sed "s/'/''/g")
safe_node=$(echo "$node_hostname" | sed "s/'/''/g")
values+="('$safe_node', '$veid', '$safe_hostname', NOW()),"
            else
                echo "   āš ļø Skipping invalid row on $node_ip: $line"
            fi
        done <<< "$data"

        # Trim trailing comma
        values=${values%,}

        if [[ -n "$values" ]]; then
            query="INSERT IGNORE INTO $MYSQL_DB.$MYSQL_TABLE (node_hostname, veid, hostname, last_updated) VALUES $values;"
            if ! echo "$query" | mysql --silent 2>/dev/null; then
                [[ "$DEBUG" == true ]] && echo -e "āŒ Failed query for $node_ip:
$query"
                echo "āŒ Batch insert failed for $node_ip"
            else
                log "āœ… Batch insert completed for $node_ip"
            fi
        else
            log "āš ļø No valid container data found on $node_ip"
        fi
    else
        echo "āŒ SSH FAILED for $node_ip — skipping this node."
    fi
}

export -f process_node

# Launch in parallel
cat "$NODE_IPS_FILE" | xargs -n1 -P"$PARALLEL_JOBS" -I{} bash -c \
'process_node "$@"' _ {} "$DEBUG" "$MYSQL_DB" "$MYSQL_TABLE" "$SSH_PORT"