def refreshLiveData(self, cellname="") : """ update livedata for the cell : partition free and used space, DBVersions, list of Servers """ if cellname == "" : cellname = self._CFG.CELL_NAME cell=Cell() cell.FileServers=self.getFileServers() cell.DBServers=self.getDBServers() cell.PTDBSyncSite, cell.PTDBVersion,cell.PTDBState=self.getUbikDBInfo(cell.DBServers[0],7002) cell.VLDBSyncSite, cell.VLDBVersion,cell.VLDBState=self.getUbikDBInfo(cell.DBServers[0],7003) cell.size,cell.used,cell.free=self.getUsage() return True
def getCellInfo(self, cellname="", cached=False): """ just return internal cell object """ if cached : return self._getFromCache() # refresh whole new CellObj cell=Cell() cell.Name=self._CFG.CELL_NAME cell.FileServers=self._getFileServers() cell.DBServers=self._getDBServers() cell.PTDBSyncSite, cell.PTDBVersion=self._getUbikDBInfo(7002) cell.VLDBSyncSite, cell.VLDBVersion=self._getUbikDBInfo(7003) if self._CFG.DB_CACHE : self._setIntoCache(cell) return cell
def getCellInfo(self, cellname="", _user="", cached=False) : """ return full Cellobject. """ if cellname == "" : cellname = self._CFG.CELL_NAME self.Logger.debug("Using cellname : %s " % cellname) if cached : cell=self.DBManager.getFromCache(Cell,Name = cellname) if cell == None : self.Logger.info("getCellInfo: Cannot get cached Cell. Returning none.") return cell self.Logger.debug("getCellInfo: Cell.udate=%s" % cell.udate) # update Sums etc. from DB_CACHE cell.Name=cellname self.Logger.debug("getCellInfo: Cell.FileServers=%s" % cell.FileServers) cell.numRW = cell.numRO = cell.numBK = cell.numOffline = 0 numVolDict=self.bulk_getNumVolumes() for f in cell.FileServers : self.Logger.debug("getCellInfo: f=%s" % f) uuid = afs.LookupUtil[self._CFG.CELL_NAME].getFSUUID(f) if numVolDict.has_key(uuid) : cell.numRW += numVolDict[uuid].get("RW",0) cell.numRO += numVolDict[uuid].get("RO",0) cell.numBK += numVolDict[uuid].get("BK",0) cell.numOffline = -1 cell.numUsers,cell.numGroups = self.getPTInfo(cached=True) cell.allocated,cell.allocated_stale = self.getAllocated() cell.size,cell.used,cell.free=self.getUsage(cached=True) cell.Projects=[] # Projects are in DB_CACHE only for p in self.PS.getProjectList() : cell.Projects.append(p.name) self.Logger.debug("Cell=%s" % cell) return cell # refresh whole new CellObj cell=Cell() cell.Name=cellname cell.FileServers=self.getFileServers() cell.DBServers=self.getDBServers() cell.PTDBSyncSite, cell.PTDBVersion,cell.PTDBState=self.getUbikDBInfo(cell.DBServers[0],7002) cell.VLDBSyncSite, cell.VLDBVersion,cell.VLDBState=self.getUbikDBInfo(cell.DBServers[0],7003) cell.numRW = cell.numRO = cell.numBK = cell.numOffline = 0 for f in cell.FileServers : numRW,numRO,numBK,numOffline = self.FS.getNumVolumes(name_or_ip=f,cached=True) cell.numRW += numRW cell.numRO += numRO cell.numBK += numBK cell.numOffline += numOffline cell.numUsers,cell.numGroups = self.getPTInfo() cell.size,cell.used,cell.free=self.getUsage() # some information are only available if DB_CACHE is used. cell.allocated,cell.allocated_stale = -1,-1 cell.Projects=[] # Projects are in DB_CACHE only if self._CFG.DB_CACHE : for p in self.PS.getProjectList() : cell.Projects.append(p.name) cell.allocated,cell.allocated_stale = self.getAllocated() self.Logger.debug("Cell=%s" % Cell) self.DBManager.setIntoCache(Cell,cell,Name=self._CFG.CELL_NAME) return cell
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 :