def get_cell_info(self, **kw) : """ return full Cellobject. """ cached = kw.get("cached", True) _user = kw.get("_user", "") cellname = kw.get("cellname", self._CFG.cell) async = kw.get("async", False) if cached : cell=self.DBManager.get_from_cache(Cell, name = cellname) if cell == None : self.Logger.warn("get_cell_info: Cellinfo for %s not in DB or outdated." % cellname) else : return cell # refresh whole new CellObj cell = Cell() cell.name = cellname cell.num_vol_rw = 0 cell.num_vol_ro = 0 cell.num_vol_bk = 0 cell.num_vol_offline = 0 cell.size_kb = 0 cell.used_kb = 0 cell.free_kb = 0 cell.locations = [] # sort list of file_servers names first by domain, then by hostname sorted_file_servers = sorted(self.get_fileservers(), key=lambda x: (".".join(x.split(".")[1:]),x.split(":")[0])) sorted_db_servers = sorted(self.get_dbservers(), key=lambda x: (".".join(x.split(".")[1:]),x.split(":")[0])) cell.file_servers=[] self.Logger.info("get_cell_info: getting details from %d servers." % len(sorted_file_servers)) tasks = [] fs_obj = [] for serv_name in sorted_file_servers : self.Logger.debug("get_cell_info: getting details from %s" % serv_name) tasks.append(self.FS.get_fileserver(serv_name, cached=cached, async=async)) if async : while 1 : for task in tasks : self.FS.task_results[thread_name] sys.stderr.write("XXX results: %s : %s" % (thread_name, self.FS.task_results[thread_name]) ) time.sleep(2) else : fs_objs = tasks tasks = [] for fs in fs_objs : if fs.version == -1 : continue fs = self.FS.get_details(fs, cached=cached, async=async) for p in fs.parts :