wifi-etl/app/transform/merge_mac.py
Rafael Lopes 4af74ab458
All checks were successful
Deploy WiFi-ETL Prod / deploy (push) Successful in 47s
FEAT: Migração para WiFire
- Substitui uso da Wifeed pela Wifere como fonde de dados de coleta dos usuarios

- Correção de cron

- Melhoria de logging
2026-06-29 17:35:04 -03:00

69 lines
2.7 KiB
Python

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_wifire(record: dict) -> dict:
"""
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
"""
mac = (
record.get('mac') or
record.get('mac_address') or
record.get('device_mac') or
''
)
return {
'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', ''),
}