Skip to content

About

Connects to transmission torrent daemon(s) and exports metrics to an influxdb instance

Topics

Resources

Stars

6 stars

Watchers

1 watching

Forks

Repository files navigation

Transmission InfluxDB Metrics Exporter

This is program scrapes statistics from running transmission torrent daemon(s), and inserts them into InfluxDB.

This allows for querying of transmission time-series statistics for use with applications such as dashboards.

Configuration

A file called config.json must be present in the working directory of the program when running.

An example configuration:

{
  "seconds_between_collections": 60,  // time to wait between finished transmission scrapes
  "influxdb": {
    "host_addr": "influxdb.remote.host.or.ip",
    "host_port": 8086,
    "use_ssl": false,
    "verify_ssl": false,
    "database": "transmission",  // database will be created if it doesn't exist (don't change if using provided grafana dashboard)
    "username": "root",  // if authentication is disabled on influxdb, leave user/pass as-is
    "password": "root"
  },
  "transmission_clients": [  // Specify as many as desired
    {
      "name": "transmission",  // The name used to tag db datapoints with for this transmission daemon. Useful to make unique when you have more than one client
      "rpc_addr": "transmission.remote.host.or.ip",
      "rpc_port": 9091,
      "rpc_path": "/transmission/rpc",
      "rpc_user": "user",
      "rpc_password": "someRPCpasswordFromTransmissionDaemon",
      "rpc_verified_tls": false,  // note that unverified ssl/tls (such as with self-signed cert) is not currently supported
      "rpc_timeout": 60,  // how long to allow an RPC request to take before timing out with an error
      "disable_individual_torrent_collection": false  // optional boolean which can disable making points for individual torrents (significantly reduces influxdb usage but some dashboard graphs won't work)
    }
  ]
}

Running

Requirements

In order to run this, there are different requirements for the local machine running this and the (potentially) remote machine running the torrent daemon and influxdb.

  • Remote Machine
    • Running transmission daemon (only version 3.00+) accessible over the network with the specified RPC options in the config.
    • Running influxdb 1.X instance accessible over the network with the specified options in the config. Must have flux and influxql enabled.
    • Note: The transmission daemon and db can be on the same (or different) machines.
  • Local Machine (with Docker)
    • No additional requirements. See below if you do not wish to use docker.
  • Local Machine (without Docker)
    • Python 3.14+ with the packages from requirements.txt installed (python3 -m pip install -r requirements.txt)
    • Alternatively, if using uv, simply run uv sync --no-dev to install dependencies.
    • This should be able to be ran on windows or any unix system, but only tested on linux. (If there are bugs running this on another OS, please report them)

Starting

If using docker, simply run the container, mounting your desired config.json into /app/config.json, and any other necessary directories.

i.e. docker run -v $(pwd)/config.json:/app/config.json cheeseandcereal/transmission_influxdb_exporter:latest

If not using docker, download the source code here, ensure the above requirements are met, create and ensure you have a config.json in your working directory, then start the program with python3 -m transmission_influxdb.main in a terminal of some sort. (python3 may need to be replaced with python depending on how it was installed).

If using uv, you can simply run uv run python -m transmission_influxdb.main or make run.

Systemd Example Service

The following is an example systemd service file if running on linux with systemd and not docker.

[Unit]
Description=Transmission InfluxDB Metrics Exporter
After=network-online.target

[Service]
# Set unbuffered so logging works when running under systemd
Environment="PYTHONUNBUFFERED=true"
WorkingDirectory=/directory/of/code/with/configjson/
ExecStart=/usr/bin/python3 -m transmission_influxdb.main
Restart=always
RestartSec=30

[Install]
WantedBy=default.target

Development

This project uses uv for dependency management and ruff for linting/formatting.

Setup

uv sync  # installs all dependencies (including dev) into a .venv

Common Commands

Command Description
make run Run the application
make lint Run ruff linter, ruff formatter check, and mypy
make format Auto-fix lint issues and format code
make full-test Run all checks (requirements sync, lint, tests)
make docker-test Run all checks inside a Docker container
make lock Update uv.lock and regenerate requirements.txt
make clean Remove build artifacts and caches

Dependency Changes

After adding, removing, or updating dependencies in pyproject.toml:

make lock  # updates uv.lock and regenerates requirements.txt

The make full-test target will fail if requirements.txt is out of sync with uv.lock.

Grafana Dashboard

Check the grafana folder for a dashboard with many pre-built components.

I recommend you start with this dashboard and remove the components you do not want, and rearrange the remaining ones.

Dashboard Requirements

In order to use this dashboard, you must have grafana 7.1+ with influxDB configured as a datasource with the flux query language (not influxql).

Screenshot

Dashboard Screenshot

About

Connects to transmission torrent daemon(s) and exports metrics to an influxdb instance

Topics

Resources

Stars

6 stars

Watchers

1 watching

Forks

Releases

Used by

Contributors

Languages