Esempio n. 1
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);
        }
Esempio n. 2
0
        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);
        }