Add Control mechanism
This commit is contained in:
1 parent
6afffb2184
commit
8f7ecb4321
5 files changed
+456
-2
No files matched your search
+52
-1
@@ -38,6 +38,10 @@ LIVE_STREAM_FRAME_PATH = os.getenv("LIVE_STREAM_FRAME_PATH", "/dev/shm/jetson-co
|
||||
CROSS_SNAPSHOT_DIR = os.getenv("CROSS_SNAPSHOT_DIR", f"{_DEFAULT_DIR}/snapshots")
|
||||
SAVE_DETECT_SNAPSHOT = os.getenv("SAVE_DETECT_SNAPSHOT", "false").lower() == "true"
|
||||
|
||||
CONTROL_ENABLED = os.getenv("CONTROL_ENABLED", "false").lower() == "true"
|
||||
CONTROL_FILE = os.getenv("CONTROL_FILE", f"{_DEFAULT_DIR}/control.json")
|
||||
CONTROL_DEFAULT_COUNTING = os.getenv("CONTROL_DEFAULT_COUNTING", "true").lower() == "true"
|
||||
|
||||
SITE_NAME = os.getenv("SITE_NAME", "LIVE")
|
||||
|
||||
DASHBOARD_PORT = int(os.getenv("DASHBOARD_PORT", "5000"))
|
||||
@@ -207,7 +211,54 @@ def get_counting_date(dt=None, cutoff_str=CUTOFF_TIME):
|
||||
|
||||
@app.route("/")
|
||||
def index():
|
||||
return render_template("dashboard.html", site_name=SITE_NAME, show_detect=SAVE_DETECT_SNAPSHOT)
|
||||
return render_template(
|
||||
"dashboard.html",
|
||||
site_name=SITE_NAME,
|
||||
show_detect=SAVE_DETECT_SNAPSHOT,
|
||||
control_enabled=CONTROL_ENABLED,
|
||||
)
|
||||
|
||||
|
||||
def _read_counting_flag():
|
||||
try:
|
||||
with open(CONTROL_FILE, "r", encoding="utf-8") as f:
|
||||
return bool(json.load(f).get("counting", CONTROL_DEFAULT_COUNTING))
|
||||
except FileNotFoundError:
|
||||
return CONTROL_DEFAULT_COUNTING
|
||||
except Exception:
|
||||
return CONTROL_DEFAULT_COUNTING
|
||||
|
||||
|
||||
def _write_counting_flag(counting):
|
||||
os.makedirs(os.path.dirname(CONTROL_FILE) or ".", exist_ok=True)
|
||||
tmp = f"{CONTROL_FILE}.tmp"
|
||||
with open(tmp, "w", encoding="utf-8") as f:
|
||||
json.dump({"counting": bool(counting)}, f)
|
||||
os.replace(tmp, CONTROL_FILE)
|
||||
|
||||
|
||||
@app.route("/api/control", methods=["GET"])
|
||||
def api_control_get():
|
||||
return jsonify({
|
||||
"success": True,
|
||||
"enabled": CONTROL_ENABLED,
|
||||
"counting": _read_counting_flag(),
|
||||
})
|
||||
|
||||
|
||||
@app.route("/api/control", methods=["POST"])
|
||||
def api_control_set():
|
||||
if not CONTROL_ENABLED:
|
||||
return jsonify({"success": False, "error": "Runtime control is disabled (set CONTROL_ENABLED=true)"}), 403
|
||||
data = request.get_json(silent=True) or {}
|
||||
if "counting" not in data:
|
||||
return jsonify({"success": False, "error": "Missing 'counting' field"}), 400
|
||||
try:
|
||||
counting = bool(data["counting"])
|
||||
_write_counting_flag(counting)
|
||||
return jsonify({"success": True, "counting": counting})
|
||||
except Exception as e:
|
||||
return jsonify({"success": False, "error": str(e)}), 500
|
||||
|
||||
|
||||
@app.route("/snapshots")
|
||||
|
||||
Reference in new issue
Block a user