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
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
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
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
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
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
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
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
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
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
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