Пример #1
0
        public async Task ReportStats(List <ICounter> statsCounters)
        {
            var siloOrClientName = (isSilo) ? siloName : clientId;
            var id = (isSilo) ? siloAddress.ToLongString() : string.Format("{0}:{1}", siloOrClientName, generation);

            if (logger != null && logger.IsVerbose3)
            {
                logger.Verbose3("ReportStats called with {0} counters, name: {1}, id: {2}", statsCounters.Count, siloOrClientName, id);
            }
            var insertTasks = new List <Task>();

            try
            {
                //This batching is done for two reasons:
                //1) For not to introduce a query large enough to be rejected.
                //2) Performance, though using a fixed constants likely will not give the optimal performance in every situation.
                const int maxBatchSizeInclusive = 200;
                var       counterBatches        = BatchCounters(statsCounters, maxBatchSizeInclusive);
                foreach (var counterBatch in counterBatches)
                {
                    //The query template from which to retrieve the set of columns that are being inserted.
                    var queryTemplate = queryConstants.GetConstant(database.InvariantName, QueryKeys.InsertOrleansStatisticsKey);
                    insertTasks.Add(database.InsertStatisticsCountersAsync(queryTemplate, deploymentId, hostName, siloOrClientName, id, counterBatch));
                }

                await Task.WhenAll(insertTasks);
            }
            catch (Exception ex)
            {
                if (logger != null && logger.IsVerbose)
                {
                    logger.Verbose("ReportStats faulted: {0}", ex.ToString());
                }
                foreach (var faultedTask in insertTasks.Where(t => t.IsFaulted))
                {
                    if (logger != null && logger.IsVerbose)
                    {
                        logger.Verbose("Faulted task exception: {0}", faultedTask.ToString());
                    }
                }

                throw;
            }

            if (logger != null && logger.IsVerbose)
            {
                logger.Verbose("ReportStats SUCCESS");
            }
        }
Пример #2
0
        public async Task ReportStats(List <ICounter> statsCounters)
        {
            var siloOrClientName = (isSilo) ? siloName : clientId;
            var id = (isSilo) ? siloAddress.ToLongString() : string.Format("{0}:{1}", siloOrClientName, generation);

            if (logger != null && logger.IsVerbose3)
            {
                logger.Verbose3("ReportStats called with {0} counters, name: {1}, id: {2}", statsCounters.Count, siloOrClientName, id);
            }
            var insertTasks = new List <Task>();

            try
            {
                //This batching is done for two reasons:
                //1) For not to introduce a query large enough to be rejected.
                //2) Performance, though the right level granularity may not be a constant.
                const int maxBatchSizeInclusive = 200;
                var       counterBatches        = BatchCounters(statsCounters, maxBatchSizeInclusive);
                foreach (var counterBatch in counterBatches)
                {
                    insertTasks.Add(database.InsertStatisticsCountersAsync(deploymentId, hostName, siloOrClientName, id, counterBatch));
                }

                await Task.WhenAll(insertTasks);
            }
            catch (Exception ex)
            {
                if (logger != null && logger.IsVerbose)
                {
                    logger.Verbose("ReportStats faulted: {0}", ex.ToString());
                }
                foreach (var faultedTask in insertTasks.Where(t => t.IsFaulted))
                {
                    if (logger != null && logger.IsVerbose)
                    {
                        logger.Verbose("Faulted task exception: {0}", faultedTask.ToString());
                    }
                }

                throw;
            }

            if (logger != null && logger.IsVerbose)
            {
                logger.Verbose("ReportStats SUCCESS");
            }
        }