diff --git a/apps/em/services.py b/apps/em/services.py index 970df25b..ec09070e 100644 --- a/apps/em/services.py +++ b/apps/em/services.py @@ -3,18 +3,21 @@ from apps.system.models import Dept from apps.mtm.models import Mgroup import datetime 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) # 更新缓存 + if to_db: + Equipment.objects.filter(id=equipId).update(running_state=last_mrs) 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): """ diff --git a/apps/em/tasks.py b/apps/em/tasks.py index e400e653..f36948fb 100644 --- a/apps/em/tasks.py +++ b/apps/em/tasks.py @@ -2,10 +2,9 @@ from __future__ import absolute_import, unicode_literals from apps.utils.tasks import CustomTask from celery import shared_task -from django.utils import timezone +from django.utils.timezone import localtime from apps.em.models import Equipment -from django.core.cache import cache -from apps.em.services import set_equip_rs +from apps.em.services import set_equip_rs, get_equip_rs @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) + now = localtime() for equip in equips: - is_offline = True - cache_key = f"equipment_{equip.id}" - cache_value = cache.get(cache_key, None) - if cache_value: - last_timex = cache_value.get("running_state_timex", None) - if last_timex and (now - last_timex).total_seconds() <= seconds: - 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) \ No newline at end of file + rs = get_equip_rs(equip.id) + if (now - rs['running_state_timex']).total_seconds() > seconds: + to_db = False + if equip.running_state != Equipment.OFFLINE: + to_db = True + set_equip_rs(equip.id, now, Equipment.OFFLINE, to_db) \ No newline at end of file diff --git a/apps/enm/serializers.py b/apps/enm/serializers.py index faa72bbc..a5be4ec1 100644 --- a/apps/enm/serializers.py +++ b/apps/enm/serializers.py @@ -24,7 +24,7 @@ class MpointSerializer(CustomModelSerializer): read_only_fields = EXCLUDE_FIELDS + ["belong_dept", "cate"] 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 def validate(self, attrs):