224 lines
9.0 KiB
Python
224 lines
9.0 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 vrpmdvntlink import trySend
|
|
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
|
|
#TODO ML: uncomment
|
|
self.rtservice = None #rts.RT_Service()
|
|
self.rtMon = None
|
|
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))
|
|
# TODO ML: uncomment this
|
|
res = trySend(schemaCreateCmd.dumps(vrpmdCreateCmd))
|
|
#res = 'Test'
|
|
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)
|
|
logging.info("startmonitoring: create RTSMonitoringTask")
|
|
strid = str(self.id)
|
|
logging.info("rts.RTSMonitoringTask: self.id:%s", strid)
|
|
self.rtMon = rts.RTSMonitoringTask(str(self.id), str(self.name), self.samplerate, self.sampleperiod, self.downtime, '/home/root/monfiles/')
|
|
# self.rtMon.id = self.id
|
|
# self.rtMon.name = self.name
|
|
# self.rtMon.samplerate = self.samplerate
|
|
# self.rtMon.samplePeriod = self.sampleperiod
|
|
# self.rtMon.downtime = self.downtime
|
|
# self.rtMon.path = '/home/root/monfiles'
|
|
#logging.info("startmonitoring: created RTSMonitoringTask: id:%s name:%s samplerate:%d sampleperiod:%d downtime:%d path:%s", self.rtMon.id, self.rtMon.name, self.rtMon.samplerate, self.rtMon.samplePeriod, self.rtMon.downtime, self.rtMon.path)
|
|
|
|
##new ML 09.07.2024
|
|
if (self.rtMon.start()) :
|
|
logging.info("startmonitoring - self.rtMon.start(): Monitoring started")
|
|
|
|
self.status = 'started'
|
|
else :
|
|
self.status = 'stopped'
|
|
return self.status
|
|
except :
|
|
self.status = "stopped"
|
|
self.rtMon = None
|
|
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)
|
|
|
|
##new ML 09.07.2024
|
|
if (self.rtMon != None) :
|
|
self.rtMon.stop()
|
|
# 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()
|
|
# TODO ML: uncomment this
|
|
res = trySend(schemaDeleteCmd.dumps(vrpmdDeleteCmd))
|
|
#res = 'Stopped'
|
|
logging.info("MainThread: try send stop monitoring done %s", res)
|
|
|
|
self.rtMon = None
|
|
# 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))
|