From 5e2c2f37c84b632893cf6052283cf93cf112fb58 Mon Sep 17 00:00:00 2001 From: Karma Riuk Date: Sat, 17 May 2025 17:37:19 +0200 Subject: [PATCH] first setup for status check with uuid --- public/index.html | 10 ++++++---- public/js/index.js | 46 ++++++++++++++++++++++++++++++++----------- src/routes/answers.py | 13 ++++++++++-- src/utils/observer.py | 1 + 4 files changed, 52 insertions(+), 18 deletions(-) create mode 100644 src/utils/observer.py diff --git a/public/index.html b/public/index.html index af93ab7..2fed797 100644 --- a/public/index.html +++ b/public/index.html @@ -56,7 +56,7 @@

- +
@@ -64,11 +64,13 @@ Get status of ongoing process - - + +

- +
diff --git a/public/js/index.js b/public/js/index.js index 17803ae..b3e144d 100644 --- a/public/js/index.js +++ b/public/js/index.js @@ -3,7 +3,8 @@ const socket = io(); const progressContainer = document.getElementById("progress-container"); const progressBar = document.getElementById("progress-bar"); const progressText = document.getElementById("progress-text"); -const statusEl = document.getElementById("status"); +const uploadStatusEl = document.getElementById("upload-status"); +const statusStatusEl = document.getElementById("status-status"); const commentResultsContainer = document.querySelector( ".results-container#comment", @@ -28,7 +29,7 @@ document.getElementById("download-dataset").onclick = () => { // Upload logic document.getElementById("upload-btn").onclick = async () => { - statusEl.classList.add("hidden"); + uploadStatusEl.classList.add("hidden"); progressContainer.classList.add("hidden"); const type = document.getElementById("answer-cype").value; @@ -50,8 +51,9 @@ document.getElementById("upload-btn").onclick = async () => { const json = await res.json(); if (!res.ok) { - statusEl.style.color = "red"; - statusEl.textContent = + uploadStatusEl.classList.remove("hidden"); + uploadStatusEl.style.color = "red"; + uploadStatusEl.textContent = json.error + (json.message ? ": " + json.message : ""); return; } @@ -119,19 +121,22 @@ function setProgress(percent) { socket.on("progress", (data) => { setProgress(data.percent); if (data.percent == 100) { - statusEl.style.color = "green"; - statusEl.textContent = "Processing complete!"; + uploadStatusEl.style.color = "green"; + uploadStatusEl.textContent = "Processing complete!"; } }); -socket.on("started-processing", () => { +socket.on("started-processing", (data) => { setProgress(0); + uploadStatusEl.classList.remove("hidden"); + uploadStatusEl.style.color = "green"; + uploadStatusEl.textContent = data["id"]; }); socket.on("successful-upload", () => { - statusEl.classList.remove("hidden"); - statusEl.style.color = "green"; - statusEl.textContent = "Upload succeeded!"; + uploadStatusEl.classList.remove("hidden"); + uploadStatusEl.style.color = "green"; + uploadStatusEl.textContent = "Upload succeeded!"; }); // INFO-MODAL LOGIC @@ -177,6 +182,23 @@ modalOverlay.addEventListener("keydown", (e) => { }); }); -document.getElementById("request-status").onclick = () => { - url.reportValidity(); +document.getElementById("request-status").onclick = async () => { + if (!uuid.reportValidity()) return; + const res = await fetch(`/answers/status/${uuid.value}`, { + headers: { + "X-Socket-Id": socket.id, + }, + }); + + const json = await res.json(); + if (!res.ok) { + statusStatusEl.classList.remove("hidden"); + statusStatusEl.style.color = "red"; + statusStatusEl.textContent = + json.error + (json.message ? ": " + json.message : ""); + return; + } + statusStatusEl.classList.remove("hidden"); + statusStatusEl.style.color = "green"; + statusStatusEl.textContent = json["status"]; }; diff --git a/src/routes/answers.py b/src/routes/answers.py index 02b2c4a..01ebfb6 100644 --- a/src/routes/answers.py +++ b/src/routes/answers.py @@ -2,7 +2,8 @@ from flask import Blueprint, request, jsonify, current_app from utils.errors import InvalidJsonFormatError from utils.process_data import evaluate_comments, evaluate_refinement -import json +from utils.observer import request2status +import json, uuid router = Blueprint('answers', __name__, url_prefix='/answers') @@ -78,14 +79,22 @@ def submit_refinement(): except InvalidJsonFormatError as e: return jsonify({'error': 'Invalid JSON format', 'message': str(e)}), 400 + process_id = str(uuid.uuid4()) + request2status[process_id] = "processing" + socketio = current_app.extensions['socketio'] sid = request.headers.get('X-Socket-Id') if sid: socketio.emit('successful-upload', room=sid) - socketio.emit('started-processing', room=sid) + socketio.emit('started-processing', {"id": process_id}, room=sid) results = evaluate_refinement( validated, lambda p: socketio.emit('progress', {'percent': p}, room=sid) ) return jsonify(results) + + +@router.route('/status/') +def request_status(id): + return jsonify({"status": request2status.get(id, "doens't exist")}) diff --git a/src/utils/observer.py b/src/utils/observer.py new file mode 100644 index 0000000..2c2ea7c --- /dev/null +++ b/src/utils/observer.py @@ -0,0 +1 @@ +request2status = {}