#!/usr/bin/env python3 """ Script para testar transform + load com dados mockados Ruijie e WiFeed. Não precisa de API externas, testa apenas a lógica de transformação e persistência. """ import sys import psycopg2 from datetime import datetime, timezone from app.core.config import DB_HOST, DB_PORT, DB_NAME, DB_USER, DB_PASSWORD from app.transform.merge_mac import transform_ruijie, transform_wifeed from app.load.load_database import load print("=" * 80) print("TEST: Transform + Load") print("=" * 80) # Dados mock Ruijie (sessões) mock_ruijie_records = [ { "mac": "AA:BB:CC:DD:EE:FF", "deviceAliasName": "AP-01", "buildingName": "Prédio A", "band": "5GHz", "channel": 36, "rssiInt": -45, "userIp": "192.168.1.100", "wifiUp": 1000000, "wifiDown": 5000000, "wifiUpDown": 6000000, "sn": "SN001", "onlineTime": 1640000000000, # epoch ms "offlineTime": 1640001000000, # epoch ms "activeTime": 500000, }, { "mac": "11:22:33:44:55:66", "deviceAliasName": "AP-02", "buildingName": "Prédio B", "band": "2.4GHz", "channel": 6, "rssiInt": -60, "userIp": "192.168.1.101", "wifiUp": 2000000, "wifiDown": 10000000, "wifiUpDown": 12000000, "sn": "SN002", "onlineTime": 1640100000000, "offlineTime": 1640101000000, "activeTime": 600000, } ] # Dados mock WiFeed (usuários) mock_wifeed_records = [ { "hostMacAddress": "AA:BB:CC:DD:EE:FF", "clientName": "João Silva", "clientEmail": "joao@example.com", "clientExtraFields": {"CPF": "12345678901"}, "clientGender": "M", "clientBirthdate": "1990-01-15", "clientPhoneNumber": "1198765432", "clientId": 1001, "hostType": "mobile", "localName": "João Mobile", }, { "hostMacAddress": "11:22:33:44:55:66", "clientName": "Maria Santos", "clientEmail": "maria@example.com", "clientExtraFields": {"CPF": "98765432101"}, "clientGender": "F", "clientBirthdate": "1985-05-20", "clientPhoneNumber": "1187654321", "clientId": 1002, "hostType": "desktop", "localName": "Maria Desktop", } ] print("\n1️⃣ Transformando dados Ruijie...") sessions = [] for record in mock_ruijie_records: transformed = transform_ruijie(record) if transformed: sessions.append(transformed) print(f" ✓ MAC {transformed['mac_address']} → {len(sessions)} sessões") print(f"\n Total sessões: {len(sessions)}") print(f" Exemplo: {sessions[0] if sessions else 'N/A'}") print("\n2️⃣ Transformando dados WiFeed...") users = [] for record in mock_wifeed_records: transformed = transform_wifeed(record) if transformed: users.append(transformed) print(f" ✓ MAC {transformed['mac_address']} → {len(users)} usuários") print(f"\n Total usuários: {len(users)}") print(f" Exemplo: {users[0] if users else 'N/A'}") print("\n3️⃣ Conectando ao banco de dados...") try: conn = psycopg2.connect( host=DB_HOST, port=DB_PORT, dbname=DB_NAME, user=DB_USER, password=DB_PASSWORD ) conn.autocommit = False print(f" ✓ Conectado a {DB_HOST}:{DB_PORT}/{DB_NAME}") except Exception as e: print(f" ✗ Erro de conexão: {e}") sys.exit(1) print("\n4️⃣ Carregando dados no banco (transform + load)...") try: load(conn, users, sessions) print(" ✓ Load concluído com sucesso") except Exception as e: conn.rollback() print(f" ✗ Erro no load: {e}") import traceback traceback.print_exc() sys.exit(1) finally: conn.close() print("\n5️⃣ Verific ando dados no banco...") try: conn = psycopg2.connect( host=DB_HOST, port=DB_PORT, dbname=DB_NAME, user=DB_USER, password=DB_PASSWORD ) cur = conn.cursor() cur.execute("SELECT COUNT(*) FROM users;") user_count = cur.fetchone()[0] print(f" ✓ Users: {user_count} registros") cur.execute("SELECT COUNT(*) FROM sessions;") session_count = cur.fetchone()[0] print(f" ✓ Sessions: {session_count} registros") cur.execute("SELECT mac_address, name FROM users LIMIT 3;") rows = cur.fetchall() print(f" ✓ Amostra Users:") for mac, name in rows: print(f" - {mac}: {name}") cur.execute("SELECT mac_address, access_point_name FROM sessions LIMIT 3;") rows = cur.fetchall() print(f" ✓ Amostra Sessions:") for mac, ap in rows: print(f" - {mac}: {ap}") conn.close() except Exception as e: print(f" ✗ Erro ao verificar: {e}") import traceback traceback.print_exc() sys.exit(1) print("\n" + "=" * 80) print("✅ TEST PASSED: Transform + Load funcionando corretamente!") print("=" * 80)