argus-server 2.2.2__tar.gz → 2.4.0__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.
Files changed (571) hide show
  1. {argus_server-2.2.2 → argus_server-2.4.0}/.mailmap +3 -0
  2. {argus_server-2.2.2 → argus_server-2.4.0}/CHANGELOG.md +111 -0
  3. {argus_server-2.2.2 → argus_server-2.4.0}/CONTRIBUTORS.md +2 -0
  4. {argus_server-2.2.2 → argus_server-2.4.0}/NOTES.md +71 -0
  5. {argus_server-2.2.2 → argus_server-2.4.0}/PKG-INFO +1 -1
  6. {argus_server-2.2.2 → argus_server-2.4.0}/docs/customization/htmx-frontend.rst +28 -13
  7. {argus_server-2.2.2 → argus_server-2.4.0}/docs/development/howtos/htmx-frontend/override_templates.rst +1 -1
  8. argus_server-2.4.0/docs/development/howtos/sonarqube.rst +19 -0
  9. argus_server-2.4.0/docs/development/howtos/trigger-test-error-pages.rst +14 -0
  10. {argus_server-2.2.2 → argus_server-2.4.0}/docs/reference/api/v2.rst +9 -0
  11. {argus_server-2.2.2 → argus_server-2.4.0}/docs/reference/htmx-frontend.rst +173 -4
  12. {argus_server-2.2.2 → argus_server-2.4.0}/docs/reference/site-specific-settings.rst +28 -2
  13. {argus_server-2.2.2 → argus_server-2.4.0}/docs/user-manual.rst +37 -13
  14. {argus_server-2.2.2 → argus_server-2.4.0}/requirements-django52.txt +1 -1
  15. {argus_server-2.2.2 → argus_server-2.4.0}/requirements.txt +1 -1
  16. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/auth/models.py +2 -2
  17. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/auth/utils.py +3 -3
  18. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/filter/filterwrapper.py +13 -1
  19. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/filter/swappable/serializers.py +5 -0
  20. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/constants.py +0 -8
  21. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/context_processors.py +1 -0
  22. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/dateformat/constants.py +8 -8
  23. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/defaults.py +3 -2
  24. argus_server-2.4.0/src/argus/htmx/incident/columns.py +286 -0
  25. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/incident/filter.py +111 -34
  26. argus_server-2.4.0/src/argus/htmx/incident/forms/base.py +101 -0
  27. argus_server-2.4.0/src/argus/htmx/incident/forms/incident_actions.py +20 -0
  28. argus_server-2.4.0/src/argus/htmx/incident/forms/incident_filters.py +135 -0
  29. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/incident/urls.py +1 -0
  30. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/incident/utils.py +2 -2
  31. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/incident/views.py +114 -33
  32. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/notificationprofile/views.py +1 -0
  33. argus_server-2.4.0/src/argus/htmx/static/choices-11.1.0.min.js +2 -0
  34. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/static/styles.css +1084 -39
  35. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/tailwindtheme/snippets/20-loading-box.css +5 -5
  36. argus_server-2.4.0/src/argus/htmx/tailwindtheme/snippets/25-choices.css +80 -0
  37. argus_server-2.4.0/src/argus/htmx/tailwindtheme/snippets/30-incident-table.css +21 -0
  38. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/tailwindtheme/styles.css +2 -0
  39. argus_server-2.4.0/src/argus/htmx/templates/400.html +7 -0
  40. argus_server-2.4.0/src/argus/htmx/templates/401.html +7 -0
  41. argus_server-2.4.0/src/argus/htmx/templates/403.html +7 -0
  42. argus_server-2.4.0/src/argus/htmx/templates/404.html +7 -0
  43. argus_server-2.4.0/src/argus/htmx/templates/410.html +7 -0
  44. argus_server-2.4.0/src/argus/htmx/templates/500.html +7 -0
  45. argus_server-2.4.0/src/argus/htmx/templates/htmx/base.html +51 -0
  46. argus_server-2.4.0/src/argus/htmx/templates/htmx/components/_page_title.html +9 -0
  47. argus_server-2.4.0/src/argus/htmx/templates/htmx/components/incident_list_refresh_info_select.html +18 -0
  48. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/destination/destination_list.html +1 -0
  49. argus_server-2.4.0/src/argus/htmx/templates/htmx/forms/search_select_multiple.html +66 -0
  50. argus_server-2.4.0/src/argus/htmx/templates/htmx/incident/_base_incident_table.html +32 -0
  51. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/incident/_incident_filterbox.html +16 -13
  52. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/incident/_incident_list_refresh_info.html +5 -18
  53. argus_server-2.4.0/src/argus/htmx/templates/htmx/incident/_incident_table.html +10 -0
  54. argus_server-2.4.0/src/argus/htmx/templates/htmx/incident/_incident_table_autorefresh.html +12 -0
  55. argus_server-2.4.0/src/argus/htmx/templates/htmx/incident/_incident_table_cell_wrapper_default.html +12 -0
  56. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/incident/_incident_table_cell_wrapper_link_to_details.html +1 -0
  57. argus_server-2.4.0/src/argus/htmx/templates/htmx/incident/_incident_table_footer.html +30 -0
  58. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/incident/_incident_table_paginator_pageitem.html +2 -2
  59. argus_server-2.4.0/src/argus/htmx/templates/htmx/incident/_unpaged_incident_table.html +4 -0
  60. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/incident/cells/_incident_ack.html +1 -0
  61. argus_server-2.4.0/src/argus/htmx/templates/htmx/incident/cells/_incident_ack_icon.html +10 -0
  62. argus_server-2.4.0/src/argus/htmx/templates/htmx/incident/cells/_incident_actions.html +2 -0
  63. argus_server-2.4.0/src/argus/htmx/templates/htmx/incident/cells/_incident_age.html +4 -0
  64. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/incident/cells/_incident_checkbox.html +1 -0
  65. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/incident/cells/_incident_color_status.html +1 -0
  66. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/incident/cells/_incident_combined_status.html +1 -0
  67. argus_server-2.4.0/src/argus/htmx/templates/htmx/incident/cells/_incident_combined_status_icons.html +5 -0
  68. argus_server-2.4.0/src/argus/htmx/templates/htmx/incident/cells/_incident_description.html +2 -0
  69. argus_server-2.4.0/src/argus/htmx/templates/htmx/incident/cells/_incident_filterable_column_header.html +13 -0
  70. argus_server-2.4.0/src/argus/htmx/templates/htmx/incident/cells/_incident_filterable_column_header_content.html +47 -0
  71. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/incident/cells/_incident_level.html +1 -0
  72. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/incident/cells/_incident_list_select_all_checkbox_header.html +1 -0
  73. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/incident/cells/_incident_pk.html +1 -0
  74. argus_server-2.4.0/src/argus/htmx/templates/htmx/incident/cells/_incident_source.html +2 -0
  75. argus_server-2.4.0/src/argus/htmx/templates/htmx/incident/cells/_incident_source_type.html +2 -0
  76. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/incident/cells/_incident_start_time.html +1 -0
  77. argus_server-2.4.0/src/argus/htmx/templates/htmx/incident/cells/_incident_start_time_and_age.html +5 -0
  78. argus_server-2.4.0/src/argus/htmx/templates/htmx/incident/cells/_incident_start_time_header.html +2 -0
  79. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/incident/cells/_incident_status.html +1 -0
  80. argus_server-2.4.0/src/argus/htmx/templates/htmx/incident/cells/_incident_status_icon.html +10 -0
  81. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/incident/cells/_incident_tag.html +1 -0
  82. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/incident/cells/_incident_ticket.html +1 -0
  83. argus_server-2.4.0/src/argus/htmx/templates/htmx/incident/cells/search_fields/input_search.html +16 -0
  84. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/incident/incident_list.html +2 -2
  85. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/notificationprofile/_notificationprofile_form.html +2 -2
  86. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/notificationprofile/_notificationprofile_form_div.html +2 -2
  87. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/notificationprofile/base.html +1 -1
  88. argus_server-2.4.0/src/argus/htmx/templates/htmx/styleguide.html +202 -0
  89. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/timeslot/base.html +1 -1
  90. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/user/_dateformat_dropdown.html +3 -3
  91. argus_server-2.4.0/src/argus/htmx/templates/htmx/user/_incidents_table_columns_dropdown.html +30 -0
  92. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/user/_page_size_dropdown.html +3 -3
  93. argus_server-2.4.0/src/argus/htmx/templates/htmx/user/_preference_choice_nopreview.html +1 -0
  94. argus_server-2.4.0/src/argus/htmx/templates/htmx/user/_preference_choice_preview_datetime.html +2 -0
  95. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/user/_theme_dropdown.html +3 -3
  96. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/user/_user_menu.html +3 -3
  97. argus_server-2.4.0/src/argus/htmx/templates/htmx/user/preference_field_form.html +19 -0
  98. argus_server-2.4.0/src/argus/htmx/templates/htmx/user/preferences_list.html +14 -0
  99. argus_server-2.4.0/src/argus/htmx/templates/htmx/user/radio_option.html +10 -0
  100. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx_base.html +3 -2
  101. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templatetags/argus_htmx.py +32 -7
  102. argus_server-2.4.0/src/argus/htmx/user/factories.py +13 -0
  103. argus_server-2.4.0/src/argus/htmx/user/preferences/forms.py +266 -0
  104. argus_server-2.4.0/src/argus/htmx/user/preferences/models.py +40 -0
  105. argus_server-2.4.0/src/argus/htmx/user/preferences/utils.py +14 -0
  106. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/user/views.py +7 -1
  107. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/widgets.py +4 -0
  108. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/incident/admin.py +1 -0
  109. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/incident/models.py +17 -0
  110. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/notificationprofile/media/base.py +1 -2
  111. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/notificationprofile/media/email.py +1 -2
  112. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/site/urls.py +2 -2
  113. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/site/views.py +24 -48
  114. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/util/admin_utils.py +2 -2
  115. argus_server-2.4.0/src/argus/version.py +1 -0
  116. {argus_server-2.2.2 → argus_server-2.4.0}/tests/auth/models.py +2 -1
  117. {argus_server-2.2.2 → argus_server-2.4.0}/tests/filter/test_filterwrapper.py +81 -0
  118. {argus_server-2.2.2 → argus_server-2.4.0}/tests/htmx/incident/test_customization.py +4 -4
  119. {argus_server-2.2.2 → argus_server-2.4.0}/tests/htmx/incident/test_filter.py +92 -3
  120. argus_server-2.4.0/tests/htmx/incident/test_forms_incident_filters.py +112 -0
  121. argus_server-2.4.0/tests/htmx/incident/test_views.py +58 -0
  122. argus_server-2.2.2/tests/htmx/test_incident.py → argus_server-2.4.0/tests/htmx/test_incident_columns_rendering.py +11 -4
  123. argus_server-2.4.0/tests/htmx/test_templatetags.py +20 -0
  124. argus_server-2.4.0/tests/site/test_views.py +66 -0
  125. argus_server-2.4.0/tests/util/__init__.py +0 -0
  126. argus_server-2.2.2/src/argus/htmx/incident/customization.py +0 -122
  127. argus_server-2.2.2/src/argus/htmx/incident/forms.py +0 -52
  128. argus_server-2.2.2/src/argus/htmx/templates/htmx/base.html +0 -47
  129. argus_server-2.2.2/src/argus/htmx/templates/htmx/incident/_incident_table.html +0 -51
  130. argus_server-2.2.2/src/argus/htmx/templates/htmx/incident/_incident_table_cell_wrapper_default.html +0 -7
  131. argus_server-2.2.2/src/argus/htmx/templates/htmx/incident/cells/_incident_actions.html +0 -1
  132. argus_server-2.2.2/src/argus/htmx/templates/htmx/incident/cells/_incident_description.html +0 -1
  133. argus_server-2.2.2/src/argus/htmx/templates/htmx/incident/cells/_incident_filterable_column_header.html +0 -32
  134. argus_server-2.2.2/src/argus/htmx/templates/htmx/incident/cells/_incident_source.html +0 -1
  135. argus_server-2.2.2/src/argus/htmx/templates/htmx/incident/cells/_incident_start_time_header.html +0 -1
  136. argus_server-2.2.2/src/argus/htmx/templates/htmx/styleguide.html +0 -188
  137. argus_server-2.2.2/src/argus/htmx/templates/htmx/user/_user_menu_user_preferences.html +0 -10
  138. argus_server-2.2.2/src/argus/htmx/templates/htmx/user/preferences.html +0 -22
  139. argus_server-2.2.2/src/argus/htmx/themes/constants.py +0 -13
  140. argus_server-2.2.2/src/argus/htmx/user/preferences/models.py +0 -75
  141. argus_server-2.2.2/src/argus/version.py +0 -1
  142. argus_server-2.2.2/tests/site/test_views.py +0 -10
  143. {argus_server-2.2.2 → argus_server-2.4.0}/.git-blame-ignore-revs +0 -0
  144. {argus_server-2.2.2 → argus_server-2.4.0}/.gitattributes +0 -0
  145. {argus_server-2.2.2 → argus_server-2.4.0}/.gitignore +0 -0
  146. {argus_server-2.2.2 → argus_server-2.4.0}/.pre-commit-config.yaml +0 -0
  147. {argus_server-2.2.2 → argus_server-2.4.0}/.readthedocs.yaml +0 -0
  148. {argus_server-2.2.2 → argus_server-2.4.0}/.sonarcloud.properties +0 -0
  149. {argus_server-2.2.2 → argus_server-2.4.0}/CONTRIBUTING.rst +0 -0
  150. {argus_server-2.2.2 → argus_server-2.4.0}/Dockerfile +0 -0
  151. {argus_server-2.2.2 → argus_server-2.4.0}/LICENSE +0 -0
  152. {argus_server-2.2.2 → argus_server-2.4.0}/MAINTAINING.rst +0 -0
  153. {argus_server-2.2.2 → argus_server-2.4.0}/Makefile +0 -0
  154. {argus_server-2.2.2 → argus_server-2.4.0}/README.md +0 -0
  155. {argus_server-2.2.2 → argus_server-2.4.0}/UPGRADING.md +0 -0
  156. {argus_server-2.2.2 → argus_server-2.4.0}/changelog.d/.gitkeep +0 -0
  157. {argus_server-2.2.2 → argus_server-2.4.0}/cmd.sh-template +0 -0
  158. {argus_server-2.2.2 → argus_server-2.4.0}/codecov.yml +0 -0
  159. {argus_server-2.2.2 → argus_server-2.4.0}/constraints.txt +0 -0
  160. {argus_server-2.2.2 → argus_server-2.4.0}/docker/Dockerfile +0 -0
  161. {argus_server-2.2.2 → argus_server-2.4.0}/docker/README.md +0 -0
  162. {argus_server-2.2.2 → argus_server-2.4.0}/docker/docker-entrypoint.sh +0 -0
  163. {argus_server-2.2.2 → argus_server-2.4.0}/docker/dockersettings.py +0 -0
  164. {argus_server-2.2.2 → argus_server-2.4.0}/docker-compose.yml +0 -0
  165. {argus_server-2.2.2 → argus_server-2.4.0}/docs/Makefile +0 -0
  166. {argus_server-2.2.2 → argus_server-2.4.0}/docs/_exts/djangodocs.py +0 -0
  167. {argus_server-2.2.2 → argus_server-2.4.0}/docs/_static/.gitkeep +0 -0
  168. {argus_server-2.2.2 → argus_server-2.4.0}/docs/_templates/.gitkeep +0 -0
  169. {argus_server-2.2.2 → argus_server-2.4.0}/docs/about-argus.rst +0 -0
  170. {argus_server-2.2.2 → argus_server-2.4.0}/docs/conf.py +0 -0
  171. {argus_server-2.2.2 → argus_server-2.4.0}/docs/customization.rst +0 -0
  172. {argus_server-2.2.2 → argus_server-2.4.0}/docs/development/howtos/add-more-preferences.rst +0 -0
  173. {argus_server-2.2.2 → argus_server-2.4.0}/docs/development/howtos/change-settings.rst +0 -0
  174. {argus_server-2.2.2 → argus_server-2.4.0}/docs/development/howtos/changelog-entry.rst +0 -0
  175. {argus_server-2.2.2 → argus_server-2.4.0}/docs/development/howtos/commit-messages.rst +0 -0
  176. {argus_server-2.2.2 → argus_server-2.4.0}/docs/development/howtos/customizing-filtering.rst +0 -0
  177. {argus_server-2.2.2 → argus_server-2.4.0}/docs/development/howtos/federated-logins.rst +0 -0
  178. {argus_server-2.2.2 → argus_server-2.4.0}/docs/development/howtos/howtos-for-git.rst +0 -0
  179. {argus_server-2.2.2 → argus_server-2.4.0}/docs/development/howtos/howtos-for-github.rst +0 -0
  180. {argus_server-2.2.2 → argus_server-2.4.0}/docs/development/howtos/htmx-frontend/column_for_specific_ack_group.rst +0 -0
  181. {argus_server-2.2.2 → argus_server-2.4.0}/docs/development/howtos/htmx-frontend/column_for_specific_tag.rst +0 -0
  182. {argus_server-2.2.2 → argus_server-2.4.0}/docs/development/howtos/htmx-frontend/custom-incident-actions.rst +0 -0
  183. {argus_server-2.2.2 → argus_server-2.4.0}/docs/development/howtos/htmx-frontend/customize-filtering.rst +0 -0
  184. {argus_server-2.2.2 → argus_server-2.4.0}/docs/development/howtos/htmx-frontend/dependencies.rst +0 -0
  185. {argus_server-2.2.2 → argus_server-2.4.0}/docs/development/howtos/htmx-frontend/font_awesome.rst +0 -0
  186. {argus_server-2.2.2 → argus_server-2.4.0}/docs/development/howtos/htmx-frontend.rst +0 -0
  187. {argus_server-2.2.2 → argus_server-2.4.0}/docs/development/howtos/notification-system-testing.rst +0 -0
  188. {argus_server-2.2.2 → argus_server-2.4.0}/docs/development/howtos/recover-from-migration-trouble.rst +0 -0
  189. {argus_server-2.2.2 → argus_server-2.4.0}/docs/development/howtos/regenerate-the-ER-diagram.rst +0 -0
  190. {argus_server-2.2.2 → argus_server-2.4.0}/docs/development/howtos/release-checklist.rst +0 -0
  191. {argus_server-2.2.2 → argus_server-2.4.0}/docs/development/howtos/toggle-django-debug-toolbar.rst +0 -0
  192. {argus_server-2.2.2 → argus_server-2.4.0}/docs/development/howtos/update-contributors.rst +0 -0
  193. {argus_server-2.2.2 → argus_server-2.4.0}/docs/development/howtos/vendor-a-repo.rst +0 -0
  194. {argus_server-2.2.2 → argus_server-2.4.0}/docs/development/howtos.rst +0 -0
  195. {argus_server-2.2.2 → argus_server-2.4.0}/docs/development/makefile-rules.rst +0 -0
  196. {argus_server-2.2.2 → argus_server-2.4.0}/docs/development/management-commands.rst +0 -0
  197. {argus_server-2.2.2 → argus_server-2.4.0}/docs/development/notes.rst +0 -0
  198. {argus_server-2.2.2 → argus_server-2.4.0}/docs/development/styleguide.rst +0 -0
  199. {argus_server-2.2.2 → argus_server-2.4.0}/docs/development/troubleshooting.rst +0 -0
  200. {argus_server-2.2.2 → argus_server-2.4.0}/docs/development.rst +0 -0
  201. {argus_server-2.2.2 → argus_server-2.4.0}/docs/django_settings.py +0 -0
  202. {argus_server-2.2.2 → argus_server-2.4.0}/docs/img/default_timeslot.png +0 -0
  203. {argus_server-2.2.2 → argus_server-2.4.0}/docs/img/destinations_view.png +0 -0
  204. {argus_server-2.2.2 → argus_server-2.4.0}/docs/img/example_timeslot.png +0 -0
  205. {argus_server-2.2.2 → argus_server-2.4.0}/docs/img/filter_selector.png +0 -0
  206. {argus_server-2.2.2 → argus_server-2.4.0}/docs/img/incident_details_view.png +0 -0
  207. {argus_server-2.2.2 → argus_server-2.4.0}/docs/img/incidents_filter.png +0 -0
  208. {argus_server-2.2.2 → argus_server-2.4.0}/docs/img/incidents_page.png +0 -0
  209. {argus_server-2.2.2 → argus_server-2.4.0}/docs/img/new_notification_profile.png +0 -0
  210. {argus_server-2.2.2 → argus_server-2.4.0}/docs/img/notification_profiles.png +0 -0
  211. {argus_server-2.2.2 → argus_server-2.4.0}/docs/img/synced_destination_delete_error.png +0 -0
  212. {argus_server-2.2.2 → argus_server-2.4.0}/docs/img/timeslots_view.png +0 -0
  213. {argus_server-2.2.2 → argus_server-2.4.0}/docs/img/unsaved_recurrence.png +0 -0
  214. {argus_server-2.2.2 → argus_server-2.4.0}/docs/img/user_menu.png +0 -0
  215. {argus_server-2.2.2 → argus_server-2.4.0}/docs/index.rst +0 -0
  216. {argus_server-2.2.2 → argus_server-2.4.0}/docs/integrations/_note.rst +0 -0
  217. {argus_server-2.2.2 → argus_server-2.4.0}/docs/integrations/glue-services/index.rst +0 -0
  218. {argus_server-2.2.2 → argus_server-2.4.0}/docs/integrations/glue-services/writing-glueservices.rst +0 -0
  219. {argus_server-2.2.2 → argus_server-2.4.0}/docs/integrations/index.rst +0 -0
  220. {argus_server-2.2.2 → argus_server-2.4.0}/docs/integrations/notifications/email-plugin.rst +0 -0
  221. {argus_server-2.2.2 → argus_server-2.4.0}/docs/integrations/notifications/index.rst +0 -0
  222. {argus_server-2.2.2 → argus_server-2.4.0}/docs/integrations/notifications/sms-plugin.rst +0 -0
  223. {argus_server-2.2.2 → argus_server-2.4.0}/docs/integrations/notifications/writing-notification-plugins.rst +0 -0
  224. {argus_server-2.2.2 → argus_server-2.4.0}/docs/integrations/ticket-systems/index.rst +0 -0
  225. {argus_server-2.2.2 → argus_server-2.4.0}/docs/integrations/ticket-systems/writing-ticket-system-plugins.rst +0 -0
  226. {argus_server-2.2.2 → argus_server-2.4.0}/docs/make.bat +0 -0
  227. {argus_server-2.2.2 → argus_server-2.4.0}/docs/reference/admin.rst +0 -0
  228. {argus_server-2.2.2 → argus_server-2.4.0}/docs/reference/api.rst +0 -0
  229. {argus_server-2.2.2 → argus_server-2.4.0}/docs/reference/authentication.rst +0 -0
  230. {argus_server-2.2.2 → argus_server-2.4.0}/docs/reference/glossary.rst +0 -0
  231. {argus_server-2.2.2 → argus_server-2.4.0}/docs/reference/img/ER_model.png +0 -0
  232. {argus_server-2.2.2 → argus_server-2.4.0}/docs/reference/models.rst +0 -0
  233. {argus_server-2.2.2 → argus_server-2.4.0}/docs/reference.rst +0 -0
  234. {argus_server-2.2.2 → argus_server-2.4.0}/pyproject.toml +0 -0
  235. {argus_server-2.2.2 → argus_server-2.4.0}/requirements/dev.txt +0 -0
  236. {argus_server-2.2.2 → argus_server-2.4.0}/requirements/django52.txt +0 -0
  237. {argus_server-2.2.2 → argus_server-2.4.0}/requirements/please-pip-sync.txt +0 -0
  238. {argus_server-2.2.2 → argus_server-2.4.0}/requirements/test.txt +0 -0
  239. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/__init__.py +0 -0
  240. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/auth/__init__.py +0 -0
  241. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/auth/admin.py +0 -0
  242. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/auth/apps.py +0 -0
  243. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/auth/authentication.py +0 -0
  244. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/auth/context_processors.py +0 -0
  245. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/auth/drftoken/__init__.py +0 -0
  246. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/auth/drftoken/serializers.py +0 -0
  247. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/auth/drftoken/urls.py +0 -0
  248. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/auth/drftoken/views.py +0 -0
  249. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/auth/factories.py +0 -0
  250. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/auth/knox/__init__.py +0 -0
  251. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/auth/knox/serializers.py +0 -0
  252. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/auth/knox/urls.py +0 -0
  253. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/auth/knox/views.py +0 -0
  254. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/auth/management/__init__.py +0 -0
  255. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/auth/management/commands/__init__.py +0 -0
  256. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/auth/management/commands/changeuser.py +0 -0
  257. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/auth/management/commands/createuser.py +0 -0
  258. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/auth/management/commands/grantsuperuser.py +0 -0
  259. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/auth/management/commands/revokesuperuser.py +0 -0
  260. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/auth/management/commands/setpassword.py +0 -0
  261. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/auth/migrations/0001_initial.py +0 -0
  262. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/auth/migrations/0002_alter_user_first_name.py +0 -0
  263. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/auth/migrations/0002_squashed_auth_20250512_add_preferences_model.py +0 -0
  264. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/auth/migrations/0003_delete_phonenumber.py +0 -0
  265. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/auth/migrations/0004_add_preferences_model.py +0 -0
  266. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/auth/migrations/__init__.py +0 -0
  267. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/auth/serializers.py +0 -0
  268. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/auth/urls.py +0 -0
  269. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/auth/views.py +0 -0
  270. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/base/__init__.py +0 -0
  271. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/base/apps.py +0 -0
  272. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/base/static/favicon.svg +0 -0
  273. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/base/templates/base.html +0 -0
  274. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/base/templates/index.html +0 -0
  275. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/compat.py +0 -0
  276. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/dev/__init__.py +0 -0
  277. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/dev/apps.py +0 -0
  278. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/dev/management/__init__.py +0 -0
  279. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/dev/management/commands/__init__.py +0 -0
  280. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/dev/management/commands/bulk_incidents.py +0 -0
  281. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/dev/management/commands/check_token_expiry.py +0 -0
  282. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/dev/management/commands/close_incident.py +0 -0
  283. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/dev/management/commands/create_fake_incident.py +0 -0
  284. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/dev/management/commands/create_source.py +0 -0
  285. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/dev/management/commands/gen_secret_key.py +0 -0
  286. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/dev/management/commands/initial_setup.py +0 -0
  287. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/dev/management/commands/list_filters.py +0 -0
  288. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/dev/management/commands/stresstest.py +0 -0
  289. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/dev/management/commands/toggle_profile_activation.py +0 -0
  290. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/dev/utils.py +0 -0
  291. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/drf/__init__.py +0 -0
  292. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/drf/permissions.py +0 -0
  293. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/filter/__init__.py +0 -0
  294. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/filter/apps.py +0 -0
  295. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/filter/checks.py +0 -0
  296. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/filter/default.py +0 -0
  297. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/filter/factories.py +0 -0
  298. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/filter/filters.py +0 -0
  299. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/filter/primitive_serializers.py +0 -0
  300. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/filter/queryset_filters.py +0 -0
  301. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/filter/serializers.py +0 -0
  302. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/filter/swappable/__init__.py +0 -0
  303. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/filter/validators.py +0 -0
  304. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/__init__.py +0 -0
  305. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/appconfig.py +0 -0
  306. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/apps.py +0 -0
  307. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/auth/__init__.py +0 -0
  308. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/auth/views.py +0 -0
  309. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/checks.py +0 -0
  310. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/dateformat/__init__.py +0 -0
  311. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/destination/__init__.py +0 -0
  312. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/destination/forms.py +0 -0
  313. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/destination/urls.py +0 -0
  314. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/destination/views.py +0 -0
  315. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/forms.py +0 -0
  316. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/htmx_urls.py +0 -0
  317. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/incident/__init__.py +0 -0
  318. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/incident/constants.py +0 -0
  319. {argus_server-2.2.2/src/argus/htmx/management → argus_server-2.4.0/src/argus/htmx/incident/forms}/__init__.py +0 -0
  320. {argus_server-2.2.2/src/argus/htmx/management/commands → argus_server-2.4.0/src/argus/htmx/management}/__init__.py +0 -0
  321. {argus_server-2.2.2/src/argus/htmx/migrations → argus_server-2.4.0/src/argus/htmx/management/commands}/__init__.py +0 -0
  322. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/management/commands/tailwind_config.py +0 -0
  323. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/middleware.py +0 -0
  324. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/migrations/0001_initial.py +0 -0
  325. {argus_server-2.2.2/src/argus/htmx/notificationprofile → argus_server-2.4.0/src/argus/htmx/migrations}/__init__.py +0 -0
  326. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/modals.py +0 -0
  327. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/models.py +0 -0
  328. {argus_server-2.2.2/src/argus/htmx/tailwindtheme → argus_server-2.4.0/src/argus/htmx/notificationprofile}/__init__.py +0 -0
  329. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/notificationprofile/urls.py +0 -0
  330. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/request.py +0 -0
  331. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/root_urls.py +0 -0
  332. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/settings.py +0 -0
  333. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/static/htmx-2.0.2.min.js +0 -0
  334. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/static/hyperscript-0.9.13.min.js +0 -0
  335. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/static/logo_white.svg +0 -0
  336. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/tailwindtheme/README.md +0 -0
  337. {argus_server-2.2.2/src/argus/htmx/templatetags → argus_server-2.4.0/src/argus/htmx/tailwindtheme}/__init__.py +0 -0
  338. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/tailwindtheme/config.py +0 -0
  339. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/tailwindtheme/get_tailwind.py +0 -0
  340. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/tailwindtheme/snippets/10-tailwind.css +0 -0
  341. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/tailwindtheme/snippets/15-alert-message.css +0 -0
  342. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/tailwindtheme/tailwind.config.js +0 -0
  343. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/tailwindtheme/utils.py +0 -0
  344. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/django/forms/errors/dict/ul.html +0 -0
  345. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/django/forms/errors/list/ul.html +0 -0
  346. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/django/forms/field.html +1 -1
  347. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/django/forms/label.html +0 -0
  348. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/django/forms/widgets/attrs.html +0 -0
  349. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/django/forms/widgets/checkbox.html +0 -0
  350. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/django/forms/widgets/checkbox_option.html +0 -0
  351. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/django/forms/widgets/classless_attrs.html +0 -0
  352. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/django/forms/widgets/date.html +0 -0
  353. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/django/forms/widgets/datetime.html +0 -0
  354. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/django/forms/widgets/input.html +0 -0
  355. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/django/forms/widgets/radio_option.html +0 -0
  356. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/django/forms/widgets/range.html +0 -0
  357. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/django/forms/widgets/select.html +0 -0
  358. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/django/forms/widgets/time.html +0 -0
  359. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/_base_confirm_dialog.html +0 -0
  360. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/_base_form_modal.html +0 -0
  361. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/_base_form_modal_button.html +0 -0
  362. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/_base_form_modal_experimental.html +0 -0
  363. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/destination/_collapse_with_forms.html +0 -0
  364. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/destination/_content.html +0 -0
  365. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/destination/_create_form.html +0 -0
  366. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/destination/_delete_form.html +0 -0
  367. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/destination/_edit_form.html +0 -0
  368. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/destination/_form_list.html +0 -0
  369. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/forms/badge_dropdown_select_multiple.html +0 -0
  370. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/forms/checkbox_select_multiple.html +0 -0
  371. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/forms/dropdown_select_multiple.html +0 -0
  372. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/forms/input_field.html +0 -0
  373. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/incident/_base.html +0 -0
  374. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/incident/_base_incident_update_modal.html +0 -0
  375. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/incident/_delete_filter_confirm_dialog.html +0 -0
  376. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/incident/_existing_filters.html +0 -0
  377. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/incident/_filter_controls.html +0 -0
  378. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/incident/_filter_create_modal.html +0 -0
  379. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/incident/_filter_delete_dropdown.html +0 -0
  380. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/incident/_filter_select.html +0 -0
  381. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/incident/_filter_update_dropdown.html +0 -0
  382. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/incident/_incident_acknowledge_modal.html +0 -0
  383. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/incident/_incident_close_modal.html +0 -0
  384. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/incident/_incident_list_menubar.html +0 -0
  385. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/incident/_incident_list_update_menu.html +0 -0
  386. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/incident/_incident_reopen_modal.html +0 -0
  387. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/incident/_incident_table_paginator.html +0 -0
  388. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/incident/_incident_table_row.html +0 -0
  389. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/incident/_incident_table_rows.html +0 -0
  390. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/incident/_incident_ticket_autocreate_modal.html +0 -0
  391. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/incident/_incident_ticket_edit_modal.html +0 -0
  392. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/incident/_incident_ticket_manual_create_modal.html +0 -0
  393. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/incident/_update_filter_confirm_dialog.html +0 -0
  394. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/incident/filter_list.html +0 -0
  395. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/incident/incident_detail.html +0 -0
  396. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/incident/responses/_incident_list_refresh.html +0 -0
  397. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/incident/responses/empty_list_item.html +0 -0
  398. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/notificationprofile/notificationprofile_confirm_delete.html +0 -0
  399. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/notificationprofile/notificationprofile_form.html +0 -0
  400. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/notificationprofile/notificationprofile_list.html +0 -0
  401. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/timeslot/_delete_timeslot_confirm_dialog.html +0 -0
  402. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/timeslot/_timeslot_detail.html +0 -0
  403. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/timeslot/_timeslot_form.html +0 -0
  404. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/timeslot/checkbox_option.html +0 -0
  405. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/timeslot/timerecurrence_div.html +0 -0
  406. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/timeslot/timeslot_confirm_delete.html +0 -0
  407. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/timeslot/timeslot_form.html +0 -0
  408. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/timeslot/timeslot_list.html +0 -0
  409. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/user/_current_theme.html +0 -0
  410. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/user/_incidents_table_layout_dropdown.html +0 -0
  411. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/user/_update_interval_dropdown.html +0 -0
  412. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/user/_user_menu_logout.html +0 -0
  413. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/htmx/user/_user_menu_notification_config.html +0 -0
  414. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/messages/_notification_message.html +0 -0
  415. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/messages/_notification_messages.html +0 -0
  416. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/messages/_notification_messages_htmx_append.html +0 -0
  417. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/registration/login.html +0 -0
  418. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/tailwind/styles.css +0 -0
  419. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/tailwind/tailwind.config.js +0 -0
  420. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/templates/tailwind_whitelist.html +0 -0
  421. {argus_server-2.2.2/src/argus/htmx/themes → argus_server-2.4.0/src/argus/htmx/templatetags}/__init__.py +0 -0
  422. {argus_server-2.2.2/src/argus/htmx/timeslot → argus_server-2.4.0/src/argus/htmx/themes}/__init__.py +0 -0
  423. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/themes/utils.py +0 -0
  424. {argus_server-2.2.2/src/argus/htmx/user/preferences → argus_server-2.4.0/src/argus/htmx/timeslot}/__init__.py +0 -0
  425. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/timeslot/urls.py +0 -0
  426. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/timeslot/views.py +0 -0
  427. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/urls.py +0 -0
  428. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/user/__init__.py +0 -0
  429. {argus_server-2.2.2/src/argus/incident/migrations → argus_server-2.4.0/src/argus/htmx/user/preferences}/__init__.py +0 -0
  430. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/user/urls.py +0 -0
  431. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/utils.py +0 -0
  432. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/htmx/views.py +0 -0
  433. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/incident/__init__.py +0 -0
  434. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/incident/apps.py +0 -0
  435. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/incident/constants.py +0 -0
  436. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/incident/factories.py +0 -0
  437. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/incident/fields.py +0 -0
  438. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/incident/forms.py +0 -0
  439. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/incident/migrations/0001_initial.py +0 -0
  440. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/incident/migrations/0001_squashed_incident_20250514.py +0 -0
  441. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/incident/migrations/0002_empty_source_incident_id.py +0 -0
  442. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/incident/migrations/0003_incident_level.py +0 -0
  443. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/incident/migrations/0004_add_ChangeEvent_proxy.py +0 -0
  444. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/incident/migrations/0005_alter_event_type.py +0 -0
  445. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/incident/migrations/0006_incident_search_text.py +0 -0
  446. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/incident/migrations/0007_alter_event_type.py +0 -0
  447. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/incident/migrations/0008_incident_metadata.py +0 -0
  448. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/incident/migrations/0009_use_bigautofield_on_quickly_growing_tables.py +0 -0
  449. {argus_server-2.2.2/src/argus/incident/ticket → argus_server-2.4.0/src/argus/incident/migrations}/__init__.py +0 -0
  450. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/incident/serializers.py +0 -0
  451. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/incident/signals.py +0 -0
  452. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/incident/templates/incident/admin/fake_incident_add_form.html +0 -0
  453. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/incident/templates/incident/admin/incident_change_list.html +0 -0
  454. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/incident/templates/incident/admin/widgets/split_datetime_infinity.html +0 -0
  455. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/incident/templates/incident/ticket/default_ticket_body.html +0 -0
  456. {argus_server-2.2.2/src/argus/notificationprofile/migrations → argus_server-2.4.0/src/argus/incident/ticket}/__init__.py +0 -0
  457. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/incident/ticket/base.py +0 -0
  458. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/incident/ticket/dummy.py +0 -0
  459. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/incident/ticket/utils.py +0 -0
  460. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/incident/urls.py +0 -0
  461. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/incident/validators.py +0 -0
  462. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/incident/views.py +0 -0
  463. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/incident/widgets.py +0 -0
  464. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/notificationprofile/__init__.py +0 -0
  465. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/notificationprofile/admin.py +0 -0
  466. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/notificationprofile/apps.py +0 -0
  467. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/notificationprofile/checks.py +0 -0
  468. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/notificationprofile/factories.py +0 -0
  469. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/notificationprofile/media/__init__.py +0 -0
  470. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/notificationprofile/media/sms_as_email.py +0 -0
  471. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/notificationprofile/migrations/0001_squashed_0015_remove_days_alter_days_array.py +0 -0
  472. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/notificationprofile/migrations/0001_squashed_notificationprofile_20250512.py +0 -0
  473. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/notificationprofile/migrations/0016_noop.py +0 -0
  474. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/notificationprofile/migrations/0017_change_event_type_to_event_types.py +0 -0
  475. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/notificationprofile/migrations/0018_remove_closed_and_unacked_from_filterblob.py +0 -0
  476. {argus_server-2.2.2/src/argus/site → argus_server-2.4.0/src/argus/notificationprofile/migrations}/__init__.py +0 -0
  477. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/notificationprofile/models.py +0 -0
  478. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/notificationprofile/serializers.py +0 -0
  479. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/notificationprofile/signals.py +0 -0
  480. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/notificationprofile/templates/notificationprofile/email.html +0 -0
  481. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/notificationprofile/templates/notificationprofile/email.txt +0 -0
  482. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/notificationprofile/templates/schemawrapper.html +0 -0
  483. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/notificationprofile/urls.py +0 -0
  484. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/notificationprofile/views.py +0 -0
  485. {argus_server-2.2.2/src/argus/util → argus_server-2.4.0/src/argus/site}/__init__.py +0 -0
  486. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/site/api_v2_urls.py +0 -0
  487. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/site/logging.py +0 -0
  488. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/site/serializers.py +0 -0
  489. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/site/settings/__init__.py +0 -0
  490. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/site/settings/_serializers.py +0 -0
  491. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/site/settings/backend.py +0 -0
  492. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/site/settings/base.py +0 -0
  493. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/site/settings/dev.py +0 -0
  494. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/site/settings/dockerdev.py +0 -0
  495. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/site/settings/prod.py +0 -0
  496. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/site/settings/test_CI.py +0 -0
  497. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/site/utils.py +0 -0
  498. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/site/wsgi.py +0 -0
  499. {argus_server-2.2.2/tests → argus_server-2.4.0/src/argus/util}/__init__.py +0 -0
  500. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/util/datetime_utils.py +0 -0
  501. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/util/testing.py +0 -0
  502. {argus_server-2.2.2 → argus_server-2.4.0}/src/argus/util/utils.py +0 -0
  503. {argus_server-2.2.2/tests/auth/management_commands → argus_server-2.4.0/tests}/__init__.py +0 -0
  504. {argus_server-2.2.2 → argus_server-2.4.0}/tests/auth/__init__.py +0 -0
  505. {argus_server-2.2.2/tests/dev → argus_server-2.4.0/tests/auth/management_commands}/__init__.py +0 -0
  506. {argus_server-2.2.2 → argus_server-2.4.0}/tests/auth/management_commands/test_changeuser.py +0 -0
  507. {argus_server-2.2.2 → argus_server-2.4.0}/tests/auth/management_commands/test_createuser.py +0 -0
  508. {argus_server-2.2.2 → argus_server-2.4.0}/tests/auth/test_auth.py +0 -0
  509. {argus_server-2.2.2 → argus_server-2.4.0}/tests/auth/test_knox_views.py +0 -0
  510. {argus_server-2.2.2 → argus_server-2.4.0}/tests/auth/test_models.py +0 -0
  511. {argus_server-2.2.2 → argus_server-2.4.0}/tests/auth/test_utils.py +0 -0
  512. {argus_server-2.2.2 → argus_server-2.4.0}/tests/auth/test_views.py +0 -0
  513. {argus_server-2.2.2/tests/filter → argus_server-2.4.0/tests/dev}/__init__.py +0 -0
  514. {argus_server-2.2.2 → argus_server-2.4.0}/tests/dev/test_bulk_incidents.py +0 -0
  515. {argus_server-2.2.2 → argus_server-2.4.0}/tests/dev/test_check_token_expiry.py +0 -0
  516. {argus_server-2.2.2 → argus_server-2.4.0}/tests/dev/test_close_incident.py +0 -0
  517. {argus_server-2.2.2 → argus_server-2.4.0}/tests/dev/test_create_fake_incident.py +0 -0
  518. {argus_server-2.2.2 → argus_server-2.4.0}/tests/dev/test_create_source.py +0 -0
  519. {argus_server-2.2.2 → argus_server-2.4.0}/tests/dev/test_gen_secret_key.py +0 -0
  520. {argus_server-2.2.2 → argus_server-2.4.0}/tests/dev/test_initial_setup.py +0 -0
  521. {argus_server-2.2.2 → argus_server-2.4.0}/tests/dev/test_list_filters.py +0 -0
  522. {argus_server-2.2.2 → argus_server-2.4.0}/tests/dev/test_toggle_profile_activation.py +0 -0
  523. {argus_server-2.2.2 → argus_server-2.4.0}/tests/dev/test_utils.py +0 -0
  524. {argus_server-2.2.2/tests/htmx → argus_server-2.4.0/tests/filter}/__init__.py +0 -0
  525. {argus_server-2.2.2 → argus_server-2.4.0}/tests/filter/dummyplugin.py +0 -0
  526. {argus_server-2.2.2 → argus_server-2.4.0}/tests/filter/test_filterplugin.py +0 -0
  527. {argus_server-2.2.2 → argus_server-2.4.0}/tests/filter/test_queryset_filters.py +0 -0
  528. {argus_server-2.2.2 → argus_server-2.4.0}/tests/helpers.py +0 -0
  529. {argus_server-2.2.2/tests/htmx/incident → argus_server-2.4.0/tests/htmx}/__init__.py +0 -0
  530. {argus_server-2.2.2/tests/htmx/notificationprofile → argus_server-2.4.0/tests/htmx/incident}/__init__.py +0 -0
  531. {argus_server-2.2.2 → argus_server-2.4.0}/tests/htmx/incident/test_utils.py +0 -0
  532. {argus_server-2.2.2/tests/incident/fixtures → argus_server-2.4.0/tests/htmx/notificationprofile}/__init__.py +0 -0
  533. {argus_server-2.2.2 → argus_server-2.4.0}/tests/htmx/notificationprofile/test_forms.py +0 -0
  534. {argus_server-2.2.2 → argus_server-2.4.0}/tests/htmx/test_middleware.py +0 -0
  535. {argus_server-2.2.2 → argus_server-2.4.0}/tests/htmx/test_utils.py +0 -0
  536. {argus_server-2.2.2 → argus_server-2.4.0}/tests/incident/__init__.py +0 -0
  537. {argus_server-2.2.2/tests/incident/ticket_plugins → argus_server-2.4.0/tests/incident/fixtures}/__init__.py +0 -0
  538. {argus_server-2.2.2 → argus_server-2.4.0}/tests/incident/test_change_event.py +0 -0
  539. {argus_server-2.2.2 → argus_server-2.4.0}/tests/incident/test_create_fake_incident.py +0 -0
  540. {argus_server-2.2.2 → argus_server-2.4.0}/tests/incident/test_event.py +0 -0
  541. {argus_server-2.2.2 → argus_server-2.4.0}/tests/incident/test_filters.py +0 -0
  542. {argus_server-2.2.2 → argus_server-2.4.0}/tests/incident/test_incident.py +0 -0
  543. {argus_server-2.2.2 → argus_server-2.4.0}/tests/incident/test_incident_fields.py +0 -0
  544. {argus_server-2.2.2 → argus_server-2.4.0}/tests/incident/test_queryset.py +0 -0
  545. {argus_server-2.2.2 → argus_server-2.4.0}/tests/incident/test_serializers.py +0 -0
  546. {argus_server-2.2.2 → argus_server-2.4.0}/tests/incident/test_source_system.py +0 -0
  547. {argus_server-2.2.2 → argus_server-2.4.0}/tests/incident/test_source_system_type.py +0 -0
  548. {argus_server-2.2.2 → argus_server-2.4.0}/tests/incident/test_views.py +0 -0
  549. {argus_server-2.2.2/tests/incident/unit → argus_server-2.4.0/tests/incident/ticket_plugins}/__init__.py +0 -0
  550. {argus_server-2.2.2 → argus_server-2.4.0}/tests/incident/ticket_plugins/test_base.py +0 -0
  551. {argus_server-2.2.2 → argus_server-2.4.0}/tests/incident/ticket_plugins/test_dummy.py +0 -0
  552. {argus_server-2.2.2 → argus_server-2.4.0}/tests/incident/ticket_plugins/test_utils.py +0 -0
  553. {argus_server-2.2.2/tests/notificationprofile/destinations → argus_server-2.4.0/tests/incident/unit}/__init__.py +0 -0
  554. {argus_server-2.2.2 → argus_server-2.4.0}/tests/incident/unit/test_incident_details_url.py +0 -0
  555. {argus_server-2.2.2 → argus_server-2.4.0}/tests/migration_example.py +0 -0
  556. {argus_server-2.2.2 → argus_server-2.4.0}/tests/notificationprofile/__init__.py +0 -0
  557. {argus_server-2.2.2/tests/notificationprofile/migrations → argus_server-2.4.0/tests/notificationprofile/destinations}/__init__.py +0 -0
  558. {argus_server-2.2.2 → argus_server-2.4.0}/tests/notificationprofile/destinations/test_email.py +0 -0
  559. {argus_server-2.2.2 → argus_server-2.4.0}/tests/notificationprofile/destinations/test_sms.py +0 -0
  560. {argus_server-2.2.2/tests/site → argus_server-2.4.0/tests/notificationprofile/migrations}/__init__.py +0 -0
  561. {argus_server-2.2.2 → argus_server-2.4.0}/tests/notificationprofile/test_github236.py +0 -0
  562. {argus_server-2.2.2 → argus_server-2.4.0}/tests/notificationprofile/test_media.py +0 -0
  563. {argus_server-2.2.2 → argus_server-2.4.0}/tests/notificationprofile/test_models.py +0 -0
  564. {argus_server-2.2.2 → argus_server-2.4.0}/tests/notificationprofile/test_serializers.py +0 -0
  565. {argus_server-2.2.2 → argus_server-2.4.0}/tests/notificationprofile/test_views.py +0 -0
  566. {argus_server-2.2.2/tests/util → argus_server-2.4.0/tests/site}/__init__.py +0 -0
  567. {argus_server-2.2.2 → argus_server-2.4.0}/tests/site/test_misc.py +0 -0
  568. {argus_server-2.2.2 → argus_server-2.4.0}/tests/site/test_settings_helpers.py +0 -0
  569. {argus_server-2.2.2 → argus_server-2.4.0}/tests/site/test_settings_validators.py +0 -0
  570. {argus_server-2.2.2 → argus_server-2.4.0}/tests/util/test_utils.py +0 -0
  571. {argus_server-2.2.2 → argus_server-2.4.0}/tox.ini +0 -0
@@ -1,5 +1,6 @@
1
1
  # canonical
2
2
 
3
+ Aleksander Fløtten <aleksander.flotten@sikt.no>
3
4
  Alexander Staff <alexamst@stud.ntnu.no>
4
5
  Andreas Melzer <akrimelzer@gmail.com>
5
6
  Dabble <ddabble@users.noreply.github.com>
@@ -11,12 +12,14 @@ Karoline Bonnerud <kbonnerud@gmail.com>
11
12
  Kat Hößel <kathoe@uninett.no>
12
13
  Morten Brekkevold <morten.brekkevold@sikt.no>
13
14
  Pelle Koster <elfjes@users.noreply.github.com>
15
+ Simen Abelsen <simen@abelweb.no>
14
16
  Simon Oliver Tveit <simon.tveit@sikt.no>
15
17
  Theodor Astrup Wiik <theo.aw@hotmail.com>
16
18
  dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
17
19
  jorund1 <jorund@washbear.eu>
18
20
 
19
21
  # rewrites
22
+ Aleksander Fløtten <aleksander.flotten@sikt.no> aleksfl <99869083+aleksfl@users.noreply.github.com>
20
23
  Alexander Staff <alexamst@stud.ntnu.no> <34887403+Tralphium@users.noreply.github.com>
21
24
  Dabble <ddabble@users.noreply.github.com> Anders <6058745+ddabble@users.noreply.github.com>
22
25
  Hanne Moa <hanne.moa@sikt.no> <hanne.moa@uninett.no>
@@ -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.4.0] - 2025-11-28
12
+
13
+ The most important feature this release is being able to filter on source
14
+ system type. If you have multiple source systems in a filter, all of them of
15
+ the same type, it might pay off to switch over to using the source system type
16
+ instead.
17
+
18
+ The rest is frontend improvements: The tags filter now has typeahead find. The
19
+ header and footer of the incident list never scroll off screen. The status
20
+ columns have variants with icons instead of text, and there's new columns
21
+ showing an incident's age (time since it happened).
22
+
23
+ See NOTES.md for further detail.
24
+
25
+ ### Added
26
+
27
+ - Added test error page ([#1024](https://github.com/Uninett/Argus/issues/1024))
28
+ - Add age columns to incident table
29
+ ([#1552](https://github.com/Uninett/Argus/issues/1552))
30
+ - Made it possible to filter on a source's type in the incident list, API, and
31
+ for sending notifications. Also added a new built-in column "source type" for
32
+ the incident list. When there are very many sources of the same type, the
33
+ filter and column become useful.
34
+ ([#1556](https://github.com/Uninett/Argus/issues/1556))
35
+ - Add status columns that use icons instead of text
36
+ ([#1635](https://github.com/Uninett/Argus/issues/1635))
37
+ - Made a system for rendering previews of preference choices.
38
+
39
+ ### Changed
40
+
41
+ - Change incident table header and footer to always be visible
42
+ ([#1548](https://github.com/Uninett/Argus/issues/1548))
43
+ - Add clear button to search column header
44
+ ([#1573](https://github.com/Uninett/Argus/issues/1573))
45
+ - Change tags input to use searchable multiselect
46
+ ([#1604](https://github.com/Uninett/Argus/issues/1604))
47
+
48
+
49
+ ## [2.3.0] - 2025-11-20
50
+
51
+ This release has numerous improvements to the frontend. The various
52
+ widgets on the incident list page now work better together, and where
53
+ there are more than one to choose from the choices are now sorted
54
+ alphabetically. No user preferences are left in the user menu. The
55
+ preference page has had a slight rework though more is planned.
56
+
57
+ The big new thing is the possibility to select more than one column
58
+ layout. You can now choose a preferred layout on the user preferences
59
+ page if any have been configured in addition to the standard one.
60
+ A nice looking preview of each configured layout is planned for the
61
+ next release.
62
+
63
+ Due to the possibility of choosing between multiple column layouts,
64
+ several new types of columns have been added. There's also a new
65
+ section in the reference documentation explaining and naming all the
66
+ built-in column types.
67
+
68
+ See NOTES.md for how to convert an existing column layout to the new format.
69
+
70
+ ### Added
71
+
72
+ - Sort list of filters in filter dropdown alphabetically
73
+ ([#1553](https://github.com/Uninett/Argus/issues/1553))
74
+ - Sort list of sources in filter dropdown alphabetically
75
+ ([#1554](https://github.com/Uninett/Argus/issues/1554))
76
+ - Added and documented more searchable columns for the incident list:
77
+ `search_description`, `select_levels`, `has_ticket_url`,
78
+ `search_ticket_url`, and a way to mass-produce single-field forms to
79
+ add even more searchable columns and eventually systematize the
80
+ incident filter forms in the topmost box.
81
+ - Make it possible to define more than one column layout, and make it
82
+ possible to switch between them via a user preference. Fixes #1581,
83
+ #1582.
84
+ - Added the column `narrow_start_time`.
85
+
86
+ ### Changed
87
+
88
+ - Remove user preferences from global header dropdown
89
+ ([#1567](https://github.com/Uninett/Argus/issues/1567))
90
+ - Use DaisyUI dropdowns in searchable columns
91
+ ([#1574](https://github.com/Uninett/Argus/issues/1574))
92
+ - Sort filter dropdowns for update / delete filter alphabetically
93
+ ([#1592](https://github.com/Uninett/Argus/issues/1592))
94
+ - Add consistent title to notification config pages
95
+ ([#1606](https://github.com/Uninett/Argus/issues/1606))
96
+ - Auto-align filterable column dropdown if it extends beyond the screen
97
+ ([#1607](https://github.com/Uninett/Argus/issues/1607))
98
+ - Fixed several problems with filtering the incident list in the
99
+ frontend: the various widgets were stepping on each others toes.
100
+ Made much easier by turning all GET-abble filters into Django forms.
101
+ - Improved documentation of how notificationprofiles with multiple
102
+ filters work, with changes to the user manual, new tests, and a help
103
+ text added to the field in question in the frontend.
104
+ - Preferences are all now properly backed by forms, inheriting from
105
+ `SimplePreferenceForm` which is a perfect fit for preferences where
106
+ you choose one of several options. Using `PreferenceField` directly
107
+ will still work, but the form used now receives the request on
108
+ `__init__`. It is therefore necessary to upgrade the old forms by
109
+ either mixing in the `ClassicPreferenceFormMixin`, which will
110
+ discard the passed-in `request`, or writing your own `__init__` that
111
+ will prevent passing in the `request` via `super().__init__(*args,
112
+ **kwargs)`.
113
+ - User preferences were refactored. This is to increase consistency,
114
+ cut down on copypasta, and eventually use Django forms on the user
115
+ preference page, but more importantly: Django settings are no longer
116
+ read on import. Turns out, preferences that depend on Django
117
+ settings *sometimes* read the settings too soon, before the
118
+ settings-file was complete, and therefore getting the wrong or no
119
+ setting.
120
+
121
+
11
122
  ## [2.2.2] - 2025-11-03
12
123
 
13
124
  ### Added
@@ -34,3 +34,5 @@
34
34
  ## 2025
35
35
 
36
36
  * [James Ladd](https://github.com/jladd-geant) \<james.ladd@geant.org\>
37
+ * [Simen Abelsen](https://github.com/Simrayz) \<simen@abelweb.no\>
38
+ * [Aleksander Fløtten](https://github.com/aleksfl) \<aleksander.flotten@sikt.no\>
@@ -3,6 +3,77 @@
3
3
  This file documents changes to Argus that are relevant for operations,
4
4
  customizers and end-users.
5
5
 
6
+ ## [2.4.0] - 2025-11-28
7
+
8
+ The most important feature this release is being able to filter on source
9
+ system type. If you have multiple source systems in a filter, all of them of
10
+ the same type, it might pay off to switch over to using the source system type
11
+ instead.
12
+
13
+ The rest is frontend improvements: The tags filter now has typeahead find. The
14
+ header and footer of the incident list never scroll off screen. The status
15
+ columns have variants with icons instead of text, and there's new columns
16
+ showing an incident's age (time since it happened).
17
+
18
+ The new columns are called `age`, `start_time_and_age`, `status_icon`,
19
+ `ack_icon` and `combined_status_icons`. The last takes up the least horizontal
20
+ space in the table.
21
+
22
+
23
+ ## [2.3.0] - 2025-11-20
24
+
25
+ This release has numerous improvements to the frontend. The various
26
+ widgets on the incident list page now work better together, and where
27
+ there are more than one to choose from the choices are now sorted
28
+ alphabetically. No user preferences are left in the user menu. The
29
+ preference page has had a slight rework though more is planned.
30
+
31
+ The big new thing is the possibility to select more than one column
32
+ layout. You can now choose a preferred layout on the user preferences
33
+ page if any have been configured in addition to the standard one.
34
+ A nice looking preview of each configured layout is planned for the
35
+ next release.
36
+
37
+ Due to the possibility of choosing between multiple column layouts,
38
+ several new types of columns have been added. There's also a new
39
+ section in the reference documentation explaining and naming all the
40
+ built-in column types.
41
+
42
+ As of this release, please convert the setting `INCIDENT_TABLE_COLUMNS` to the
43
+ new `INCIDENT_TABLE_COLUMN_LAYOUTS` setting. Usage of `INCIDENT_TABLE_COLUMNS`
44
+ is deprecated and support will eventually be removed.
45
+
46
+ If your current `INCIDENT_TABLE_COLUMNS` looks like this:
47
+
48
+ ```
49
+ INCIDENT_TABLE_COLUMNS = [
50
+ "row_select",
51
+ "combined_status",
52
+ "source",
53
+ "description",
54
+ ]
55
+ ```
56
+
57
+ then the equivalent new setting looks like:
58
+
59
+ ```
60
+ INCIDENT_TABLE_COLUMN_LAYOUTS = {
61
+ "default": [
62
+ "row_select",
63
+ "combined_status",
64
+ "source",
65
+ "description",
66
+ ]
67
+ }
68
+ ```
69
+
70
+ This will make it possible to select between two different layouts: "built-in"
71
+ and "default". If you wish to hide the built-in layout, use the name
72
+ "built-in" for one of the layouts in `INCIDENT_TABLE_COLUMN_LAYOUTS`.
73
+
74
+ If you do not convert the setting, the layout defined in the old setting will
75
+ be available as "default" together with the built-in layout as "built-in".
76
+
6
77
  ## [2.2.2] - 2025-11-03
7
78
 
8
79
  To aid in development there a live styleguide for the frontend on
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: argus-server
3
- Version: 2.2.2
3
+ Version: 2.4.0
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>
@@ -119,8 +119,9 @@ How to customize the look:
119
119
  Incident table column customization
120
120
  ===================================
121
121
 
122
- The :setting:`INCIDENT_TABLE_COLUMNS` setting controls which columns are shown
123
- in the incident table. This setting takes a list of ``str`` or
122
+ The :setting:`INCIDENT_TABLE_COLUMN_LAYOUTS` setting controls which columns are
123
+ shown in the incident table. This setting takes a dictionary where the key is
124
+ the name of a layout and the value is a list of ``str`` or
124
125
  ``argus.htmx.incidents.customization.IncidentTableColumn`` instances. when
125
126
  given a ``str``, this key must be available in the
126
127
  ``argus.htmx.incidents.customization.BUILTIN_COLUMNS`` dictionary. For
@@ -128,17 +129,21 @@ example::
128
129
 
129
130
  from argus.htmx.incidents.customization import BUILTIN_COLUMNS, IncidentTableColumn
130
131
 
131
- INCIDENT_TABLE_COLUMNS = [
132
- "id",
133
- "start_time",
134
- BUILTIN_COLUMNS["description"], # equivalent to just "description"
135
- IncidentTableColumn( # a new column definition
136
- name="name",
137
- label="Custom",
138
- cell_template="/path/to/template.html", # contents of cell
139
- ),
132
+ INCIDENT_TABLE_COLUMN_LAYOUTS = {
133
+ "default": [
134
+ "id",
135
+ "start_time",
136
+ BUILTIN_COLUMNS["description"], # equivalent to just "description"
137
+ IncidentTableColumn( # a new column definition
138
+ name="name",
139
+ label="Custom",
140
+ cell_template="/path/to/template.html", # contents of cell
141
+ ),
142
+ ]
143
+ }
140
144
 
141
- ]
145
+ The settings :setting:`INCIDENT_TABLE_COLUMNS` took a single list and is
146
+ deprecated. If it exists it is interpreted as a layout named "default".
142
147
 
143
148
 
144
149
  .. py:class:: IncidentTableColumn
@@ -172,11 +177,21 @@ example::
172
177
  a ``<td>``-tag. This makes it possible to add attributes to the
173
178
  ``<td>``-tag or skip including the ``cell_template`` altogether.
174
179
 
180
+ Deprecated: see ``detail_link``
181
+
175
182
  Replacing the default with
176
183
  ``htmx/incident/_incident_table_cell_wrapper_link_to_details.html`` will
177
184
  result in the ``cell_template`` being wrapped in a link (``<a>``) to the
178
185
  details page.
179
186
 
187
+ .. py:attribute::detail_link
188
+
189
+ :type: bool
190
+ :value: False
191
+
192
+ Setting ``detail_link`` to ``True`` will wrap the contents of the cell
193
+ with a link (``<a>``) to the details page.
194
+
180
195
  .. py:attribute:: column_classes
181
196
 
182
197
  :type: str
@@ -243,7 +258,7 @@ You could then create ``path/to/_extra_widget.html`` as following::
243
258
 
244
259
 
245
260
  Toast messages
246
- --------------
261
+ ==============
247
262
 
248
263
  ``argus_htmx`` uses the `Django Messages`_ framework to dynamically display notifications toast
249
264
  messages to the user. Some of these messages stay on screen until the user refreshes, while others
@@ -83,7 +83,7 @@ an extensive list, but can provide entry points or inspiration:
83
83
  ``hx-swap-oob`` content, to a incident list htmx partial response
84
84
  * ``htmx/user/_user_menu.html``: add or remove items to the user menu (the menu that appears when
85
85
  clicking on the user's initials in the top right)
86
- * ``htmx/user/preferences.html``: add custom preferences to the preferences page
86
+ * ``htmx/user/preferences_list.html``: add custom preferences to the preferences page
87
87
  * ``registration/login.html``: show additional information to a user prior to logging in, such as
88
88
  a link to a privacy policy or other terms
89
89
 
@@ -0,0 +1,19 @@
1
+ =======================
2
+ Howto: Handle sonarqube
3
+ =======================
4
+
5
+ We use `sonarqube`_ to scan new code for potential issues and security hotspots.
6
+ It posts comments on pull requests when it finds new issues in that code using rules
7
+ defined by the developer team at Sikt.
8
+
9
+ But we sometimes also disagree with how it handles parts of certain rules. We will
10
+ document that here and which comment to use when marking such an issue as accepted or
11
+ false positive.
12
+
13
+ python:S1192 - String literals should not be duplicated
14
+ -------------------------------------------------------
15
+
16
+ If it makes it more readable, for example if configuration is happening within the
17
+ Python code, then we accept it with "This is better for readability".
18
+
19
+ .. _sonarqube: https://www.sonarsource.com/products/sonarcloud/
@@ -0,0 +1,14 @@
1
+ ===============================
2
+ How to trigger test error pages
3
+ ===============================
4
+
5
+ To test Django's error views in Argus, the following endpoint can be used:
6
+
7
+ ``/.error/?status-code=<error_code>``
8
+
9
+ Replace ``<error_code>`` with one of the supported HTML error codes: 400, 401, 403, 404, 410, or 500.
10
+
11
+ Notes
12
+ ~~~~~
13
+ - DEBUG must be set to False in the Django settings to view the standard error pages.
14
+ - Status codes ``404`` and ``500`` will trigger relevant exceptions, which in turn send messages to the user in the main view.
@@ -607,6 +607,9 @@ Notification profile endpoints
607
607
  "sourceSystemIds": [
608
608
  2
609
609
  ],
610
+ "source_types": [
611
+ "argus"
612
+ ],
610
613
  "open": null,
611
614
  "acked": null,
612
615
  "stateful": null,
@@ -931,6 +934,9 @@ Notification profile endpoints
931
934
  "sourceSystemIds": [
932
935
  1
933
936
  ],
937
+ "source_types": [
938
+ "argus"
939
+ ],
934
940
  "tags": [
935
941
  "key1=value1"
936
942
  ],
@@ -955,6 +961,9 @@ Notification profile endpoints
955
961
  "sourceSystemIds": [
956
962
  1
957
963
  ],
964
+ "source_types": [
965
+ "argus"
966
+ ],
958
967
  "tags": [
959
968
  "key1=value1"
960
969
  ],
@@ -172,13 +172,168 @@ a time), and the user can select a different page size from ``[10, 20, 50,
172
172
  :setting:`ARGUS_INCIDENTS_DEFAULT_PAGE_SIZE` (an integer) and
173
173
  :setting:`ARGUS_INCIDENTS_PAGE_SIZES` setting respectively.
174
174
 
175
- Incident table column customization
176
- -----------------------------------
175
+ .. _table-column-reference:
177
176
 
178
- You can customize which columns are shown in the incidents listing table by
179
- overriding the :setting:`INCIDENT_TABLE_COLUMNS` setting. See
177
+ Table columns
178
+ -------------
179
+
180
+ Argus ships with more possible column types than what are configured by
181
+ default.
182
+
183
+ The columns to use are set with the :setting:`INCIDENT_TABLE_COLUMN_LAYOUTS`
184
+ setting.
185
+
186
+ This is the default for the setting as of this version of Argus:
187
+
188
+ .. code-block:: python3
189
+
190
+ INCIDENT_TABLE_COLUMN_LAYOUTS = {
191
+ "built-in": [
192
+ "color_status",
193
+ "row_select",
194
+ "start_time",
195
+ "combined_status",
196
+ "level",
197
+ "source",
198
+ "description",
199
+ "ticket",
200
+ ]
201
+ }
202
+
203
+ You can define your own columns from scratch, see
180
204
  :ref:`customize-htmx-frontend` for examples.
181
205
 
206
+ All built-in columns
207
+ ~~~~~~~~~~~~~~~~~~~~
208
+
209
+ ack
210
+ :From: ack
211
+ :Name: ack
212
+ :Description: Show whether the incident is acked or not.
213
+ :Redundant with: combined_status, combined_status_icons
214
+
215
+ ack_icon
216
+ :From: ack
217
+ :Name: ack_icon
218
+ :Description: Show whether the incident is acked or not, using an icon instead of text.
219
+ :Redundant with: combined_status, combined_status_icons
220
+
221
+ color_status
222
+ :From: ack + status
223
+ :Name: color_status
224
+ :Description: A combination of ackedness and openness, shown only as a color.
225
+
226
+ combined_status
227
+ :From: ack + status
228
+ :Name: combined_status
229
+ :Description: Merges the "open" column and the "ack" column into one.
230
+
231
+ combined_status_icons
232
+ :From: ack + status
233
+ :Name: combined_status_icons
234
+ :Description: Merges the "open" column and the "ack" column into one, using icons instead of text.
235
+
236
+ description
237
+ :From: description
238
+ :Name: description
239
+ :Description: The contents of the description-field of the incident.
240
+ :Redundant with: search_description
241
+
242
+ search_description
243
+ :From: description
244
+ :Name: search_description
245
+ :Description: Search for (free text) all tickets that matches and show their
246
+ incidents.
247
+ :Redundant with: description
248
+
249
+ id
250
+ :From: id
251
+ :Name: id
252
+ :Description: The internal id of the incident in argus.
253
+
254
+ level
255
+ :From: level
256
+ :Name: level
257
+ :Description: The severity level.
258
+ :Redundant with: select_levels
259
+
260
+ select_levels
261
+ :From: level
262
+ :Name: select_levels
263
+ :Description: The severity level. One or more can be selected. Might conflict
264
+ with the notification filter field ``maxlevel``. If maxlevel is
265
+ set to less than max, you will get no results if searching for
266
+ the max via this field.
267
+ :Redundant with: level
268
+
269
+ status
270
+ :From: open
271
+ :Name: status
272
+ :Description: Whether the incident is still ongoing or has been closed.
273
+ :Redundant with: combined_status, combined_status_icons
274
+
275
+ status_icon
276
+ :From: open
277
+ :Name: status_icon
278
+ :Description: Whether the incident is still ongoing or has been closed, using an icon instead of text.
279
+ :Redundant with: combined_status, combined_status_icons
280
+
281
+ row_select
282
+ :From: depends on incident id
283
+ :Name: row_select
284
+ :Description: Checkbox to select the row for bulk changes.
285
+
286
+ source
287
+ :From: source
288
+ :Name: source
289
+ :Description: The source of the incident.
290
+
291
+ start_time
292
+ :From: start_time
293
+ :Name: start_time
294
+ :Description: When the incident started, fixed width.
295
+ :Redundant with: narrow_start_time
296
+
297
+ narrow_start_time
298
+ :From: start_time
299
+ :Name: start_time
300
+ :Description: When the incident started, width depends on date format.
301
+ :Redundant with: start_time
302
+
303
+ start_time_and_age
304
+ :From: start_time + age
305
+ :Name: start_time_and_age
306
+ :Description: When the incident started, and how long it has been ongoing.
307
+ :Redundant with: start_time
308
+
309
+ age
310
+ :From: age
311
+ :Name: age
312
+ :Description: How long the incident has been ongoing.
313
+ :Redundant with: start_time_and_age
314
+
315
+ ticket
316
+ :From: ticket_url
317
+ :Name: ticket
318
+ :Description: A link to a ticket/issue in an external system with more information.
319
+ :Redundant with: has_ticket_url, search_ticket_url
320
+
321
+ has_ticket_url
322
+ :From: ticket_url
323
+ :Name: has_ticket_url
324
+ :Description: A link to a ticket/issue in an external system with more information.
325
+ Can toggle showing only incidents that has or lacks a ticket url.
326
+ :Redundant with: ticket, search_ticket_url
327
+
328
+ search_ticket_url
329
+ :From: ticket_url
330
+ :Name: search_ticket_url
331
+ :Description: A link to a ticket/issue in an external system with more information.
332
+ Can search through all the tickets for the term, and only show
333
+ the matching incidents.
334
+ :Redundant with: ticket, has_ticket_url
335
+
336
+
182
337
  Themes
183
338
  ------
184
339
 
@@ -186,6 +341,20 @@ If you wish to change the available themes, first make sure the support for
186
341
  Tailwind CSS and daisyUI has been installed, then see
187
342
  :ref:`customize-htmx-frontend`.
188
343
 
344
+ Usage of Javascript
345
+ ===================
346
+
347
+ The amount of javascript libraries is deliberately being kept to a minimum. The
348
+ ones in use are vendored to avoid a build step and stored locally to not depend
349
+ on DNS.
350
+
351
+ The following are in use:
352
+
353
+ * `htmx <https://htmx.org/>`_ for updating parts of a page smoothly
354
+ * `hyperscript <https://hyperscript.org/>`_ for adding client-side interactivity, used for cases where htmx alone is not sufficient
355
+ * `choices.js <https://choices-js.github.io/Choices/>`_ for typeahead search,
356
+ multi select
357
+
189
358
  Customization
190
359
  =============
191
360
 
@@ -315,8 +315,35 @@ Ticket system settings
315
315
  ``TICKET_PLUGIN``, ``TICKET_ENDPOINT``, ``TICKET_AUTHENTICATION_SECRET``,
316
316
  ``TICKET_INFORMATION`` are all described in :ref:`ticket-systems-settings`.
317
317
 
318
+ Frontend settings
319
+ -----------------
320
+
321
+ .. setting:: INCIDENT_TABLE_COLUMN_LAYOUTS
322
+
323
+ * :setting:`INCIDENT_TABLE_COLUMN_LAYOUTS` allows adding one or more choosable
324
+ incident list column layouts in addition to the built-in layout. Format::
325
+
326
+ INCIDENT_TABLE_COLUMN_LAYOUTS = {
327
+ "default": [
328
+ "row_select",
329
+ "combined_status",
330
+ "source",
331
+ "description",
332
+ ]
333
+ }
334
+
335
+ See :ref:`table-column-reference` for the built-in layout and a list of all
336
+ available built-in column types.
337
+
338
+ .. setting:: INCIDENT_TABLE_COLUMNS
339
+
340
+ * :setting:`INCIDENT_TABLE_COLUMNS`
341
+
342
+ The old, deprecated variant of :setting:`INCIDENT_TABLE_COLUMN_LAYOUTS`, it
343
+ only supported a single column layout.
344
+
318
345
  Special environment settings
319
- ----------------------------
346
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
320
347
 
321
348
  .. setting:: BANNER_MESSAGE
322
349
 
@@ -344,4 +371,3 @@ Debugging settings
344
371
 
345
372
  * :setting:`TEMPLATE_DEBUG` (optional) provides a convenient way to turn debugging on and off
346
373
  for templates. If undefined it will default to the value of :setting:`DEBUG`.
347
-
@@ -626,19 +626,43 @@ receive by creating, editing and deleting *notification profiles*.
626
626
  About components of notification profiles
627
627
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
628
628
 
629
- 1. **Timeslot** allows you to customize **when** you want to receive the
630
- alarm notifications. You can choose one timeslot per notification
631
- profile. Timeslots are reusable across multiple notification
632
- profiles.
633
- 2. **Filter** allows you to customize **what** alarms (incidents) you
634
- want to receive the notifications about. You can choose multiple
635
- filters per notification profile. Filters are reusable across
636
- multiple notification profiles.
637
- 3. **Destination** allows you to customize **where** you want to receive
638
- the alarm notifications. You can choose multiple destinations per
639
- notification profile. Destinations are reusable across multiple
640
- notification profiles. Destinations may be of `different media
641
- types <#about-the-available-notification-media>`_.
629
+ Timeslot
630
+ ^^^^^^^^
631
+
632
+ **Timeslot** allows you to customize **when** you want to receive
633
+ the alarm notifications. You can choose one timeslot per
634
+ notification profile. Timeslots are reusable across multiple
635
+ notification profiles.
636
+
637
+ Filter
638
+ ^^^^^^
639
+
640
+ **Filter** allows you to customize **what** alarms (incidents) you
641
+ want to receive the notifications about. Filters are reusable
642
+ across multiple notification profiles.
643
+
644
+ You can choose multiple filters per notification profile. They are
645
+ *combined to increase precision*. You cannot use *one* profile for
646
+ *sufficiently different types of incidents*.
647
+
648
+ For instance, if an incident may only ever have one tag that
649
+ starts with ``hostname=``, then having a profile with multiple
650
+ filters, each asking for *different* hostnames, will never be able
651
+ to match anything.
652
+
653
+ If you need to match multiple hostname tags in a profile, make
654
+ a filter that only matches hostnames and include that filter in
655
+ the profile.
656
+
657
+ Destination
658
+ ^^^^^^^^^^^
659
+
660
+ **Destination** allows you to customize **where** you want to
661
+ receive the alarm notifications. You can choose multiple
662
+ destinations per notification profile. Destinations are reusable
663
+ across multiple notification profiles. Destinations may be of
664
+ `different media types
665
+ <#about-the-available-notification-media>`_.
642
666
 
643
667
  .. _about-the-available-notification-media:
644
668
  About the available notification media