Exemple #1
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  :