mirror of
https://github.com/naruxde/revpipyload.git
synced 2025-11-08 15:13:52 +01:00
Laufzeitüberwachung eingebaut
This commit is contained in:
@@ -63,7 +63,7 @@ def configure():
|
|||||||
pargs.conffile = os.path.join(startdir, pargs.conffile)
|
pargs.conffile = os.path.join(startdir, pargs.conffile)
|
||||||
if pargs.logfile is not None and os.path.dirname(pargs.logfile) == "":
|
if pargs.logfile is not None and os.path.dirname(pargs.logfile) == "":
|
||||||
pargs.logfile = os.path.join(startdir, pargs.logfile)
|
pargs.logfile = os.path.join(startdir, pargs.logfile)
|
||||||
|
|
||||||
# Prüfen ob als Daemon ausgeführt werden soll
|
# Prüfen ob als Daemon ausgeführt werden soll
|
||||||
global forked
|
global forked
|
||||||
pidfile = "/var/run/revpipyload.pid"
|
pidfile = "/var/run/revpipyload.pid"
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ import signal
|
|||||||
import socket
|
import socket
|
||||||
import subprocess
|
import subprocess
|
||||||
import tarfile
|
import tarfile
|
||||||
|
import warnings
|
||||||
import zipfile
|
import zipfile
|
||||||
from concurrent import futures
|
from concurrent import futures
|
||||||
from configparser import ConfigParser
|
from configparser import ConfigParser
|
||||||
@@ -49,6 +50,7 @@ from sys import stdout as sysstdout
|
|||||||
from tempfile import mktemp
|
from tempfile import mktemp
|
||||||
from threading import Thread, Event, Lock
|
from threading import Thread, Event, Lock
|
||||||
from time import sleep, asctime
|
from time import sleep, asctime
|
||||||
|
from timeit import default_timer
|
||||||
from xmlrpc.client import Binary
|
from xmlrpc.client import Binary
|
||||||
from xmlrpc.server import SimpleXMLRPCServer
|
from xmlrpc.server import SimpleXMLRPCServer
|
||||||
|
|
||||||
@@ -476,6 +478,7 @@ class RevPiSlave(Thread):
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
"""Instantiiert RevPiSlave-Klasse."""
|
"""Instantiiert RevPiSlave-Klasse."""
|
||||||
super().__init__()
|
super().__init__()
|
||||||
|
self.deadtime = 0.5
|
||||||
self._evt_exit = Event()
|
self._evt_exit = Event()
|
||||||
self.zeroonerror = False
|
self.zeroonerror = False
|
||||||
self.zeroonexit = False
|
self.zeroonexit = False
|
||||||
@@ -487,11 +490,17 @@ class RevPiSlave(Thread):
|
|||||||
|
|
||||||
# Socket öffnen und konfigurieren
|
# Socket öffnen und konfigurieren
|
||||||
self.so = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
self.so = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||||
self.so.bind(("", 55234))
|
while not self._evt_exit.is_set():
|
||||||
|
try:
|
||||||
|
self.so.bind(("", 55234))
|
||||||
|
except:
|
||||||
|
warnings.warn("can not bind socket - retry", Warning)
|
||||||
|
self._evt_exit.wait(1)
|
||||||
|
else:
|
||||||
|
break
|
||||||
self.so.listen(1)
|
self.so.listen(1)
|
||||||
|
|
||||||
self.rpi = None
|
self.rpi = None
|
||||||
|
|
||||||
while not self._evt_exit.is_set():
|
while not self._evt_exit.is_set():
|
||||||
|
|
||||||
# Verbindung annehmen
|
# Verbindung annehmen
|
||||||
@@ -508,10 +517,13 @@ class RevPiSlave(Thread):
|
|||||||
# Erste Meldung erhalten
|
# Erste Meldung erhalten
|
||||||
meldung = self.rpi.recv(4)
|
meldung = self.rpi.recv(4)
|
||||||
|
|
||||||
|
comtime = 0
|
||||||
while meldung in msgcli:
|
while meldung in msgcli:
|
||||||
|
ot = default_timer()
|
||||||
|
|
||||||
if meldung == b'PICT':
|
if meldung == b'PICT':
|
||||||
# piCtory Konfiguration senden
|
# piCtory Konfiguration senden
|
||||||
|
proginit.logger.debug("transfair pictory configuration")
|
||||||
fh_pic = open(configrsc, "rb")
|
fh_pic = open(configrsc, "rb")
|
||||||
while True:
|
while True:
|
||||||
data = fh_pic.read(1024)
|
data = fh_pic.read(1024)
|
||||||
@@ -523,32 +535,46 @@ class RevPiSlave(Thread):
|
|||||||
|
|
||||||
# Abschlussmeldung
|
# Abschlussmeldung
|
||||||
self.rpi.send(b'PICOK')
|
self.rpi.send(b'PICOK')
|
||||||
proginit.logger.debug("pictory ende")
|
|
||||||
|
|
||||||
if meldung == b'DATA':
|
if meldung == b'DATA':
|
||||||
|
proginit.logger.debug("read process image")
|
||||||
|
|
||||||
# Processabbild übertragen
|
# Processabbild übertragen
|
||||||
block = 0
|
block = 0
|
||||||
fh_proc.seek(0)
|
fh_proc.seek(0)
|
||||||
while block < 4:
|
while block < 4:
|
||||||
self.rpi.send(fh_proc.read(1024))
|
self.rpi.send(fh_proc.read(1024))
|
||||||
block += 1
|
block += 1
|
||||||
proginit.logger.debug("procimg ende")
|
|
||||||
|
|
||||||
if meldung == b'SEND':
|
if meldung == b'SEND':
|
||||||
|
proginit.logger.debug("write to process image")
|
||||||
|
|
||||||
# Ausgänge empfangen
|
# Ausgänge empfangen
|
||||||
block = self.rpi.recv(1024)
|
block = self.rpi.recv(1024)
|
||||||
test = pickle.loads(block)
|
test = pickle.loads(block)
|
||||||
fh_proc.seek(test[0])
|
fh_proc.seek(test[0])
|
||||||
fh_proc.write(test[1])
|
fh_proc.write(test[1])
|
||||||
proginit.logger.debug(test)
|
|
||||||
|
|
||||||
# Nächste Meldung erhalten
|
# Nächste Meldung erhalten
|
||||||
meldung = self.rpi.recv(4)
|
meldung = self.rpi.recv(4)
|
||||||
|
|
||||||
|
# Verarbeitungszeit prüfen
|
||||||
|
comtime = default_timer() - ot
|
||||||
|
if comtime > self.deadtime:
|
||||||
|
proginit.logger.error(
|
||||||
|
"runtime more than {} ms: {}".format(
|
||||||
|
int(self.deadtime * 1000), int(comtime * 1000)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
break
|
||||||
|
|
||||||
fh_proc.close()
|
fh_proc.close()
|
||||||
self.rpi.shutdown(socket.SHUT_RDWR)
|
self.rpi.shutdown(socket.SHUT_RDWR)
|
||||||
self.rpi.close()
|
self.rpi.close()
|
||||||
|
|
||||||
|
if self.zeroonexit or comtime > self.deadtime and self.zeroonerror:
|
||||||
|
_zeroprocimg()
|
||||||
|
|
||||||
# Socket schließen
|
# Socket schließen
|
||||||
self.so.close()
|
self.so.close()
|
||||||
|
|
||||||
@@ -562,6 +588,7 @@ class RevPiSlave(Thread):
|
|||||||
if self.rpi is not None:
|
if self.rpi is not None:
|
||||||
self.rpi.close()
|
self.rpi.close()
|
||||||
self.so.shutdown(socket.SHUT_RDWR)
|
self.so.shutdown(socket.SHUT_RDWR)
|
||||||
|
|
||||||
proginit.logger.debug("leave RevPiSlave.stop()")
|
proginit.logger.debug("leave RevPiSlave.stop()")
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user