Changeset 11a08b0 for fedd/fedd.py


Ignore:
Timestamp:
Oct 7, 2008 6:12:57 PM (16 years ago)
Author:
Ted Faber <faber@…>
Branches:
axis_example, compt_changes, info-ops, master, version-1.30, version-2.00, version-3.01, version-3.02
Children:
0ea11af
Parents:
8ecfbad
Message:

decent logging

File:
1 edited

Legend:

Unmodified
Added
Removed
  • fedd/fedd.py

    r8ecfbad r11a08b0  
    1919
    2020from threading import *
     21from signal import signal, pause, SIGINT, SIGTERM
     22from select import select
     23import logging
    2124
    2225# The SSL server here is based on the implementation described at
     
    169172
    170173        self.set_defaults(host="localhost", port=23235, transport="soap",
    171                 debug=0)
     174                logfile=None, debug=0)
    172175
    173176        self.add_option("-d", "--debug", action="count", dest="debug",
     
    177180        self.add_option("-H", "--host", action="store", type="string",
    178181                dest="host", help="Hostname to listen on (default %default)")
     182        self.add_option("-l", "--logfile", action="store", dest="logfile",
     183                help="File to send log messages to")
    179184        self.add_option("-p", "--port", action="store", type="int",
    180185                dest="port", help="Port to listen on (default %default)")
     
    188193                const=sys.stderr, help="Print SOAP exchange to stderr")
    189194
     195servers_active = True
     196
     197log_params = {\
     198        'format': "%(asctime)s %(levelname)-8s %(message)s",\
     199        'datefmt': '%a, %d %b %Y %H:%M:%S'\
     200    }
     201
     202def shutdown(sig, frame):
     203    global servers_active, flog
     204    servers_active = False
     205    flog.info("Received signal %d, shutting down" % sig);
     206
    190207def run_server(s):
    191     if s: s.serve_forever()
     208    global servers_active   # Not strictly needed: servers_active is only read
     209
     210    if s:
     211        while servers_active:
     212            i, o, e = select((s,), (), (), 5.0)
     213            if s in i:
     214                s.handle_request()
    192215
    193216services = [ ]
     
    195218
    196219opts, args = fedd_opts().parse_args()
     220
     221flog = logging.getLogger("fedd")
     222ffmt = logging.Formatter("%(asctime)s %(levelname)-8s %(message)s",
     223        '%a, %d %b %Y %H:%M:%S')
     224
     225if opts.logfile: fh = logging.FileHandler(opts.logfile)
     226else: fh = logging.StreamHandler(sys.stdout)
     227
     228# The handler will print anything, setting the logger level will affect what
     229# gets recorded.
     230fh.setLevel(logging.DEBUG)
     231
     232if opts.debug: flog.setLevel(logging.DEBUG)
     233else: flog.setLevel(logging.INFO)
     234
     235fh.setFormatter(ffmt)
     236flog.addHandler(fh)
     237
    197238
    198239if opts.configfile != None:
     
    239280    elif s[0] == "xmlrpc":
    240281        servers.append(fedd_server(s[1], fedd_xmlrpc_handler, ctx, impl))
    241     else: print >>sys.stderr, "Unknown transport: %s" % s[0]
     282    else: flog.warning("Unknown transport: %s" % s[0])
     283
     284signal(SIGINT, shutdown)
     285signal(SIGTERM, shutdown)
    242286
    243287for s in servers:
    244     t = Thread(target=run_server, args=(s,))
    245     t.start()
     288    if s:
     289        t = Thread(target=run_server, args=(s,))
     290        t.start()
     291
     292pause()
Note: See TracChangeset for help on using the changeset viewer.