feat: 添加多个函数来监测测点、设备、工段的运行或离线状态

This commit is contained in:
caoqianming 2024-04-29 14:45:11 +08:00
parent 408bb37b67
commit 3fcb015fdd
3 changed files with 45 additions and 8 deletions

View File

@ -2,8 +2,9 @@ from .models import Equipment
from apps.system.models import Dept
from apps.mtm.models import Mgroup
import datetime
from django.conf import settings
from dateutil import tz
from django.core.cache import cache
from django.utils.timezone import localtime
from apps.utils.tasks import ctask_run
import logging
myLogger = logging.getLogger("log")
@ -11,7 +12,7 @@ myLogger = logging.getLogger("log")
def get_eq_rs(equipId: str):
"""获取设备运行状态缓存
"""
return cache.get(f"equipment_{equipId}", {"running_state": Equipment.OFFLINE, "running_state_timex": localtime()})
return cache.get(f"equipment_{equipId}", {"running_state": Equipment.OFFLINE, "running_state_timex": datetime.datetime(year=1990, month=4, day=4, hour=0, minute=0, second=0, tzinfo=tz.gettz(settings.TIME_ZONE))})
def set_eq_rs(equipId, last_timex: datetime, last_mrs: int):
"""更新设备运行状态(包括缓存和数据库)
@ -43,6 +44,7 @@ def shutdown_or_startup(equipId: str, last_timex: datetime, last_mrs):
equip.running_state = last_mrs
equip.save(update_fields=["running_state"])
# 设备运行状态决定工段运行状态
mgroup: Mgroup = equip.mgroup
indicate = equip.indicate_mgroup_running
new_run = None

View File

@ -4,20 +4,35 @@ from apps.utils.tasks import CustomTask
from celery import shared_task
from django.utils.timezone import localtime
from apps.em.models import Equipment
from apps.em.services import set_eq_rs, get_eq_rs
from apps.em.services import set_eq_rs, get_eq_rs, shutdown_or_startup
from apps.mtm.models import Mgroup
@shared_task(base=CustomTask)
def check_equipment_offline(seconds=30):
"""监测设备是否掉线(根据测点采集)及工段是否运行
"""监测设备是否掉线
监测设备是否掉线
"""
Mgroup.objects.filter(equip_mgroup__isnull=True, equip_mgroup__indicate_mgroup_running__isnull=True).update(is_running=False)
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)
equips = Equipment.objects.all()
now = localtime()
for equip in equips:
rs = get_eq_rs(equip.id)
if (now - rs['running_state_timex']).total_seconds() > seconds:
set_eq_rs(equip.id, now, Equipment.OFFLINE)
set_eq_rs(equip.id, now, Equipment.OFFLINE)
@shared_task(base=CustomTask)
def check_mgroup_running():
"""监测工段是否运行
"""
# 没有设备的工段直接干停
Mgroup.objects.filter(equip_mgroup__isnull=True, equip_mgroup__indicate_mgroup_running__isnull=True).update(is_running=False)
equips = Equipment.objects.filter(indicate_mgroup_running__isnull=False, mgroup__isnull=False)
for equip in equips:
rs = get_eq_rs(equip.id)
if rs['running_state'] == Equipment.OFFLINE: # 如果掉线了不关心
pass
else:
shutdown_or_startup(equip.id, rs["running_state_timex"], rs["running_state"])

View File

@ -21,7 +21,9 @@ from django.utils import timezone
from django.db.models import Max
from apps.third.king.k import kingClient
from apps.third.king.king_api import kapis
from apps.enm.services import insert_mplogx_from_king_rest_chunk
from apps.enm.services import insert_mplogx_from_king_rest_chunk, get_mpoint_cache
from django.core.cache import cache
from django.utils.timezone import localtime
myLogger = logging.getLogger("log")
@ -730,3 +732,21 @@ def king_insert_mplogx():
ml.append({"N": m.replace('K_', '')})
_, res = kingClient.request(**kapis['read_batchtagrealvalue'], json={"objs": ml})
insert_mplogx_from_king_rest_chunk(res)
@shared_task(base=CustomTask)
def check_mpoint_offline(seconds=300):
"""监测测点采集掉线"""
now = localtime()
for mpoint in Mpoint.objects.filter(enabled=True, type=Mpoint.MT_AUTO):
cache_key = Mpoint.cache_key(mpoint.code)
mpoint_data = get_mpoint_cache(mpoint.id)
last_data = mpoint_data.get('last_data', None)
is_offline = True
if last_data and last_data['last_timex'] and (now-last_data['last_timex']).total_seconds() < seconds:
is_offline = False
if is_offline:
mpoint_data['gather_state'] = -2 # 掉线了
cache.set(cache_key, mpoint_data, timeout=None)