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); }
/// <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); }
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); }
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); }
/// <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); }
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); }