X-Git-Url: https://git.ralfj.de/saartuer.git/blobdiff_plain/19a7c2977daef47da6ad1bc0ca73010921f5122d..a7c0b8e1ba3fc6170f14bb0c964e5ac9e9ba4881:/libtuer.py?ds=sidebyside diff --git a/libtuer.py b/libtuer.py deleted file mode 100644 index 5b1221c..0000000 --- a/libtuer.py +++ /dev/null @@ -1,93 +0,0 @@ -import logging, logging.handlers, os, time, queue, threading, subprocess - -# logging function -class Logger: - def __init__ (self): - import __main__ as main - self.name = os.path.basename(main.__file__) - self.logger = logging.getLogger(self.name) - self.logger.setLevel(logging.INFO) - self.handler = logging.handlers.SysLogHandler(address = '/dev/log', facility = logging.handlers.SysLogHandler.LOG_LOCAL0) - self.logger.addHandler(self.handler) - - def log (self, lvl, what): - thestr = "%s[%d]: %s" % (self.name,os.getpid(),what) - print (thestr) - self.logger.log(lvl, thestr) - - def debug(self, what): - self.log(logging.DEBUG, what) - def info(self, what): - self.log(logging.INFO, what) - def warning(self, what): - self.log(logging.WARNING, what) - def error(self, what): - self.log(logging.ERROR, what) - def critical(self, what): - self.log(logging.CRITICAL, what) - -logger = Logger() - -# run a command asynchronously and log the return value if not 0 -# prefix must be a string identifying the code position where the call came from -def fire_and_forget (cmd, log, prefix): - def _fire_and_forget (): - with open("/dev/null", "w") as fnull: - retcode = subprocess.call(cmd, stdout=fnull, stderr=fnull) - if retcode is not 0: - log("%sReturn code %d at command: %s" % (prefix,retcode,str(cmd))) - t = threading.Thread(target=_fire_and_forget) - t.start() - -# Threaded callback class -class ThreadFunction(): - _CALL = 0 - _TERM = 1 - - def __init__(self, f): - self._f = f - self._q = queue.Queue() - self._t = threading.Thread(target=self._thread_func) - self._t.start() - - def _thread_func(self): - while True: - (cmd, data) = self._q.get() - # run command - if cmd == _CALL: - try: - self._f(*data) - except Exception: - logger.error("ThreadFunction: Got exception out of handler thread: %s" % str(e)) - elif cmd == _TERM: - assert data is None - break - else: - logger.error("ThreadFunction: Command %d does not exist" % cmd) - - def __call__(self, *arg): - self._q.put((self._CALL, arg)) - - def stop(self): - self._q.put((_TERM, None)) - self._t.join() - -# Thread timer-repeater class: Call a function every seconds -class ThreadRepeater(): - def __init__(self, f, sleep_time): - self._f = f - self._stop = False - self._sleep_time = sleep_time - self._t = threading.Thread(target=self._thread_func) - self._t.start() - - def _thread_func(): - while True: - if self._stop: - break - self._f() - time.sleep(sleep_time) - - def stop(self): - self._stop = True - self._t.join()