Make configfile and logfile configurable via commandline options

Use argparse to parse --config und --logfile so it can be better used from
a startup script.

Add Debian startup-script in contrib/
This commit is contained in:
Lars Bensmann 2015-07-18 14:04:17 +02:00
parent 8bd4ad6803
commit c3b41b2415
2 changed files with 84 additions and 3 deletions

72
contrib/httpuploadcomponent Executable file
View File

@ -0,0 +1,72 @@
#!/bin/bash
### BEGIN INIT INFO
# Provides: HttpUploadComponent
# Required-Start: prosody
# Required-Stop: prosody
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start HttpUploadComponent
# Description: HttpUploadComponent for prosody
### END INIT INFO
## more info: http://wiki.debian.org/LSBInitScripts
. /lib/lsb/init-functions
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
DAEMON=/usr/local/src/HttpUploadComponent/server.py
NAME=httpuploadcomponent
DESC=HttpUploadComponent
CONFIG=/etc/prosody/HttpUploadComponent.yml
LOGFILE=/var/log/prosody/httpuploadcomponent.log
PIDFILE=/var/run/${NAME}.pid
USER=prosody
export LOGNAME=$USER
test -x $DAEMON || exit 0
set -e
function _start() {
start-stop-daemon --start --quiet --pidfile $PIDFILE --chuid $USER:$USER --background --make-pidfile --exec $DAEMON -- --config $CONFIG --logfile $LOGFILE
}
function _stop() {
start-stop-daemon --stop --quiet --pidfile $PIDFILE --oknodo --retry 3
rm -f $PIDFILE
}
function _status() {
start-stop-daemon --status --quiet --pidfile $PIDFILE
return $?
}
case "$1" in
start)
echo -n "Starting $DESC: "
_start
echo "ok"
;;
stop)
echo -n "Stopping $DESC: "
_stop
echo "ok"
;;
restart|force-reload)
echo -n "Restarting $DESC: "
_stop
sleep 1
_start
echo "ok"
;;
status)
echo -n "Status of $DESC: "
_status && echo "running" || echo "stopped"
;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop|restart|force-reload|status}" >&2
exit 1
;;
esac
exit 0

View File

@ -10,6 +10,7 @@ import hashlib
import random
import os
import ssl
import argparse
from threading import Thread
from threading import Lock
try:
@ -24,6 +25,8 @@ except ImportError:
import sleekxmpp
from sleekxmpp.componentxmpp import ComponentXMPP
LOGLEVEL=logging.DEBUG
global files
global files_lock
global config
@ -165,13 +168,19 @@ if __name__ == "__main__":
global files_lock
global config
with open('config.yml','r') as ymlfile:
parser = argparse.ArgumentParser()
parser.add_argument("-c", "--config", type=unicode, default='config.yml', help='Specify alternate config file.')
parser.add_argument("-l", "--logfile", type=unicode, default=None, help='File where the server log will be stored. If not specified log to stdout.')
args = parser.parse_args()
with open(args.config,'r') as ymlfile:
config = yaml.load(ymlfile)
files = set()
files_lock = Lock()
logging.basicConfig(level=logging.DEBUG,
format='%(levelname)-8s %(message)s')
logging.basicConfig(level=LOGLEVEL,
format='%(asctime)-24s %(levelname)-8s %(message)s',
filename=args.logfile)
server = ThreadedHTTPServer(('0.0.0.0', config['http_port']), HttpHandler)
if 'keyfile' in config and 'certfile' in config:
server.socket = ssl.wrap_socket(server.socket, keyfile=config['keyfile'], certfile=config['certfile'])