コード例 #1
0
        private async Task <CountersSummary> ReloadOverallCacheItem(DateTime date)
        {
            var audits = await this.db.GetAudits(date);

            if (audits.Length == 0)
            {
                var emptyItem = new CacheItem
                {
                    AuditDate   = date,
                    ComponentId = Audit.OverallId,
                    Summary     = new CountersSummary(),
                };

                this.InsertIntoCache(emptyItem);

                return(emptyItem.Summary);
            }

            var summaries = new List <CountersSummary>(audits.Length);

            foreach (var auditEntity in audits)
            {
                var summary = await this.db.GetCounterSummariesForAudit(auditEntity.Id);

                summaries.Add(summary);
                var cacheItem = new CacheItem
                {
                    AuditDate   = auditEntity.Date.Date,
                    ComponentId = auditEntity.ComponentId,
                    Summary     = summary,
                };

                this.InsertIntoCache(cacheItem);
            }

            // calculate overall-infrastructure summaries
            var overallSummary = new CountersSummary();

            foreach (var item in summaries)
            {
                overallSummary.Add(item);
            }

            var overallCacheItem = new CacheItem
            {
                AuditDate   = date.Date,
                ComponentId = Audit.OverallId,
                Summary     = overallSummary,
            };

            this.InsertIntoCache(overallCacheItem);

            return(overallSummary);
        }
コード例 #2
0
        /// <inheritdoc />
        public async Task ReloadEntireCache()
        {
            Logger.Information("Reloading Infrastructure Score cache");
            var sw = new Stopwatch();

            sw.Start();

            var allItems   = new List <CacheItem>();
            var components = await this.db.GetAllComponentsIds();

            foreach (var component in components)
            {
                var audits = await this.db.GetLastMonthAudits(component);

                foreach (var auditEntity in audits)
                {
                    var summary = await this.db.GetCounterSummariesForAudit(auditEntity.Id);

                    var cacheItem = new CacheItem
                    {
                        AuditDate   = auditEntity.Date.Date,
                        ComponentId = auditEntity.ComponentId,
                        Summary     = summary,
                    };

                    this.InsertIntoCache(cacheItem);
                    allItems.Add(cacheItem);
                }
            }

            // calculate overall-infrastructure summaries
            foreach (var grouping in allItems.GroupBy(i => i.AuditDate))
            {
                var summary = new CountersSummary();
                foreach (var item in grouping)
                {
                    summary.Add(item.Summary);
                }

                var cacheItem = new CacheItem
                {
                    AuditDate   = grouping.Key,
                    ComponentId = Audit.OverallId,
                    Summary     = summary,
                };

                this.InsertIntoCache(cacheItem);
            }

            sw.Stop();
            Logger.Information("Reloading Infrastructure Score cache took {Elapsed}", sw.Elapsed);
        }
コード例 #3
0
        public void CountersSummaryReturnsZeroIfCountersZero()
        {
            // Arrange
            var randomizer = new Random();
            var summary    = new CountersSummary
            {
                NoData  = randomizer.Next(0, 1000),
                Failed  = 0,
                Warning = 0,
                Passed  = 0,
            };

            // Act & Assert
            summary.Score.Should().Be(0);
        }
コード例 #4
0
        public void CountersSummaryReturnsCorrectTotal()
        {
            // Arrange
            var randomizer = new Random();
            var summary    = new CountersSummary
            {
                NoData  = randomizer.Next(0, 9),
                Failed  = randomizer.Next(10, 99),
                Warning = randomizer.Next(100, 999),
                Passed  = randomizer.Next(1000, 9999),
            };

            // Act & Assert
            summary.Total.Should().Be(summary.Warning + summary.Failed + summary.NoData + summary.Passed);
        }
コード例 #5
0
        /// <inheritdoc />
        public async Task <CountersSummary> GetCounterSummariesForAudit(int auditId)
        {
            var checkResults = await this.db.Set <CheckResultEntity>()
                               .Include(i => i.Check)
                               .AsNoTracking()
                               .Where(i => i.AuditId == auditId)
                               .Select(i => new
            {
                i.AuditId,
                i.Check.Severity,
                i.Value,
            })
                               .ToArrayAsync();

            var summary = new CountersSummary();

            foreach (var checkResult in checkResults)
            {
                switch (checkResult.Value)
                {
                case CheckValue.Failed:
                    if (checkResult.Severity == CheckSeverity.Critical || checkResult.Severity == CheckSeverity.High)
                    {
                        summary.Failed++;
                    }
                    else
                    {
                        summary.Warning++;
                    }

                    break;

                case CheckValue.Succeeded:
                    summary.Passed++;
                    break;

                case CheckValue.InProgress:
                case CheckValue.NoData:
                    summary.NoData++;
                    break;
                }
            }

            return(summary);
        }
コード例 #6
0
        public void CountersSummaryReturnsCorrectScore()
        {
            // Arrange
            var randomizer = new Random();
            var summary    = new CountersSummary
            {
                NoData  = randomizer.Next(0, 9),
                Failed  = randomizer.Next(10, 99),
                Warning = randomizer.Next(100, 999),
                Passed  = randomizer.Next(1000, 9999),
            };

            var expected = Convert.ToInt16(Math.Round(
                                               100M * summary.Passed * 2 / ((summary.Failed * 2) + (summary.Passed * 2) + summary.Warning),
                                               MidpointRounding.AwayFromZero));

            // Act & Assert
            summary.Score.Should().Be(expected);
        }