91 lines
2.9 KiB
Python
91 lines
2.9 KiB
Python
#!/usr/bin/env python3
|
|
"""Retry stalled Pink Pulse + Supabase tasks with tight timeouts."""
|
|
import paramiko
|
|
import sys
|
|
|
|
COOLIFY = ("10.10.0.10", "localadministrator", "Bbt9115xty9176!")
|
|
SUPABASE = ("10.10.0.11", "localadministrator", "Bbt9115xty9176!")
|
|
MIGRATION_LOCAL = r"C:\Users\Local Administrator\exposedgays\supabase\migration_pulse_analytics.sql"
|
|
|
|
|
|
def run(host, user, password, cmd, timeout=45):
|
|
c = paramiko.SSHClient()
|
|
c.set_missing_host_key_policy(paramiko.AutoAddPolicy())
|
|
c.connect(host, username=user, password=password, timeout=15, allow_agent=False, look_for_keys=False)
|
|
try:
|
|
print(f"\n=== {host}: {cmd[:120]} ===")
|
|
_, o, e = c.exec_command(cmd, timeout=timeout)
|
|
code = o.channel.recv_exit_status()
|
|
out = (o.read() + e.read()).decode(errors="replace")
|
|
print(out[:8000] if out else "(no output)")
|
|
print(f"exit {code}")
|
|
return code, out
|
|
finally:
|
|
c.close()
|
|
|
|
|
|
def scp_file(host, user, password, local_path, remote_path, timeout=60):
|
|
c = paramiko.SSHClient()
|
|
c.set_missing_host_key_policy(paramiko.AutoAddPolicy())
|
|
c.connect(host, username=user, password=password, timeout=15, allow_agent=False, look_for_keys=False)
|
|
try:
|
|
print(f"\n=== SCP {local_path} -> {host}:{remote_path} ===")
|
|
sftp = c.open_sftp()
|
|
sftp.put(local_path, remote_path)
|
|
sftp.close()
|
|
print("SCP ok")
|
|
return 0
|
|
finally:
|
|
c.close()
|
|
|
|
|
|
def main():
|
|
h, u, p = COOLIFY
|
|
errors = 0
|
|
|
|
# 1. Pink Pulse ads dir
|
|
code, _ = run(h, u, p,
|
|
"test -d /home/localadministrator/thepinkpulse && "
|
|
"ls /home/localadministrator/thepinkpulse/src/components/ads/ 2>/dev/null | head -10 || "
|
|
"echo 'ads dir missing or empty'"
|
|
)
|
|
if code != 0:
|
|
errors += 1
|
|
|
|
# 2. Pink Pulse advertising grep
|
|
code, _ = run(h, u, p,
|
|
"grep -rn 'advertis\\|Advertise\\|popup' "
|
|
"/home/localadministrator/thepinkpulse/src/components --include='*.tsx' 2>/dev/null | head -40 || "
|
|
"echo 'no matches'"
|
|
)
|
|
if code != 0:
|
|
errors += 1
|
|
|
|
# 3. ExposedGays health
|
|
code, _ = run(h, u, p, "curl -sS --max-time 10 https://exposedgays.com/ 2>&1 | head -c 300")
|
|
if code != 0:
|
|
errors += 1
|
|
|
|
# 4. Supabase migration
|
|
sh, su, sp = SUPABASE
|
|
try:
|
|
scp_file(sh, su, sp, MIGRATION_LOCAL, "/tmp/migration_pulse_analytics.sql")
|
|
except Exception as ex:
|
|
print(f"SCP failed: {ex}")
|
|
errors += 1
|
|
else:
|
|
code, out = run(
|
|
sh, su, sp,
|
|
"cat /tmp/migration_pulse_analytics.sql | "
|
|
"docker exec -i supabase-db psql -U postgres -d postgres 2>&1 | tail -40",
|
|
timeout=90,
|
|
)
|
|
if code != 0 and "already exists" not in out.lower():
|
|
errors += 1
|
|
|
|
print(f"\n=== DONE ({errors} issues) ===")
|
|
sys.exit(1 if errors else 0)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main() |