2026-04-22 16:55:44 -03:00
|
|
|
import logging
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def normalize_mac(mac: str) -> str:
|
|
|
|
|
if not mac:
|
|
|
|
|
return ""
|
|
|
|
|
cleaned = mac.replace('.', '').replace('-', '').replace(':', '').upper()
|
|
|
|
|
if len(cleaned) == 12 and all(c in '0123456789ABCDEF' for c in cleaned):
|
|
|
|
|
return ':'.join(cleaned[i:i+2] for i in range(0, 12, 2))
|
|
|
|
|
return mac.upper()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def transform_ruijie(record: dict) -> dict:
|
|
|
|
|
"""Session Ruijie → dict (mac normalizado + campos)."""
|
|
|
|
|
return {
|
|
|
|
|
'mac_address': normalize_mac(record.get('mac', '')),
|
|
|
|
|
'access_point_name': record.get('deviceAliasName', ''),
|
|
|
|
|
'building_name': record.get('buildingName', ''),
|
|
|
|
|
'band': record.get('band', ''),
|
|
|
|
|
'channel': record.get('channel', ''),
|
|
|
|
|
'rssi': int(record.get('rssiInt', 0) or 0),
|
|
|
|
|
'user_ip': record.get('userIp', ''),
|
|
|
|
|
'bytes_up': int(record.get('wifiUp', 0) or 0),
|
|
|
|
|
'bytes_down': int(record.get('wifiDown', 0) or 0),
|
|
|
|
|
'bytes_total': int(record.get('wifiUpDown', 0) or 0),
|
|
|
|
|
'serial_number': record.get('sn', ''),
|
|
|
|
|
'online_time_ms': record.get('onlineTime'), # epoch ms (int)
|
|
|
|
|
'offline_time_ms': record.get('offlineTime'), # epoch ms (int)
|
|
|
|
|
'active_time_ms': int(record.get('activeTime', 0) or 0),
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def transform_wifeed(record: dict) -> dict:
|
|
|
|
|
"""
|
|
|
|
|
Access WiFeed → dict (usuário + MAC do dispositivo).
|
|
|
|
|
|
|
|
|
|
Dados vêm de /v2/report/access e incluem:
|
|
|
|
|
- hostMacAddress: MAC do dispositivo
|
|
|
|
|
- clientName, clientEmail, clientPhoneNumber: Info do cliente
|
|
|
|
|
- clientGender, clientBirthdate: Dados demográficos
|
|
|
|
|
- clientExtraFields: CPF e outros extras
|
|
|
|
|
- clientId: ID único do cliente
|
|
|
|
|
- hostType: Tipo de dispositivo (Android, iPhone, etc)
|
|
|
|
|
- localName: Local/network onde conectou
|
|
|
|
|
"""
|
|
|
|
|
cpf = ''
|
|
|
|
|
extra = record.get('clientExtraFields')
|
|
|
|
|
if isinstance(extra, dict):
|
|
|
|
|
cpf = extra.get('CPF', '')
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
'mac_address': normalize_mac(record.get('hostMacAddress', '')),
|
|
|
|
|
'name': record.get('clientName', ''),
|
|
|
|
|
'email': record.get('clientEmail', ''),
|
|
|
|
|
'cpf': cpf,
|
|
|
|
|
'gender': record.get('clientGender', ''),
|
|
|
|
|
'birthdate': record.get('clientBirthdate'), # string 'YYYY-MM-DD'
|
|
|
|
|
'phone': record.get('clientPhoneNumber', ''),
|
|
|
|
|
'client_id': int(record.get('clientId', 0) or 0),
|
|
|
|
|
'host_type': record.get('hostType', ''),
|
|
|
|
|
'local_name': record.get('localName', ''),
|
|
|
|
|
}
|