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 random
import os import os
import ssl import ssl
import argparse
from threading import Thread from threading import Thread
from threading import Lock from threading import Lock
try: try:
@ -24,6 +25,8 @@ except ImportError:
import sleekxmpp import sleekxmpp
from sleekxmpp.componentxmpp import ComponentXMPP from sleekxmpp.componentxmpp import ComponentXMPP
LOGLEVEL=logging.DEBUG
global files global files
global files_lock global files_lock
global config global config
@ -165,13 +168,19 @@ if __name__ == "__main__":
global files_lock global files_lock
global config 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) config = yaml.load(ymlfile)
files = set() files = set()
files_lock = Lock() files_lock = Lock()
logging.basicConfig(level=logging.DEBUG, logging.basicConfig(level=LOGLEVEL,
format='%(levelname)-8s %(message)s') format='%(asctime)-24s %(levelname)-8s %(message)s',
filename=args.logfile)
server = ThreadedHTTPServer(('0.0.0.0', config['http_port']), HttpHandler) server = ThreadedHTTPServer(('0.0.0.0', config['http_port']), HttpHandler)
if 'keyfile' in config and 'certfile' in config: if 'keyfile' in config and 'certfile' in config:
server.socket = ssl.wrap_socket(server.socket, keyfile=config['keyfile'], certfile=config['certfile']) server.socket = ssl.wrap_socket(server.socket, keyfile=config['keyfile'], certfile=config['certfile'])