import time import threading import Pyro4 import logging as log DEFAULT_REFRESH_INTERVAL=(5 * 60) PYRO4_URI="PYRO:058b7dde9ec53de9235cfc57a07ce17a9eabfce3@./u:/run/zfssmd.sock" class ZFSSMDaemonRefresh(object): """ Spawns as thread to the daemon. Requests snapshot list refresh on interval. """ def __init__(self, interval=DEFAULT_REFRESH_INTERVAL, uri=PYRO4_URI): """ starts the thread :param interval: interval to perform a request to daemon :param uri: uri returned by Pyro4 daemon on launch """ self.interval = interval self.uri = uri thread = threading.Thread(target=self.run, args=()) thread.daemon = True thread.start() def run(self): while True: ## FIXME Rework it as root process cursor if it's even possible to avoid RPC. For now it's not bad. _uri = self.uri zfssmd_connection = Pyro4.Proxy(_uri) last_ref = zfssmd_connection.call_zfs_list_snapshots() log.debug("Refreshed list " + str(last_ref)) time.sleep(self.interval)