server version number metric

This commit is contained in:
friendly Friend 2023-03-14 10:52:58 -07:00
parent e10e983b0d
commit 1e07c1be5a

View file

@ -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:
@ -189,11 +227,11 @@ def main():
) )
logHandler.setFormatter(formatter) logHandler.setFormatter(formatter)
logger.addHandler(logHandler) logger.addHandler(logHandler)
logger.setLevel("INFO") # default until config is loaded logger.setLevel("INFO") # default until config is loaded
config = { config = {
"immich_host": get_config_value("IMMICH_HOST",""), "immich_host": get_config_value("IMMICH_HOST", ""),
"immich_port": get_config_value("IMMICH_PORT",""), "immich_port": get_config_value("IMMICH_PORT", ""),
"token": get_config_value("IMMICH_API_TOKEN", ""), "token": get_config_value("IMMICH_API_TOKEN", ""),
"host": get_config_value("QBITTORRENT_HOST", ""), "host": get_config_value("QBITTORRENT_HOST", ""),
"port": get_config_value("QBITTORRENT_PORT", ""), "port": get_config_value("QBITTORRENT_PORT", ""),
@ -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)