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
RevLine 
[e58af05]1import errors
2from errors import *
3__all__ = ['errors']
4__all__.extend(errors.__all__)
5
[33ea505]6from job import GutenbachJob
7__all__.append('GutenbachJob')
[e58af05]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
[eee389a]16from server import IPPServer
[e58af05]17__all__.append('IPPServer')
18
[287d6ec]19import BaseHTTPServer
[d04a689]20import logging
[6effd50]21import sys
[ee8e6d0]22import traceback
[a9eb577e]23import os
24import shutil
[d04a689]25
[e58af05]26# configure and initialize logging
[609a9b0]27logger = None
[ee8e6d0]28
[e58af05]29def error(self, request=None, client_address=None):
[ee8e6d0]30    logger.fatal(traceback.format_exc())
[eee389a]31    self.gutenbach_printer.running = False
[6effd50]32    sys.exit(1)
[478ca74]33
[a9eb577e]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
[609a9b0]48def start(config):
49    global logger
[a9eb577e]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   
[e58af05]58    logger.info("Starting Gutenbach server...")
[609a9b0]59    printers = sorted(config['printers'].keys())
60    gutenbach = GutenbachPrinter(printers[0], config['printers'][printers[0]])
[e58af05]61    gutenbach.start()
62
63    logger.info("Starting IPP server...")
[609a9b0]64    server_address = ('', config['port'])
[e58af05]65    httpd = BaseHTTPServer.HTTPServer(server_address, IPPServer)
[6effd50]66    httpd.handle_error = error.__get__(httpd)
[eee389a]67    httpd.gutenbach_printer = gutenbach
[e58af05]68    while gutenbach.isAlive():
69        try:
70            httpd.handle_request()
71        except:
72            error(httpd)
[287d6ec]73
[e58af05]74__all__.append('start')
Note: See TracBrowser for help on using the repository browser.