示例#1
0
 public DayPointValue(DateTime date, IEnumerable <DayPointValue> points) : this(date)
 {
     if (points.Count() > 0)
     {
         var minimun = points.Min(c => c.Minimun);
         var maximun = points.Max(c => c.Maximun);
         var average = QualityUtils.CalculateAverage(points.Select(c => c.Average));
     }
 }
示例#2
0
        public async Task <JourneyGroupListRp> GetJourneyGroupReport(int productId, DatePeriodValue period)
        {
            var entity = await this._dbContext.FullLoadProductWithSourceItems(productId, period.Start, period.End);

            var result = new JourneyGroupListRp();

            var days = period.ToDaysPeriods();

            foreach (var group in entity.Journeys.GroupBy(c => c.Group))
            {
                var serie = new MultiSerieItemGetRp()
                {
                    Name = group.Key
                };
                foreach (var day in days)
                {
                    serie.Items.Add(new SeriesItemGetRp(day.Start,
                                                        group.Select(c => c.Measure(day).AvailabilityDebt).Sum()));
                }

                var measures = group.Select(c =>
                                            new { measure = c.Measure(period) }).ToList();
                var temp = new JourneyGroupListRp.JourneyGrouptem
                {
                    Name = group.Key,
                    AvailabilitySloAvg = QualityUtils.CalculateAverage(group.Select(c => c.AvailabilitySlo)),
                    AvailabilitySloMin = QualityUtils.CalculateMinimum(group.Select(c => c.AvailabilitySlo)),

                    LatencySloAvg = QualityUtils.CalculateAverage(group.Select(c => c.LatencySlo)),
                    LatencySloMin = QualityUtils.CalculateMinimum(group.Select(c => c.LatencySlo)),

                    ExperienceSloAvg = QualityUtils.CalculateAverage(group.Select(c => c.ExperienceSlo)),
                    ExperienceSloMin = QualityUtils.CalculateMinimum(group.Select(c => c.ExperienceSlo))
                };

                temp.AvailabilityAvg = QualityUtils.CalculateAverage(measures.Select(c => c.measure.Availability));
                temp.AvailabilityMin = QualityUtils.CalculateMinimum(measures.Select(c => c.measure.Availability));
                temp.LatencyAvg      = QualityUtils.CalculateAverage(measures.Select(c => c.measure.Latency));
                temp.LatencyMin      = QualityUtils.CalculateMinimum(measures.Select(c => c.measure.Latency));
                temp.ExperienceAvg   = QualityUtils.CalculateAverage(measures.Select(c => c.measure.Experience));
                temp.ExperienceMin   = QualityUtils.CalculateMinimum(measures.Select(c => c.measure.Experience));

                temp.Count            = group.Count();
                temp.AvailabilityDebt = measures.Sum(c => c.measure.AvailabilityDebt);
                temp.ExperienceDebt   = measures.Sum(c => c.measure.ExperienceDebt);
                temp.LatencyDebt      = measures.Sum(c => c.measure.LatencyDebt);

                result.Series.Add(serie);
                result.Items.Add(temp);
            }
            return(result);
        }
        public static QualityMeasureValue Merge(IEnumerable <QualityMeasureValue> measures)
        {
            var availability = QualityUtils.CalculateAverage(measures.Select(c => c.Availability));
            var latency      = QualityUtils.CalculateAverage(measures.Select(c => c.Latency));
            var experience   = QualityUtils.CalculateAverage(measures.Select(c => c.Experience));
            var total        = measures.Sum(c => c.Total);
            var good         = measures.Sum(c => c.Good);

            return(new QualityMeasureValue(availability, latency, experience)
            {
                Total = total,
                Good = good
            });
        }
        private MeasureValue MeasureLatency(DatePeriodValue period = null)
        {
            IEnumerable <SourceItemEntity> data;

            if (period != null)
            {
                data = this.SourceItems.Where(c => c.Group == SourceGroupEnum.Latency &&
                                              c.Target >= period.Start && c.Target <= period.End);
            }
            else
            {
                data = this.SourceItems.Where(c => c.Group == SourceGroupEnum.Latency);
            }
            if (data.Count() == 0)
            {
                return(new MeasureValue(101, false));
            }
            var proportion = QualityUtils.CalculateAverage(data.Select(c => c.Measure));

            return(new MeasureValue(proportion));
        }
        private MeasureValue MeasureExperience(DatePeriodValue period = null)
        {
            IEnumerable <SourceItemEntity> data;

            if (period != null)
            {
                data = this.SourceItems.Where(c => c.Group == SourceGroupEnum.Experience && c.Target >= period.Start && c.Target <= period.End);
            }
            else
            {
                data = this.SourceItems.Where(c => c.Group == SourceGroupEnum.Experience);
            }
            if (data.Count() == 0)
            {
                return(new InteractionMeasureValue(1, 0, 0, false));
            }
            var good    = data.Select(c => c.Good.GetValueOrDefault()).Sum();
            var total   = data.Select(c => c.Total.GetValueOrDefault()).Sum();
            var measure = QualityUtils.CalculateAverage(data.Select(c => c.Measure));

            return(new InteractionMeasureValue(measure, total, good));
        }