160 lines
5.0 KiB
Python
160 lines
5.0 KiB
Python
"""
|
|
Script pentru trimiterea notificărilor cu fișiere existente
|
|
Trimite ultimele fișiere CSV generate pe Email și Telegram
|
|
"""
|
|
import logging
|
|
import sys
|
|
from pathlib import Path
|
|
from datetime import datetime
|
|
from config import Config
|
|
from notifications import NotificationService
|
|
|
|
# Setup logging
|
|
logging.basicConfig(
|
|
level=logging.INFO,
|
|
format='%(asctime)s - %(levelname)s - %(message)s',
|
|
handlers=[
|
|
logging.StreamHandler(sys.stdout)
|
|
]
|
|
)
|
|
|
|
|
|
def find_latest_files(data_dir='./data', time_window_seconds=300):
|
|
"""
|
|
Găsește ultimele fișiere CSV generate
|
|
|
|
Args:
|
|
data_dir: Directorul cu fișiere
|
|
time_window_seconds: Intervalul de timp (în secunde) pentru a considera fișierele din aceeași sesiune
|
|
|
|
Returns:
|
|
tuple: (solduri_csv_path, list_of_transaction_csvs)
|
|
"""
|
|
data_path = Path(data_dir)
|
|
|
|
if not data_path.exists():
|
|
logging.error(f"Directorul {data_dir} nu există!")
|
|
return None, []
|
|
|
|
# Găsește ultimul fișier solduri_*.csv
|
|
solduri_files = sorted(data_path.glob('solduri_*.csv'), key=lambda x: x.stat().st_mtime, reverse=True)
|
|
|
|
if not solduri_files:
|
|
logging.error("Nu s-a găsit niciun fișier solduri_*.csv!")
|
|
return None, []
|
|
|
|
latest_solduri = solduri_files[0]
|
|
solduri_time = latest_solduri.stat().st_mtime
|
|
|
|
logging.info(f"✓ Găsit fișier solduri: {latest_solduri.name}")
|
|
logging.info(f" Timestamp: {datetime.fromtimestamp(solduri_time).strftime('%Y-%m-%d %H:%M:%S')}")
|
|
|
|
# Găsește toate fișierele tranzactii_*.csv modificate în ultimele X secunde față de solduri
|
|
all_transaction_files = list(data_path.glob('tranzactii_*.csv'))
|
|
transaction_files = []
|
|
|
|
for tf in all_transaction_files:
|
|
tf_time = tf.stat().st_mtime
|
|
time_diff = abs(tf_time - solduri_time)
|
|
|
|
# Dacă fișierul tranzacții este din aceeași sesiune (în intervalul de timp)
|
|
if time_diff <= time_window_seconds:
|
|
transaction_files.append(tf)
|
|
logging.info(f" ✓ {tf.name} (diferență: {int(time_diff)}s)")
|
|
|
|
# Sortează după timp
|
|
transaction_files = sorted(transaction_files, key=lambda x: x.stat().st_mtime)
|
|
|
|
logging.info(f"✓ Găsite {len(transaction_files)} fișiere tranzacții din aceeași sesiune")
|
|
|
|
return latest_solduri, transaction_files
|
|
|
|
|
|
def send_existing_files():
|
|
"""Trimite fișierele existente pe Email și Telegram"""
|
|
try:
|
|
logging.info("=" * 60)
|
|
logging.info("TRIMITERE NOTIFICĂRI CU FIȘIERE EXISTENTE")
|
|
logging.info("=" * 60)
|
|
|
|
# Validează configurația
|
|
Config.validate()
|
|
|
|
if not Config.ENABLE_NOTIFICATIONS:
|
|
logging.error("ENABLE_NOTIFICATIONS=false în .env!")
|
|
logging.error("Setează ENABLE_NOTIFICATIONS=true pentru a trimite notificări")
|
|
return False
|
|
|
|
# Găsește ultimele fișiere
|
|
solduri_csv, transaction_csvs = find_latest_files(Config.OUTPUT_DIR)
|
|
|
|
if not solduri_csv:
|
|
logging.error("Nu există fișiere de trimis!")
|
|
return False
|
|
|
|
# Pregătește lista de fișiere
|
|
files_to_send = [str(solduri_csv)]
|
|
for tf in transaction_csvs:
|
|
files_to_send.append(str(tf))
|
|
|
|
logging.info("=" * 60)
|
|
logging.info(f"Total fișiere de trimis: {len(files_to_send)}")
|
|
logging.info("=" * 60)
|
|
|
|
# Estimează numărul de conturi din numărul de fișiere tranzacții
|
|
account_count = len(transaction_csvs)
|
|
|
|
# Trimite notificările
|
|
service = NotificationService(Config)
|
|
results = service.send_all(files_to_send, account_count)
|
|
|
|
# Afișează rezumat
|
|
logging.info("=" * 60)
|
|
logging.info("REZUMAT NOTIFICĂRI")
|
|
logging.info("=" * 60)
|
|
|
|
if Config.EMAIL_ENABLED:
|
|
status = "✓ Succes" if results['email'] else "✗ Eșuat"
|
|
logging.info(f"Email: {status}")
|
|
else:
|
|
logging.info("Email: Dezactivat")
|
|
|
|
if Config.TELEGRAM_ENABLED:
|
|
status = "✓ Succes" if results['telegram'] else "✗ Eșuat"
|
|
logging.info(f"Telegram: {status}")
|
|
else:
|
|
logging.info("Telegram: Dezactivat")
|
|
|
|
logging.info("=" * 60)
|
|
|
|
# Verifică dacă cel puțin un canal a avut succes
|
|
success = any(results.values())
|
|
|
|
if success:
|
|
logging.info("✓ Notificări trimise cu succes!")
|
|
else:
|
|
logging.warning("Notificările au eșuat. Verifică configurația în .env")
|
|
|
|
return success
|
|
|
|
except ValueError as e:
|
|
logging.error(f"Eroare configurație: {e}")
|
|
logging.error("Verifică setările din .env")
|
|
return False
|
|
except Exception as e:
|
|
logging.error(f"Eroare neașteptată: {e}", exc_info=True)
|
|
return False
|
|
|
|
|
|
if __name__ == "__main__":
|
|
logging.info("")
|
|
logging.info("🔔 BTGO Scraper - Trimitere Notificări")
|
|
logging.info("")
|
|
|
|
success = send_existing_files()
|
|
|
|
if success:
|
|
sys.exit(0)
|
|
else:
|
|
sys.exit(1)
|