from django.contrib.auth.models import User, Group from rest_framework import viewsets from rest_framework import permissions, authentication from rest_framework.response import Response from rest_framework.decorators import api_view, permission_classes, authentication_classes, action from api.serializers import UserSerializer, DeltaSerializer, PeriodicTaskSerializer, IntervalScheduleSerializer from cynomys.models import Delta from django_celery_beat.models import PeriodicTask, IntervalSchedule class UserViewSet(viewsets.ModelViewSet): """ API endpoint that allows users to be viewed or edited. """ queryset = User.objects.all().order_by('-date_joined') serializer_class = UserSerializer permission_classes = [permissions.IsAuthenticated] class DeltaViewSet(viewsets.ModelViewSet): """ API endpoint that allows users to be viewed or edited. """ queryset = Delta.objects.all() serializer_class = DeltaSerializer permission_classes = [permissions.IsAuthenticated] class TaskViewSet(viewsets.ModelViewSet): """ API endpoint that allows users to be viewed or edited. """ queryset = PeriodicTask.objects.all() serializer_class = PeriodicTaskSerializer permission_classes = [permissions.IsAuthenticated] @action(detail=True, methods=['GET']) def get_all_deltas(self, request, pk=None): deltas = Delta.objects.all().filter(task=pk).order_by('-latest_check') serializer = DeltaSerializer(deltas, many=True, context={'request': request}) return Response({'Message': "All deltas of this task.", 'Deltas': serializer.data}) @action(detail=True, methods=['GET']) def latest_delta(self, request, pk=None): deltas = Delta.objects.filter(task=pk).latest('pk') serializer = DeltaSerializer(deltas, many=False, context={'request': request}) return Response({'Message': "Latest Delta, current status.", 'Deltas': serializer.data}) @action(detail=False, methods=['POST']) def create_ping_check(self, request): task = PeriodicTask() task.name = request.data['name'] task.task = "cynomys.tasks.check_ping" task.interval = IntervalSchedule.objects.get(pk=request.data['interval_id']) task.args = '["'+ request.data['host'] +'","'+ request.data['timeout'] + '"]' task.expire_seconds = 30 task.save() task.kwargs = '{"task_id": "' + str(task.pk) + '", "notifier": "email"}' task.save() serializer = PeriodicTaskSerializer(task, many=False, context={'request': request}) return Response({'Message': "Task Created.", 'Task': serializer.data}) @action(detail=False, methods=['POST']) def create_http_check(self, request): task = PeriodicTask() task.name = request.data['name'] task.task = "cynomys.tasks.check_http" task.interval = IntervalSchedule.objects.get(pk=request.data['interval_id']) task.args = '["'+ request.data['host'] +'","'+ request.data['timeout'] + '","'+ request.data['httpcode'] + '"]' task.expire_seconds = 30 task.save() task.kwargs = '{"task_id": "' + str(task.pk) + '", "notifier": "email"}' task.save() serializer = PeriodicTaskSerializer(task, many=False, context={'request': request}) return Response({'Message': "Task Created.", 'Task': serializer.data}) class IntervalViewSet(viewsets.ModelViewSet): """ API endpoint that allows users to be viewed or edited. """ queryset = IntervalSchedule.objects.all() serializer_class = IntervalScheduleSerializer permission_classes = [permissions.IsAuthenticated]