public void MeasureFeatureAvailability() { var(_, product, journey, feature) = TestDataFactory.BuildCustomerProductJourneyFeature(); var source = TestDataFactory.BuildSource(product); var sourceA = TestDataFactory.BuildSource(product); var indicator = IndicatorEntity.Factory.Create(feature, source, DateTime.Now, "/api/customer"); var sourceItem = SourceEntity.Factory.CreateItem(source, OwlveyCalendar.StartJanuary2019, 900, 1200, DateTime.Now, "test", SourceGroupEnum.Availability); var indicatorA = IndicatorEntity.Factory.Create(feature, source, DateTime.Now, "/api/customer"); var sourceItemA = SourceEntity.Factory.CreateItem(source, OwlveyCalendar.EndJanuary2019, 900, 1200, DateTime.Now, "test", SourceGroupEnum.Availability); source.SourceItems.Add(sourceItem); indicator.Source = source; source.SourceItems.Add(sourceItemA); indicatorA.Source = sourceA; feature.Indicators.Add(indicator); feature.Indicators.Add(indicatorA); var journey_aggregate = new JourneyDailyAggregate(journey, new DatePeriodValue(OwlveyCalendar.StartJanuary2019, OwlveyCalendar.EndJanuary2019)); var(journey_availabilities, _) = journey_aggregate.MeasureQuality; Assert.Equal(2, journey_availabilities.Count()); }
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 void MeasureProductAvailability() { var(_, product, journey, feature) = BuildCustomerProductJourneyFeature(); var indicator_a = Indicators.GenerateSourceItems(product, feature); var indicator_b = Indicators.GenerateSourceItems(product, feature); feature.Indicators.Add(indicator_a); feature.Indicators.Add(indicator_b); var journey_aggregate = new JourneyDailyAggregate(journey, new DatePeriodValue(OwlveyCalendar.StartJanuary2019, OwlveyCalendar.EndJanuary2019)); var journey_availabilities = journey_aggregate.MeasureQuality; var product_aggregate = new ProductDailyAggregate(product, new DatePeriodValue(OwlveyCalendar.StartJanuary2019, OwlveyCalendar.EndJanuary2019)); var product_availabilities = product_aggregate.MeasureQuality(); Assert.Equal(2, product_availabilities.Count()); }