infrasynth-backend-kit/infrasynth/scheduler/views.py
2026-08-28 14:38:47 -05:00

87 lines
2.8 KiB
Python

from rest_framework import viewsets
from rest_framework.decorators import action
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from .filters import ScheduledTaskFilter, TaskExecutionFilter
from .models import ScheduledTask, TaskExecution
from .serializers import ScheduledTaskSerializer, TaskExecutionSerializer
from .services import TaskService
class ScheduledTaskViewSet(viewsets.ModelViewSet):
queryset = ScheduledTask.objects.all()
serializer_class = ScheduledTaskSerializer
permission_classes = [IsAuthenticated]
filterset_class = ScheduledTaskFilter
def initial(self, request, *args, **kwargs):
from infrasynth.features.services import FeatureService
if not FeatureService().is_enabled("scheduler", user=request.user):
from django.http import Http404
raise Http404()
super().initial(request, *args, **kwargs)
def get_queryset(self):
return ScheduledTask.objects.all()
@action(detail=True, methods=["post"])
def run(self, request, pk=None):
task = self.get_object()
svc = TaskService()
svc.run_now(task.pk)
return Response({"status": "triggered"})
@action(detail=True, methods=["post"])
def toggle(self, request, pk=None):
task = self.get_object()
svc = TaskService()
svc.toggle(task.pk)
task.refresh_from_db()
return Response({"is_active": task.is_active})
class TaskExecutionViewSet(viewsets.ReadOnlyModelViewSet):
queryset = TaskExecution.objects.all()
serializer_class = TaskExecutionSerializer
permission_classes = [IsAuthenticated]
filterset_class = TaskExecutionFilter
def initial(self, request, *args, **kwargs):
from infrasynth.features.services import FeatureService
if not FeatureService().is_enabled("scheduler", user=request.user):
from django.http import Http404
raise Http404()
super().initial(request, *args, **kwargs)
def get_queryset(self):
return TaskExecution.objects.select_related("task").all()
class SchedulerStatusViewSet(viewsets.GenericViewSet):
permission_classes = [IsAuthenticated]
def initial(self, request, *args, **kwargs):
from infrasynth.features.services import FeatureService
if not FeatureService().is_enabled("scheduler", user=request.user):
from django.http import Http404
raise Http404()
super().initial(request, *args, **kwargs)
@action(detail=False, methods=["get"])
def queue_status(self, request):
svc = TaskService()
data = svc.get_queue_status()
return Response(data)
@action(detail=False, methods=["get"])
def workers(self, request):
svc = TaskService()
data = svc.get_workers()
return Response(data)