trove/bin/reddwarf-server
Tim Simpson 4249dff008 Improved ability to run fake mode in CI environments.
* The reddwarf-server script can now fork itself and save it's pid.
* Changed the tox.ini to not start the fake mode server. Now, two new
  bin scripts start and stop the server. This should make it easier to
  run in CI environments.
2012-09-04 12:18:32 -05:00

92 lines
2.9 KiB
Python
Executable File

#!/usr/bin/env python
# vim: tabstop=4 shiftwidth=4 softtabstop=4
# Copyright 2011 OpenStack LLC.
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import gettext
import optparse
import os
import sys
gettext.install('reddwarf', unicode=1)
# If ../reddwarf/__init__.py exists, add ../ to Python search path, so that
# it will override what happens to be installed in /usr/(local/)lib/python...
possible_topdir = os.path.normpath(os.path.join(os.path.abspath(sys.argv[0]),
os.pardir,
os.pardir))
if os.path.exists(os.path.join(possible_topdir, 'reddwarf', '__init__.py')):
sys.path.insert(0, possible_topdir)
from reddwarf import version
from reddwarf.common import config
from reddwarf.common import wsgi
from reddwarf.db import db_api
def create_options(parser):
"""Sets up the CLI and config-file options
:param parser: The option parser
:returns: None
"""
parser.add_option('-p', '--port', dest="port", metavar="PORT",
type=int,
help="Port the Reddwarf API host listens on. "
"Default: %default")
parser.add_option("-f", '--fork', action="store_true", dest="fork")
parser.add_option('--pid_file', dest="pid_file", default=".pid")
config.add_common_options(parser)
config.add_log_options(parser)
def run_server(app, port):
try:
server = wsgi.Server()
server.start(app, int(options.get('port') or conf['bind_port']),
conf['bind_host'])
server.wait()
except RuntimeError as error:
import traceback
print traceback.format_exc()
sys.exit("ERROR: %s" % error)
if __name__ == '__main__':
oparser = optparse.OptionParser(version="%%prog %s"
% version.version_string())
create_options(oparser)
(options, args) = config.parse_options(oparser)
config.Config.load_paste_config('reddwarf', options, args)
conf, app = config.Config.load_paste_app('reddwarf', options, args)
db_api.configure_db(conf)
port = int(options.get('port') or conf['bind_port'])
if options['fork']:
pid = os.fork()
if pid == 0:
run_server(app, port)
else:
print("Starting server:%s" % pid)
pid_file = options.get('pid_file', '.pid')
with open(pid_file, 'w') as f:
f.write(str(pid))
else:
run_server(app, port)