Reduce status polling load and add 1Hz ready LED blink
This commit is contained in:
@@ -2,6 +2,7 @@ import json
|
||||
import queue
|
||||
import subprocess
|
||||
import threading
|
||||
import time
|
||||
from typing import Any, Dict
|
||||
|
||||
from flask import Flask, Response, jsonify, render_template, request, stream_with_context
|
||||
@@ -24,6 +25,9 @@ class WebPortal:
|
||||
self.state = state
|
||||
self.network_manager = network_manager
|
||||
self.broadcaster = broadcaster
|
||||
self._status_refresh_interval_s = 15.0
|
||||
self._last_status_refresh_mono = 0.0
|
||||
self._status_lock = threading.Lock()
|
||||
self.app = Flask(__name__, template_folder=template_folder, static_folder=static_folder)
|
||||
self._register_routes()
|
||||
|
||||
@@ -39,7 +43,11 @@ class WebPortal:
|
||||
@self.app.route("/api/status", methods=["GET"])
|
||||
def status() -> Response:
|
||||
try:
|
||||
self.network_manager.refresh_state()
|
||||
now = time.monotonic()
|
||||
with self._status_lock:
|
||||
if now - self._last_status_refresh_mono >= self._status_refresh_interval_s:
|
||||
self.network_manager.refresh_state()
|
||||
self._last_status_refresh_mono = now
|
||||
return jsonify(self.state.snapshot())
|
||||
except Exception as exc:
|
||||
self.state.update_status("Status update failed", str(exc))
|
||||
|
||||
Reference in New Issue
Block a user