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', ''), }