import json # A bejövő adatok az n8n-től. A $items() függvénnyel hivatkozunk # a korábbi node-okra a nevük alapján. # Cseréld le a 'MySQL_Node_Neve' és 'Élő_Adat_Node_Neve' neveket # a te munkafolyamatodban lévő node-ok tényleges nevére! # Például: # db_clients_items = $items("MySQL Client Fetch") # live_clients_items = $items("Code (IP Scan Script)") # Fontos: Ha az n8n Code node-jában futtatod, a $items funkciót közvetlenül használhatod. # Ha külső szkriptként futtatod az "Execute Command" node-ból, akkor a bemenetet # másképp kell kezelni (pl. parancssori argumentumként JSON stringet). # Ez a kód az n8n Code node Python módjához készült. db_clients_items = $items("MySQL_Node_Neve") # Ezt cseréld a MySQL node-od nevére live_clients_items = $items("Élő_Adat_Node_Neve") # Ezt cseréld az élő adatokat adó Code node-od nevére # Hozzuk létre a MAC cím alapján kereshető adathalmazokat # Ellenőrizzük, hogy a bemeneti lista nem üres-e db_clients = {} if db_clients_items: db_clients = {item.json['mac_address']: item.json for item in db_clients_items} live_clients = {} if live_clients_items: live_clients = {item.json['mac_address']: item.json for item in live_clients_items} differences = [] # 1. Új kliensek keresése (amik az élő adatokban vannak, de a DB-ben nem) for mac, client_data in live_clients.items(): if mac not in db_clients: differences.append({ "change_type": "ÚJ KLIENS", "client": client_data }) # 2. Eltávolított kliensek keresése (amik a DB-ben vannak, de az élő adatokban már nem) for mac, client_data in db_clients.items(): if mac not in live_clients: differences.append({ "change_type": "ELTÁVOLÍTOTT KLIENS", "client": client_data }) # 3. Változások keresése (pl. megváltozott az IP címe) # Ez egy egyszerűbb példa, ami csak az IP-t figyeli. # Ha több mezőt is figyelni akarsz, bővítsd ezt a részt. for mac, live_data in live_clients.items(): if mac in db_clients: db_data = db_clients[mac] # Összehasonlítjuk az IP címet és a switch nevét if live_data.get('ip_address') != db_data.get('ip_address') or \ live_data.get('switch_name') != db_data.get('switch_name') or \ live_data.get('interface') != db_data.get('interface') or \ live_data.get('vlan') != db_data.get('vlan'): # Gyűjtsük össze a változásokat changes = {} if live_data.get('ip_address') != db_data.get('ip_address'): changes['ip_address'] = {'from': db_data.get('ip_address'), 'to': live_data.get('ip_address')} if live_data.get('switch_name') != db_data.get('switch_name'): changes['switch_name'] = {'from': db_data.get('switch_name'), 'to': live_data.get('switch_name')} if live_data.get('interface') != db_data.get('interface'): changes['interface'] = {'from': db_data.get('interface'), 'to': live_data.get('interface')} if live_data.get('vlan') != db_data.get('vlan'): changes['vlan'] = {'from': db_data.get('vlan'), 'to': live_data.get('vlan')} differences.append({ "change_type": "MEGVÁLTOZOTT KLIENS", "client_mac": mac, "changes": changes, "current_data": live_data }) # A 'return' paranccsal adjuk vissza a különbségeket. # Ha a 'differences' lista üres, a workflow ezen az ágon megáll (ha nincsenek további node-ok, # amik üres bemenettel is futnak). return differences