Spaces:
Runtime error
Runtime error
Delete state_updater.py
Browse files- state_updater.py +0 -57
state_updater.py
DELETED
@@ -1,57 +0,0 @@
|
|
1 |
-
import datetime
|
2 |
-
import threading
|
3 |
-
import time
|
4 |
-
from dataclasses import asdict, is_dataclass
|
5 |
-
from enum import Enum
|
6 |
-
|
7 |
-
import hivemind
|
8 |
-
import simplejson
|
9 |
-
from flask import Flask, render_template
|
10 |
-
|
11 |
-
import config
|
12 |
-
from health import fetch_health_state
|
13 |
-
from metrics import get_prometheus_metrics
|
14 |
-
|
15 |
-
logger = hivemind.get_logger(__name__)
|
16 |
-
|
17 |
-
|
18 |
-
class StateUpdaterThread(threading.Thread):
|
19 |
-
def __init__(self, dht: hivemind.DHT, app: Flask, **kwargs):
|
20 |
-
super().__init__(**kwargs)
|
21 |
-
self.dht = dht
|
22 |
-
self.app = app
|
23 |
-
|
24 |
-
self.state_json = self.state_html = None
|
25 |
-
self.ready = threading.Event()
|
26 |
-
|
27 |
-
def run(self):
|
28 |
-
while True:
|
29 |
-
start_time = time.perf_counter()
|
30 |
-
try:
|
31 |
-
state_dict = fetch_health_state(self.dht)
|
32 |
-
with self.app.app_context():
|
33 |
-
self.state_html = render_template("index.html", **state_dict)
|
34 |
-
self.prometheus_metrics = get_prometheus_metrics(state_dict)
|
35 |
-
self.state_json = simplejson.dumps(state_dict, indent=2, ignore_nan=True, default=json_default)
|
36 |
-
|
37 |
-
self.ready.set()
|
38 |
-
logger.info(f"Fetched new state in {time.perf_counter() - start_time:.1f} sec")
|
39 |
-
except Exception:
|
40 |
-
logger.error("Failed to update state:", exc_info=True)
|
41 |
-
|
42 |
-
delay = config.UPDATE_PERIOD - (time.perf_counter() - start_time)
|
43 |
-
if delay < 0:
|
44 |
-
logger.warning("Update took more than update_period, consider increasing it")
|
45 |
-
time.sleep(max(delay, 0))
|
46 |
-
|
47 |
-
|
48 |
-
def json_default(value):
|
49 |
-
if is_dataclass(value):
|
50 |
-
return asdict(value)
|
51 |
-
if isinstance(value, Enum):
|
52 |
-
return value.name.lower()
|
53 |
-
if isinstance(value, hivemind.PeerID):
|
54 |
-
return value.to_base58()
|
55 |
-
if isinstance(value, datetime.datetime):
|
56 |
-
return value.timestamp()
|
57 |
-
raise TypeError(f"Can't serialize {repr(value)}")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|