<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="/rss.xsl"?><rss version="2.0"><channel><title>Cloud Ninja Metering Block</title><link>http://cnmb.codeplex.com/project/feeds/rss</link><description>The Cloud Ninja Metering Block is an extensible and reusable software component designed to assist software developers with the metering of tenant resource usage in a multi-tenant solution on the Windows Azure platform.</description><item><title>New Post: cloudninja.metering.pages.VendorDashboard.js file issue </title><link>http://cnmb.codeplex.com/discussions/438804</link><description>&lt;div style="line-height: normal;"&gt;I have published the clound ninja. i click on app level usage its not showing any statistics to me.&lt;br /&gt;
&lt;br /&gt;
in Console it shows the following error message to me in the cloudninja.metering.pages.VendorDashboard.js file&lt;br /&gt;
&lt;br /&gt;
Uncaught TypeError: Cannot read property 'Value' of null cloudninja.metering.pages.VendorDashboard.js:58&lt;br /&gt;
Uncaught TypeError: Cannot read property 'Value' of null cloudninja.metering.pages.VendorDashboard.js:62&lt;br /&gt;
Uncaught TypeError: Cannot read property 'Value' of null cloudninja.metering.pages.VendorDashboard.js:66&lt;br /&gt;
&lt;br /&gt;
please help me solve the issue.&lt;br /&gt;
&lt;/div&gt;</description><author>ghugeramesh</author><pubDate>Tue, 02 Apr 2013 15:28:17 GMT</pubDate><guid isPermaLink="false">New Post: cloudninja.metering.pages.VendorDashboard.js file issue  20130402032817P</guid></item><item><title>Source code checked in, #16714</title><link>http://cnmb.codeplex.com/SourceControl/changeset/changes/16714</link><description>Upgrade&amp;#58; New Version of LabDefaultTemplate.xaml. To upgrade your build definitions, please visit the following link&amp;#58; http&amp;#58;&amp;#47;&amp;#47;go.microsoft.com&amp;#47;fwlink&amp;#47;&amp;#63;LinkId&amp;#61;254563</description><author>Project Collection Service Accounts</author><pubDate>Mon, 01 Oct 2012 20:27:17 GMT</pubDate><guid isPermaLink="false">Source code checked in, #16714 20121001082717P</guid></item><item><title>Source code checked in, #16713</title><link>http://cnmb.codeplex.com/SourceControl/changeset/changes/16713</link><description>Checked in by server upgrade</description><author>Project Collection Service Accounts</author><pubDate>Mon, 01 Oct 2012 20:25:58 GMT</pubDate><guid isPermaLink="false">Source code checked in, #16713 20121001082558P</guid></item><item><title>Updated Wiki: Home</title><link>http://cnmb.codeplex.com/wikipage?version=46</link><description>&lt;div class="wikidoc"&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=cnmb&amp;DownloadId=371232" alt="header-project-description.png" title="header-project-description.png" /&gt;&lt;br /&gt;The Cloud Ninja Metering Block is an extensible and reusable software component designed to assist software developers with the metering of tenant resource usage in a multi-tenant solution on the Windows Azure platform.&lt;br /&gt;&lt;br /&gt;The need to meter and monitor resource usage at the tenant level is a common requirement for multi-tenant solutions.  This metering data is commonly used to enforce quotas, set pricing, understand solution cost breakdown by tenant, generate alerts, or identify tenants which may be abusing the solution.  Regardless of how this data is used, a core requirement is to be able to capture and store this data in a form that it can be utilized for the purposes.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=cnmb&amp;DownloadId=371235" alt="header-solution-overview.png" title="header-solution-overview.png" /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=cnmb&amp;DownloadId=371281" alt="cnmb-overview.png" title="cnmb-overview.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Metering Block&lt;/b&gt;&lt;br /&gt;The metering block ships as a hostable runtime component that can be deployed and hosted in an on-premise windows services, console application; or to Windows Azure either in it&amp;#39;s own role or as part of another role for an existing solution.  The metering block comes with a number of providers for collecting metering data from existing logs, and can be extended with custom providers for collecting metering data from other sources, such as custom logs, views, etc...&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Metering Providers&lt;/b&gt;
&lt;ul&gt;&lt;li&gt;Database Size&lt;/li&gt;
&lt;li&gt;Database Bandwidth&lt;/li&gt;
&lt;li&gt;W3C Logs (Bandwidth / Requests)&lt;/li&gt;
&lt;li&gt;Storage Size&lt;/li&gt;
&lt;li&gt;Storage Bandwidth&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;b&gt;Repository&lt;/b&gt;&lt;br /&gt;The Cloud Ninja metering block utilizes a storage provider implementation for writing metering data to a metering repository.  The current metering block ships with an OData storage repository provider for writing the metering data to an OData service secured with HMAC authentication scheme.  The solution also includes a data service project that exposes an OData metering service to the metering block and utilizes SQL Azure as the persistent store.  Additional storage providers can be implemented to support peristence of metering data to other repositories.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=cnmb&amp;DownloadId=371233" alt="header-prerequisites.png" title="header-prerequisites.png" /&gt;&lt;br /&gt;NuGet makes is easy to install the prerequisites for the metering block.  In order to build the metering block and run the OData repository and dashboard application you will need the following:
&lt;ul&gt;&lt;li&gt;A development machine running Microsoft Visual Studio 2010 development system SP1&lt;/li&gt;
&lt;li&gt;All required Microsoft Windows updates&lt;/li&gt;
&lt;li&gt;Windows Azure SDK for .NET and Windows Azure Tools for Microsoft Visual Studio – November 2011 Release (1.6)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://nuget.codeplex.com"&gt;NuGet Package Manager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;A Windows Azure subscription with room for at least one hosted service&lt;/li&gt;
&lt;li&gt;A Windows Azure storage account&lt;/li&gt;
&lt;li&gt;A SQL Azure database server&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/devlabs/dd491992"&gt;DevLabs: Code Contracts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.microsoft.com/en-us/download/details.aspx?id=29074"&gt;Microsoft&amp;#174; SQL Server&amp;#174; 2012 PowerPivot&amp;#174; for Microsoft&amp;#174; Excel&amp;#174; 2010&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=cnmb&amp;DownloadId=371234" alt="header-screenshots.png" title="header-screenshots.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Tenant View&lt;/b&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=cnmb&amp;DownloadId=371202" alt="cnmb-tenant-screenshot.png" title="cnmb-tenant-screenshot.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Powerpivot Dashboard&lt;/b&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=cnmb&amp;DownloadId=371227" alt="cnmb-powerpivot-screenshot.png" title="cnmb-powerpivot-screenshot.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Tenant List View (Sorted by Total Weighted Usage)&lt;/b&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=cnmb&amp;DownloadId=371228" alt="cnmb-tenantlist-screenshot.png" title="cnmb-tenantlist-screenshot.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=cnmb&amp;DownloadId=371242" alt="header-team.png" title="header-team.png" /&gt;
&lt;ul&gt;&lt;li&gt;Bhushan Nene&lt;/li&gt;
&lt;li&gt;Kashif Alam&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.linkedin.com/in/ercenk"&gt;Ercenk Keresteci&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.linkedin.com/in/trentswanson"&gt;Trent Swanson&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;div class="rss"&gt;&lt;div class="accentbar"&gt;&lt;span class="left"&gt;&amp;nbsp;&lt;/span&gt;Full Scale 180 - Metering News Feed&lt;span class="right"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://www.fullscale180.com/Blog/post/2012/05/24/Why-Anybody-Wants-to-Meter-a-Multitenant-Application.aspx"&gt;Why Anybody Wants to Meter a Multitenant Application?&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Thursday, May 24, 2012&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://www.fullscale180.com/Blog/category/feed/Metering.aspx"&gt;Full Scale 180 - Metering&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;div id="AdnTop"&gt;&lt;div class="AdnTopLeft" style="float:left"&gt;&lt;/div&gt;&lt;div class="AdnTopRight" style="float:right"&gt;&lt;/div&gt;&lt;div style="clear:both"&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;I remember the times when I started to work for my first job at a big company. It was a large multinational telecommunications company, and one of the earliest concepts I have ever learned was “metering”. Up to that time, I was assuming everything one measures on a telephone switch is all about charging customers, and to understand how many minutes they have spent on the phone. Upon pouring over the code that runs on the switch and the peripherals, I came to realize the code was measuring the use of many things, and all was because of understanding the resource use of various different features, which also happens to be including the speech channels utilized.&lt;/p&gt;  &lt;p&gt;Having a ubiquitous measuring of the resources a solution is using, that does not get in the way of the actual operations of it becomes even a more important concept, if the solution is utilizing resources from a different system, and potentially being charged for them. The urge to learn and analyze the tenants’ respective indirect utilization of Windows Azure resources the ISV is paying for the solution may have many different reasons. A few of the first that may come to mind can be:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;How can I enforce quotas for tenants, or do I have tojQuery1520412992729106918_1337901680773&lt;/li&gt;    &lt;li&gt;Are there any tenants consuming most of the resources?&lt;/li&gt;    &lt;li&gt;Do we need to introduce pricing tiers?&lt;/li&gt;    &lt;li&gt;How does the cost of goods for our solution get affected per tenant?&lt;/li&gt;    &lt;li&gt;Are certain tenants causing starvation for other tenants?&lt;/li&gt;    &lt;li&gt;Is my system behaving accordingly? Are we experiencing any resource usage anomalies?&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The metering application block (which can be found at &lt;a href="http://cnmb.codeplex.com"&gt;http://cnmb.codeplex.com&lt;/a&gt;), attempts to provide a solution to the ISVs asking those questions to themselves about their solution. The goal of the application block is to generate data where an ISV can compare the resource usage among the tenants.&lt;/p&gt;  &lt;p&gt;Of course, given the wide range of pricing packages Microsoft provides, and possible changes Microsoft may take in their pricing policies, it would not be possible to calculate monetary values for those resource usages. It is also important to point out that the collected data is not the equivalent of the data Microsoft uses to calculate the bills at the end of each month. There can surely be differences in the output, since Microsoft billing has a different goal (to bill the customers) than the Cloud Ninja Metering block (to track relative usages across tenants for major resources).&lt;/p&gt;  &lt;h2&gt;What to Meter and Why&lt;/h2&gt;  &lt;p&gt;We have started with mentioning that, the &lt;strong&gt;&lt;u&gt;CNMB is not a mechanism to analyze and double check your Azure bill details&lt;/u&gt;&lt;/strong&gt;, however it is meant to provide the relative resource usage of the tenants. But what exactly do we need to measure to see the relative usage patterns? A good starting point is whatever is already there, provided by the Windows Azure page as the main pivots for a pricing discussion. &lt;/p&gt;  &lt;p&gt;To make our point about metering not being related with the pricing, we also included a provider that measures the ingress data (data coming to the data center), which is not charged by Microsoft. The reason we chose to provide this is, heavy incoming data traffic by certain tenants may indicate additional data usage on certain other resources, such as compute time.&lt;/p&gt;  &lt;p&gt;You can obviously start measuring many different metrics; however the block comes with 5 default providers that map to the major pivots:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Blob size&lt;/strong&gt;: Measured by the &lt;u&gt;blob store size provider&lt;/u&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Database size&lt;/strong&gt;: Measured by the &lt;u&gt;database size provider&lt;/u&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Bandwidth&lt;/strong&gt; : Measured by the &lt;u&gt;IIS bandwidth provider&lt;/u&gt;, the &lt;u&gt;database bandwidth provider&lt;/u&gt; and the &lt;u&gt;blob bandwidth provider&lt;/u&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Of course it goes without saying that depending on the solutions needs, there may be needs for measuring other aspects. Number of documents processed, active users, queue lengths could be among those.&lt;/p&gt;  &lt;p&gt;In designing the block, we concentrated on four tenets:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Block can be easily hosted in any hosting application, and does not depend on Azure runtime&lt;/li&gt;    &lt;li&gt;Does not require a code change for the related application, and be application agnostic&lt;/li&gt;    &lt;li&gt;Rely heavily on configuration, not coding&lt;/li&gt;    &lt;li&gt;Easily extensible&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;You can reach us at &lt;a href="mailto:info@fullscale180.com"&gt;info@fullscale180.com&lt;/a&gt; for further questions/comments.&lt;/p&gt;  &lt;p&gt;Have a great day!&lt;/p&gt;&lt;div id="AdnBottom"&gt;&lt;div class="AdnBottomLeft" style="float:left"&gt;&lt;/div&gt;&lt;div class="AdnBottomRight" style="float:right"&gt;&lt;/div&gt;&lt;div style="clear:both"&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://www.fullscale180.com/Blog/post/2012/05/19/Implementing-a-Custom-Provider-for-Cloud-Ninja-Metering-Block.aspx"&gt;Implementing a Custom Provider for Cloud Ninja Metering Block&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Sunday, May 20, 2012&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://www.fullscale180.com/Blog/category/feed/Metering.aspx"&gt;Full Scale 180 - Metering&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;div id="AdnTop"&gt;&lt;div class="AdnTopLeft" style="float:left"&gt;&lt;/div&gt;&lt;div class="AdnTopRight" style="float:right"&gt;&lt;/div&gt;&lt;div style="clear:both"&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;In this post, I will explore how to create a new provider and plug it into to the CNMB framework. One of the requirements for your application to count the number of rows on a table per tenant periodically, and save that for future use, say to understand the heaviest users of the data.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;To create a custom provider you will need to complete these steps:&lt;/p&gt;
&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Implement a class deriving from &lt;span style="font-family: Consolas;"&gt;MeteringProviderBase&lt;/span&gt; that collects data, and publishes to the repository&lt;/li&gt;
&lt;li&gt;Implement the configuration class deriving from &lt;span style="font-family: Consolas;"&gt;ProviderElement&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Decorate the provider class with the configuration class&amp;rsquo; name&lt;/li&gt;
&lt;li&gt;Implement abstract method &lt;span style="font-family: Consolas;"&gt;RegisterType&lt;/span&gt; on the configuration class&lt;/li&gt;
&lt;li&gt;Add the provider&amp;rsquo;s configuration to your host&amp;rsquo;s configuration&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For this, the first step is of course to get the copy of CNMB source from &lt;a href="http://cnmb.codeplex.com"&gt;http://cnmb.codeplex.com&lt;/a&gt;. Then you will need to build the projects first. You will notice there will be a need to refresh some of the NuGet packages, like Reactive Extensions and Transient Fault Handling block from P&amp;amp;P. We have published the source with NuGet &amp;ldquo;Enable Package Restore&amp;rdquo; but there might be a need to manually refresh those.&lt;/p&gt;
&lt;h2&gt;Implementing the provider class&lt;/h2&gt;&lt;br /&gt;&lt;p&gt;I will continue by adding a new Class Library project to the solution named &amp;ldquo;&lt;span style="font-family: Consolas;"&gt;CloundNinja.Metering.RowCountsProvider&lt;/span&gt;&amp;rdquo; and reference the project &amp;ldquo;CloudNinja.Metering.Providers&amp;rdquo;. I will then get rid of the default Class.cs file, and add a new class derives from &lt;span style="font-family: Consolas;"&gt;MeteringProviderBase&lt;/span&gt; , named&amp;nbsp; &lt;span style="font-family: Consolas;"&gt;RowCountsProvider&lt;/span&gt;. The new class needs to implement the following abstract members of the base class:&lt;/p&gt;&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;abstract&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Name { get; }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;abstract&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Initialize();&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;abstract&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Collect();&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;abstract&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Stop();&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;The base class, MeteringProviderBase has a constructor with the following signature that we will need to pass the objects for. These dependencies are used internally by the base class to log anything that happens, post the measurement results to for persisting them, and get the information for the context we need to meter. We will also need to reference the CloudNinja.Metering.Common project for the types on the signature.&lt;/p&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;protected&lt;/span&gt; MeteringProviderBase(IMeteringRepository repository, ILogger logger, IMeteringContext meteringContext)&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Now, we create a constructor for our class, so we can pass those in while registering the provider&amp;rsquo;s class during the block&amp;rsquo;s bootstrap time.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;We do not really have anything to initialize, or get rid of. So we simply say that the provider is initialized, and stopped using the &lt;span style="font-family: Consolas;"&gt;LogInformation&lt;/span&gt; method on the &lt;span style="font-family: Consolas;"&gt;ILogger&lt;/span&gt; interface. The major work to be done is at the &lt;span style="font-family: Consolas;"&gt;Collect&lt;/span&gt;method.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;With this provider, what we can do is to have a list of connection strings, one table each, with a table name to query, and the columns on where to get the tenant ID from and which column to count. We can populate this in the configuration, and pass that in at the constructor. Assuming the list of connection strings and related information as above is passed in, then we can query those data sources in parallel, get the results and write to the metering repository.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;I am not going to describe the full implementation for the Collect method here. Please feel free to download the source at the link.&lt;/p&gt;
&lt;h2&gt;Implementing the configuration class&lt;/h2&gt;&lt;br /&gt;&lt;p&gt;Rest is pretty straightforward. First create a class named &lt;span style="font-family: Consolas;"&gt;TenantRowCountConnectionCollectionElement&lt;/span&gt; deriving from &lt;span style="font-family: Consolas;"&gt;ConfigurationElement&lt;/span&gt;, and add the properties for &lt;span style="font-family: Consolas;"&gt;ServerAlias&lt;/span&gt;, Connect string, table name to collect the data from, the column names where the tenant ID resides and the column to count (we do not want to do a COUNT(*)), and last but not least, a tenant Id pattern, as used throughout the block.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Next step is to create a collection deriving from &lt;span style="font-family: Consolas;"&gt;ConfigurationElementCollection&lt;/span&gt;, and name it as &lt;span style="font-family: Consolas;"&gt;TenantRowCountConnectionCollection&lt;/span&gt;, to contain the connection elements as defined above. And the last class is one deriving from &lt;span style="font-family: Consolas;"&gt;ProviderElement&lt;/span&gt; which also implements the &lt;span style="font-family: Consolas;"&gt;RegisterType&lt;/span&gt; method. Let&amp;rsquo;s name that class as &lt;span style="font-family: Consolas;"&gt;TenantRowCountProviderSettingsElement&lt;/span&gt;.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;In the RegisterType method, we will register the provider with the Unity container to get loaded by the metering block core.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;As the last step as far as coding is concerned, we will need to tell the ProviderElement about which classes to load to read the rest of the configuration. This is going to be done through decorating the provider with the &lt;span style="font-family: Consolas;"&gt;TenantRowCountProviderSettingsElement&lt;/span&gt; class&amp;rsquo;s type name.&lt;/p&gt;
&lt;h2&gt;Decorating the provider class for the configuration&lt;/h2&gt;&lt;br /&gt;&lt;p&gt;We will need to tell the infrastructure, as we mentioned above about the configuration type for that particular provider. To do so, we will need to add this attribute to the provider class:&lt;/p&gt;&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;br /&gt;&lt;pre class="alt"&gt;[ProviderConfigElementType(&lt;span class="str"&gt;"CloundNinja.Metering.RowCountsProvider.Configuration.TenantRowCountProviderSettingsElement, CloundNinja.Metering.RowCountsProvider, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"&lt;/span&gt;)]&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Adding the configuration&lt;/h2&gt;&lt;br /&gt;&lt;p&gt;The configuration of your host application should contain a provider definition like the following:&lt;/p&gt;&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Provider&lt;/span&gt; &lt;span class="attr"&gt;Type&lt;/span&gt;&lt;span class="kwrd"&gt;="CloundNinja.Metering.RowCountsProvider.RowCountsProvider, CloundNinja.Metering.RowCountsProvider, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TenantRowCountMeteringProviderSettings&lt;/span&gt; &lt;span class="attr"&gt;DefaultTenantIdPattern&lt;/span&gt;&lt;span class="kwrd"&gt;="tnt_{.+}"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;StorageAccounts&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;addConnection&lt;/span&gt; &lt;span class="attr"&gt;ServerAlias&lt;/span&gt;&lt;span class="kwrd"&gt;="Storage1"&lt;/span&gt; &lt;span class="attr"&gt;ConnectionString&lt;/span&gt;&lt;span class="kwrd"&gt;="Data Source=.\sqlexpress;Initial Catalog=meteringtest;Integrated Security=SSPI;"&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;        &lt;span class="attr"&gt;TableName&lt;/span&gt;&lt;span class="kwrd"&gt;="table1"&lt;/span&gt; &lt;span class="attr"&gt;TenantIdColumn&lt;/span&gt;&lt;span class="kwrd"&gt;="tenantid"&lt;/span&gt; &lt;span class="attr"&gt;CountColumn&lt;/span&gt;&lt;span class="kwrd"&gt;="value"&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;        &lt;span class="attr"&gt;TenantIdPattern&lt;/span&gt;&lt;span class="kwrd"&gt;="tn_{.+}"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;addConnection&lt;/span&gt; &lt;span class="attr"&gt;ServerAlias&lt;/span&gt;&lt;span class="kwrd"&gt;="Storage2"&lt;/span&gt; &lt;span class="attr"&gt;ConnectionString&lt;/span&gt;&lt;span class="kwrd"&gt;="Data Source=.\sqlexpress;Initial Catalog=meteringtest;Integrated Security=SSPI;"&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;        &lt;span class="attr"&gt;TableName&lt;/span&gt;&lt;span class="kwrd"&gt;="table2"&lt;/span&gt; &lt;span class="attr"&gt;TenantIdColumn&lt;/span&gt;&lt;span class="kwrd"&gt;="tenantid"&lt;/span&gt; &lt;span class="attr"&gt;CountColumn&lt;/span&gt;&lt;span class="kwrd"&gt;="value"&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;        &lt;span class="attr"&gt;TenantIdPattern&lt;/span&gt;&lt;span class="kwrd"&gt;="tn_{.+}"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;addConnection&lt;/span&gt; &lt;span class="attr"&gt;ServerAlias&lt;/span&gt;&lt;span class="kwrd"&gt;="Storage3"&lt;/span&gt; &lt;span class="attr"&gt;ConnectionString&lt;/span&gt;&lt;span class="kwrd"&gt;="Data Source=.\sqlexpress;Initial Catalog=meteringtest;Integrated Security=SSPI;"&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;        &lt;span class="attr"&gt;TableName&lt;/span&gt;&lt;span class="kwrd"&gt;="table3"&lt;/span&gt; &lt;span class="attr"&gt;TenantIdColumn&lt;/span&gt;&lt;span class="kwrd"&gt;="tenantid"&lt;/span&gt; &lt;span class="attr"&gt;CountColumn&lt;/span&gt;&lt;span class="kwrd"&gt;="value"&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;        &lt;span class="attr"&gt;TenantIdPattern&lt;/span&gt;&lt;span class="kwrd"&gt;="tn_{.+}"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;StorageAccounts&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;TenantRowCountMeteringProviderSettings&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Provider&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;You can find the sample project file in the downloads section of &lt;a href="http://cnmb.codeplex.com"&gt;http://cnmb.codeplex.com&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Have a great weekend!&lt;/p&gt;&lt;br /&gt;&lt;p&gt;-e&lt;/p&gt;&lt;div id="AdnBottom"&gt;&lt;div class="AdnBottomLeft" style="float:left"&gt;&lt;/div&gt;&lt;div class="AdnBottomRight" style="float:right"&gt;&lt;/div&gt;&lt;div style="clear:both"&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://www.fullscale180.com/Blog/post/2012/05/18/Metering-block-internals.aspx"&gt;Metering block internals&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Friday, May 18, 2012&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://www.fullscale180.com/Blog/category/feed/Metering.aspx"&gt;Full Scale 180 - Metering&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;div id="AdnTop"&gt;&lt;div class="AdnTopLeft" style="float:left"&gt;&lt;/div&gt;&lt;div class="AdnTopRight" style="float:right"&gt;&lt;/div&gt;&lt;div style="clear:both"&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Greetings all. In this post I want to get a little bit deeper into the block&amp;rsquo;s data collection components&amp;rsquo; implementation.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;At the core of the metering block are two main concepts, the TickTock component and the providers. The TickTock component is a concept we borrowed from the Patterns and Practices Microsoft Enterprise Library 5.0 Integration Pack for Windows Azure, The Autoscaling Application Block which we have also contributed. The heart of the Autoscaling block is a sub-component referred as &amp;ldquo;Metronome&amp;rdquo;, we are using a similar concept, with a few changes in the Metering core as well and named it as &amp;ldquo;TickTock&amp;rdquo;.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;After the block is started the Start() method gets hold of the custom configuration section. This results in getting the configuration object graph built by the .Net framework. The mandatory CreateNewElement() method on the ProvidersCollection class, derived from the ConfigurationElementCollection is the one that is responsible for loading the appropriate provider configuration type into the AppDomain with the typical GetType(), Activator.CreateInstance() pattern. The provider&amp;rsquo;s class should carry a custom attribute which specifies the type for the configuration element for the provider. Using this pattern and getting the type for the configuration element through the custom attribute, this method for the collection knows which collection element class, thus the appropriate element for the provider needs to be loaded in and activated.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;At this point we will have the whole configuration section loaded, with the appropriate provider types loaded into the AppDomain.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The metering block Start() method calls the Initialize() method and this in turn continues with calling the RegisterType() method of the providers that implement the ITypeRegistration interface. Each provider configuration element, that derives from ProviderElement base class implements that interface, and is responsible for registering the respective provider type with the Unity framework.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Having completed loading in the provider types, and getting them registered with Unity, next step Initialize() does is to register the Collect() methods of the provider with the TickTock class, with their collect intervals, so TickTock can call the Collect() methods at those intervals. We utilize Reactive Extensions for the TickTock class to call the Collect() methods of the providers.&lt;/p&gt;&lt;div id="AdnBottom"&gt;&lt;div class="AdnBottomLeft" style="float:left"&gt;&lt;/div&gt;&lt;div class="AdnBottomRight" style="float:right"&gt;&lt;/div&gt;&lt;div style="clear:both"&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="accentbar"&gt;&lt;span class="left"&gt;&amp;nbsp;&lt;/span&gt;Full Scale 180 - Metering News Feed&lt;span class="right"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=cnmb&amp;DownloadId=371204" alt="logo-footer.png" title="logo-footer.png" /&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>trentmswanson</author><pubDate>Tue, 03 Jul 2012 15:41:26 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20120703034126P</guid></item><item><title>Updated Release: v1 Release (May 19, 2012)</title><link>http://cnmb.codeplex.com/releases/view/86860</link><description>&lt;div class="wikidoc"&gt;First edition of the Cloud Ninja Metering Block.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;It looks like the Nuget package restore is not working automatically for some installations for Reactive Extensions and Unity. Workaround is to uninstall the related packages in the projects manually and re-install them again.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Sample implementation of  a provider is also included, with detailed steps for how to create a custom provider, posted at &lt;a href="http://www.fullscale180.com/Blog/post/2012/05/19/Implementing-a-Custom-Provider-for-Cloud-Ninja-Metering-Block.aspx"&gt;http://www.fullscale180.com/Blog/post/2012/05/19/Implementing-a-Custom-Provider-for-Cloud-Ninja-Metering-Block.aspx&lt;/a&gt;.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>ercenk</author><pubDate>Sun, 20 May 2012 21:16:39 GMT</pubDate><guid isPermaLink="false">Updated Release: v1 Release (May 19, 2012) 20120520091639P</guid></item><item><title>Released: v1 Release (May 19, 2012)</title><link>http://cnmb.codeplex.com/releases/view/86860</link><description>
&lt;div class="wikidoc"&gt;First edition of the Cloud Ninja Metering Block.&lt;br&gt;
&lt;br&gt;
&lt;b&gt;It looks like the Nuget package restore is not working automatically for some installations for Reactive Extensions and Unity. Workaround is to uninstall the related packages in the projects manually and re-install them again.&lt;/b&gt;&lt;br&gt;
&lt;br&gt;
Sample implementation of a provider is also included, with detailed steps for how to create a custom provider, posted at
&lt;a href="http://www.fullscale180.com/Blog/post/2012/05/19/Implementing-a-Custom-Provider-for-Cloud-Ninja-Metering-Block.aspx"&gt;
http://www.fullscale180.com/Blog/post/2012/05/19/Implementing-a-Custom-Provider-for-Cloud-Ninja-Metering-Block.aspx&lt;/a&gt;.&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
</description><author></author><pubDate>Sun, 20 May 2012 21:16:39 GMT</pubDate><guid isPermaLink="false">Released: v1 Release (May 19, 2012) 20120520091639P</guid></item><item><title>Updated Release: v1 Release (May 19, 2012)</title><link>http://cnmb.codeplex.com/releases/view/86860</link><description>&lt;div class="wikidoc"&gt;First edition of the Cloud Ninja Metering Block.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;It looks like the Nuget package restore is not working automatically for some installations for Reactive Extensions and Unity. Workaround is to uninstall the related packages in the projects manually and re-install them again.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Sample implementation of  a provider is also included, with detailed steps for how to create a custom provider, posted at &lt;a href="http://www.fullscale180.com/Blog/post/2012/05/19/Implementing-a-Custom-Provider-for-Cloud-Ninja-Metering-Block.aspx"&gt;http://www.fullscale180.com/Blog/post/2012/05/19/Implementing-a-Custom-Provider-for-Cloud-Ninja-Metering-Block.aspx&lt;/a&gt;.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>ercenk</author><pubDate>Sun, 20 May 2012 21:15:50 GMT</pubDate><guid isPermaLink="false">Updated Release: v1 Release (May 19, 2012) 20120520091550P</guid></item><item><title>Updated Release: v1 Release (May 19, 2012)</title><link>http://cnmb.codeplex.com/releases/view/86860</link><description>&lt;div class="wikidoc"&gt;First edition of the Cloud Ninja Metering Block.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;It looks like the Nuget package restore is not working automatically for some installations for Reactive Extensions and Unity. Workaround is to uninstall the related packages in the projects manually and re-install them again.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Sample implementation of  a provider is uploaded, with steps posted at &lt;a href="http://www.fullscale180.com/Blog/post/2012/05/19/Implementing-a-Custom-Provider-for-Cloud-Ninja-Metering-Block.aspx"&gt;http://www.fullscale180.com/Blog/post/2012/05/19/Implementing-a-Custom-Provider-for-Cloud-Ninja-Metering-Block.aspx&lt;/a&gt;.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>ercenk</author><pubDate>Sun, 20 May 2012 01:51:56 GMT</pubDate><guid isPermaLink="false">Updated Release: v1 Release (May 19, 2012) 20120520015156A</guid></item><item><title>Released: v1 Release (May 19, 2012)</title><link>http://cnmb.codeplex.com/releases/view/86860</link><description>
&lt;div class="wikidoc"&gt;First edition of the Cloud Ninja Metering Block.&lt;br&gt;
&lt;br&gt;
&lt;b&gt;It looks like the Nuget package restore is not working automatically for some installations for Reactive Extensions and Unity. Workaround is to uninstall the related packages in the projects manually and re-install them again.&lt;/b&gt;&lt;br&gt;
&lt;br&gt;
Sample implementation of a provider is uploaded, with steps posted at &lt;a href="http://www.fullscale180.com/Blog/post/2012/05/19/Implementing-a-Custom-Provider-for-Cloud-Ninja-Metering-Block.aspx"&gt;
http://www.fullscale180.com/Blog/post/2012/05/19/Implementing-a-Custom-Provider-for-Cloud-Ninja-Metering-Block.aspx&lt;/a&gt;.&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
</description><author></author><pubDate>Sun, 20 May 2012 01:51:56 GMT</pubDate><guid isPermaLink="false">Released: v1 Release (May 19, 2012) 20120520015156A</guid></item><item><title>Updated Release: v1 Release (May 19, 2012)</title><link>http://cnmb.codeplex.com/releases/view/86860</link><description>&lt;div class="wikidoc"&gt;First edition of the Cloud Ninja Metering Block.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;It looks like the Nuget package restore is not working automatically for some installations for Reactive Extensions and Unity. Workaround is to uninstall the related packages in the projects manually and re-install them again.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Sample implementation of  a provider is uploaded, with steps posted at http://www.fullscale180.com/Blog/post/2012/05/19/Implementing-a-Custom-Provider-for-Cloud-Ninja-Metering-Block.aspx.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>ercenk</author><pubDate>Sun, 20 May 2012 01:51:32 GMT</pubDate><guid isPermaLink="false">Updated Release: v1 Release (May 19, 2012) 20120520015132A</guid></item><item><title>Updated Release: v1 Release (May 19, 2012)</title><link>http://cnmb.codeplex.com/releases/view/86860</link><description>&lt;div class="wikidoc"&gt;First edition of the Cloud Ninja Metering Block.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;It looks like the Nuget package restore is not working automatically for some installations for Reactive Extensions and Unity. Workaround is to uninstall the related packages in the projects manually and re-install them again.&lt;/b&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>ercenk</author><pubDate>Sun, 20 May 2012 01:50:01 GMT</pubDate><guid isPermaLink="false">Updated Release: v1 Release (May 19, 2012) 20120520015001A</guid></item><item><title>Updated Wiki: Home</title><link>http://cnmb.codeplex.com/wikipage?version=45</link><description>&lt;div class="wikidoc"&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=cnmb&amp;DownloadId=371232" alt="header-project-description.png" title="header-project-description.png" /&gt;&lt;br /&gt;The Cloud Ninja Metering Block is an extensible and reusable software component designed to assist software developers with the metering of tenant resource usage in a multi-tenant solution on the Windows Azure platform.&lt;br /&gt;&lt;br /&gt;The need to meter and monitor resource usage at the tenant level is a common requirement for multi-tenant solutions.  This metering data is commonly used to enforce quotas, set pricing, understand solution cost breakdown by tenant, generate alerts, or identify tenants which may be abusing the solution.  Regardless of how this data is used, a core requirement is to be able to capture and store this data in a form that it can be utilized for the purposes.&lt;br /&gt;&lt;br /&gt;You can view a running demo deployment, which is currently metering THE cloud ninja - multi-tenant application here:&lt;br /&gt;&lt;a href="http://cnmb.cloudapp.net"&gt;http://cnmb.cloudapp.net&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=cnmb&amp;DownloadId=371235" alt="header-solution-overview.png" title="header-solution-overview.png" /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=cnmb&amp;DownloadId=371281" alt="cnmb-overview.png" title="cnmb-overview.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Metering Block&lt;/b&gt;&lt;br /&gt;The metering block ships as a hostable runtime component that can be deployed and hosted in an on-premise windows services, console application; or to Windows Azure either in it&amp;#39;s own role or as part of another role for an existing solution.  The metering block comes with a number of providers for collecting metering data from existing logs, and can be extended with custom providers for collecting metering data from other sources, such as custom logs, views, etc...&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Metering Providers&lt;/b&gt;
&lt;ul&gt;&lt;li&gt;Database Size&lt;/li&gt;
&lt;li&gt;Database Bandwidth&lt;/li&gt;
&lt;li&gt;W3C Logs (Bandwidth / Requests)&lt;/li&gt;
&lt;li&gt;Storage Size&lt;/li&gt;
&lt;li&gt;Storage Bandwidth&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;b&gt;Repository&lt;/b&gt;&lt;br /&gt;The Cloud Ninja metering block utilizes a storage provider implementation for writing metering data to a metering repository.  The current metering block ships with an OData storage repository provider for writing the metering data to an OData service secured with HMAC authentication scheme.  The solution also includes a data service project that exposes an OData metering service to the metering block and utilizes SQL Azure as the persistent store.  Additional storage providers can be implemented to support peristence of metering data to other repositories.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=cnmb&amp;DownloadId=371233" alt="header-prerequisites.png" title="header-prerequisites.png" /&gt;&lt;br /&gt;NuGet makes is easy to install the prerequisites for the metering block.  In order to build the metering block and run the OData repository and dashboard application you will need the following:
&lt;ul&gt;&lt;li&gt;A development machine running Microsoft Visual Studio 2010 development system SP1&lt;/li&gt;
&lt;li&gt;All required Microsoft Windows updates&lt;/li&gt;
&lt;li&gt;Windows Azure SDK for .NET and Windows Azure Tools for Microsoft Visual Studio – November 2011 Release (1.6)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://nuget.codeplex.com"&gt;NuGet Package Manager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;A Windows Azure subscription with room for at least one hosted service&lt;/li&gt;
&lt;li&gt;A Windows Azure storage account&lt;/li&gt;
&lt;li&gt;A SQL Azure database server&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/devlabs/dd491992"&gt;DevLabs: Code Contracts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.microsoft.com/en-us/download/details.aspx?id=29074"&gt;Microsoft&amp;#174; SQL Server&amp;#174; 2012 PowerPivot&amp;#174; for Microsoft&amp;#174; Excel&amp;#174; 2010&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=cnmb&amp;DownloadId=371234" alt="header-screenshots.png" title="header-screenshots.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Tenant View&lt;/b&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=cnmb&amp;DownloadId=371202" alt="cnmb-tenant-screenshot.png" title="cnmb-tenant-screenshot.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Powerpivot Dashboard&lt;/b&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=cnmb&amp;DownloadId=371227" alt="cnmb-powerpivot-screenshot.png" title="cnmb-powerpivot-screenshot.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Tenant List View (Sorted by Total Weighted Usage)&lt;/b&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=cnmb&amp;DownloadId=371228" alt="cnmb-tenantlist-screenshot.png" title="cnmb-tenantlist-screenshot.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=cnmb&amp;DownloadId=371242" alt="header-team.png" title="header-team.png" /&gt;
&lt;ul&gt;&lt;li&gt;Bhushan Nene&lt;/li&gt;
&lt;li&gt;Kashif Alam&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.linkedin.com/in/ercenk"&gt;Ercenk Keresteci&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.linkedin.com/in/trentswanson"&gt;Trent Swanson&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;div class="rss"&gt;&lt;div class="accentbar"&gt;&lt;span class="left"&gt;&amp;nbsp;&lt;/span&gt;Full Scale 180 - Metering News Feed&lt;span class="right"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://www.fullscale180.com/Blog/post/2012/05/18/Configuring-CloudNinja-Metering-Block.aspx"&gt;Configuring CloudNinja Metering Block&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Friday, May 18, 2012&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://www.fullscale180.com/Blog/category/feed/Metering.aspx"&gt;Full Scale 180 - Metering&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;div id="AdnTop"&gt;&lt;div class="AdnTopLeft" style="float:left"&gt;&lt;/div&gt;&lt;div class="AdnTopRight" style="float:right"&gt;&lt;/div&gt;&lt;div style="clear:both"&gt;&lt;/div&gt;&lt;/div&gt;&lt;pre class="csharpcode"&gt;&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Greetings to all. We have recently published yet another exciting project to the Azure community at &lt;a href="http://cnmb.codeplex.com"&gt;http://cnmb.codeplex.com&lt;/a&gt; at the end of the previous month. We will try to add more details on its usage as we find time here on our blog. This post’s topic is on configuring the block host.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The first decision is where to host the block. You can have a multitude of different combinations on the location, such as a Windows Service, an Azure worker role, or a web role. For the sake of simplicity, I will explain how you can configure to run it in a web role. We will continue this topic on a different post soon on how to continue this on the same role for the publishing part of the block.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Starting with Azure SDK 1.3, the web roles allow you to access the full IIS functionality. At the most basic level, the side effect of this is you will need to think about having two different hosts running your web role code. One host is the w3wp.exe process running your site’s code, and the other being the WaIISHost.exe process, hosting your RoleEntryPoint (which happens to be your WebRole class in the WebRole.cs file, if you have started with the Azure Web Role template in VS 2010).&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Since our code is living in the .Net universe, each process, thus AppDomain need to grab their own respective .config files. Thus, there is a need to create a new file in your project called WaIISHost.exe.config, along your customary web.config.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://www.fullscale180.com/Blog/image.axd?picture=clip_image001.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image001" border="0" alt="clip_image001" src="http://www.fullscale180.com/Blog/image.axd?picture=clip_image001_thumb.png" width="244" height="96"&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Hmm, the team here looks like working on some new enhancements…&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Anyhow, once you create the new file, you will need to think about 3 new points:&lt;/p&gt;&lt;br /&gt;&lt;p&gt;1. Add the reference for the custom configuration sections. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;2. The common configuration for the block.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;3. The provider configurations&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Let’s start with the configuration section references.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;We do use the Patterns and Practices’ Unity Application Block (&lt;a href="http://unity.codeplex.com/"&gt;http://unity.codeplex.com/&lt;/a&gt;), so the Unity configuration sections, and also &lt;a href="http://msdn.microsoft.com/en-us/library/hh680934(v=PandP.50).aspx"&gt;the Transient Fault Handling Application Block from Enterprise Library 5.0 Integration Pack for Windows Azure&lt;/a&gt;. So you will need to add those, along with the Metering block’s custom section reference. An example will look like this:&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;configSections&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;section&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="MeteringConfiguration"&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="CloudNinja.Metering.Common.Configuration.MeteringSection, CloudNinja.Metering.Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;             &lt;span class="attr"&gt;allowLocation&lt;/span&gt;&lt;span class="kwrd"&gt;="true"&lt;/span&gt; &lt;span class="attr"&gt;allowDefinition&lt;/span&gt;&lt;span class="kwrd"&gt;="Everywhere"&lt;/span&gt; &lt;span class="attr"&gt;allowExeDefinition&lt;/span&gt;&lt;span class="kwrd"&gt;="MachineToApplication"&lt;/span&gt; &lt;span class="attr"&gt;overrideModeDefault&lt;/span&gt;&lt;span class="kwrd"&gt;="Allow"&lt;/span&gt; &lt;span class="attr"&gt;restartOnExternalChanges&lt;/span&gt;&lt;span class="kwrd"&gt;="true"&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;             &lt;span class="attr"&gt;requirePermission&lt;/span&gt;&lt;span class="kwrd"&gt;="true"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;section&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="typeRegistrationProvidersConfiguration"&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.TypeRegistrationProvidersConfigurationSection, Microsoft.Practices.EnterpriseLibrary.Common, Version=5.0.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;section&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="RetryPolicyConfiguration"&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="Microsoft.Practices.EnterpriseLibrary.WindowsAzure.TransientFaultHandling.Configuration.RetryPolicyConfigurationSettings, Microsoft.Practices.EnterpriseLibrary.WindowsAzure.TransientFaultHandling, Version=5.0.1118.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"&lt;/span&gt; &lt;span class="attr"&gt;requirePermission&lt;/span&gt;&lt;span class="kwrd"&gt;="true"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;configSections&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, "Courier New", courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, "Courier New", courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;p&gt;Following this will be the common configuration for the block within the custom configuration section marked between the tags:&lt;/p&gt;&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;MeteringConfiguration&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;MeteringConfiguration&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, "Courier New", courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The block uses a blob lease to determine the master for a given hosting environment who will collect the data and write to the repository. This method is required if you happen to be hosting the block in a role which runs in multiple instances. The BlockConnectionString attribute contains the Azure storage account connection string that contains this. The rest is automatic, the block creates its own container and the blob to put the leases on.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;You can also specify a number of connection strings both for Azure storage accounts as well as SQL Azure connections if you want to consolidate all of your connection strings in one place and refer to them in the rest of the configuration section.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;An example for this will be:&lt;/p&gt;&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;   &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;CommonSettings&lt;/span&gt; &lt;span class="attr"&gt;BlockConnectionString&lt;/span&gt;&lt;span class="kwrd"&gt;="DefaultEndpointsProtocol=https;AccountName=cnm;AccountKey=YfWiIGe/BQtLZzMOUtdkth7KLKyyUlVYl83vvCSptYHJgCVcP37i03/JIOQvYblwZlmp/a0fVXT5nGi9jQzuIg=="&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ConnectionStrings&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;clearConnectionStrings&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;addConnectionString&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;="Common"&lt;/span&gt; &lt;span class="attr"&gt;Value&lt;/span&gt;&lt;span class="kwrd"&gt;="DefaultEndpointsProtocol=https;AccountName=cnm;AccountKey=YfWiIGe/BQtLZzMOUtdkth7KLKyyUlVYl83vvCSptYHJgCVcP37i03/JIOQvYblwZlmp/a0fVXT5nGi9jQzuIg=="&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ConnectionStrings&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;CommonSettings&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, "Courier New", courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, "Courier New", courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Now it is time to come to the providers’ configuration. Please note that you can specify a default collect interval for all of the providers here, but each provider can override this value at their own respective configuration elements. We support 5 providers out of the box. They are:&lt;/p&gt;&lt;br /&gt;&lt;p&gt;1. Database size provider&lt;/p&gt;&lt;br /&gt;&lt;p&gt;2. Database bandwidth provider&lt;/p&gt;&lt;br /&gt;&lt;p&gt;3. IIS bandwidth provider&lt;/p&gt;&lt;br /&gt;&lt;p&gt;4. Blob size provider&lt;/p&gt;&lt;br /&gt;&lt;p&gt;5. Blog bandwidth provider&lt;/p&gt;&lt;br /&gt;&lt;p&gt;They all have a reference to the type that implements the provider as the Type attribute at the Provider element, and also a CollectInterval attribute. And each provider has it’s own particular configuration after that. Most of it after that almost repeats, but there are two important points about this.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;1. Bookmark support for parsing logs&lt;/p&gt;&lt;br /&gt;&lt;p&gt;2. Tenant identifier pattern&lt;/p&gt;&lt;br /&gt;&lt;p&gt;We support keeping a bookmark of the last parsed log for both IIS logs and the blob storage analytics logs. So we need a repository connection string for both IISLogsParserBookmarkRepository and BlobBandwidthLogsParserBookmarkRepository attributes. They may point to the same storage account. The providers automatically create a table on those accounts where they start marking the last log file and the line they parsed.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The other point is telling the providers on how to identify a tenant ID. The attribute DefaultTenantIdPattern as the default setting for the provider and TenantIdPattern connection location specific one both have the same template. It is a BEGIN_REGEX{MIDDLE_REGEX}END_REGEX template, where the start, middle and end of the tenant ID patter are marked with the curly braces. You can basically put in any regex here, as long as it conforms to the expected patterns by the resources the providers are measuring.&lt;/p&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;There are also a couple of details for the IIS Log provider and the blob provider. The first one supports the location of the tenant identifier. The values can be UriStem, Hostheader and UriQuery. Those will translate to the column names on the IIS logs, as defined by the W3C standar column names. The default IIS log configuration on web roles, when collected through the Windows Azure Diagnostics (WAD) subsystem. The next one, about the blob size provider is to tell the provider where to find the blobs as the base container. It is provided by the TenantsBaseContainerPrefix attribute on the blob size provider.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;p&gt;Rest is almost repeating the same pattern. Specify a connection string, either explicitly, or refer to one of the common connection strings by their name. Following is an example how you can specify the settings for the various providers.&lt;/p&gt;&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Providers&lt;/span&gt; &lt;span class="attr"&gt;DefaultCollectionInterval&lt;/span&gt;&lt;span class="kwrd"&gt;="03:00:00"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Providers&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Provider&lt;/span&gt; &lt;span class="attr"&gt;Type&lt;/span&gt;&lt;span class="kwrd"&gt;="CloudNinja.Metering.Providers.WebRole.IISLogProvider, CloudNinja.Metering.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"&lt;/span&gt; &lt;span class="attr"&gt;CollectInterval&lt;/span&gt;&lt;span class="kwrd"&gt;="01:00:00"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;IISLogMeteringProviderSettings&lt;/span&gt; &lt;span class="attr"&gt;IISLogsRepositoryConnStr&lt;/span&gt;&lt;span class="kwrd"&gt;="DefaultEndpointsProtocol=https;AccountName=friday;AccountKey=q0JAToIm1qt2SnxfedcHjy6TxSPBSNYv5oVrhCwFTVacaXQ6/8d7iI34ETHk0FwBeKCz6HETlW4YjWzmg2R6lQ=="&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;              &lt;span class="attr"&gt;IISLogsParserBookmarkRepository&lt;/span&gt;&lt;span class="kwrd"&gt;="DefaultEndpointsProtocol=https;AccountName=cnm;AccountKey=YfWiIGe/BQtLZzMOUtdkth7KLKyyUlVYl83vvCSptYHJgCVcP37i03/JIOQvYblwZlmp/a0fVXT5nGi9jQzuIg=="&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;              &lt;span class="attr"&gt;TenantIdentifierLocation&lt;/span&gt;&lt;span class="kwrd"&gt;="hostheader"&lt;/span&gt; &lt;span class="attr"&gt;TenantIdentifierPattern&lt;/span&gt;&lt;span class="kwrd"&gt;="{.*}.thecloudninja.com"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Provider&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Provider&lt;/span&gt; &lt;span class="attr"&gt;Type&lt;/span&gt;&lt;span class="kwrd"&gt;="CloudNinja.Metering.Providers.SQLAzure.DatabaseSizeProvider, CloudNinja.Metering.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"&lt;/span&gt; &lt;span class="attr"&gt;CollectInterval&lt;/span&gt;&lt;span class="kwrd"&gt;="01:00:00"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;DatabaseSizeMeteringProviderSettings&lt;/span&gt; &lt;span class="attr"&gt;DefaultTenantIdPattern&lt;/span&gt;&lt;span class="kwrd"&gt;="tnt_{.+}"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;DatabaseServers&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;              &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;clearConnectionStrings&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;              &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;addConnectionString&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;="Server1"&lt;/span&gt; &lt;span class="attr"&gt;Value&lt;/span&gt;&lt;span class="kwrd"&gt;="Persist Security Info=False;Integrated Security=false;server=ors6ecpxj2.database.windows.net;UID=AzureSaas@ors6ecpxj2;PWD=Bloomington!"&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;                  &lt;span class="attr"&gt;TenantIdPattern&lt;/span&gt;&lt;span class="kwrd"&gt;="tnt_{.+}"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;DatabaseServers&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;          &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;DatabaseSizeMeteringProviderSettings&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Provider&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Provider&lt;/span&gt; &lt;span class="attr"&gt;Type&lt;/span&gt;&lt;span class="kwrd"&gt;="CloudNinja.Metering.Providers.AzureBlob.BlobSizeProvider, CloudNinja.Metering.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"&lt;/span&gt; &lt;span class="attr"&gt;CollectInterval&lt;/span&gt;&lt;span class="kwrd"&gt;="01:00:00"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;BlobSizeMeteringProviderSettings&lt;/span&gt; &lt;span class="attr"&gt;DefaultTenantIdPattern&lt;/span&gt;&lt;span class="kwrd"&gt;="tnt-{.+}"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;StorageAccounts&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;clearStorageAccount&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;addStorageAccount&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;="cn-tenantstore"&lt;/span&gt; &lt;span class="attr"&gt;TenantsBaseContainerPrefix&lt;/span&gt;&lt;span class="kwrd"&gt;=""&lt;/span&gt; &lt;span class="attr"&gt;ConnectionString&lt;/span&gt;&lt;span class="kwrd"&gt;="DefaultEndpointsProtocol=https;AccountName=friday;AccountKey=q0JAToIm1qt2SnxfedcHjy6TxSPBSNYv5oVrhCwFTVacaXQ6/8d7iI34ETHk0FwBeKCz6HETlW4YjWzmg2R6lQ=="&lt;/span&gt; &lt;span class="attr"&gt;TenantIdPattern&lt;/span&gt;&lt;span class="kwrd"&gt;="tnt[ps]-{.+}"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;          &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;StorageAccounts&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;          &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;BlobSizeMeteringProviderSettings&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Provider&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Provider&lt;/span&gt; &lt;span class="attr"&gt;Type&lt;/span&gt;&lt;span class="kwrd"&gt;="CloudNinja.Metering.Providers.SQLAzure.DatabaseBandwidthUsageProvider, CloudNinja.Metering.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"&lt;/span&gt; &lt;span class="attr"&gt;CollectInterval&lt;/span&gt;&lt;span class="kwrd"&gt;="01:00:00"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;DatabaseBandwidthMeteringProviderSettings&lt;/span&gt; &lt;span class="attr"&gt;DefaultTenantIdPattern&lt;/span&gt;&lt;span class="kwrd"&gt;="tnt_{.+}"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;DatabaseServers&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;              &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;clearConnectionStrings&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;              &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;addConnectionString&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;="Server1"&lt;/span&gt; &lt;span class="attr"&gt;Value&lt;/span&gt;&lt;span class="kwrd"&gt;="Persist Security Info=False;Integrated Security=false;server=ors6ecpxj2.database.windows.net;UID=AzureSaas@ors6ecpxj2;PWD=Bloomington!"&lt;/span&gt; &lt;span class="attr"&gt;TenantIdPattern&lt;/span&gt;&lt;span class="kwrd"&gt;="tnt_{.+}"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;DatabaseServers&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;          &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;DatabaseBandwidthMeteringProviderSettings&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Provider&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Provider&lt;/span&gt; &lt;span class="attr"&gt;Type&lt;/span&gt;&lt;span class="kwrd"&gt;="CloudNinja.Metering.Providers.AzureBlob.BlobBandwidthProvider, CloudNinja.Metering.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"&lt;/span&gt;  &lt;span class="attr"&gt;CollectInterval&lt;/span&gt;&lt;span class="kwrd"&gt;="01:00:00"&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;BlobBandwidthMeteringProviderSettings&lt;/span&gt; &lt;span class="attr"&gt;DefaultTenantIdPattern&lt;/span&gt;&lt;span class="kwrd"&gt;="tnt_{.+}"&lt;/span&gt; &lt;span class="attr"&gt;BlobBandwidthLogsParserBookmarkRepository&lt;/span&gt;&lt;span class="kwrd"&gt;="DefaultEndpointsProtocol=https;AccountName=cnm;AccountKey=YfWiIGe/BQtLZzMOUtdkth7KLKyyUlVYl83vvCSptYHJgCVcP37i03/JIOQvYblwZlmp/a0fVXT5nGi9jQzuIg=="&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;StorageAccounts&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;              &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;clearStorageAccount&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;              &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;addStorageAccount&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;="cn-tenantstore"&lt;/span&gt; &lt;span class="attr"&gt;ConnectionString&lt;/span&gt;&lt;span class="kwrd"&gt;="DefaultEndpointsProtocol=https;AccountName=friday;AccountKey=q0JAToIm1qt2SnxfedcHjy6TxSPBSNYv5oVrhCwFTVacaXQ6/8d7iI34ETHk0FwBeKCz6HETlW4YjWzmg2R6lQ=="&lt;/span&gt; &lt;span class="attr"&gt;TenantIdPattern&lt;/span&gt;&lt;span class="kwrd"&gt;="tnt[ps]-{.+}"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;StorageAccounts&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;          &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;BlobBandwidthMeteringProviderSettings&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Provider&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Providers&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Providers&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, "Courier New", courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;/p&gt;&lt;/p&gt;&lt;div id="AdnBottom"&gt;&lt;div class="AdnBottomLeft" style="float:left"&gt;&lt;/div&gt;&lt;div class="AdnBottomRight" style="float:right"&gt;&lt;/div&gt;&lt;div style="clear:both"&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="accentbar"&gt;&lt;span class="left"&gt;&amp;nbsp;&lt;/span&gt;Full Scale 180 - Metering News Feed&lt;span class="right"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=cnmb&amp;DownloadId=371204" alt="logo-footer.png" title="logo-footer.png" /&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>ercenk</author><pubDate>Fri, 18 May 2012 08:05:23 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20120518080523A</guid></item><item><title>Updated Wiki: Home</title><link>http://cnmb.codeplex.com/wikipage?version=44</link><description>&lt;div class="wikidoc"&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=cnmb&amp;DownloadId=371232" alt="header-project-description.png" title="header-project-description.png" /&gt;&lt;br /&gt;The Cloud Ninja Metering Block is an extensible and reusable software component designed to assist software developers with the metering of tenant resource usage in a multi-tenant solution on the Windows Azure platform.&lt;br /&gt;&lt;br /&gt;The need to meter and monitor resource usage at the tenant level is a common requirement for multi-tenant solutions.  This metering data is commonly used to enforce quotas, set pricing, understand solution cost breakdown by tenant, generate alerts, or identify tenants which may be abusing the solution.  Regardless of how this data is used, a core requirement is to be able to capture and store this data in a form that it can be utilized for the purposes.&lt;br /&gt;&lt;br /&gt;You can view a running demo deployment, which is currently metering THE cloud ninja - multi-tenant application here:&lt;br /&gt;&lt;a href="http://cnmb.cloudapp.net"&gt;http://cnmb.cloudapp.net&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=cnmb&amp;DownloadId=371235" alt="header-solution-overview.png" title="header-solution-overview.png" /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=cnmb&amp;DownloadId=371281" alt="cnmb-overview.png" title="cnmb-overview.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Metering Block&lt;/b&gt;&lt;br /&gt;The metering block ships as a hostable runtime component that can be deployed and hosted in an on-premise windows services, console application; or to Windows Azure either in it&amp;#39;s own role or as part of another role for an existing solution.  The metering block comes with a number of providers for collecting metering data from existing logs, and can be extended with custom providers for collecting metering data from other sources, such as custom logs, views, etc...&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Metering Providers&lt;/b&gt;
&lt;ul&gt;&lt;li&gt;Database Size&lt;/li&gt;
&lt;li&gt;Database Bandwidth&lt;/li&gt;
&lt;li&gt;W3C Logs (Bandwidth / Requests)&lt;/li&gt;
&lt;li&gt;Storage Size&lt;/li&gt;
&lt;li&gt;Storage Bandwidth&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;b&gt;Repository&lt;/b&gt;&lt;br /&gt;The Cloud Ninja metering block utilizes a storage provider implementation for writing metering data to a metering repository.  The current metering block ships with an OData storage repository provider for writing the metering data to an OData service secured with HMAC authentication scheme.  The solution also includes a data service project that exposes an OData metering service to the metering block and utilizes SQL Azure as the persistent store.  Additional storage providers can be implemented to support peristence of metering data to other repositories.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=cnmb&amp;DownloadId=371233" alt="header-prerequisites.png" title="header-prerequisites.png" /&gt;&lt;br /&gt;NuGet makes is easy to install the prerequisites for the metering block.  In order to build the metering block and run the OData repository and dashboard application you will need the following:
&lt;ul&gt;&lt;li&gt;A development machine running Microsoft Visual Studio 2010 development system SP1&lt;/li&gt;
&lt;li&gt;All required Microsoft Windows updates&lt;/li&gt;
&lt;li&gt;Windows Azure SDK for .NET and Windows Azure Tools for Microsoft Visual Studio – November 2011 Release (1.6)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://nuget.codeplex.com"&gt;NuGet Package Manager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;A Windows Azure subscription with room for at least one hosted service&lt;/li&gt;
&lt;li&gt;A Windows Azure storage account&lt;/li&gt;
&lt;li&gt;A SQL Azure database server&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/devlabs/dd491992"&gt;DevLabs: Code Contracts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.microsoft.com/en-us/download/details.aspx?id=29074"&gt;Microsoft&amp;#174; SQL Server&amp;#174; 2012 PowerPivot&amp;#174; for Microsoft&amp;#174; Excel&amp;#174; 2010&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=cnmb&amp;DownloadId=371234" alt="header-screenshots.png" title="header-screenshots.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Tenant View&lt;/b&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=cnmb&amp;DownloadId=371202" alt="cnmb-tenant-screenshot.png" title="cnmb-tenant-screenshot.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Powerpivot Dashboard&lt;/b&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=cnmb&amp;DownloadId=371227" alt="cnmb-powerpivot-screenshot.png" title="cnmb-powerpivot-screenshot.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Tenant List View (Sorted by Total Weighted Usage)&lt;/b&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=cnmb&amp;DownloadId=371228" alt="cnmb-tenantlist-screenshot.png" title="cnmb-tenantlist-screenshot.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=cnmb&amp;DownloadId=371242" alt="header-team.png" title="header-team.png" /&gt;
&lt;ul&gt;&lt;li&gt;Bhushan Nene&lt;/li&gt;
&lt;li&gt;Kashif Alam&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.linkedin.com/in/ercenk"&gt;Ercenk Keresteci&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.linkedin.com/in/trentswanson"&gt;Trent Swanson&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;div class="rss"&gt;&lt;div class="accentbar"&gt;&lt;span class="left"&gt;&amp;nbsp;&lt;/span&gt;Full Scale 180 - Metering News Feed&lt;span class="right"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://www.fullscale180.com/Blog/post/2012/05/18/Configuring-CloudNinja-Metering-Block.aspx"&gt;Configuring CloudNinja Metering Block&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Friday, May 18, 2012&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://www.fullscale180.com/Blog/category/feed/Metering.aspx"&gt;Full Scale 180 - Metering&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;div id="AdnTop"&gt;&lt;div class="AdnTopLeft" style="float:left"&gt;&lt;/div&gt;&lt;div class="AdnTopRight" style="float:right"&gt;&lt;/div&gt;&lt;div style="clear:both"&gt;&lt;/div&gt;&lt;/div&gt;&lt;pre class="csharpcode"&gt;&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Greetings to all. We have recently published yet another exciting project to the Azure community at &lt;a href="http://cnmb.codeplex.com"&gt;http://cnmb.codeplex.com&lt;/a&gt; at the end of the previous month. We will try to add more details on its usage as we find time here on our blog. This post’s topic is on configuring the block host.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The first decision is where to host the block. You can have a multitude of different combinations on the location, such as a Windows Service, an Azure worker role, or a web role. For the sake of simplicity, I will explain how you can configure to run it in a web role. We will continue this topic on a different post soon on how to continue this on the same role for the publishing part of the block.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Starting with Azure SDK 1.3, the web roles allow you to access the full IIS functionality. At the most basic level, the side effect of this is you will need to think about having two different hosts running your web role code. One host is the w3wp.exe process running your site’s code, and the other being the WaIISHost.exe process, hosting your RoleEntryPoint (which happens to be your WebRole class in the WebRole.cs file, if you have started with the Azure Web Role template in VS 2010).&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Since our code is living in the .Net universe, each process, thus AppDomain need to grab their own respective .config files. Thus, there is a need to create a new file in your project called WaIISHost.exe.config, along your customary web.config.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://www.fullscale180.com/Blog/image.axd?picture=clip_image001.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image001" border="0" alt="clip_image001" src="http://www.fullscale180.com/Blog/image.axd?picture=clip_image001_thumb.png" width="244" height="96"&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Hmm, the team here looks like working on some new enhancements…&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Anyhow, once you create the new file, you will need to think about 3 new points:&lt;/p&gt;&lt;br /&gt;&lt;p&gt;1. Add the reference for the custom configuration sections. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;2. The common configuration for the block.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;3. The provider configurations&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Let’s start with the configuration section references.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;We do use the Patterns and Practices’ Unity Application Block (&lt;a href="http://unity.codeplex.com/"&gt;http://unity.codeplex.com/&lt;/a&gt;), so the Unity configuration sections, and also &lt;a href="http://msdn.microsoft.com/en-us/library/hh680934(v=PandP.50).aspx"&gt;the Transient Fault Handling Application Block from Enterprise Library 5.0 Integration Pack for Windows Azure&lt;/a&gt;. So you will need to add those, along with the Metering block’s custom section reference. An example will look like this:&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;configSections&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;section&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="MeteringConfiguration"&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="CloudNinja.Metering.Common.Configuration.MeteringSection, CloudNinja.Metering.Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;             &lt;span class="attr"&gt;allowLocation&lt;/span&gt;&lt;span class="kwrd"&gt;="true"&lt;/span&gt; &lt;span class="attr"&gt;allowDefinition&lt;/span&gt;&lt;span class="kwrd"&gt;="Everywhere"&lt;/span&gt; &lt;span class="attr"&gt;allowExeDefinition&lt;/span&gt;&lt;span class="kwrd"&gt;="MachineToApplication"&lt;/span&gt; &lt;span class="attr"&gt;overrideModeDefault&lt;/span&gt;&lt;span class="kwrd"&gt;="Allow"&lt;/span&gt; &lt;span class="attr"&gt;restartOnExternalChanges&lt;/span&gt;&lt;span class="kwrd"&gt;="true"&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;             &lt;span class="attr"&gt;requirePermission&lt;/span&gt;&lt;span class="kwrd"&gt;="true"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;section&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="typeRegistrationProvidersConfiguration"&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.TypeRegistrationProvidersConfigurationSection, Microsoft.Practices.EnterpriseLibrary.Common, Version=5.0.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;section&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="RetryPolicyConfiguration"&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="Microsoft.Practices.EnterpriseLibrary.WindowsAzure.TransientFaultHandling.Configuration.RetryPolicyConfigurationSettings, Microsoft.Practices.EnterpriseLibrary.WindowsAzure.TransientFaultHandling, Version=5.0.1118.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"&lt;/span&gt; &lt;span class="attr"&gt;requirePermission&lt;/span&gt;&lt;span class="kwrd"&gt;="true"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;configSections&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, "Courier New", courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, "Courier New", courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;p&gt;Following this will be the common configuration for the block within the custom configuration section marked between the tags:&lt;/p&gt;&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;MeteringConfiguration&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;MeteringConfiguration&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, "Courier New", courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The block uses a blob lease to determine the master for a given hosting environment who will collect the data and write to the repository. This method is required if you happen to be hosting the block in a role which runs in multiple instances. The BlockConnectionString attribute contains the Azure storage account connection string that contains this. The rest is automatic, the block creates its own container and the blob to put the leases on.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;You can also specify a number of connection strings both for Azure storage accounts as well as SQL Azure connections if you want to consolidate all of your connection strings in one place and refer to them in the rest of the configuration section.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;An example for this will be:&lt;/p&gt;&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;   &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;CommonSettings&lt;/span&gt; &lt;span class="attr"&gt;BlockConnectionString&lt;/span&gt;&lt;span class="kwrd"&gt;="DefaultEndpointsProtocol=https;AccountName=cnm;AccountKey=YfWiIGe/BQtLZzMOUtdkth7KLKyyUlVYl83vvCSptYHJgCVcP37i03/JIOQvYblwZlmp/a0fVXT5nGi9jQzuIg=="&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ConnectionStrings&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;clearConnectionStrings&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;addConnectionString&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;="Common"&lt;/span&gt; &lt;span class="attr"&gt;Value&lt;/span&gt;&lt;span class="kwrd"&gt;="DefaultEndpointsProtocol=https;AccountName=cnm;AccountKey=YfWiIGe/BQtLZzMOUtdkth7KLKyyUlVYl83vvCSptYHJgCVcP37i03/JIOQvYblwZlmp/a0fVXT5nGi9jQzuIg=="&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ConnectionStrings&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;CommonSettings&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, "Courier New", courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, "Courier New", courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Now it is time to come to the providers’ configuration. Please note that you can specify a default collect interval for all of the providers here, but each provider can override this value at their own respective configuration elements. We support 5 providers out of the box. They are:&lt;/p&gt;&lt;br /&gt;&lt;p&gt;1. Database size provider&lt;/p&gt;&lt;br /&gt;&lt;p&gt;2. Database bandwidth provider&lt;/p&gt;&lt;br /&gt;&lt;p&gt;3. IIS bandwidth provider&lt;/p&gt;&lt;br /&gt;&lt;p&gt;4. Blob size provider&lt;/p&gt;&lt;br /&gt;&lt;p&gt;5. Blog bandwidth provider&lt;/p&gt;&lt;br /&gt;&lt;p&gt;They all have a reference to the type that implements the provider as the Type attribute at the Provider element, and also a CollectInterval attribute. And each provider has it’s own particular configuration after that. Most of it after that almost repeats, but there are two important points about this.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;1. Bookmark support for parsing logs&lt;/p&gt;&lt;br /&gt;&lt;p&gt;2. Tenant identifier pattern&lt;/p&gt;&lt;br /&gt;&lt;p&gt;We support keeping a bookmark of the last parsed log for both IIS logs and the blob storage analytics logs. So we need a repository connection string for both IISLogsParserBookmarkRepository and BlobBandwidthLogsParserBookmarkRepository attributes. They may point to the same storage account. The providers automatically create a table on those accounts where they start marking the last log file and the line they parsed.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The other point is telling the providers on how to identify a tenant ID. The attribute DefaultTenantIdPattern as the default setting for the provider and TenantIdPattern connection location specific one both have the same template. It is a BEGIN_REGEX{MIDDLE_REGEX}END_REGEX template, where the start, middle and end of the tenant ID patter are marked with the curly braces. You can basically put in any regex here, as long as it conforms to the expected patterns by the resources the providers are measuring.&lt;/p&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;There are also a couple of details for the IIS Log provider and the blob provider. The first one supports the location of the tenant identifier. The values can be UriStem, Hostheader and UriQuery. Those will translate to the column names on the IIS logs, as defined by the W3C standar column names. The default IIS log configuration on web roles, when collected through the Windows Azure Diagnostics (WAD) subsystem. The next one, about the blob size provider is to tell the provider where to find the blobs as the base container. It is provided by the TenantsBaseContainerPrefix attribute on the blob size provider.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;p&gt;Rest is almost repeating the same pattern. Specify a connection string, either explicitly, or refer to one of the common connection strings by their name. Following is an example how you can specify the settings for the various providers.&lt;/p&gt;&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Providers&lt;/span&gt; &lt;span class="attr"&gt;DefaultCollectionInterval&lt;/span&gt;&lt;span class="kwrd"&gt;="03:00:00"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Providers&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Provider&lt;/span&gt; &lt;span class="attr"&gt;Type&lt;/span&gt;&lt;span class="kwrd"&gt;="CloudNinja.Metering.Providers.WebRole.IISLogProvider, CloudNinja.Metering.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"&lt;/span&gt; &lt;span class="attr"&gt;CollectInterval&lt;/span&gt;&lt;span class="kwrd"&gt;="01:00:00"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;IISLogMeteringProviderSettings&lt;/span&gt; &lt;span class="attr"&gt;IISLogsRepositoryConnStr&lt;/span&gt;&lt;span class="kwrd"&gt;="DefaultEndpointsProtocol=https;AccountName=friday;AccountKey=q0JAToIm1qt2SnxfedcHjy6TxSPBSNYv5oVrhCwFTVacaXQ6/8d7iI34ETHk0FwBeKCz6HETlW4YjWzmg2R6lQ=="&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;              &lt;span class="attr"&gt;IISLogsParserBookmarkRepository&lt;/span&gt;&lt;span class="kwrd"&gt;="DefaultEndpointsProtocol=https;AccountName=cnm;AccountKey=YfWiIGe/BQtLZzMOUtdkth7KLKyyUlVYl83vvCSptYHJgCVcP37i03/JIOQvYblwZlmp/a0fVXT5nGi9jQzuIg=="&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;              &lt;span class="attr"&gt;TenantIdentifierLocation&lt;/span&gt;&lt;span class="kwrd"&gt;="hostheader"&lt;/span&gt; &lt;span class="attr"&gt;TenantIdentifierPattern&lt;/span&gt;&lt;span class="kwrd"&gt;="{.*}.thecloudninja.com"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Provider&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Provider&lt;/span&gt; &lt;span class="attr"&gt;Type&lt;/span&gt;&lt;span class="kwrd"&gt;="CloudNinja.Metering.Providers.SQLAzure.DatabaseSizeProvider, CloudNinja.Metering.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"&lt;/span&gt; &lt;span class="attr"&gt;CollectInterval&lt;/span&gt;&lt;span class="kwrd"&gt;="01:00:00"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;DatabaseSizeMeteringProviderSettings&lt;/span&gt; &lt;span class="attr"&gt;DefaultTenantIdPattern&lt;/span&gt;&lt;span class="kwrd"&gt;="tnt_{.+}"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;DatabaseServers&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;              &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;clearConnectionStrings&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;              &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;addConnectionString&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;="Server1"&lt;/span&gt; &lt;span class="attr"&gt;Value&lt;/span&gt;&lt;span class="kwrd"&gt;="Persist Security Info=False;Integrated Security=false;server=ors6ecpxj2.database.windows.net;UID=AzureSaas@ors6ecpxj2;PWD=Bloomington!"&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;                  &lt;span class="attr"&gt;TenantIdPattern&lt;/span&gt;&lt;span class="kwrd"&gt;="tnt_{.+}"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;DatabaseServers&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;          &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;DatabaseSizeMeteringProviderSettings&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Provider&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Provider&lt;/span&gt; &lt;span class="attr"&gt;Type&lt;/span&gt;&lt;span class="kwrd"&gt;="CloudNinja.Metering.Providers.AzureBlob.BlobSizeProvider, CloudNinja.Metering.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"&lt;/span&gt; &lt;span class="attr"&gt;CollectInterval&lt;/span&gt;&lt;span class="kwrd"&gt;="01:00:00"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;BlobSizeMeteringProviderSettings&lt;/span&gt; &lt;span class="attr"&gt;DefaultTenantIdPattern&lt;/span&gt;&lt;span class="kwrd"&gt;="tnt-{.+}"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;StorageAccounts&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;clearStorageAccount&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;addStorageAccount&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;="cn-tenantstore"&lt;/span&gt; &lt;span class="attr"&gt;TenantsBaseContainerPrefix&lt;/span&gt;&lt;span class="kwrd"&gt;=""&lt;/span&gt; &lt;span class="attr"&gt;ConnectionString&lt;/span&gt;&lt;span class="kwrd"&gt;="DefaultEndpointsProtocol=https;AccountName=friday;AccountKey=q0JAToIm1qt2SnxfedcHjy6TxSPBSNYv5oVrhCwFTVacaXQ6/8d7iI34ETHk0FwBeKCz6HETlW4YjWzmg2R6lQ=="&lt;/span&gt; &lt;span class="attr"&gt;TenantIdPattern&lt;/span&gt;&lt;span class="kwrd"&gt;="tnt[ps]-{.+}"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;          &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;StorageAccounts&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;          &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;BlobSizeMeteringProviderSettings&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Provider&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Provider&lt;/span&gt; &lt;span class="attr"&gt;Type&lt;/span&gt;&lt;span class="kwrd"&gt;="CloudNinja.Metering.Providers.SQLAzure.DatabaseBandwidthUsageProvider, CloudNinja.Metering.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"&lt;/span&gt; &lt;span class="attr"&gt;CollectInterval&lt;/span&gt;&lt;span class="kwrd"&gt;="01:00:00"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;DatabaseBandwidthMeteringProviderSettings&lt;/span&gt; &lt;span class="attr"&gt;DefaultTenantIdPattern&lt;/span&gt;&lt;span class="kwrd"&gt;="tnt_{.+}"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;DatabaseServers&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;              &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;clearConnectionStrings&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;              &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;addConnectionString&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;="Server1"&lt;/span&gt; &lt;span class="attr"&gt;Value&lt;/span&gt;&lt;span class="kwrd"&gt;="Persist Security Info=False;Integrated Security=false;server=ors6ecpxj2.database.windows.net;UID=AzureSaas@ors6ecpxj2;PWD=Bloomington!"&lt;/span&gt; &lt;span class="attr"&gt;TenantIdPattern&lt;/span&gt;&lt;span class="kwrd"&gt;="tnt_{.+}"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;DatabaseServers&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;          &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;DatabaseBandwidthMeteringProviderSettings&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Provider&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Provider&lt;/span&gt; &lt;span class="attr"&gt;Type&lt;/span&gt;&lt;span class="kwrd"&gt;="CloudNinja.Metering.Providers.AzureBlob.BlobBandwidthProvider, CloudNinja.Metering.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"&lt;/span&gt;  &lt;span class="attr"&gt;CollectInterval&lt;/span&gt;&lt;span class="kwrd"&gt;="01:00:00"&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;BlobBandwidthMeteringProviderSettings&lt;/span&gt; &lt;span class="attr"&gt;DefaultTenantIdPattern&lt;/span&gt;&lt;span class="kwrd"&gt;="tnt_{.+}"&lt;/span&gt; &lt;span class="attr"&gt;BlobBandwidthLogsParserBookmarkRepository&lt;/span&gt;&lt;span class="kwrd"&gt;="DefaultEndpointsProtocol=https;AccountName=cnm;AccountKey=YfWiIGe/BQtLZzMOUtdkth7KLKyyUlVYl83vvCSptYHJgCVcP37i03/JIOQvYblwZlmp/a0fVXT5nGi9jQzuIg=="&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;StorageAccounts&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;              &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;clearStorageAccount&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;              &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;addStorageAccount&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;="cn-tenantstore"&lt;/span&gt; &lt;span class="attr"&gt;ConnectionString&lt;/span&gt;&lt;span class="kwrd"&gt;="DefaultEndpointsProtocol=https;AccountName=friday;AccountKey=q0JAToIm1qt2SnxfedcHjy6TxSPBSNYv5oVrhCwFTVacaXQ6/8d7iI34ETHk0FwBeKCz6HETlW4YjWzmg2R6lQ=="&lt;/span&gt; &lt;span class="attr"&gt;TenantIdPattern&lt;/span&gt;&lt;span class="kwrd"&gt;="tnt[ps]-{.+}"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;StorageAccounts&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;          &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;BlobBandwidthMeteringProviderSettings&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Provider&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Providers&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Providers&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, "Courier New", courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;/p&gt;&lt;/p&gt;&lt;div id="AdnBottom"&gt;&lt;div class="AdnBottomLeft" style="float:left"&gt;&lt;/div&gt;&lt;div class="AdnBottomRight" style="float:right"&gt;&lt;/div&gt;&lt;div style="clear:both"&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="accentbar"&gt;&lt;span class="left"&gt;&amp;nbsp;&lt;/span&gt;Full Scale 180 - Metering News Feed&lt;span class="right"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=cnmb&amp;DownloadId=371204" alt="logo-footer.png" title="logo-footer.png" /&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>ercenk</author><pubDate>Fri, 18 May 2012 08:04:02 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20120518080402A</guid></item><item><title>New Post: Installation Guide or Documentation</title><link>http://cnmb.codeplex.com/discussions/355817</link><description>&lt;div style="line-height: normal;"&gt;
&lt;p&gt;Is there any plan to&amp;nbsp;publish a installation guide or documentation?&lt;/p&gt;
&lt;/div&gt;</description><author>kjarriv</author><pubDate>Tue, 15 May 2012 09:59:15 GMT</pubDate><guid isPermaLink="false">New Post: Installation Guide or Documentation 20120515095915A</guid></item><item><title>Updated Release: v1 Release (Apr 28, 2012)</title><link>http://cnmb.codeplex.com/releases/view/86860</link><description>&lt;div class="wikidoc"&gt;First edition of the Cloud Ninja Metering Block.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;It looks like the Nuget package restore is not working automatically for some installations for Reactive Extensions and Unity. Workaround is to uninstall the related packages in the projects manually and re-install them again.&lt;/b&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>ercenk</author><pubDate>Mon, 07 May 2012 04:26:42 GMT</pubDate><guid isPermaLink="false">Updated Release: v1 Release (Apr 28, 2012) 20120507042642A</guid></item><item><title>Released: v1 Release (Apr 28, 2012)</title><link>http://cnmb.codeplex.com/releases/view/86860</link><description>
&lt;div class="wikidoc"&gt;First edition of the Cloud Ninja Metering Block.&lt;br&gt;
&lt;br&gt;
&lt;b&gt;It looks like the Nuget package restore is not working automatically for some installations for Reactive Extensions and Unity. Workaround is to uninstall the related packages in the projects manually and re-install them again.&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
</description><author></author><pubDate>Mon, 07 May 2012 04:26:42 GMT</pubDate><guid isPermaLink="false">Released: v1 Release (Apr 28, 2012) 20120507042642A</guid></item><item><title>Updated Release: v1 Release (Apr 28, 2012)</title><link>http://cnmb.codeplex.com/releases/view/86860</link><description>&lt;div class="wikidoc"&gt;First edition of the Cloud Ninja Metering Block.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;It looks like the Nuget package restore is not working automatically for some installations for Reactive Extensions and Unity. Workaround is to uninstall the related packages in the projects manually and re-install them again.&lt;/b&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>ercenk</author><pubDate>Fri, 04 May 2012 07:35:41 GMT</pubDate><guid isPermaLink="false">Updated Release: v1 Release (Apr 28, 2012) 20120504073541A</guid></item><item><title>Released: v1 Release (Apr 28, 2012)</title><link>http://cnmb.codeplex.com/releases/view/86860</link><description>
&lt;div class="wikidoc"&gt;First edition of the Cloud Ninja Metering Block.&lt;br&gt;
&lt;br&gt;
&lt;b&gt;It looks like the Nuget package restore is not working automatically for some installations for Reactive Extensions and Unity. Workaround is to uninstall the related packages in the projects manually and re-install them again.&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
</description><author></author><pubDate>Fri, 04 May 2012 07:35:41 GMT</pubDate><guid isPermaLink="false">Released: v1 Release (Apr 28, 2012) 20120504073541A</guid></item><item><title>Released: v1 Release (Apr 28, 2012)</title><link>http://cnmb.codeplex.com/releases/view/86860</link><description>
&lt;div class="wikidoc"&gt;First edition of the Cloud Ninja Metering Block.&lt;br&gt;
&lt;br&gt;
&lt;b&gt;It looks like the Nuget package restore is not working automatically for some installations for Reactive Extensions and Unity. Workaround is to uninstall the related packages in the projects manually and re-install them again.&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
</description><author></author><pubDate>Fri, 04 May 2012 07:07:30 GMT</pubDate><guid isPermaLink="false">Released: v1 Release (Apr 28, 2012) 20120504070730A</guid></item><item><title>Updated Release: v1 Release (Apr 28, 2012)</title><link>http://cnmb.codeplex.com/releases/view/86860</link><description>&lt;div class="wikidoc"&gt;First edition of the Cloud Ninja Metering Block.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;It looks like the Nuget package restore is not working automatically for some installations for Reactive Extensions and Unity. Workaround is to uninstall the related packages in the projects manually and re-install them again.&lt;/b&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>ercenk</author><pubDate>Fri, 04 May 2012 07:07:30 GMT</pubDate><guid isPermaLink="false">Updated Release: v1 Release (Apr 28, 2012) 20120504070730A</guid></item></channel></rss>