diff --git a/contrib/httpuploadcomponent b/contrib/httpuploadcomponent new file mode 100755 index 0000000..5dcedce --- /dev/null +++ b/contrib/httpuploadcomponent @@ -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 diff --git a/server.py b/server.py index c79d009..619f5e0 100755 --- a/server.py +++ b/server.py @@ -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'])