/// <summary>
 /// Checks if $MetricsCapacityBlob table exists in a storage account.
 /// </summary>
 /// <param name="cloudStorageAccount">The cloud storage account.</param>
 /// <returns></returns>
 public static bool MetricsTableExists(this CloudStorageAccount cloudStorageAccount)
 {
     CloudBlobClient blobClient = cloudStorageAccount.CreateCloudBlobClient();
     var cloudTableClient = cloudStorageAccount.CreateCloudTableClient();
     var table = cloudTableClient.GetTableReference("$MetricsCapacityBlob");
     return table.Exists();
 }
        public static void Ensure(this CloudStorageAccount account, IEnumerable<string> tables = null, IEnumerable<string> containers = null, IEnumerable<string> queues = null)
        {
            var tableClient = account.CreateCloudTableClient();
            var blobClient = account.CreateCloudBlobClient();
            var queueClient = account.CreateCloudQueueClient();

            if (tables != null) foreach (var table in tables) tableClient.CreateTableIfNotExist(table);
            if (containers != null) foreach (var container in containers) blobClient.GetContainerReference(container).CreateIfNotExist();
            if (queues != null) foreach (var queue in queues) queueClient.GetQueueReference(queue).CreateIfNotExist();
        }
        /// <summary>
        /// Tries the get user data capacity metric for blob service.
        /// </summary>
        /// <param name="cloudStorageAccount">The cloud storage account.</param>
        /// <param name="fromDate">Date from which retrieve capacity information.</param>
        /// <param name="analyticsEnabled">if set to <c>true</c> if analytics enabled.</param>
        /// <returns></returns>
        public static IEnumerable<Tuple<DateTime, long>> TryGetBlobUserDataCapacityMetric(this CloudStorageAccount cloudStorageAccount, DateTime fromDate, out bool analyticsEnabled)
        {
            CloudBlobClient blobClient = cloudStorageAccount.CreateCloudBlobClient();
            var serviceProperties = blobClient.GetServiceProperties();
            analyticsEnabled = serviceProperties.Metrics.MetricsLevel == MetricsLevel.Service;

            if (!analyticsEnabled)
            {
                return null;
            }

            var cloudTableClient = cloudStorageAccount.CreateCloudTableClient();
            var table = cloudTableClient.GetTableReference("$MetricsCapacityBlob");
            //Selecting
            TableQuery<MetricsCapacityBlob> query =
                new TableQuery<MetricsCapacityBlob>().Where(TableQuery.CombineFilters(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.GreaterThan, (fromDate.ToUniversalTime()).ToString("yyyyMMddTHH00")),
                                                                                      TableOperators.And,
                                                                                      TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.Equal, "data")));

            return table.ExecuteQuery(query).Select(c => new Tuple<DateTime, long>(c.Timestamp.Date, c.Capacity));
        }
 /// <summary>
 /// Creates a table if it doesn't exist on the default endpoints for the CloudStorageAccount by resolving entity types to table names.
 /// </summary>
 /// <param name="account">Cloud storage account.</param>
 /// <param name="entities">Entity types which should be resolved into table names.</param>
 public static void CreateTableIfNotExist(this CloudStorageAccount account, params Type[] entities)
 {
     account.CreateCloudTableClient().CreateTableIfNotExist(entities);
 }
 /// <summary>
 /// Creates a table if it doesn't exist on the default endpoints for the CloudStorageAccount using explicit table names.
 /// </summary>
 /// <param name="account">Cloud storage account.</param>
 /// <param name="names">Table names.</param>
 public static void CreateTableIfNotExist(this CloudStorageAccount account, params string[] names)
 {
     account.CreateCloudTableClient().CreateTableIfNotExist(names);
 }
        // patch the 'CreateOrleansMonitorClient' method on to the CloudStorageAccount
        public static OrleansMonitorClient CreateOrleansMonitorClient(this CloudStorageAccount account)
        {
            if (null == account) throw new ArgumentNullException("account");

            return new OrleansMonitorClient(account.CreateCloudTableClient());
        }