mirror of
https://git.ianrenton.com/ian/spothole.git
synced 2026-08-06 02:21:42 +00:00
Refactor of caching & data storage part 1
This commit is contained in:
+39
-46
@@ -13,25 +13,21 @@ from core.prometheus_metrics_handler import memory_use_gauge, spots_gauge, alert
|
||||
class StatusReporter:
|
||||
"""Provides a timed update of the application's status data."""
|
||||
|
||||
def __init__(self, status_data, run_interval, web_server, cleanup_timer, spots, spot_providers, alerts,
|
||||
alert_providers, solar_condition_providers):
|
||||
def __init__(self, data_store, run_interval, web_server,spot_providers, alert_providers, solar_condition_providers):
|
||||
"""Constructor"""
|
||||
|
||||
self._status_data = status_data
|
||||
self._data_store = data_store
|
||||
self._run_interval = run_interval
|
||||
self._web_server = web_server
|
||||
self._cleanup_timer = cleanup_timer
|
||||
self._spots = spots
|
||||
self._spot_providers = spot_providers
|
||||
self._alerts = alerts
|
||||
self._alert_providers = alert_providers
|
||||
self._solar_condition_providers = solar_condition_providers
|
||||
self._thread = None
|
||||
self._stop_event = Event()
|
||||
self._startup_time = datetime.now(pytz.UTC)
|
||||
|
||||
self._status_data["software-version"] = SOFTWARE_VERSION
|
||||
self._status_data["server-owner-callsign"] = SERVER_OWNER_CALLSIGN
|
||||
self._data_store.status_data["software-version"] = SOFTWARE_VERSION
|
||||
self._data_store.status_data["server-owner-callsign"] = SERVER_OWNER_CALLSIGN
|
||||
|
||||
def start(self):
|
||||
"""Start the reporter thread"""
|
||||
@@ -55,44 +51,41 @@ class StatusReporter:
|
||||
def _report(self):
|
||||
"""Write status information"""
|
||||
|
||||
self._status_data["uptime"] = (datetime.now(pytz.UTC) - self._startup_time).total_seconds()
|
||||
self._status_data["mem_use_mb"] = round(psutil.Process(os.getpid()).memory_info().rss / (1024 * 1024), 3)
|
||||
self._status_data["num_spots"] = len(self._spots)
|
||||
self._status_data["num_alerts"] = len(self._alerts)
|
||||
self._status_data["spot_providers"] = list(
|
||||
map(lambda p: {"name": p.name, "enabled": p.enabled, "status": p.status,
|
||||
"last_updated": p.last_update_time.replace(
|
||||
tzinfo=pytz.UTC).timestamp() if p.last_update_time.year > 2000 else 0,
|
||||
"last_spot": p.last_spot_time.replace(
|
||||
tzinfo=pytz.UTC).timestamp() if p.last_spot_time.year > 2000 else 0},
|
||||
self._spot_providers))
|
||||
self._status_data["alert_providers"] = list(
|
||||
map(lambda p: {"name": p.name, "enabled": p.enabled, "status": p.status,
|
||||
"last_updated": p.last_update_time.replace(
|
||||
tzinfo=pytz.UTC).timestamp() if p.last_update_time.year > 2000 else 0},
|
||||
self._alert_providers))
|
||||
self._status_data["solar_condition_providers"] = list(
|
||||
map(lambda p: {"name": p.name, "enabled": p.enabled, "status": p.status,
|
||||
"last_updated": p.last_update_time.replace(
|
||||
tzinfo=pytz.UTC).timestamp() if p.last_update_time.year > 2000 else 0},
|
||||
self._solar_condition_providers))
|
||||
self._status_data["cleanup"] = {"status": self._cleanup_timer.status,
|
||||
"last_ran": self._cleanup_timer.last_cleanup_time.replace(
|
||||
tzinfo=pytz.UTC).timestamp() if self._cleanup_timer.last_cleanup_time else 0}
|
||||
self._status_data["webserver"] = {"status": self._web_server.web_server_metrics["status"],
|
||||
"last_api_access": self._web_server.web_server_metrics[
|
||||
"last_api_access_time"].replace(
|
||||
tzinfo=pytz.UTC).timestamp() if self._web_server.web_server_metrics[
|
||||
"last_api_access_time"] else 0,
|
||||
"api_access_count": self._web_server.web_server_metrics["api_access_counter"],
|
||||
"last_page_access": self._web_server.web_server_metrics[
|
||||
"last_page_access_time"].replace(
|
||||
tzinfo=pytz.UTC).timestamp() if self._web_server.web_server_metrics[
|
||||
"last_page_access_time"] else 0,
|
||||
"page_access_count": self._web_server.web_server_metrics[
|
||||
"page_access_counter"]}
|
||||
self._data_store.status_data["uptime"] = (datetime.now(pytz.UTC) - self._startup_time).total_seconds()
|
||||
self._data_store.status_data["mem_use_mb"] = round(psutil.Process(os.getpid()).memory_info().rss / (1024 * 1024), 3)
|
||||
self._data_store.status_data["num_spots"] = len(self._data_store.spots.values())
|
||||
self._data_store.status_data["num_alerts"] = len(self._data_store.alerts.values())
|
||||
self._data_store.status_data["spot_providers"] = list(
|
||||
map(lambda p: {"name": p.name, "enabled": p.enabled, "status": p.status,
|
||||
"last_updated": p.last_update_time.replace(
|
||||
tzinfo=pytz.UTC).timestamp() if p.last_update_time.year > 2000 else 0,
|
||||
"last_spot": p.last_spot_time.replace(
|
||||
tzinfo=pytz.UTC).timestamp() if p.last_spot_time.year > 2000 else 0},
|
||||
self._spot_providers))
|
||||
self._data_store.status_data["alert_providers"] = list(
|
||||
map(lambda p: {"name": p.name, "enabled": p.enabled, "status": p.status,
|
||||
"last_updated": p.last_update_time.replace(
|
||||
tzinfo=pytz.UTC).timestamp() if p.last_update_time.year > 2000 else 0},
|
||||
self._alert_providers))
|
||||
self._data_store.status_data["solar_condition_providers"] = list(
|
||||
map(lambda p: {"name": p.name, "enabled": p.enabled, "status": p.status,
|
||||
"last_updated": p.last_update_time.replace(
|
||||
tzinfo=pytz.UTC).timestamp() if p.last_update_time.year > 2000 else 0},
|
||||
self._solar_condition_providers))
|
||||
self._data_store.status_data["webserver"] = {"status": self._web_server.web_server_metrics["status"],
|
||||
"last_api_access": self._web_server.web_server_metrics[
|
||||
"last_api_access_time"].replace(
|
||||
tzinfo=pytz.UTC).timestamp() if self._web_server.web_server_metrics[
|
||||
"last_api_access_time"] else 0,
|
||||
"api_access_count": self._web_server.web_server_metrics["api_access_counter"],
|
||||
"last_page_access": self._web_server.web_server_metrics[
|
||||
"last_page_access_time"].replace(
|
||||
tzinfo=pytz.UTC).timestamp() if self._web_server.web_server_metrics[
|
||||
"last_page_access_time"] else 0,
|
||||
"page_access_count": self._web_server.web_server_metrics[
|
||||
"page_access_counter"]}
|
||||
|
||||
# Update Prometheus metrics
|
||||
memory_use_gauge.set(psutil.Process(os.getpid()).memory_info().rss)
|
||||
spots_gauge.set(len(self._spots))
|
||||
alerts_gauge.set(len(self._alerts))
|
||||
spots_gauge.set(len(self._data_store.spots.values()))
|
||||
alerts_gauge.set(len(self._data_store.alerts.values()))
|
||||
|
||||
Reference in New Issue
Block a user