xmlrpc mit unterschiedlichen Modi versehen

Fehlerabfang bei packapp
init.d script angepasst
This commit is contained in:
2017-03-14 20:59:50 +01:00
parent d56a4a1bd8
commit 5b178cc745
5 changed files with 61 additions and 49 deletions

View File

@@ -1,3 +1,4 @@
include stdeb.cfg
recursive-include data *
recursive-include debian *
recursive-include revpipyload *

View File

@@ -1,4 +1,4 @@
#! /bin/bash
#! /bin/sh
### BEGIN INIT INFO
# Provides: revpipyload
# Required-Start: $remote_fs $syslog $piControl
@@ -19,14 +19,7 @@ NAME=revpipyload
DAEMON_ARGS="-d"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
# Check install dir
if [ -d /usr/local/share/revpipyload ]
then
DAEMON=/usr/share/revpipyload/revpipyload.py
else
DAEMON=/usr/share/revpipyload/revpipyload.py
fi
DAEMON=/usr/share/revpipyload/revpipyload.py
# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0
@@ -68,7 +61,7 @@ do_stop()
# 1 if daemon was already stopped
# 2 if daemon could not be stopped
# other if a failure occurred
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME.py
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE
RETVAL="$?"
[ "$RETVAL" = 2 ] && return 2
start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
@@ -81,7 +74,7 @@ do_stop()
# Function that sends a SIGHUP to the daemon/service
#
do_reload() {
start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME.py
start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE
return 0
}
@@ -89,18 +82,18 @@ case "$1" in
start)
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
do_start
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
# case "$?" in
# 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
# 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
# esac
;;
stop)
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
do_stop
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
# case "$?" in
# 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
# 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
# esac
;;
status)
status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?

View File

@@ -66,7 +66,7 @@ class ProgInit():
if self.pid > 0:
with open(self.pidfile, "w") as f:
f.write(str(self.pid))
exit(0)
sys.exit(0)
global logapp
global logplc

View File

@@ -324,7 +324,7 @@ class RevPiPyLoad(proginit.ProgInit):
self.pythonver = \
int(self.globalconfig["DEFAULT"].get("pythonversion", 3))
self.xmlrpc = \
int(self.globalconfig["DEFAULT"].get("xmlrpc", 1))
int(self.globalconfig["DEFAULT"].get("xmlrpc", 0))
self.zerooneerror = \
int(self.globalconfig["DEFAULT"].get("zeroonerror", 1))
self.zeroonexit = \
@@ -337,7 +337,7 @@ class RevPiPyLoad(proginit.ProgInit):
self.plc = self._plcthread()
# XMLRPC-Server Instantiieren und konfigurieren
if self.xmlrpc:
if self.xmlrpc >= 1:
proginit.logger.debug("create xmlrpc server")
self.xsrv = SimpleXMLRPCServer(
(
@@ -349,27 +349,34 @@ class RevPiPyLoad(proginit.ProgInit):
)
self.xsrv.register_introspection_functions()
# XML Modus 1 Nur Logs lesen und PLC Programm neu starten
self.xsrv.register_function(self.logr.get_applines, "get_applines")
self.xsrv.register_function(self.logr.get_applog, "get_applog")
self.xsrv.register_function(self.logr.get_plclines, "get_plclines")
self.xsrv.register_function(self.logr.get_plclog, "get_plclog")
self.xsrv.register_function(self.xml_plcexitcode, "plcexitcode")
self.xsrv.register_function(self.xml_plcrunning, "plcrunning")
self.xsrv.register_function(self.xml_plcstart, "plcstart")
self.xsrv.register_function(self.xml_plcstop, "plcstop")
self.xsrv.register_function(self.xml_reload, "reload")
# XML Modus 2 Einstellungen lesen und Programm herunterladen
if self.xmlrpc >= 2:
self.xsrv.register_function(self.xml_getconfig, "get_config")
self.xsrv.register_function(self.xml_getfilelist, "get_filelist")
self.xsrv.register_function(self.xml_getpictoryrsc, "get_pictoryrsc")
self.xsrv.register_function(self.xml_getprocimg, "get_procimg")
self.xsrv.register_function(self.xml_plcdownload, "plcdownload")
self.xsrv.register_function(self.xml_plcexitcode, "plcexitcode")
self.xsrv.register_function(self.xml_plcrunning, "plcrunning")
self.xsrv.register_function(self.xml_plcstart, "plcstart")
self.xsrv.register_function(self.xml_plcstop, "plcstop")
# XML Modus 3 Programm und Konfiguration hochladen
if self.xmlrpc >= 3:
self.xsrv.register_function(self.xml_plcupload, "plcupload")
self.xsrv.register_function(self.xml_plcuploadclean, "plcuploadclean")
self.xsrv.register_function(self.xml_reload, "reload")
self.xsrv.register_function(self.xml_setconfig, "set_config")
self.xsrv.register_function(self.xml_setpictoryrsc, "set_pictoryrsc")
self.xsrv.register_function(lambda: pyloadverion, "version")
self.xsrv.register_function(lambda: self.xmlrpc, "xmlmodus")
proginit.logger.debug("created xmlrpc server")
if pauseproc:
@@ -418,11 +425,10 @@ class RevPiPyLoad(proginit.ProgInit):
"""
filename = mktemp(suffix=".packed", prefix="plc")
# TODO: Fehlerabfang
if mode == "zip":
fh_pack = zipfile.ZipFile(filename, mode="w")
wd = os.walk("./")
try:
for tup_dir in wd:
for file in tup_dir[2]:
arcname = os.path.join(
@@ -430,13 +436,23 @@ class RevPiPyLoad(proginit.ProgInit):
fh_pack.write(os.path.join(tup_dir[0], file), arcname=arcname)
if pictory:
fh_pack.write(configrsc, arcname="config.rsc")
except:
filename = ""
finally:
fh_pack.close()
else:
fh_pack = tarfile.open(
name=filename, mode="w:gz", dereference=True)
try:
fh_pack.add(".", arcname=os.path.basename(self.plcworkdir))
if pictory:
fh_pack.add(configrsc, arcname="config.rsc")
except:
filename = ""
finally:
fh_pack.close()
return filename
def start(self):
@@ -444,7 +460,7 @@ class RevPiPyLoad(proginit.ProgInit):
proginit.logger.info("starting revpipyload")
self._exit = False
if self.xmlrpc:
if self.xmlrpc >= 1:
proginit.logger.info("start xmlrpc-server")
self.tpe = futures.ThreadPoolExecutor(max_workers=1)
self.tpe.submit(self.xsrv.serve_forever)
@@ -472,7 +488,7 @@ class RevPiPyLoad(proginit.ProgInit):
self.plc.stop()
self.plc.join()
if self.xmlrpc:
if self.xmlrpc >= 1:
proginit.logger.info("shutting down xmlrpc-server")
self.xsrv.shutdown()
self.tpe.shutdown()
@@ -488,6 +504,7 @@ class RevPiPyLoad(proginit.ProgInit):
dc["plcworkdir"] = self.plcworkdir
dc["plcprogram"] = self.plcprog
dc["plcslave"] = self.plcslave
dc["pythonversion"] = self.pythonver
dc["xmlrpc"] = self.xmlrpc
dc["xmlrpcport"] = \
self.globalconfig["DEFAULT"].get("xmlrpcport", 55123)
@@ -645,6 +662,7 @@ class RevPiPyLoad(proginit.ProgInit):
"autostart",
"plcprogram",
"plcslave",
"pythonversion",
"xmlrpc",
"xmlrpcport",
"zeroonerror",

View File

@@ -6,7 +6,7 @@
"""Setupscript fuer RevPiPyLoad."""
import distutils.command.install_egg_info
from glob import glob
from setuptools import setup
from distutils.core import setup
class MyEggInfo(distutils.command.install_egg_info.install_egg_info):