Skip to main content

Zino ↔ Argus glue service

This is a glue service for integration between Argus, the alert aggregation server, and Zino, the network state monitor provided by Sikt.

This is still a work in progress and more information will be added here later.

Installing zino-argus-glue

From Python Package Index (PyPI)

$ pip install zino-argus-glue
...
$ zinoargus --help
usage: zinoargus [-h] [-v] [-c CONFIG_FILE]

options:
  -h, --help            show this help message and exit
  -v, --verbose
  -c CONFIG_FILE, --config-file CONFIG_FILE
$

From source (this repository)

$ pip install .
...
$ zinoargus --help
usage: zinoargus [-h] [-v] [-c CONFIG_FILE]

options:
  -h, --help            show this help message and exit
  -v, --verbose
  -c CONFIG_FILE, --config-file CONFIG_FILE
$

Configuring zino-argus-glue

The zino-argus-glue program needs to know how to connect to both a Zino API server and an Argus API server in order to synchronize incidents from Zino to Argus. Addresses and authentication tokens for these APIs are configured in zinoargus.toml. zinoargus reads this file the current working directory, or you can specify an alternate path to a configuration file using the -c command line option. See zinoargus.toml.example for an example configuration file.

Primary/secondary failover

zino-argus-glue can run as a secondary instance that monitors a primary Zino server and only takes over Argus synchronization only when the primary becomes unreachable. The secondary polls the primary's SNMP agent for its uptime at regular intervals; after a configurable number of consecutive failures it switches from STANDBY to ACTIVE and begins syncing. When the primary recovers (the same number of consecutive successes), it switches back to STANDBY.

A complete failover deployment therefore consists of two independent Zino servers (each with its own state) and two zino-argus-glue instances. Each glue instance connects to its own local Zino, and the secondary glue additionally pings the primary Zino's SNMP agent to decide whether to be active.

To enable failover, add a [failover] section to your configuration file:

[failover]
primary_server = "10.0.0.1"
primary_snmp_port = 8000
snmp_community = "public"
ping_timeout = 5
threshold = 10
  • primary_server — hostname or IP of the primary Zino's SNMP agent (required)
  • primary_snmp_port — UDP port of the SNMP agent (default 8000)
  • snmp_community — SNMP community string (default "public")
  • ping_timeout — timeout in seconds for each SNMP query (default 5)
  • threshold — number of consecutive failures before activating, and consecutive successes before standing down (default 10)

When the [failover] section is omitted, the daemon runs in standalone (always-active) mode, which is the default behavior.

Verifying failover manually

To exercise the failover logic end-to-end:

  1. Start the secondary zino-argus-glue with a [failover] section pointing at the primary Zino's SNMP agent. It should log that it is starting in STANDBY mode.
  2. Stop the primary Zino process. After threshold consecutive ping failures the secondary should log a transition to ACTIVE and begin syncing its own Zino's cases to Argus.
  3. Restart the primary Zino. After threshold consecutive successful pings the secondary should log a transition back to STANDBY and stop syncing.

A low threshold (e.g. 3) is convenient for testing; production deployments will typically want a higher value to avoid flapping.

Copying

Copyright 2025-2026 Sikt (The Norwegian Agency for Shared Services in Education and Research)

Licensed under the Apache License, Version 2.0; See LICENSE for a full copy of the License.

Developing Zino-Argus-Glue

Using towncrier to automatically produce the changelog

Before merging a pull request

To be able to automatically produce the changelog for a release one file for each pull request (also called news fragment) needs to be added to the folder changelog.d/.

The name of the file consists of three parts separated by a period:

  1. The identifier: the issue number or the pull request number. If we don't want to add a link to the resulting changelog entry then a + followed by a unique short description.
  2. The type of the change: we use security, removed, deprecated, added, changed and fixed.
  3. The file suffix, e.g. .md, towncrier does not care which suffix a fragment has.

So an example for a file name related to an issue/pull request would be 214.added.md or for a file without corresponding issue +fixed-pagination-bug.fixed.md.

This file can either be created manually with a file name as specified above and the changelog text as content or one can use towncrier to create such a file as following:

$ towncrier create -c "Changelog content" 214.added.md

When opening a pull request there will be a check to make sure that a news fragment is added and it will fail if it is missing.

Before a release

To add all content from the changelog.d/ folder to the changelog file simply run

$ towncrier build --version {version}

This will also delete all files in changelog.d/.

To preview what the addition to the changelog file would look like add the flag --draft. This will not delete any files or change CHANGELOG.md. It will only output the preview in the terminal.

A few other helpful flags:

  • date DATE - set the date of the release, default is today
  • keep - do not delete the files in changelog.d/

More information about towncrier.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

zino_argus_glue-0.5.0.tar.gz (35.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

zino_argus_glue-0.5.0-py3-none-any.whl (24.2 kB view details)

Uploaded Python 3

File details

Details for the file zino_argus_glue-0.5.0.tar.gz.

File metadata

  • Download URL: zino_argus_glue-0.5.0.tar.gz
  • Upload date:
  • Size: 35.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"NixOS","version":"26.05","id":"yarara","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for zino_argus_glue-0.5.0.tar.gz
Algorithm Hash digest
SHA256 6c0f3a838be3df70c28e09a1bd2cdd5c2f6c0a0ddbf1e4ba447064579c92d6b9
MD5 c91162cd9870f3b8883c9fd5f7dfd025
BLAKE2b-256 e746b2ce575123420b119f6d9aeb78db9bf6882c65c4048415723939fadf45b9

See more details on using hashes here.

File details

Details for the file zino_argus_glue-0.5.0-py3-none-any.whl.

File metadata

  • Download URL: zino_argus_glue-0.5.0-py3-none-any.whl
  • Upload date:
  • Size: 24.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"NixOS","version":"26.05","id":"yarara","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for zino_argus_glue-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e9063799c7372bba7aec77fb85f6fb8810c47e3324d5c087b285b0ced5156968
MD5 d9213aa78b204e40410788fd0a60df14
BLAKE2b-256 56e619cc1df48e352c1695080fc02b196b939c45012a01a83e652be5bfc29533

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.5.0 This release

2 files

0.4.0

2 files

0.3.0

2 files

0.2.1

2 files

0.2.0

2 files

0.1.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page