argus-server 2.7.0__tar.gz → 2.8.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- argus_server-2.8.1/.claude/hooks/check-test-names.sh +30 -0
- argus_server-2.8.1/.claude/settings.json +16 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/.gitignore +10 -3
- {argus_server-2.7.0 → argus_server-2.8.1}/CHANGELOG.md +111 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/Makefile +14 -3
- {argus_server-2.7.0 → argus_server-2.8.1}/NOTES.md +147 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/PKG-INFO +3 -2
- {argus_server-2.7.0 → argus_server-2.8.1}/README.md +1 -1
- argus_server-2.8.1/checks/check_test_names.py +200 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/codecov.yml +1 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docker/Dockerfile +4 -2
- {argus_server-2.7.0 → argus_server-2.8.1}/docker/README.md +11 -0
- argus_server-2.8.1/docker/cmd-argus.sh +22 -0
- argus_server-2.8.1/docker/cmd-dbqueue.sh +3 -0
- argus_server-2.8.1/docker-compose.yml +38 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/conf.py +2 -2
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/customization/htmx-frontend.rst +188 -62
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/development/howtos/htmx-frontend/override_templates.rst +6 -4
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/development/howtos/release-checklist.rst +6 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/development/makefile-rules.rst +18 -6
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/development/management-commands.rst +27 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/index.rst +1 -0
- argus_server-2.8.1/docs/production/task-queue.rst +110 -0
- argus_server-2.8.1/docs/production.rst +8 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/reference/htmx-frontend.rst +6 -5
- argus_server-2.8.1/docs/reference/img/ER_model.png +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/reference/site-specific-settings.rst +30 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/pyproject.toml +20 -2
- {argus_server-2.7.0 → argus_server-2.8.1}/requirements-django52.txt +21 -5
- {argus_server-2.7.0 → argus_server-2.8.1}/requirements-django60.txt +19 -3
- {argus_server-2.7.0 → argus_server-2.8.1}/requirements.txt +21 -5
- argus_server-2.8.1/src/argus/constants.py +4 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/apps.py +4 -1
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/checks.py +1 -1
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/context_processors.py +7 -1
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/defaults.py +9 -36
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/destination/forms.py +4 -2
- argus_server-2.8.1/src/argus/htmx/destination/urls.py +16 -0
- argus_server-2.8.1/src/argus/htmx/destination/views.py +205 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/incident/columns.py +1 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/incident/filter.py +3 -1
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/incident/urls.py +0 -1
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/incident/views.py +8 -12
- argus_server-2.8.1/src/argus/htmx/management/commands/tailwind_config.py +76 -0
- argus_server-2.8.1/src/argus/htmx/notificationprofile/urls.py +13 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/notificationprofile/views.py +77 -103
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/plannedmaintenance/urls.py +1 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/plannedmaintenance/views.py +67 -2
- argus_server-2.8.1/src/argus/htmx/static/styles.css +5220 -0
- argus_server-2.8.1/src/argus/htmx/tailwindtheme/README.md +10 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/tailwindtheme/config.py +12 -3
- argus_server-2.8.1/src/argus/htmx/tailwindtheme/cssconfig.py +99 -0
- argus_server-2.8.1/src/argus/htmx/tailwindtheme/custom-themes/README.md +7 -0
- argus_server-2.8.1/src/argus/htmx/tailwindtheme/generate_css_config.py +52 -0
- argus_server-2.8.1/src/argus/htmx/tailwindtheme/snippets/11-extensions.css +37 -0
- argus_server-2.8.1/src/argus/htmx/tailwindtheme/snippets/12-daisy-compat.css +141 -0
- argus_server-2.8.1/src/argus/htmx/tailwindtheme/snippets/15-alert-message.css +21 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/tailwindtheme/snippets/25-choices.css +43 -9
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/tailwindtheme/snippets/30-incident-table.css +2 -4
- argus_server-2.8.1/src/argus/htmx/tailwindtheme/snippets/32-filter-pane.css +30 -0
- argus_server-2.8.1/src/argus/htmx/tailwindtheme/snippets/35-cards.css +44 -0
- argus_server-2.8.1/src/argus/htmx/tailwindtheme/styles.css +13 -0
- argus_server-2.8.1/src/argus/htmx/tailwindtheme/tailwind.css +45 -0
- argus_server-2.8.1/src/argus/htmx/tailwindtheme/themes/README.md +6 -0
- argus_server-2.8.1/src/argus/htmx/tailwindtheme/themes/argus.css +24 -0
- argus_server-2.8.1/src/argus/htmx/tailwindtheme/themes/sikt-dark.css +38 -0
- argus_server-2.8.1/src/argus/htmx/tailwindtheme/themes/sikt.css +38 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/tailwindtheme/utils.py +3 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/_base_form_modal.html +13 -5
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/_base_form_modal_button.html +1 -1
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/base.html +1 -1
- argus_server-2.8.1/src/argus/htmx/templates/htmx/destination/_content.html +3 -0
- argus_server-2.8.1/src/argus/htmx/templates/htmx/destination/_destination_create_row.html +31 -0
- argus_server-2.8.1/src/argus/htmx/templates/htmx/destination/_destination_table.html +148 -0
- argus_server-2.8.1/src/argus/htmx/templates/htmx/destination/destination_list.html +17 -0
- argus_server-2.8.1/src/argus/htmx/templates/htmx/forms/choices_select_multiple.html +36 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/forms/dropdown_select_multiple.html +5 -5
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/_base_incident_table.html +1 -1
- argus_server-2.8.1/src/argus/htmx/templates/htmx/incident/_filter_controls.html +52 -0
- argus_server-2.8.1/src/argus/htmx/templates/htmx/incident/_filter_controls_script.html +124 -0
- argus_server-2.8.1/src/argus/htmx/templates/htmx/incident/_filter_delete_dialog.html +24 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/_filter_select.html +3 -1
- argus_server-2.8.1/src/argus/htmx/templates/htmx/incident/_filter_update_dialog.html +27 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/_incident_filterbox.html +2 -4
- argus_server-2.8.1/src/argus/htmx/templates/htmx/incident/_incident_list_menubar.html +5 -0
- argus_server-2.8.1/src/argus/htmx/templates/htmx/incident/_incident_list_update_menu.html +10 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/_incident_table_paginator.html +1 -5
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/_incident_table_row.html +1 -1
- argus_server-2.8.1/src/argus/htmx/templates/htmx/incident/_incident_toolbar.html +13 -0
- argus_server-2.8.1/src/argus/htmx/templates/htmx/incident/cells/_incident_age.html +8 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/cells/_incident_checkbox.html +1 -1
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/cells/_incident_compact_severity_filter.html +1 -1
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/cells/_incident_events.html +1 -1
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/cells/_incident_filterable_column_header_content.html +1 -1
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/cells/_incident_list_select_all_checkbox_header.html +1 -1
- argus_server-2.8.1/src/argus/htmx/templates/htmx/incident/cells/_incident_maintenance.html +35 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/cells/_incident_start_time_and_age.html +5 -1
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/filter_list.html +9 -7
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/incident_list.html +8 -10
- argus_server-2.8.1/src/argus/htmx/templates/htmx/notificationprofile/_notificationprofile_card.html +15 -0
- argus_server-2.8.1/src/argus/htmx/templates/htmx/notificationprofile/_notificationprofile_form.html +46 -0
- argus_server-2.8.1/src/argus/htmx/templates/htmx/notificationprofile/_notificationprofile_form_content.html +32 -0
- argus_server-2.8.1/src/argus/htmx/templates/htmx/notificationprofile/_notificationprofile_form_div.html +43 -0
- argus_server-2.8.1/src/argus/htmx/templates/htmx/notificationprofile/_notificationprofile_summary.html +42 -0
- argus_server-2.8.1/src/argus/htmx/templates/htmx/notificationprofile/base.html +15 -0
- argus_server-2.8.1/src/argus/htmx/templates/htmx/notificationprofile/notificationprofile_list.html +18 -0
- argus_server-2.8.1/src/argus/htmx/templates/htmx/notifications/_tabs.html +11 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/plannedmaintenance/_cancel_confirm_dialog.html +0 -3
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/plannedmaintenance/_delete_confirm_dialog.html +0 -3
- argus_server-2.8.1/src/argus/htmx/templates/htmx/plannedmaintenance/_filter_preview.html +23 -0
- argus_server-2.8.1/src/argus/htmx/templates/htmx/plannedmaintenance/_plannedmaintenance_form_script.html +60 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/plannedmaintenance/plannedmaintenance_form.html +34 -43
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/plannedmaintenance/plannedmaintenance_list.html +47 -7
- argus_server-2.8.1/src/argus/htmx/templates/htmx/timeslot/_timeslot_card.html +14 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/timeslot/_timeslot_form.html +16 -7
- argus_server-2.8.1/src/argus/htmx/templates/htmx/timeslot/_timeslot_form_content.html +37 -0
- argus_server-2.8.1/src/argus/htmx/templates/htmx/timeslot/_timeslot_summary.html +12 -0
- argus_server-2.8.1/src/argus/htmx/templates/htmx/timeslot/base.html +20 -0
- argus_server-2.8.1/src/argus/htmx/templates/htmx/timeslot/timerecurrence_div.html +65 -0
- argus_server-2.8.1/src/argus/htmx/templates/htmx/timeslot/timeslot_list.html +17 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/user/_preference_choice_preview_theme.html +1 -6
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/user/_user_menu.html +11 -9
- argus_server-2.8.1/src/argus/htmx/templates/htmx/user/_user_menu_notification_config.html +3 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/user/preference_form/_base_form.html +2 -2
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx_base.html +15 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/messages/_notification_message.html +2 -5
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/registration/login.html +1 -1
- argus_server-2.8.1/src/argus/htmx/templates/tailwind/styles.css +3 -0
- argus_server-2.8.1/src/argus/htmx/templates/tailwind/tailwind.css +45 -0
- argus_server-2.8.1/src/argus/htmx/themes/utils.py +113 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/timeslot/views.py +38 -20
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/urls.py +10 -3
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/incident/apps.py +0 -5
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/incident/models.py +12 -9
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/incident/signals.py +1 -25
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/incident/views.py +0 -1
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/notificationprofile/admin.py +2 -1
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/notificationprofile/apps.py +10 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/notificationprofile/factories.py +1 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/notificationprofile/media/__init__.py +10 -3
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/notificationprofile/media/base.py +48 -14
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/notificationprofile/media/email.py +14 -41
- argus_server-2.8.1/src/argus/notificationprofile/migrations/0003_destinationconfig_managed.py +18 -0
- argus_server-2.8.1/src/argus/notificationprofile/migrations/0004_move_synced_to_managed.py +30 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/notificationprofile/models.py +17 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/notificationprofile/signals.py +52 -20
- argus_server-2.8.1/src/argus/notificationprofile/tasks.py +36 -0
- argus_server-2.8.1/src/argus/notificationprofile/utils.py +29 -0
- {argus_server-2.7.0/src/argus/notificationprofile → argus_server-2.8.1/src/argus/notificationprofile/v2}/serializers.py +19 -10
- {argus_server-2.7.0/src/argus/notificationprofile → argus_server-2.8.1/src/argus/notificationprofile/v2}/views.py +18 -6
- argus_server-2.8.1/src/argus/notificationprofile/v3/serializers.py +29 -0
- argus_server-2.8.1/src/argus/notificationprofile/v3/urls.py +10 -0
- argus_server-2.8.1/src/argus/notificationprofile/v3/views.py +88 -0
- argus_server-2.8.1/src/argus/plannedmaintenance/apps.py +12 -0
- argus_server-2.8.1/src/argus/plannedmaintenance/migrations/0003_alter_plannedmaintenancetask_incidents.py +25 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/plannedmaintenance/models.py +7 -1
- argus_server-2.8.1/src/argus/plannedmaintenance/signals.py +12 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/site/api_v2_urls.py +1 -1
- argus_server-2.8.1/src/argus/site/api_v3_urls.py +14 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/site/settings/base.py +11 -1
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/site/urls.py +13 -3
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/site/views.py +4 -2
- argus_server-2.8.1/src/argus/util/testing.py +27 -0
- argus_server-2.8.1/src/argus/version.py +1 -0
- argus_server-2.8.1/tests/htmx/destination/test_views.py +273 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/htmx/incident/test_filter.py +136 -2
- argus_server-2.8.1/tests/htmx/management/test_tailwind_config.py +44 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/htmx/notificationprofile/test_forms.py +24 -0
- argus_server-2.8.1/tests/htmx/notificationprofile/test_views.py +166 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/htmx/plannedmaintenance/test_views.py +132 -2
- argus_server-2.8.1/tests/htmx/test_management_commands_tailwind_config.py +21 -0
- argus_server-2.8.1/tests/htmx/test_themes_utils.py +26 -0
- argus_server-2.8.1/tests/htmx/themes/test_utils.py +59 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/htmx/timeslot/test_views.py +82 -31
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/incident/test_incident.py +32 -0
- argus_server-2.8.1/tests/incident/unit/__init__.py +0 -0
- argus_server-2.8.1/tests/notificationprofile/destinations/__init__.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/notificationprofile/destinations/test_email.py +27 -34
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/notificationprofile/destinations/test_sms.py +1 -1
- argus_server-2.8.1/tests/notificationprofile/migrations/__init__.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/notificationprofile/test_models.py +23 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/notificationprofile/test_serializers.py +1 -1
- argus_server-2.8.1/tests/notificationprofile/test_signals.py +30 -0
- argus_server-2.8.1/tests/notificationprofile/test_tasks.py +59 -0
- argus_server-2.8.1/tests/notificationprofile/test_utils.py +30 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/notificationprofile/test_views.py +17 -6
- argus_server-2.8.1/tests/notificationprofile/v3/__init__.py +0 -0
- argus_server-2.8.1/tests/notificationprofile/v3/test_serializers.py +19 -0
- argus_server-2.8.1/tests/notificationprofile/v3/test_views.py +104 -0
- argus_server-2.8.1/tests/plannedmaintenance/__init__.py +0 -0
- argus_server-2.8.1/tests/site/__init__.py +0 -0
- argus_server-2.8.1/tests/util/__init__.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tox.ini +6 -2
- argus_server-2.7.0/docker/docker-entrypoint.sh +0 -10
- argus_server-2.7.0/docker-compose.yml +0 -31
- argus_server-2.7.0/docs/reference/img/ER_model.png +0 -0
- argus_server-2.7.0/htmlcov/.gitignore +0 -2
- argus_server-2.7.0/src/argus/htmx/destination/urls.py +0 -11
- argus_server-2.7.0/src/argus/htmx/destination/views.py +0 -139
- argus_server-2.7.0/src/argus/htmx/management/commands/tailwind_config.py +0 -120
- argus_server-2.7.0/src/argus/htmx/notificationprofile/urls.py +0 -19
- argus_server-2.7.0/src/argus/htmx/static/styles.css +0 -6611
- argus_server-2.7.0/src/argus/htmx/tailwindtheme/README.md +0 -6
- argus_server-2.7.0/src/argus/htmx/tailwindtheme/snippets/10-tailwind.css +0 -3
- argus_server-2.7.0/src/argus/htmx/tailwindtheme/snippets/15-alert-message.css +0 -23
- argus_server-2.7.0/src/argus/htmx/tailwindtheme/snippets/35-cards.css +0 -15
- argus_server-2.7.0/src/argus/htmx/tailwindtheme/styles.css +0 -6
- argus_server-2.7.0/src/argus/htmx/tailwindtheme/tailwind.config.js +0 -83
- argus_server-2.7.0/src/argus/htmx/templates/htmx/destination/_collapse_with_forms.html +0 -14
- argus_server-2.7.0/src/argus/htmx/templates/htmx/destination/_content.html +0 -4
- argus_server-2.7.0/src/argus/htmx/templates/htmx/destination/_create_form.html +0 -20
- argus_server-2.7.0/src/argus/htmx/templates/htmx/destination/_delete_form.html +0 -9
- argus_server-2.7.0/src/argus/htmx/templates/htmx/destination/_edit_form.html +0 -20
- argus_server-2.7.0/src/argus/htmx/templates/htmx/destination/_form_list.html +0 -5
- argus_server-2.7.0/src/argus/htmx/templates/htmx/destination/destination_list.html +0 -7
- argus_server-2.7.0/src/argus/htmx/templates/htmx/incident/_delete_filter_confirm_dialog.html +0 -4
- argus_server-2.7.0/src/argus/htmx/templates/htmx/incident/_existing_filters.html +0 -11
- argus_server-2.7.0/src/argus/htmx/templates/htmx/incident/_filter_controls.html +0 -6
- argus_server-2.7.0/src/argus/htmx/templates/htmx/incident/_filter_delete_dropdown.html +0 -14
- argus_server-2.7.0/src/argus/htmx/templates/htmx/incident/_filter_update_dropdown.html +0 -14
- argus_server-2.7.0/src/argus/htmx/templates/htmx/incident/_incident_list_menubar.html +0 -28
- argus_server-2.7.0/src/argus/htmx/templates/htmx/incident/_incident_list_update_menu.html +0 -10
- argus_server-2.7.0/src/argus/htmx/templates/htmx/incident/_update_filter_confirm_dialog.html +0 -5
- argus_server-2.7.0/src/argus/htmx/templates/htmx/incident/cells/_incident_age.html +0 -4
- argus_server-2.7.0/src/argus/htmx/templates/htmx/incident/cells/_incident_maintenance.html +0 -4
- argus_server-2.7.0/src/argus/htmx/templates/htmx/notificationprofile/_notificationprofile_form.html +0 -17
- argus_server-2.7.0/src/argus/htmx/templates/htmx/notificationprofile/_notificationprofile_form_div.html +0 -34
- argus_server-2.7.0/src/argus/htmx/templates/htmx/notificationprofile/base.html +0 -8
- argus_server-2.7.0/src/argus/htmx/templates/htmx/notificationprofile/notificationprofile_list.html +0 -12
- argus_server-2.7.0/src/argus/htmx/templates/htmx/timeslot/_delete_timeslot_confirm_dialog.html +0 -6
- argus_server-2.7.0/src/argus/htmx/templates/htmx/timeslot/_timeslot_detail.html +0 -16
- argus_server-2.7.0/src/argus/htmx/templates/htmx/timeslot/base.html +0 -8
- argus_server-2.7.0/src/argus/htmx/templates/htmx/timeslot/timerecurrence_div.html +0 -25
- argus_server-2.7.0/src/argus/htmx/templates/htmx/timeslot/timeslot_list.html +0 -12
- argus_server-2.7.0/src/argus/htmx/templates/htmx/user/_user_menu_notification_config.html +0 -14
- argus_server-2.7.0/src/argus/htmx/templates/tailwind/styles.css +0 -2
- argus_server-2.7.0/src/argus/htmx/templates/tailwind/tailwind.config.js +0 -34
- argus_server-2.7.0/src/argus/htmx/themes/utils.py +0 -68
- argus_server-2.7.0/src/argus/plannedmaintenance/apps.py +0 -6
- argus_server-2.7.0/src/argus/util/testing.py +0 -27
- argus_server-2.7.0/src/argus/version.py +0 -1
- {argus_server-2.7.0 → argus_server-2.8.1}/.git-blame-ignore-revs +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/.gitattributes +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/.mailmap +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/.pre-commit-config.yaml +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/.readthedocs.yaml +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/.sonarcloud.properties +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/CONTRIBUTING.rst +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/CONTRIBUTORS.md +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/Dockerfile +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/LICENSE +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/MAINTAINING.rst +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/UPGRADING.md +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/changelog.d/.gitkeep +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/cmd.sh-template +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/constraints.txt +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docker/dockersettings.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/Makefile +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/_exts/djangodocs.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/_static/.gitkeep +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/_templates/.gitkeep +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/about-argus.rst +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/customization.rst +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/development/howtos/add-more-preferences.rst +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/development/howtos/change-settings.rst +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/development/howtos/changelog-entry.rst +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/development/howtos/commit-messages.rst +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/development/howtos/customizing-filtering.rst +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/development/howtos/federated-logins.rst +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/development/howtos/howtos-for-git.rst +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/development/howtos/howtos-for-github.rst +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/development/howtos/htmx-frontend/column_for_specific_ack_group.rst +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/development/howtos/htmx-frontend/column_for_specific_tag.rst +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/development/howtos/htmx-frontend/custom-incident-actions.rst +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/development/howtos/htmx-frontend/customize-filtering.rst +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/development/howtos/htmx-frontend/dependencies.rst +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/development/howtos/htmx-frontend/font_awesome.rst +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/development/howtos/htmx-frontend.rst +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/development/howtos/notification-system-testing.rst +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/development/howtos/recover-from-migration-trouble.rst +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/development/howtos/regenerate-the-ER-diagram.rst +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/development/howtos/sonarqube.rst +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/development/howtos/toggle-django-debug-toolbar.rst +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/development/howtos/trigger-test-error-pages.rst +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/development/howtos/update-contributors.rst +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/development/howtos/vendor-a-repo.rst +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/development/howtos.rst +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/development/notes.rst +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/development/styleguide.rst +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/development/troubleshooting.rst +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/development.rst +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/django_settings.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/img/default_timeslot.png +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/img/destinations_view.png +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/img/example_timeslot.png +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/img/filter_selector.png +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/img/incident_details_view.png +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/img/incidents_filter.png +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/img/incidents_page.png +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/img/new_notification_profile.png +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/img/notification_profiles.png +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/img/synced_destination_delete_error.png +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/img/timeslots_view.png +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/img/unsaved_recurrence.png +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/img/user_menu.png +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/integrations/_note.rst +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/integrations/glue-services/index.rst +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/integrations/glue-services/writing-glueservices.rst +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/integrations/index.rst +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/integrations/notifications/email-plugin.rst +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/integrations/notifications/index.rst +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/integrations/notifications/sms-plugin.rst +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/integrations/notifications/writing-notification-plugins.rst +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/integrations/ticket-systems/index.rst +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/integrations/ticket-systems/writing-ticket-system-plugins.rst +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/make.bat +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/reference/admin.rst +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/reference/api/v2.rst +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/reference/api.rst +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/reference/authentication.rst +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/reference/glossary.rst +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/reference/img/columns/ack.png +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/reference/img/columns/ack_icon.png +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/reference/img/columns/age.png +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/reference/img/columns/color_status.png +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/reference/img/columns/combined_status.png +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/reference/img/columns/combined_status_icons.png +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/reference/img/columns/compact_level.png +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/reference/img/columns/compact_select_levels.png +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/reference/img/columns/description.png +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/reference/img/columns/end_time.png +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/reference/img/columns/has_ticket_url.png +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/reference/img/columns/id.png +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/reference/img/columns/level.png +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/reference/img/columns/narrow_end_time.png +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/reference/img/columns/narrow_start_time.png +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/reference/img/columns/row_select.png +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/reference/img/columns/search_description.png +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/reference/img/columns/search_id.png +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/reference/img/columns/search_ticket_url.png +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/reference/img/columns/select_levels.png +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/reference/img/columns/source.png +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/reference/img/columns/start_time.png +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/reference/img/columns/start_time_and_age.png +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/reference/img/columns/status.png +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/reference/img/columns/status_icon.png +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/reference/img/columns/tags.png +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/reference/img/columns/ticket.png +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/reference/img/columns/under_maintenance.png +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/reference/models.rst +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/reference/planned-maintenance.rst +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/reference.rst +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/docs/user-manual.rst +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/requirements/dev.txt +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/requirements/django52.txt +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/requirements/django60.txt +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/requirements/please-pip-sync.txt +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/requirements/test.txt +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/__init__.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/auth/__init__.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/auth/admin.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/auth/apps.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/auth/authentication.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/auth/context_processors.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/auth/drftoken/__init__.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/auth/drftoken/serializers.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/auth/drftoken/urls.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/auth/drftoken/views.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/auth/factories.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/auth/knox/__init__.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/auth/knox/serializers.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/auth/knox/urls.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/auth/knox/views.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/auth/management/__init__.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/auth/management/commands/__init__.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/auth/management/commands/changeuser.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/auth/management/commands/createuser.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/auth/management/commands/grantsuperuser.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/auth/management/commands/revokesuperuser.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/auth/management/commands/setpassword.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/auth/migrations/0001_initial.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/auth/migrations/0002_alter_user_first_name.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/auth/migrations/0002_squashed_auth_20250512_add_preferences_model.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/auth/migrations/0003_delete_phonenumber.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/auth/migrations/0004_add_preferences_model.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/auth/migrations/__init__.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/auth/models.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/auth/serializers.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/auth/urls.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/auth/utils.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/auth/views.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/base/__init__.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/base/apps.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/base/static/favicon.svg +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/base/templates/base.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/base/templates/index.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/compat.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/dev/__init__.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/dev/apps.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/dev/management/__init__.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/dev/management/commands/__init__.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/dev/management/commands/bulk_incidents.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/dev/management/commands/check_ended_maintenance.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/dev/management/commands/check_started_maintenance.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/dev/management/commands/check_token_expiry.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/dev/management/commands/close_incident.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/dev/management/commands/create_fake_incident.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/dev/management/commands/create_source.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/dev/management/commands/gen_secret_key.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/dev/management/commands/initial_setup.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/dev/management/commands/list_filters.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/dev/management/commands/stresstest.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/dev/management/commands/toggle_profile_activation.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/dev/utils.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/drf/__init__.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/drf/permissions.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/filter/__init__.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/filter/apps.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/filter/checks.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/filter/default.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/filter/factories.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/filter/filters.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/filter/filterwrapper.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/filter/primitive_serializers.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/filter/queryset_filters.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/filter/serializers.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/filter/swappable/__init__.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/filter/swappable/serializers.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/filter/validators.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/__init__.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/appconfig.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/auth/__init__.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/auth/views.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/constants.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/dateformat/__init__.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/dateformat/constants.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/destination/__init__.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/forms.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/htmx_urls.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/incident/__init__.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/incident/constants.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/incident/forms/__init__.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/incident/forms/base.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/incident/forms/incident_actions.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/incident/forms/incident_filters.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/incident/utils.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/management/__init__.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/management/commands/__init__.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/middleware.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/migrations/0001_initial.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/migrations/__init__.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/modals.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/models.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/notificationprofile/__init__.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/plannedmaintenance/__init__.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/request.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/root_urls.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/settings.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/static/choices-11.1.0.min.js +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/static/flatpickr-4.6.13.min.css +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/static/flatpickr-4.6.13.min.js +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/static/htmx-2.0.2.min.js +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/static/hyperscript-0.9.13.min.js +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/static/logo_white.svg +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/tailwindtheme/__init__.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/tailwindtheme/get_tailwind.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/tailwindtheme/snippets/20-loading-box.css +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/400.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/401.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/403.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/404.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/410.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/500.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/django/forms/errors/dict/ul.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/django/forms/errors/list/ul.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/django/forms/field.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/django/forms/label.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/django/forms/widgets/attrs.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/django/forms/widgets/checkbox.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/django/forms/widgets/checkbox_option.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/django/forms/widgets/classless_attrs.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/django/forms/widgets/date.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/django/forms/widgets/datetime.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/django/forms/widgets/input.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/django/forms/widgets/radio_option.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/django/forms/widgets/range.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/django/forms/widgets/select.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/django/forms/widgets/time.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/_base_confirm_dialog.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/_base_form_modal_experimental.html +0 -0
- /argus_server-2.7.0/src/argus/htmx/templatetags/__init__.py → /argus_server-2.8.1/src/argus/htmx/templates/htmx/_blank.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/components/_page_title.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/components/incident_list_refresh_info_select.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/forms/badge_dropdown_select_multiple.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/forms/checkbox_select_multiple.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/forms/input_field.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/forms/search_select_multiple.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/_base.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/_base_incident_update_modal.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/_filter_create_modal.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/_incident_acknowledge_modal.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/_incident_close_modal.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/_incident_list_refresh_info.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/_incident_reopen_modal.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/_incident_table.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/_incident_table_autorefresh.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/_incident_table_cell_wrapper_default.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/_incident_table_cell_wrapper_link_to_details.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/_incident_table_footer.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/_incident_table_paginator_pageitem.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/_incident_table_rows.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/_incident_ticket_autocreate_modal.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/_incident_ticket_edit_modal.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/_incident_ticket_manual_create_modal.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/_unpaged_incident_table.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/cells/_incident_ack.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/cells/_incident_ack_icon.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/cells/_incident_actions.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/cells/_incident_color_status.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/cells/_incident_combined_status.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/cells/_incident_combined_status_icons.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/cells/_incident_compact_severity_header.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/cells/_incident_description.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/cells/_incident_end_time.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/cells/_incident_filterable_column_header.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/cells/_incident_level.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/cells/_incident_level_compact.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/cells/_incident_pk.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/cells/_incident_sort_button.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/cells/_incident_sort_button_element.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/cells/_incident_sortable_column_header.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/cells/_incident_source.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/cells/_incident_source_type.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/cells/_incident_start_time.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/cells/_incident_start_time_header.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/cells/_incident_status.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/cells/_incident_status_icon.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/cells/_incident_tag.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/cells/_incident_tags.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/cells/_incident_ticket.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/cells/search_fields/input_search.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/incident_detail.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/responses/_incident_list_refresh.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/incident/responses/empty_list_item.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/notificationprofile/notificationprofile_confirm_delete.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/notificationprofile/notificationprofile_form.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/plannedmaintenance/base.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/styleguide.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/timeslot/checkbox_option.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/timeslot/timeslot_confirm_delete.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/timeslot/timeslot_form.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/user/_current_theme.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/user/_dateformat_dropdown.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/user/_incidents_table_columns_dropdown.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/user/_incidents_table_layout_dropdown.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/user/_page_size_dropdown.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/user/_preference_choice_nopreview.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/user/_preference_choice_preview_datetime.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/user/_theme_dropdown.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/user/_update_interval_dropdown.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/user/_user_menu_logout.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/user/preference_field_form.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/user/preference_form/_incident_table_form.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/user/preference_form/_incident_table_preview.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/user/preference_form/_preference_form_script.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/user/preference_form/_theme_and_format_form.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/user/preferences_list.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/htmx/user/radio_option.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/messages/_banner.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/messages/_notification_messages.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/messages/_notification_messages_htmx_append.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templates/tailwind_whitelist.html +0 -0
- {argus_server-2.7.0/src/argus/htmx/themes → argus_server-2.8.1/src/argus/htmx/templatetags}/__init__.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/templatetags/argus_htmx.py +0 -0
- {argus_server-2.7.0/src/argus/htmx/timeslot → argus_server-2.8.1/src/argus/htmx/themes}/__init__.py +0 -0
- {argus_server-2.7.0/src/argus/htmx/user/preferences → argus_server-2.8.1/src/argus/htmx/timeslot}/__init__.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/timeslot/urls.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/user/__init__.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/user/factories.py +0 -0
- {argus_server-2.7.0/src/argus/incident/migrations → argus_server-2.8.1/src/argus/htmx/user/preferences}/__init__.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/user/preferences/forms.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/user/preferences/models.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/user/preferences/utils.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/user/urls.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/user/views.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/utils.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/views.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/htmx/widgets.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/incident/__init__.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/incident/admin.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/incident/constants.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/incident/factories.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/incident/fields.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/incident/forms.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/incident/migrations/0001_initial.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/incident/migrations/0001_squashed_incident_20250514.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/incident/migrations/0002_empty_source_incident_id.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/incident/migrations/0003_incident_level.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/incident/migrations/0004_add_ChangeEvent_proxy.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/incident/migrations/0005_alter_event_type.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/incident/migrations/0006_incident_search_text.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/incident/migrations/0007_alter_event_type.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/incident/migrations/0008_incident_metadata.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/incident/migrations/0009_use_bigautofield_on_quickly_growing_tables.py +0 -0
- {argus_server-2.7.0/src/argus/incident/ticket → argus_server-2.8.1/src/argus/incident/migrations}/__init__.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/incident/serializers.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/incident/templates/incident/admin/fake_incident_add_form.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/incident/templates/incident/admin/incident_change_list.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/incident/templates/incident/admin/widgets/split_datetime_infinity.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/incident/templates/incident/ticket/default_ticket_body.html +0 -0
- {argus_server-2.7.0/src/argus/notificationprofile/migrations → argus_server-2.8.1/src/argus/incident/ticket}/__init__.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/incident/ticket/base.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/incident/ticket/dummy.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/incident/ticket/utils.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/incident/urls.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/incident/validators.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/incident/widgets.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/notificationprofile/__init__.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/notificationprofile/checks.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/notificationprofile/filterwrapper.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/notificationprofile/media/sms_as_email.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/notificationprofile/migrations/0001_squashed_0015_remove_days_alter_days_array.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/notificationprofile/migrations/0001_squashed_notificationprofile_20250512.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/notificationprofile/migrations/0002_filter_public.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/notificationprofile/migrations/0016_noop.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/notificationprofile/migrations/0017_change_event_type_to_event_types.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/notificationprofile/migrations/0018_remove_closed_and_unacked_from_filterblob.py +0 -0
- {argus_server-2.7.0/src/argus/plannedmaintenance → argus_server-2.8.1/src/argus/notificationprofile/migrations}/__init__.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/notificationprofile/templates/notificationprofile/email.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/notificationprofile/templates/notificationprofile/email.txt +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/notificationprofile/templates/schemawrapper.html +0 -0
- {argus_server-2.7.0/src/argus/plannedmaintenance/migrations → argus_server-2.8.1/src/argus/notificationprofile/v2}/__init__.py +0 -0
- {argus_server-2.7.0/src/argus/notificationprofile → argus_server-2.8.1/src/argus/notificationprofile/v2}/urls.py +0 -0
- {argus_server-2.7.0/src/argus/site → argus_server-2.8.1/src/argus/notificationprofile/v3}/__init__.py +0 -0
- {argus_server-2.7.0/src/argus/util → argus_server-2.8.1/src/argus/plannedmaintenance}/__init__.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/plannedmaintenance/admin.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/plannedmaintenance/factories.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/plannedmaintenance/migrations/0001_initial.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/plannedmaintenance/migrations/0002_incidents_connection.py +0 -0
- {argus_server-2.7.0/tests → argus_server-2.8.1/src/argus/plannedmaintenance/migrations}/__init__.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/plannedmaintenance/templates/plannedmaintenance/admin/planned_maintenance_change_form.html +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/plannedmaintenance/utils.py +0 -0
- {argus_server-2.7.0/tests/auth/management_commands → argus_server-2.8.1/src/argus/site}/__init__.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/site/logging.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/site/serializers.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/site/settings/__init__.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/site/settings/_serializers.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/site/settings/backend.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/site/settings/dev.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/site/settings/dockerdev.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/site/settings/prod.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/site/settings/test_CI.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/site/utils.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/site/wsgi.py +0 -0
- {argus_server-2.7.0/tests/dev → argus_server-2.8.1/src/argus/util}/__init__.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/util/admin_utils.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/util/datetime_utils.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/src/argus/util/utils.py +0 -0
- {argus_server-2.7.0/tests/filter → argus_server-2.8.1/tests}/__init__.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/auth/__init__.py +0 -0
- {argus_server-2.7.0/tests/htmx → argus_server-2.8.1/tests/auth/management_commands}/__init__.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/auth/management_commands/test_changeuser.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/auth/management_commands/test_createuser.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/auth/models.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/auth/test_auth.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/auth/test_knox_views.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/auth/test_models.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/auth/test_utils.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/auth/test_views.py +0 -0
- {argus_server-2.7.0/tests/htmx/incident → argus_server-2.8.1/tests/dev}/__init__.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/dev/test_bulk_incidents.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/dev/test_check_token_expiry.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/dev/test_close_incident.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/dev/test_create_fake_incident.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/dev/test_create_source.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/dev/test_gen_secret_key.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/dev/test_initial_setup.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/dev/test_list_filters.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/dev/test_toggle_profile_activation.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/dev/test_utils.py +0 -0
- {argus_server-2.7.0/tests/htmx/notificationprofile → argus_server-2.8.1/tests/filter}/__init__.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/filter/dummyplugin.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/filter/test_filter_model.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/filter/test_filterplugin.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/filter/test_filterwrapper.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/filter/test_queryset_filters.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/helpers.py +0 -0
- {argus_server-2.7.0/tests/htmx/plannedmaintenance → argus_server-2.8.1/tests/htmx}/__init__.py +0 -0
- {argus_server-2.7.0/tests/htmx/timeslot → argus_server-2.8.1/tests/htmx/destination}/__init__.py +0 -0
- {argus_server-2.7.0/tests/htmx/user → argus_server-2.8.1/tests/htmx/incident}/__init__.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/htmx/incident/test_customization.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/htmx/incident/test_forms_incident_filters.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/htmx/incident/test_utils.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/htmx/incident/test_views.py +0 -0
- {argus_server-2.7.0/tests/incident/fixtures → argus_server-2.8.1/tests/htmx/management}/__init__.py +0 -0
- {argus_server-2.7.0/tests/incident/ticket_plugins → argus_server-2.8.1/tests/htmx/notificationprofile}/__init__.py +0 -0
- {argus_server-2.7.0/tests/incident/unit → argus_server-2.8.1/tests/htmx/plannedmaintenance}/__init__.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/htmx/test_context_processors.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/htmx/test_incident_columns_rendering.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/htmx/test_middleware.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/htmx/test_templatetags.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/htmx/test_utils.py +0 -0
- {argus_server-2.7.0/tests/notificationprofile/destinations → argus_server-2.8.1/tests/htmx/themes}/__init__.py +0 -0
- {argus_server-2.7.0/tests/notificationprofile/migrations → argus_server-2.8.1/tests/htmx/timeslot}/__init__.py +0 -0
- {argus_server-2.7.0/tests/plannedmaintenance → argus_server-2.8.1/tests/htmx/user}/__init__.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/htmx/user/test_views.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/incident/__init__.py +0 -0
- {argus_server-2.7.0/tests/site → argus_server-2.8.1/tests/incident/fixtures}/__init__.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/incident/test_change_event.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/incident/test_create_fake_incident.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/incident/test_event.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/incident/test_filters.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/incident/test_incident_fields.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/incident/test_queryset.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/incident/test_serializers.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/incident/test_source_system.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/incident/test_source_system_type.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/incident/test_views.py +0 -0
- {argus_server-2.7.0/tests/util → argus_server-2.8.1/tests/incident/ticket_plugins}/__init__.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/incident/ticket_plugins/test_base.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/incident/ticket_plugins/test_dummy.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/incident/ticket_plugins/test_utils.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/incident/unit/test_incident_details_url.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/migration_example.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/notificationprofile/__init__.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/notificationprofile/test_filterwrapper.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/notificationprofile/test_github236.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/notificationprofile/test_media.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/plannedmaintenance/test_models.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/plannedmaintenance/test_utils.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/site/test_misc.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/site/test_settings_helpers.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/site/test_settings_validators.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/site/test_views.py +0 -0
- {argus_server-2.7.0 → argus_server-2.8.1}/tests/util/test_utils.py +0 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# PostToolUse hook: check test naming conventions after Edit/Write on test files.
|
|
3
|
+
# Gives Claude feedback (exit 2) so it can fix the names before committing.
|
|
4
|
+
|
|
5
|
+
INPUT=$(cat)
|
|
6
|
+
FILE_PATH=$(echo "$INPUT" | jq -r '.tool_input.file_path // empty')
|
|
7
|
+
|
|
8
|
+
# Only check test files under tests/
|
|
9
|
+
if [[ ! "$FILE_PATH" =~ ^.*/tests/.*\.py$ ]] && [[ ! "$FILE_PATH" =~ ^tests/.*\.py$ ]]; then
|
|
10
|
+
exit 0
|
|
11
|
+
fi
|
|
12
|
+
|
|
13
|
+
# Find the project root (where checks/ lives)
|
|
14
|
+
PROJECT_DIR="${CLAUDE_PROJECT_DIR:-$(git rev-parse --show-toplevel 2>/dev/null)}"
|
|
15
|
+
CHECKER="$PROJECT_DIR/checks/check_test_names.py"
|
|
16
|
+
|
|
17
|
+
if [[ ! -f "$CHECKER" ]]; then
|
|
18
|
+
exit 0
|
|
19
|
+
fi
|
|
20
|
+
|
|
21
|
+
# Make file_path relative to project root for the checker
|
|
22
|
+
REL_PATH="${FILE_PATH#"$PROJECT_DIR"/}"
|
|
23
|
+
|
|
24
|
+
output=$(python3 "$CHECKER" --files "$REL_PATH" 2>&1)
|
|
25
|
+
exit_code=$?
|
|
26
|
+
|
|
27
|
+
if [[ $exit_code -ne 0 ]]; then
|
|
28
|
+
echo "$output" >&2
|
|
29
|
+
exit 2
|
|
30
|
+
fi
|
|
@@ -8,6 +8,10 @@
|
|
|
8
8
|
!.pre-commit-config.yaml
|
|
9
9
|
!.readthedocs.yaml
|
|
10
10
|
!.sonarcloud.properties
|
|
11
|
+
!.claude/
|
|
12
|
+
.claude/*
|
|
13
|
+
!.claude/settings.json
|
|
14
|
+
!.claude/hooks/
|
|
11
15
|
!.mailmap
|
|
12
16
|
|
|
13
17
|
# local config files
|
|
@@ -43,9 +47,12 @@ spasettings.py
|
|
|
43
47
|
*$py.class
|
|
44
48
|
|
|
45
49
|
# Tailwind CSS
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
50
|
+
src/argus/htmx/static/styles.css
|
|
51
|
+
src/argus/htmx/tailwindtheme/styles.css
|
|
52
|
+
src/argus/htmx/tailwindtheme/tailwind.css
|
|
53
|
+
src/argus/htmx/tailwindtheme/custom-themes/*
|
|
54
|
+
!src/argus/htmx/tailwindtheme/custom-themes/README.md
|
|
55
|
+
|
|
49
56
|
# OS specific
|
|
50
57
|
src/argus/htmx/tailwindtheme/tailwindcss
|
|
51
58
|
|
|
@@ -8,6 +8,117 @@ This project uses [*towncrier*](https://towncrier.readthedocs.io/) and the chang
|
|
|
8
8
|
|
|
9
9
|
<!-- towncrier release notes start -->
|
|
10
10
|
|
|
11
|
+
## [2.8.1] - 2026-04-28
|
|
12
|
+
|
|
13
|
+
Mini-release to help something depending on the production docker image.
|
|
14
|
+
|
|
15
|
+
### Fixed
|
|
16
|
+
|
|
17
|
+
- Use `django-admin` to call `initial_setup` instead of `python3 manage.py` in
|
|
18
|
+
production image
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
## [2.8.0] - 2026-03-06
|
|
22
|
+
|
|
23
|
+
The most important change in this release is that we have finally added the
|
|
24
|
+
long awaited task queue, to handle background tasks. The task queue uses the
|
|
25
|
+
database for storage by default so running migrations is necessary. As part of
|
|
26
|
+
using the queue to send notifications we fixed several bugs that caused a lower
|
|
27
|
+
amount of notifications to be sent than expected. Another big change is we have
|
|
28
|
+
upgraded tailwind, which affects theme customization and building packages.
|
|
29
|
+
|
|
30
|
+
You *must* see the NOTES before updating if you or your deployment do any of
|
|
31
|
+
the following:
|
|
32
|
+
|
|
33
|
+
- Send notifications (`SEND_NOTIFICATIONS = True`). Affected both by the new
|
|
34
|
+
queue and the bug-fixes.
|
|
35
|
+
- Alter any templates or CSS, due to the upgrade of tailwind.
|
|
36
|
+
- Replace or rework the incident list filter box.
|
|
37
|
+
- Write your own media plugins.
|
|
38
|
+
- Build your own package (useful for bundling themes and tweaks). The release
|
|
39
|
+
checklist has changed.
|
|
40
|
+
|
|
41
|
+
### Added
|
|
42
|
+
|
|
43
|
+
- Added support for a task queue. We're using `django-tasks`, which is in the
|
|
44
|
+
process of being merged into Django proper, with the backend
|
|
45
|
+
`django-tasks-db`. This stores the tasks in the same database as everything
|
|
46
|
+
else. We're currently only using the queue to send notifications, so if you
|
|
47
|
+
are not using argus for that (`SEND_NOTIFICATIONS` is off), nothing changes.
|
|
48
|
+
([#1608](https://github.com/Uninett/Argus/issues/1608))
|
|
49
|
+
- Add "Create copy" action for planned maintenance tasks
|
|
50
|
+
([#1613](https://github.com/Uninett/Argus/issues/1613))
|
|
51
|
+
- Show name of owner for public filters
|
|
52
|
+
([#1748](https://github.com/Uninett/Argus/issues/1748))
|
|
53
|
+
- Add preview of incidents covered by selected filters in planned maintenance
|
|
54
|
+
task form ([#1765](https://github.com/Uninett/Argus/issues/1765))
|
|
55
|
+
- Create admin user from env variables in docker entrypoint
|
|
56
|
+
([#1776](https://github.com/Uninett/Argus/issues/1776))
|
|
57
|
+
- Validate `DAISYUI_THEMES` entries, skipping invalid ones with warnings
|
|
58
|
+
([#1819](https://github.com/Uninett/Argus/issues/1819))
|
|
59
|
+
- Add Sikt light and dark DaisyUI themes based on Sikt Design System color
|
|
60
|
+
tokens ([#1822](https://github.com/Uninett/Argus/issues/1822))
|
|
61
|
+
|
|
62
|
+
### Changed
|
|
63
|
+
|
|
64
|
+
- Upgrade to Tailwind CSS v4 and DaisyUI v5. See NOTES for theme customization.
|
|
65
|
+
([#1262](https://github.com/Uninett/Argus/issues/1262))
|
|
66
|
+
- We are now using a task queue to send notifications instead of forking off
|
|
67
|
+
a process. This is to increase robustness and hopefully to increase
|
|
68
|
+
throughput. If argus is being used to send notifications, you MUST change
|
|
69
|
+
your deployment as there now is an additional service that needs to run in
|
|
70
|
+
order to handle the notifications on the queue. See the NOTES!
|
|
71
|
+
([#1608](https://github.com/Uninett/Argus/issues/1608))
|
|
72
|
+
- Refactor incident list filter UI with collapsible filterbox and dynamic bulk
|
|
73
|
+
actions bar. ([#1693](https://github.com/Uninett/Argus/issues/1693))
|
|
74
|
+
- Improve maintenance column by adding a dropdown with tasks that affect the
|
|
75
|
+
incident ([#1745](https://github.com/Uninett/Argus/issues/1745))
|
|
76
|
+
- Support searching for filters by first and last name of user
|
|
77
|
+
([#1764](https://github.com/Uninett/Argus/issues/1764))
|
|
78
|
+
- Added under maintenance column to maintenance column preset
|
|
79
|
+
([#1775](https://github.com/Uninett/Argus/issues/1775))
|
|
80
|
+
- Improve timeslot form with compact table layout for time recurrences
|
|
81
|
+
([#1794](https://github.com/Uninett/Argus/issues/1794))
|
|
82
|
+
- Consolidate notification routes under /notifications/ with tab navigation
|
|
83
|
+
([#1795](https://github.com/Uninett/Argus/issues/1795))
|
|
84
|
+
- Improve notification profile form with collapsible cards and inline actions
|
|
85
|
+
([#1796](https://github.com/Uninett/Argus/issues/1796))
|
|
86
|
+
- Moved some functionality from the email media plugin to the base class of all
|
|
87
|
+
media plugins. Basically, any destination can now be marked as being
|
|
88
|
+
"managed", which means that it is created and managed by a system outside of
|
|
89
|
+
an end-users control. This can be for instance email addresses or phone
|
|
90
|
+
numbers fetched from an account-database or address book.
|
|
91
|
+
([#1802](https://github.com/Uninett/Argus/issues/1802))
|
|
92
|
+
- Redesign destination page as flat table with inline editing
|
|
93
|
+
([#1806](https://github.com/Uninett/Argus/issues/1806))
|
|
94
|
+
- Tailwind CSS intermediate files (theme CSS, config snippets) are no longer
|
|
95
|
+
tracked in git. See NOTES.
|
|
96
|
+
([#1826](https://github.com/Uninett/Argus/issues/1826))
|
|
97
|
+
- Redesign filter toolbar with compact icon buttons and direct filter actions
|
|
98
|
+
([#1831](https://github.com/Uninett/Argus/issues/1831))
|
|
99
|
+
|
|
100
|
+
### Fixed
|
|
101
|
+
|
|
102
|
+
- Notifications are now also sent on bulk changes to incidents. Note that for
|
|
103
|
+
filters used for sending notifications, it will be necessary to control event
|
|
104
|
+
types to maintain the current expected amount of notifications sent. See
|
|
105
|
+
NOTES. ([#1763](https://github.com/Uninett/Argus/issues/1763))
|
|
106
|
+
- Limit choices of incidents field in PM admin to open incidents
|
|
107
|
+
([#1789](https://github.com/Uninett/Argus/issues/1789))
|
|
108
|
+
- Make it possible to use public filters in notification profiles
|
|
109
|
+
([#1805](https://github.com/Uninett/Argus/issues/1805))
|
|
110
|
+
- Fixed a bug where the setting that controls whether notifications will be
|
|
111
|
+
sent was ignored when sending notifications in the background. The
|
|
112
|
+
notifications were sent regardless.
|
|
113
|
+
([#1808](https://github.com/Uninett/Argus/issues/1808))
|
|
114
|
+
- Allow for multiple notification profiles with no name
|
|
115
|
+
([#1828](https://github.com/Uninett/Argus/issues/1828))
|
|
116
|
+
- Fix showing age for stateless incidents
|
|
117
|
+
([#1833](https://github.com/Uninett/Argus/issues/1833))
|
|
118
|
+
- Fix theme preview showing wrong foreground text color on color swatches
|
|
119
|
+
([#1834](https://github.com/Uninett/Argus/issues/1834))
|
|
120
|
+
|
|
121
|
+
|
|
11
122
|
## [2.7.0] - 2026-01-23
|
|
12
123
|
|
|
13
124
|
This release improves the UX for creating planned maintenance tasks, by having
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.PHONY: clean testclean distclean coverageclean cacheclean nuke tailwind docclean upgrade-tailwind tailwind-watch
|
|
1
|
+
.PHONY: clean testclean distclean coverageclean cacheclean nuke setup-tailwind tailwind-config tailwind-build-config tailwind docclean upgrade-tailwind tailwind-watch check-test-names
|
|
2
2
|
|
|
3
3
|
TAILWINDDIR=src/argus/htmx/tailwindtheme
|
|
4
4
|
STATICDIR=src/argus/htmx/static
|
|
@@ -31,11 +31,22 @@ testclean: coverageclean clean
|
|
|
31
31
|
|
|
32
32
|
nuke: clean docclean distclean testclean cacheclean
|
|
33
33
|
|
|
34
|
+
setup-tailwind: upgrade-tailwind tailwind-config tailwind
|
|
35
|
+
|
|
36
|
+
tailwind-config:
|
|
37
|
+
PYTHONPATH=$(PYTHONPATH) python3 manage.py tailwind_config
|
|
38
|
+
|
|
39
|
+
tailwind-build-config:
|
|
40
|
+
PYTHONPATH=$(PYTHONPATH) python3 src/argus/htmx/tailwindtheme/generate_css_config.py
|
|
41
|
+
|
|
34
42
|
tailwind:
|
|
35
|
-
$(TAILWINDDIR)/tailwindcss -
|
|
43
|
+
$(TAILWINDDIR)/tailwindcss -i $(TAILWINDDIR)/styles.css -o $(STATICDIR)/styles.css
|
|
36
44
|
|
|
37
45
|
tailwind-watch:
|
|
38
|
-
$(TAILWINDDIR)/tailwindcss -
|
|
46
|
+
$(TAILWINDDIR)/tailwindcss -i $(TAILWINDDIR)/styles.css -o $(STATICDIR)/styles.css --watch
|
|
39
47
|
|
|
40
48
|
upgrade-tailwind:
|
|
41
49
|
PYTHONPATH=$(PYTHONPATH) python3 src/argus/htmx/tailwindtheme/get_tailwind.py
|
|
50
|
+
|
|
51
|
+
check-test-names:
|
|
52
|
+
python3 checks/check_test_names.py --base main
|
|
@@ -3,6 +3,133 @@
|
|
|
3
3
|
This file documents changes to Argus that are relevant for operations,
|
|
4
4
|
customizers and end-users.
|
|
5
5
|
|
|
6
|
+
## [2.8.0] - 2026-03-06
|
|
7
|
+
|
|
8
|
+
This release adds an important new dependency, django-tasks-db, which brings
|
|
9
|
+
with it a new table. Remember to freshen installed dependencies, then migrate.
|
|
10
|
+
|
|
11
|
+
### Sending notifications via a task queue
|
|
12
|
+
|
|
13
|
+
We are now using a task queue to send notifications instead of forking off
|
|
14
|
+
a process. This is to increase robustness and hopefully to increase throughput.
|
|
15
|
+
If argus is being used to send notifications, you MUST change your deployment
|
|
16
|
+
as there now is an additional service that needs to run in order to handle the
|
|
17
|
+
notifications on the queue.
|
|
18
|
+
|
|
19
|
+
There is a new management command `db_worker` used to proceess the queue. In
|
|
20
|
+
order to send out notifications, this command needs to run supervised by
|
|
21
|
+
something. The included docker-compose for development already does this, but
|
|
22
|
+
if using for instance Kubernetes it should run in its own pod, and if running
|
|
23
|
+
on hardware it needs to be handled by for instance systemd, supervisor, nosh,
|
|
24
|
+
s6 or daemontools. See the new production section of the documentation.
|
|
25
|
+
|
|
26
|
+
If your argus sends no or very few notifications, it might be relevant to
|
|
27
|
+
override the settings file to use
|
|
28
|
+
`django_tasks.backends.immediate.ImmediateBackend`, see the site settings
|
|
29
|
+
docs.
|
|
30
|
+
|
|
31
|
+
### Themes and looks
|
|
32
|
+
|
|
33
|
+
Tailwind has been upgraded to v4 and DaisyUI to v5. Check out the
|
|
34
|
+
[DaisyUi 5 theme-generator](https://daisyui.com/theme-generator/)!
|
|
35
|
+
|
|
36
|
+
- Custom themes defined in `DAISYUI_THEMES` must now use CSS variable syntax
|
|
37
|
+
with explicit `--color-` prefixes (e.g., `"--color-primary": "#006d91"`).
|
|
38
|
+
- The `TAILWIND_THEME_OVERRIDE` setting has been removed. Use CSS `@theme`
|
|
39
|
+
blocks in a `themes/override.css` file instead.
|
|
40
|
+
|
|
41
|
+
The Makefile has grown several new commands and the release checklist has been
|
|
42
|
+
updated to take them into account.
|
|
43
|
+
|
|
44
|
+
See the updated documentation for full details on theme customization.
|
|
45
|
+
|
|
46
|
+
Tailwind CSS intermediate files (theme CSS, config snippets) are no longer
|
|
47
|
+
tracked in git.
|
|
48
|
+
|
|
49
|
+
- Local theme customizations via `DAISYUI_THEMES` will no longer dirty the
|
|
50
|
+
working tree.
|
|
51
|
+
- Use `make tailwind-config tailwind` (needs virtualenv) after changing themes
|
|
52
|
+
or settings.
|
|
53
|
+
- Use `make setup-tailwind` (needs virtualenv) to bootstrap CSS from scratch
|
|
54
|
+
(fresh clone or CI).
|
|
55
|
+
|
|
56
|
+
### Frontend, incident list filter box: templates refactored, looks updated
|
|
57
|
+
|
|
58
|
+
The work that started in 2.7 continues. The filter box in its hidden state now
|
|
59
|
+
takes up even less space than it used to, and when open it now takes up less
|
|
60
|
+
height. The bulk action bar has been made more dynamic; it is easier to see
|
|
61
|
+
which filter has been selected, and the Delete and Update buttons work on thge
|
|
62
|
+
currently selected fiilter.
|
|
63
|
+
|
|
64
|
+
If you do not use the filterbox but you do support bulk actions you might have
|
|
65
|
+
to update your templates again.
|
|
66
|
+
|
|
67
|
+
A reminder:
|
|
68
|
+
|
|
69
|
+
The template `_incident_list_menubar.html` is deprecated; override
|
|
70
|
+
`_incident_toolbar.html` or `_filter_controls.html` instead.
|
|
71
|
+
|
|
72
|
+
### All notification plugins now supports "managed" mode
|
|
73
|
+
|
|
74
|
+
A "managed" destination is not managed by an end-user but fetched/generated
|
|
75
|
+
from somewhere else. Such a destination cannot be deleted.
|
|
76
|
+
|
|
77
|
+
It used to be only the bundled email media plugin had this functionality, we've
|
|
78
|
+
moved it to the base class and renamed it from "synced" to "managed". This is
|
|
79
|
+
most useful for phone numbers and email addresses.
|
|
80
|
+
|
|
81
|
+
Media plugins will need to be updated if they override any of the methods
|
|
82
|
+
`validate`, `raise_if_not_deletable` or `update`. Media plugins are now
|
|
83
|
+
instantiated with what API version of the settings-field they should return,
|
|
84
|
+
and for that reason `validate` has become an instance method as opposed to
|
|
85
|
+
a classmethod. `raise_if_not_deletable` and `update` has grown in size on the
|
|
86
|
+
base class and might not need to be overidden anymore.
|
|
87
|
+
|
|
88
|
+
### More notifications will be generated and sent
|
|
89
|
+
|
|
90
|
+
Notifications are now also sent on bulk changes to incidents. This means that
|
|
91
|
+
by default there will be notifications if the API alters incidents in bulk, or
|
|
92
|
+
an end user alters incidents in the frontend. This means more notifications,
|
|
93
|
+
and it may mean *a lot more* notifications. One per changed incident.
|
|
94
|
+
|
|
95
|
+
If you want the full fire hose of notifications site-wide you need do
|
|
96
|
+
nothing.
|
|
97
|
+
|
|
98
|
+
To maintain a lower amount of notifications it is necessary to alter the "Event
|
|
99
|
+
types" filter to care only about source-initiated changes to the incident
|
|
100
|
+
status.
|
|
101
|
+
|
|
102
|
+
Note: It might not lower the amount all the way back to the levels before
|
|
103
|
+
this bugfix, as it depends on whether any glue-services used the bulk API to
|
|
104
|
+
alter multiple incidents at once. Previously, notifications for those changes
|
|
105
|
+
would be suppressed.
|
|
106
|
+
|
|
107
|
+
The easiest and fastest way to get back to lower levels of notifications is by
|
|
108
|
+
changing the Django setting `ARGUS_FALLBACK_FILTER` to:
|
|
109
|
+
|
|
110
|
+
```
|
|
111
|
+
ARGUS_FALLBACK_FILTER = {"event_types": ["STA", "END"]}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
This affects all existing and future notification filters, and can be
|
|
115
|
+
overridden by end-users themselves.
|
|
116
|
+
|
|
117
|
+
End-users themselves can get back the old, low amount of notifications via the
|
|
118
|
+
frontend by creating a filter with "Event Types" set to both:
|
|
119
|
+
|
|
120
|
+
- Incident start
|
|
121
|
+
- Incident end
|
|
122
|
+
|
|
123
|
+
… and adding that to their existing notification profiles. This will override
|
|
124
|
+
what's set in `ARGUS_FALLBACK_FILTER`.
|
|
125
|
+
|
|
126
|
+
A third option is adding a public filter "Source-initiated status changes" via
|
|
127
|
+
admin and using the admin to add that filter to all notification profiles that
|
|
128
|
+
don't explicitly set event types.
|
|
129
|
+
|
|
130
|
+
`ARGUS_FALLBACK_FILTER` will not affect what's shown on the dashboard or
|
|
131
|
+
filters used for planned maintenance.
|
|
132
|
+
|
|
6
133
|
## [2.7.0] - 2026-01-23
|
|
7
134
|
|
|
8
135
|
### Planned maintenance
|
|
@@ -50,6 +177,26 @@ of events that happened if the start of the incident was not covered by
|
|
|
50
177
|
a notification timeslot. This might mean more notifications! Please set the
|
|
51
178
|
`event types` filter to only the types of events desired.
|
|
52
179
|
|
|
180
|
+
### Incident list filter UI refactoring
|
|
181
|
+
|
|
182
|
+
The incident list filter UI has been refactored. The tabbed interface with
|
|
183
|
+
"Filter Incidents" and "Update Incidents" tabs has been replaced with:
|
|
184
|
+
|
|
185
|
+
- A collapsible filterbox (hidden by default, toggled with "Show/Hide filters")
|
|
186
|
+
- A dynamic bulk actions bar that appears when rows are selected
|
|
187
|
+
|
|
188
|
+
**Template changes for customizers:**
|
|
189
|
+
|
|
190
|
+
The template `_incident_list_menubar.html` is now **deprecated** and will be
|
|
191
|
+
removed in a future version. It currently acts as a shim that includes the new
|
|
192
|
+
`_incident_toolbar.html` template.
|
|
193
|
+
|
|
194
|
+
If you have overridden `_incident_list_menubar.html`, your override will still
|
|
195
|
+
be loaded, but you should migrate to the new templates:
|
|
196
|
+
|
|
197
|
+
- `_incident_toolbar.html`: Contains the full toolbar (filter controls + bulk actions)
|
|
198
|
+
- `_filter_controls.html`: Contains the filter select dropdown, CRUD buttons, and show/hide toggle
|
|
199
|
+
|
|
53
200
|
## [2.6.0] - 2026-01-06
|
|
54
201
|
|
|
55
202
|
This is a tiny release to finish up what was started at the end of 2025.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: argus-server
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.8.1
|
|
4
4
|
Summary: Argus is an alert aggregator for monitoring systems
|
|
5
5
|
Project-URL: Homepage, https://github.com/Uninett/Argus
|
|
6
6
|
Author-email: Uninett Opensource <opensource@uninett.no>
|
|
@@ -25,6 +25,7 @@ Requires-Dist: django-filter
|
|
|
25
25
|
Requires-Dist: django-htmx
|
|
26
26
|
Requires-Dist: django-phonenumber-field[phonenumberslite]
|
|
27
27
|
Requires-Dist: django-rest-knox
|
|
28
|
+
Requires-Dist: django-tasks-db
|
|
28
29
|
Requires-Dist: django-widget-tweaks==1.5.0
|
|
29
30
|
Requires-Dist: django<6.1,>=5.2.8
|
|
30
31
|
Requires-Dist: djangorestframework>=3.14
|
|
@@ -192,7 +193,7 @@ $ docker compose up
|
|
|
192
193
|
Run the initial Argus setup, and make note of the admin password that is generated:
|
|
193
194
|
|
|
194
195
|
```console
|
|
195
|
-
$ docker compose exec
|
|
196
|
+
$ docker compose exec argus django-admin initial_setup
|
|
196
197
|
******************************************************************************
|
|
197
198
|
|
|
198
199
|
Created Argus superuser "admin" with password "ns6bfoKquW12koIP".
|
|
@@ -132,7 +132,7 @@ $ docker compose up
|
|
|
132
132
|
Run the initial Argus setup, and make note of the admin password that is generated:
|
|
133
133
|
|
|
134
134
|
```console
|
|
135
|
-
$ docker compose exec
|
|
135
|
+
$ docker compose exec argus django-admin initial_setup
|
|
136
136
|
******************************************************************************
|
|
137
137
|
|
|
138
138
|
Created Argus superuser "admin" with password "ns6bfoKquW12koIP".
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Check that new test method names follow the given/when/then/it_should convention.
|
|
3
|
+
|
|
4
|
+
Scans git diff for newly added test methods and warns if they lack
|
|
5
|
+
convention keywords (given, when, then, should).
|
|
6
|
+
|
|
7
|
+
Usage:
|
|
8
|
+
# Check staged changes (pre-commit)
|
|
9
|
+
python checks/check_test_names.py
|
|
10
|
+
|
|
11
|
+
# Check branch diff against main
|
|
12
|
+
python checks/check_test_names.py --base main
|
|
13
|
+
|
|
14
|
+
# Check specific files
|
|
15
|
+
python checks/check_test_names.py --files tests/test_foo.py tests/test_bar.py
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
import argparse
|
|
19
|
+
import re
|
|
20
|
+
import subprocess
|
|
21
|
+
import sys
|
|
22
|
+
|
|
23
|
+
KEYWORDS = {"given", "when", "then"}
|
|
24
|
+
PHRASE_KEYWORDS = {"it_should"}
|
|
25
|
+
TEST_DEF_RE = re.compile(r"^\+\s*def (test_\w+)\(")
|
|
26
|
+
TEST_FILE_RE = re.compile(r"^tests/.*\.py$")
|
|
27
|
+
|
|
28
|
+
# Matches: +++ b/tests/some/path.py
|
|
29
|
+
DIFF_FILE_RE = re.compile(r"^\+\+\+ b/(.+)$")
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def get_new_test_names_from_diff(diff: str) -> list[tuple[str, str]]:
|
|
33
|
+
"""Extract (filename, test_name) pairs from added lines in a diff."""
|
|
34
|
+
results = []
|
|
35
|
+
current_file = None
|
|
36
|
+
|
|
37
|
+
for line in diff.splitlines():
|
|
38
|
+
file_match = DIFF_FILE_RE.match(line)
|
|
39
|
+
if file_match:
|
|
40
|
+
path = file_match.group(1)
|
|
41
|
+
current_file = path if TEST_FILE_RE.match(path) else None
|
|
42
|
+
continue
|
|
43
|
+
|
|
44
|
+
if current_file is None:
|
|
45
|
+
continue
|
|
46
|
+
|
|
47
|
+
test_match = TEST_DEF_RE.match(line)
|
|
48
|
+
if test_match:
|
|
49
|
+
results.append((current_file, test_match.group(1)))
|
|
50
|
+
|
|
51
|
+
return results
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def check_name(name: str) -> bool:
|
|
55
|
+
"""Return True if the test name contains at least one convention keyword."""
|
|
56
|
+
lower = name.lower()
|
|
57
|
+
parts = set(lower.split("_"))
|
|
58
|
+
if parts & KEYWORDS:
|
|
59
|
+
return True
|
|
60
|
+
return any(phrase in lower for phrase in PHRASE_KEYWORDS)
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def get_diff_staged() -> str:
|
|
64
|
+
result = subprocess.run(
|
|
65
|
+
["git", "diff", "--cached", "--unified=0"],
|
|
66
|
+
capture_output=True,
|
|
67
|
+
text=True,
|
|
68
|
+
)
|
|
69
|
+
return result.stdout
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def get_diff_base(base: str) -> str:
|
|
73
|
+
merge_base = subprocess.run(
|
|
74
|
+
["git", "merge-base", base, "HEAD"],
|
|
75
|
+
capture_output=True,
|
|
76
|
+
text=True,
|
|
77
|
+
)
|
|
78
|
+
base_ref = merge_base.stdout.strip()
|
|
79
|
+
if not base_ref:
|
|
80
|
+
print(f"Could not find merge base with {base}", file=sys.stderr)
|
|
81
|
+
sys.exit(2)
|
|
82
|
+
|
|
83
|
+
result = subprocess.run(
|
|
84
|
+
["git", "diff", base_ref, "HEAD", "--unified=0"],
|
|
85
|
+
capture_output=True,
|
|
86
|
+
text=True,
|
|
87
|
+
)
|
|
88
|
+
return result.stdout
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
def get_diff_files(files: list[str]) -> str:
|
|
92
|
+
"""Read files and pretend all test defs are new (for checking specific files)."""
|
|
93
|
+
lines = []
|
|
94
|
+
for path in files:
|
|
95
|
+
if not TEST_FILE_RE.match(path):
|
|
96
|
+
continue
|
|
97
|
+
lines.append(f"+++ b/{path}")
|
|
98
|
+
try:
|
|
99
|
+
with open(path) as f:
|
|
100
|
+
for line in f:
|
|
101
|
+
stripped = line.rstrip()
|
|
102
|
+
if re.match(r"\s*def test_\w+\(", stripped):
|
|
103
|
+
lines.append(f"+{stripped}")
|
|
104
|
+
except FileNotFoundError:
|
|
105
|
+
print(f"File not found: {path}", file=sys.stderr)
|
|
106
|
+
return "\n".join(lines)
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
def format_plain(violations, total):
|
|
110
|
+
lines = [
|
|
111
|
+
f"{len(violations)} of {total} new test name(s) missing convention keywords (given/when/then/it_should):\n"
|
|
112
|
+
]
|
|
113
|
+
for filepath, name in violations:
|
|
114
|
+
lines.append(f" {filepath}: {name}")
|
|
115
|
+
lines.append(
|
|
116
|
+
"\nConsider rephrasing with given/when/then/it_should, e.g.:"
|
|
117
|
+
"\n test_when_no_incidents_then_returns_empty_list"
|
|
118
|
+
"\n test_it_should_create_incident_with_set_description"
|
|
119
|
+
"\n test_given_expired_token_when_refreshing_then_raises_error"
|
|
120
|
+
)
|
|
121
|
+
return "\n".join(lines)
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
def format_markdown(violations, total):
|
|
125
|
+
lines = [
|
|
126
|
+
"> [!WARNING]",
|
|
127
|
+
f"> **{len(violations)}** of **{total}** new test names are missing"
|
|
128
|
+
" convention keywords (`given`/`when`/`then`/`it_should`)",
|
|
129
|
+
"",
|
|
130
|
+
"| File | Test name |",
|
|
131
|
+
"|------|-----------|",
|
|
132
|
+
]
|
|
133
|
+
for filepath, name in violations:
|
|
134
|
+
lines.append(f"| `{filepath}` | `{name}` |")
|
|
135
|
+
lines.extend(
|
|
136
|
+
[
|
|
137
|
+
"",
|
|
138
|
+
"<details>",
|
|
139
|
+
"<summary>Why am I seeing this?</summary>",
|
|
140
|
+
"",
|
|
141
|
+
"Test names should follow a loose **given/when/then** pattern with"
|
|
142
|
+
" keywords like `given`, `when`, `then`, or `it_should`."
|
|
143
|
+
" This is a suggestion, not a blocker."
|
|
144
|
+
" The check runs on new test methods added in this PR.",
|
|
145
|
+
"",
|
|
146
|
+
"Examples:",
|
|
147
|
+
"- `test_when_no_incidents_then_returns_empty_list`",
|
|
148
|
+
"- `test_it_should_create_incident_with_set_description`",
|
|
149
|
+
"- `test_given_expired_token_when_refreshing_then_raises_error`",
|
|
150
|
+
"</details>",
|
|
151
|
+
]
|
|
152
|
+
)
|
|
153
|
+
return "\n".join(lines)
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
def main():
|
|
157
|
+
parser = argparse.ArgumentParser(description=__doc__)
|
|
158
|
+
parser.add_argument(
|
|
159
|
+
"--base",
|
|
160
|
+
help="Base branch to diff against (e.g. main). If omitted, checks staged changes.",
|
|
161
|
+
)
|
|
162
|
+
parser.add_argument(
|
|
163
|
+
"--files",
|
|
164
|
+
nargs="+",
|
|
165
|
+
help="Check all test names in specific files (ignores git diff).",
|
|
166
|
+
)
|
|
167
|
+
parser.add_argument(
|
|
168
|
+
"--format",
|
|
169
|
+
choices=["plain", "markdown"],
|
|
170
|
+
default="plain",
|
|
171
|
+
dest="output_format",
|
|
172
|
+
help="Output format (default: plain).",
|
|
173
|
+
)
|
|
174
|
+
args = parser.parse_args()
|
|
175
|
+
|
|
176
|
+
if args.files:
|
|
177
|
+
diff = get_diff_files(args.files)
|
|
178
|
+
elif args.base:
|
|
179
|
+
diff = get_diff_base(args.base)
|
|
180
|
+
else:
|
|
181
|
+
diff = get_diff_staged()
|
|
182
|
+
|
|
183
|
+
new_tests = get_new_test_names_from_diff(diff)
|
|
184
|
+
|
|
185
|
+
if not new_tests:
|
|
186
|
+
return
|
|
187
|
+
|
|
188
|
+
violations = [(f, name) for f, name in new_tests if not check_name(name)]
|
|
189
|
+
|
|
190
|
+
if not violations:
|
|
191
|
+
print(f"All {len(new_tests)} new test name(s) follow the naming convention.")
|
|
192
|
+
return
|
|
193
|
+
|
|
194
|
+
formatter = format_markdown if args.output_format == "markdown" else format_plain
|
|
195
|
+
print(formatter(violations, len(new_tests)))
|
|
196
|
+
sys.exit(1)
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
if __name__ == "__main__":
|
|
200
|
+
main()
|
|
@@ -36,6 +36,8 @@ ENV DJANGO_SETTINGS_MODULE=dockersettings
|
|
|
36
36
|
|
|
37
37
|
ENV PORT=8000
|
|
38
38
|
EXPOSE 8000
|
|
39
|
-
COPY docker/
|
|
39
|
+
COPY docker/cmd-argus.sh /cmd-argus.sh
|
|
40
|
+
COPY docker/cmd-dbqueue.sh /cmd-dbqueue.sh
|
|
40
41
|
USER argus
|
|
41
|
-
ENTRYPOINT ["/usr/bin/tini", "-v", "--"
|
|
42
|
+
ENTRYPOINT ["/usr/bin/tini", "-v", "--"]
|
|
43
|
+
CMD ["/cmd-argus.sh"]
|
|
@@ -18,6 +18,17 @@ Or, from the top level directory:
|
|
|
18
18
|
docker build -t argus -f docker/Dockerfile .
|
|
19
19
|
```
|
|
20
20
|
|
|
21
|
+
## Services
|
|
22
|
+
|
|
23
|
+
While this image provides the necessary environment for the backend processes,
|
|
24
|
+
it defaults to running only the argus server itself (via `cmd-argus.sh`). In
|
|
25
|
+
addition to an argus container, a second container is needed to process
|
|
26
|
+
notifications asynchronously. The second container needs to run from this same
|
|
27
|
+
image, but with the command overridden to `cmd-dbqueue.sh`
|
|
28
|
+
|
|
29
|
+
The "db_worker" command used in that script comes from django-tasks, and is
|
|
30
|
+
used to process a message queue of tasks to complete in the background.
|
|
31
|
+
|
|
21
32
|
## Configuration of the running container
|
|
22
33
|
|
|
23
34
|
This image runs with default production settings, with a few tweaks from
|