mirror of
https://github.com/NohamR/prometheus-qbittorrent-exporter.git
synced 2026-01-09 07:38:18 +00:00
Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6c885b5fa0 | ||
|
|
039f7a7ef4 | ||
|
|
8bdaa48c48 | ||
|
|
e8dd24f731 | ||
|
|
12dcad10d5 | ||
|
|
597307c230 | ||
|
|
a25005b6a0 | ||
|
|
cfe62f8115 | ||
|
|
b5d20e3fe6 | ||
|
|
0ff6a56f18 | ||
|
|
2d968bc8e8 |
6
.github/workflows/docker.yml
vendored
6
.github/workflows/docker.yml
vendored
@@ -13,6 +13,9 @@ jobs:
|
||||
- name: 'Checkout GitHub Action'
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v1
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v1
|
||||
|
||||
@@ -37,4 +40,5 @@ jobs:
|
||||
uses: docker/build-push-action@v2
|
||||
with:
|
||||
push: true
|
||||
tags: esanchezm/prometheus-qbittorrent-exporter:latest,esanchezm/prometheus-qbittorrent-exporter:${{ steps.extract_branch.outputs.tag }}
|
||||
platforms: linux/amd64,linux/arm64,linux/386
|
||||
tags: ${{ secrets.REGISTRY_USERNAME }}/prometheus-qbittorrent-exporter:latest,${{ secrets.REGISTRY_USERNAME }}/prometheus-qbittorrent-exporter:${{ steps.extract_branch.outputs.tag }}
|
||||
|
||||
@@ -14,7 +14,7 @@ from pythonjsonlogger import jsonlogger
|
||||
|
||||
# Enable dumps on stderr in case of segfault
|
||||
faulthandler.enable()
|
||||
logger = None
|
||||
logger = logging.getLogger()
|
||||
|
||||
|
||||
class QbittorrentMetricsCollector():
|
||||
@@ -152,45 +152,61 @@ class QbittorrentMetricsCollector():
|
||||
|
||||
class SignalHandler():
|
||||
def __init__(self):
|
||||
self.shutdown = False
|
||||
self.shutdownCount = 0
|
||||
|
||||
# Register signal handler
|
||||
signal.signal(signal.SIGINT, self._on_signal_received)
|
||||
signal.signal(signal.SIGTERM, self._on_signal_received)
|
||||
|
||||
def is_shutting_down(self):
|
||||
return self.shutdown
|
||||
return self.shutdownCount > 0
|
||||
|
||||
def _on_signal_received(self, signal, frame):
|
||||
if self.shutdownCount > 1:
|
||||
logger.warn("Forcibly killing exporter")
|
||||
sys.exit(1)
|
||||
logger.info("Exporter is shutting down")
|
||||
self.shutdown = True
|
||||
self.shutdownCount += 1
|
||||
|
||||
def get_config_value(key, default=""):
|
||||
input_path = os.environ.get("FILE__" + key, None)
|
||||
if input_path is not None:
|
||||
try:
|
||||
with open(input_path, "r") as input_file:
|
||||
return input_file.read().strip()
|
||||
except IOError as e:
|
||||
logger.error(f"Unable to read value for {key} from {input_path}: {str(e)}")
|
||||
|
||||
return os.environ.get(key, default)
|
||||
|
||||
|
||||
def main():
|
||||
config = {
|
||||
"host": os.environ.get("QBITTORRENT_HOST", ""),
|
||||
"port": os.environ.get("QBITTORRENT_PORT", ""),
|
||||
"username": os.environ.get("QBITTORRENT_USER", ""),
|
||||
"password": os.environ.get("QBITTORRENT_PASS", ""),
|
||||
"exporter_port": int(os.environ.get("EXPORTER_PORT", "8000")),
|
||||
"log_level": os.environ.get("EXPORTER_LOG_LEVEL", "INFO"),
|
||||
"metrics_prefix": os.environ.get("METRICS_PREFIX", "qbittorrent"),
|
||||
}
|
||||
|
||||
# Register signal handler
|
||||
signal_handler = SignalHandler()
|
||||
|
||||
# Init logger
|
||||
# Init logger so it can be used
|
||||
logHandler = logging.StreamHandler()
|
||||
formatter = jsonlogger.JsonFormatter(
|
||||
"%(asctime) %(levelname) %(message)",
|
||||
datefmt="%Y-%m-%d %H:%M:%S"
|
||||
)
|
||||
logHandler.setFormatter(formatter)
|
||||
logger = logging.getLogger()
|
||||
logger.addHandler(logHandler)
|
||||
logger.setLevel("INFO") # default until config is loaded
|
||||
|
||||
config = {
|
||||
"host": get_config_value("QBITTORRENT_HOST", ""),
|
||||
"port": get_config_value("QBITTORRENT_PORT", ""),
|
||||
"username": get_config_value("QBITTORRENT_USER", ""),
|
||||
"password": get_config_value("QBITTORRENT_PASS", ""),
|
||||
"exporter_port": int(get_config_value("EXPORTER_PORT", "8000")),
|
||||
"log_level": get_config_value("EXPORTER_LOG_LEVEL", "INFO"),
|
||||
"metrics_prefix": get_config_value("METRICS_PREFIX", "qbittorrent"),
|
||||
}
|
||||
# set level once config has been loaded
|
||||
logger.setLevel(config["log_level"])
|
||||
|
||||
# Register signal handler
|
||||
signal_handler = SignalHandler()
|
||||
|
||||
|
||||
if not config["host"]:
|
||||
logger.error("No host specified, please set QBITTORRENT_HOST environment variable")
|
||||
sys.exit(1)
|
||||
|
||||
4
setup.py
4
setup.py
@@ -6,7 +6,7 @@ with open("README.md", "r") as fh:
|
||||
setup(
|
||||
name='prometheus-qbittorrent-exporter',
|
||||
packages=['qbittorrent_exporter'],
|
||||
version='1.1.1',
|
||||
version='1.2.0',
|
||||
long_description=long_description,
|
||||
long_description_content_type="text/markdown",
|
||||
description='Prometheus exporter for qbittorrent',
|
||||
@@ -17,7 +17,7 @@ setup(
|
||||
keywords=['prometheus', 'qbittorrent'],
|
||||
classifiers=[],
|
||||
python_requires='>=3',
|
||||
install_requires=['qbittorrent-api==2021.3.18', 'prometheus_client==0.8.0', 'python-json-logger==0.1.5'],
|
||||
install_requires=['attrdict==2.0.1', 'qbittorrent-api==2021.3.18', 'prometheus_client==0.8.0', 'python-json-logger==0.1.5'],
|
||||
entry_points={
|
||||
'console_scripts': [
|
||||
'qbittorrent-exporter=qbittorrent_exporter.exporter:main',
|
||||
|
||||
Reference in New Issue
Block a user