示例#1
0
        public static double GetSuccessRate(this AggregationItem item, out int successCount, out double successAverageResponseTime)
        {
            int totalCount = 0;
            int sCount     = 0;

            successAverageResponseTime = 0;

            foreach (AggregationResponseItem responseItem in item.ResponseInformation)
            {
                if (responseItem.GetResponseStatus() == ResponseStatus.Success)
                {
                    successAverageResponseTime += responseItem.AverageResponseTime;
                    sCount += responseItem.DocumentCount;
                }
                totalCount += responseItem.DocumentCount;
            }

            double percentage = (double)sCount * 100 / totalCount;

            if (sCount != 0)
            {
                successAverageResponseTime = (successAverageResponseTime / sCount) / 1000;
            }

            successCount = sCount;

            return(percentage);
        }
示例#2
0
        public KPIMetric GetKPI(AggregationItem item, long searchIndexId, DateTime logDate)
        {
            if (!item.Url.CheckIsFormatIncluded())
            {
                return(null);
            }

            double failedPercentage  = item.GetFailedRate(out int failedCount, out double failedAverage);
            double successPercentage = item.GetSuccessRate(out int successCount, out double successAverage);

            if (ServiceManager.LastRuleId == 0)
            {
                ServiceManager.LastRuleId = GetMaxComputeRuleId();
            }

            return(new KPIMetric
            {
                ServerName = item.ServerName.Trim(),
                SiteName = item.SiteName.Trim(),
                PageUrl = item.Url.Trim(),
                AverageResponseTime = successAverage == 0 ? failedAverage     // if success average is 0 pass failed average
                                    : failedAverage == 0 ? successAverage     // if failed average is 0 pass success average
                                    : ((successAverage + failedAverage) / 2), // else take arithmetic average
                SuccessAverageResponseTime = successAverage,
                FailedAverageResponseTime = failedAverage,
                TotalRequestCount = item.RequestCount,
                FailedPercentage = failedPercentage,
                FailedRequestCount = failedCount,
                SuccessPercentage = successPercentage,
                SuccessRequestCount = successCount,
                IndexId = searchIndexId,
                LogDate = logDate,
                ComputeRuleId = ServiceManager.LastRuleId
            });
        }
示例#3
0
        public void FillIsAppliedForItems_RangeFilter_IsAppliedSetProperly(string filterLower, string filterUpper, string aggregationItemLowerBound, string aggregationItemUpperBound, bool expectedIsApplied)
        {
            // Arrange
            var filter = new RangeFilter()
            {
                Values = new[]
                {
                    new RangeFilterValue()
                    {
                        Lower = filterLower,
                        Upper = filterUpper
                    }
                }
            };
            var aggregationItem = new AggregationItem()
            {
                RequestedLowerBound = aggregationItemLowerBound,
                RequestedUpperBound = aggregationItemUpperBound
            };

            // Act
            filter.FillIsAppliedForItems(new[] { aggregationItem });

            // Assert
            Assert.Equal(expectedIsApplied, aggregationItem.IsApplied);
        }
示例#4
0
        protected virtual IList <AggregationItem> GetRangeAggregationItems(string aggregationId, IList <RangeFilterValue> values, IList <AggregationResponse> aggregationResponses)
        {
            var result = new List <AggregationItem>();

            if (values != null)
            {
                foreach (var group in values.GroupBy(v => v.Id, StringComparer.OrdinalIgnoreCase))
                {
                    var valueId             = group.Key;
                    var aggregationValueId  = $"{aggregationId}-{valueId}";
                    var aggregationResponse = aggregationResponses.FirstOrDefault(v => v.Id.EqualsInvariant(aggregationValueId));

                    if (aggregationResponse?.Values?.Any() == true)
                    {
                        var value      = aggregationResponse.Values.First();
                        var rangeValue = group.First();

                        var aggregationItem = new AggregationItem
                        {
                            Value = valueId,
                            Count = (int)value.Count,
                            RequestedLowerBound = !string.IsNullOrEmpty(rangeValue.Lower) ? rangeValue.Lower : null,
                            RequestedUpperBound = !string.IsNullOrEmpty(rangeValue.Upper) ? rangeValue.Upper : null,
                        };

                        result.Add(aggregationItem);
                    }
                }
            }

            return(result);
        }
示例#5
0
        public static double GetFailedRate(this AggregationItem item, out int failedCount, out double failedAverageResponseTime)
        {
            int totalCount = 0;
            int fCount     = 0;

            failedAverageResponseTime = 0;

            foreach (AggregationResponseItem responseItem in item.ResponseInformation)
            {
                if (responseItem.GetResponseStatus() == ResponseStatus.Failed)
                {
                    failedAverageResponseTime += responseItem.AverageResponseTime;
                    fCount += responseItem.DocumentCount;
                }
                totalCount += responseItem.DocumentCount;
            }

            double percentage = (double)fCount * 100 / totalCount;

            if (fCount != 0)
            {
                failedAverageResponseTime = (failedAverageResponseTime / fCount) / 1000;
            }

            failedCount = fCount;

            return(percentage);
        }
        public static AggregationItem ToWebModel(this VirtoCommerceCatalogModuleWebModelAggregationItem item)
        {
            var result = new AggregationItem();

            result.InjectFrom <NullableAndEnumValueInjecter>(item);
            return(result);
        }
示例#7
0
        public static AggregationItem ToAggregationItem(this catalogDto.AggregationItem itemDto, string currentLanguage)
        {
            var result = new AggregationItem
            {
                Value     = itemDto.Value,
                IsApplied = itemDto.IsApplied ?? false,
                Count     = itemDto.Count ?? 0,
                Lower     = itemDto.RequestedLowerBound,
                Upper     = itemDto.RequestedUpperBound,
            };

            if (itemDto.Labels != null)
            {
                result.Label =
                    itemDto.Labels.Where(l => string.Equals(l.Language, currentLanguage, StringComparison.OrdinalIgnoreCase))
                    .Select(l => l.Label)
                    .FirstOrDefault();
            }

            if (string.IsNullOrEmpty(result.Label) && itemDto.Value != null)
            {
                result.Label = itemDto.Value.ToString();
            }

            return(result);
        }
示例#8
0
        public virtual Tag ToLiquidTag(AggregationItem item, string groupName, string groupLabel)
        {
            var result = new Tag(groupName, item.Value != null ? item.Value.ToString() : null);

            result.GroupLabel = groupLabel;
            result.Label      = item.Label;
            result.Count      = item.Count;
            return(result);
        }
示例#9
0
 public static Tag ToShopifyModel(this AggregationItem item, string groupName, string groupLabel)
 {
     return(new Tag(groupName, item.Value != null ? item.Value.ToString() : null)
     {
         GroupLabel = groupLabel,
         Label = item.Label,
         Count = item.Count,
     });
 }
示例#10
0
        public virtual Tag ToLiquidTag(AggregationItem item, string groupName, string groupLabel)
        {
            var factory = ServiceLocator.Current.GetInstance <ShopifyModelFactory>();
            var result  = factory.CreateTag(groupName, item.Value != null ? item.Value.ToString() : null);

            result.GroupLabel = groupLabel;
            result.Label      = item.Label;
            result.Count      = item.Count;
            return(result);
        }
        public void GET_FAILED_RATE_RETURNS_VALUE_WHEN_CORRECT_PARAMETER_PASSED()
        {
            AggregationItem aggregationItem = AggregationItemGenerator.Generate();

            int    failedCount      = 0;
            double failedAvgResTime = 0;
            double percentage       = aggregationItem.GetFailedRate(out failedCount, out failedAvgResTime);

            Assert.IsNotNull(percentage);
        }
        public void GET_SUCCESS_RATE_RETURNS_VALUE_WHEN_CORRECT_PARAMETER_PASSED()
        {
            AggregationItem aggregationItem = AggregationItemGenerator.Generate();

            int    successCount      = 0;
            double successAvgResTime = 0;
            double percentage        = aggregationItem.GetSuccessRate(out successCount, out successAvgResTime);

            Assert.IsNotNull(percentage);
        }
        public static List <AggregationItem> Generate(int count)
        {
            List <AggregationItem> aggregationItems = new List <AggregationItem>();

            for (int i = 0; i < count; i++)
            {
                AggregationItem aggregationItem = Generate();
                aggregationItems.Add(aggregationItem);
            }
            return(aggregationItems);
        }
示例#14
0
 public async Task InserKPIAsync(AggregationItem item, long searchIndexId, DateTime logDate)
 {
     using (var context = new SmartKPIDbContext(this._connectionString))
     {
         KPIMetric metric = this.GetKPI(item, searchIndexId, logDate);
         if (metric != null)
         {
             context.KPIMetrics.Add(metric);
             await context.SaveChangesAsync();
         }
     }
 }
        public static AggregationItem Generate()
        {
            AggregationItem item = new AggregationItem
            {
                RequestCount        = RandomNumberGenerator.GetRandomInt(),
                ServerName          = RandomStringGenerator.GetRandomString(10),
                SiteName            = RandomStringGenerator.GetRandomString(15),
                Url                 = RandomStringGenerator.GetRandomString(20),
                ResponseInformation = AggregationResponseItemGenerator.Generate(10)
            };

            return(item);
        }
示例#16
0
        public virtual Tag ToLiquidTag(AggregationItem item, Aggregation aggregation)
        {
            var result = new Tag(aggregation.Field, item.Value?.ToString())
            {
                GroupType  = aggregation.AggregationType,
                GroupLabel = aggregation.Label,
                Label      = item.Label,
                Count      = item.Count,
                Lower      = item.Lower,
                Upper      = item.Upper,
            };

            return(result);
        }
示例#17
0
        /// <summary>
        ///  Generates an relative url with query string that contains serialized ProductSearchCriteria as parameters
        ///  and remove a given aggregation item value  from  terms parameter
        /// </summary>
        /// <param name="context"></param>
        /// <param name="aggregationItem">aggregation item</param>
        /// <returns>example: /collection</returns>
        public static string RemoveTermUrl(TemplateContext context, AggregationItem aggregationItem)
        {
            Uri result = null;

            result = BuildUriWithSearchQueryString(context, criteria =>
            {
                var term = new Term {
                    Name = aggregationItem.GroupLabel, Value = aggregationItem.Value.ToString()
                };
                criteria.Terms.Remove(term);
                //Need to reset page number every time when criteria changed
                criteria.PageNumber = 1;
            });
            return(result?.PathAndQuery);
        }
示例#18
0
        public static AggregationItem ToModuleModel(this Facet facet, params string[] appliedFilters)
        {
            var result = new AggregationItem
            {
                Value     = facet.Key,
                Count     = facet.Count,
                IsApplied = appliedFilters.Any(x => x.Equals(facet.Key, StringComparison.OrdinalIgnoreCase))
            };

            if (facet.Labels != null)
            {
                result.Labels = facet.Labels.Select(ToModuleModel).ToArray();
            }

            return(result);
        }
示例#19
0
        public static AggregationItem ToModuleModel(this Facet facet, params string[] appliedFilters)
        {
            var result = new AggregationItem
            {
                Value     = facet.Key,
                Count     = (int)facet.Count,
                IsApplied = appliedFilters.Any(x => x.EqualsInvariant(facet.Key))
            };

            if (facet.Labels != null)
            {
                result.Labels = facet.Labels.Select(ToModuleModel).ToArray();
            }

            return(result);
        }
示例#20
0
        public void FillIsAppliedForItems_TermFilter_IsAppliedSetProperly(string termValue, object aggregationItemValue, bool expectedIsApplied)
        {
            // Arrange
            var filter = new TermFilter()
            {
                Values = new string[] { termValue }
            };
            var aggregationItem = new AggregationItem()
            {
                Value = aggregationItemValue
            };

            // Act
            filter.FillIsAppliedForItems(new[] { aggregationItem });

            // Assert
            Assert.Equal(expectedIsApplied, aggregationItem.IsApplied);
        }
        public static AggregationItem ToWebModel(this searchModel.AggregationItem item, string currentLanguage)
        {
            var result = new AggregationItem();

            result.InjectFrom <NullableAndEnumValueInjecter>(item);

            if (item.Labels != null)
            {
                result.Label =
                    item.Labels.Where(l => string.Equals(l.Language, currentLanguage, StringComparison.OrdinalIgnoreCase))
                    .Select(l => l.Label)
                    .FirstOrDefault();
            }

            if (string.IsNullOrEmpty(result.Label) && item.Value != null)
            {
                result.Label = item.Value.ToString();
            }

            return(result);
        }
示例#22
0
        public virtual AggregationItem ToAggregationItem(searchDto.AggregationItem itemDto, string currentLanguage)
        {
            var result = new AggregationItem();

            result.Value     = itemDto.Value;
            result.IsApplied = itemDto.IsApplied ?? false;
            result.Count     = itemDto.Count ?? 0;

            if (itemDto.Labels != null)
            {
                result.Label =
                    itemDto.Labels.Where(l => string.Equals(l.Language, currentLanguage, StringComparison.OrdinalIgnoreCase))
                    .Select(l => l.Label)
                    .FirstOrDefault();
            }

            if (string.IsNullOrEmpty(result.Label) && itemDto.Value != null)
            {
                result.Label = itemDto.Value.ToString();
            }

            return(result);
        }
示例#23
0
        private void SetRangeAggregationContainer(AggregationItem currentItem, AggregationContainerDescriptor <TEntity> aggregation)
        {
            string name = currentItem.Name.Split('.').LastOrDefault();

            if (currentItem.RangesDate != null && currentItem.RangesDate.Count() > 0)
            {
                IList <IDateRangeExpression> dataRanges = new List <IDateRangeExpression>();
                foreach (var item in currentItem.RangesDate)
                {
                    var range = new DateRangeExpression()
                    {
                        Key = currentItem.Name
                    };
                    range.From = item.From;
                    range.To   = item.To;
                    dataRanges.Add(range);
                }
                aggregation.DateRange(name, d => d.Field(currentItem.Name).Ranges(dataRanges.ToArray()));
            }
            else if (currentItem.Ranges != null && currentItem.Ranges.Count() > 0)
            {
                List <Func <RangeDescriptor, IRange> > funcs = new List <Func <RangeDescriptor, IRange> >();
                foreach (var item in currentItem.Ranges)
                {
                    funcs.Add(d =>
                    {
                        d.From(item.From)
                        .To(item.To)
                        .Key(currentItem.Name);

                        return(d);
                    });
                }
                aggregation.Range(name, f => f.Field(currentItem.Name).Ranges(funcs.ToArray()));
            }
        }
示例#24
0
        public static Tag ToShopifyModel(this AggregationItem item, Aggregation aggregation)
        {
            var converter = ServiceLocator.Current.GetInstance <ShopifyModelConverter>();

            return(converter.ToLiquidTag(item, aggregation));
        }
示例#25
0
        public static Tag ToShopifyModel(this AggregationItem item, string groupName, string groupLabel)
        {
            var converter = ServiceLocator.Current.GetInstance <ShopifyModelConverter>();

            return(converter.ToLiquidTag(item, groupName, groupLabel));
        }
示例#26
0
        public static Tag ToShopifyModel(this AggregationItem item, Aggregation aggregation)
        {
            var converter = new ShopifyModelConverter();

            return(converter.ToLiquidTag(item, aggregation));
        }