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();
            }

        }