예제 #1
0
        public JourneyQualityMeasureValue Measure(DatePeriodValue period = null)
        {
            var resultAvailability = new List <decimal>();
            var resultLatency      = new List <decimal>();
            var resultExperience   = new List <decimal>();

            foreach (var map in this.FeatureMap)
            {
                QualityMeasureValue measure;
                if (period != null)
                {
                    measure = map.Feature.Measure(period);
                }
                else
                {
                    measure = map.Feature.Measure();
                }
                if (measure.HasData)
                {
                    resultAvailability.Add(measure.Availability);
                    resultLatency.Add(measure.Latency);
                    resultExperience.Add(measure.Experience);
                }
            }

            if (resultAvailability.Count > 0 || resultExperience.Count > 0 || resultLatency.Count > 0)
            {
                return(new JourneyQualityMeasureValue(
                           this.AvailabilitySlo,
                           this.LatencySlo,
                           this.ExperienceSlo,
                           QualityUtils.CalculateMinimum(resultAvailability, round: 3),
                           QualityUtils.CalculateMaximum(resultLatency, round: 3),
                           QualityUtils.CalculateMinimum(resultExperience, round: 3)));
            }
            else
            {
                return(new JourneyQualityMeasureValue(this.AvailabilitySlo,
                                                      this.LatencySlo, this.ExperienceSlo, false));
            }
        }