Skip to content

Commit 91858bf

Browse files
Will test later
1 parent c44e5c7 commit 91858bf

File tree

3 files changed

+95
-14
lines changed

3 files changed

+95
-14
lines changed
Lines changed: 56 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,65 @@
11
{% extends "base.html" %}
22

33
{% block content %}
4-
<h1>Task Status</h1>
4+
<div class="container mx-auto px-4 py-8">
5+
<h1 class="text-3xl font-bold mb-6">Task Status</h1>
56

67
{% if error %}
7-
<p style="color: red;">{{ error }}</p>
8+
<div class="alert alert-error">
9+
<span>{{ error }}</span>
10+
</div>
811
{% else %}
9-
<p><strong>Task ID:</strong> {{ task_id }}</p>
10-
<p><strong>Status:</strong> {{ status }}</p>
12+
<div class="flex flex-col items-center space-y-6">
13+
<!-- Radial Progress -->
14+
<div class="radial-progress" style="--value:{{ progress_value }};" role="progressbar" aria-valuenow="{{ progress_value }}" aria-valuemin="0" aria-valuemax="100">
15+
<span class="text-lg font-bold">{{ progress_value }}%</span>
16+
</div>
1117

12-
{% if result %}
13-
<p><strong>Result:</strong> {{ result }}</p>
14-
{% else %}
15-
<p>Processing... Refresh the page to check status.</p>
16-
{% endif %}
18+
<div class="text-center space-y-2">
19+
<p class="text-lg"><strong>Task ID:</strong> {{ task_id }}</p>
20+
<p class="text-lg"><strong>Status:</strong> <span id="status-text">{{ status }}</span></p>
21+
</div>
22+
23+
{% if result %}
24+
<div class="card bg-base-100 shadow-xl w-full max-w-2xl">
25+
<div class="card-body">
26+
<h2 class="card-title">Result</h2>
27+
<p>{{ result }}</p>
28+
</div>
29+
</div>
30+
{% else %}
31+
<p class="text-lg">Processing... Status will update automatically.</p>
32+
{% endif %}
33+
</div>
1734
{% endif %}
1835

19-
<a href="{% url 'playground_home' %}">Submit another task</a>
20-
{% endblock%}
36+
<div class="mt-8 text-center">
37+
<a href="{% url 'playground_home' %}" class="btn btn-primary">Submit another task</a>
38+
</div>
39+
</div>
40+
41+
{% block extra_js %}
42+
<script>
43+
function updateProgress() {
44+
const statusText = document.getElementById('status-text');
45+
const radialProgress = document.querySelector('.radial-progress');
46+
47+
if (statusText.textContent === 'PROCESSING') {
48+
// Increment progress by 5% every 2 seconds while processing
49+
const currentValue = parseInt(radialProgress.style.getPropertyValue('--value') || '0');
50+
const newValue = Math.min(currentValue + 5, 95);
51+
radialProgress.style.setProperty('--value', newValue);
52+
radialProgress.setAttribute('aria-valuenow', newValue);
53+
radialProgress.querySelector('span').textContent = `${newValue}%`;
54+
} else if (statusText.textContent === 'COMPLETED') {
55+
radialProgress.style.setProperty('--value', '100');
56+
radialProgress.setAttribute('aria-valuenow', '100');
57+
radialProgress.querySelector('span').textContent = '100%';
58+
}
59+
}
60+
61+
// Update progress every 2 seconds if status is PROCESSING
62+
setInterval(updateProgress, 2000);
63+
</script>
64+
{% endblock %}
65+
{% endblock %}

Algolyzer/playground/urls.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
from django.urls import path
22

3-
from .views import doodle_classifier, playground_home, sentiment_analysis
3+
from .views import doodle_classifier, playground_home, sentiment_analysis, task_status
44

55
urlpatterns = [
66
path("", playground_home, name="playground_home"),
77
path("sentiment_analysis/", sentiment_analysis, name="sentiment_analysis"),
88
path("doodle_classifier/", doodle_classifier, name="doodle_classifier"),
9+
path("task/<str:task_id>/", task_status, name="task_status"),
910
]

Algolyzer/playground/views.py

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ def sentiment_analysis(request):
4141
task.celery_task_id = celery_task.id
4242
task.save()
4343

44-
return redirect("sentiment_analysis")
44+
return redirect("task_status", task_id=celery_task.id)
4545

4646
else:
4747
"""Handles task status retrieval."""
@@ -94,7 +94,7 @@ def doodle_classifier(request):
9494
task.celery_task_id = celery_task.id
9595
task.save()
9696

97-
return redirect("doodle_classifier")
97+
return redirect("task_status", task_id=celery_task.id)
9898

9999
else:
100100
# Fetch previous results
@@ -104,3 +104,38 @@ def doodle_classifier(request):
104104

105105
context = {"previous_results": previous_results}
106106
return render(request, "playground/doodle_classifier.html", context=context)
107+
108+
109+
@login_required
110+
@profile_required
111+
def task_status(request, task_id):
112+
"""View to check task status and show progress."""
113+
try:
114+
task = PlaygroundTask.objects.get(celery_task_id=task_id, user=request.user)
115+
116+
# Calculate progress value based on status
117+
if task.status == "COMPLETED":
118+
progress_value = 100
119+
elif task.status == "PROCESSING":
120+
# Calculate progress based on time elapsed since creation
121+
from datetime import datetime, timezone
122+
123+
now = datetime.now(timezone.utc)
124+
elapsed = (now - task.created_at).total_seconds()
125+
# Assuming average processing time is 30 seconds
126+
progress_value = min(int((elapsed / 30) * 95), 95)
127+
elif task.status == "FAILED":
128+
progress_value = 0
129+
else: # PENDING
130+
progress_value = 0
131+
132+
context = {
133+
"task_id": task_id,
134+
"status": task.status,
135+
"result": task.result,
136+
"progress_value": progress_value,
137+
}
138+
return render(request, "playground/task_status.html", context=context)
139+
except PlaygroundTask.DoesNotExist:
140+
context = {"error": "Task not found"}
141+
return render(request, "playground/task_status.html", context=context)

0 commit comments

Comments
 (0)