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());
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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());
        }