83 lines
3.6 KiB
Python
83 lines
3.6 KiB
Python
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
|