diff --git a/front/php/templates/language/en_us.json b/front/php/templates/language/en_us.json index 6d4e7736..181c6d85 100755 --- a/front/php/templates/language/en_us.json +++ b/front/php/templates/language/en_us.json @@ -500,7 +500,9 @@ "ENABLE_PLUGINS_name" : "Enable Plugins", "ENABLE_PLUGINS_description" : "Enables the plugins functionality. Loading plugins requires more hardware resources so you might want to disable them on low-powered system.", "PLUGINS_KEEP_HIST_name" : "Plugins History", - "PLUGINS_KEEP_HIST_description" : "How many entries of Plugins History scan results should be kept (per Plugin, not device specific).", + "PLUGINS_KEEP_HIST_description" : "How many entries of Plugins History scan results should be kept (per Plugin, and not device specific).", + "DBCLNP_NOTIFI_HIST_name" : "Notifications History", + "DBCLNP_NOTIFI_HIST_description" : "How many historical entries of Notifications should be kept.", "PIALERT_WEB_PROTECTION_name" : "Enable login", "PIALERT_WEB_PROTECTION_description" : "When enabled a login dialog is displayed. Read below carefully if you get locked out of your instance.", "PIALERT_WEB_PASSWORD_name" : "Login password", diff --git a/front/plugins/README.md b/front/plugins/README.md index 6426347e..47a2a3d5 100755 --- a/front/plugins/README.md +++ b/front/plugins/README.md @@ -641,7 +641,8 @@ The UI will adjust how columns are displayed in the UI based on the resolvers de | `url` | The value is considered to be a URL, so a link is generated. | | `textbox_save` | Generates an editable and saveable text box that saves values in the database. Primarily intended for the `UserData` database column in the `Plugins_Objects` table. | | `url_http_https` | Generates two links with the `https` and `http` prefix as lock icons. | - +| `eval` | Evaluates as JavaScript. Use the variable `value` to use the given column value as input (e.g. ``${value}`` ) | + > [!NOTE] > Supports chaining. You can chain multiple resolvers with `.`. For example `regex.url_http_https`. This will apply the `regex` resolver and then the `url_http_https` resolver. diff --git a/front/plugins/_publisher_apprise/config.json b/front/plugins/_publisher_apprise/config.json index 315eb944..5de4322a 100755 --- a/front/plugins/_publisher_apprise/config.json +++ b/front/plugins/_publisher_apprise/config.json @@ -132,7 +132,7 @@ "options": [ { "type": "eval", - "param": "`${value}`" + "param": "`${value}`" } ], "localized": ["name"], diff --git a/front/plugins/_publisher_email/config.json b/front/plugins/_publisher_email/config.json index a7bdb40f..30d96eec 100755 --- a/front/plugins/_publisher_email/config.json +++ b/front/plugins/_publisher_email/config.json @@ -161,7 +161,7 @@ "options": [ { "type": "eval", - "param": "`${value}`" + "param": "`${value}`" } ], "localized": [ diff --git a/front/plugins/_publisher_ntfy/config.json b/front/plugins/_publisher_ntfy/config.json index a22f909d..e3079caf 100755 --- a/front/plugins/_publisher_ntfy/config.json +++ b/front/plugins/_publisher_ntfy/config.json @@ -99,7 +99,7 @@ "options": [ { "type": "eval", - "param": "`${value}`" + "param": "`${value}`" } ], "localized": ["name"], diff --git a/front/plugins/_publisher_pushsafer/config.json b/front/plugins/_publisher_pushsafer/config.json index ebfbf61e..030762d9 100755 --- a/front/plugins/_publisher_pushsafer/config.json +++ b/front/plugins/_publisher_pushsafer/config.json @@ -99,7 +99,7 @@ "options": [ { "type": "eval", - "param": "`${value}`" + "param": "`${value}`" } ], "localized": ["name"], diff --git a/front/plugins/_publisher_webhook/config.json b/front/plugins/_publisher_webhook/config.json index a1e36beb..809a29ce 100755 --- a/front/plugins/_publisher_webhook/config.json +++ b/front/plugins/_publisher_webhook/config.json @@ -99,7 +99,7 @@ "options": [ { "type": "eval", - "param": "`${value}`" + "param": "`${value}`" } ], "localized": ["name"], diff --git a/front/plugins/db_cleanup/script.py b/front/plugins/db_cleanup/script.py index 5d747a06..57125b03 100755 --- a/front/plugins/db_cleanup/script.py +++ b/front/plugins/db_cleanup/script.py @@ -92,6 +92,23 @@ def cleanup_database (dbPath, DAYS_TO_KEEP_EVENTS, PHOLUS_DAYS_DATA, HRS_TO_KEEP cursor.execute(delete_query) + # Trim Notifications entries to less than DBCLNP_NOTIFI_HIST setting + mylog('verbose', [f'[DBCLNP] Plugins_History: Trim Notifications entries to less than {str(get_setting_value('DBCLNP_NOTIFI_HIST'))} )']) + + # Build the SQL query to delete entries + delete_query = f"""DELETE FROM Notifications + WHERE "Index" NOT IN ( + SELECT "Index" + FROM ( + SELECT "Index", + ROW_NUMBER() OVER(PARTITION BY "Notifications" ORDER BY DateTimeCreated DESC) AS row_num + FROM Notifications + ) AS ranked_objects + WHERE row_num <= {str(get_setting_value('DBCLNP_NOTIFI_HIST'))} + );""" + + cursor.execute(delete_query) + # Cleanup Pholus_Scan if PHOLUS_DAYS_DATA != 0: mylog('verbose', ['[DBCLNP] Pholus_Scan: Delete all older than ' + str(PHOLUS_DAYS_DATA) + ' days (PHOLUS_DAYS_DATA setting)']) diff --git a/front/pluginsCore.php b/front/pluginsCore.php index ee5c3293..53f3459e 100755 --- a/front/pluginsCore.php +++ b/front/pluginsCore.php @@ -173,7 +173,8 @@ function processColumnValue(dbColumnDef, value, index, type) { for (const option of dbColumnDef.options) { if (option.type === type) { - value = eval(value); + console.log(option.param) + value = eval(option.param); } } break; diff --git a/pialert/initialise.py b/pialert/initialise.py index 4cf4f76f..72ee2a82 100755 --- a/pialert/initialise.py +++ b/pialert/initialise.py @@ -111,6 +111,7 @@ def importConfigs (db): conf.UI_PRESENCE = ccd('UI_PRESENCE', ['online', 'offline', 'archived'] , c_d, 'Include in presence', 'text.multiselect', "['online', 'offline', 'archived']", 'General') conf.DAYS_TO_KEEP_EVENTS = ccd('DAYS_TO_KEEP_EVENTS', 90 , c_d, 'Delete events days', 'integer', '', 'General') conf.HRS_TO_KEEP_NEWDEV = ccd('HRS_TO_KEEP_NEWDEV', 0 , c_d, 'Keep new devices for', 'integer', "0", 'General') + conf.DBCLNP_NOTIFI_HIST = ccd('DBCLNP_NOTIFI_HIST', 100 , c_d, 'Keep notification', 'integer', "0", 'General') conf.API_CUSTOM_SQL = ccd('API_CUSTOM_SQL', 'SELECT * FROM Devices WHERE dev_PresentLastScan = 0' , c_d, 'Custom endpoint', 'text', '', 'General') conf.NETWORK_DEVICE_TYPES = ccd('NETWORK_DEVICE_TYPES', ['AP', 'Gateway', 'Firewall', 'Hypervisor', 'Powerline', 'Switch', 'WLAN', 'PLC', 'Router','USB LAN Adapter', 'USB WIFI Adapter', 'Internet'] , c_d, 'Network device types', 'list', '', 'General')