new metrics

This commit is contained in:
√(noham)² 2024-01-21 21:19:01 +01:00
parent 6b9c2e5a50
commit ec6af68f46
3 changed files with 97 additions and 3 deletions

1
.gitignore vendored
View File

@ -136,3 +136,4 @@ config.env
# Ignore ruff files # Ignore ruff files
.ruff_cache .ruff_cache
.DS_Store

39
docker-compose.yml Normal file
View File

@ -0,0 +1,39 @@
name: prom-qb-alltime
services:
esanchezm:
cpu_shares: 90
command: []
deploy:
resources:
limits:
memory: 7943M
environment:
- QBITTORRENT_HOST=192.168.1.58
- QBITTORRENT_PASS=Cp3mMdP!#
- QBITTORRENT_PORT=8188
- QBITTORRENT_USER=noham
image: prom-qb-alltime
labels:
icon: https://raw.githubusercontent.com/esanchezm/prometheus-qbittorrent-exporter/master/logo.png
ports:
- target: 8000
published: "9101"
protocol: tcp
restart: unless-stopped
volumes: []
devices: []
cap_add: []
network_mode: bridge
privileged: false
container_name: ""
x-casaos:
author: self
category: self
hostname: ""
icon: https://raw.githubusercontent.com/esanchezm/prometheus-qbittorrent-exporter/master/logo.png
index: /metrics
port_map: "9101"
scheme: http
store_app_id: relaxed_albert
title:
custom: prom-qb-alltime

View File

@ -1,11 +1,13 @@
import faulthandler import faulthandler
import logging import logging
import os import os
from dotenv import load_dotenv
load_dotenv()
import signal import signal
import sys import sys
import time import time
from dataclasses import dataclass, field from dataclasses import dataclass, field
from enum import StrEnum, auto from enum import Enum, auto
from typing import Any, Iterable from typing import Any, Iterable
from prometheus_client import start_http_server from prometheus_client import start_http_server
@ -17,8 +19,7 @@ from qbittorrentapi import Client, TorrentStates
faulthandler.enable() faulthandler.enable()
logger = logging.getLogger() logger = logging.getLogger()
class MetricType(Enum):
class MetricType(StrEnum):
""" """
Represents possible metric types (used in this project). Represents possible metric types (used in this project).
""" """
@ -159,6 +160,59 @@ class QbittorrentMetricsCollector:
help_text="Total data uploaded, in bytes.", help_text="Total data uploaded, in bytes.",
metric_type=MetricType.COUNTER, metric_type=MetricType.COUNTER,
), ),
Metric(
name=f"{self.config['metrics_prefix']}_total_peer_connections",
value=server_state.get("total_peer_connections", 0),
labels={}, # no labels in the example
help_text="total_peer_connections.",
metric_type=MetricType.COUNTER,
),
#### Disk metrics
Metric(
name=f"{self.config['metrics_prefix']}_write_cache_overload",
value=server_state.get("write_cache_overload", 0),
labels={}, # no labels in the example
help_text="write_cache_overload.",
metric_type=MetricType.COUNTER,
),
Metric(
name=f"{self.config['metrics_prefix']}_read_cache_overload",
value=server_state.get("read_cache_overload", 0),
labels={}, # no labels in the example
help_text="read_cache_overload.",
metric_type=MetricType.COUNTER,
),
Metric(
name=f"{self.config['metrics_prefix']}_read_cache_hits",
value=server_state.get("read_cache_hits", 0),
labels={}, # no labels in the example
help_text="read_cache_hits.",
metric_type=MetricType.COUNTER,
),
Metric(
name=f"{self.config['metrics_prefix']}_average_time_queue",
value=server_state.get("average_time_queue", 0),
labels={}, # no labels in the example
help_text="average_time_queue.",
metric_type=MetricType.COUNTER,
),
Metric(
name=f"{self.config['metrics_prefix']}_free_space_on_disk",
value=server_state.get("free_space_on_disk", 0),
labels={}, # no labels in the example
help_text="free_space_on_disk.",
metric_type=MetricType.COUNTER,
),
Metric(
name=f"{self.config['metrics_prefix']}_queued_io_jobs",
value=server_state.get("queued_io_jobs", 0),
labels={}, # no labels in the example
help_text="queued_io_jobs.",
metric_type=MetricType.COUNTER,
),
] ]
def _fetch_categories(self) -> dict: def _fetch_categories(self) -> dict: