X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=logger.py;h=064e98ef45649987e85cc44d7cc81a88a91bcc2b;hb=74d5761f260b5d887733e826b4ce6aed11f11487;hp=796064f11805957c3bc49c797f85a248a58da293;hpb=ac6786141feadccdc48b819ab21a825a54881ded;p=nodemanager.git diff --git a/logger.py b/logger.py index 796064f..064e98e 100644 --- a/logger.py +++ b/logger.py @@ -1,7 +1,11 @@ +""" +A very simple logger that tries to be concurrency-safe. +""" -"""A very simple logger that tries to be concurrency-safe.""" +# pylint: disable=c0111 -import os, sys +import sys +import os import time import traceback import subprocess @@ -20,24 +24,26 @@ LOG_LEVEL = LOG_NODE def set_level(level): global LOG_LEVEL - try: - assert level in [LOG_NONE, LOG_NODE, LOG_VERBOSE] + if level in (LOG_NONE, LOG_NODE, LOG_VERBOSE): LOG_LEVEL = level - except: - logger.log("Failed to set LOG_LEVEL to %s" % level) + else: + log("Failed to set LOG_LEVEL to %s" % level) def verbose(msg): log('(v) ' + msg, LOG_VERBOSE) def log(msg, level=LOG_NODE): - """Write to the log file if level >= current log level (default LOG_NODE).""" + """ + Write to the log file if level >= current log level (default LOG_NODE). + """ if level > LOG_LEVEL: return try: - fd = os.open(LOG_FILE, os.O_WRONLY | os.O_CREAT | os.O_APPEND, 0600) + fd = os.open(LOG_FILE, os.O_WRONLY | os.O_CREAT | os.O_APPEND, 0o600) if not msg.endswith('\n'): msg += '\n' - os.write(fd, '%s: %s' % (time.asctime(time.gmtime()), msg)) + to_write = '%s: %s' % (time.asctime(time.gmtime()), msg) + os.write(fd, to_write.encode()) os.close(fd) except OSError: sys.stderr.write(msg) @@ -104,7 +110,7 @@ class Buffer: def add(self, c): self.buffer += c - if c=='\n': + if c == '\n': self.flush() def flush(self): @@ -124,8 +130,11 @@ def log_call(command, timeout=default_timeout_minutes*60, poll=1): trigger=time.time()+timeout result = False try: - child = subprocess.Popen(command, bufsize=1, - stdout=subprocess.PIPE, stderr=subprocess.STDOUT, close_fds=True) + child = subprocess.Popen( + command, bufsize=1, + stdout=subprocess.PIPE, stderr=subprocess.STDOUT, + close_fds=True, + universal_newlines=True) buffer = Buffer() while True: # see if anything can be read within the poll interval