feat: 添加多个函数来监测测点、设备、工段的运行或离线状态
This commit is contained in:
parent
408bb37b67
commit
3fcb015fdd
|
@ -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
|
||||
|
|
|
@ -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"])
|
|
@ -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)
|
||||
|
||||
|
Loading…
Reference in New Issue