source: server/lib/gutenbach/server/__init__.py @ a9eb577e

no-cups
Last change on this file since a9eb577e was a9eb577e, checked in by Jessica B. Hamrick <jhamrick@…>, 12 years ago

Add logging configuration option

  • Property mode set to 100644
File size: 2.1 KB
Line 
1import errors
2from errors import *
3__all__ = ['errors']
4__all__.extend(errors.__all__)
5
6from job import GutenbachJob
7__all__.append('GutenbachJob')
8
9from printer import GutenbachPrinter
10__all__.append('GutenbachPrinter')
11
12from requests import make_empty_response, GutenbachRequestHandler
13__all__.append('make_empty_response')
14__all__.append('GutenbachRequestHandler')
15
16from server import IPPServer
17__all__.append('IPPServer')
18
19import BaseHTTPServer
20import logging
21import sys
22import traceback
23import os
24import shutil
25
26# configure and initialize logging
27logger = None
28
29def error(self, request=None, client_address=None):
30    logger.fatal(traceback.format_exc())
31    self.gutenbach_printer.running = False
32    sys.exit(1)
33
34def new_logfile(logfile):
35    if os.path.exists(logfile):
36        pth = os.path.abspath(os.path.dirname(logfile))
37        filename = os.path.basename(logfile)
38        logfiles = [f for f in os.listdir(pth) if f.startswith(filename + ".")]
39        lognums = [0]
40        for f in logfiles:
41            try:
42                lognums.append(int(f.lstrip(filename + ".")))
43            except TypeError:
44                pass
45        nextnum = max(lognums) + 1
46        shutil.move(logfile, os.path.join(pth, "%s.%d" % (filename, nextnum)))
47
48def start(config):
49    global logger
50    logkwargs = {}
51    logkwargs['level'] = getattr(logging, config['loglevel'].upper())
52    if 'logfile' in config:
53        logkwargs['filename'] = config['logfile']
54        new_logfile(config['logfile'])           
55    logging.basicConfig(**logkwargs)
56    logger = logging.getLogger(__name__)
57   
58    logger.info("Starting Gutenbach server...")
59    printers = sorted(config['printers'].keys())
60    gutenbach = GutenbachPrinter(printers[0], config['printers'][printers[0]])
61    gutenbach.start()
62
63    logger.info("Starting IPP server...")
64    server_address = ('', config['port'])
65    httpd = BaseHTTPServer.HTTPServer(server_address, IPPServer)
66    httpd.handle_error = error.__get__(httpd)
67    httpd.gutenbach_printer = gutenbach
68    while gutenbach.isAlive():
69        try:
70            httpd.handle_request()
71        except:
72            error(httpd)
73
74__all__.append('start')
Note: See TracBrowser for help on using the repository browser.