import Pyro4 # from argparse import ArgumentParser ## TODO Arguments from Snapshot import Snapshot import time from zfssmd_worker import DEFAULT_REFRESH_INTERVAL ## FIXME Only debug import pprint from itertools import product PYRO_URI = "PYRO:058b7dde9ec53de9235cfc57a07ce17a9eabfce3@./u:/run/zfssmd.sock" class ZFSSMDClient(object): def __init__(self, uri=PYRO_URI): self.uri = uri self.pyro_conn = Pyro4.Proxy(self.uri) ## FIXME Check for old timestamp def check_old_timestamp(self, timestamp): target_interval = DEFAULT_REFRESH_INTERVAL * 2 if time.time() - timestamp <= target_interval: return False else: return True def get_snapshot_list(self): response = self.pyro_conn.get_current_list() timestamp = next(iter(response)) if (self.check_old_timestamp(timestamp)): print("WARNING! Data is older than supposed to be. Check daemon worker") slist = next(iter(response.values())) return slist def make_snapshot_objects(self): snapshot_object_list = list() for snapshot in self.get_snapshot_list(): snapshot_obj = Snapshot(snapshot) snapshot_object_list.append(snapshot_obj) return snapshot_object_list def make_disk_objects(self): disk_object_list = list() #disk_list = list() #snapshot_list = self.make_snapshot_objects() #for snapshot in snapshot_list: # disk = snapshot.get_disk_name() # if disk not in disk_list: # disk_list.append(disk) #map(lambda (x,y):) def list_snapshots(self): ## TODO make d snapshot_dict = dict() for o in self.make_snapshot_objects(): name = o.get_snapshot_name() zvol = o.get_snapshot_zvol() ctime = o.get_snapshot_creation_time() used = o.get_snapshot_used_size() ref = o.get_snapshot_referenced_size() snapshot_dict.update ({name:[zvol,ctime,used,ref]}) return snapshot_dict pp = pprint.PrettyPrinter() pp.pprint(ZFSSMDClient().make_disk_objects())