mirror of
https://github.com/smittix/intercept.git
synced 2026-07-08 09:38:12 -07:00
Merge pull request #229 from smittix/fix/meshcore-connect-error-reporting
fix(meshcore): surface backend error messages and extend polling window
This commit is contained in:
+5
-1
@@ -48,7 +48,11 @@ def status():
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
c = _client()
|
c = _client()
|
||||||
return jsonify({"available": True, "state": c.get_state().value})
|
state, message = c.get_state()
|
||||||
|
payload = {"available": True, "state": state.value}
|
||||||
|
if message:
|
||||||
|
payload["message"] = message
|
||||||
|
return jsonify(payload)
|
||||||
|
|
||||||
|
|
||||||
@meshcore_bp.route("/connect", methods=["POST"])
|
@meshcore_bp.route("/connect", methods=["POST"])
|
||||||
|
|||||||
@@ -97,7 +97,8 @@ const MeshCore = (function () {
|
|||||||
|
|
||||||
function _pollUntilConnected(attempts) {
|
function _pollUntilConnected(attempts) {
|
||||||
if (_connected) return;
|
if (_connected) return;
|
||||||
if (attempts > 15) {
|
if (attempts > 45) {
|
||||||
|
// Backend retry window (5+15+45s) has elapsed — give up
|
||||||
_updateStatusUI('error', 'Connection timed out');
|
_updateStatusUI('error', 'Connection timed out');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-3
@@ -250,6 +250,7 @@ class MeshcoreClient:
|
|||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
self._state = ConnectionState.DISCONNECTED
|
self._state = ConnectionState.DISCONNECTED
|
||||||
|
self._status_message: str | None = None
|
||||||
self._config: ConnectionConfig | None = None
|
self._config: ConnectionConfig | None = None
|
||||||
self._event_queue: queue.Queue = queue.Queue(maxsize=500)
|
self._event_queue: queue.Queue = queue.Queue(maxsize=500)
|
||||||
self._nodes: dict[str, MeshcoreNode] = {}
|
self._nodes: dict[str, MeshcoreNode] = {}
|
||||||
@@ -261,14 +262,15 @@ class MeshcoreClient:
|
|||||||
|
|
||||||
# -- State --
|
# -- State --
|
||||||
|
|
||||||
def get_state(self) -> ConnectionState:
|
def get_state(self) -> tuple[ConnectionState, str | None]:
|
||||||
"""Return the current connection state."""
|
"""Return the current connection state and last status message."""
|
||||||
with self._lock:
|
with self._lock:
|
||||||
return self._state
|
return self._state, self._status_message
|
||||||
|
|
||||||
def _set_state(self, state: ConnectionState, **extra) -> None:
|
def _set_state(self, state: ConnectionState, **extra) -> None:
|
||||||
with self._lock:
|
with self._lock:
|
||||||
self._state = state
|
self._state = state
|
||||||
|
self._status_message = extra.get("message")
|
||||||
# Push the status event OUTSIDE the lock (avoids deadlock; _push is queue-based)
|
# Push the status event OUTSIDE the lock (avoids deadlock; _push is queue-based)
|
||||||
payload: dict = {"state": state.value}
|
payload: dict = {"state": state.value}
|
||||||
payload.update(extra)
|
payload.update(extra)
|
||||||
|
|||||||
Reference in New Issue
Block a user