public async Task <DatetimeSerieModel> GetDailySeriesById(int journeyId, DatePeriodValue period) { var journey = await this._dbContext.GetJourney(journeyId); var sourceIds = journey.FeatureMap.SelectMany(c => c.Feature.Indicators) .Select(c => c.SourceId).Distinct(); var sourceItems = await this._dbContext.GetSourceItems(sourceIds, period.Start, period.End); foreach (var map in journey.FeatureMap) { foreach (var indicator in map.Feature.Indicators) { indicator.Source.SourceItems = sourceItems.Where(c => c.SourceId == indicator.SourceId).ToList(); } } var result = new DatetimeSerieModel { Start = period.Start, End = period.End, Name = journey.Name, Avatar = journey.Avatar, }; var aggregator = new JourneyDailyAggregate(journey, period); var(availability, features) = aggregator.MeasureQuality; result.Availability.AddItems( availability.OrderBy(c => c.Date).Select(c => (c.Date, c.Measure.Availability)).ToList() ); result.Latency.AddItems( availability.OrderBy(c => c.Date).Select(c => (c.Date, c.Measure.Latency)).ToList() ); result.Experience.AddItems( availability.OrderBy(c => c.Date).Select(c => (c.Date, c.Measure.Experience)).ToList() ); foreach (var(feature, avaValues) in features) { var pivotAvailability = new DatetimeSerieListModel(feature.Name, feature.Avatar); pivotAvailability.AddItems(avaValues.OrderBy(c => c.Date) .Select(c => (c.Date, QualityUtils.MeasureDebt(c.Measure.Availability, journey.AvailabilitySlo))).ToList()); result.AvailabilityDetail.Add(pivotAvailability); var pivotLatency = new DatetimeSerieListModel(feature.Name, feature.Avatar); pivotLatency.AddItems(avaValues.OrderBy(c => c.Date) .Select(c => (c.Date, QualityUtils.MeasureLatencyDebt(c.Measure.Latency, journey.LatencySlo))).ToList()); result.LatencyDetail.Add(pivotLatency); var pivotExperience = new DatetimeSerieListModel(feature.Name, feature.Avatar); pivotExperience.AddItems(avaValues.OrderBy(c => c.Date) .Select(c => (c.Date, QualityUtils.MeasureDebt(c.Measure.Experience, journey.ExperienceSlo))).ToList()); result.ExperienceDetail.Add(pivotExperience); } return(result); }
public async Task <DatetimeSerieModel> GetJourneyGroupDailyErrorBudget(int productId, DatePeriodValue period, string group) { var product = await this._dbContext.FullLoadProductWithGroupAndSourceItems(productId, group, period.Start, period.End); var result = new DatetimeSerieModel(); result.Start = period.Start; result.End = period.End; result.Name = product.Name; var days = period.ToDaysPeriods(); foreach (var item in days) { var temp = product.Journeys.Select(c => c.Measure(item)); result.Availability.Items.Add(new DatetimeSerieItemModel(item.Start, temp.Sum(c => c.AvailabilityDebt))); result.Latency.Items.Add(new DatetimeSerieItemModel(item.Start, temp.Sum(c => c.LatencyDebt))); result.Experience.Items.Add(new DatetimeSerieItemModel(item.Start, temp.Sum(c => c.ExperienceDebt))); } foreach (var journey in product.Journeys) { var temp = new DatetimeSerieListModel() { Name = journey.Name, Avatar = journey.Avatar }; temp.AddItems(days.Select(c => (c.Start, journey.Measure(c).AvailabilityDebt)).ToList()); result.AvailabilityDetail.Add(temp); var tempL = new DatetimeSerieListModel() { Name = journey.Name, Avatar = journey.Avatar }; tempL.AddItems(days.Select(c => (c.Start, journey.Measure(c).LatencyDebt)).ToList()); result.LatencyDetail.Add(tempL); var tempE = new DatetimeSerieListModel() { Name = journey.Name, Avatar = journey.Avatar }; tempE.AddItems(days.Select(c => (c.Start, journey.Measure(c).ExperienceDebt)).ToList()); result.ExperienceDetail.Add(tempE); } return(result); }