#!/usr/bin/env python3 """ Мониторинг восстановления базы данных """ from urllib.parse import unquote import psycopg2 import time from datetime import datetime DB_CONFIG = { 'host': "147.45.189.234", 'database': "default_db", 'user': "gen_user", 'password': unquote("2~~9_%5EkVsU%3F2%5CS"), 'connect_timeout': 5 } def check_db(): """Проверить состояние БД""" try: conn = psycopg2.connect(**DB_CONFIG) cur = conn.cursor() # Проверим базовые таблицы cur.execute('SELECT COUNT(*) FROM hotel_main') hotels = cur.fetchone()[0] cur.execute('SELECT COUNT(*) FROM hotel_main WHERE region_name = %s', ('Чукотский автономный округ',)) chukotka = cur.fetchone()[0] cur.execute(''' SELECT COUNT(DISTINCT h.id) as total, COUNT(DISTINCT p.hotel_id) as processed FROM hotel_main h LEFT JOIN hotel_website_processed p ON p.hotel_id = h.id WHERE h.region_name = 'г. Санкт-Петербург' AND h.website_address IS NOT NULL AND h.website_address != '' AND h.website_address != 'Нет' ''') spb_total, spb_processed = cur.fetchone() cur.close() conn.close() return { 'status': 'OK', 'hotels_total': hotels, 'chukotka_hotels': chukotka, 'spb_total': spb_total, 'spb_processed': spb_processed, 'spb_percent': spb_processed/spb_total*100 if spb_total > 0 else 0 } except Exception as e: return {'status': 'ERROR', 'error': str(e)} def main(): """Мониторинг восстановления""" print("🔍 МОНИТОРИНГ ВОССТАНОВЛЕНИЯ БД") print("=" * 50) start_time = datetime.now() while True: current_time = datetime.now() elapsed = (current_time - start_time).total_seconds() result = check_db() if result['status'] == 'OK': print(f"🎉 БД ВОССТАНОВЛЕНА! Время восстановления: {elapsed/60:.1f} мин") print(f"📊 Статистика:") print(f" Всего отелей: {result['hotels_total']}") print(f" Чукотка: {result['chukotka_hotels']} отелей") print(f" СПб: {result['spb_processed']}/{result['spb_total']} ({result['spb_percent']:.1f}%)") break else: print(f"[{current_time.strftime('%H:%M:%S')}] ❌ БД недоступна: {result['error']}") time.sleep(30) # Проверяем каждые 30 секунд if __name__ == "__main__": main()