mirror of
https://github.com/MOIS3Y/logs-collector.git
synced 2025-09-13 13:13:01 +02:00
Modify: archive upload js now it check token status, HEALTHCHEK call health api endpoint
This commit is contained in:
@@ -11,3 +11,15 @@ class IsGuestUpload(permissions.BasePermission):
|
||||
return True
|
||||
|
||||
return request.user.is_authenticated
|
||||
|
||||
|
||||
class IsGuestCheckUrls(permissions.BasePermission):
|
||||
"""
|
||||
Special permission class for the ability to upload attachments
|
||||
to an unauthorized user using a ticket token
|
||||
"""
|
||||
def has_permission(self, request, view):
|
||||
if request.method in ('HEAD', 'OPTIONS', 'GET',):
|
||||
return True
|
||||
|
||||
return request.user.is_authenticated
|
||||
|
@@ -67,3 +67,25 @@ class StorageInfoSerializer(serializers.Serializer):
|
||||
free = serializers.IntegerField(read_only=True)
|
||||
used_percent = serializers.IntegerField(read_only=True)
|
||||
status = serializers.CharField(read_only=True)
|
||||
|
||||
|
||||
class TokenStateRootSerializer(serializers.Serializer):
|
||||
info = serializers.CharField(read_only=True, default="manual message")
|
||||
|
||||
|
||||
class TokenStateSerializer(serializers.ModelSerializer):
|
||||
token = serializers.UUIDField(read_only=True)
|
||||
attempts = serializers.IntegerField(read_only=True)
|
||||
resolved = serializers.BooleanField(read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = Ticket
|
||||
fields = [
|
||||
'token',
|
||||
'attempts',
|
||||
'resolved'
|
||||
]
|
||||
|
||||
|
||||
class AppHealthInfoSerializer(serializers.Serializer):
|
||||
status = serializers.CharField(read_only=True, default="ok")
|
||||
|
@@ -15,8 +15,31 @@ router.register(r'archives', views.ArchiveViewSet)
|
||||
router.register(r'platforms', views.PlatformViewSet)
|
||||
router.register(r'tickets', views.TicketViewSet)
|
||||
|
||||
check_urlpatterns = [
|
||||
path(
|
||||
'health/',
|
||||
views.AppHealthInfo.as_view(),
|
||||
name='app-info'
|
||||
),
|
||||
path(
|
||||
'storage/',
|
||||
views.StorageInfo.as_view(),
|
||||
name='storage-info'
|
||||
),
|
||||
path(
|
||||
'token/',
|
||||
views.TokenStateRoot.as_view(),
|
||||
name='token-root'
|
||||
),
|
||||
path(
|
||||
'token/<str:token>',
|
||||
views.TokenStateInfo.as_view(),
|
||||
name='token-info'
|
||||
),
|
||||
]
|
||||
|
||||
urlpatterns = [
|
||||
# CRUD:
|
||||
path('v1/', include(router.urls)),
|
||||
path('v1/storage/', views.StorageInfo.as_view(), name='storage-info'),
|
||||
path('v1/check/', include(check_urlpatterns)),
|
||||
]
|
||||
|
@@ -10,9 +10,7 @@ from rest_framework.parsers import (
|
||||
)
|
||||
from rest_framework.permissions import IsAuthenticated
|
||||
from rest_framework.response import Response
|
||||
from rest_framework import viewsets
|
||||
from rest_framework import views
|
||||
from rest_framework import filters
|
||||
from rest_framework import filters, generics, views, viewsets
|
||||
|
||||
from django_filters.rest_framework import DjangoFilterBackend
|
||||
|
||||
@@ -23,13 +21,16 @@ from collector.models import Archive, Ticket, Platform
|
||||
from collector.utils.helpers import get_mount_fs_info
|
||||
|
||||
from .filters import ArchiveFilter, TicketFilter
|
||||
from .permissions import IsGuestUpload
|
||||
from .permissions import IsGuestUpload, IsGuestCheckUrls
|
||||
from .serializers import (
|
||||
PublicArchiveUploadSerializer,
|
||||
ArchiveSerializer,
|
||||
PlatformSerializer,
|
||||
TicketSerializer,
|
||||
StorageInfoSerializer,
|
||||
TokenStateSerializer,
|
||||
AppHealthInfoSerializer,
|
||||
TokenStateRootSerializer,
|
||||
)
|
||||
|
||||
|
||||
@@ -172,3 +173,40 @@ class StorageInfo(views.APIView):
|
||||
)
|
||||
def get(self, request):
|
||||
return Response(get_mount_fs_info(settings.DATA_DIR))
|
||||
|
||||
|
||||
class TokenStateRoot(views.APIView):
|
||||
""" Show the message of a specific upload token URL"""
|
||||
permission_classes = (IsGuestCheckUrls,)
|
||||
|
||||
@extend_schema(
|
||||
responses=TokenStateRootSerializer,
|
||||
summary='Show info message how get token status'
|
||||
)
|
||||
def get(self, request):
|
||||
message = "to find out the status of the token, place it in the URL"
|
||||
return Response({"detail": message}, status=status.HTTP_303_SEE_OTHER)
|
||||
|
||||
|
||||
@extend_schema_view(
|
||||
get=extend_schema(
|
||||
summary='Show the status of a specific upload token'
|
||||
)
|
||||
)
|
||||
class TokenStateInfo(generics.RetrieveAPIView):
|
||||
""" Show the status of a specific upload token"""
|
||||
queryset = Ticket.objects.order_by('-time_create')
|
||||
lookup_field = 'token'
|
||||
serializer_class = TokenStateSerializer
|
||||
permission_classes = (IsGuestCheckUrls,)
|
||||
|
||||
|
||||
class AppHealthInfo(views.APIView):
|
||||
permission_classes = (IsGuestCheckUrls,)
|
||||
|
||||
@extend_schema(
|
||||
responses=AppHealthInfoSerializer,
|
||||
summary='Show app status'
|
||||
)
|
||||
def get(self, request):
|
||||
return Response({'status': 'ok'}, status=status.HTTP_200_OK)
|
||||
|
Reference in New Issue
Block a user