give up on IDing the node from DHT, add DELUGE_NODE_ID, fix logging
This commit is contained in:
parent
86c2f8512a
commit
de09f8f996
|
@ -1,17 +1,12 @@
|
||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
|
import os
|
||||||
import re
|
import re
|
||||||
import sys
|
|
||||||
from datetime import datetime, timezone
|
from datetime import datetime, timezone
|
||||||
from typing import Optional
|
|
||||||
|
|
||||||
from prometheus_client import Counter
|
from prometheus_client import Counter
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
for handler in logger.handlers:
|
|
||||||
logger.removeHandler(handler)
|
|
||||||
|
|
||||||
logger.addHandler(logging.StreamHandler(sys.stdout))
|
|
||||||
|
|
||||||
torrent_pieces_downloaded = Counter(
|
torrent_pieces_downloaded = Counter(
|
||||||
name='deluge_torrent_pieces_downloaded',
|
name='deluge_torrent_pieces_downloaded',
|
||||||
|
@ -21,6 +16,7 @@ torrent_pieces_downloaded = Counter(
|
||||||
|
|
||||||
NID = re.compile(r'\(([a-zA-Z0-9]+)\)')
|
NID = re.compile(r'\(([a-zA-Z0-9]+)\)')
|
||||||
|
|
||||||
|
|
||||||
def metric_record(
|
def metric_record(
|
||||||
node: str,
|
node: str,
|
||||||
name: str,
|
name: str,
|
||||||
|
@ -32,14 +28,16 @@ def metric_record(
|
||||||
'timestamp': datetime.now(timezone.utc).isoformat(),
|
'timestamp': datetime.now(timezone.utc).isoformat(),
|
||||||
'name': name,
|
'name': name,
|
||||||
'value': value,
|
'value': value,
|
||||||
'node': node if node is not None else '',
|
'node': node,
|
||||||
'torrent_name': torrent_name,
|
'torrent_name': torrent_name,
|
||||||
})
|
})
|
||||||
return f'>>{record}'
|
return f'>>{record}'
|
||||||
|
|
||||||
|
|
||||||
class Metrics:
|
class Metrics:
|
||||||
def __init__(self, core: 'deluge.core.Core'):
|
def __init__(self, core: 'deluge.core.Core'):
|
||||||
self.peer_id: Optional[str] = None
|
# This is hack, we should add it to the deluge config.
|
||||||
|
self.node_id = os.environ.get('DELUGE_NODE_ID', '<unset>')
|
||||||
core.session.post_dht_stats()
|
core.session.post_dht_stats()
|
||||||
|
|
||||||
def handle_alert(self, alert):
|
def handle_alert(self, alert):
|
||||||
|
@ -47,21 +45,12 @@ class Metrics:
|
||||||
handler = getattr(self, f'_{alert_type}', lambda _: None)
|
handler = getattr(self, f'_{alert_type}', lambda _: None)
|
||||||
handler(alert)
|
handler(alert)
|
||||||
|
|
||||||
def _dht_stats(self, alert):
|
|
||||||
# Since the node id is not exposed in the alert by libtorrent's Python binding,
|
|
||||||
# we need to extract the digest from the string representation.
|
|
||||||
result = NID.search(alert.message())
|
|
||||||
if result is None:
|
|
||||||
raise Exception('Could not extract node id from DHT stats alert')
|
|
||||||
self.peer_id = result.group(1)
|
|
||||||
|
|
||||||
def _piece_finished(self, alert):
|
def _piece_finished(self, alert):
|
||||||
logger.info(
|
logger.info(
|
||||||
metric_record(
|
metric_record(
|
||||||
node=self.peer_id,
|
node=self.node_id,
|
||||||
name='deluge_piece_downloaded',
|
name='deluge_piece_downloaded',
|
||||||
torrent_name=alert.torrent_name,
|
torrent_name=alert.torrent_name,
|
||||||
value=alert.piece_index,
|
value=alert.piece_index,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,7 @@ ENV DELUGE_LISTEN_PORTS=6891,6892
|
||||||
ENV DELUGE_DAEMON_USERNAME=user
|
ENV DELUGE_DAEMON_USERNAME=user
|
||||||
ENV DELUGE_DAEMON_PASSWORD=password
|
ENV DELUGE_DAEMON_PASSWORD=password
|
||||||
ENV DELUGE_LOG_LEVEL=debug
|
ENV DELUGE_LOG_LEVEL=debug
|
||||||
|
ENV DELUGE_NODE_ID='unset'
|
||||||
|
|
||||||
RUN mkdir -p ${DELUGE_APP} ${DELUGE_CONFIG_DIR}
|
RUN mkdir -p ${DELUGE_APP} ${DELUGE_CONFIG_DIR}
|
||||||
WORKDIR ${DELUGE_APP}
|
WORKDIR ${DELUGE_APP}
|
||||||
|
|
Loading…
Reference in New Issue