Exemple #1
0
        /// <summary>
        /// Writes a set of statistics to storage.
        /// </summary>
        /// <param name="statsCounters">Statistics to write</param>
        /// <returns></returns>
        public Task ReportStats(List <ICounter> statsCounters)
        {
            var bulkPromises = new List <Task>();
            var data         = new List <StatsTableData>();

            foreach (ICounter count in statsCounters.Where(cs => cs.Storage == CounterStorage.LogAndTable).OrderBy(cs => cs.Name))
            {
                if (data.Count >= AzureTableDefaultPolicies.MAX_BULK_UPDATE_ROWS)
                {
                    // Write intermediate batch
                    bulkPromises.Add(tableManager.BulkInsertTableEntries(data));
                    data.Clear();
                }

                StatsTableData statsTableEntry = PopulateStatsTableDataEntry(count);
                if (statsTableEntry == null)
                {
                    continue;                          // Skip blank entries
                }
                if (logger.IsEnabled(LogLevel.Trace))
                {
                    logger.Trace("Preparing to bulk insert {1} stats table entry: {0}", statsTableEntry, isSilo ? "silo" : "");
                }
                data.Add(statsTableEntry);
            }
            if (data.Count > 0)
            {
                // Write final batch
                bulkPromises.Add(tableManager.BulkInsertTableEntries(data));
            }
            return(Task.WhenAll(bulkPromises));
        }