wifi-etl/test_transform_load.py

174 lines
4.9 KiB
Python
Raw Permalink Normal View History

#!/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)