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),
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2026-06-29 17:35:04 -03:00
|
|
|
def transform_wifire(record: dict) -> dict:
|
2026-04-22 16:55:44 -03:00
|
|
|
"""
|
2026-06-29 17:35:04 -03:00
|
|
|
Customer WiFire → dict para tabela users.
|
|
|
|
|
|
|
|
|
|
Campos esperados de /establishments/customers:
|
|
|
|
|
- mac / mac_address: MAC do dispositivo (tenta os dois)
|
|
|
|
|
- name: nome do cliente
|
|
|
|
|
- email: e-mail
|
|
|
|
|
- cpf: CPF (campo direto na resposta WiFire)
|
|
|
|
|
- sex: gênero ('M'/'F')
|
|
|
|
|
- birthday / birthdate: data de nascimento 'YYYY-MM-DD'
|
|
|
|
|
- phone / celphone: telefone
|
|
|
|
|
- id: ID único do cliente
|
|
|
|
|
- device_type / host_type: tipo de dispositivo
|
|
|
|
|
- establishment_name / local_name: nome do local
|
2026-04-22 16:55:44 -03:00
|
|
|
"""
|
2026-06-29 17:35:04 -03:00
|
|
|
mac = (
|
|
|
|
|
record.get('mac') or
|
|
|
|
|
record.get('mac_address') or
|
|
|
|
|
record.get('device_mac') or
|
|
|
|
|
''
|
|
|
|
|
)
|
2026-04-22 16:55:44 -03:00
|
|
|
|
|
|
|
|
return {
|
2026-06-29 17:35:04 -03:00
|
|
|
'mac_address': normalize_mac(mac),
|
|
|
|
|
'name': record.get('name', ''),
|
|
|
|
|
'email': record.get('email', ''),
|
|
|
|
|
'cpf': record.get('cpf', ''),
|
|
|
|
|
'gender': record.get('sex', ''),
|
|
|
|
|
'birthdate': record.get('birthday') or record.get('birthdate'),
|
|
|
|
|
'phone': record.get('phone') or record.get('celphone', ''),
|
|
|
|
|
'client_id': int(record.get('id', 0) or 0),
|
|
|
|
|
'host_type': record.get('device_type') or record.get('host_type', ''),
|
|
|
|
|
'local_name': record.get('establishment_name') or record.get('local_name', ''),
|
2026-04-22 16:55:44 -03:00
|
|
|
}
|