Thursday, August 23, 2012

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>