github Uninett/Argus v2.10.0
[2.10.0] - 2026-08-28

2 hours ago

This release is the first to support Django 6.1, and no longer supports Django
6.0.

Remember to migrate, and this time there is a manual step to clean up some
migration cruft as well, see NOTES.

Big new features, in brief

  • Heartbeat functionality
  • Kiosk mode, see the new link in the filter box
  • About-page, with a button that can check for a for new release

See the copious NOTES.

Removed

  • Removed outdated migrations files. See NOTES!
    (#2022)
  • Removed support for testing on Django 6.0, as that version is EOL-ed.
    (#2025)

Added

  • Added warnings to be shown for destinations and notification profiles where
    the medium is not installed
    (#1453)

  • Added INCIDENT_RESTART event type to allow source systems to reopen incidents
    (#1502)

  • Add maintenance API endpoints
    (#1774)

  • Implemented detailed Slack URL validator
    (#1919)

  • Add docs for using the base apprise plugin directly
    (#1921)

  • Added a kiosk mode to the main view, providing a minimal version of the
    incident list suitable for passive Argus usage.
    (#1938)

  • Added new API endpoint to explicitly update the last_seen field for
    a source system. (#1939)

  • Added a way to to store expected heartbeat frequency (as a Postgres interval,
    minimum 60 seconds) to a source system, and made the new field visible in the
    admin. (#1941)

  • Added management command suitable to run as a cronjob that looks for dead
    incidents (as per heartbeat frequency and last seen heartbeat). Dead sources
    are reported as incidents, formerly dead sources get their respective
    incidents auto-closed.
    (#1954)

  • Show last_seen and heartbeat_frequency in the source list and allow
    altering heartbeat_frequency.
    (#1962)

  • The time zone is now configurable via the TIME_ZONE environment variable
    (default Europe/Oslo, unchanged). The TIME_ZONE variable already shipped
    in docker-compose.yml previously had no effect.
    (#1963)

  • Added reference documentation for Argus's own incidents.
    (#1964)

  • Added the boilerplate for API v3 for incidents, with an altered SourceSystem
    serializer showing the last_seen field as read only to serve as an example.
    (#2010)

  • Added support for testing on Django 6.1.
    (#2025)

  • Add an "about"-page (#2042)

  • Added function to return a ticket identifier for an incident to the base
    ticket class (#2047)

  • Added button to about page to trigger a check for new versions. Staff only!
    (#2052)

  • A new endpoint dedicated to health checks was added, on "/.still-alive/".
    This is to make it easier to filter out in access logs.

  • Added zabbix-argus-glue to documented list of known glue services

  • Added a new log level: TRACE, for stuff even less important than DEBUG. In
    the process, moved logging helpers to a dedicated home in anticipation of
    supporting better logging in production.

    This new level is really not a good match for use in production, expect a lot
    of noise. See NOTES.

  • The Docker image publishing workflow can now be triggered manually to
    (re)build any past release, and tags the newest release as latest.

Changed

  • Changed API to allow for an incident to have multiple INCIDENT_END events
    (#1502)

  • Represent tickets using a per-plugin identifier.
    (#1710)

  • Made Apprise an optional dependency
    (#1920)

  • Collected the validation functionality of the media plugins in the base
    class, removed the ability to version a media plugin, and changed the plugins
    that are shipped with Argus to use new validation functionality.

    This will break existing 3rd party media plugins. See NOTES.
    (#2023)

  • Updated CONTRIBUTING file to be more naggy, we really want everyone to
    use the PR template and to write proper commit messages!
    (#2026)

  • Changed versioncheck to use the PyPI upload time instead of Argus' visit time
    to register new versions.
    (#2051)

  • Whether a destination medium is marked as installed or not is now visible and
    filterable in the admin.

Fixed

  • Simplified the tags API (in version 3) so that the internal structure of tags
    is properly hidden. This will make altering the actual structure a smaller
    task. (#136)
  • Slimmed down the production Docker image with a multi-stage build, so the
    build toolchain and the full source tree (including its git history) are no
    longer baked into the published image.
    (#923)
  • Added check for whether notifications are globally enabled before sending
    email and SMS notifications
    (#1918)
  • Fixed incident list not reacting to filtering changes when a saved filter is
    selected (#1940)
  • Fixed planned maintenance filter selection freezing the drop-down
    (#1958)
  • Added check on startup for if an Apprise-derived medium is activated without
    the Apprise package itself being installed.
    (#1965)
  • Fixed searching by description being case sensitive
    (#1978)
  • Fixed state- and ack-field being empty after selecting and deselecting
    filters (#2000)
  • Fixed filter tag dropdown closing when unselecting last item
    (#2005)
  • Sorted the destination dropdown by media when adding/updating a notification
    profile (#2017)
  • Show the destination label set by the user in the dropdown when
    adding/updating a notification profile
    (#2018)
  • Correct the input format of v3 of the destination API
    (#2029)
  • Fixed incident table becoming unresponsive when a bulk action dialog box was
    open during a table refresh.
    (#2030)
  • Fixed the incident list sorting configuration not being preserved after a
    refresh and after changing the page
    (#2036)
  • Ensured that kiosk mode always resets to page 1 to avoid strange behaviour
    (#2044)
  • Fixed connecting ongoing planned maintenance tasks with incidents that are
    being covered by them (#2049)
  • Pinned django-psycopg-infinity to 0.1.0. Version 0.1.1 changed infinity
    timestamps loaded from timestamp with time zone columns from local time to
    UTC. Since infinity is represented as a wall-clock sentinel rather than
    a true instant, the two are not equal, so an incident's end_time no longer
    compared equal to the infinity constant after being reloaded from the
    database. Among other things this made notifications for open incidents
    render an explicit far-future timestamp instead of "Still open".

Don't miss a new Argus release

NewReleases is sending notifications on new releases.