87 lines
2.8 KiB
Python
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)
|