# 优化性能
This commit is contained in:
parent
1a681a3c67
commit
f8945b4d78
|
@ -1,3 +1,4 @@
|
||||||
|
import time
|
||||||
from django.db.models import Q, Min, Max
|
from django.db.models import Q, Min, Max
|
||||||
from django.core.cache import cache
|
from django.core.cache import cache
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
@ -22,6 +23,28 @@ def get_vol(device_id, cur_vol):
|
||||||
return '{}{}'.format(round(vol, 1), '%')
|
return '{}{}'.format(round(vol, 1), '%')
|
||||||
|
|
||||||
|
|
||||||
|
def get_latest(device_id):
|
||||||
|
latest_key = 'device_latest_{}'.format(device_id)
|
||||||
|
latest = cache.get(latest_key)
|
||||||
|
if not latest:
|
||||||
|
latest = DeviceCount.objects.filter(device_id=device_id).order_by('-data_time')[0]
|
||||||
|
cache.set(latest_key, latest, 60 * 10)
|
||||||
|
return latest
|
||||||
|
|
||||||
|
|
||||||
|
def get_device(device_id):
|
||||||
|
device_key = 'device_lon_{}'.format(device_id)
|
||||||
|
device = cache.get(device_key)
|
||||||
|
if not device:
|
||||||
|
qs = DeviceCount.objects.filter(~Q(longitude=0), device_id=device_id).order_by('-data_time')
|
||||||
|
if qs.count() > 0:
|
||||||
|
device = qs.first()
|
||||||
|
cache.set(device_key, device, 60 * 10)
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
return device
|
||||||
|
|
||||||
|
|
||||||
class DeviceCountSerializer(serializers.ModelSerializer):
|
class DeviceCountSerializer(serializers.ModelSerializer):
|
||||||
device_name = serializers.SerializerMethodField()
|
device_name = serializers.SerializerMethodField()
|
||||||
mosq_count = serializers.SerializerMethodField()
|
mosq_count = serializers.SerializerMethodField()
|
||||||
|
@ -132,7 +155,8 @@ class DeviceInfoSerializer(serializers.ModelSerializer):
|
||||||
|
|
||||||
def get_count(self, obj):
|
def get_count(self, obj):
|
||||||
try:
|
try:
|
||||||
self.latest = DeviceCount.objects.filter(device_id=obj.device_id).order_by('-data_time')[0]
|
# self.latest = DeviceCount.objects.filter(device_id=obj.device_id).order_by('-data_time')[0]
|
||||||
|
self.latest = get_latest(obj.device_id)
|
||||||
except IndexError:
|
except IndexError:
|
||||||
self.latest = None
|
self.latest = None
|
||||||
if self.latest:
|
if self.latest:
|
||||||
|
@ -157,10 +181,10 @@ class DeviceInfoSerializer(serializers.ModelSerializer):
|
||||||
if lon and lat:
|
if lon and lat:
|
||||||
return [lon, lat]
|
return [lon, lat]
|
||||||
|
|
||||||
query = DeviceCount.objects.filter(~Q(longitude=0), device_id=obj.device_id).order_by('-data_time')
|
# query = DeviceCount.objects.filter(~Q(longitude=0), device_id=obj.device_id).order_by('-data_time')
|
||||||
if query:
|
device = get_device(obj.device_id)
|
||||||
q = query[0]
|
if device:
|
||||||
return [q.longitude, q.latitude]
|
return [device.longitude, device.latitude]
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def get_time(self, obj):
|
def get_time(self, obj):
|
||||||
|
|
Loading…
Reference in New Issue