feat: 增加日志模块
This commit is contained in:
@@ -1,5 +1,8 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
|
||||
from django.views.decorators.csrf import csrf_exempt
|
||||
from django.http import HttpResponse, StreamingHttpResponse
|
||||
from rest_framework.decorators import api_view
|
||||
from rest_framework.response import Response
|
||||
@@ -34,25 +37,20 @@ def video_status(request):
|
||||
|
||||
|
||||
def video_frame(request):
|
||||
status = video_service.get_status()
|
||||
if not status["available"]:
|
||||
return HttpResponse(
|
||||
status.get("source_detail") or f"JPEG frame directory not found: {status['frame_dir']}",
|
||||
status=503,
|
||||
content_type="text/plain; charset=utf-8",
|
||||
)
|
||||
|
||||
try:
|
||||
frame = video_service.get_next_frame()
|
||||
frame, headers = video_service.get_next_frame_with_headers()
|
||||
except (FileNotFoundError, RuntimeError) as error:
|
||||
status = video_service.get_status()
|
||||
return HttpResponse(
|
||||
str(error),
|
||||
status.get("source_detail") or str(error),
|
||||
status=503,
|
||||
content_type="text/plain; charset=utf-8",
|
||||
)
|
||||
|
||||
response = HttpResponse(frame, content_type="image/jpeg")
|
||||
response["Cache-Control"] = "no-store, no-cache, must-revalidate, max-age=0"
|
||||
for key, value in headers.items():
|
||||
response[key] = value
|
||||
return response
|
||||
|
||||
|
||||
@@ -76,3 +74,18 @@ def video_stream(request):
|
||||
)
|
||||
response["Cache-Control"] = "no-store, no-cache, must-revalidate, max-age=0"
|
||||
return response
|
||||
|
||||
|
||||
@csrf_exempt
|
||||
@api_view(["POST"])
|
||||
def video_display_probe(request):
|
||||
try:
|
||||
payload = json.loads(request.body.decode("utf-8"))
|
||||
except (UnicodeDecodeError, json.JSONDecodeError):
|
||||
return Response({"detail": "invalid json"}, status=400)
|
||||
|
||||
if not isinstance(payload, dict):
|
||||
return Response({"detail": "expected json object"}, status=400)
|
||||
|
||||
video_service.record_display_probe(payload)
|
||||
return Response({"ok": True})
|
||||
|
||||
Reference in New Issue
Block a user