irongit
29 lines1.1 KBPython
1from channels.generic.websocket import AsyncWebsocketConsumer
2from django.core import serializers
3from asgiref.sync import async_to_sync, sync_to_async
4from .models import Log
5from pprint import pprint
6import json
7from . import settings
8from .serializers import LogSerializer
9
10class 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 # await self.send(json.dumps({'type': 'logs', 'data': logs}))
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)