if __name__ == '__main__':
- daemon = (len(sys.argv) < 2) or (sys.argv[1] != '-f')
+ from dbuscron import Logger, OptionsParser
+
+ options = OptionsParser('fvc:l:')
+ daemon = not options.f
+
+ logout = sys.stderr
+ if options.l:
+ logout = open(options.l, 'wb')
+
+ log = Logger(__name__, out=logout)
+ log.level = options.v + Logger.ERROR
+
if daemon:
from dbuscron.daemonize import daemonize
daemonize(
bus = DbusBus()
commands = Commands()
- crontab = CrontabParser('/etc/dbuscrontab')
+ crontab = CrontabParser(options.c or '/etc/dbuscrontab')
for rule, cmd in crontab:
matcher = DbusRule(**rule)
command = Command(cmd)
matcher.register()
+ log.info('%s %s' % (matcher, command))
commands.add(matcher, command)
commands.environ = crontab.environ
import os
from dbuscron.bus import get_dbus_message_type, dbus_to_str
+from dbuscron.logger import Logger
+log = Logger(__name__)
class Command(object):
def __init__(self, cmd):
)
env.update(dbus_env)
result = os.spawnvpe(os.P_WAIT, self.__file, self.__args, env)
+ log.info('run %s %s %s %s' % (self.__file, self.__args, dbus_env, result))
return result
@property
def handler(self, bus, message):
for rule, command in self.__commands.iteritems():
if rule.match(bus, message):
+ log.info('matched %s %s' % (rule, command))
command(bus, message, self.__environ)
return
__out = None
__name = None
+ __instance = None
+
DEBUG = 4
INFO = 3
WARNING = 2
ERROR = 1
PANIC = 0
+ def __new__(cls, name, out=sys.stderr):
+ if cls.__instance is None:
+ cls.__instance = super(Logger, cls).__new__(cls)
+ return cls.__instance
+
def __init__(self, name, out=sys.stderr):
self.__out = out
self.__name = name