Refactor event and session column names to camelCase

- Updated test cases to reflect new column names (eve_MAC -> eveMac, eve_DateTime -> eveDateTime, etc.) across various test files.
- Modified SQL table definitions in the database cleanup and migration tests to use camelCase naming conventions.
- Implemented migration tests to ensure legacy column names are correctly renamed to camelCase equivalents.
- Ensured that existing data is preserved during the migration process and that views referencing old column names are dropped before renaming.
- Verified that the migration function is idempotent, allowing for safe re-execution without data loss.
This commit is contained in:
Jokob @NetAlertX
2026-03-16 10:11:22 +00:00
parent 0bb6db155b
commit c7399215ec
109 changed files with 2403 additions and 1967 deletions

View File

@@ -40,10 +40,10 @@ class UpdateFieldAction(Action):
processed = False
# currently unused
if isinstance(obj, dict) and "ObjectGUID" in obj:
if isinstance(obj, dict) and "objectGuid" in obj:
mylog("debug", f"[WF] Updating Object '{obj}' ")
plugin_instance = PluginObjectInstance()
plugin_instance.updateField(obj["ObjectGUID"], self.field, self.value)
plugin_instance.updateField(obj["objectGuid"], self.field, self.value)
processed = True
elif isinstance(obj, dict) and "devGUID" in obj:
@@ -77,10 +77,10 @@ class DeleteObjectAction(Action):
processed = False
# currently unused
if isinstance(obj, dict) and "ObjectGUID" in obj:
if isinstance(obj, dict) and "objectGuid" in obj:
mylog("debug", f"[WF] Updating Object '{obj}' ")
plugin_instance = PluginObjectInstance()
plugin_instance.delete(obj["ObjectGUID"])
plugin_instance.delete(obj["objectGuid"])
processed = True
elif isinstance(obj, dict) and "devGUID" in obj:

View File

@@ -23,29 +23,29 @@ class AppEvent_obj:
self.object_mapping = {
"Devices": {
"fields": {
"ObjectGUID": "NEW.devGUID",
"ObjectPrimaryID": "NEW.devMac",
"ObjectSecondaryID": "NEW.devLastIP",
"ObjectForeignKey": "NEW.devGUID",
"ObjectStatus": "CASE WHEN NEW.devPresentLastScan = 1 THEN 'online' ELSE 'offline' END",
"ObjectStatusColumn": "'devPresentLastScan'",
"ObjectIsNew": "NEW.devIsNew",
"ObjectIsArchived": "NEW.devIsArchived",
"ObjectPlugin": "'DEVICES'",
"objectGuid": "NEW.devGUID",
"objectPrimaryId": "NEW.devMac",
"objectSecondaryId": "NEW.devLastIP",
"objectForeignKey": "NEW.devGUID",
"objectStatus": "CASE WHEN NEW.devPresentLastScan = 1 THEN 'online' ELSE 'offline' END",
"objectStatusColumn": "'devPresentLastScan'",
"objectIsNew": "NEW.devIsNew",
"objectIsArchived": "NEW.devIsArchived",
"objectPlugin": "'DEVICES'",
}
}
# ,
# "Plugins_Objects": {
# "fields": {
# "ObjectGUID": "NEW.ObjectGUID",
# "ObjectPrimaryID": "NEW.Plugin",
# "ObjectSecondaryID": "NEW.Object_PrimaryID",
# "ObjectForeignKey": "NEW.ForeignKey",
# "ObjectStatus": "NEW.Status",
# "ObjectStatusColumn": "'Status'",
# "ObjectIsNew": "CASE WHEN NEW.Status = 'new' THEN 1 ELSE 0 END",
# "ObjectIsArchived": "0", # Default value
# "ObjectPlugin": "NEW.Plugin"
# "objectGuid": "NEW.objectGuid",
# "objectPrimaryId": "NEW.plugin",
# "objectSecondaryId": "NEW.objectPrimaryId",
# "objectForeignKey": "NEW.foreignKey",
# "objectStatus": "NEW.status",
# "objectStatusColumn": "'status'",
# "objectIsNew": "CASE WHEN NEW.status = 'new' THEN 1 ELSE 0 END",
# "objectIsArchived": "0", # Default value
# "objectPlugin": "NEW.plugin"
# }
# }
}
@@ -79,26 +79,26 @@ class AppEvent_obj:
"""Creates the AppEvents table if it doesn't exist."""
self.db.sql.execute("""
CREATE TABLE IF NOT EXISTS "AppEvents" (
"Index" INTEGER PRIMARY KEY AUTOINCREMENT,
"GUID" TEXT UNIQUE,
"AppEventProcessed" BOOLEAN,
"DateTimeCreated" TEXT,
"ObjectType" TEXT,
"ObjectGUID" TEXT,
"ObjectPlugin" TEXT,
"ObjectPrimaryID" TEXT,
"ObjectSecondaryID" TEXT,
"ObjectForeignKey" TEXT,
"ObjectIndex" TEXT,
"ObjectIsNew" BOOLEAN,
"ObjectIsArchived" BOOLEAN,
"ObjectStatusColumn" TEXT,
"ObjectStatus" TEXT,
"AppEventType" TEXT,
"Helper1" TEXT,
"Helper2" TEXT,
"Helper3" TEXT,
"Extra" TEXT
"index" INTEGER PRIMARY KEY AUTOINCREMENT,
"guid" TEXT UNIQUE,
"appEventProcessed" BOOLEAN,
"dateTimeCreated" TEXT,
"objectType" TEXT,
"objectGuid" TEXT,
"objectPlugin" TEXT,
"objectPrimaryId" TEXT,
"objectSecondaryId" TEXT,
"objectForeignKey" TEXT,
"objectIndex" TEXT,
"objectIsNew" BOOLEAN,
"objectIsArchived" BOOLEAN,
"objectStatusColumn" TEXT,
"objectStatus" TEXT,
"appEventType" TEXT,
"helper1" TEXT,
"helper2" TEXT,
"helper3" TEXT,
"extra" TEXT
);
""")
@@ -111,43 +111,43 @@ class AppEvent_obj:
AFTER {event.upper()} ON "{table_name}"
WHEN NOT EXISTS (
SELECT 1 FROM AppEvents
WHERE AppEventProcessed = 0
AND ObjectType = '{table_name}'
AND ObjectGUID = {manage_prefix(config["fields"]["ObjectGUID"], event)}
AND ObjectStatus = {manage_prefix(config["fields"]["ObjectStatus"], event)}
AND AppEventType = '{event.lower()}'
WHERE appEventProcessed = 0
AND objectType = '{table_name}'
AND objectGuid = {manage_prefix(config["fields"]["objectGuid"], event)}
AND objectStatus = {manage_prefix(config["fields"]["objectStatus"], event)}
AND appEventType = '{event.lower()}'
)
BEGIN
INSERT INTO "AppEvents" (
"GUID",
"DateTimeCreated",
"AppEventProcessed",
"ObjectType",
"ObjectGUID",
"ObjectPrimaryID",
"ObjectSecondaryID",
"ObjectStatus",
"ObjectStatusColumn",
"ObjectIsNew",
"ObjectIsArchived",
"ObjectForeignKey",
"ObjectPlugin",
"AppEventType"
"guid",
"dateTimeCreated",
"appEventProcessed",
"objectType",
"objectGuid",
"objectPrimaryId",
"objectSecondaryId",
"objectStatus",
"objectStatusColumn",
"objectIsNew",
"objectIsArchived",
"objectForeignKey",
"objectPlugin",
"appEventType"
)
VALUES (
{sql_generateGuid},
DATETIME('now'),
FALSE,
'{table_name}',
{manage_prefix(config["fields"]["ObjectGUID"], event)}, -- ObjectGUID
{manage_prefix(config["fields"]["ObjectPrimaryID"], event)}, -- ObjectPrimaryID
{manage_prefix(config["fields"]["ObjectSecondaryID"], event)}, -- ObjectSecondaryID
{manage_prefix(config["fields"]["ObjectStatus"], event)}, -- ObjectStatus
{manage_prefix(config["fields"]["ObjectStatusColumn"], event)}, -- ObjectStatusColumn
{manage_prefix(config["fields"]["ObjectIsNew"], event)}, -- ObjectIsNew
{manage_prefix(config["fields"]["ObjectIsArchived"], event)}, -- ObjectIsArchived
{manage_prefix(config["fields"]["ObjectForeignKey"], event)}, -- ObjectForeignKey
{manage_prefix(config["fields"]["ObjectPlugin"], event)}, -- ObjectForeignKey
{manage_prefix(config["fields"]["objectGuid"], event)}, -- objectGuid
{manage_prefix(config["fields"]["objectPrimaryId"], event)}, -- objectPrimaryId
{manage_prefix(config["fields"]["objectSecondaryId"], event)}, -- objectSecondaryId
{manage_prefix(config["fields"]["objectStatus"], event)}, -- objectStatus
{manage_prefix(config["fields"]["objectStatusColumn"], event)}, -- objectStatusColumn
{manage_prefix(config["fields"]["objectIsNew"], event)}, -- objectIsNew
{manage_prefix(config["fields"]["objectIsArchived"], event)}, -- objectIsArchived
{manage_prefix(config["fields"]["objectForeignKey"], event)}, -- objectForeignKey
{manage_prefix(config["fields"]["objectPlugin"], event)}, -- objectPlugin
'{event.lower()}'
);
END;

View File

@@ -33,8 +33,8 @@ class WorkflowManager:
"""Get new unprocessed events from the AppEvents table."""
result = self.db.sql.execute("""
SELECT * FROM AppEvents
WHERE AppEventProcessed = 0
ORDER BY DateTimeCreated ASC
WHERE appEventProcessed = 0
ORDER BY dateTimeCreated ASC
""").fetchall()
mylog("none", [f"[WF] get_new_app_events - new events count: {len(result)}"])
@@ -44,7 +44,7 @@ class WorkflowManager:
def process_event(self, event):
"""Process the events. Check if events match a workflow trigger"""
evGuid = event["GUID"]
evGuid = event["guid"]
mylog("verbose", [f"[WF] Processing event with GUID {evGuid}"])
@@ -67,10 +67,10 @@ class WorkflowManager:
self.db.sql.execute(
"""
UPDATE AppEvents
SET AppEventProcessed = 1
WHERE "Index" = ?
SET appEventProcessed = 1
WHERE "index" = ?
""",
(event["Index"],),
(event["index"],),
) # Pass the event's unique identifier
self.db.commitDB()

View File

@@ -21,7 +21,7 @@ class Trigger:
self.event_type = triggerJson["event_type"]
self.event = event # Store the triggered event context, if provided
self.triggered = (
self.object_type == event["ObjectType"] and self.event_type == event["AppEventType"]
self.object_type == event["objectType"] and self.event_type == event["appEventType"]
)
mylog("debug", f"""[WF] self.triggered '{self.triggered}' for event '{get_array_from_sql_rows(event)} and trigger {json.dumps(triggerJson)}' """)
@@ -33,7 +33,7 @@ class Trigger:
if db_table == "Devices":
refField = "devGUID"
elif db_table == "Plugins_Objects":
refField = "ObjectGUID"
refField = "objectGuid"
else:
m = f"[WF] Unsupported object_type: {self.object_type}"
mylog("none", [m])
@@ -42,7 +42,7 @@ class Trigger:
query = f"""
SELECT * FROM
{db_table}
WHERE {refField} = '{event["ObjectGUID"]}'
WHERE {refField} = '{event["objectGuid"]}'
"""
mylog("debug", [query])