Files
vrpmdv-web/vrpmdvserver/vrpmdvmonitoring.py

194 lines
7.5 KiB
Python

import uuid
import datetime as dt
from marshmallow import Schema, fields, post_load
from vrpmdvcreatemoncmd import VRPMDV_CreateMonCmd
from vrpmdvcreatemonschema import VRPMDV_CreateMonSchema
from vrpmdvdeletemoncmd import VRPMDV_DeleteMonCmd
from vrpmdvdeletemonschema import VRPMDV_DeleteMonSchema
from vrpmdvmonreq import VRPMDV_MonReq
from extensions.rt_service import rt_service as rts
from vrpmdvmonitoringState import VRPMDVMonitoringState
from vrpmdvmondata import createCoproLoggingTask
from vrpmdvntlink import trySend
import logging
import threading
import time
import io
import fcntl
import mmap
from vrpmdvstatusmoncmd import VRPMDV_StatusMonCmd
from vrpmdvstatusmonschema import VRPMDV_StatusMonSchema
# def thread_function(name):
# logging.info("MonThread %s: starting", name)
# fdesc = -1
# rtMon = rts.RTSMonitoringTask()
# fdesc = rtMon.openChannel('/dev/mon-datafile')
# # write loginfos to Buffer
# msg = rtMon.getLogMsg()
# for msgstr in msg:
# logging.info(str(msgstr))
# while ((fdesc >= 0) && ()):
# msg = rtMon.readChannel(fdesc)
# # write loginfos to Buffer
# logmsg = rtMon.getLogMsg()
# for msgstr in logmsg:
# logging.info(str(msgstr))
# logging.info(msg)
# if (msg == 'noResult'):
# break
# logging.info("MonThread %s: finishing", name)
# rtMon.closeChannel(fdesc)
# if (res):
# props = res.getMsg()
# #props = res.getProps()
# if (res.getResCode() == 'error'):
# try:
# logging.info(props)
# # for key, value in props.items():
# # logging.info(key+" "+ str(value))
# except:
# logging.info("MonThread %s: could not open the channel", name)
# else:
# try:
# logging.info(props)
# # for key, value in props.items():
# # logging.info(key+" "+ str(value))
# except:
# logging.info("MonThread %s: could read fdesc of the channel", name)
# else :
# logging.info("MonThread %s: result = None", name)
class VRPMDV_Monitoring(VRPMDV_MonReq):
def __init__(self, no, id, name , samplerate, sampleperiod, downtime, status, owner="None", created_at=dt.datetime.now()) :
self.no = no
self.id = id
self.created_at = created_at
self.rtservice = rts.RT_Service()
self.rtMon = rts.RTSMonitoringTask()
self.monTask = None
self.run_thread = False
self.fdesc = -1
super().__init__(name, samplerate, sampleperiod, downtime, owner, status)
def startMonitoring(self) :
#send create command to M4
try :
logging.basicConfig(format=format, level=logging.INFO, datefmt="%H:%M:%S")
logging.info("MainThread: createMonOnDevice => before vrpmdCreateCmd samplerate:%d, samplerate:%d, samplerate:%d", self.samplerate, self.sampleperiod, self.downtime)
vrpmdCreateCmd = VRPMDV_CreateMonCmd(self.samplerate, self.sampleperiod, self.downtime)
logging.info("MainThread: createMonOnDevice => before schemaCreateCmd")
schemaCreateCmd = VRPMDV_CreateMonSchema()
logging.info("MainThread: try send start monitoring starting %s", schemaCreateCmd.dumps(vrpmdCreateCmd))
res = trySend(schemaCreateCmd.dumps(vrpmdCreateCmd))
logging.info("MainThread: try send start monitoring done %s", res)
# start the receiving thread
logging.info("MainThread %s: open", str(self.id))
# self.fdesc = self.rtMon.openChannel('/dev/mon-datafile')
# self.run_thread = True
# self.monTask = threading.Thread(target=self.run, args=())
# self.monTask.start()
# logging.info("MainThread: strated Mon Thread %s started", self.id)
self.status = 'started'
return self.status
except :
self.status = "stopped"
return self.status
def stopMonitoring(self) :
# isstopped = self.rtservice.setMonitoringState(str(self.id), VRPMDVMonitoringState.stopped)
logging.basicConfig(format=format, level=logging.INFO, datefmt="%H:%M:%S")#
logging.info("MainThread: stopping Mon Thread %s ", self.id)
#send delete cmd to M4
logging.info("MainThread: stop monitoring")
if (self.monTask != None) :
# set the value Runthread to fals that the thread terminate
self.run_thread = False
self.monTask.join(None)
self.monTask = None
logging.info("MonThread %s: closing fdesc=%s", str(self.id), str(self.fdesc))
self.rtMon.closeChannel(self.fdesc)
logging.info("MonThread %s: closed fdesc=%s", str(self.id), str(self.fdesc))
logging.info("MainThread: stopped Mon Thread %s ", self.id)
vrpmdDeleteCmd = VRPMDV_DeleteMonCmd(self.no)
schemaDeleteCmd = VRPMDV_DeleteMonSchema()
res = trySend(schemaDeleteCmd.dumps(vrpmdDeleteCmd))
logging.info("MainThread: try send stop monitoring done %s", res)
# if (isstopped) :
self.status = 'stopped'
return self.status
# def setStatus(self, status) :
# # isStatusSet = self.rtservice.setMonitoringStatus(str(self.id), status)
# logging.info("MainThread: set status ")
# return True
def run(self):
# logging.info("MonThread %s: starting", str(self.id))
# fdesc = -1
# rtMon = rts.RTSMonitoringTask()
# fdesc = rtMon.openChannel('/dev/mon-datafile')
# write loginfos to Buffer
# msg = rtMon.getLogMsg()
# for msgstr in msg:
# logging.info(str(msgstr))
count = 0;
if (self.fdesc >= 0) :
while (self.run_thread):
# check if the thread is running
# if (count == 50):
# vrpmdStatusCmd = VRPMDV_StatusMonCmd(self.no)
# schemaStatusCmd = VRPMDV_StatusMonSchema()
# res = trySend(schemaStatusCmd.dumps(vrpmdStatusCmd))
# logging.info("MainThread: try send stop monitoring done %s", res)
# count = 0
#count = count +1
msg = self.rtMon.readChannel(self.fdesc)
logging.info("MonThread %s: running", str(self.id))
logging.info("Result: %s", msg)
#time.sleep(1)
# write loginfos to Buffer
# logmsg = rtMon.getLogMsg()
# for msgstr in logmsg:
# logging.info(str(msgstr))
# logging.info(msg)
# if (msg == 'noResult'):
# break
# logging.info("MonThread %s: finishing", str(self.id))
# rtMon.closeChannel(fdesc)
logging.info("MonThread %s: finished", str(self.id))
# msg = rtMon.getLogMsg()
# for msgstr in msg:
# logging.info(str(msgstr))
else:
logging.info("MonThread %s: opening failed fdesc <= 0", str(self.id))