Files
Django-Proxmox-Mikrotik/tasklogger/views.py
Holger Sielaff 90c0ff61ed initial
2025-08-27 09:55:55 +02:00

72 lines
2.0 KiB
Python

import json
from django.contrib.auth.decorators import login_required
from django.http import HttpResponse
from django.shortcuts import get_object_or_404, render
from .models import Task
def task_response(data, status=200):
"""Helper function to return a task response"""
return HttpResponse(json.dumps(data, default=str), status=status, content_type='application/json')
@login_required
def task_status(request):
"""API endpoint to check task status"""
task_uuid = request.GET.get('task_uuid')
if not task_uuid:
return task_response({
'status': 'error',
'message': 'task_uuid parameter required'
}, status=400)
try:
task = Task.objects.get(uuid=task_uuid)
# Get latest entries
latest_entries = list(task.entries.order_by('-created_at')[:10].values(
'message', 'created_at'
))
return task_response({
'status': 'success',
'task': {
'uuid': str(task.uuid),
'proxmox_upid': task.proxmox_upid,
'status': task.status,
'created_at': task.created_at.isoformat(),
'entries': latest_entries
}
}, status=200)
except Task.DoesNotExist:
return task_response({
'status': 'error',
'message': f'Task {task_uuid} not found'
}, status=404)
@login_required
def task_detail(request, task_uuid):
"""View to show task details and log entries"""
task = get_object_or_404(Task, uuid=task_uuid)
entries = task.entries.order_by('created_at')
return render(request, 'tasklogger/task_detail.html', {
'task': task,
'entries': entries
})
@login_required
def task_list(request):
"""View to list recent tasks"""
tasks = Task.objects.order_by('-created_at')[:50]
return render(request, 'tasklogger/task_list.html', {
'tasks': tasks
})