feat: 设备运行状态的缓存优化
This commit is contained in:
parent
7d8585856d
commit
00e3129751
|
@ -3,18 +3,21 @@ from apps.system.models import Dept
|
||||||
from apps.mtm.models import Mgroup
|
from apps.mtm.models import Mgroup
|
||||||
import datetime
|
import datetime
|
||||||
from django.core.cache import cache
|
from django.core.cache import cache
|
||||||
|
from django.utils.timezone import localtime
|
||||||
|
|
||||||
def set_equip_rs(equipId: str, last_timex: datetime, last_mrs):
|
def set_equip_rs(equipId: str, last_timex: datetime, last_mrs, to_db=False):
|
||||||
"""更新设备运行状态缓存
|
"""更新设备运行状态缓存
|
||||||
"""
|
"""
|
||||||
cache.set(f"equipment_{equipId}", {"running_state": last_mrs, "running_state_timex": last_timex}, timeout=None) # 更新缓存
|
cache.set(f"equipment_{equipId}", {"running_state": last_mrs, "running_state_timex": last_timex}, timeout=None) # 更新缓存
|
||||||
|
if to_db:
|
||||||
|
Equipment.objects.filter(id=equipId).update(running_state=last_mrs)
|
||||||
|
|
||||||
def get_equip_rs(equipId):
|
def get_equip_rs(equipId):
|
||||||
"""返回设备运行状态缓存
|
"""返回设备运行状态缓存
|
||||||
|
|
||||||
{"running_state": None, "running_state_timex": None}
|
{"running_state": 50, "running_state_timex": localtime}
|
||||||
"""
|
"""
|
||||||
return cache.get(f"equipment_{equipId}", {"running_state": None, "running_state_timex": None})
|
return cache.get(f"equipment_{equipId}", {"running_state": Equipment.OFFLINE, "running_state_timex": localtime()})
|
||||||
|
|
||||||
def shutdown_or_startup(equipId: str, last_timex: datetime, last_mrs):
|
def shutdown_or_startup(equipId: str, last_timex: datetime, last_mrs):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -2,10 +2,9 @@
|
||||||
from __future__ import absolute_import, unicode_literals
|
from __future__ import absolute_import, unicode_literals
|
||||||
from apps.utils.tasks import CustomTask
|
from apps.utils.tasks import CustomTask
|
||||||
from celery import shared_task
|
from celery import shared_task
|
||||||
from django.utils import timezone
|
from django.utils.timezone import localtime
|
||||||
from apps.em.models import Equipment
|
from apps.em.models import Equipment
|
||||||
from django.core.cache import cache
|
from apps.em.services import set_equip_rs, get_equip_rs
|
||||||
from apps.em.services import set_equip_rs
|
|
||||||
|
|
||||||
|
|
||||||
@shared_task(base=CustomTask)
|
@shared_task(base=CustomTask)
|
||||||
|
@ -14,17 +13,12 @@ def check_equipment_offline(seconds=30):
|
||||||
|
|
||||||
监测设备是否掉线
|
监测设备是否掉线
|
||||||
"""
|
"""
|
||||||
now = timezone.now()
|
|
||||||
equips = Equipment.objects.filter(mp_ep_monitored__is_rep_ep_running_state=True, mp_ep_monitored__enabled=True)
|
equips = Equipment.objects.filter(mp_ep_monitored__is_rep_ep_running_state=True, mp_ep_monitored__enabled=True)
|
||||||
|
now = localtime()
|
||||||
for equip in equips:
|
for equip in equips:
|
||||||
is_offline = True
|
rs = get_equip_rs(equip.id)
|
||||||
cache_key = f"equipment_{equip.id}"
|
if (now - rs['running_state_timex']).total_seconds() > seconds:
|
||||||
cache_value = cache.get(cache_key, None)
|
to_db = False
|
||||||
if cache_value:
|
if equip.running_state != Equipment.OFFLINE:
|
||||||
last_timex = cache_value.get("running_state_timex", None)
|
to_db = True
|
||||||
if last_timex and (now - last_timex).total_seconds() <= seconds:
|
set_equip_rs(equip.id, now, Equipment.OFFLINE, to_db)
|
||||||
is_offline = False
|
|
||||||
if is_offline and equip.running_state != Equipment.OFFLINE:
|
|
||||||
equip.running_state = Equipment.OFFLINE
|
|
||||||
equip.save(update_fields=["running_state"])
|
|
||||||
set_equip_rs(equip.id, now, Equipment.OFFLINE)
|
|
|
@ -24,7 +24,7 @@ class MpointSerializer(CustomModelSerializer):
|
||||||
read_only_fields = EXCLUDE_FIELDS + ["belong_dept", "cate"]
|
read_only_fields = EXCLUDE_FIELDS + ["belong_dept", "cate"]
|
||||||
|
|
||||||
def get_last_data(self, obj):
|
def get_last_data(self, obj):
|
||||||
last_data = cache.get(Mpoint.cache_key(obj.code), {})
|
last_data = cache.get(Mpoint.cache_key(obj.code), {}).get('last_data', {})
|
||||||
return last_data
|
return last_data
|
||||||
|
|
||||||
def validate(self, attrs):
|
def validate(self, attrs):
|
||||||
|
|
Loading…
Reference in New Issue