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))