public static SharePointSiteDiskSpace[] CalculateSharePointSitesDiskSpace(int itemId, out int errorCode) { SharePointSiteDiskSpace[] retDiskSpace = null; errorCode = 0; // check account int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive); if (accountCheck < 0) { errorCode = accountCheck; return null; } // place log record TaskManager.StartTask("HOSTED_SHAREPOINT", "CALCULATE_DISK_SPACE", itemId); try { Organization org = (Organization)PackageController.GetPackageItem(itemId); if (org == null) return null; int serviceId = GetHostedSharePointServiceId(org.PackageId); HostedSharePointServer hostedSharePointServer = GetHostedSharePointServer(serviceId); List<SharePointSiteCollection> currentOrgSiteCollection = GetOrganizationSharePointSiteCollections(org.Id); List<string> urls = new List<string>(); foreach (SharePointSiteCollection siteCollection in currentOrgSiteCollection) { urls.Add(siteCollection.PhysicalAddress); } if (urls.Count > 0) retDiskSpace = hostedSharePointServer.CalculateSiteCollectionsDiskSpace(urls.ToArray()); else { retDiskSpace = new SharePointSiteDiskSpace[1]; retDiskSpace[0] = new SharePointSiteDiskSpace(); retDiskSpace[0].DiskSpace = 0; retDiskSpace[0].Url = string.Empty; } } catch (Exception ex) { throw TaskManager.WriteError(ex); } finally { TaskManager.CompleteTask(); } return retDiskSpace; }
public SharePointSiteDiskSpace[] CalculateSiteCollectionDiskSpace(Uri root, string[] urls) { WindowsImpersonationContext wic = null; try { wic = WindowsIdentity.GetCurrent().Impersonate(); SPWebApplication rootWebApplication = SPWebApplication.Lookup(root); List<SharePointSiteDiskSpace> ret = new List<SharePointSiteDiskSpace>(); foreach (string url in urls) { SharePointSiteDiskSpace siteDiskSpace = new SharePointSiteDiskSpace(); rootWebApplication.Sites[url].RecalculateStorageUsed(); siteDiskSpace.Url = url; siteDiskSpace.DiskSpace = (long)Math.Round(rootWebApplication.Sites[url].Usage.Storage / 1024.0 / 1024.0); ret.Add(siteDiskSpace); } return ret.ToArray(); } catch (Exception ex) { HostedSolutionLog.LogError(ex); throw; } finally { if (wic != null) wic.Undo(); } }