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.system.models import Dept
|
||||||
from apps.mtm.models import Mgroup
|
from apps.mtm.models import Mgroup
|
||||||
import datetime
|
import datetime
|
||||||
|
from django.conf import settings
|
||||||
|
from dateutil import tz
|
||||||
from django.core.cache import cache
|
from django.core.cache import cache
|
||||||
from django.utils.timezone import localtime
|
|
||||||
from apps.utils.tasks import ctask_run
|
from apps.utils.tasks import ctask_run
|
||||||
import logging
|
import logging
|
||||||
myLogger = logging.getLogger("log")
|
myLogger = logging.getLogger("log")
|
||||||
|
|
@ -11,7 +12,7 @@ myLogger = logging.getLogger("log")
|
||||||
def get_eq_rs(equipId: str):
|
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):
|
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.running_state = last_mrs
|
||||||
equip.save(update_fields=["running_state"])
|
equip.save(update_fields=["running_state"])
|
||||||
|
|
||||||
|
# 设备运行状态决定工段运行状态
|
||||||
mgroup: Mgroup = equip.mgroup
|
mgroup: Mgroup = equip.mgroup
|
||||||
indicate = equip.indicate_mgroup_running
|
indicate = equip.indicate_mgroup_running
|
||||||
new_run = None
|
new_run = None
|
||||||
|
|
|
||||||
|
|
@ -4,20 +4,35 @@ from apps.utils.tasks import CustomTask
|
||||||
from celery import shared_task
|
from celery import shared_task
|
||||||
from django.utils.timezone import localtime
|
from django.utils.timezone import localtime
|
||||||
from apps.em.models import Equipment
|
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
|
from apps.mtm.models import Mgroup
|
||||||
|
|
||||||
|
|
||||||
@shared_task(base=CustomTask)
|
@shared_task(base=CustomTask)
|
||||||
def check_equipment_offline(seconds=30):
|
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()
|
now = localtime()
|
||||||
for equip in equips:
|
for equip in equips:
|
||||||
rs = get_eq_rs(equip.id)
|
rs = get_eq_rs(equip.id)
|
||||||
if (now - rs['running_state_timex']).total_seconds() > seconds:
|
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 django.db.models import Max
|
||||||
from apps.third.king.k import kingClient
|
from apps.third.king.k import kingClient
|
||||||
from apps.third.king.king_api import kapis
|
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")
|
myLogger = logging.getLogger("log")
|
||||||
|
|
||||||
|
|
@ -730,3 +732,21 @@ def king_insert_mplogx():
|
||||||
ml.append({"N": m.replace('K_', '')})
|
ml.append({"N": m.replace('K_', '')})
|
||||||
_, res = kingClient.request(**kapis['read_batchtagrealvalue'], json={"objs": ml})
|
_, res = kingClient.request(**kapis['read_batchtagrealvalue'], json={"objs": ml})
|
||||||
insert_mplogx_from_king_rest_chunk(res)
|
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