From f9b28b647bb06aa214f78b78b8ca8bc2b08fbb5c Mon Sep 17 00:00:00 2001 From: jokob-sk Date: Fri, 4 Oct 2024 14:02:16 +1000 Subject: [PATCH] DBCLNP chore --- docs/PERFORMANCE.md | 24 ++++++++++++++++ docs/img/PERFORMANCE/db_size_check.png | Bin 0 -> 62290 bytes front/plugins/db_cleanup/README.md | 17 ++++++++++++ front/plugins/db_cleanup/config.json | 37 ++----------------------- front/plugins/db_cleanup/script.py | 14 ++-------- front/plugins/maintenance/README.md | 2 +- 6 files changed, 47 insertions(+), 47 deletions(-) create mode 100755 docs/PERFORMANCE.md create mode 100755 docs/img/PERFORMANCE/db_size_check.png diff --git a/docs/PERFORMANCE.md b/docs/PERFORMANCE.md new file mode 100755 index 00000000..c82ad553 --- /dev/null +++ b/docs/PERFORMANCE.md @@ -0,0 +1,24 @@ +# Performance tips + +The application runs regular maintenance a DB cleanup tasks. If these tasks fail, you might encounter performance issues. + +Most performance issues are caused by a big database or large log files. Enabling unnecessary plugins will also lead to performance degradation. + +You can always check the size of your database and database tables under the Maintenance page. + +![Db size check](/docs/img/PERFORMANCE/db_size_check.png) + +> [!NOTE] +> For around 100 devices the database should be approximately `50MB` and none of the entries (rows) should exceed the value of `10 000` on a healthy system. + +## Maintenance plugins + +There are 2 plugins responsible for maintaining the overal health of the application. One is responsible for the database cleanup and one for other tasks, such as log cleanup. + +### DB Cleanup (DBCLNP) + +The database cleanup plugin. Check details and related setting in the [DB Cleanup plugin docs](/front/plugins/db_cleanup/README.md). Make sure the plugin is not failing by checking the logs. Try changing the schedule `DBCLNP_RUN_SCHD` and the timeout `DBCLNP_RUN_TIMEOUT` (increase) if the plugin is failing to execute. + +### Maintenance (MAINT) + +The maintenance plugin. Check details and related setting in the [Maintenance plugin docs](/front/plugins/maintenance/README.md). Make sure the plugin is not failing by checking the logs. Try changing the schedule `MAINT_RUN_SCHD` and the timeout `MAINT_RUN_TIMEOUT` (increase) if the plugin is failing to execute. diff --git a/docs/img/PERFORMANCE/db_size_check.png b/docs/img/PERFORMANCE/db_size_check.png new file mode 100755 index 0000000000000000000000000000000000000000..e3886e5e4d51874abec2f1624b047132ec62927a GIT binary patch literal 62290 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 in the DBCLNP_RUN setting. Make sure you enter the schedule in the correct cron-like format (e.g. validate at crontab.guru). For example entering 0 4 * * * will run the scan after 4 am in the TIMEZONE you set above. Will be run NEXT time the time passes." - }, - { - "language_code": "es_es", - "string": "Solo está habilitado si selecciona schedule en la configuración DBCLNP_RUN. Asegúrese de ingresar la programación en el formato similar a cron correcto (por ejemplo, valide en crontab.guru). Por ejemplo, ingresar 0 4 * * * ejecutará el escaneo después de las 4 a.m. en el TIMEZONE que configuró arriba. Se ejecutará la PRÓXIMA vez que pase el tiempo." - }, - { - "language_code": "de_de", - "string": "Nur aktiviert, wenn Sie schedule in der DBCLNP_RUN-Einstellung auswählen. Stellen Sie sicher, dass Sie den Zeitplan im richtigen Cron-ähnlichen Format eingeben (z. B. validieren unter crontab.guru). Wenn Sie beispielsweise 0 4 * * * eingeben, wird der Scan nach 4 Uhr morgens in der TIMEZONE den Sie oben festgelegt haben. Wird das NÄCHSTE Mal ausgeführt, wenn die Zeit vergeht." } ] }, @@ -194,14 +169,6 @@ { "language_code": "en_us", "string": "Maximum time in seconds to wait for the script to finish. If this time is exceeded the script is aborted." - }, - { - "language_code": "es_es", - "string": "Tiempo máximo en segundos para esperar a que finalice el script. Si se supera este tiempo, el script se cancela." - }, - { - "language_code": "de_de", - "string": "Maximale Zeit in Sekunden, die auf den Abschluss des Skripts gewartet werden soll. Bei Überschreitung dieser Zeit wird das Skript abgebrochen." } ] }, diff --git a/front/plugins/db_cleanup/script.py b/front/plugins/db_cleanup/script.py index c08fd269..1c40f438 100755 --- a/front/plugins/db_cleanup/script.py +++ b/front/plugins/db_cleanup/script.py @@ -32,17 +32,9 @@ pluginName = 'DBCLNP' def main(): - parser = argparse.ArgumentParser(description='DB cleanup tasks') - parser.add_argument('pluginskeephistory', action="store", help="TBC") - parser.add_argument('hourstokeepnewdevice', action="store", help="TBC") - parser.add_argument('daystokeepevents', action="store", help="TBC") - parser.add_argument('pholuskeepdays', action="store", help="TBC") # unused - - values = parser.parse_args() - - PLUGINS_KEEP_HIST = int(values.pluginskeephistory.split('=')[1]) - HRS_TO_KEEP_NEWDEV = int(values.hourstokeepnewdevice.split('=')[1]) - DAYS_TO_KEEP_EVENTS = int(values.daystokeepevents.split('=')[1]) + PLUGINS_KEEP_HIST = int(get_setting_value("PLUGINS_KEEP_HIST")) + HRS_TO_KEEP_NEWDEV = int(get_setting_value("HRS_TO_KEEP_NEWDEV")) + DAYS_TO_KEEP_EVENTS = int(get_setting_value("DAYS_TO_KEEP_EVENTS")) PHOLUS_DAYS_DATA = get_setting_value("PHOLUS_DAYS_DATA") CLEAR_NEW_FLAG = get_setting_value("CLEAR_NEW_FLAG") diff --git a/front/plugins/maintenance/README.md b/front/plugins/maintenance/README.md index b7e46290..0818aba9 100755 --- a/front/plugins/maintenance/README.md +++ b/front/plugins/maintenance/README.md @@ -2,7 +2,7 @@ A plugin responsible for general maintenance tasks. These currently include: -- app.log cleanup +- **`MAINT_LOG_LENGTH`**: app.log cleanup. Recommended value: `10000` lines. Increase if debugging an issue. ### Usage