Skip to content

Commit

Permalink
fix #24 and fix #11
Browse files Browse the repository at this point in the history
  • Loading branch information
motom001 committed Jan 10, 2015
1 parent 9bcea9d commit d05afe4
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 21 deletions.
2 changes: 2 additions & 0 deletions doorpi/doorpi.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,8 @@ def __init__(self, parsed_arguments = None):
self.pidfile_path = '/var/run/doorpi.pid'
self.pidfile_timeout = 5

logger.debug("finished __init__")

def prepare(self, parsed_arguments):
logger.debug("prepare")
logger.debug("givven arguments argv: %s", parsed_arguments)
Expand Down
81 changes: 60 additions & 21 deletions doorpi/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
#----------
import metadata
import doorpi
import os
from resource import getrlimit, RLIMIT_NOFILE

TRACE_LEVEL = 5
LOG_FORMAT = '%(asctime)s [%(levelname)s] \t[%(name)s] %(message)s'
Expand All @@ -23,27 +25,14 @@ def trace(self, message, *args, **kws):
def init_logger():
add_trace_level()
logging.basicConfig(
filename = DEFAULT_LOG_FILENAME,
level = TRACE_LEVEL,
format = LOG_FORMAT
# datefmt = '%m/%d/%Y %I:%M:%S %p'
)
# define a Handler which writes INFO messages or higher to the sys.stderr
console = logging.StreamHandler()
console.setLevel(TRACE_LEVEL)
console.setFormatter(logging.Formatter(LOG_FORMAT))

logrotating = logging.handlers.RotatingFileHandler(
DEFAULT_LOG_FILENAME,
maxBytes=25000,
backupCount=5
)
return logging.getLogger(__name__)

# add the handler to the root logger
logging.getLogger('').addHandler(console)
logging.getLogger('').addHandler(logrotating)

return logging.getLogger(__name__)

def parse_arguments(argv):
arg_parser = argparse.ArgumentParser(
Expand Down Expand Up @@ -72,6 +61,24 @@ def parse_arguments(argv):
else:
return arg_parser.parse_args(args=sys.argv[1:])

def files_preserve_by_path(*paths):

This comment has been minimized.

Copy link
@motom001

motom001 Jan 10, 2015

Author Owner

Hilfsfunktion für daemon_runner.daemon_context.files_preserve

wanted=[]
for path in paths:
fd = os.open(path, os.O_RDONLY)
try:
wanted.append(os.fstat(fd)[1:3])
finally:
os.close(fd)

def fd_wanted(fd):
try:
return os.fstat(fd)[1:3] in wanted
except OSError:
return False

fd_max = getrlimit(RLIMIT_NOFILE)[1]
return [ fd for fd in xrange(fd_max) if fd_wanted(fd) ]

def get_status_from_doorpi(argv):
try:
print "called: %s" % argv
Expand All @@ -91,23 +98,56 @@ def main_as_daemon(argv):
else:
parsed_arguments = parse_arguments(argv)

logger.info(metadata.epilog)
logger.debug('loaded with arguments: %s', str(argv))
logrotating = logging.handlers.RotatingFileHandler(
DEFAULT_LOG_FILENAME,
maxBytes=25000,
backupCount=5
)
logrotating.setLevel(TRACE_LEVEL)
logrotating.setFormatter(logging.Formatter(LOG_FORMAT))
logrotating.doRollover()

logging.getLogger('').addHandler(logrotating)
add_trace_level()
logger = logging.getLogger(__name__)

print metadata.epilog

from daemon import runner
from daemon.runner import DaemonRunnerInvalidActionError
from daemon.runner import DaemonRunnerStartFailureError
from daemon.runner import DaemonRunnerStopFailureError

daemon_runner = runner.DaemonRunner(doorpi.DoorPi(parsed_arguments))
#This ensures that the logger file handle does not get closed during daemonization
#daemon_runner.daemon_context.files_preserve=[log_rotating.stream]
try: daemon_runner.do_action()
except Exception as ex: logger.exception("Exception NameError: %s", ex)
finally: doorpi.DoorPi().destroy()
daemon_runner.daemon_context.files_preserve = files_preserve_by_path(DEFAULT_LOG_FILENAME)

This comment has been minimized.

Copy link
@motom001

motom001 Jan 10, 2015

Author Owner

this is for issue #24

try:
logger.info('loaded with arguments: %s', str(argv))
daemon_runner.do_action()
except DaemonRunnerStopFailureError as ex:

This comment has been minimized.

Copy link
@motom001

motom001 Jan 10, 2015

Author Owner

this ist for issue #11

print "can't stop DoorPi daemon - maybe not running? (Message: %s)" % ex
return 1
except DaemonRunnerStopFailureError as ex:
print "can't start DoorPi daemon - maybe is running already? (Message: %s)" % ex
return 1
except Exception as ex:
print "Exception NameError: %s" % ex
finally:
doorpi.DoorPi().destroy()

return 0

def main_as_application(argv):

parsed_arguments = parse_arguments(argv)

console = logging.StreamHandler()
console.setLevel(TRACE_LEVEL)
console.setFormatter(logging.Formatter(LOG_FORMAT))
logging.getLogger('').addHandler(console)

add_trace_level()
logger = logging.getLogger(__name__)
logger.info(metadata.epilog)
logger.debug('loaded with arguments: %s', str(argv))

Expand All @@ -128,5 +168,4 @@ def entry_point():
raise SystemExit(main_as_application(sys.argv))

if __name__ == '__main__':
logger = init_logger()
entry_point()

0 comments on commit d05afe4

Please sign in to comment.