From 16e7f93a645923814c3762947719236a9ba4f7d9 Mon Sep 17 00:00:00 2001 From: Oleksiy Mishchenko Date: Thu, 17 Apr 2008 08:08:24 +0000 Subject: [PATCH] Switch RAPI to default ganeti logging and Daemonize it with ganeti.utils Reviewed-by: insmah --- daemons/ganeti-rapi | 40 ++++++++++------------------------------ lib/constants.py | 1 + lib/rapi/RESTHTTPServer.py | 33 ++++++++------------------------- 3 files changed, 19 insertions(+), 55 deletions(-) diff --git a/daemons/ganeti-rapi b/daemons/ganeti-rapi index 78552c6..834c957 100755 --- a/daemons/ganeti-rapi +++ b/daemons/ganeti-rapi @@ -22,12 +22,13 @@ """ import glob -import logging import optparse import sys import os -import ganeti.rapi.RESTHTTPServer +from ganeti import constants +from ganeti import utils +from ganeti.rapi import RESTHTTPServer RELEASE_VERSION = 0.01 API_PORT = 5080 @@ -59,6 +60,10 @@ def ParseOptions(): parser.add_option("-C", "--ssl-cert", dest="ssl_cert", help="SSL certificate", default=None, type="string") + parser.add_option("-f", "--foreground", dest="fork", + help="Don't detach from the current terminal", + default=True, action="store_false") + options, args = parser.parse_args() if len(args) != 1 or args[0] not in ("start", "stop"): @@ -128,34 +133,9 @@ def StartAPI(options): Return: Exit code. """ - # do the UNIX double-fork magic - try: - pid = os.fork() - if pid > 0: - # exit first parent - sys.exit(0) - except OSError, e: - print >> sys.stderr, "fork #1 failed: %d (%s)" % (e.errno, e.strerror) - return 1 - - # decouple from parent environment - os.chdir("/") - os.setsid() - os.umask(0) - - # do second fork - try: - pid = os.fork() - if pid > 0: - # exit from second parent, print eventual PID before - print "Ganeti-RAPI PID: %d port: %d" % (pid, options.port) - return 0 - except OSError, e: - print >> sys.stderr, "fork #2 failed: %d (%s)" % (e.errno, e.strerror) - return 1 - - # start the daemon main loop - ganeti.rapi.RESTHTTPServer.start(options) + if options.fork: + utils.Daemonize(logfile=constants.LOG_RAPISERVER) + RESTHTTPServer.start(options) def StopAPI(options): diff --git a/lib/constants.py b/lib/constants.py index 07a6ddf..c46ec5b 100644 --- a/lib/constants.py +++ b/lib/constants.py @@ -51,6 +51,7 @@ MASTER_SCRIPT = "ganeti-master" LOG_DIR = _autoconf.LOCALSTATEDIR + "/log/ganeti" LOG_OS_DIR = LOG_DIR + "/os" LOG_NODESERVER = LOG_DIR + "/node-daemon.log" +LOG_RAPISERVER = LOG_DIR + "/rapi-daemon.log" LOG_WATCHER = LOG_DIR + "/watcher.log" OS_SEARCH_PATH = _autoconf.OS_SEARCH_PATH diff --git a/lib/rapi/RESTHTTPServer.py b/lib/rapi/RESTHTTPServer.py index bcc1cd4..148f08c 100644 --- a/lib/rapi/RESTHTTPServer.py +++ b/lib/rapi/RESTHTTPServer.py @@ -21,31 +21,15 @@ import exceptions import SocketServer import BaseHTTPServer import OpenSSL -import logging -import logging.handlers +from ganeti import constants +from ganeti import logger from ganeti.rapi import resources """RESTfull HTTPS Server module. """ -def OpenLog(): - """Set up logging to the syslog. - - """ - log = logging.getLogger('ganeti-rapi') - slh = logging.handlers.SysLogHandler('/dev/log', - logging.handlers.SysLogHandler.LOG_DAEMON) - fmt = logging.Formatter('ganeti-rapi[%(process)d]:%(levelname)s: %(message)s') - slh.setFormatter(fmt) - log.addHandler(slh) - log.setLevel(logging.INFO) - log.debug("Logging initialized") - - return log - - class RESTHTTPServer(BaseHTTPServer.HTTPServer): """The class to provide HTTP/HTTPS server. @@ -60,6 +44,8 @@ class RESTHTTPServer(BaseHTTPServer.HTTPServer): HandlerClass - HTTPRequestHandler object options - Command-line options """ + logger.SetupLogging(debug=options.debug, program='ganeti-rapi') + BaseHTTPServer.HTTPServer.__init__(self, server_address, HandlerClass) if options.ssl: # Set up SSL @@ -89,8 +75,6 @@ class RESTRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler): self.rfile = socket._fileobject(self.request, "rb", self.rbufsize) self.wfile = socket._fileobject(self.request, "wb", self.wbufsize) self.map = resources.Mapper() - self.log = OpenLog() - self.log.debug("Request handler setup.") def handle_one_request(self): """Handle a single REST request. """ @@ -98,7 +82,7 @@ class RESTRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler): try: self.raw_requestline = self.rfile.readline() except OpenSSL.SSL.Error, ex: - self.log.exception("Error in SSL: %s" % str(ex)) + logger.Error("Error in SSL: %s" % str(ex)) if not self.raw_requestline: self.close_connection = 1 return @@ -133,13 +117,12 @@ class RESTRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler): every message. """ - level = logging.INFO + logX = logger.Info # who is calling? origin = inspect.stack()[1][0].f_code.co_name if origin == "log_error": - level = logging.ERROR - - self.log.log(level, "%s - - %s\n" % + logX = logger.Error + logX("%s - - %s" % (self.address_string(), format%args)) -- 1.7.10.4