174 lines
4.9 KiB
Python
174 lines
4.9 KiB
Python
|
|
#!/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)
|