From 4efd5a75945212b756cd8b03669026b8d7a4a1a1 Mon Sep 17 00:00:00 2001 From: Repinoid Date: Tue, 26 May 2026 09:53:18 +0300 Subject: [PATCH] fix: retry SEARCHING up to 3 times, don't rush state machine --- web/raw_endpoint.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/web/raw_endpoint.py b/web/raw_endpoint.py index f1fdf7c..5676ed6 100644 --- a/web/raw_endpoint.py +++ b/web/raw_endpoint.py @@ -209,11 +209,25 @@ def register(app): parsed = _parse_response(raw, sess["data"]) logger.info(f"[{session_id}] {parsed}") - # Если есть очередь команд — отдаём следующую + # SEARCHING/NO DATA — не продвигаем стейт, повторяем команду + is_skip = raw.startswith("SEARCHING") or raw == "NO DATA" or raw == "STOPPED" + if is_skip: + sess["retries"] = sess.get("retries", 0) + 1 + if sess["retries"] > 3: + logger.info(f"[{session_id}] Giving up after {sess['retries']} retries") + sess["retries"] = 0 + # принудительно продвигаем стейт ниже + elif sess["queue"]: + cmd = sess["queue"].pop(0) + return jsonify({"cmd": cmd, "session": session_id, "state": sess["state"]}) + + # Если есть очередь — отдаём следующую if sess["queue"]: cmd = sess["queue"].pop(0) return jsonify({"cmd": cmd, "session": session_id, "state": sess["state"]}) + sess["retries"] = 0 + # Определяем что дальше next_cmds = _next_commands(sess) if next_cmds: