Metadata-Version: 2.4
Name: rnmon
Version: 0.3.2
Summary: Reticulum Monitoring Daemon
Author: Laura Batalha
License-Expression: MIT
Keywords: exporter,influx,monitoring,reticulum
Requires-Python: >=3.9
Requires-Dist: pyyaml>=6.0.2
Requires-Dist: requests>=2.32.3
Requires-Dist: rns>=0.9.6
Description-Content-Type: text/markdown

# RNMon - Reticulum Application Monitoring Daemon

RNMon is a simple monitoring daemon designed to monitor the status of multiple RNS applications and push the metrics over http using the influx line protocol.

## Supported Applications

* Reticulum Transport Nodes (Also some metrics for non transport nodes)
* LXMF Propagation Nodes

## Installing

### Package

The package is available in [PyPI](https://pypi.org/project/rnmon/), install it with your python package manager of choice.

I recommend using [`uv`](https://docs.astral.sh/uv/) since it cleanly manages an environment if you run or install it as a tool:

Execute it simply: `uvx rnmon`

Install it globally (but in its own environment): `uv tool install rnmon` and run `rnmon`

### Container

There is a container image available at `ghcr.io/lbataha/rnmon`.
You can use the `latest` tag, or specify the version matching the git tag you want, there are also image builds available in github actions.

The repo contains a `Dockerfile` and an example `docker-compose.yml`, but you can run it simply with:

```shell
docker run --name rnmon -v /path/to/config:/config ghcr.io/lbataha/rnmon:latest
```

## Configuration

Configure the daemon via `scraping.yaml`, the example config has comments explaining the options.

The configuration for reticulum is auto-discovered, but you can specify the location of the configuration directory using the `--rns-config` argument.

## Operational principles

The metric pusher and all targets are executed in their own thread. The main thread starts a new RNS instance, and closes it on exit.

A link is established for each scrape target to reduce network overhead. If a link is broken for any reason, the thread is terminated and restarted - this avoids having to deal with the built-in RNS link retry mechanisms, their associated timeouts and any edge cases caused by using shared RNS intances. This might be changed in the future if RNS fixes the issues particular to this use case.
