[projects/git-slug: 120/170] Use logging to inform about status and errors

glen glen at pld-linux.org
Mon Sep 21 21:48:54 CEST 2015


commit 1c060fc3d3f54d6435cd4bb0c5d664bdb1b9019c
Author: Kacper Kornet <draenog at pld-linux.org>
Date:   Tue Jun 26 14:55:14 2012 +0100

    Use logging to inform about status and errors

 slug_watch | 79 +++++++++++++++++++++++++++++++++++++++++---------------------
 1 file changed, 52 insertions(+), 27 deletions(-)
---
diff --git a/slug_watch b/slug_watch
index ce7478e..fb2e6fe 100755
--- a/slug_watch
+++ b/slug_watch
@@ -3,6 +3,8 @@
 from argparse import ArgumentParser
 import fcntl
 import heapq
+import logging
+import logging.handlers
 import os
 import pwd
 import pyinotify
@@ -74,7 +76,7 @@ def process_file(pathname):
                         print('packages/'+repo+'.git', file=projects)
                 oldtuple = (repo, ref)
         except ValueError:
-            print("Problem with file: ", pathname, file=sys.stderr)
+            logger.error("Problem with file: {}".format(pathname))
             return
         process.wait()
 
@@ -88,36 +90,44 @@ class EventHandler(pyinotify.ProcessEvent):
         process_file(event.pathname)
 
 def runwatch(user=None):
-    if user is not None:
-        uid = pwd.getpwnam(user).pw_uid
-        gid = pwd.getpwnam(user).pw_gid
-        os.setgid(gid)
-        os.setuid(uid)
-
-    os.chdir(pwd.getpwuid(os.getuid()).pw_dir)
-    for directory in (WATCHDIR, REFREPO_WDIR):
-        if not os.path.isdir(directory):
-            print('Creating {}'.format(directory))
-            os.mkdir(directory)
-
-    refrepo = GitRepo(git_dir=REFREPO_GDIR)
-    if not os.path.isdir(REFREPO_GDIR):
-        refrepo.init_gitdir()
-    refrepo.commandexc(['config', 'daemon.uploadarch', 'true'])
-
-
-    with lock(LOCKFILE):
-        wm = pyinotify.WatchManager()  # Watch Manager
-        mask = pyinotify.IN_CLOSE_WRITE # watched events
-        notifier = pyinotify.Notifier(wm, EventHandler())
-        wm.add_watch(WATCHDIR, mask, rec=False)
-        for filename in sorted(os.listdir(WATCHDIR), key=lambda f: os.stat(os.path.join(WATCHDIR, f)).st_mtime):
-            process_file(os.path.join(WATCHDIR, filename))
-        notifier.loop()
+    logger.info("Starting")
+    try:
+        if user is not None:
+            uid = pwd.getpwnam(user).pw_uid
+            gid = pwd.getpwnam(user).pw_gid
+            os.setgid(gid)
+            os.setuid(uid)
+
+        os.chdir(pwd.getpwuid(os.getuid()).pw_dir)
+        for directory in (WATCHDIR, REFREPO_WDIR):
+            if not os.path.isdir(directory):
+                logger.info('Creating {}'.format(directory))
+                os.mkdir(directory)
+
+        refrepo = GitRepo(git_dir=REFREPO_GDIR)
+        if not os.path.isdir(REFREPO_GDIR):
+            refrepo.init_gitdir()
+        refrepo.commandexc(['config', 'daemon.uploadarch', 'true'])
+
+
+        with lock(LOCKFILE):
+            wm = pyinotify.WatchManager()  # Watch Manager
+            mask = pyinotify.IN_CLOSE_WRITE # watched events
+            notifier = pyinotify.Notifier(wm, EventHandler())
+            wm.add_watch(WATCHDIR, mask, rec=False)
+            for filename in sorted(os.listdir(WATCHDIR), key=lambda f: os.stat(os.path.join(WATCHDIR, f)).st_mtime):
+                process_file(os.path.join(WATCHDIR, filename))
+            notifier.loop()
+    except SystemExit:
+        logger.info("Stopped")
+    except:
+        logger.exception('Got exception')
+        raise
 
 
 parser = ArgumentParser(description='daemon to register changes in PLD repositories')
 parser.add_argument('-d', '--daemon', nargs='?', choices=['start', 'stop'], default=None, const='start')
+parser.add_argument('-m', '--maillogs', action='append')
 parser.add_argument('-u', '--user')
 parser.add_argument('-r', '--refrepodir', required=True)
 parser.add_argument('-w', '--watchdir', required=True)
@@ -126,6 +136,21 @@ options = parser.parse_args()
 REFREPO_GDIR = os.path.join(options.refrepodir, REFREPO+'.git')
 WATCHDIR = options.watchdir
 
+logger = logging.getLogger('slug_watch')
+logger.setLevel(logging.INFO)
+formatter = logging.Formatter('%(name)s: %(levelname)s %(message)s')
+print(options)
+if options.maillogs is not None:
+    handler_email = logging.handlers.SMTPHandler("localhost", "slug_watch", options.maillogs, "slug_watch status")
+    handler_email.setFormatter(formatter)
+    logger.addHandler(handler_email)
+if options.daemon  is not None:
+    handler = logging.handlers.SysLogHandler(address="/dev/log", facility="daemon")
+else:
+    handler = logging.StreamHandler()
+handler.setFormatter(logging.Formatter('%(name)s: %(levelname)s %(message)s'))
+logger.addHandler(handler)
+
 class SlugWatch(Daemon.daemon.daemon):
     def __init__(self, user, pidfile):
         super().__init__(pidfile)
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/projects/git-slug.git/commitdiff/4ed64f73960519a2f4fd04c42950b2c96ae795c5



More information about the pld-cvs-commit mailing list