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