| 1 | from channels.generic.websocket import AsyncWebsocketConsumer |
| 2 | from django.core import serializers |
| 3 | from asgiref.sync import async_to_sync, sync_to_async |
| 4 | from .models import Log |
| 5 | from pprint import pprint |
| 6 | import json |
| 7 | from . import settings |
| 8 | from .serializers import LogSerializer |
| 9 | |
| 10 | class LogConsumer(AsyncWebsocketConsumer): |
| 11 | async def connect(self): |
| 12 | if not self.scope['user'].is_staff: |
| 13 | await self.close() |
| 14 | return |
| 15 | print(self.scope['user']) |
| 16 | await self.accept() |
| 17 | logs = await sync_to_async(self.fetch_logs)() |
| 18 | |
| 19 | await self.send(json.dumps({'type': 'logs', 'data': logs})) |
| 20 | |
| 21 | def fetch_logs(self, start=0, end=settings.LIVE_LOGGER_PAGINATION) -> dict: |
| 22 | logs = Log.objects.all().order_by('-id').prefetch_related('location', 'user')[start:end] |
| 23 | return LogSerializer(logs, many=True).data |
| 24 | |
| 25 | async def disconnect(self, close_code): |
| 26 | print('Disconnected!') |
| 27 | |
| 28 | async def receive(self, text_data): |
| 29 | print('Received:', text_data) |