Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Der-Henning
GitHub Repository: Der-Henning/tgtg
Path: blob/main/tgtg_scanner/models/metrics.py
1218 views
1
import logging
2
3
from prometheus_client import Counter, Gauge, start_http_server
4
5
from tgtg_scanner.models.item import Item
6
7
log = logging.getLogger("tgtg")
8
9
10
class Metrics:
11
"""Provides a prometheus metrics client."""
12
13
def __init__(self, port: int = 8000):
14
self.port = port
15
self.item_count = Gauge("tgtg_item_count", "Currently available Magic Bags", ["item_id", "display_name"])
16
self.item_price = Gauge("tgtg_item_price", "Price for a Magic Bag", ["item_id", "display_name"])
17
self.item_value = Gauge("tgtg_item_value", "Value for a Magic Bag", ["item_id", "display_name"])
18
self.get_favorites_errors = Counter(
19
"tgtg_get_favorites_errors",
20
"Count of request errors fetching tgtg favorites",
21
)
22
self.send_notifications = Counter(
23
"tgtg_send_notifications",
24
"Count of send notifications",
25
["item_id", "display_name"],
26
)
27
28
def enable_metrics(self) -> None:
29
"""Start the metrics http server."""
30
start_http_server(self.port)
31
log.info("Metrics server started on port %s", self.port)
32
33
def update(self, item: Item) -> None:
34
"""Update the metrics."""
35
try:
36
self.item_count.labels(item.item_id, item.display_name).set(item.items_available)
37
self.item_price.labels(item.item_id, item.display_name).set(item._price)
38
self.item_value.labels(item.item_id, item.display_name).set(item._value)
39
except ValueError as err:
40
log.warning("Error updating metrics: %s", err)
41
42