import logging logger = logging.getLogger(__name__) from django.contrib.auth.models import User from rest_framework import viewsets, views, mixins from rest_framework import permissions from rest_framework.decorators import action from rest_framework.response import Response from apiserver.api import serializers, models from datetime import datetime, timezone Base = viewsets.GenericViewSet List = mixins.ListModelMixin Retrieve = mixins.RetrieveModelMixin Create = mixins.CreateModelMixin Update = mixins.UpdateModelMixin Destroy = mixins.DestroyModelMixin class UserViewSet(viewsets.ModelViewSet): queryset = User.objects.all().order_by('-date_joined') serializer_class = serializers.UserSerializer permission_classes = [permissions.IsAuthenticated] class DataViewSet(Base, List, Retrieve): @action(detail=False, methods=['post']) def push(self, request): miner_data = request.data['miner_data'] cooler_data = request.data['cooler_data'] for miner_id, miner in miner_data.items(): time = miner['summary'][0]['STATUS'][0]['When'] models.MinerData.objects.update_or_create( time=datetime.fromtimestamp(time, tz=timezone.utc), miner_id=miner_id, defaults=dict( json_version=2, summary=miner['summary'][0]['SUMMARY'][0], fans=miner['fans'][0]['FANS'], devdetails=miner['devdetails'][0]['DEVDETAILS'], version=miner['version'][0]['VERSION'][0], devs=miner['devs'][0]['DEVS'], config=miner['config'][0]['CONFIG'][0], coin=miner['coin'][0]['COIN'][0], pools=miner['pools'][0]['POOLS'], tunerstatus=miner['tunerstatus'][0]['TUNERSTATUS'][0], temps=miner['temps'][0]['TEMPS'], ), ) time = cooler_data['time'] cooler_id = cooler_data['cooler_id'] models.CoolerData.objects.update_or_create( time=datetime.fromtimestamp(time, tz=timezone.utc), cooler_id=cooler_id, defaults=dict( tub_temp=cooler_data['tub_temp'], rad_temp=cooler_data['rad_temp'], max_temp=cooler_data['max_temp'], fan=cooler_data['fan'], pump=cooler_data['pump'], ), ) logging.info('Added {} miner data points from cooler {}.'.format( len(miner_data), cooler_id, )) return Response(200)