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 
Exemple #2
0
 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
Exemple #4
0
    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  :