Wednesday 9 November 2011

Site Storage WebPart


 

For SharePoint site Administrators it could be important to view the storage of a SiteCollection (and subsites). However, SharePoint sites are often hosted by a external hosting and administrators have no access to the Central Administration. I wrote the following WebPart which summarizes the storage of a SiteCollection and the SubSites of this SiteCollection. Since there's no property for getting the Site Size I make recursively use of the Folder Size of a SPWeb.



public class SiteUsageWebPart : System.Web.UI.WebControls.WebParts.WebPart{ public SiteUsageWebPart() {
}
private SPSite siteCollection; private SPWeb site; private SPWebCollection sites;
protected override void CreateChildControls() { siteCollection = SPContext.Current.Site; site = SPContext.Current.Web; sites = siteCollection.RootWeb.Webs; }
private long GetWebSize(SPWeb web) { long total = 0;
foreach (SPFolder folder in web.Folders) { total += GetFolderSize(folder); }
foreach (SPWeb subweb in web.Webs) { total += GetWebSize(subweb); subweb.Dispose(); }
return total; }
private long GetFolderSize(SPFolder folder) { long folderSize = 0;
foreach (SPFile file in folder.Files) { folderSize += file.Length; }
foreach (SPFolder subfolder in folder.SubFolders) { folderSize += GetFolderSize(subfolder); }
return folderSize; }
private double ConvertBytesToMegabytes(long bytes) { return (bytes / 1024f) / 1024f; }
protected override void Render(HtmlTextWriter writer) { writer.WriteLine(" <>"); // Size of the Rootweb writer.WriteLine(" <>"); writer.Write(" <>"); writer.Write(" <>"); writer.WriteLine(" <>"); writer.WriteLine(" <>"); foreach (SPWeb subSite in sites) { writer.WriteLine(" <>"); writer.Write(" <>"); writer.Write(" <>"); writer.WriteLine(" <>"); writer.WriteLine(" <>"); //SPListCollection lists = subSite.Lists; //foreach (SPList list in lists) //{ // writer.Write(SPEncode.HtmlEncode(list.Title) // e.g. you can also summarize list sizes //} } // Total Size of SiteCollection writer.WriteLine(" <>"); writer.WriteLine(" <>"); writer.Write(" <>"); writer.Write(" <>"); writer.WriteLine("
" + SPEncode.HtmlEncode(siteCollection.RootWeb.Title) + " (RootWeb)" + siteCollection.RootWeb.Url + "" + SPEncode.HtmlEncode(ConvertBytesToMegabytes(GetWebSize(siteCollection.RootWeb)).ToString("0.00")) + " MB
" + SPEncode.HtmlEncode(subSite.Title) + "" + subSite.Url + "" + SPEncode.HtmlEncode(ConvertBytesToMegabytes(GetWebSize(subSite)).ToString("0.00")) + " MB
---------------
Total size of sitecollection " + siteCollection.Url + "" + SPEncode.HtmlEncode(ConvertBytesToMegabytes(siteCollection.Usage.Storage).ToString("0.00")) + " MB

No comments:

Post a Comment