Thursday, August 23, 2012

Get the Current Site collection UsedData

.ascx



<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>

   <asp:Label ID="lblist" runat="server"></asp:Label>
   <asp:Label ID="lblwebSize" runat="server"></asp:Label>
   <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="GridView1" runat="server" AutoGenerateColumns="false">

<HeaderStyle CssClass="linkButton" />
  <RowStyle CssClass="Rows" />
  <AlternatingRowStyle CssClass="Rows1" />

   <Columns>
 <asp:TemplateField >
    <HeaderTemplate  >
        <asp:Label ID="lblListName" Text="ListName" runat="server" />
    </HeaderTemplate>
    <ItemTemplate>
    <asp:Label ID="lblListNames"
            Text='<%# Eval("tp_Title") %>'  runat="server"></asp:Label>  
    </ItemTemplate>
 </asp:TemplateField>

  <asp:TemplateField >
    <HeaderTemplate  >
    <asp:Label ID="lblItemsSize" Text="ItemsSize" runat="server" />

    </HeaderTemplate>

    <ItemTemplate>

    <asp:Label ID="lblItemsSizes"
            Text='<%# Eval("tp_ItemCount") %>'  runat="server"></asp:Label>  
    </ItemTemplate>
    </asp:TemplateField>

    <asp:TemplateField >
    <HeaderTemplate  >
    <asp:Label ID="lblItemCount" Text="ListItemsCount" runat="server" />

    </HeaderTemplate>

    <ItemTemplate>

    <asp:Label ID="lblItemCount"
            Text='<%# Eval("TotalSize") %>'  runat="server"></asp:Label>  
    </ItemTemplate>
    </asp:TemplateField>
    </Columns>

</asp:GridView>


<br />

<!-- ListReport-->
<asp:Label ID="listTotalSize" 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>

.cs


      public DataTable table1
        {
            get { return (DataTable)ViewState["Table1"]; }
            set
            {
                ViewState["Table1"] = value;
            }
        }
        public DataTable table
        {
            get { return (DataTable)ViewState["Table"]; }
            set
            {
                ViewState["Table"] = value;
            }
        }

        public DataTable ListReporttable
        {
            get { return (DataTable)ViewState["ListReporttable"]; }
            set
            {
                ViewState["ListReporttable"] = value;
            }
        }
        protected void Page_Load(object sender, EventArgs e)
        {

       
            long webUsedData = 0;
            double totalData = 0;
            SPSite site = SPContext.Current.Site;
            ListReporttable = CreateListReportTable();
            String title = site.OpenWeb().Title;
            table= CreateTable();
            string webId=string.Empty;
            using (SPSite oSite = new SPSite(site.ID))
            {
                foreach (SPWeb oWeb in oSite.AllWebs)
                {
                    webId=Convert.ToString(oWeb.ID);
                    table1 = null;
                    #region Newcode
                   // string SizeWithUnitMeasure;
                    string withUnitMeasure;
                    double webSizeInBytes = GetWebSizeWithUnitMeasure(oWeb, out withUnitMeasure);
                    lblwebSize.Text = webSizeInBytes.ToString("0.##");
               
                   // string listSizeWithMeasure;
                    //double listSizeInBytes = GetListSizeWithUnit(list, out listSizeWithMeasure);
                    //lblist.Text = Convert.ToString(listSizeInBytes);
                    //Use the listSizeWithMeasureto print with the measure
                    //Use the SizeWithUnitMeasure to print with the measure.
                    #endregion
                    webUsedData = GetWebSize(oWeb);
                    Double usedData = webUsedData;
                    usedData = Convert.ToDouble((usedData / (1024 * 1024)).ToString("0.##"));
                    DataRow row1;
                    if(table1!=null)
                    row1 = table1.NewRow();
                    DataRow row = table.NewRow();
                    row["Web Name"] = oWeb.Title;
                    row["Used Data"] = Convert.ToString(usedData + " MB ");
                    row["WebSize"] = webSizeInBytes.ToString("0.##") + "MB";
                    table.Rows.Add(row);
                    totalData += usedData;
                    oWeb.Dispose();
                }

                lblSiteCollectionData.Text = "Total Data used by " + title + " Site collection is: " + Convert.ToString(totalData) + " MB ";
            }

            DataTable newTable = new DataView(table1, "tp_WebID = '" + webId + "'", "", DataViewRowState.CurrentRows).ToTable();

            GridView1.DataSource = newTable;
            GridView1.DataBind();
            spGridWebSiteUsedData.DataSource = table;
            spGridWebSiteUsedData.DataBind();
           
          //  DataRow[] dr = ListReporttable.Select("SUM(Size)");
            listTotalSize.Text =Convert.ToString(ListReporttable.Compute("Sum(Size)", ""));
          //  listTotalSize.Text = ListReporttable.AsEnumerable().Sum(x => x.Field<Double>("Size")).ToString();

            gvListReport.DataSource = ListReporttable;
            gvListReport.DataBind();
        }

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

            foreach (SPFile subweb in web.Files)
            {
                total += subweb.Length;
            }

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

        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;

        }

        #region Newcode2
        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;
            double total = 0d;

            foreach (SPList list in web.Lists)
            {
                 listData = (double)GetListSizeInBytes(list)/(1024*1024);
                 storageUsage += 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);
            }



            string unitMeasure = "";
            double webSize = storageUsage * 1024.0 * 1024.0;// 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);
               // storageUsage += total;
            }
            //DataRow row = table.NewRow();
            //row["Web Name"] = web.Title;
            //row["Used Data"] = Convert.ToString(storageUsage + " MBL ");
            //row["WebSize"] = withUnitMeasure;
            //table.Rows.Add(row);
            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.Merge(myDataTable);
            else
            table1 = myDataTable;
            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




No comments:

Post a Comment