Get Site and SubSites Size
.cs
#region Variable/properties declarations
public DataTable table
{
get { return (DataTable)ViewState["Table"]; }
set
{
ViewState["Table"] = value;
}
}
public DataTable table1
{
get { return (DataTable)ViewState["Table1"]; }
set
{
ViewState["Table1"] = value;
}
}
public DataTable ListReporttable
{
get { return (DataTable)ViewState["ListReporttable"]; }
set
{
ViewState["ListReporttable"] = value;
}
}
public DataTable listTable
{
get { return (DataTable)ViewState["ListTable"]; }
set { ViewState["ListTable"] = value; }
}
public DataTable documentsListTable
{
get { return (DataTable)ViewState["DocumentsListTable"]; }
set { ViewState["DocumentsListTable"] = value; }
}
TreeNode root;
Double listSize = 0d;
Double docmentLibrarySize = 0d;
List<Guid> webSiteIds;
Hashtable subSitesSize;
#endregion Variable/properties declarations
#region Events
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
SPSite site = SPContext.Current.Site;
SPWebApplication webApp = SPWebApplication.Lookup(new Uri(site.Url));
foreach (SPSite siteCol in webApp.Sites)
{
String title = siteCol.ToString();
root = new TreeNode(); // Creating new root node
root.Text = title;
root.Value = Convert.ToString(siteCol.Url);
root.ShowCheckBox = true; //Allowing checkbox to b visible in the node
TreeView1.Nodes.Add(root);
siteCol.Dispose();
}
foreach (TreeNode node in TreeView1.Nodes)
populatechilds(node);
}
}
protected void Select_Change(Object sender, EventArgs e)
{
subSitesSize = new Hashtable();
webSiteIds = new List<Guid>();
ListReporttable = CreateListReportTable();
documentsListTable = CreateListReportTable();
listTable = null;
double totalData = 0;
String title = TreeView1.SelectedNode.Text;
String id = TreeView1.SelectedNode.Value;
SPSite site = new SPSite(id);
SPWeb oWeb = site.OpenWeb();
String title1 = site.OpenWeb().Title;
string webId = string.Empty;
table = CreateTable();
webId = Convert.ToString(oWeb.ID);
table1 = null;
#region GetWebSite Size using SP
string withUnitMeasure;
double webSizeInBytes = GetWebSizeWithUnitMeasure(oWeb, out withUnitMeasure);
#endregion
DataRow row1;
if (table1 != null)
row1 = table1.NewRow();
DataRow row = table.NewRow();
row["Web Name"] = oWeb.Title;
row["Used Data"] = Convert.ToString(webSizeInBytes + " MB ");
row["WebSize"] = webSizeInBytes.ToString("0.##") + "L";
table.Rows.Add(row);
totalData += webSizeInBytes;
oWeb.Dispose();
lblSiteCollectionData.Text = "Total Data used by " + title + " Site collection is: " + Convert.ToString(totalData) + " MB ";
listTotalSize.Text = Convert.ToString(listSize);//Convert.ToString(ListReporttable.Compute("Sum(Size)", ""));
lstDocSize.Text = Convert.ToString(docmentLibrarySize);
gvDocumentsList.DataSource = documentsListTable;
gvDocumentsList.DataBind();
spGridWebSiteUsedData.DataSource = table;
spGridWebSiteUsedData.DataBind();
gvListReport.DataSource = ListReporttable;
gvListReport.DataBind();
}
#endregion Events
#region GetWebsiteSize
public double DefineSizeWithUnitMeasure(double sizeInBytes, out string unitMeasure)
{
unitMeasure = "Bytes";
double size = sizeInBytes;
if (size > 1024)
{
size = sizeInBytes / 1024d;//KB
unitMeasure = "KB";
}
if (size > 1024)
{
size = size / 1024d;//MB
unitMeasure = "MB";
}
if (size > 1024)
{
size = size / 1024d; //GB
unitMeasure = "GB";
}
if (size > 1024)
{
size = size / 1024d; //TB
unitMeasure = "TB";
}
return size;
}
public double GetWebSizeWithUnitMeasure(SPWeb web, out string withUnitMeasure)
{
double storageUsage = 0d;
double listData = 0d;
foreach (SPList list in web.Lists)
{
listData = (double)GetListSizeInBytes(list) / (1024 * 1024);
storageUsage += listData;
if (list.BaseType != SPBaseType.DocumentLibrary)
{
listSize += listData;
DataRow row = ListReporttable.NewRow();
row["ListNameName"] = list.Title;
row["Size"] = listData;
row["ListType"] = list.BaseType.ToString();
row["ItemsCount"] = Convert.ToString(list.ItemCount);
row["WebUrl"] = list.ParentWebUrl;
ListReporttable.Rows.Add(row);
}
else
{
docmentLibrarySize += listData;
DataRow row = documentsListTable.NewRow();
row["ListNameName"] = list.Title;
row["Size"] = listData;
row["ListType"] = list.BaseType.ToString();
row["ItemsCount"] = Convert.ToString(list.ItemCount);
row["WebUrl"] = list.ParentWebUrl;
documentsListTable.Rows.Add(row);
}
}
subSitesSize.Add(web.ID+"/"+web.Title, storageUsage);
string unitMeasure = "";
double webSize = DefineSizeWithUnitMeasure(storageUsage * 1024.0 * 1024.0, out unitMeasure);
withUnitMeasure = string.Format("{0} {1}", webSize.ToString("f"), unitMeasure);
foreach (SPWeb subweb in web.Webs)
{
String t;
storageUsage += GetWebSizeWithUnitMeasure(subweb, out t);
}
return storageUsage;
}
public double GetListSizeWithUnit(SPList list, out string withUnitMeasure)
{
double listSizeinBytes = (double)GetListSizeInBytes(list);
string unitMeasure = "";
double listSize = DefineSizeWithUnitMeasure(listSizeinBytes, out unitMeasure);
withUnitMeasure = string.Format("{0} {1}", listSize.ToString("f"), unitMeasure);
return listSizeinBytes;
}
public long GetListSizeInBytes(SPList list)
{
long listSize = 0;
string filter = string.Format("tp_id='{0}'", list.ID);
DataTable myDataTable = GetCachedSiteCollectionListSizes(list.ParentWeb.Site);
//if (table1 == null)
// table1 = myDataTable;
#region GetListTable
DataTable newTable = new DataView(myDataTable, "tp_WebID = '" + list.ParentWeb.ID + "'", "", DataViewRowState.CurrentRows).ToTable();
if (!webSiteIds.Contains(list.ParentWeb.ID))
{
webSiteIds.Add(list.ParentWeb.ID);
if (listTable != null)
listTable.Merge(newTable);
else
listTable = newTable;
}
#endregion
DataRow[] dataRows = myDataTable.Select(filter);
if (dataRows.Length > 0)
{
listSize = (long)dataRows[0]["TotalSize"];
}
return listSize;
}
public DataTable m_SiteCollectionListSizes;
public Guid m_SiteCollectionListSizesSiteID;
private DataTable GetCachedSiteCollectionListSizes(SPSite site)
{
if (m_SiteCollectionListSizes == null || m_SiteCollectionListSizesSiteID != site.ID)
{
m_SiteCollectionListSizes = GetSiteCollectionListSizes(site);
m_SiteCollectionListSizesSiteID = site.ID;
}
return m_SiteCollectionListSizes;
}
private DataTable GetSiteCollectionListSizes(SPSite site)
{
DataTable dataTable = GetDocLibSizes(site);
//Combine both list and doc lib size results
dataTable.Merge(GetListSizes(site));
return dataTable;
}
private DataTable GetDocLibSizes(SPSite site)
{
string connectionString = site.WebApplication.ContentDatabases[site.ContentDatabase.Id].DatabaseConnectionString;
string storedProcName = "proc_GetDocLibrarySizes";
System.Data.SqlClient.SqlConnection connection = null;
System.Data.SqlClient.SqlDataReader reader = null;
DataTable dataTable = null;
try
{
connection = new System.Data.SqlClient.SqlConnection(connectionString);
connection.Open();
System.Data.SqlClient.SqlCommand command = new System.Data.SqlClient.SqlCommand(storedProcName, connection);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add(new System.Data.SqlClient.SqlParameter("@SiteId", site.ID.ToString()));
reader = command.ExecuteReader();
dataTable = new DataTable();
dataTable.Load(reader);
}
finally
{
if (reader != null)
reader.Close();
if (connection != null)
connection.Close();
}
return dataTable;
}
private DataTable GetListSizes(SPSite site)
{
string connectionString = site.WebApplication.ContentDatabases[site.ContentDatabase.Id].DatabaseConnectionString;
string storedProcName = "proc_GetListSizes";
System.Data.SqlClient.SqlConnection connection = null;
System.Data.SqlClient.SqlDataReader reader = null;
DataTable dataTable = null;
try
{
connection = new System.Data.SqlClient.SqlConnection(connectionString);
connection.Open();
System.Data.SqlClient.SqlCommand command = new System.Data.SqlClient.SqlCommand(storedProcName, connection);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add(new System.Data.SqlClient.SqlParameter("@SiteId", site.ID.ToString()));
reader = command.ExecuteReader();
dataTable = new DataTable();
dataTable.Load(reader);
}
finally
{
if (reader != null)
reader.Close();
if (connection != null)
connection.Close();
}
return dataTable;
}
#endregion
#region Create Treeview nodes
public void populatechilds(TreeNode node)
{
string id = node.Value;
using (SPSite oSite = new SPSite(id))
{
populateSite(node, oSite.RootWeb);
oSite.Dispose();
}
}
public void populateSite(TreeNode node, SPWeb rootWeb)
{
foreach (SPWeb oWeb in rootWeb.Webs)
{
TreeNode child = new TreeNode();
child.Text = oWeb.Title;
child.Value = Convert.ToString(oWeb.Url);
child.ShowCheckBox = true;
node.ChildNodes.Add(child);
populateSite(child, oWeb);
oWeb.Close();
}
}
#endregion Create Treeview nodes
#region Create Table structure
private DataTable CreateListReportTable()
{
DataTable newTable = new DataTable();
DataColumn col1 = new DataColumn("ListNameName", typeof(String));
DataColumn col2 = new DataColumn("Size", typeof(Double));
DataColumn col3 = new DataColumn("ItemsCount", typeof(String));
DataColumn col4 = new DataColumn("ListType", typeof(String));
DataColumn col5 = new DataColumn("WebUrl", typeof(String));
newTable.Columns.Add(col1);
newTable.Columns.Add(col2);
newTable.Columns.Add(col3);
newTable.Columns.Add(col4);
newTable.Columns.Add(col5);
return newTable;
}
private DataTable CreateTable()
{
DataTable newTable = new DataTable();
DataColumn col1 = new DataColumn("Web Name", typeof(String));
DataColumn col2 = new DataColumn("Used Data", typeof(String));
DataColumn col3 = new DataColumn("WebSize", typeof(String));
newTable.Columns.Add(col1);
newTable.Columns.Add(col2);
newTable.Columns.Add(col3);
return newTable;
}
#endregion Create Table structure
.aspx
<style type="text/css">
.GridHeader
{
background-color:#156db4 !Important;
height: 30px;
width:auto;
}
.Rows
{
background-color:#d8d8d8;
height: 30px;
background-repeat: repeat-x;
text-align:center;
color:#002a76;
}
.Rows1
{
background-color:White;
height: 30px;
background-repeat: repeat-x;
text-align:center;
color:#002a76;
}
.linkButton
{
color: #CD853F !Important;
cursor : hand ;
background-color:#156db4 !Important;
font-weight: bold;
height: 30px;
width:auto;
}
</style>
<table>
<tr valign="top">
<td style="width:30%" >
<asp:TreeView ID="TreeView1" runat="server" OnSelectedNodeChanged="Select_Change" >
</asp:TreeView>
</td>
<td style="width:70%">
<asp:Label ID="lblSiteCollectionData" runat="server" CssClass="Rows" ></asp:Label>
<asp:GridView ID="spGridWebSiteUsedData" runat="server" AutoGenerateColumns="false">
<HeaderStyle CssClass="linkButton" />
<RowStyle CssClass="Rows" />
<AlternatingRowStyle CssClass="Rows1" />
<Columns>
<asp:TemplateField >
<HeaderTemplate >
<asp:Label ID="lblWebSiteName" Text="Web Site Name" runat="server" />
</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="lblSebSite"
Text='<%# Eval("Web Name") %>' runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField >
<HeaderTemplate >
<asp:Label ID="lblWebSiteUsedData" Text="Web Site Name" runat="server" />
</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="lblUsedData"
Text='<%# Eval("Used Data") %>' runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField >
<HeaderTemplate >
<asp:Label ID="lblWebSiteData" Text="Web Site Size" runat="server" />
</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="lblUsedDatasize"
Text='<%# Eval("WebSize") %>' runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<br />
<asp:GridView ID="gvDocumentsList" runat="server" AutoGenerateColumns="false">
<HeaderStyle CssClass="linkButton" />
<RowStyle CssClass="Rows" />
<AlternatingRowStyle CssClass="Rows1" />
<Columns>
<asp:TemplateField >
<HeaderTemplate >
<asp:Label ID="lblhlistName" Text="ListName" runat="server" />
</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="lblListNameName"
Text='<%# Eval("ListNameName") %>' runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField >
<HeaderTemplate >
<asp:Label ID="lblhListSize" Text="ListSizee" runat="server" />
</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="lblSize" Text='<%# Eval("Size") %>' runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField >
<HeaderTemplate >
<asp:Label ID="lblhItemscount" Text="Itemscount" runat="server" />
</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="lblItemsCount" Text='<%# Eval("ItemsCount") %>' runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField >
<HeaderTemplate >
<asp:Label ID="lblhListType" Text="ListType" runat="server" />
</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="lblListType" Text='<%# Eval("ListType") %>' runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField >
<HeaderTemplate >
<asp:Label ID="lblhWebUrl" Text="WebUrl" runat="server" />
</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="lblWebUrl" Text='<%# Eval("WebUrl") %>' runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<br />
<!-- ListReport-->
<asp:Label ID="lstTotalSize" runat="server" Text="Total Lists Size: "></asp:Label>
<asp:Label ID="listTotalSize" runat="server"></asp:Label>
<asp:Label ID="lstDocSizeText" runat="server" Text="Documents Size:"></asp:Label>
<asp:Label ID="lstDocSize" runat="server"></asp:Label>
<asp:GridView ID="gvListReport" runat="server" AutoGenerateColumns="false">
<HeaderStyle CssClass="linkButton" />
<RowStyle CssClass="Rows" />
<AlternatingRowStyle CssClass="Rows1" />
<Columns>
<asp:TemplateField >
<HeaderTemplate >
<asp:Label ID="lblhlistName" Text="ListName" runat="server" />
</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="lblListNameName" Text='<%# Eval("ListNameName") %>' runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField >
<HeaderTemplate >
<asp:Label ID="lblhListSize" Text="ListSizee" runat="server" />
</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="lblSize" Text='<%# Eval("Size") %>' runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField >
<HeaderTemplate >
<asp:Label ID="lblhItemscount" Text="Itemscount" runat="server" />
</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="lblItemsCount" Text='<%# Eval("ItemsCount") %>' runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField >
<HeaderTemplate >
<asp:Label ID="lblhListType" Text="ListType" runat="server" />
</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="lblListType" Text='<%# Eval("ListType") %>' runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField >
<HeaderTemplate >
<asp:Label ID="lblhWebUrl" Text="WebUrl" runat="server" />
</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="lblWebUrl" Text='<%# Eval("WebUrl") %>' runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:Label ID="Message" runat="server"></asp:Label>
</td></tr>
</table>