mirror of
https://github.com/jokob-sk/NetAlertX.git
synced 2025-12-07 09:36:05 -08:00
presence rework #1119, plugin history filter
This commit is contained in:
@@ -354,31 +354,45 @@ def create_new_devices (db):
|
||||
sql = db.sql # TO-DO
|
||||
startTime = timeNowTZ()
|
||||
|
||||
# Insert events for new devices from CurrentScan
|
||||
mylog('debug','[New Devices] New devices - 1 Events')
|
||||
# Insert events for new devices from CurrentScan (not yet in Devices)
|
||||
|
||||
query = f"""INSERT INTO Events (eve_MAC, eve_IP, eve_DateTime,
|
||||
eve_EventType, eve_AdditionalInfo,
|
||||
eve_PendingAlertEmail)
|
||||
SELECT cur_MAC, cur_IP, '{startTime}', 'New Device', cur_Vendor, 1
|
||||
FROM CurrentScan
|
||||
WHERE NOT EXISTS (SELECT 1 FROM Devices
|
||||
WHERE devMac = cur_MAC)
|
||||
"""
|
||||
|
||||
mylog('debug', '[New Devices] Insert "New Device" Events')
|
||||
query_new_device_events = f"""
|
||||
INSERT INTO Events (
|
||||
eve_MAC, eve_IP, eve_DateTime,
|
||||
eve_EventType, eve_AdditionalInfo,
|
||||
eve_PendingAlertEmail
|
||||
)
|
||||
SELECT cur_MAC, cur_IP, '{startTime}', 'New Device', cur_Vendor, 1
|
||||
FROM CurrentScan
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM Devices
|
||||
WHERE devMac = cur_MAC
|
||||
)
|
||||
"""
|
||||
|
||||
mylog('debug',f'[New Devices] Log Events Query: {query}')
|
||||
# mylog('debug',f'[New Devices] Log Events Query: {query_new_device_events}')
|
||||
|
||||
sql.execute(query)
|
||||
sql.execute(query_new_device_events)
|
||||
|
||||
mylog('debug',f'[New Devices] Insert Connection into session table')
|
||||
|
||||
sql.execute (f"""INSERT INTO Sessions (ses_MAC, ses_IP, ses_EventTypeConnection, ses_DateTimeConnection,
|
||||
ses_EventTypeDisconnection, ses_DateTimeDisconnection, ses_StillConnected, ses_AdditionalInfo)
|
||||
SELECT cur_MAC, cur_IP,'Connected','{startTime}', NULL , NULL ,1, cur_Vendor
|
||||
FROM CurrentScan
|
||||
WHERE NOT EXISTS (SELECT 1 FROM Sessions
|
||||
WHERE ses_MAC = cur_MAC)
|
||||
sql.execute (f"""INSERT INTO Sessions (
|
||||
ses_MAC, ses_IP, ses_EventTypeConnection, ses_DateTimeConnection,
|
||||
ses_EventTypeDisconnection, ses_DateTimeDisconnection,
|
||||
ses_StillConnected, ses_AdditionalInfo
|
||||
)
|
||||
SELECT cur_MAC, cur_IP, 'Connected', '{startTime}', NULL, NULL, 1, cur_Vendor
|
||||
FROM CurrentScan
|
||||
WHERE EXISTS (
|
||||
SELECT 1 FROM Devices
|
||||
WHERE devMac = cur_MAC
|
||||
)
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM Sessions
|
||||
WHERE ses_MAC = cur_MAC AND ses_StillConnected = 1
|
||||
)
|
||||
""")
|
||||
|
||||
# Create new devices from CurrentScan
|
||||
|
||||
@@ -48,10 +48,6 @@ def process_scan (db):
|
||||
mylog('verbose','[Process Scan] Updating Devices Info')
|
||||
update_devices_data_from_scan (db)
|
||||
|
||||
# Void false connection - disconnections
|
||||
mylog('verbose','[Process Scan] Voiding false (ghost) disconnections')
|
||||
void_ghost_disconnections (db)
|
||||
|
||||
# Pair session events (Connection / Disconnection)
|
||||
mylog('verbose','[Process Scan] Pairing session events (connection / disconnection) ')
|
||||
pair_sessions_events(db)
|
||||
@@ -75,104 +71,39 @@ def process_scan (db):
|
||||
# Commit changes
|
||||
db.commitDB()
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
def void_ghost_disconnections (db):
|
||||
sql = db.sql #TO-DO
|
||||
startTime = timeNowTZ()
|
||||
# Void connect ghost events (disconnect event exists in last X min.)
|
||||
mylog('debug','[Void Ghost Con] - 1 Connect ghost events')
|
||||
sql.execute("""UPDATE Events SET eve_PairEventRowid = Null,
|
||||
eve_EventType ='VOIDED - ' || eve_EventType
|
||||
WHERE eve_MAC != 'Internet'
|
||||
AND eve_EventType in ('Connected', 'Down Reconnected')
|
||||
AND eve_DateTime = ?
|
||||
AND eve_MAC IN (
|
||||
SELECT Events.eve_MAC
|
||||
FROM CurrentScan, Devices, Events
|
||||
WHERE devMac = cur_MAC
|
||||
AND eve_MAC = cur_MAC
|
||||
AND eve_EventType = 'Disconnected'
|
||||
AND eve_DateTime >= DATETIME(?, '-3 minutes')
|
||||
) """,
|
||||
(startTime, startTime))
|
||||
|
||||
# Void connect paired events
|
||||
mylog('debug','[Void Ghost Con] - 2 Paired events')
|
||||
sql.execute("""UPDATE Events SET eve_PairEventRowid = Null
|
||||
WHERE eve_MAC != 'Internet'
|
||||
AND eve_PairEventRowid IN (
|
||||
SELECT Events.RowID
|
||||
FROM CurrentScan, Devices, Events
|
||||
WHERE devMac = cur_MAC
|
||||
AND eve_MAC = cur_MAC
|
||||
AND eve_EventType = 'Disconnected'
|
||||
AND eve_DateTime >= DATETIME(?, '-3 minutes')
|
||||
) """,
|
||||
(startTime,))
|
||||
|
||||
# Void disconnect ghost events
|
||||
mylog('debug','[Void Ghost Con] - 3 Disconnect ghost events')
|
||||
sql.execute("""UPDATE Events SET eve_PairEventRowid = Null,
|
||||
eve_EventType = 'VOIDED - '|| eve_EventType
|
||||
WHERE eve_MAC != 'Internet'
|
||||
AND ROWID IN (
|
||||
SELECT Events.RowID
|
||||
FROM CurrentScan, Devices, Events
|
||||
WHERE devMac = cur_MAC
|
||||
AND eve_MAC = cur_MAC
|
||||
AND eve_EventType = 'Disconnected'
|
||||
AND eve_DateTime >= DATETIME(?, '-3 minutes')
|
||||
) """,
|
||||
(startTime,))
|
||||
|
||||
mylog('debug','[Void Ghost Con] Void Ghost Connections end')
|
||||
|
||||
db.commitDB()
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
def pair_sessions_events (db):
|
||||
# db.commitDB()
|
||||
|
||||
sql = db.sql #TO-DO
|
||||
mylog('debug', '[Pair Session] - START')
|
||||
# Pair Connection / New Device events
|
||||
|
||||
# Step 1: Pair connection-related events with future unpaired disconnections
|
||||
mylog('debug', '[Pair Session] - 1: Pair Connections → Disconnections')
|
||||
sql.execute("""
|
||||
UPDATE Events
|
||||
SET eve_PairEventRowid = (
|
||||
SELECT E2.ROWID
|
||||
FROM Events AS E2
|
||||
WHERE E2.eve_EventType IN ('Disconnected', 'Device Down')
|
||||
AND E2.eve_MAC = Events.eve_MAC
|
||||
AND E2.eve_PairEventRowid IS NULL
|
||||
AND E2.eve_DateTime > Events.eve_DateTime
|
||||
ORDER BY E2.eve_DateTime ASC
|
||||
LIMIT 1
|
||||
)
|
||||
WHERE eve_EventType IN ('New Device', 'Connected', 'Down Reconnected')
|
||||
AND eve_PairEventRowid IS NULL
|
||||
""")
|
||||
mylog('debug','[Pair Session] - 1 Connections / New Devices')
|
||||
sql.execute ("""UPDATE Events
|
||||
SET eve_PairEventRowid =
|
||||
(SELECT ROWID
|
||||
FROM Events AS EVE2
|
||||
WHERE EVE2.eve_EventType IN ('New Device', 'Connected', 'Down Reconnected',
|
||||
'Device Down', 'Disconnected')
|
||||
AND EVE2.eve_MAC = Events.eve_MAC
|
||||
AND EVE2.eve_Datetime > Events.eve_DateTime
|
||||
ORDER BY EVE2.eve_DateTime ASC LIMIT 1)
|
||||
WHERE eve_EventType IN ('New Device', 'Connected', 'Down Reconnected')
|
||||
AND eve_PairEventRowid IS NULL
|
||||
""" )
|
||||
|
||||
# Step 2: Pair disconnection-related events with previous unpaired connections
|
||||
mylog('debug', '[Pair Session] - 2: Pair Disconnections → Connections')
|
||||
sql.execute("""
|
||||
UPDATE Events
|
||||
SET eve_PairEventRowid = (
|
||||
SELECT E2.ROWID
|
||||
FROM Events AS E2
|
||||
WHERE E2.eve_EventType IN ('New Device', 'Connected', 'Down Reconnected')
|
||||
AND E2.eve_MAC = Events.eve_MAC
|
||||
AND E2.eve_PairEventRowid IS NULL
|
||||
AND E2.eve_DateTime < Events.eve_DateTime
|
||||
ORDER BY E2.eve_DateTime DESC
|
||||
LIMIT 1
|
||||
)
|
||||
WHERE eve_EventType IN ('Disconnected', 'Device Down')
|
||||
AND eve_PairEventRowid IS NULL
|
||||
""")
|
||||
# Pair Disconnection / Device Down
|
||||
mylog('debug','[Pair Session] - 2 Disconnections')
|
||||
sql.execute ("""UPDATE Events
|
||||
SET eve_PairEventRowid =
|
||||
(SELECT ROWID
|
||||
FROM Events AS EVE2
|
||||
WHERE EVE2.eve_PairEventRowid = Events.ROWID)
|
||||
WHERE eve_EventType IN ('Device Down', 'Disconnected')
|
||||
AND eve_PairEventRowid IS NULL
|
||||
""" )
|
||||
|
||||
mylog('debug', '[Pair Session] - END')
|
||||
|
||||
mylog('debug','[Pair Session] Pair session end')
|
||||
db.commitDB()
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user