argus-server 2.2.0__tar.gz → 2.2.2__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.2.0 → argus_server-2.2.2}/CHANGELOG.md +38 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/Dockerfile +6 -2
- {argus_server-2.2.0 → argus_server-2.2.2}/Makefile +5 -2
- {argus_server-2.2.0 → argus_server-2.2.2}/NOTES.md +15 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/PKG-INFO +30 -22
- {argus_server-2.2.0 → argus_server-2.2.2}/README.md +29 -21
- {argus_server-2.2.0 → argus_server-2.2.2}/docker/Dockerfile +6 -2
- {argus_server-2.2.0 → argus_server-2.2.2}/docker/README.md +16 -3
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/howtos/howtos-for-github.rst +1 -1
- argus_server-2.2.2/docs/development/styleguide.rst +23 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/development.rst +1 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/integrations/glue-services/index.rst +11 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/pyproject.toml +6 -1
- {argus_server-2.2.0 → argus_server-2.2.2}/requirements-django52.txt +3 -3
- {argus_server-2.2.0 → argus_server-2.2.2}/requirements.txt +3 -3
- argus_server-2.2.2/src/argus/htmx/forms.py +73 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/incident/filter.py +11 -7
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/incident/forms.py +1 -1
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/static/styles.css +50 -14
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/tailwindtheme/config.py +1 -0
- argus_server-2.2.2/src/argus/htmx/templates/django/forms/errors/dict/ul.html +5 -0
- argus_server-2.2.2/src/argus/htmx/templates/django/forms/errors/list/ul.html +6 -0
- argus_server-2.2.2/src/argus/htmx/templates/django/forms/field.html +20 -0
- argus_server-2.2.2/src/argus/htmx/templates/django/forms/label.html +13 -0
- argus_server-2.2.2/src/argus/htmx/templates/django/forms/widgets/checkbox.html +6 -0
- argus_server-2.2.2/src/argus/htmx/templates/django/forms/widgets/checkbox_option.html +12 -0
- argus_server-2.2.2/src/argus/htmx/templates/django/forms/widgets/classless_attrs.html +9 -0
- argus_server-2.2.2/src/argus/htmx/templates/django/forms/widgets/date.html +6 -0
- argus_server-2.2.2/src/argus/htmx/templates/django/forms/widgets/datetime.html +6 -0
- argus_server-2.2.2/src/argus/htmx/templates/django/forms/widgets/input.html +6 -0
- argus_server-2.2.2/src/argus/htmx/templates/django/forms/widgets/radio_option.html +12 -0
- argus_server-2.2.2/src/argus/htmx/templates/django/forms/widgets/range.html +5 -0
- argus_server-2.2.2/src/argus/htmx/templates/django/forms/widgets/select.html +12 -0
- argus_server-2.2.2/src/argus/htmx/templates/django/forms/widgets/time.html +8 -0
- argus_server-2.2.2/src/argus/htmx/templates/htmx/styleguide.html +188 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/timeslot/timerecurrence_div.html +1 -1
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/user/_incidents_table_layout_dropdown.html +3 -3
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/registration/login.html +1 -9
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/timeslot/views.py +0 -1
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/urls.py +2 -1
- argus_server-2.2.2/src/argus/htmx/views.py +39 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/notificationprofile/media/__init__.py +24 -4
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/notificationprofile/media/base.py +40 -4
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/notificationprofile/media/email.py +18 -22
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/notificationprofile/media/sms_as_email.py +11 -15
- argus_server-2.2.2/src/argus/version.py +1 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/notificationprofile/test_media.py +21 -5
- argus_server-2.2.0/docker-entrypoint.sh +0 -7
- argus_server-2.2.0/manage.py +0 -24
- argus_server-2.2.0/src/argus/htmx/templates/django/forms/div.html +0 -28
- argus_server-2.2.0/src/argus/htmx/views.py +0 -9
- argus_server-2.2.0/src/argus/version.py +0 -1
- {argus_server-2.2.0 → argus_server-2.2.2}/.git-blame-ignore-revs +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/.gitattributes +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/.gitignore +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/.mailmap +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/.pre-commit-config.yaml +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/.readthedocs.yaml +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/.sonarcloud.properties +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/CONTRIBUTING.rst +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/CONTRIBUTORS.md +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/LICENSE +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/MAINTAINING.rst +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/UPGRADING.md +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/changelog.d/.gitkeep +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/cmd.sh-template +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/codecov.yml +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/constraints.txt +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docker/docker-entrypoint.sh +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docker/dockersettings.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docker-compose.yml +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/Makefile +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/_exts/djangodocs.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/_static/.gitkeep +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/_templates/.gitkeep +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/about-argus.rst +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/conf.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/customization/htmx-frontend.rst +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/customization.rst +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/howtos/add-more-preferences.rst +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/howtos/change-settings.rst +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/howtos/changelog-entry.rst +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/howtos/commit-messages.rst +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/howtos/customizing-filtering.rst +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/howtos/federated-logins.rst +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/howtos/howtos-for-git.rst +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/howtos/htmx-frontend/column_for_specific_ack_group.rst +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/howtos/htmx-frontend/column_for_specific_tag.rst +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/howtos/htmx-frontend/custom-incident-actions.rst +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/howtos/htmx-frontend/customize-filtering.rst +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/howtos/htmx-frontend/dependencies.rst +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/howtos/htmx-frontend/font_awesome.rst +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/howtos/htmx-frontend/override_templates.rst +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/howtos/htmx-frontend.rst +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/howtos/notification-system-testing.rst +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/howtos/recover-from-migration-trouble.rst +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/howtos/regenerate-the-ER-diagram.rst +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/howtos/release-checklist.rst +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/howtos/toggle-django-debug-toolbar.rst +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/howtos/update-contributors.rst +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/howtos/vendor-a-repo.rst +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/howtos.rst +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/makefile-rules.rst +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/management-commands.rst +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/notes.rst +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/troubleshooting.rst +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/django_settings.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/img/default_timeslot.png +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/img/destinations_view.png +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/img/example_timeslot.png +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/img/filter_selector.png +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/img/incident_details_view.png +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/img/incidents_filter.png +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/img/incidents_page.png +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/img/new_notification_profile.png +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/img/notification_profiles.png +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/img/synced_destination_delete_error.png +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/img/timeslots_view.png +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/img/unsaved_recurrence.png +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/img/user_menu.png +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/index.rst +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/integrations/_note.rst +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/integrations/glue-services/writing-glueservices.rst +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/integrations/index.rst +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/integrations/notifications/email-plugin.rst +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/integrations/notifications/index.rst +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/integrations/notifications/sms-plugin.rst +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/integrations/notifications/writing-notification-plugins.rst +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/integrations/ticket-systems/index.rst +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/integrations/ticket-systems/writing-ticket-system-plugins.rst +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/make.bat +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/reference/admin.rst +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/reference/api/v2.rst +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/reference/api.rst +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/reference/authentication.rst +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/reference/glossary.rst +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/reference/htmx-frontend.rst +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/reference/img/ER_model.png +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/reference/models.rst +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/reference/site-specific-settings.rst +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/reference.rst +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/docs/user-manual.rst +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/requirements/dev.txt +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/requirements/django52.txt +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/requirements/please-pip-sync.txt +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/requirements/test.txt +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/admin.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/apps.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/authentication.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/context_processors.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/drftoken/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/drftoken/serializers.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/drftoken/urls.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/drftoken/views.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/factories.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/knox/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/knox/serializers.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/knox/urls.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/knox/views.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/management/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/management/commands/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/management/commands/changeuser.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/management/commands/createuser.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/management/commands/grantsuperuser.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/management/commands/revokesuperuser.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/management/commands/setpassword.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/migrations/0001_initial.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/migrations/0002_alter_user_first_name.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/migrations/0002_squashed_auth_20250512_add_preferences_model.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/migrations/0003_delete_phonenumber.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/migrations/0004_add_preferences_model.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/migrations/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/models.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/serializers.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/urls.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/utils.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/views.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/base/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/base/apps.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/base/static/favicon.svg +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/base/templates/base.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/base/templates/index.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/compat.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/dev/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/dev/apps.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/dev/management/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/dev/management/commands/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/dev/management/commands/bulk_incidents.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/dev/management/commands/check_token_expiry.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/dev/management/commands/close_incident.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/dev/management/commands/create_fake_incident.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/dev/management/commands/create_source.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/dev/management/commands/gen_secret_key.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/dev/management/commands/initial_setup.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/dev/management/commands/list_filters.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/dev/management/commands/stresstest.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/dev/management/commands/toggle_profile_activation.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/dev/utils.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/drf/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/drf/permissions.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/filter/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/filter/apps.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/filter/checks.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/filter/default.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/filter/factories.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/filter/filters.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/filter/filterwrapper.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/filter/primitive_serializers.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/filter/queryset_filters.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/filter/serializers.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/filter/swappable/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/filter/swappable/serializers.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/filter/validators.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/appconfig.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/apps.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/auth/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/auth/views.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/checks.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/constants.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/context_processors.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/dateformat/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/dateformat/constants.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/defaults.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/destination/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/destination/forms.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/destination/urls.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/destination/views.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/htmx_urls.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/incident/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/incident/constants.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/incident/customization.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/incident/urls.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/incident/utils.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/incident/views.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/management/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/management/commands/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/management/commands/tailwind_config.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/middleware.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/migrations/0001_initial.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/migrations/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/modals.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/models.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/notificationprofile/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/notificationprofile/urls.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/notificationprofile/views.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/request.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/root_urls.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/settings.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/static/htmx-2.0.2.min.js +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/static/hyperscript-0.9.13.min.js +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/static/logo_white.svg +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/tailwindtheme/README.md +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/tailwindtheme/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/tailwindtheme/get_tailwind.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/tailwindtheme/snippets/10-tailwind.css +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/tailwindtheme/snippets/15-alert-message.css +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/tailwindtheme/snippets/20-loading-box.css +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/tailwindtheme/styles.css +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/tailwindtheme/tailwind.config.js +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/tailwindtheme/utils.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/django/forms/widgets/attrs.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/_base_confirm_dialog.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/_base_form_modal.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/_base_form_modal_button.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/_base_form_modal_experimental.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/base.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/destination/_collapse_with_forms.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/destination/_content.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/destination/_create_form.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/destination/_delete_form.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/destination/_edit_form.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/destination/_form_list.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/destination/destination_list.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/forms/badge_dropdown_select_multiple.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/forms/checkbox_select_multiple.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/forms/dropdown_select_multiple.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/forms/input_field.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_base.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_base_incident_update_modal.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_delete_filter_confirm_dialog.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_existing_filters.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_filter_controls.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_filter_create_modal.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_filter_delete_dropdown.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_filter_select.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_filter_update_dropdown.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_incident_acknowledge_modal.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_incident_close_modal.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_incident_filterbox.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_incident_list_menubar.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_incident_list_refresh_info.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_incident_list_update_menu.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_incident_reopen_modal.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_incident_table.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_incident_table_cell_wrapper_default.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_incident_table_cell_wrapper_link_to_details.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_incident_table_paginator.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_incident_table_paginator_pageitem.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_incident_table_row.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_incident_table_rows.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_incident_ticket_autocreate_modal.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_incident_ticket_edit_modal.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_incident_ticket_manual_create_modal.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_update_filter_confirm_dialog.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/cells/_incident_ack.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/cells/_incident_actions.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/cells/_incident_checkbox.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/cells/_incident_color_status.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/cells/_incident_combined_status.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/cells/_incident_description.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/cells/_incident_filterable_column_header.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/cells/_incident_level.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/cells/_incident_list_select_all_checkbox_header.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/cells/_incident_pk.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/cells/_incident_source.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/cells/_incident_start_time.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/cells/_incident_start_time_header.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/cells/_incident_status.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/cells/_incident_tag.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/cells/_incident_ticket.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/filter_list.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/incident_detail.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/incident_list.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/responses/_incident_list_refresh.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/responses/empty_list_item.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/notificationprofile/_notificationprofile_form.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/notificationprofile/_notificationprofile_form_div.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/notificationprofile/base.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/notificationprofile/notificationprofile_confirm_delete.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/notificationprofile/notificationprofile_form.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/notificationprofile/notificationprofile_list.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/timeslot/_delete_timeslot_confirm_dialog.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/timeslot/_timeslot_detail.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/timeslot/_timeslot_form.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/timeslot/base.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/timeslot/checkbox_option.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/timeslot/timeslot_confirm_delete.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/timeslot/timeslot_form.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/timeslot/timeslot_list.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/user/_current_theme.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/user/_dateformat_dropdown.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/user/_page_size_dropdown.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/user/_theme_dropdown.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/user/_update_interval_dropdown.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/user/_user_menu.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/user/_user_menu_logout.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/user/_user_menu_notification_config.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/user/_user_menu_user_preferences.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/user/preferences.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx_base.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/messages/_notification_message.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/messages/_notification_messages.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/messages/_notification_messages_htmx_append.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/tailwind/styles.css +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/tailwind/tailwind.config.js +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/tailwind_whitelist.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templatetags/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templatetags/argus_htmx.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/themes/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/themes/constants.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/themes/utils.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/timeslot/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/timeslot/urls.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/user/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/user/preferences/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/user/preferences/models.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/user/urls.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/user/views.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/utils.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/widgets.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/admin.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/apps.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/constants.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/factories.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/fields.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/forms.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/migrations/0001_initial.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/migrations/0001_squashed_incident_20250514.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/migrations/0002_empty_source_incident_id.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/migrations/0003_incident_level.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/migrations/0004_add_ChangeEvent_proxy.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/migrations/0005_alter_event_type.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/migrations/0006_incident_search_text.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/migrations/0007_alter_event_type.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/migrations/0008_incident_metadata.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/migrations/0009_use_bigautofield_on_quickly_growing_tables.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/migrations/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/models.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/serializers.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/signals.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/templates/incident/admin/fake_incident_add_form.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/templates/incident/admin/incident_change_list.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/templates/incident/admin/widgets/split_datetime_infinity.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/templates/incident/ticket/default_ticket_body.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/ticket/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/ticket/base.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/ticket/dummy.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/ticket/utils.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/urls.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/validators.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/views.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/widgets.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/notificationprofile/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/notificationprofile/admin.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/notificationprofile/apps.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/notificationprofile/checks.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/notificationprofile/factories.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/notificationprofile/migrations/0001_squashed_0015_remove_days_alter_days_array.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/notificationprofile/migrations/0001_squashed_notificationprofile_20250512.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/notificationprofile/migrations/0016_noop.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/notificationprofile/migrations/0017_change_event_type_to_event_types.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/notificationprofile/migrations/0018_remove_closed_and_unacked_from_filterblob.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/notificationprofile/migrations/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/notificationprofile/models.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/notificationprofile/serializers.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/notificationprofile/signals.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/notificationprofile/templates/notificationprofile/email.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/notificationprofile/templates/notificationprofile/email.txt +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/notificationprofile/templates/schemawrapper.html +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/notificationprofile/urls.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/notificationprofile/views.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/site/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/site/api_v2_urls.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/site/logging.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/site/serializers.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/site/settings/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/site/settings/_serializers.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/site/settings/backend.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/site/settings/base.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/site/settings/dev.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/site/settings/dockerdev.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/site/settings/prod.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/site/settings/test_CI.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/site/urls.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/site/utils.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/site/views.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/site/wsgi.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/util/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/util/admin_utils.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/util/datetime_utils.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/util/testing.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/util/utils.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/auth/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/auth/management_commands/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/auth/management_commands/test_changeuser.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/auth/management_commands/test_createuser.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/auth/models.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/auth/test_auth.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/auth/test_knox_views.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/auth/test_models.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/auth/test_utils.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/auth/test_views.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/dev/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/dev/test_bulk_incidents.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/dev/test_check_token_expiry.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/dev/test_close_incident.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/dev/test_create_fake_incident.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/dev/test_create_source.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/dev/test_gen_secret_key.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/dev/test_initial_setup.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/dev/test_list_filters.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/dev/test_toggle_profile_activation.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/dev/test_utils.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/filter/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/filter/dummyplugin.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/filter/test_filterplugin.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/filter/test_filterwrapper.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/filter/test_queryset_filters.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/helpers.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/htmx/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/htmx/incident/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/htmx/incident/test_customization.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/htmx/incident/test_filter.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/htmx/incident/test_utils.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/htmx/notificationprofile/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/htmx/notificationprofile/test_forms.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/htmx/test_incident.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/htmx/test_middleware.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/htmx/test_utils.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/incident/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/incident/fixtures/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/incident/test_change_event.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/incident/test_create_fake_incident.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/incident/test_event.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/incident/test_filters.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/incident/test_incident.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/incident/test_incident_fields.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/incident/test_queryset.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/incident/test_serializers.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/incident/test_source_system.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/incident/test_source_system_type.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/incident/test_views.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/incident/ticket_plugins/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/incident/ticket_plugins/test_base.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/incident/ticket_plugins/test_dummy.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/incident/ticket_plugins/test_utils.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/incident/unit/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/incident/unit/test_incident_details_url.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/migration_example.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/notificationprofile/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/notificationprofile/destinations/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/notificationprofile/destinations/test_email.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/notificationprofile/destinations/test_sms.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/notificationprofile/migrations/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/notificationprofile/test_github236.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/notificationprofile/test_models.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/notificationprofile/test_serializers.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/notificationprofile/test_views.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/site/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/site/test_misc.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/site/test_settings_helpers.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/site/test_settings_validators.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/site/test_views.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/util/__init__.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tests/util/test_utils.py +0 -0
- {argus_server-2.2.0 → argus_server-2.2.2}/tox.ini +0 -0
|
@@ -8,6 +8,44 @@ This project uses [*towncrier*](https://towncrier.readthedocs.io/) and the chang
|
|
|
8
8
|
|
|
9
9
|
<!-- towncrier release notes start -->
|
|
10
10
|
|
|
11
|
+
## [2.2.2] - 2025-11-03
|
|
12
|
+
|
|
13
|
+
### Added
|
|
14
|
+
|
|
15
|
+
- Added the beginnings of a style guide at /styleguide/. The look of the form
|
|
16
|
+
inputs that were not manually laid out have in some cases also changed, for
|
|
17
|
+
greater consistency. ([#1558](https://github.com/Uninett/Argus/issues/1558))
|
|
18
|
+
- Added `zino-argus-glue` to documented list of known glue services
|
|
19
|
+
|
|
20
|
+
### Changed
|
|
21
|
+
|
|
22
|
+
- Increased logging verbosity when finding destinations for notifications and
|
|
23
|
+
actually sending the notifications, to aid in debugging production systems.
|
|
24
|
+
Now also logs which destination id's are found and used.
|
|
25
|
+
([#1563](https://github.com/Uninett/Argus/issues/1563))
|
|
26
|
+
|
|
27
|
+
### Fixed
|
|
28
|
+
|
|
29
|
+
- The development docker compose had stopped working due to changes outside of
|
|
30
|
+
our control (pip, git, the very distro) and has been updated.
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
## [2.2.1] - 2025-09-18
|
|
34
|
+
|
|
35
|
+
### Fixed, frontend
|
|
36
|
+
|
|
37
|
+
* The incident list layout preference selector is no longer buggy
|
|
38
|
+
|
|
39
|
+
### Fixed
|
|
40
|
+
|
|
41
|
+
* Some problems with the dockerfile for production was fixed (see /docker), and
|
|
42
|
+
the README and the comments in the Dockerfile have been improved
|
|
43
|
+
|
|
44
|
+
### Changed
|
|
45
|
+
|
|
46
|
+
* Updated the installation instructions in the README, should have ben part of
|
|
47
|
+
2.2.0
|
|
48
|
+
|
|
11
49
|
## [2.2.0] - 2025-08-26
|
|
12
50
|
|
|
13
51
|
The most important bit of this release is the new (old) way to install and set
|
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
# This Dockerfile is designed to run a development environment for Argus,
|
|
2
2
|
# with the Argus source code tree mounted at /argus
|
|
3
3
|
#
|
|
4
|
-
FROM python:3.
|
|
4
|
+
FROM python:3.13-trixie
|
|
5
5
|
ENV DEBIAN_FRONTEND=noninteractive
|
|
6
6
|
|
|
7
7
|
RUN apt-get update && apt-get install -y --no-install-recommends tini \
|
|
8
|
-
build-essential libpq-dev libffi-dev libssl-dev
|
|
8
|
+
build-essential libpq-dev libffi-dev libssl-dev git
|
|
9
9
|
RUN mkdir -p /argus
|
|
10
10
|
COPY requirements.txt /argus
|
|
11
11
|
COPY requirements/*.txt /argus/requirements/
|
|
12
12
|
|
|
13
|
+
ENV VIRTUAL_ENV=/opt/venv
|
|
14
|
+
RUN python3 -m venv $VIRTUAL_ENV
|
|
15
|
+
ENV PATH="$VIRTUAL_ENV/bin:$PATH"
|
|
16
|
+
|
|
13
17
|
WORKDIR /argus
|
|
14
18
|
RUN pip install gunicorn -r requirements.txt -r /argus/requirements/dev.txt
|
|
15
19
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.PHONY: clean testclean distclean coverageclean cacheclean nuke tailwind docclean upgrade-tailwind
|
|
1
|
+
.PHONY: clean testclean distclean coverageclean cacheclean nuke tailwind docclean upgrade-tailwind tailwind-watch
|
|
2
2
|
|
|
3
3
|
TAILWINDDIR=src/argus/htmx/tailwindtheme
|
|
4
4
|
STATICDIR=src/argus/htmx/static
|
|
@@ -32,7 +32,10 @@ testclean: coverageclean clean
|
|
|
32
32
|
nuke: clean docclean distclean testclean cacheclean
|
|
33
33
|
|
|
34
34
|
tailwind:
|
|
35
|
-
tailwindcss -c $(TAILWINDDIR)/tailwind.config.js -i $(TAILWINDDIR)/styles.css -o $(STATICDIR)/styles.css
|
|
35
|
+
$(TAILWINDDIR)/tailwindcss -c $(TAILWINDDIR)/tailwind.config.js -i $(TAILWINDDIR)/styles.css -o $(STATICDIR)/styles.css
|
|
36
|
+
|
|
37
|
+
tailwind-watch:
|
|
38
|
+
$(TAILWINDDIR)/tailwindcss -c $(TAILWINDDIR)/tailwind.config.js -i $(TAILWINDDIR)/styles.css -o $(STATICDIR)/styles.css --watch
|
|
36
39
|
|
|
37
40
|
upgrade-tailwind:
|
|
38
41
|
PYTHONPATH=$(PYTHONPATH) python3 src/argus/htmx/tailwindtheme/get_tailwind.py
|
|
@@ -3,6 +3,21 @@
|
|
|
3
3
|
This file documents changes to Argus that are relevant for operations,
|
|
4
4
|
customizers and end-users.
|
|
5
5
|
|
|
6
|
+
## [2.2.2] - 2025-11-03
|
|
7
|
+
|
|
8
|
+
To aid in development there a live styleguide for the frontend on
|
|
9
|
+
`/styleguide`.
|
|
10
|
+
|
|
11
|
+
Logging verbosity has increased for sending notifications.
|
|
12
|
+
|
|
13
|
+
Otherwise: typos have been fixed, a new glue service has been added to the
|
|
14
|
+
documentation, the development docker-compose setup should be working again.
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
## [2.2.1] - 2025-09-18
|
|
18
|
+
|
|
19
|
+
A bug in the user preference added in 2.1.0 was fixed, otherwise this is just
|
|
20
|
+
a polish this, document that, upgrade some dependencies release.
|
|
6
21
|
|
|
7
22
|
## [2.2.0] - 2025-08-26
|
|
8
23
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: argus-server
|
|
3
|
-
Version: 2.2.
|
|
3
|
+
Version: 2.2.2
|
|
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>
|
|
@@ -105,40 +105,35 @@ There are several ways to install Argus.
|
|
|
105
105
|
* Docker and Docker Compose to run Argus in Docker. This will also run
|
|
106
106
|
a PostgreSQL server for you.
|
|
107
107
|
|
|
108
|
-
#### Optional: Frontend
|
|
109
|
-
|
|
110
|
-
You need to have the frontend-specific dependencies installed.
|
|
111
|
-
|
|
112
|
-
```
|
|
113
|
-
pip install argus-server[htmx]
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
will do it.
|
|
117
|
-
|
|
118
108
|
#### Optional: Federated login for frontend
|
|
119
109
|
|
|
120
110
|
See [Federated Login @ Read The Docs](https://argus-server.rtfd.io/en/latest/development/howtos/federated-logins.html) or [local copy of Federated Login docs](docs/development/howtos/federated-logins.rst).
|
|
121
111
|
|
|
122
|
-
### Install Argus using pip
|
|
112
|
+
### Install Argus using pip from PyPI
|
|
123
113
|
|
|
124
|
-
You can
|
|
114
|
+
You can install Argus with `pip` via PyPI. The package name is `argus-server`:
|
|
125
115
|
```console
|
|
126
116
|
$ pip install argus-server
|
|
127
117
|
```
|
|
128
118
|
|
|
129
|
-
If you are using the PyPI package in production, please note:
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
of sub-dependencies so as to not poison the pyproject.toml.
|
|
119
|
+
If you are using the PyPI wheel package in production, please note: It does
|
|
120
|
+
not use pinned dependencies. (There is no single official standard for pinned
|
|
121
|
+
dependencies in Python as of yet.)
|
|
133
122
|
|
|
134
|
-
|
|
123
|
+
### Install Argus from source
|
|
135
124
|
|
|
125
|
+
Download the source code first.
|
|
136
126
|
```console
|
|
137
|
-
$
|
|
138
|
-
$
|
|
127
|
+
$ git clone https://github.com/Uninett/Argus.git
|
|
128
|
+
$ cd Argus
|
|
139
129
|
```
|
|
140
130
|
|
|
141
|
-
|
|
131
|
+
PyPI has sdists of the source if you do not want to use git.
|
|
132
|
+
|
|
133
|
+
The file `requirements.txt` contains the pinned versions of dependencies that
|
|
134
|
+
the release was tested on. The file `constraints.txt` is for controlling
|
|
135
|
+
versions of sub-dependencies so as to not poison the pyproject.toml. The wheel
|
|
136
|
+
package does not contain either of these two files.
|
|
142
137
|
|
|
143
138
|
To install from the lock-file use pip:
|
|
144
139
|
|
|
@@ -146,6 +141,8 @@ To install from the lock-file use pip:
|
|
|
146
141
|
$ pip install -c constraints.txt --upgrade -r requirements.txt
|
|
147
142
|
```
|
|
148
143
|
|
|
144
|
+
### First run
|
|
145
|
+
|
|
149
146
|
Now change and adapt [Argus' settings](#settings-in-argus) according to your needs.
|
|
150
147
|
|
|
151
148
|
Run the initial Argus setup, and make note of the admin password that is generated:
|
|
@@ -167,6 +164,17 @@ Then run the Argus API server:
|
|
|
167
164
|
$ python manage.py runserver
|
|
168
165
|
```
|
|
169
166
|
|
|
167
|
+
#### Update pinned dependencies
|
|
168
|
+
|
|
169
|
+
To update the dependency lock-files, use `tox`:
|
|
170
|
+
|
|
171
|
+
```console
|
|
172
|
+
$ pip install "tox>=4"
|
|
173
|
+
$ tox run -e upgrade-deps -- -U
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
To upgrade a single dependency, replace the `-U` flag with `-P PACKAGENAME`.
|
|
177
|
+
|
|
170
178
|
### Setup Argus using Docker Compose
|
|
171
179
|
|
|
172
180
|
Download the source code first.
|
|
@@ -222,7 +230,7 @@ $ git clone https://github.com/Uninett/Argus.git
|
|
|
222
230
|
$ cd Argus
|
|
223
231
|
```
|
|
224
232
|
|
|
225
|
-
We recommend using virtualenv or
|
|
233
|
+
We recommend using virtualenv or virtualenvwrapper to create
|
|
226
234
|
a place to stash Argus' dependencies.
|
|
227
235
|
|
|
228
236
|
Create and activate a Python virtual environment.
|
|
@@ -46,40 +46,35 @@ There are several ways to install Argus.
|
|
|
46
46
|
* Docker and Docker Compose to run Argus in Docker. This will also run
|
|
47
47
|
a PostgreSQL server for you.
|
|
48
48
|
|
|
49
|
-
#### Optional: Frontend
|
|
50
|
-
|
|
51
|
-
You need to have the frontend-specific dependencies installed.
|
|
52
|
-
|
|
53
|
-
```
|
|
54
|
-
pip install argus-server[htmx]
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
will do it.
|
|
58
|
-
|
|
59
49
|
#### Optional: Federated login for frontend
|
|
60
50
|
|
|
61
51
|
See [Federated Login @ Read The Docs](https://argus-server.rtfd.io/en/latest/development/howtos/federated-logins.html) or [local copy of Federated Login docs](docs/development/howtos/federated-logins.rst).
|
|
62
52
|
|
|
63
|
-
### Install Argus using pip
|
|
53
|
+
### Install Argus using pip from PyPI
|
|
64
54
|
|
|
65
|
-
You can
|
|
55
|
+
You can install Argus with `pip` via PyPI. The package name is `argus-server`:
|
|
66
56
|
```console
|
|
67
57
|
$ pip install argus-server
|
|
68
58
|
```
|
|
69
59
|
|
|
70
|
-
If you are using the PyPI package in production, please note:
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
of sub-dependencies so as to not poison the pyproject.toml.
|
|
60
|
+
If you are using the PyPI wheel package in production, please note: It does
|
|
61
|
+
not use pinned dependencies. (There is no single official standard for pinned
|
|
62
|
+
dependencies in Python as of yet.)
|
|
74
63
|
|
|
75
|
-
|
|
64
|
+
### Install Argus from source
|
|
76
65
|
|
|
66
|
+
Download the source code first.
|
|
77
67
|
```console
|
|
78
|
-
$
|
|
79
|
-
$
|
|
68
|
+
$ git clone https://github.com/Uninett/Argus.git
|
|
69
|
+
$ cd Argus
|
|
80
70
|
```
|
|
81
71
|
|
|
82
|
-
|
|
72
|
+
PyPI has sdists of the source if you do not want to use git.
|
|
73
|
+
|
|
74
|
+
The file `requirements.txt` contains the pinned versions of dependencies that
|
|
75
|
+
the release was tested on. The file `constraints.txt` is for controlling
|
|
76
|
+
versions of sub-dependencies so as to not poison the pyproject.toml. The wheel
|
|
77
|
+
package does not contain either of these two files.
|
|
83
78
|
|
|
84
79
|
To install from the lock-file use pip:
|
|
85
80
|
|
|
@@ -87,6 +82,8 @@ To install from the lock-file use pip:
|
|
|
87
82
|
$ pip install -c constraints.txt --upgrade -r requirements.txt
|
|
88
83
|
```
|
|
89
84
|
|
|
85
|
+
### First run
|
|
86
|
+
|
|
90
87
|
Now change and adapt [Argus' settings](#settings-in-argus) according to your needs.
|
|
91
88
|
|
|
92
89
|
Run the initial Argus setup, and make note of the admin password that is generated:
|
|
@@ -108,6 +105,17 @@ Then run the Argus API server:
|
|
|
108
105
|
$ python manage.py runserver
|
|
109
106
|
```
|
|
110
107
|
|
|
108
|
+
#### Update pinned dependencies
|
|
109
|
+
|
|
110
|
+
To update the dependency lock-files, use `tox`:
|
|
111
|
+
|
|
112
|
+
```console
|
|
113
|
+
$ pip install "tox>=4"
|
|
114
|
+
$ tox run -e upgrade-deps -- -U
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
To upgrade a single dependency, replace the `-U` flag with `-P PACKAGENAME`.
|
|
118
|
+
|
|
111
119
|
### Setup Argus using Docker Compose
|
|
112
120
|
|
|
113
121
|
Download the source code first.
|
|
@@ -163,7 +171,7 @@ $ git clone https://github.com/Uninett/Argus.git
|
|
|
163
171
|
$ cd Argus
|
|
164
172
|
```
|
|
165
173
|
|
|
166
|
-
We recommend using virtualenv or
|
|
174
|
+
We recommend using virtualenv or virtualenvwrapper to create
|
|
167
175
|
a place to stash Argus' dependencies.
|
|
168
176
|
|
|
169
177
|
Create and activate a Python virtual environment.
|
|
@@ -2,16 +2,20 @@
|
|
|
2
2
|
# Needs the repository root directory as its context:
|
|
3
3
|
#
|
|
4
4
|
# If you're in the same dorectory as this Dockerfile try:
|
|
5
|
-
# docker build ..
|
|
5
|
+
# docker build -f Dockerfile ..
|
|
6
6
|
#
|
|
7
7
|
# If you're in the repository root try:
|
|
8
8
|
# docker build -f docker/Dockerfile .
|
|
9
9
|
|
|
10
|
-
FROM python:3.
|
|
10
|
+
FROM python:3.13-trixie
|
|
11
11
|
ENV DEBIAN_FRONTEND=noninteractive
|
|
12
12
|
|
|
13
13
|
RUN apt-get update && apt-get install -y --no-install-recommends tini build-essential
|
|
14
14
|
|
|
15
|
+
ENV VIRTUAL_ENV=/opt/venv
|
|
16
|
+
RUN python3 -m venv $VIRTUAL_ENV
|
|
17
|
+
ENV PATH="$VIRTUAL_ENV/bin:$PATH"
|
|
18
|
+
|
|
15
19
|
# Install some dev requirements that aren't part of the minimal dependencies:
|
|
16
20
|
RUN pip install psycopg2-binary django-extensions python-dotenv gunicorn
|
|
17
21
|
|
|
@@ -21,10 +21,23 @@ docker build -t argus -f docker/Dockerfile .
|
|
|
21
21
|
## Configuration of the running container
|
|
22
22
|
|
|
23
23
|
This image runs with default production settings, with a few tweaks from
|
|
24
|
-
[dockersettings.py](dockersettings.py).
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
[dockersettings.py](dockersettings.py). The most useful settings can be
|
|
25
|
+
overriden through the use of environment variables exported to the container,
|
|
26
|
+
but some MUST be set.
|
|
27
|
+
|
|
28
|
+
The required environment variables in question are:
|
|
29
|
+
|
|
30
|
+
* `ARGUS_FRONTEND_URL` (url)
|
|
31
|
+
* `DATABASE_URL` (example: postgresql://argus:PASSWORD@HOST.NAME:5432/argus)
|
|
32
|
+
* `DEFAULT_FROM_EMAIL` (email address)
|
|
33
|
+
* `EMAIL_HOST` (hostname or ip address)
|
|
34
|
+
* `SECRET_KEY` (long random string, around 50 characters is good)
|
|
35
|
+
|
|
36
|
+
The `SECRET_KEY` and `DATABASE_URL` should be protected from prying eyes.
|
|
37
|
+
|
|
38
|
+
Consult the documentation section on [site-specific
|
|
27
39
|
settings](http://argus-server.rtfd.io/en/latest/site-specific-settings.html).
|
|
40
|
+
for further details.
|
|
28
41
|
|
|
29
42
|
## Limitations
|
|
30
43
|
|
|
@@ -23,4 +23,4 @@ magic address GitHub provides for you, then you need to toggle "Keep my email
|
|
|
23
23
|
addresses private" on the same page to "On". You can even prevent commits not
|
|
24
24
|
using the magic address from being pushed to GitHub.
|
|
25
25
|
|
|
26
|
-
See `Setting your commit email address at GitHub<https://docs.github.com/en/account-and-profile/how-tos/setting-up-and-managing-your-personal-account-on-github/managing-email-preferences/setting-your-commit-email-address>`_ for more information.
|
|
26
|
+
See `Setting your commit email address at GitHub <https://docs.github.com/en/account-and-profile/how-tos/setting-up-and-managing-your-personal-account-on-github/managing-email-preferences/setting-your-commit-email-address>`_ for more information.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
============================
|
|
2
|
+
Style guide for web frontend
|
|
3
|
+
============================
|
|
4
|
+
|
|
5
|
+
There's a live style guide on ``/styleguide/``. It contains a live form so that
|
|
6
|
+
you can experiment with form input to see what a valid and invalid form looks
|
|
7
|
+
like.
|
|
8
|
+
|
|
9
|
+
The live style guide is not complete, and not fully implemented into the site
|
|
10
|
+
yet. If you are looking for low hanging fruit:
|
|
11
|
+
|
|
12
|
+
* The headers (h1-h3) needs to be styled as per the style guide.
|
|
13
|
+
* The cards (all pages except the incident list and preferences page) should
|
|
14
|
+
look the same.
|
|
15
|
+
* There should be no preferences directly in the user menu drop down.
|
|
16
|
+
* There should be no use of the class "border-b" anywhere.
|
|
17
|
+
|
|
18
|
+
More work is involved in making sure all form fields use the style guide
|
|
19
|
+
designs for inputs/labels. Another larger task is issue #1557:
|
|
20
|
+
`Restyling the preferences page <https://github.com/Uninett/Argus/issues/1557>`_.
|
|
21
|
+
|
|
22
|
+
See also issue #1519:
|
|
23
|
+
`Add styleguide <https://github.com/Uninett/Argus/issues/1519>`_.
|
|
@@ -33,6 +33,17 @@ Network Administration Visualized
|
|
|
33
33
|
This is an extension of NAV, runs on the same server, and uses the NAV config
|
|
34
34
|
files.
|
|
35
35
|
|
|
36
|
+
Zino
|
|
37
|
+
~~~~
|
|
38
|
+
|
|
39
|
+
| Home: https://nordu.net/zino/
|
|
40
|
+
| Source: https://github.com/Uninett/zino-argus-glue
|
|
41
|
+
| PyPI: `zino-argus-glue <https://pypi.org/project/zino-argus-glue/>`_
|
|
42
|
+
|
|
43
|
+
This is a standalone process that connects to both the Zino and Argus APIs and
|
|
44
|
+
exchanges/synchronizes information between them.
|
|
45
|
+
|
|
46
|
+
|
|
36
47
|
Mist Systems Administration (Juniper)
|
|
37
48
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
38
49
|
|
|
@@ -80,7 +80,12 @@ artifacts = ["src/argus/version.py"]
|
|
|
80
80
|
packages = ["src/argus"]
|
|
81
81
|
|
|
82
82
|
[tool.hatch.build.targets.sdist]
|
|
83
|
-
exclude = [
|
|
83
|
+
exclude = [
|
|
84
|
+
"/.github",
|
|
85
|
+
"/*.json",
|
|
86
|
+
"/*.py",
|
|
87
|
+
"/*.sh",
|
|
88
|
+
]
|
|
84
89
|
|
|
85
90
|
[tool.versioningit.write]
|
|
86
91
|
file = "src/argus/version.py"
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
# This file is autogenerated by pip-compile with Python 3.12
|
|
3
3
|
# by the following command:
|
|
4
4
|
#
|
|
5
|
-
# pip-compile --
|
|
5
|
+
# pip-compile --output-file=requirements-django52.txt constraints.txt pyproject.toml requirements/django52.txt
|
|
6
6
|
#
|
|
7
7
|
annotated-types==0.7.0
|
|
8
8
|
# via pydantic
|
|
@@ -37,7 +37,7 @@ defusedxml==0.7.1
|
|
|
37
37
|
# social-auth-core
|
|
38
38
|
dj-database-url==2.3.0
|
|
39
39
|
# via argus-server (pyproject.toml)
|
|
40
|
-
django==5.2.
|
|
40
|
+
django==5.2.7
|
|
41
41
|
# via
|
|
42
42
|
# -r requirements/django52.txt
|
|
43
43
|
# argus-server (pyproject.toml)
|
|
@@ -139,7 +139,7 @@ rpds-py==0.25.1
|
|
|
139
139
|
# referencing
|
|
140
140
|
sniffio==1.3.1
|
|
141
141
|
# via anyio
|
|
142
|
-
social-auth-app-django==5.
|
|
142
|
+
social-auth-app-django==5.6.0
|
|
143
143
|
# via argus-server (pyproject.toml)
|
|
144
144
|
social-auth-core==4.6.1
|
|
145
145
|
# via
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
# This file is autogenerated by pip-compile with Python 3.12
|
|
3
3
|
# by the following command:
|
|
4
4
|
#
|
|
5
|
-
# pip-compile --
|
|
5
|
+
# pip-compile --output-file=requirements-django52.txt constraints.txt pyproject.toml requirements/django52.txt
|
|
6
6
|
#
|
|
7
7
|
annotated-types==0.7.0
|
|
8
8
|
# via pydantic
|
|
@@ -37,7 +37,7 @@ defusedxml==0.7.1
|
|
|
37
37
|
# social-auth-core
|
|
38
38
|
dj-database-url==2.3.0
|
|
39
39
|
# via argus-server (pyproject.toml)
|
|
40
|
-
django==5.2.
|
|
40
|
+
django==5.2.7
|
|
41
41
|
# via
|
|
42
42
|
# -r requirements/django52.txt
|
|
43
43
|
# argus-server (pyproject.toml)
|
|
@@ -139,7 +139,7 @@ rpds-py==0.25.1
|
|
|
139
139
|
# referencing
|
|
140
140
|
sniffio==1.3.1
|
|
141
141
|
# via anyio
|
|
142
|
-
social-auth-app-django==5.
|
|
142
|
+
social-auth-app-django==5.6.0
|
|
143
143
|
# via argus-server (pyproject.toml)
|
|
144
144
|
social-auth-core==4.6.1
|
|
145
145
|
# via
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
from django import forms
|
|
2
|
+
from django.core.exceptions import ValidationError
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
__all__ = ["StyleGuideForm"]
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class _ArgusBaseForm(forms.Form):
|
|
9
|
+
def __init__(self, *args, **kwargs):
|
|
10
|
+
kwargs.setdefault("label_suffix", "")
|
|
11
|
+
super().__init__(*args, **kwargs)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
# Turn off colons EVERYWHERE
|
|
15
|
+
forms.Form = _ArgusBaseForm
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class StyleGuideForm(forms.Form):
|
|
19
|
+
ERROR_INPUT = "MXZ"
|
|
20
|
+
_choices = ("S", "Medium", "Loooooooong", "Multi word long choice")
|
|
21
|
+
CHOICES = tuple(enumerate(_choices, 1))
|
|
22
|
+
|
|
23
|
+
# field variations:
|
|
24
|
+
required = forms.CharField(required=True)
|
|
25
|
+
help_text = forms.CharField(
|
|
26
|
+
required=False, help_text="This is the help text for a specific field, should always be shown"
|
|
27
|
+
)
|
|
28
|
+
error = forms.CharField(required=True)
|
|
29
|
+
|
|
30
|
+
# field types:
|
|
31
|
+
input_ = forms.CharField(label="Input", required=False)
|
|
32
|
+
password = forms.Field(required=False, widget=forms.PasswordInput)
|
|
33
|
+
number = forms.IntegerField(required=False)
|
|
34
|
+
date = forms.DateField(required=False)
|
|
35
|
+
datetime = forms.DateTimeField(required=False)
|
|
36
|
+
time = forms.TimeField(required=False)
|
|
37
|
+
email = forms.EmailField(required=False)
|
|
38
|
+
url = forms.URLField(required=False)
|
|
39
|
+
checkbox = forms.BooleanField(required=False)
|
|
40
|
+
select = forms.ChoiceField(required=False, choices=CHOICES)
|
|
41
|
+
checkbox_select = forms.ChoiceField(
|
|
42
|
+
required=False,
|
|
43
|
+
choices=CHOICES,
|
|
44
|
+
widget=forms.CheckboxSelectMultiple,
|
|
45
|
+
)
|
|
46
|
+
radio_select = forms.ChoiceField(
|
|
47
|
+
required=False,
|
|
48
|
+
choices=CHOICES,
|
|
49
|
+
widget=forms.RadioSelect,
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
# special field types:
|
|
53
|
+
# level as range
|
|
54
|
+
# typeahead
|
|
55
|
+
# ..
|
|
56
|
+
|
|
57
|
+
def clean_error(self):
|
|
58
|
+
input = self.cleaned_data.get("error", "")
|
|
59
|
+
if input != self.ERROR_INPUT:
|
|
60
|
+
raise ValidationError(
|
|
61
|
+
'This field only accepts "%(correct)s" as a value',
|
|
62
|
+
params={"correct": self.ERROR_INPUT},
|
|
63
|
+
code="invalid",
|
|
64
|
+
)
|
|
65
|
+
return input
|
|
66
|
+
|
|
67
|
+
def clean(self):
|
|
68
|
+
cleaned_data = super().clean()
|
|
69
|
+
if not (cleaned_data.get("error", None) and cleaned_data.get("required", None)):
|
|
70
|
+
raise ValidationError(
|
|
71
|
+
'Both of the fields "required" and "error" needs to be filled and valid',
|
|
72
|
+
code="invalid",
|
|
73
|
+
)
|
|
@@ -13,18 +13,22 @@ filter_backend = get_filter_backend()
|
|
|
13
13
|
QuerySetFilter = filter_backend.QuerySetFilter
|
|
14
14
|
|
|
15
15
|
|
|
16
|
+
class RangeInput(forms.NumberInput):
|
|
17
|
+
template_name = "django/forms/widgets/range.html"
|
|
18
|
+
|
|
19
|
+
|
|
16
20
|
class IncidentFilterForm(forms.Form):
|
|
17
21
|
open = forms.IntegerField(
|
|
18
|
-
widget=
|
|
19
|
-
attrs={"
|
|
22
|
+
widget=RangeInput(
|
|
23
|
+
attrs={"class": "range-primary", "step": "1", "min": min(OpenStatus).value, "max": max(OpenStatus).value}
|
|
20
24
|
),
|
|
21
25
|
label="Open State",
|
|
22
26
|
initial=OpenStatus.BOTH.value,
|
|
23
27
|
required=False,
|
|
24
28
|
)
|
|
25
29
|
acked = forms.IntegerField(
|
|
26
|
-
widget=
|
|
27
|
-
attrs={"
|
|
30
|
+
widget=RangeInput(
|
|
31
|
+
attrs={"class": "range-primary", "step": "1", "min": min(AckedStatus).value, "max": max(AckedStatus).value}
|
|
28
32
|
),
|
|
29
33
|
label="Acked",
|
|
30
34
|
initial=AckedStatus.BOTH.value,
|
|
@@ -42,7 +46,7 @@ class IncidentFilterForm(forms.Form):
|
|
|
42
46
|
widget=forms.TextInput(
|
|
43
47
|
attrs={
|
|
44
48
|
"placeholder": "key=value, ...",
|
|
45
|
-
"class": "input
|
|
49
|
+
"class": "input-primary input-sm overflow-y-auto min-h-8 h-auto max-h-16 max-w-xs leading-tight",
|
|
46
50
|
}
|
|
47
51
|
),
|
|
48
52
|
required=False,
|
|
@@ -50,8 +54,8 @@ class IncidentFilterForm(forms.Form):
|
|
|
50
54
|
help_text='Press "Enter" after each completed tag',
|
|
51
55
|
)
|
|
52
56
|
maxlevel = forms.IntegerField(
|
|
53
|
-
widget=
|
|
54
|
-
attrs={"
|
|
57
|
+
widget=RangeInput(
|
|
58
|
+
attrs={"class": "range-primary", "step": "1", "min": min(Level).value, "max": max(Level).value}
|
|
55
59
|
),
|
|
56
60
|
label="Level <=",
|
|
57
61
|
initial=max(Level).value,
|
|
@@ -38,7 +38,7 @@ class TimeframeForm(forms.Form):
|
|
|
38
38
|
initial=TIMEFRAME_DEFAULT,
|
|
39
39
|
widget=forms.Select(
|
|
40
40
|
attrs={
|
|
41
|
-
"class": "
|
|
41
|
+
"class": "border-none select-xs bg-transparent text-base -ml-2",
|
|
42
42
|
"autocomplete": "off",
|
|
43
43
|
"hx-get": ".",
|
|
44
44
|
"hx-trigger": "change",
|