added my Recipes
This commit is contained in:
File diff suppressed because one or more lines are too long
Binary file not shown.
|
After Width: | Height: | Size: 99 KiB |
@@ -0,0 +1,42 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<link rel="icon" href="/favicon.ico" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<meta name="theme-color" content="#000000" />
|
||||
<meta
|
||||
name="description"
|
||||
content="Markus Lehr | VR Predictive Maintenance Device."
|
||||
/>
|
||||
<meta
|
||||
data-rh="true"
|
||||
property="og:image"
|
||||
content="https://refine.dev/img/refine_social.png"
|
||||
/>
|
||||
<meta
|
||||
data-rh="true"
|
||||
name="twitter:image"
|
||||
content="https://refine.dev/img/refine_social.png"
|
||||
/>
|
||||
<title>
|
||||
Markus Lehr | VR Predictive Maintenance Device.
|
||||
</title>
|
||||
<script type="module" crossorigin src="/assets/index-952960a4.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<noscript>You need to enable JavaScript to run this app.</noscript>
|
||||
<div id="root"></div>
|
||||
|
||||
<!--
|
||||
This HTML file is a template.
|
||||
If you open it directly in the browser, you will see an empty page.
|
||||
|
||||
You can add webfonts, meta tags, or analytics to this file.
|
||||
The build step will place the bundled scripts into the <body> tag.
|
||||
|
||||
To begin the development, run `npm dev` or `yarn start`.
|
||||
To create a production bundle, use `npm run build` or `yarn build`.
|
||||
-->
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,11 @@
|
||||
|
||||
|
||||
|
||||
|
||||
class VRPMDV_CreateMonCmd:
|
||||
def __init__(self, samplerate, sampleperiod, downtime) :
|
||||
self.cmdid = 1
|
||||
self.samplerate = samplerate
|
||||
self.sampleperiod = sampleperiod
|
||||
self.downtime = downtime
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
import uuid
|
||||
import datetime as dt
|
||||
from marshmallow import Schema, fields, post_load, post_dump
|
||||
from vrpmdvcreatemoncmd import VRPMDV_CreateMonCmd
|
||||
|
||||
|
||||
|
||||
|
||||
# class VRPMDV_CreateMonSchema(Schema):
|
||||
# cmdid = fields.Integer()
|
||||
# id = fields.UUID()
|
||||
# samplerate = fields.Integer()
|
||||
# sampleperiod = fields.Integer()
|
||||
# downtime = fields.Integer()
|
||||
# status = fields.String()
|
||||
|
||||
# #monstate = fields.Enum(VRPMDVMonitoringState)
|
||||
|
||||
# # def get_envelope_key(self, many):
|
||||
# # """Helper to get the envelope key."""
|
||||
# # key = self.__envelope__["many"] if many else self.__envelope__["single"]
|
||||
# # assert key is not None, "Envelope key undefined"
|
||||
# # return key
|
||||
|
||||
# # @post_dump(pass_many=True)
|
||||
# # def wrap_with_envelope(self, data, many, **kwargs):
|
||||
# # key = self.get_envelope_key(many)
|
||||
# # return {key: data}
|
||||
|
||||
# @post_load
|
||||
# def make_vrpmdv_Monitoring(self, data, **kwargs):
|
||||
# mon = VRPMDV_Monitoring(**data)
|
||||
# return mon
|
||||
|
||||
|
||||
|
||||
class VRPMDV_CreateMonSchema(Schema):
|
||||
cmdid = fields.Integer()
|
||||
samplerate = fields.Integer()
|
||||
sampleperiod = fields.Integer()
|
||||
downtime = fields.Integer()
|
||||
|
||||
@post_load
|
||||
def make_vrpmdv_CreateMonitoring(self, data, **kwargs):
|
||||
mon = VRPMDV_CreateMonCmd(**data)
|
||||
return mon
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,485 @@
|
||||
import os
|
||||
import time
|
||||
from uuid import uuid4
|
||||
import uuid
|
||||
from flask import jsonify
|
||||
import json
|
||||
|
||||
from marshmallow import EXCLUDE, ValidationError
|
||||
#from vrpmdvcreatemoncmd import VRPMDV_CreateMonCmd
|
||||
#from vrpmdvcreatemonschema import VRPMDV_CreateMonSchema
|
||||
#from vrpmdvdeletemoncmd import VRPMDV_DeleteMonCmd
|
||||
#from vrpmdvdeletemonschema import VRPMDV_DeleteMonSchema
|
||||
from vrpmdvmonfilescompleteschema import VRPMDV_MonfilesCompleteSchema
|
||||
from vrpmdvmonfilter import VRPMDV_MonFilter
|
||||
from vrpmdvmonfilterschema import VRPMDV_MonFilterSchema
|
||||
from vrpmdvmonsensorschema import VRPMDV_MonSensorSchema
|
||||
from vrpmdvmonchannelschema import VRPMDV_MonChannelSchema
|
||||
from vrpmdvmonfilesschema import VRPMDV_MonfilesSchema
|
||||
from vrpmdvmonitoring import VRPMDV_Monitoring
|
||||
from vrpmdvmonitoringschema import VRPMDV_MonitoringSchema
|
||||
from vrpmdvmonreqschema import VRPMDV_MonReqSchema
|
||||
# from vrpmdvntlink import trySend
|
||||
|
||||
from extensions.rt_service import rt_service as rts
|
||||
from vrpmdvmonitoringState import VRPMDVMonitoringState
|
||||
#from vrpmdvlogging import createCoproLoggingTask
|
||||
import logging
|
||||
|
||||
|
||||
class VRPMDV_Data:
|
||||
|
||||
def __init__(self):
|
||||
#self.loaded = False
|
||||
format = "%(asctime)s: %(message)s"
|
||||
logging.basicConfig(format=format, level=logging.INFO, datefmt="%H:%M:%S")
|
||||
self.mons:list = []
|
||||
#TODO ML: uncomment this lines
|
||||
self.rtservice = rts.RT_Service()
|
||||
if (self.rtservice != None):
|
||||
logging.info("init: initCoproFW")
|
||||
self.rtservice.initCoproFW("home/root/elffile","zephyr_openamp_rsc_table.elf")
|
||||
self.logTask = None #createCoproLoggingTask()
|
||||
self.loaded = self.loadFile()
|
||||
self.monfilespath = '/home/root/monfiles/'
|
||||
#start the monitorings
|
||||
time.sleep(1)
|
||||
self.startMons();
|
||||
|
||||
|
||||
|
||||
def loadFile(self):
|
||||
try:
|
||||
with open('./mons.json', 'r') as f:
|
||||
fmons = f.read()
|
||||
|
||||
if not fmons:
|
||||
# return no Item
|
||||
return True
|
||||
else:
|
||||
# data = json.loads(fmons)
|
||||
schema = VRPMDV_MonitoringSchema(many=True)
|
||||
#res = schema.loads(fmons) # data
|
||||
self.mons = schema.loads(fmons) # .append(res)
|
||||
return True
|
||||
except:
|
||||
#nothing todo ML we should create a file later the database
|
||||
print("file not found")
|
||||
|
||||
def saveFile(self):
|
||||
try:
|
||||
with open('./mons.json', 'w') as f:
|
||||
schema = VRPMDV_MonitoringSchema()
|
||||
result = schema.dumps(self.mons, many=True)
|
||||
f.write(result)
|
||||
return True
|
||||
except:
|
||||
#nothing todo
|
||||
print("could not write file")
|
||||
|
||||
def startMons(self):
|
||||
try:
|
||||
logging.info("MainThread: startMons")
|
||||
# for i, val in enumerate(self.mons):
|
||||
# if (val.status == 'started') :
|
||||
# val.startMonitoring()
|
||||
except:
|
||||
print("could not start monitorings")
|
||||
|
||||
|
||||
|
||||
def findMon(mon):
|
||||
return mon
|
||||
|
||||
def getMonitorings(self):
|
||||
# 1st time read file
|
||||
# if not self.loaded :
|
||||
# self.loaded = self.loadFile()
|
||||
|
||||
schema = VRPMDV_MonitoringSchema()
|
||||
result = schema.dumps(self.mons, many=True)
|
||||
return result
|
||||
|
||||
def getMonitoring(self, vrpmid):
|
||||
try:
|
||||
matched_obj = next(x for x in self.mons if str(x.id) == vrpmid)
|
||||
except:
|
||||
return "no Item found"
|
||||
|
||||
# we find it and we return it
|
||||
schema = VRPMDV_MonitoringSchema()
|
||||
return schema.dumps(matched_obj)
|
||||
|
||||
|
||||
|
||||
def setMonitoring(self, id, request):
|
||||
try:
|
||||
matched_obj = next(x for x in self.mons if str(x.id) == id)
|
||||
except:
|
||||
return "no Item found"
|
||||
|
||||
if 'name' in request : matched_obj.name = request['name']
|
||||
if 'samplerate' in request : matched_obj.samplerate = request['samplerate']
|
||||
if 'sampleperiod' in request : matched_obj.sampleperiod = request['sampleperiod']
|
||||
if 'downtime' in request : matched_obj.downtime = request['downtime']
|
||||
if 'status' in request :
|
||||
if (request['status'] == 'started'):
|
||||
if (matched_obj.status == VRPMDVMonitoringState.STOPPED):
|
||||
logging.info("MainThread: started %s", matched_obj.id)
|
||||
matched_obj.startMonitoring()
|
||||
# matched_obj.setStatus(self.createMonOnDevice(matched_obj))
|
||||
elif (matched_obj.status == 'started') :
|
||||
logging.info("MainThread: stopped %s", matched_obj.id)
|
||||
# matched_obj.setStatus(self._stopMonitoring(matched_obj))
|
||||
matched_obj.stopMonitoring()
|
||||
self.saveFile()
|
||||
|
||||
# we find it and we return it
|
||||
schema = VRPMDV_MonitoringSchema()
|
||||
return schema.dumps(matched_obj)
|
||||
|
||||
|
||||
def createMonitoring(self, request):
|
||||
id = uuid.uuid4()
|
||||
createjson = request.get_json()
|
||||
vrpmreq = VRPMDV_MonReqSchema().load(createjson)
|
||||
|
||||
mon = VRPMDV_Monitoring(0, id, vrpmreq.name, vrpmreq.samplerate, vrpmreq.sampleperiod, vrpmreq.downtime, vrpmreq.status, vrpmreq.owner)
|
||||
logging.info("Monitoring %s: creating", str(id))
|
||||
|
||||
# create Monitoring on the realtime side
|
||||
if (vrpmreq.status == 'started'):
|
||||
logging.info("Monitoring %s: createMonOnDevice", str(id))
|
||||
mon.startMonitoring()
|
||||
# status = self.createMonOnDevice(mon)
|
||||
# logging.info("Monitoring %s: _start executed. status:%s", str(id), str(status))
|
||||
# mon.status = status
|
||||
|
||||
self.mons.append(mon)
|
||||
#save to file
|
||||
self.saveFile()
|
||||
#create result Object in json
|
||||
schema = VRPMDV_MonitoringSchema()
|
||||
return schema.dumps(mon)
|
||||
|
||||
|
||||
def deleteMonitoring(self, vrpmid):
|
||||
# if not self.loaded :
|
||||
# self.loaded = self.loadFile()
|
||||
|
||||
# find monitoring with uuid
|
||||
#result = filter(lambda mon: str(mon.uuid) == vrpmid["uuid"], self.mons)
|
||||
try:
|
||||
matched_obj = next(x for x in self.mons if str(x.id) == vrpmid)
|
||||
except:
|
||||
return "no Item found"
|
||||
|
||||
|
||||
# we find it, delete on realtime side and now remove from list
|
||||
matched_obj.stopMonitoring()
|
||||
self.mons.remove(matched_obj)
|
||||
#save the list
|
||||
self.saveFile()
|
||||
#make result
|
||||
schema = VRPMDV_MonitoringSchema()
|
||||
return schema.dump(matched_obj)
|
||||
|
||||
|
||||
# internal helper function
|
||||
|
||||
# ML: transfer to Monitoring class
|
||||
# def createMonOnDevice(self, monitoring):
|
||||
# #call the start API of the c++ driver
|
||||
# try:
|
||||
|
||||
# logging.info("MainThread: createMonOnDevice => before vrpmdCreateCmd samplerate:%d, samplerate:%d, samplerate:%d", monitoring.samplerate, monitoring.sampleperiod, monitoring.downtime)
|
||||
# vrpmdCreateCmd = VRPMDV_CreateMonCmd(monitoring.samplerate, monitoring.sampleperiod, monitoring.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)
|
||||
# self.status = "started"
|
||||
# # set status if we have a success TODO
|
||||
# except:
|
||||
# self.status = "stopped"
|
||||
# return "stopped"
|
||||
# return "started"
|
||||
|
||||
|
||||
# def _stopMonitoring(self, monitoring):
|
||||
# #call the stop API of the c++ driver
|
||||
# try:
|
||||
# logging.info("MainThread: stop monitoring")
|
||||
# vrpmdDeleteCmd = VRPMDV_DeleteMonCmd(2, monitoring.id)
|
||||
# schemaDeleteCmd = VRPMDV_DeleteMonSchema()
|
||||
|
||||
# #trySend(schemaDeleteCmd.dumps(vrpmdDeleteCmd))
|
||||
# self.status = "stopped"
|
||||
# logging.info("MainThread: stop monitoring done")
|
||||
|
||||
# except:
|
||||
# self.status = "started"
|
||||
# return "started"
|
||||
|
||||
# return monitoring.status
|
||||
|
||||
|
||||
# old impl ML
|
||||
#
|
||||
# def createMonitoring(self, request):
|
||||
# id = uuid.uuid4()
|
||||
|
||||
# createjson = request.get_json()
|
||||
# vrpmreq = VRPMDV_MonReqSchema().load(createjson)
|
||||
# vrpmdCreateCmd = VRPMDV_CreateMonCmd(1, id , vrpmreq.samplerate, vrpmreq.sampleperiod, vrpmreq.downtime, vrpmreq.status)
|
||||
# schemaCreateCmd = VRPMDV_CreateMonSchema()
|
||||
|
||||
# valstr = schemaCreateCmd.dumps(vrpmdCreateCmd)
|
||||
# trySend(schemaCreateCmd.dumps(vrpmdCreateCmd))
|
||||
|
||||
# mon = VRPMDV_Monitoring(id, vrpmreq.name, vrpmreq.samplerate, vrpmreq.sampleperiod, vrpmreq.downtime, vrpmreq.status, vrpmreq.owner)
|
||||
# logging.info("Monitoring %s: starting", str(id))
|
||||
# mon.startMonitoring()
|
||||
|
||||
# self.mons.append(mon)
|
||||
# #save to file
|
||||
# self.saveFile()
|
||||
# #create result Object in json
|
||||
# schema = VRPMDV_MonitoringSchema()
|
||||
# return schema.dumps(mon)
|
||||
|
||||
|
||||
|
||||
|
||||
# def createMonitoring(self, request):
|
||||
# id = uuid.uuid4()
|
||||
|
||||
# createjson = request.get_json()
|
||||
# vrpmreq = VRPMDV_MonReqSchema().load(createjson)
|
||||
# vrpmdCreateCmd = VRPMDV_CreateMonCmd(1, id , vrpmreq.samplerate, vrpmreq.sampleperiod, vrpmreq.downtime, vrpmreq.status)
|
||||
# schemaCreateCmd = VRPMDV_CreateMonSchema()
|
||||
|
||||
# valstr = schemaCreateCmd.dumps(vrpmdCreateCmd)
|
||||
# trySend(schemaCreateCmd.dumps(vrpmdCreateCmd))
|
||||
|
||||
# mon = VRPMDV_Monitoring(id, vrpmreq.name, vrpmreq.samplerate, vrpmreq.sampleperiod, vrpmreq.downtime, vrpmreq.status, vrpmreq.owner)
|
||||
# logging.info("Monitoring %s: starting", str(id))
|
||||
# mon.startMonitoring()
|
||||
|
||||
# self.mons.append(mon)
|
||||
# #save to file
|
||||
# self.saveFile()
|
||||
# #create result Object in json
|
||||
# schema = VRPMDV_MonitoringSchema()
|
||||
# return schema.dumps(mon)
|
||||
|
||||
|
||||
# def deleteMonitoring(self, vrpmid):
|
||||
# # if not self.loaded :
|
||||
# # self.loaded = self.loadFile()
|
||||
|
||||
# # find monitoring with uuid
|
||||
# #result = filter(lambda mon: str(mon.uuid) == vrpmid["uuid"], self.mons)
|
||||
# try:
|
||||
# matched_obj = next(x for x in self.mons if str(x.id) == vrpmid)
|
||||
# except:
|
||||
# return "no Item found"
|
||||
|
||||
|
||||
# # we find it, delete on realtime side and now remove from list
|
||||
# #matched_obj.deleteMonitoring()
|
||||
# self.mons.remove(matched_obj)
|
||||
# #save the list
|
||||
# self.saveFile()
|
||||
# #make result
|
||||
# schema = VRPMDV_MonitoringSchema()
|
||||
# return schema.dump(matched_obj)
|
||||
|
||||
|
||||
# def startMonitoring(self, vrpmid):
|
||||
# # if not self.loaded :
|
||||
# # self.loaded = self.loadFile()
|
||||
|
||||
# #call the start API of the c++ driver
|
||||
# try:
|
||||
# matched_obj = next(x for x in self.mons if str(x.id) == vrpmid)
|
||||
|
||||
# except:
|
||||
# return "no Item found"
|
||||
|
||||
# if matched_obj.startMonitoring() :
|
||||
# #TODO ML return the state
|
||||
# return "started"
|
||||
|
||||
# return "created"
|
||||
|
||||
# def stopMonitoring(self, vrpmid):
|
||||
# # if not self.loaded :
|
||||
# # self.loaded = self.loadFile()
|
||||
|
||||
# #call the stop API of the c++ driver
|
||||
# try:
|
||||
# matched_obj = next(x for x in self.mons if str(x.id) == vrpmid)
|
||||
# logging.info("MainThread: stop monitoring starting")
|
||||
# vrpmdDeleteCmd = VRPMDV_DeleteMonCmd(2, matched_obj.id)
|
||||
# schemaDeleteCmd = VRPMDV_DeleteMonSchema()
|
||||
# valstr = schemaDeleteCmd.dumps(vrpmdDeleteCmd)
|
||||
# trySend(schemaDeleteCmd.dumps(vrpmdDeleteCmd))
|
||||
# logging.info("MainThread: stop monitoring done")
|
||||
|
||||
# except:
|
||||
# return "no Item found"
|
||||
|
||||
# matched_obj.stopMonitoring()
|
||||
# return matched_obj.monstate.name
|
||||
|
||||
|
||||
def setStatus(self, id, vrpmStatus):
|
||||
if 'status' in vrpmStatus :
|
||||
# matched_obj = self.findMonitoring(id)
|
||||
#call the start API of the c++ driver
|
||||
if (vrpmStatus['status'] == 'started'):
|
||||
return self.startMonitoring(id)
|
||||
else :
|
||||
return self.stopMonitoring(id)
|
||||
|
||||
# return matched_obj.status
|
||||
|
||||
# return ""
|
||||
|
||||
def findMonitoring(self, id):
|
||||
try:
|
||||
return next(x for x in self.mons if str(x.id) == id)
|
||||
except:
|
||||
return None #"no Item found"
|
||||
|
||||
def getMonitoring2files(self):
|
||||
#search in the given directory
|
||||
dirs = [d for d in os.listdir(self.monfilespath) if os.path.isdir(d)]
|
||||
#return for the filter
|
||||
|
||||
|
||||
def getMonitoringfiles(self, id, params):
|
||||
#search in the given directory
|
||||
monId = params.get('monId')
|
||||
logging.basicConfig(format=format, level=logging.INFO, datefmt="%H:%M:%S")
|
||||
logging.info("getMonitoringfiles: monId:%s", monId)
|
||||
|
||||
if (monId == None):
|
||||
return None
|
||||
|
||||
complete = False
|
||||
|
||||
mons = self.getMonofMonfiles(monId)
|
||||
logging.info("getMonitoringfiles: mons.length:%d", len(mons))
|
||||
if (len(mons) == 0) :
|
||||
return None
|
||||
else :
|
||||
#TODO ML: only one monitoring
|
||||
monId = mons[0].id
|
||||
|
||||
#TODO ML change to array
|
||||
#for file in files:
|
||||
filename = self.monfilespath + str(monId) + '/'
|
||||
monfiles = self.loadMonfiles(filename, complete)
|
||||
schema = VRPMDV_MonfilesSchema()
|
||||
result = schema.dumps(monfiles, many=True)
|
||||
return result
|
||||
|
||||
def loadMonfiles(self, id, complete):
|
||||
#files = [f for f in os.listdir() if os.path.isfile(f)]
|
||||
logging.info("loadMonfiles: monId:%s", id)
|
||||
completeMonPath = os.path.dirname(id)
|
||||
monfiles = []
|
||||
for f in os.listdir(completeMonPath) :
|
||||
# if (os.path.isfile(f)) :
|
||||
try:
|
||||
completeFilepath = id + str(f)
|
||||
with open(completeFilepath, 'r') as f:
|
||||
logging.info("loadMonfiles: before fmonfile:%s", completeFilepath)
|
||||
fmonfile = f.read()
|
||||
logging.info("loadMonfiles: after fmonfile:%s", completeFilepath)
|
||||
if fmonfile:
|
||||
# if (complete):
|
||||
# schema = VRPMDV_MonfilesCompleteSchema()
|
||||
# else :
|
||||
logging.info("loadMonfiles: before schemaload")
|
||||
if (complete):
|
||||
schema = VRPMDV_MonfilesCompleteSchema()
|
||||
else:
|
||||
schema = VRPMDV_MonfilesSchema()
|
||||
try:
|
||||
monfile = schema.loads(fmonfile, unknown=EXCLUDE)
|
||||
except ValidationError as err:
|
||||
logging.info("SchemaError: %s",err.messages) # => {"email": ['"foo" is not a valid email address.']}
|
||||
logging.info("Data: %s",err.valid_data) # => {"name": "John"}
|
||||
monfiles.append(monfile)
|
||||
except:
|
||||
#nothing todo ML we should create a file later the database
|
||||
print("file not found")
|
||||
logging.info("loadMonfiles: file not found:%s", completeFilepath)
|
||||
return monfiles
|
||||
|
||||
|
||||
def getMonsDFAvalable(self):
|
||||
monfilters = []
|
||||
mons = self.getMonofMonfiles(0)
|
||||
if (len(mons) == 0):
|
||||
return None
|
||||
else:
|
||||
schema = VRPMDV_MonFilterSchema()
|
||||
for mon in mons:
|
||||
monfilter = VRPMDV_MonFilter(str(mon.id), mon.name)
|
||||
monfilters.append(monfilter)
|
||||
return schema.dumps(monfilters, many=True)
|
||||
|
||||
def getMonofMonfiles(self, monId) :
|
||||
dirname = os.path.dirname(self.monfilespath)
|
||||
dirs = []
|
||||
for d in os.listdir(dirname) :
|
||||
path_file = self.monfilespath + d #os.sep.join([self.monfilespath, d])
|
||||
if os.path.isdir(path_file) :
|
||||
dirs.append(d)
|
||||
mons = []
|
||||
for dir in dirs:
|
||||
mon = self.findMonitoring(dir)
|
||||
if ((mon != None) and ((monId == 0 ) or (monId == str(mon.id)))):
|
||||
mons.append(mon)
|
||||
# monId = mon.id
|
||||
# else:
|
||||
# return None
|
||||
|
||||
return mons
|
||||
|
||||
|
||||
def getMFDownload(self, params):
|
||||
#search in the given directory
|
||||
monId = params.get('monId')
|
||||
if (monId == None):
|
||||
return None
|
||||
|
||||
fileId = params.get('fileid')
|
||||
mons = self.getMonofMonfiles(monId)
|
||||
|
||||
#TODO ML change to array
|
||||
#for file in files:
|
||||
filename = self.monfilespath + str(monId) + '/'
|
||||
monfiles = self.loadMonfiles(filename, True)
|
||||
schema = VRPMDV_MonfilesCompleteSchema()
|
||||
result = schema.dumps(monfiles, many=True)
|
||||
return result
|
||||
|
||||
|
||||
|
||||
# This is to get the directory that the program
|
||||
# is currently running in.
|
||||
# dir_path = os.path.dirname(os.path.realpath(__file__))
|
||||
|
||||
# for root, dirs, files in os.walk(dir_path):
|
||||
# for file in files:
|
||||
|
||||
# # change the extension from '.mp3' to
|
||||
# # the one of your choice.
|
||||
# if file.endswith('.mp3'):
|
||||
# print (root+'/'+str(file))
|
||||
@@ -0,0 +1,10 @@
|
||||
import datetime as dt
|
||||
|
||||
|
||||
|
||||
class VRPMDV_DeleteMonCmd:
|
||||
def __init__(self, id ) :
|
||||
self.cmdid = 2
|
||||
self.id = id
|
||||
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
import uuid
|
||||
import datetime as dt
|
||||
from marshmallow import Schema, fields, post_load, post_dump
|
||||
from vrpmdvdeletemoncmd import VRPMDV_DeleteMonCmd
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
class VRPMDV_DeleteMonSchema(Schema):
|
||||
cmdid = fields.Integer()
|
||||
id = fields.UUID()
|
||||
|
||||
|
||||
@post_load
|
||||
def make_vrpmdv_DeleteMonitoring(self, data, **kwargs):
|
||||
mon = VRPMDV_DeleteMonCmd(**data)
|
||||
return mon
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
import datetime as dt
|
||||
|
||||
|
||||
# generic command for delete, start, stop of the monitoring
|
||||
class VRPMDV_GenericMonCmd:
|
||||
def __init__(self, id , cmdId) :
|
||||
self.id = id
|
||||
self.cmdId = cmdId
|
||||
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
from extensions.rt_service import rt_service as rts
|
||||
import logging
|
||||
import threading
|
||||
import time
|
||||
|
||||
|
||||
|
||||
|
||||
def thread_function(name):
|
||||
|
||||
logging.info("Thread %s: starting", name)
|
||||
rtserv = rts.RT_Service()
|
||||
isok = rtserv.initLogChannel()
|
||||
if (not isok):
|
||||
logging.info("Thread %s: could not open the logport", name)
|
||||
|
||||
while (isok):
|
||||
msg = rtserv.readLogChannel()
|
||||
logging.info(msg)
|
||||
if (msg == 'noResult'):
|
||||
break
|
||||
|
||||
logging.info("Thread %s: finishing", name)
|
||||
|
||||
|
||||
|
||||
def createCoproLoggingTask():
|
||||
format = "%(asctime)s: %(message)s"
|
||||
logging.basicConfig(format=format, level=logging.INFO, datefmt="%H:%M:%S")
|
||||
x = threading.Thread(target=thread_function, args=(1,))
|
||||
|
||||
x.start()
|
||||
return x
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
import datetime as dt
|
||||
|
||||
|
||||
|
||||
class VRPMDV_MonChannels:
|
||||
def __init__(self, name , valuetype):
|
||||
self.name = name
|
||||
self.valuetype = valuetype
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
import uuid
|
||||
import datetime as dt
|
||||
from marshmallow import Schema, fields, post_load, EXCLUDE
|
||||
|
||||
from vrpmdvmonchannels import VRPMDV_MonChannels
|
||||
|
||||
|
||||
|
||||
class VRPMDV_MonChannelSchema(Schema):
|
||||
name = fields.String()
|
||||
valuetype = fields.String()
|
||||
#value = fields.Number()
|
||||
|
||||
@post_load
|
||||
def make_vrpmdv_MonfilesChannelSchema(self, data, **kwargs):
|
||||
return VRPMDV_MonChannels(**data)
|
||||
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
from extensions.rt_service import rt_service as rts
|
||||
import logging
|
||||
import threading
|
||||
import time
|
||||
|
||||
|
||||
|
||||
|
||||
def thread_function(name):
|
||||
|
||||
logging.info("MonThread %s: starting", name)
|
||||
rtserv = rts.RT_Service()
|
||||
isok = rtserv.openDataChannel('/dev/mon-datafile')
|
||||
if (not isok):
|
||||
logging.info("MonThread %s: could not open the logport", name)
|
||||
|
||||
while (isok):
|
||||
msg = rtserv.readDataChannel()
|
||||
logging.info(msg)
|
||||
if (msg == 'noResult'):
|
||||
break
|
||||
|
||||
logging.info("MonThread %s: finishing", name)
|
||||
rtserv.closeDataChannel()
|
||||
|
||||
|
||||
|
||||
def createCoproLoggingTask():
|
||||
format = "%(asctime)s: %(message)s"
|
||||
logging.basicConfig(format=format, level=logging.INFO, datefmt="%H:%M:%S")
|
||||
x = threading.Thread(target=thread_function, args=(1,))
|
||||
|
||||
x.start()
|
||||
return x
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
import datetime as dt
|
||||
|
||||
|
||||
|
||||
class VRPMDV_Monfiles:
|
||||
def __init__(self, id, monid, name , samplerate, sampleperiod, downtime, timestamp, hwdescription) :
|
||||
self.id = id
|
||||
self.monid = monid
|
||||
self.name = name
|
||||
self.samplerate = samplerate
|
||||
self.sampleperiod = sampleperiod
|
||||
self.downtime = downtime
|
||||
self.timestamp = timestamp
|
||||
self.hwdescription = hwdescription
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
import datetime as dt
|
||||
|
||||
from vrpmdvmonfiles import VRPMDV_Monfiles
|
||||
|
||||
|
||||
|
||||
|
||||
class VRPMDV_MonfilesComplete(VRPMDV_Monfiles):
|
||||
def __init__(self, id, monid, name , samplerate, sampleperiod, downtime, timestamp, hwdescription, values) :
|
||||
self.id = id
|
||||
self.monid = monid
|
||||
self.name = name
|
||||
self.samplerate = samplerate
|
||||
self.sampleperiod = sampleperiod
|
||||
self.downtime = downtime
|
||||
self.timestamp = timestamp
|
||||
self.hwdescription = hwdescription
|
||||
self.values = values
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
import uuid
|
||||
import datetime as dt
|
||||
from marshmallow import Schema, fields, post_load, EXCLUDE
|
||||
from utilities.union import UnionField
|
||||
from vrpmdvmonfilescomplete import VRPMDV_MonfilesComplete
|
||||
from vrpmdvmonfilesschema import VRPMDV_MonfilesSchema
|
||||
|
||||
|
||||
|
||||
|
||||
# books = fields.List(fields.Nested("BookSchema", exclude=("author",)))
|
||||
|
||||
class VRPMDV_MonfilesCompleteSchema(Schema):
|
||||
id = fields.String(required=True)
|
||||
monid = fields.String(required=True)
|
||||
name = fields.String(required=True)
|
||||
samplerate = fields.Integer(required=True)
|
||||
sampleperiod = fields.Integer(required=True)
|
||||
downtime = fields.Integer(required=True)
|
||||
timestamp = fields.Integer(required=True)
|
||||
hwdescription = fields.List(fields.Nested("VRPMDV_MonSensorSchema"))
|
||||
values = fields.List(UnionField(
|
||||
types=[int, float],
|
||||
metadata={
|
||||
"description": "Multiple types.",
|
||||
},
|
||||
))
|
||||
|
||||
@post_load
|
||||
def make_vrpmdv_MonfilesCompleteSchema(self, data, **kwargs):
|
||||
return VRPMDV_MonfilesComplete(**data)
|
||||
|
||||
|
||||
# some_field = UnionField(
|
||||
# types=[str, int, float, dict, list, bool, set, tuple],
|
||||
# metadata={
|
||||
# "description": "Multiple types.",
|
||||
# },
|
||||
# )
|
||||
@@ -0,0 +1,24 @@
|
||||
import uuid
|
||||
import datetime as dt
|
||||
from marshmallow import Schema, fields, post_load, EXCLUDE
|
||||
|
||||
from vrpmdvmonfiles import VRPMDV_Monfiles
|
||||
|
||||
|
||||
|
||||
|
||||
class VRPMDV_MonfilesSchema(Schema):
|
||||
id = fields.String(required=True)
|
||||
monid = fields.String(required=True)
|
||||
name = fields.String(required=True)
|
||||
samplerate = fields.Integer(required=True)
|
||||
sampleperiod = fields.Integer(required=True)
|
||||
downtime = fields.Integer(required=True)
|
||||
timestamp = fields.Integer(required=True)
|
||||
hwdescription = fields.List(fields.Nested("VRPMDV_MonSensorSchema"))
|
||||
|
||||
|
||||
@post_load
|
||||
def make_vrpmdv_Monfiles(self, data, **kwargs):
|
||||
return VRPMDV_Monfiles(**data)
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
import datetime as dt
|
||||
|
||||
|
||||
|
||||
class VRPMDV_MonFilter:
|
||||
def __init__(self, id, name ) :
|
||||
self.id = id
|
||||
self.name = name
|
||||
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
import uuid
|
||||
import datetime as dt
|
||||
from marshmallow import Schema, fields, post_load
|
||||
from vrpmdvmonfilter import VRPMDV_MonFilter
|
||||
|
||||
|
||||
class VRPMDV_MonFilterSchema(Schema):
|
||||
id = fields.String()
|
||||
name = fields.String()
|
||||
|
||||
@post_load
|
||||
def make_vrpmdv_MonFilter(self, data, **kwargs):
|
||||
return VRPMDV_MonFilter(**data)
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,223 @@
|
||||
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))
|
||||
@@ -0,0 +1,30 @@
|
||||
#from enum import Enum
|
||||
from marshmallow import Schema, fields, post_load
|
||||
|
||||
|
||||
|
||||
|
||||
class VRPMDVMonitoringState():
|
||||
STARTED = 'started'
|
||||
STOPPED = 'stopped'
|
||||
|
||||
NCREATE = 0
|
||||
NDELETE = 1
|
||||
|
||||
def __init__(self, state = STOPPED):
|
||||
self.state = state
|
||||
|
||||
def get(self) :
|
||||
if (self.state == self.STARTED) :
|
||||
return self.NCREATE
|
||||
else :
|
||||
return self.NDELETE
|
||||
|
||||
|
||||
|
||||
|
||||
# class VRPMDVMonitoringState(Enum):
|
||||
# off = 1
|
||||
# created = 2
|
||||
# started = 3
|
||||
# stopped = 4
|
||||
@@ -0,0 +1,29 @@
|
||||
import uuid
|
||||
import datetime as dt
|
||||
from marshmallow import Schema, fields, post_load, post_dump
|
||||
from vrpmdvmonitoring import VRPMDV_Monitoring
|
||||
|
||||
|
||||
|
||||
class VRPMDV_MonitoringSchema(Schema):
|
||||
no = fields.Integer()
|
||||
id = fields.UUID()
|
||||
created_at = fields.DateTime("%m/%d/%Y, %H:%M")
|
||||
name = fields.String()
|
||||
samplerate = fields.Integer()
|
||||
sampleperiod = fields.Integer()
|
||||
downtime = fields.Integer()
|
||||
owner = fields.String()
|
||||
status = fields.String()
|
||||
|
||||
@post_load
|
||||
def make_vrpmdv_Monitoring(self, data, **kwargs):
|
||||
mon = VRPMDV_Monitoring(**data)
|
||||
#create the monitoring on the realtime side
|
||||
# mon.createMonitoring()
|
||||
return mon
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
import datetime as dt
|
||||
|
||||
|
||||
|
||||
class VRPMDV_MonReq:
|
||||
def __init__(self, name , samplerate, sampleperiod, downtime, owner, status) :
|
||||
self.name = name
|
||||
self.samplerate = samplerate
|
||||
self.sampleperiod = sampleperiod
|
||||
self.downtime = downtime
|
||||
self.owner = owner
|
||||
self.status = status
|
||||
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
import uuid
|
||||
import datetime as dt
|
||||
from marshmallow import Schema, fields, post_load
|
||||
from vrpmdvmonreq import VRPMDV_MonReq
|
||||
|
||||
|
||||
class VRPMDV_MonReqSchema(Schema):
|
||||
name = fields.String()
|
||||
samplerate = fields.Integer()
|
||||
sampleperiod = fields.Integer()
|
||||
downtime = fields.Integer()
|
||||
owner = fields.String()
|
||||
status = fields.String()
|
||||
|
||||
@post_load
|
||||
def make_vrpmdv_MonitoringReq(self, data, **kwargs):
|
||||
return VRPMDV_MonReq(**data)
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
import datetime as dt
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
class VRPMDV_MonSensor:
|
||||
def __init__(self, name , channels):
|
||||
self.name = name
|
||||
self.channels = channels
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
import uuid
|
||||
import datetime as dt
|
||||
from marshmallow import Schema, fields, post_load, EXCLUDE
|
||||
|
||||
from vrpmdvmonsensor import VRPMDV_MonSensor
|
||||
|
||||
|
||||
class VRPMDV_MonSensorSchema(Schema):
|
||||
name = fields.String()
|
||||
channels = fields.List(fields.Nested("VRPMDV_MonChannelSchema"))
|
||||
|
||||
@post_load
|
||||
def make_vrpmdv_MonfilesSensorSchema(self, data, **kwargs):
|
||||
return VRPMDV_MonSensor(**data)
|
||||
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import traceback
|
||||
from pyroute2.netlink import NLM_F_REQUEST
|
||||
from pyroute2.netlink import genlmsg
|
||||
from pyroute2.netlink.generic import GenericNetlinkSocket
|
||||
import sys
|
||||
|
||||
|
||||
RLINK_CMD_UNSPEC = 0
|
||||
RLINK_CMD_REQ = 1
|
||||
|
||||
|
||||
class rcmd(genlmsg):
|
||||
'''
|
||||
Message class that will be used to communicate
|
||||
with the kernel module
|
||||
'''
|
||||
|
||||
nla_map = (
|
||||
('RLINK_ATTR_UNSPEC', 'none'),
|
||||
('RLINK_ATTR_DATA', 'asciiz'),
|
||||
)
|
||||
|
||||
|
||||
class Rlink(GenericNetlinkSocket):
|
||||
def send_data(self, data):
|
||||
msg = rcmd()
|
||||
msg['cmd'] = RLINK_CMD_REQ
|
||||
msg['version'] = 1
|
||||
msg['attrs'] = [('RLINK_ATTR_DATA', data)]
|
||||
ret = self.nlm_request(msg, self.prid, msg_flags=NLM_F_REQUEST)[0]
|
||||
return ret.get_attr('RLINK_ATTR_DATA')
|
||||
|
||||
def trySend(data):
|
||||
# if __name__ == '__main__':
|
||||
try:
|
||||
# create protocol instance
|
||||
rlink = Rlink()
|
||||
rlink.bind('gnl-vrpmdv-mcmd', rcmd)
|
||||
#rlink.send_data(data)
|
||||
# request a method
|
||||
res = rlink.send_data(data)
|
||||
if res :
|
||||
print(res, file=sys.stdout)
|
||||
sys.stdout.flush()
|
||||
except:
|
||||
# if there was an error, log it to the console
|
||||
traceback.print_exc()
|
||||
finally:
|
||||
# finally -- release the instance
|
||||
rlink.close()
|
||||
return res
|
||||
@@ -0,0 +1,176 @@
|
||||
# from vrpmdv-server/vrpmdv-main import application
|
||||
import logging
|
||||
import os
|
||||
import sys
|
||||
import json
|
||||
from flask import Flask, request , send_from_directory , Response
|
||||
from flask_cors import CORS
|
||||
from vrpmdvdata import VRPMDV_Data
|
||||
from vrpmdvmonreqschema import VRPMDV_MonReqSchema
|
||||
# import ecal.core.core as ecal_core
|
||||
# from proto_messages.RTService_pb2 import _RTSERVICE as rtservice
|
||||
|
||||
|
||||
app = Flask(__name__, static_url_path='', static_folder='./build')
|
||||
#app = Flask(__name__, static_url_path='/public', static_folder='../build')
|
||||
#app = Flask(__name__)
|
||||
CORS(app) #comment this on deployment
|
||||
|
||||
vrpmdvdata = VRPMDV_Data()
|
||||
|
||||
|
||||
@app.route("/", defaults={'path':''})
|
||||
#@app.route("/")
|
||||
@app.route('/<path:path>')
|
||||
def serve(path):
|
||||
logging.basicConfig(format=format, level=logging.INFO, datefmt="%H:%M:%S")
|
||||
logging.info("vrpmdvserver: path:%s", path)
|
||||
# path_dir = os.path.abspath("../build") #path react build
|
||||
# if path != "" and os.path.exists(os.path.join(path_dir, path)):
|
||||
# return send_from_directory(os.path.join(path_dir), path)
|
||||
# else:
|
||||
# return send_from_directory(os.path.join(path_dir),'index.html')
|
||||
return send_from_directory(app.static_folder,'index.html')
|
||||
|
||||
@app.errorhandler(404)
|
||||
def not_found(e):
|
||||
return app.send_static_file('index.html')
|
||||
|
||||
@app.route('/vrpmdvapi/1_0/monitorings', methods=['GET'])
|
||||
def get_monitorings():
|
||||
data = vrpmdvdata.getMonitorings()
|
||||
resp = Response(data, status=200, mimetype='application/json')
|
||||
return resp
|
||||
|
||||
@app.route('/vrpmdvapi/1_0/monitorings/<id>', methods=['GET'])
|
||||
def get_monitoring(id):
|
||||
data = vrpmdvdata.getMonitoring(id)
|
||||
resp = Response(data, status=200, mimetype='application/json')
|
||||
return resp
|
||||
|
||||
@app.route('/vrpmdvapi/1_0/monitorings/<id>', methods=['PATCH'])
|
||||
def set_monitoring(id):
|
||||
# vrpmreq = VRPMDV_MonReqSchema().load(request.get_json())
|
||||
vrpmreq = request.get_json()
|
||||
data = vrpmdvdata.setMonitoring(id, vrpmreq)
|
||||
resp = Response(data, status=200, mimetype='application/json')
|
||||
return resp
|
||||
|
||||
|
||||
@app.route('/vrpmdvapi/1_0/monitorings', methods=['POST'])
|
||||
def create_monitoring():
|
||||
#vrpmreq = VRPMDV_MonReqSchema().load(request.get_json())
|
||||
#data = vrpmdvdata.createMonitoring(vrpmreq)
|
||||
data = vrpmdvdata.createMonitoring(request)
|
||||
resp = Response(data, status=200, mimetype='application/json')
|
||||
return resp
|
||||
|
||||
|
||||
@app.route('/vrpmdvapi/1_0/monitorings/<id>', methods=['DELETE'])
|
||||
def delete_monitoring(id):
|
||||
data = vrpmdvdata.deleteMonitoring(id)
|
||||
resp = Response(data, status=200, mimetype='application/json')
|
||||
return resp
|
||||
|
||||
|
||||
|
||||
@app.route('/vrpmdvapi/1_0/monitorings/start', methods=['PATCH'])
|
||||
def start_monitoring():
|
||||
vrpmid = request.get_json()
|
||||
data = vrpmdvdata.startMonitoring(vrpmid)
|
||||
resp = Response(data, status=200, mimetype='application/json')
|
||||
return resp
|
||||
|
||||
@app.route('/vrpmdvapi/1_0/monitorings/stop/', methods=['PATCH'])
|
||||
def stop_monitoring():
|
||||
vrpmid = request.get_json()
|
||||
data = vrpmdvdata.stopMonitoring(vrpmid)
|
||||
resp = Response(data, status=200, mimetype='application/json')
|
||||
return resp
|
||||
|
||||
@app.route('/vrpmdvapi/1_0/monitoringstatus/<id>', methods=['PATCH'])
|
||||
def setStatus(id):
|
||||
vrpmStatus = request.get_json()
|
||||
data = vrpmdvdata.setStatus(id, vrpmStatus)
|
||||
resp = Response(data, status=200, mimetype='application/json')
|
||||
return resp
|
||||
|
||||
|
||||
@app.route('/vrpmdvapi/1_0/monitoring/mondfaivalable', methods=['GET'])
|
||||
def get_mondfaivalable():
|
||||
data = vrpmdvdata.getMonsDFAvalable()
|
||||
if (data == None):
|
||||
resp = Response("no Item found", status=404, mimetype='application/json')
|
||||
else:
|
||||
resp = Response(data, status=200, mimetype='application/json')
|
||||
return resp
|
||||
|
||||
|
||||
@app.route('/vrpmdvapi/1_0/monitoringfiles', methods=['GET'])
|
||||
def get_monitoringfiles():
|
||||
vrpmreqjson = request.args
|
||||
#vrpmreq = VRPMDV_MonReqSchema().load(request.get_json())
|
||||
#data = vrpmdvdata.createMonitoring(vrpmreq)
|
||||
data = vrpmdvdata.getMonitoringfiles(0, request.args)
|
||||
if (data == None):
|
||||
resp = Response("no Item found", status=404, mimetype='application/json')
|
||||
else:
|
||||
resp = Response(data, status=200, mimetype='application/json')
|
||||
return resp
|
||||
|
||||
@app.route('/vrpmdvapi/1_0/monitoringfiles/download', methods=['GET'])
|
||||
def get_mfDownload():
|
||||
vrpmreqjson = request.args
|
||||
|
||||
data = vrpmdvdata.getMFDownload(request.args)
|
||||
if (data == None):
|
||||
resp = Response("no Item found", status=404, mimetype='application/json')
|
||||
else:
|
||||
resp = Response(data, status=200, mimetype='application/json')
|
||||
return resp
|
||||
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
# initialize eCAL API. The name of our Process will be
|
||||
|
||||
# "Python Protobuf Subscriber"
|
||||
|
||||
#ecal_core.initialize(sys.argv, "Python Protobuf Subscriber")
|
||||
|
||||
app.run()
|
||||
|
||||
|
||||
|
||||
# if __name__ == "__main__":
|
||||
|
||||
|
||||
|
||||
# # Create a Protobuf Publisher that publishes on the topic
|
||||
|
||||
# # "hello_world_python_protobuf_topic". The second parameter tells eCAL which
|
||||
|
||||
# # datatype we are expecting to receive on that topic.
|
||||
|
||||
# sub = ProtoSubscriber("hello_world_python_protobuf_topic"
|
||||
|
||||
# , hello_world_pb2.HelloWorld)
|
||||
|
||||
|
||||
# # Set the Callback
|
||||
|
||||
# sub.set_callback(callback)
|
||||
|
||||
|
||||
|
||||
# # Just don't exit
|
||||
|
||||
# while ecal_core.ok():
|
||||
|
||||
# time.sleep(0.5)
|
||||
|
||||
|
||||
|
||||
# # finalize eCAL API
|
||||
|
||||
# ecal_core.finalize()
|
||||
@@ -0,0 +1,10 @@
|
||||
import datetime as dt
|
||||
|
||||
|
||||
|
||||
class VRPMDV_StatusMonCmd:
|
||||
def __init__(self, id ) :
|
||||
self.cmdid = 3
|
||||
self.id = id
|
||||
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
import uuid
|
||||
import datetime as dt
|
||||
from marshmallow import Schema, fields, post_load, post_dump
|
||||
from vrpmdvstatusmoncmd import VRPMDV_StatusMonCmd
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
class VRPMDV_StatusMonSchema(Schema):
|
||||
cmdid = fields.Integer()
|
||||
id = fields.UUID()
|
||||
|
||||
|
||||
@post_load
|
||||
def make_vrpmdv_StatusMonitoring(self, data, **kwargs):
|
||||
mon = VRPMDV_StatusMonCmd(**data)
|
||||
return mon
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user