def combinedResult(unit, sites=None): """ Checks the space token usage at the site and report the space usage from several sources: File Catalog, Storage dumps, SRM interface """ dmsHelper = DMSHelpers() if not sites: # Tier0 and all Tier1s sites = sorted(dmsHelper.getTiers(tier=(0, 1))) else: # Translate in case it is a short name allSites = dmsHelper.getSites() sites = [ dmsHelper.getShortSiteNames(tier=(0, 1)).get(site, site) for site in sites ] badSites = set(sites) - set(allSites) if badSites: gLogger.warn("Some sites do not exist", str(sorted(badSites))) sites = [site for site in sites if site in allSites] scaleDict = { 'MB': 1000 * 1000.0, 'GB': 1000 * 1000 * 1000.0, 'TB': 1000 * 1000 * 1000 * 1000.0, 'PB': 1000 * 1000 * 1000 * 1000 * 1000.0 } if unit not in scaleDict: return S_ERROR("Unit not in %s" % scaleDict.keys()) scaleFactor = scaleDict[unit] fcUsage = {} srmUsage = {} sdUsage = {} for site in sites: # retrieve space usage from FC fcUsage[site] = getFCUsage(site) sitesSEs[site] = {} # Get SEs at site seList = dmsHelper.getSEsAtSite(site).get('Value', []) for se in seList: occupancyResult = StorageElement(se).getOccupancy() if not occupancyResult['OK']: return occupancyResult occupancy = occupancyResult['Value'] srmUsage[site] = occupancy # retrieve space usage from storage dumps: sdResult = getSDUsage(site) if sdResult != -1: sdUsage[site] = sdResult else: return 1 gLogger.notice("Storage usage summary for site %s - %s " % (site.split('.')[1], time.asctime())) for st in sitesSEs[site]: gLogger.notice("Space token %s " % st) gLogger.notice("\tFrom FC: Files: %d, Size: %.2f %s" % (fcUsage[site][st]['Files'], fcUsage[site][st]['Size'] / scaleFactor, unit)) if site in srmUsage and st in srmUsage[site]: gLogger.notice( "\tFrom SRM: Total Assigned Space: %.2f %s, Used Space: %.2f %s, Free Space: %.2f %s " % (srmUsage[site][st]['SRMTotal'] / scaleFactor, unit, srmUsage[site][st]['SRMUsed'] / scaleFactor, unit, srmUsage[site][st]['SRMFree'] / scaleFactor, unit)) else: gLogger.notice("\tFrom SRM: Information not available") if site in sdUsage and st in sdUsage[site]: gLogger.notice( "\tFrom storage dumps: Files: %d, Size: %.2f %s - last update %s " % (sdUsage[site][st]['Files'], sdUsage[site][st]['Size'] / scaleFactor, unit, sdUsage[site][st]['LastUpdate'])) else: gLogger.notice( "\tFrom storage dumps: Information not available") return 0