hue-portal-backend / test_cloudflare_tunnel.py
Davidtran99
chore: sync with main repo
3718c84
#!/usr/bin/env python3
"""
Script để test Cloudflare Tunnel URL và kiểm tra dữ liệu PostgreSQL
"""
import sys
import psycopg2
from pathlib import Path
# Colors
GREEN = '\033[0;32m'
YELLOW = '\033[1;33m'
RED = '\033[0;31m'
BLUE = '\033[0;34m'
NC = '\033[0m' # No Color
def log(msg):
print(f"{BLUE}[TEST]{NC} {msg}")
def success(msg):
print(f"{GREEN}{NC} {msg}")
def warn(msg):
print(f"{YELLOW}⚠️{NC} {msg}")
def error(msg):
print(f"{RED}{NC} {msg}")
def test_connection(host, port, database, user, password):
"""Test kết nối PostgreSQL"""
log(f"Đang test kết nối: {host}:{port}/{database}")
try:
conn = psycopg2.connect(
host=host,
port=port,
database=database,
user=user,
password=password,
connect_timeout=10
)
success("Kết nối thành công!")
cursor = conn.cursor()
# Test 1: PostgreSQL version
cursor.execute("SELECT version();")
version = cursor.fetchone()[0]
log(f"PostgreSQL version: {version[:50]}...")
# Test 2: Kiểm tra database
cursor.execute("SELECT current_database();")
db_name = cursor.fetchone()[0]
success(f"Đang kết nối database: {db_name}")
# Test 3: Kiểm tra số lượng tables
cursor.execute("""
SELECT COUNT(*)
FROM information_schema.tables
WHERE table_schema = 'public'
""")
table_count = cursor.fetchone()[0]
success(f"Số lượng tables: {table_count}")
# Test 4: Kiểm tra dữ liệu trong các bảng chính
tables_to_check = [
'core_legaldocument',
'core_fine',
'core_procedure',
'core_office',
'core_advisory',
]
print(f"\n{BLUE}📊 Kiểm tra dữ liệu:{NC}")
print("=" * 60)
total_docs = 0
for table in tables_to_check:
try:
cursor.execute(f"SELECT COUNT(*) FROM {table};")
count = cursor.fetchone()[0]
total_docs += count
if count > 0:
success(f"{table}: {count:,} records")
else:
warn(f"{table}: 0 records (trống)")
except Exception as e:
error(f"{table}: Lỗi - {e}")
print("=" * 60)
success(f"Tổng số documents: {total_docs:,}")
# Test 5: Kiểm tra một vài records mẫu
if total_docs > 0:
print(f"\n{BLUE}📄 Sample records:{NC}")
try:
cursor.execute("""
SELECT id, title, created_at
FROM core_legaldocument
ORDER BY created_at DESC
LIMIT 5
""")
records = cursor.fetchall()
for idx, (doc_id, title, created_at) in enumerate(records, 1):
title_short = (title[:50] + "...") if title and len(title) > 50 else (title or "N/A")
print(f" {idx}. [{doc_id}] {title_short}")
print(f" Created: {created_at}")
except Exception as e:
warn(f"Không thể lấy sample records: {e}")
cursor.close()
conn.close()
return True, total_docs
except psycopg2.OperationalError as e:
error(f"Lỗi kết nối: {e}")
return False, 0
except Exception as e:
error(f"Lỗi: {e}")
return False, 0
def main():
print(f"{BLUE}{'='*60}{NC}")
print(f"{BLUE}Test Cloudflare Tunnel và kiểm tra dữ liệu PostgreSQL{NC}")
print(f"{BLUE}{'='*60}{NC}\n")
# Lấy thông tin từ user
print("Nhập thông tin Cloudflare Tunnel:")
tunnel_host = input(" Host (ví dụ: xyz.trycloudflare.com hoặc xyz.cfargotunnel.com): ").strip()
tunnel_port = input(" Port (ví dụ: 5432): ").strip() or "5432"
# Database credentials
db_user = input(" Database user (mặc định: hue_remote): ").strip() or "hue_remote"
db_password = input(" Database password (mặc định: huepass123): ").strip() or "huepass123"
db_name = input(" Database name (mặc định: hue_portal): ").strip() or "hue_portal"
print(f"\n{BLUE}🔍 Đang test kết nối...{NC}\n")
# Test connection
success_conn, doc_count = test_connection(
tunnel_host,
int(tunnel_port),
db_name,
db_user,
db_password
)
if success_conn:
print(f"\n{BLUE}{'='*60}{NC}")
success("KẾT NỐI THÀNH CÔNG!")
if doc_count > 0:
success(f"Có {doc_count:,} documents trong database")
print(f"\n{BLUE}📝 DATABASE_URL để dùng:{NC}")
print(f"postgres://{db_user}:{db_password}@{tunnel_host}:{tunnel_port}/{db_name}")
else:
warn("Database trống, chưa có dữ liệu")
print(f"{BLUE}{'='*60}{NC}")
else:
print(f"\n{BLUE}{'='*60}{NC}")
error("KHÔNG KẾT NỐI ĐƯỢC!")
print(f"\n{BLUE}💡 Kiểm tra:{NC}")
print(" 1. Cloudflare Tunnel URL có đúng không?")
print(" 2. Tunnel có đang chạy trên server không?")
print(" 3. PostgreSQL có đang chạy không?")
print(" 4. Firewall có block port không?")
print(f"{BLUE}{'='*60}{NC}")
sys.exit(1)
if __name__ == "__main__":
main()