Add daemon framework for an API server (copied from other parts of Libra)
Change-Id: I7a94a3e2938734ec1594ba33f950aaea14b65980
This commit is contained in:
parent
687d6b6756
commit
837d9b36e2
13
libra/api/__init__.py
Normal file
13
libra/api/__init__.py
Normal file
@ -0,0 +1,13 @@
|
||||
# Copyright 2013 Hewlett-Packard Development Company, L.P.
|
||||
#
|
||||
# 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.
|
76
libra/api/main.py
Normal file
76
libra/api/main.py
Normal file
@ -0,0 +1,76 @@
|
||||
# Copyright 2013 Hewlett-Packard Development Company, L.P.
|
||||
#
|
||||
# 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 daemon
|
||||
import daemon.pidfile
|
||||
import daemon.runner
|
||||
import grp
|
||||
import pwd
|
||||
|
||||
from libra.common.options import Options, setup_logging
|
||||
|
||||
|
||||
class APIServer(object):
|
||||
def __init__(self, logger, args):
|
||||
self.logger = logger
|
||||
self.args = args
|
||||
|
||||
|
||||
def main():
|
||||
options = Options('api', 'API Daemon')
|
||||
args = options.run()
|
||||
|
||||
logger = setup_logging('api_server', args)
|
||||
server = APIServer(logger, args)
|
||||
|
||||
if args.nodaemon:
|
||||
server.main(task_list)
|
||||
else:
|
||||
pidfile = daemon.pidfile.TimeoutPIDLockFile(args.pid, 10)
|
||||
if daemon.runner.is_pidfile_stale(pidfile):
|
||||
logger.warning("Cleaning up stale PID file")
|
||||
pidfile.break_lock()
|
||||
context = daemon.DaemonContext(
|
||||
working_directory='/etc/libra',
|
||||
umask=0o022,
|
||||
pidfile=pidfile,
|
||||
files_preserve=[logger.handlers[0].stream]
|
||||
)
|
||||
if args.user:
|
||||
try:
|
||||
context.uid = pwd.getpwnam(args.user).pw_uid
|
||||
except KeyError:
|
||||
logger.critical("Invalid user: %s" % args.user)
|
||||
return 1
|
||||
# NOTE(LinuxJedi): we are switching user so need to switch
|
||||
# the ownership of the log file for rotation
|
||||
os.chown(logger.handlers[0].baseFilename, context.uid, -1)
|
||||
if args.group:
|
||||
try:
|
||||
context.gid = grp.getgrnam(args.group).gr_gid
|
||||
except KeyError:
|
||||
logger.critical("Invalid group: %s" % args.group)
|
||||
return 1
|
||||
|
||||
try:
|
||||
context.open()
|
||||
except lockfile.LockTimeout:
|
||||
logger.critical(
|
||||
"Failed to lock pidfile %s, another instance running?",
|
||||
args.pid
|
||||
)
|
||||
return 1
|
||||
|
||||
server.main()
|
||||
return 0
|
Loading…
x
Reference in New Issue
Block a user