server version number metric
This commit is contained in:
parent
e10e983b0d
commit
1e07c1be5a
1 changed files with 44 additions and 7 deletions
|
@ -3,6 +3,8 @@ import os
|
||||||
import sys
|
import sys
|
||||||
import signal
|
import signal
|
||||||
import faulthandler
|
import faulthandler
|
||||||
|
|
||||||
|
import requests
|
||||||
from attrdict import AttrDict
|
from attrdict import AttrDict
|
||||||
from qbittorrentapi import Client, TorrentStates
|
from qbittorrentapi import Client, TorrentStates
|
||||||
from qbittorrentapi.exceptions import APIConnectionError
|
from qbittorrentapi.exceptions import APIConnectionError
|
||||||
|
@ -11,7 +13,6 @@ from prometheus_client.core import GaugeMetricFamily, CounterMetricFamily, REGIS
|
||||||
import logging
|
import logging
|
||||||
from pythonjsonlogger import jsonlogger
|
from pythonjsonlogger import jsonlogger
|
||||||
|
|
||||||
|
|
||||||
# Enable dumps on stderr in case of segfault
|
# Enable dumps on stderr in case of segfault
|
||||||
faulthandler.enable()
|
faulthandler.enable()
|
||||||
logger = logging.getLogger()
|
logger = logging.getLogger()
|
||||||
|
@ -64,9 +65,44 @@ class QbittorrentMetricsCollector():
|
||||||
metrics = []
|
metrics = []
|
||||||
metrics.extend(self.get_qbittorrent_status_metrics())
|
metrics.extend(self.get_qbittorrent_status_metrics())
|
||||||
metrics.extend(self.get_qbittorrent_torrent_tags_metrics())
|
metrics.extend(self.get_qbittorrent_torrent_tags_metrics())
|
||||||
|
metrics.extend(self.get_server_version_number())
|
||||||
|
|
||||||
return metrics
|
return metrics
|
||||||
|
|
||||||
|
|
||||||
|
def get_server_version_number(self):
|
||||||
|
try:
|
||||||
|
server_version_endpoint = "/api/server-info/version"
|
||||||
|
response_server_version = requests.request(
|
||||||
|
"GET",
|
||||||
|
self.combine_url(server_version_endpoint),
|
||||||
|
headers={'Accept': 'application/json'}
|
||||||
|
)
|
||||||
|
except requests.exceptions.RequestException as e:
|
||||||
|
logger.error(f"Couldn't get server version: {e}")
|
||||||
|
|
||||||
|
server_version_number = {str(response_server_version.json()["major"]) + "." +
|
||||||
|
str(response_server_version.json()["minor"]) + "." +
|
||||||
|
str(response_server_version.json()["patch"]) + "."
|
||||||
|
}
|
||||||
|
str(server_version_number)
|
||||||
|
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
"name": f"{self.config['metrics_prefix']}_up_info_data",
|
||||||
|
"value": str(server_version_number),
|
||||||
|
"help": "Data uploaded this session (bytes)",
|
||||||
|
"type": "counter"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
def combine_url(self, api_endpoint):
|
||||||
|
base_url = self.config["immich_host"]
|
||||||
|
base_url_port = self.config["immich_port"]
|
||||||
|
combined_url = base_url + ":" + base_url_port + api_endpoint
|
||||||
|
|
||||||
|
return combined_url
|
||||||
|
|
||||||
def get_qbittorrent_status_metrics(self):
|
def get_qbittorrent_status_metrics(self):
|
||||||
response = {}
|
response = {}
|
||||||
version = ""
|
version = ""
|
||||||
|
@ -130,7 +166,8 @@ class QbittorrentMetricsCollector():
|
||||||
metrics = []
|
metrics = []
|
||||||
categories.Uncategorized = AttrDict({'name': 'Uncategorized', 'savePath': ''})
|
categories.Uncategorized = AttrDict({'name': 'Uncategorized', 'savePath': ''})
|
||||||
for category in categories:
|
for category in categories:
|
||||||
category_torrents = [t for t in self.torrents if t['category'] == category or (category == "Uncategorized" and t['category'] == "")]
|
category_torrents = [t for t in self.torrents if
|
||||||
|
t['category'] == category or (category == "Uncategorized" and t['category'] == "")]
|
||||||
|
|
||||||
for status in self.TORRENT_STATUSES:
|
for status in self.TORRENT_STATUSES:
|
||||||
status_prop = f"is_{status}"
|
status_prop = f"is_{status}"
|
||||||
|
@ -163,11 +200,12 @@ class SignalHandler():
|
||||||
|
|
||||||
def _on_signal_received(self, signal, frame):
|
def _on_signal_received(self, signal, frame):
|
||||||
if self.shutdownCount > 1:
|
if self.shutdownCount > 1:
|
||||||
logger.warn("Forcibly killing exporter")
|
logger.warning("Forcibly killing exporter")
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
logger.info("Exporter is shutting down")
|
logger.info("Exporter is shutting down")
|
||||||
self.shutdownCount += 1
|
self.shutdownCount += 1
|
||||||
|
|
||||||
|
|
||||||
def get_config_value(key, default=""):
|
def get_config_value(key, default=""):
|
||||||
input_path = os.environ.get("FILE__" + key, None)
|
input_path = os.environ.get("FILE__" + key, None)
|
||||||
if input_path is not None:
|
if input_path is not None:
|
||||||
|
@ -209,7 +247,6 @@ def main():
|
||||||
# Register signal handler
|
# Register signal handler
|
||||||
signal_handler = SignalHandler()
|
signal_handler = SignalHandler()
|
||||||
|
|
||||||
|
|
||||||
if not config["host"]:
|
if not config["host"]:
|
||||||
logger.error("No host specified, please set QBITTORRENT_HOST environment variable")
|
logger.error("No host specified, please set QBITTORRENT_HOST environment variable")
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
Loading…
Reference in a new issue