Example #1
0
 def getVolGroup(self, vid, cellname, token) :
     """
     update entry via vos examine from vol-server. 
     """
     
     CmdList = [afs.dao.bin.VOSBIN,"examine", "-id", "%s"  % vid , "-format","-cell", "%s" %  cellname]
     rc,output,outerr=afs.dao.bin.execute(CmdList)
    
     if rc :
         raise VolError("Error", outerr)
     
     volGroup = {}
     line_no = 0
     line = output[line_no]
     
     if re.search("Could not fetch the entry",line) or line == "VLDB: no such entry"  or re.search("Unknown volume ID or name",line) \
         or re.search("does not exist in VLDB",line) :
         return volGroup
         
     # first line gives Name, ID, Type, Used and Status  
     #volList = {"RW": [], "RO": [] }
     
     roID = 0
     rwID = 0
     numSite = 0
     numServer = 0
     for line in output:
         splits = line.split()
         #search server list section
         if splits[0] == "RWrite:":
             rwID = splits[1]
             roID = splits[3]
             if len(splits) > 4 :
                bkID= splits[5] 
         
         if splits[0] == "number":  
             numSite =  splits[4] 
         #FIXME check BK !!!   
         # 1 = server, 3 = partitions, 4 type
         if splits[0] == "server":
             numServer = numServer +1
             type = splits[4]
             
             if not volGroup.get(type,None):
                 volGroup[type] = []
            
             if type =="RW":                 
                 volGroup["RW"].append({"id":rwID,"serv":splits[1],"part":afsutil.canonicalizePartition(splits[3])})
             elif type =="RO":
                 volGroup["RO"].append({"id":roID,"serv":splits[1],"part":afsutil.canonicalizePartition(splits[3])})
             else:
                 volGroup["BK"].append({"id":bkID,"serv":splits[1],"part":afsutil.canonicalizePartition(splits[3])})
                 
             if numSite == numServer:
                 break
     
     return volGroup
 def getIdVolList(self, server, part, _cfg=None):
     """
     return  Volumes in partition
     """
     part = afsutil.canonicalizePartition(part)
     CmdList=[_cfg.binaries["vos"],"listvol", "-server", "%s" % server, "-partition", "%s" % part ,"-fast" , "-cell","%s" % _cfg.CELL_NAME]
     return CmdList,PM.getIdVolList   
Example #3
0
 def getVolList(self, serv, part, _cfg=None): 
     """
     List Volume entry via vos listvol from vol-server. 
     return list of dictionaries
     """
     part = afsutil.canonicalizePartition(part)
     CmdList = [_cfg.binaries["vos"],"listvol", "-server", "%s"  % serv , "-part", "%s"  % part ,"-format","-cell", "%s" %  _cfg.CELL_NAME]
     return CmdList,PM.getVolList
Example #4
0
    def _getFromCache(self,id, serv, part):
        #STORE info into  CACHE
        if not self._CFG.DB_CACHE:
            return None
        
        part = afsutil.canonicalizePartition(part)
        session = self.DbSession()
        # Do update
        vol = session.query(Volume).filter(Volume.vid == id).filter(Volume.serv == serv).filter(Volume.part == part).first

        session.close()
        return vol
Example #5
0
    def _getPartFromCache(self, serv, part):
        #STORE info into  CACHE
        if not self._CFG.DB_CACHE:
            return None
        
        part = afsutil.canonicalizePartition(part)
        session = self.DbSession()
        # Do update
        part = session.query(Partition).filter(Partition.part == part).filter(Partition.serv == serv).first

        session.close()
        return part
Example #6
0
 def refreshCache(self, serv, part):
     if not self._CFG.DB_CACHE:
         raise VolError('Error, no db Cache defined ',None)
    
     part = afsutil.canonicalizePartition(part)
     list = self._volDAO.getVolList( serv, part, self._CFG.CELL_NAME, self._CFG.Token)
     #Convert into dictionary
     idVolDict = {}
     cUpdate = len(list)
     for el in list:
         idVolDict[el['vid']] = el
         
     session = self.DbSession()
     
     res  = session.query(Volume).filter(or_(Volume.serv == serv,Volume.servername == serv )).filter(Volume.part == part)
     
     flush = 0
     for vol in res:
         flush +=1
         if idVolDict.has_key(vol.vid):
             vol.setByDict(idVolDict[vol.vid])
             del idVolDict[vol.vid]
         else:     
             session.delete(vol) 
         
         if flush > self._CFG.DB_FLUSH:    
             session.flush() 
     session.flush()
     
     # ADD section 
     flush = 0
     for key in idVolDict.keys():
         flush +=1
         vol = Volume()
         vol.setByDict(idVolDict[key])
         session.add(vol)    
         if flush > self._CFG.DB_FLUSH:    
             session.flush() 
     session.flush()
     session.commit()
     
     return cUpdate
Example #7
0
    def getIdVolList(self, server, part, cell, token):
            """
            return  Volumes in partition
            """
            part = afsutil.canonicalizePartition(part)
            RX=re.compile("^(\d+)")
            CmdList=[afs.dao.bin.VOSBIN,"listvol", "-server", "%s" % server, "-partition", "%s" % part ,"-fast" , "-cell","%s" % cell]
 
            rc,output,outerr=self.execute(CmdList)
            if rc :
                 raise FServError("Error", outerr)
            volIds = []
            
            for line in output [1:]:
                m=RX.match(line)
                if not m :
                    raise FServError("Error parsing output :%s " % line)
                if m :
                   volIds.append(m.groups()[0]) 
                
            return volIds
def getPartList(rc,output,outerr,parseParamList,Logger) :
    """
    return list of dicts { "name" : , "size" : ,  "used" : ,  "free" : free}
    Sizes in KiBytes
    """
    if rc :
         raise FServError("Error", outerr)
    RX=re.compile("Free space on partition /vicep(\S+): (\d+) K blocks out of total (\d+)")
    partitions= []
    for line in output :
        m=RX.match(line)
        if not m :
            raise FServError("Error parsing output" , line)

        part, free, size=m.groups()
        size=long(size)
        free=long(free)
        used = size-free
        partitions.append({ "name" : afsutil.canonicalizePartition(part), "size" : size,  "used" : used,  "free" : free})
    Logger.debug("getPartList: returning %s" % partitions)
    return partitions
Example #9
0
    def getPartList(self,  serv, cellname, token) :
            """
            return list  of  Partitions-dicts
            """
            RX=re.compile("Free space on partition /vicep(\S+): (\d+) K blocks out of total (\d+)")
            CmdList=[afs.dao.bin.VOSBIN,"partinfo", "%s" % serv, "-cell","%s" % cellname]
            rc,output,outerr=self.execute(CmdList)
            if rc :
                 raise FServError("Error", outerr)
            partitions= []
            for line in output :
                m=RX.match(line)
                if not m :
                    raise FServError("Error parsing output" , line)

                part, free, size=m.groups()
                used = long(size)-long(free)
                if size != 0:
                    perc = (used/long(size))*100
                perc= 0
                partitions.append({ "name" : afsutil.canonicalizePartition(part), "size" : long(size),  "used" : long(used),  "free" : long(free), "perc": perc})
            
            return partitions
Example #10
0
 def getVolList(self, serv, part,  cellname, token) :
     """
     List Volume entry via vos listvol from vol-server. 
     return list of dictionaries
     """
     part = afsutil.canonicalizePartition(part)
     CmdList = [afs.dao.bin.VOSBIN,"listvol", "-server", "%s"  % serv , "-part", "%s"  % part ,"-format","-cell", "%s" %  cellname]
     
     rc,output,outerr=self.execute(CmdList)
     if rc :
         raise FServError("Error",outerr)
     
     # first line gives Name, ID, Type, Used and Status 
     volList = [] 
     dateT=datetime.datetime(1970, 1, 1)
     for i in range(0, len(output)):
         splits = output[i].split()
         #Beginnig block
         if splits[0] == "BEGIN_OF_ENTRY":
                 vol = {}
                 splits = output[i+1].split()
                 # Invalid volume, something wrong
                 if splits[0] != 'name':
                     #vol['valid'] = False 
                     if  splits[0] == 'id':
                         vol['vid']      = int(splits[1])
                     
                     splits = output[i+2].split()
                     if  splits[0] == 'serv':
                         vol['servername']     = splits[1] 
                     
                     splits = output[i+3].split()   
                     if  splits[0] == 'part':
                          vol['part']     = afsutil.canonicalizePartition(splits[1]) 
                          
                     splits = output[i+4].split()
                     if  splits[0] == 'status':
                         vol['status']     = splits[1] 
                     
                     while output[i] != "END_OF_ENTRY":
                         i = i+1  
                         
                 # Valid volume                           
                 else:  
                     #vol['valid'] = True 
                     vol['name']     = splits[1]
                     splits = output[i+2].split()
                     
                     vol['vid']      = int(splits[1])
                     splits = output[i+3].split()
                     #vol['serv']     = splits[1]
                     
                     if len(splits) > 2:
                        vol['servername']     = splits[2]
                     else:
                        #Only ip is available 
                        vol['servername']     = splits[1] 
                     splits = output[i+4].split()
                     vol['part']     = afsutil.canonicalizePartition(splits[1])
                     splits = output[i+5].split()
                     vol['status']     = splits[1]
                     splits = output[i+6].split()
                     vol['backupID'] = int(splits[1])
                     splits = output[i+7].split()
                     vol['parentID'] = int(splits[1])
                     splits = output[i+8].split()
                     vol['cloneID']  = int(splits[1])
                     splits = output[i+9].split()
                     vol['inUse']    = splits[1]
                     splits = output[i+10].split()
                     vol['needsSalvaged'] = splits[1]
                     splits = output[i+11].split()
                     vol['destroyMe']     = splits[1]
                     splits = output[i+12].split()
                     vol['type']          = splits[1]
                     splits = output[i+13].split()
                     vol['creationDate']  =  dateT.fromtimestamp(float(splits[1]))
                     splits = output[i+14].split()
                     vol['accessDate']    = dateT.fromtimestamp(float(splits[1]))
                     splits = output[i+15].split()
                     vol['updateDate']    = dateT.fromtimestamp(float(splits[1]))
                     splits = output[i+16].split()
                     vol['backupDate']     = dateT.fromtimestamp(float(splits[1]))
                     splits = output[i+17].split()
                     vol['copyDate']      = dateT.fromtimestamp(float(splits[1]))
                     splits = output[i+18].split()
                     vol['flags']         = splits[1]
                     splits = output[i+19].split()
                     vol['diskused']      = int(splits[1])
                     splits = output[i+20].split()
                     vol['maxquota']      = int(splits[1])
                     splits = output[i+21].split()
                     vol['minquota']      = int(splits[1])
                     splits = output[i+22].split()
                     vol['filecount']     = int(splits[1])
                     splits = output[i+23].split()
                     vol['dayUse']        = int(splits[1])
                     splits = output[i+24].split()
                     vol['weekUse']       = int(splits[1])
                     splits = output[i+25].split()
                     vol['spare2']        = splits[1]
                     splits = output[i+26].split()
                     vol['spare3']        = splits[1]
                     i = i+26
                 
                 volList.append(vol)
                 
           
     return volList
def getVolume(rc,output,outerr,parseParamList,Logger) : 
    """
    returns list of Volumes matching name_or_id
    """
       
    if rc:
        raise VolError("Error", outerr)
    name_or_id=parseParamList["args"][0]
    serv=parseParamList["kwargs"]["serv"]

    Logger.debug("getVolume: got=%s" % output)

    line_no = 0
    line = output[line_no]
   
    if re.search("Could not fetch the entry",line) or line == "VLDB: no such entry"  or re.search("Unknown volume ID or name",line) \
        or re.search("does not exist in VLDB",line) :
        Logger.info("Did not find volume %s in VLDB" % name_or_id)
        return None
    
    # first line gives Name, ID, Type, Used and Status 
    find = False    
    vol  = []
    instanceNo = -1
    i = 0
    while i < len(output):
        splits = output[i].split()
        #Beginnig block
        if splits[0] == "name":
            Logger.debug("Reading line: %s" % output[i])
            instanceNo += 1
            vol.append({})
            line1 = output[i].split()
            line2 = output[i+1].split()
            line3 = output[i+2].split()
            line4 = output[i+3].split()
            if ((line1[1] == str(name_or_id) or line2[1] == str(name_or_id) ) and \
                (line3[1] == serv or line3[2] == serv or serv == None)) :
                find = True
                splits = output[i].split()
                vol[instanceNo]['name']     = splits[1]
                splits = output[i+1].split()
                vol[instanceNo]['vid']      = int(splits[1])
                splits = output[i+2].split()
                vol[instanceNo]['serv']     = splits[1]
                if len(splits) > 2:
                    vol[instanceNo]['servername']     = splits[2]
                splits = output[i+3].split()
                vol[instanceNo]['part']     = afsutil.canonicalizePartition(splits[1])
                splits = output[i+4].split()
                vol[instanceNo]['status']     = splits[1]
                splits = output[i+5].split()
                vol[instanceNo]['backupID'] = int(splits[1])
                splits = output[i+6].split()
                vol[instanceNo]['parentID'] = int(splits[1])
                splits = output[i+7].split()
                vol[instanceNo]['cloneID']  = int(splits[1])
                splits = output[i+8].split()
                vol[instanceNo]['inUse']    = splits[1]
                splits = output[i+9].split()
                vol[instanceNo]['needsSalvaged'] = splits[1]
                splits = output[i+10].split()
                vol[instanceNo]['destroyMe']     = splits[1]
                splits = output[i+11].split()
                vol[instanceNo]['type']          = splits[1]
                splits = output[i+12].split()
                vol[instanceNo]['creationDate']  =  datetime.fromtimestamp(float(splits[1]))
                splits = output[i+13].split()
                vol[instanceNo]['accessDate']  =  datetime.fromtimestamp(float(splits[1]))
                splits = output[i+14].split()
                vol[instanceNo]['updateDate']    = datetime.fromtimestamp(float(splits[1]))
                splits = output[i+15].split()
                vol[instanceNo]['backupDate']     = datetime.fromtimestamp(float(splits[1]))
                splits = output[i+16].split()
                vol[instanceNo]['copyDate']      = datetime.fromtimestamp(float(splits[1]))
                splits = output[i+17].split()
                vol[instanceNo]['flags']         = splits[1]
                splits = output[i+18].split()
                vol[instanceNo]['diskused']      = int(splits[1])
                splits = output[i+19].split()
                vol[instanceNo]['maxquota']      = int(splits[1])
                splits = output[i+20].split()
                vol[instanceNo]['filecount']     = int(splits[1])
                splits = output[i+21].split()
                vol[instanceNo]['dayUse']        = int(splits[1])
                splits = output[i+22].split()
                vol[instanceNo]['weekUse']       = int(splits[1])
                splits = output[i+23].split()
                vol[instanceNo]['osdPolicy']        = int(splits[1])
                splits = output[i+24].split()
                vol[instanceNo]['filequota']        = int(splits[1])
                i += 25
            else:
                Logger.debug("Dismissing because of :")
                Logger.debug("line1=%s" % line1)
                Logger.debug("line2=%s" % line2)
                Logger.debug("line3=%s" % line3)
                i = i+25
        else :
            Logger.debug("Skipping: %s" % output[i])
            i += 1
    if not find :
        Logger.info("Did not find volume %s" % name_or_id)
        vol = None
    return vol
def getVolList(rc, output, outerr, parseParamList, Logger):
    if rc:
        raise FServError("Error", outerr)
    # first line gives Name, ID, Type, Used and Status
    volList = []
    dateT = datetime.datetime(1970, 1, 1)
    i = 0
    while i < len(output):
        while output[i] != "BEGIN_OF_ENTRY":
            i = i + 1
            if i >= len(output):
                break
        if i >= len(output):
            break
        # Beginnig block
        splits = output[i].split()
        if splits[0] == "BEGIN_OF_ENTRY":
            vol = {}
            splits = output[i + 1].split()
            # Invalid volume, something wrong
            if splits[0] != "name":
                # vol['valid'] = False
                if splits[0] == "id":
                    vol["vid"] = int(splits[1])

                splits = output[i + 2].split()
                if splits[0] == "serv":
                    vol["servername"] = splits[1]

                splits = output[i + 3].split()
                if splits[0] == "part":
                    vol["part"] = afsutil.canonicalizePartition(splits[1])

                splits = output[i + 4].split()
                if splits[0] == "status":
                    vol["status"] = splits[1]

                while output[i] != "END_OF_ENTRY":
                    i = i + 1

            # Valid volume
            else:
                vol["vid"] = "UNSET"
                try:
                    vol["name"] = splits[1]
                    splits = output[i + 2].split()
                    Logger.debug("splits = %s" % splits)
                    vol["vid"] = int(splits[1])
                    splits = output[i + 3].split()
                    Logger.debug("splits = %s" % splits)
                except:
                    # XXX Here we need a flag to show that parsing was not complete
                    # or a list of Volumes which need to be reparsed.
                    # this will be in the return-code
                    while output[i] != "END_OF_ENTRY":
                        i = i + 1
                    Logger.debug("Cannot parse name of volume with id=%s! Skipping." % vol["vid"])
                    continue

                if len(splits) > 2:
                    vol["servername"] = splits[2]
                else:
                    # Only ip is available
                    vol["servername"] = splits[1]
                splits = output[i + 4].split()
                Logger.debug("splits = %s" % splits)
                vol["part"] = afsutil.canonicalizePartition(splits[1])
                splits = output[i + 5].split()
                Logger.debug("splits = %s" % splits)
                vol["status"] = splits[1]
                if vol["status"] != "OK":
                    while output[i] != "END_OF_ENTRY":
                        i = i + 1
                    continue
                splits = output[i + 6].split()
                Logger.debug("splits = %s" % splits)
                vol["backupID"] = int(splits[1])
                splits = output[i + 7].split()
                Logger.debug("splits = %s" % splits)
                vol["parentID"] = int(splits[1])
                splits = output[i + 8].split()
                Logger.debug("splits = %s" % splits)
                vol["cloneID"] = int(splits[1])
                splits = output[i + 9].split()
                Logger.debug("splits = %s" % splits)
                vol["inUse"] = splits[1]
                splits = output[i + 10].split()
                Logger.debug("splits = %s" % splits)
                vol["needsSalvaged"] = splits[1]
                splits = output[i + 11].split()
                Logger.debug("splits = %s" % splits)
                vol["destroyMe"] = splits[1]
                splits = output[i + 12].split()
                Logger.debug("splits = %s" % splits)
                vol["type"] = splits[1]
                splits = output[i + 13].split()
                Logger.debug("splits = %s" % splits)
                vol["creationDate"] = dateT.fromtimestamp(float(splits[1]))
                splits = output[i + 14].split()
                Logger.debug("splits = %s" % splits)
                vol["accessDate"] = dateT.fromtimestamp(float(splits[1]))
                splits = output[i + 15].split()
                Logger.debug("splits = %s" % splits)
                vol["updateDate"] = dateT.fromtimestamp(float(splits[1]))
                splits = output[i + 16].split()
                Logger.debug("splits = %s" % splits)
                vol["backupDate"] = dateT.fromtimestamp(float(splits[1]))
                splits = output[i + 17].split()
                Logger.debug("splits = %s" % splits)
                vol["copyDate"] = dateT.fromtimestamp(float(splits[1]))
                splits = output[i + 18].split()
                Logger.debug("splits = %s" % splits)
                vol["flags"] = splits[1]
                splits = output[i + 19].split()
                Logger.debug("splits = %s" % splits)
                vol["diskused"] = int(splits[1])
                splits = output[i + 20].split()
                Logger.debug("splits = %s" % splits)
                vol["maxquota"] = int(splits[1])
                splits = output[i + 21].split()
                Logger.debug("splits = %s" % splits)
                vol["osdPolicy"] = int(splits[1])
                splits = output[i + 22].split()
                Logger.debug("splits = %s" % splits)
                vol["filecount"] = int(splits[1])
                splits = output[i + 23].split()
                Logger.debug("splits = %s" % splits)
                vol["dayUse"] = int(splits[1])
                splits = output[i + 24].split()
                Logger.debug("splits = %s" % splits)
                vol["weekUse"] = int(splits[1])
                splits = output[i + 25].split()
                Logger.debug("splits = %s" % splits)
                # ignore spare fields
                # vol['spare2']        = int(splits[1])
                splits = output[i + 26].split()
                Logger.debug("splits = %s" % splits)
                vol["filequota"] = int(splits[1])
                i = i + 27
            volList.append(vol)
    return volList
def getVolList(rc, output, outerr, parseParamList, Logger) :
    if rc :
        raise FServError("Error",outerr)
        
    # first line gives Name, ID, Type, Used and Status 
    volList = [] 
    dateT=datetime.datetime(1970, 1, 1)
    i = 0
    while i < len(output):
        while output[i] != "BEGIN_OF_ENTRY":
             i = i+1  
             if i >= len(output): break
        if i >= len(output): break
        #Beginnig block
        splits = output[i].split()
        if splits[0] == "BEGIN_OF_ENTRY":
                vol = {}
                splits = output[i+1].split()
                # Invalid volume, something wrong
                if splits[0] != 'name':
                    #vol['valid'] = False 
                    if  splits[0] == 'id':
                        vol['vid']      = int(splits[1])
                    
                    splits = output[i+2].split()
                    if  splits[0] == 'serv':
                        vol['servername']     = splits[1] 
                    
                    splits = output[i+3].split()   
                    if  splits[0] == 'part':
                         vol['part']     = afsutil.canonicalizePartition(splits[1]) 
                         
                    splits = output[i+4].split()
                    if  splits[0] == 'status':
                        vol['status']     = splits[1] 
                    
                    while output[i] != "END_OF_ENTRY":
                        i = i+1  
                        
                # Valid volume                           
                else:  
                    vol['vid'] = "UNSET"
                    try: 
                      vol['name']     = splits[1]
                      splits = output[i+2].split()
                      vol['vid']      = int(splits[1])
                      splits = output[i+3].split()
                    except :
                        # XXX Here we need a flag to show that parsing was not complete
                        # or a list of Volumes which need to be reparsed.
                        # this will be in the return-code
                        while output[i] != "END_OF_ENTRY":
                            i = i+1
                        Logger.error("Cannot parse name of volume with id=%s! Skipping." % vol['vid'])
                        continue
                    
                    if len(splits) > 2:
                       vol['servername']     = splits[2]
                    else:
                       #Only ip is available 
                       vol['servername']     = splits[1] 
                    splits = output[i+4].split()
                    vol['part']     = afsutil.canonicalizePartition(splits[1])
                    splits = output[i+5].split()
                    vol['status']     = splits[1]
                    if vol['status'] != "OK" : 
                        while output[i] != "END_OF_ENTRY":
                            i = i+1
                        continue
                    splits = output[i+6].split()
                    vol['backupID'] = int(splits[1])
                    splits = output[i+7].split()
                    vol['parentID'] = int(splits[1])
                    splits = output[i+8].split()
                    vol['cloneID']  = int(splits[1])
                    splits = output[i+9].split()
                    vol['inUse']    = splits[1]
                    splits = output[i+10].split()
                    vol['needsSalvaged'] = splits[1]
                    splits = output[i+11].split()
                    vol['destroyMe']     = splits[1]
                    splits = output[i+12].split()
                    vol['type']          = splits[1]
                    splits = output[i+13].split()
                    vol['creationDate']  =  dateT.fromtimestamp(float(splits[1]))
                    splits = output[i+14].split()
                    vol['accessDate']    = dateT.fromtimestamp(float(splits[1]))
                    splits = output[i+15].split()
                    vol['updateDate']    = dateT.fromtimestamp(float(splits[1]))
                    splits = output[i+16].split()
                    vol['backupDate']     = dateT.fromtimestamp(float(splits[1]))
                    splits = output[i+17].split()
                    vol['copyDate']      = dateT.fromtimestamp(float(splits[1]))
                    splits = output[i+18].split()
                    vol['flags']         = splits[1]
                    splits = output[i+19].split()
                    vol['diskused']      = int(splits[1])
                    splits = output[i+20].split()
                    vol['maxquota']      = int(splits[1])
                    splits = output[i+21].split()
                    vol['minquota']      = int(splits[1])
                    splits = output[i+22].split()
                    vol['filecount']     = int(splits[1])
                    splits = output[i+23].split()
                    vol['dayUse']        = int(splits[1])
                    splits = output[i+24].split()
                    vol['weekUse']       = int(splits[1])
                    splits = output[i+25].split()
                    vol['spare2']        = splits[1]
                    splits = output[i+26].split()
                    vol['spare3']        = splits[1]
                    i = i+26
                volList.append(vol)
    return volList
Example #14
0
 def getVolList(self, serv, part,  cellname, token) :
     """
     update entry via vos listvol from vol-server. 
     return list of dictionaries
     """
     part = afsutil.canonicalizePartition(part)
     CmdList = [afs.dao.bin.VOSBIN,"listvol", "-server", "%s"  % serv , "-part", "%s"  % part ,"-format","-cell", "%s" %  cellname]
     
     rc,output,outerr=afs.dao.bin.execute(CmdList)
     if rc :
         raise VolError("Error",outerror)
     
     line_no = 0
     line = output[line_no]
    
    
     # first line gives Name, ID, Type, Used and Status 
     volList = [] 
     
     for i in range(0, len(output)):
         splits = output[i].split()
         #Beginnig block
         if splits[0] == "BEGIN_OF_ENTRY":
                 vol = {}
                 splits = output[i+1].split()
                 vol['name']     = splits[1]
                 splits = output[i+2].split()
                 vol['vid']      = int(splits[1])
                 splits = output[i+3].split()
                 vol['serv']     = splits[1]
                 if len(splits) > 2:
                     vol['servername']     = splits[2]
                 splits = output[i+4].split()
                 vol['part']     = afsutil.canonicalizePartition(splits[1])
                 splits = output[i+5].split()
                 vol['status']     = splits[1]
                 splits = output[i+6].split()
                 vol['backupID'] = int(splits[1])
                 splits = output[i+7].split()
                 vol['parentID'] = int(splits[1])
                 splits = output[i+8].split()
                 vol['cloneID']  = int(splits[1])
                 splits = output[i+9].split()
                 vol['inUse']    = splits[1]
                 splits = output[i+10].split()
                 vol['needsSalvaged'] = splits[1]
                 splits = output[i+11].split()
                 vol['destroyMe']     = splits[1]
                 splits = output[i+12].split()
                 vol['type']          = splits[1]
                 splits = output[i+13].split()
                 vol['creationDate']  =  datetime.fromtimestamp(float(splits[1]))
                 splits = output[i+14].split()
                 vol['updateDate']    = datetime.fromtimestamp(float(splits[1]))
                 splits = output[i+15].split()
                 vol['backupDate']     = datetime.fromtimestamp(float(splits[1]))
                 splits = output[i+16].split()
                 vol['copyDate']      = datetime.fromtimestamp(float(splits[1]))
                 splits = output[i+17].split()
                 vol['flags']         = splits[1]
                 splits = output[i+18].split()
                 vol['diskused']      = int(splits[1])
                 splits = output[i+19].split()
                 vol['maxquota']      = int(splits[1])
                 splits = output[i+20].split()
                 vol['minquota']      = int(splits[1])
                 splits = output[i+21].split()
                 vol['filecount']     = int(splits[1])
                 splits = output[i+22].split()
                 vol['dayUse']        = int(splits[1])
                 splits = output[i+23].split()
                 vol['weekUse']       = int(splits[1])
                 splits = output[i+24].split()
                 vol['spare2']        = splits[1]
                 splits = output[i+25].split()
                 vol['spare3']        = splits[1]
                 volList.append(vol)
                 i = i+26
           
     return volList
Example #15
0
    def getVolume(self, vid, serv, part, cellname, token) :
        """
        update entry via vos examine from vol-server. 
        If Name is given, it takes precedence over ID
        """
        part = afsutil.canonicalizePartition(part)
        CmdList = [afs.dao.bin.VOSBIN,"examine",  "%s"  % vid ,"-format","-cell", "%s" % cellname]
        rc,output,outerr=afs.dao.bin.execute(CmdList)
        if rc :
            raise VolError("Error", outerr)
        
        line_no = 0
        line = output[line_no]
        vol = {}
       
        if re.search("Could not fetch the entry",line) or line == "VLDB: no such entry"  or re.search("Unknown volume ID or name",line) \
            or re.search("does not exist in VLDB",line) :
            return vol
       
        # first line gives Name, ID, Type, Used and Status 
        find = False    

        for i in range(0, len(output)):
            splits = output[i].split()
            #Beginnig block
            if splits[0] == "name":
                line1 = output[i].split()
                line2 = output[i+1].split()
                line3 = output[i+2].split()
                line4 = output[i+3].split()
                if ((line1[1] == str(vid) or\
                     line2[1] == str(vid) ) and \
                     (line3[1] == serv or\
                      line3[2] == serv) and\
                      (afsutil.canonicalizePartition(line4[1]) == part)):

                    find = True
                    splits = output[i].split()
                    vol['name']     = splits[1]
                    splits = output[i+1].split()
                    vol['vid']      = int(splits[1])
                    splits = output[i+2].split()
                    vol['serv']     = splits[1]
                    if len(splits) > 2:
                        vol['servername']     = splits[2]
                    splits = output[i+3].split()
                    vol['part']     = afsutil.canonicalizePartition(splits[1])
                    splits = output[i+4].split()
                    vol['status']     = splits[1]
                    splits = output[i+5].split()
                    vol['backupID'] = int(splits[1])
                    splits = output[i+6].split()
                    vol['parentID'] = int(splits[1])
                    splits = output[i+7].split()
                    vol['cloneID']  = int(splits[1])
                    splits = output[i+8].split()
                    vol['inUse']    = splits[1]
                    splits = output[i+9].split()
                    vol['needsSalvaged'] = splits[1]
                    splits = output[i+10].split()
                    vol['destroyMe']     = splits[1]
                    splits = output[i+11].split()
                    vol['type']          = splits[1]
                    splits = output[i+12].split()
                    vol['creationDate']  =  datetime.fromtimestamp(float(splits[1]))
                    splits = output[i+13].split()
                    vol['accessDate']  =  datetime.fromtimestamp(float(splits[1]))
                    splits = output[i+14].split()
                    vol['updateDate']    = datetime.fromtimestamp(float(splits[1]))
                    splits = output[i+15].split()
                    vol['backupDate']     = datetime.fromtimestamp(float(splits[1]))
                    splits = output[i+16].split()
                    vol['copyDate']      = datetime.fromtimestamp(float(splits[1]))
                    splits = output[i+17].split()
                    vol['flags']         = splits[1]
                    splits = output[i+18].split()
                    vol['diskused']      = int(splits[1])
                    splits = output[i+19].split()
                    vol['maxquota']      = int(splits[1])
                    splits = output[i+20].split()
                    vol['minquota']      = int(splits[1])
                    splits = output[i+21].split()
                    vol['filecount']     = int(splits[1])
                    splits = output[i+22].split()
                    vol['dayUse']        = int(splits[1])
                    splits = output[i+23].split()
                    vol['weekUse']       = int(splits[1])
                    splits = output[i+24].split()
                    vol['spare2']        = splits[1]
                    splits = output[i+25].split()
                    vol['spare3']        = splits[1]
                                     
                    break
                else:
                    i = i+25
        return vol
Example #16
0
    def getVolGroupList(self, vid, cellname, token) :
        """
        update entry via vos examine from vol-server. 
        """
        
        CmdList = [afs.dao.bin.VOSBIN,"examine", "-id", "%s"  % vid , "-format","-cell", "%s" %  cellname]
        rc,output,outerr=self.execute(CmdList)
       
        if rc :
            raise VolError("Error", outerr)
        

        line_no = 0
        line = output[line_no]
        volGroup = []
        if re.search("Could not fetch the entry",line) or line == "VLDB: no such entry"  or re.search("Unknown volume ID or name",line) \
            or re.search("does not exist in VLDB",line) :
            return volGroup
            
        # first line gives Name, ID, Type, Used and Status  
        #volList = {"RW": [], "RO": [] }
        
        numSite = 0
        
        #FIXME Escape line when you find 
        for i in range(0, len(output)):
            splits = output[i].split()
            #search server list section
            if splits[0] == "name":
                volname = splits[1]
                i += 26
            
            elif splits[0] == "RWrite:":
                # id Volume by type
                vid = {}
                vid['RW'] = splits[1]
                vid['RO'] = splits[3]
                if len(splits) > 4 :
                  vid['BK'] = splits[5] 
                  
                # Number of Sites
                i += 1
                splits = output[i].split() 
                numSite =  int(splits[4]) 
                
                for n in range(0, numSite):
                    splits = output[i+1+n].split()
                    type = splits[4]
                    volGroup.append({"id":vid[type], 'volname': volname, "type":type,"serv":splits[1],"part":afsutil.canonicalizePartition(splits[3])})
          
                break
        
        return volGroup