public override ISearchQueryResult SendWithRetry(SearchQuery searchQuery)
        {
            ISearchQueryResult searchResult;

            try
            {
                EnsureServiceAvailable(ConfigInfo.IsSearchCapable, "FTS");

                searchResult = RetryRequest(
                    ConfigInfo.GetSearchNode,
                    (server, request) => server.Send(request),
                    (request, result) => !result.Success,
                    searchQuery
                    );
            }
            catch (Exception e)
            {
                Log.Info(e);
                searchResult = new SearchQueryResult
                {
                    Status    = SearchStatus.Failed,
                    Success   = false,
                    Exception = e
                };
            }
            return(searchResult);
        }
        public override async Task <ISearchQueryResult> SendWithRetryAsync(SearchQuery searchQuery)
        {
            ISearchQueryResult searchResult;

            try
            {
                EnsureServiceAvailable(ConfigInfo.IsSearchCapable, "FTS");

                searchResult = await RetryRequestAsync(
                    ConfigInfo.GetSearchNode,
                    (server, request, token) => server.SendAsync(request),
                    (request, result) => !result.Success,
                    searchQuery,
                    CancellationToken.None,
                    (int)ConfigInfo.ClientConfig.SearchRequestTimeout
                    ).ContinueOnAnyContext();
            }
            catch (Exception e)
            {
                Log.Info(e);
                searchResult = new SearchQueryResult
                {
                    Status    = SearchStatus.Failed,
                    Success   = false,
                    Exception = e
                };
            }
            return(searchResult);
        }
Exemplo n.º 3
0
        protected virtual void ProcessSearchQueryResultInfo(SearchQueryResult queryResults)
        {
            WriteVerbose(String.Format("HTTP status code: {0}", queryResults.StatusCode));
            WriteVerbose(String.Format("Status description: {0}", queryResults.StatusDescription));
            WriteVerbose(String.Format("HTTP protocol version: {0}", queryResults.HttpProtocolVersion));
            WriteVerbose(String.Format("Response content type: {0}", queryResults.ContentType));
            WriteVerbose(String.Format("Is Partial Result: {0}", queryResults.IsPartial));

            if (queryResults.IsPartial)
            {
                WarnAboutPartialResults();
            }

            if (!string.IsNullOrWhiteSpace(queryResults.MultiGeoSearchStatus))
            {
                WriteVerbose(String.Format("Multi Geo Search Status: {0}", queryResults.MultiGeoSearchStatus));

                if (!queryResults.MultiGeoSearchStatus.Equals("Full", StringComparison.InvariantCultureIgnoreCase))
                {
                    WarnAboutPartialGeoResults(queryResults.MultiGeoSearchStatus);
                }
            }


            Cmdlet.WriteDebug(String.Format("Response headers: {0}", String.Join(",", queryResults.ResponseHeaders.AllKeys)));
        }
Exemplo n.º 4
0
        public async Task <ISearchQueryResult> SendAsync(SearchQuery searchQuery)
        {
            ISearchQueryResult searchResult = null;

            if (_isDown)
            {
                searchResult = HandleNodeUnavailable(searchQuery.Query);
            }
            else
            {
                try
                {
                    searchResult = await SearchClient.QueryAsync(searchQuery);
                }
                catch (Exception e)
                {
                    MarkDead();
                    searchResult = new SearchQueryResult
                    {
                        Exception = e,
                        Success   = false
                    };
                }
            }
            return(searchResult);
        }
Exemplo n.º 5
0
        public async Task <ISearchQueryResult> SendAsync(SearchQuery searchQuery, CancellationToken cancellationToken)
        {
            ISearchQueryResult searchResult;

            if (_isDown)
            {
                searchResult = HandleNodeUnavailable(searchQuery.Query);
            }
            else
            {
                try
                {
                    searchResult = await SearchClient.QueryAsync(searchQuery, cancellationToken).ContinueOnAnyContext();
                }
                catch (Exception e)
                {
                    searchResult = new SearchQueryResult
                    {
                        Exception = e,
                        Success   = false
                    };
                }
            }
            return(searchResult);
        }
Exemplo n.º 6
0
        public ISearchQueryResult Send(SearchQuery searchQuery)
        {
            ISearchQueryResult searchResult;

            if (_isDown)
            {
                searchResult = HandleNodeUnavailable(searchQuery.Query);
            }
            else
            {
                try
                {
                    searchResult = SearchClient.Query(searchQuery);
                }
                catch (Exception e)
                {
                    searchResult = new SearchQueryResult
                    {
                        Exception = e,
                        Success   = false
                    };
                }
            }
            return(searchResult);
        }
Exemplo n.º 7
0
        protected virtual void ProcessSearchQueryResultInfo(SearchQueryResult queryResults)
        {
            WriteVerbose(String.Format("HTTP status code: {0}", queryResults.StatusCode));
            WriteVerbose(String.Format("Status description: {0}", queryResults.StatusDescription));
            WriteVerbose(String.Format("HTTP protocol version: {0}", queryResults.HttpProtocolVersion));
            WriteVerbose(String.Format("Response content type: {0}", queryResults.ContentType));

            Cmdlet.WriteDebug(String.Format("Response headers: {0}", String.Join(",", queryResults.ResponseHeaders.AllKeys)));
        }
Exemplo n.º 8
0
 public static JObject ToDto(this SearchQueryResult <MedicinalPackageResult> result)
 {
     return(new JObject
     {
         { "count", result.Count },
         { "start_index", result.StartIndex },
         { "content", new JArray(result.Content.Select(c => c.ToDto())) }
     });
 }
        public void Should_return_true_if_status_code_is_429()
        {
            var result = new SearchQueryResult
            {
                HttpStatusCode = (HttpStatusCode)429
            };

            Assert.IsTrue(result.ShouldRetry());
        }
        private async Task GetListingsAsyncShouldNotFetchItemsIfSearchQueryResultIsEmpty(AsyncTestDelegate asyncTestDelegate)
        {
            var searchQueryResult = new SearchQueryResult();

            this.poeTradeApiJsonSerializerMock.Setup(x => x.Deserialize <SearchQueryResult>(It.IsAny <string>()))
            .Returns(searchQueryResult);

            await asyncTestDelegate();

            this.httpClientWrapperMock.Verify(x => x.GetAsync(It.Is <string>(s => s.Contains(Resources.PoeTradeApiFetchEndpoint)), It.IsAny <CancellationToken>()), Times.Never);
        }
Exemplo n.º 11
0
        public static SearchQueryResult GetResultItem(this HttpRequestResponsePair requestResponsePair)
        {
            SearchQueryResult searchResults;
            var request = requestResponsePair.Item1;

            using (var response = requestResponsePair.Item2)
            {
                if (response.StatusCode != HttpStatusCode.OK)
                {
                    throw new Exception(String.Format("HTTP {0}: {1}", (int)response.StatusCode, response.StatusDescription));
                }

                using (var reader = new StreamReader(response.GetResponseStream()))
                {
                    var content = reader.ReadToEnd();

                    NameValueCollection requestHeaders = new NameValueCollection();
                    foreach (var header in request.Headers.AllKeys)
                    {
                        requestHeaders.Add(header, request.Headers[header]);
                    }

                    NameValueCollection responseHeaders = new NameValueCollection();
                    foreach (var header in response.Headers.AllKeys)
                    {
                        responseHeaders.Add(header, response.Headers[header]);
                    }

                    string requestContent = "";
                    if (request.Method == "POST")
                    {
                        requestContent = requestResponsePair.Item3;
                    }

                    searchResults = new SearchQueryResult
                    {
                        RequestUri          = request.RequestUri,
                        RequestMethod       = request.Method,
                        RequestContent      = requestContent,
                        ContentType         = response.ContentType,
                        ResponseContent     = content,
                        RequestHeaders      = requestHeaders,
                        ResponseHeaders     = responseHeaders,
                        StatusCode          = response.StatusCode,
                        StatusDescription   = response.StatusDescription,
                        HttpProtocolVersion = response.ProtocolVersion.ToString()
                    };

                    searchResults.Process();
                }
            }
            return(searchResults);
        }
        private void SetUpSearchQueryRepository()
        {
            var result = new SearchResult()
            {
                Documents = new List <Document>(),
                Facets    = new List <Facet>()
                {
                    new Facet()
                    {
                        FacetType = FacetType.Field,
                        FieldName = QuerySelectedFacetName,
                        Count     = 1,
                        Values    = new List <FacetValue>()
                        {
                            new FacetValue()
                            {
                                Value       = QuerySelectedFacetValue,
                                DisplayName = QuerySelectedFacetValue,
                                Count       = 1,
                            },
                            new FacetValue()
                            {
                                Value       = GetRandom.String(5),
                                DisplayName = GetRandom.String(5),
                                Count       = 5
                            }
                        }
                    }
                }
            };

            var results = new SearchQueryResult
            {
                SelectedFacets = new List <Overture.ServiceModel.SearchQueries.SelectedFacet>()
                {
                    new SelectedFacet()
                    {
                        FacetName = QuerySelectedFacetName,
                        Values    = new List <string>()
                        {
                            QuerySelectedFacetValue
                        }
                    }
                },
                Result = result
            };

            var mock      = new Mock <ISearchQueryRepository>();
            var mockSetup = mock.Setup(repository => repository.SearchQueryProductAsync(It.IsAny <SearchQueryProductParams>()));

            mockSetup.Returns(Task.FromResult(results));
            _container.Use(mock);
        }
Exemplo n.º 13
0
 protected virtual void PopulateItemFromSearchQueryResult(SearchQueryResult queryResults, PSObject item)
 {
     item.Properties.Add(new PSVariableProperty(new PSVariable("StatusCode", queryResults.StatusCode)));
     item.Properties.Add(new PSVariableProperty(new PSVariable("StatusDescription", queryResults.StatusDescription)));
     item.Properties.Add(new PSVariableProperty(new PSVariable("HTTPProtocalVersion", queryResults.HttpProtocolVersion)));
     item.Properties.Add(new PSVariableProperty(new PSVariable("ContentType", queryResults.ContentType)));
     item.Properties.Add(new PSVariableProperty(new PSVariable("ElapsedTime", queryResults.ElapsedTime)));
     item.Properties.Add(new PSVariableProperty(new PSVariable("ElapsedMilliseconds", queryResults.ElapsedMilliseconds)));
     item.Properties.Add(new PSVariableProperty(new PSVariable("QueryElapsedTime", queryResults.QueryElapsedTime)));
     item.Properties.Add(new PSVariableProperty(new PSVariable("NumSecondaryResults", queryResults.SecondaryQueryResults != null ? queryResults.SecondaryQueryResults.Count : 0)));
     item.Properties.Add(new PSVariableProperty(new PSVariable("NumTriggeredRules", queryResults.TriggeredRules != null ? queryResults.TriggeredRules.Count : 0)));
     item.Properties.Add(new PSVariableProperty(new PSVariable("TriggeredRules", queryResults.TriggeredRules)));
 }
Exemplo n.º 14
0
        private async Task <ItemListingsQueryResult> GetItemListingsQueryResult(IQueryRequest queryRequest, CancellationToken cancellationToken)
        {
            try
            {
                SearchQueryResult searchQueryResult = await this.GetSearchQueryResult(queryRequest, cancellationToken).ConfigureAwait(false);

                return(await this.GetListingsQueryResult(searchQueryResult, cancellationToken).ConfigureAwait(false));
            }
            catch (Exception exception) when(exception is not PoeTradeApiCommunicationException and not OperationCanceledException)
            {
                throw new PoeTradeApiCommunicationException("Retrieving listings for item led to an exception.", exception);
            }
        }
Exemplo n.º 15
0
        protected virtual void PopulateItemFromSecondaryResults(SearchQueryResult queryResults, PSObject item)
        {
            if (queryResults.SecondaryQueryResults != null)
            {
                int resultGroup = 2;   // Primary results are result group 1

                foreach (var queryResult in queryResults.SecondaryQueryResults)
                {
                    PopulateItemFromQueryResult(queryResult, item, resultGroup);

                    resultGroup++;
                }
            }
        }
Exemplo n.º 16
0
        public override void Process(SearchQueryResult queryResults)
        {
            var item = new PSObject();

            PopulateItemFromSearchQueryResult(queryResults, item);

            if (queryResults.PrimaryQueryResult != null)
            {
                PopulateItemFromQueryResult(queryResults.PrimaryQueryResult, item, 1);
            }

            PopulateItemFromSecondaryResults(queryResults, item);

            Cmdlet.WriteObject(item);
        }
Exemplo n.º 17
0
        public UnexpectedResultException(SearchQueryResult result, string message = null) : base($"Unexpected result! {message}")
        {
            var serializer = new JavaScriptSerializer();

            // Request
            var hdrs = result.RequestHeaders.ToDictionary();

            Data.Add("RequestHeaders", serializer.Serialize(hdrs));
            Data.Add("RequestUri", result.RequestUri);
            Data.Add("RequestContent", result.RequestContent);

            // Response
            hdrs = result.ResponseHeaders.ToDictionary();

            Data.Add("ResponseHeaders", serializer.Serialize(hdrs));
            Data.Add("ResponseContent", result.ResponseContent);
        }
Exemplo n.º 18
0
        private async Task <ItemListingsQueryResult> GetListingsQueryResult(SearchQueryResult searchQueryResult, CancellationToken cancellationToken)
        {
            ItemListingsQueryResult itemListingsQueryResult = null;

            if (searchQueryResult.Total > 0)
            {
                string url = $"{Resources.PoeTradeApiFetchEndpoint}/{string.Join(",", searchQueryResult.Result.Take(10))}";
                itemListingsQueryResult = await this.GetAsync <ItemListingsQueryResult>(url, cancellationToken).ConfigureAwait(false);
            }

            itemListingsQueryResult ??= new ItemListingsQueryResult();
            itemListingsQueryResult.Uri                = new Uri($"{Resources.PoeTradeBaseUrl}{Resources.PoeTradeApiSearchEndpoint}/{searchQueryResult.Request.League}/{searchQueryResult.Id}");
            itemListingsQueryResult.TotalCount         = searchQueryResult.Total;
            itemListingsQueryResult.SearchQueryRequest = searchQueryResult.Request;

            return(itemListingsQueryResult);
        }
Exemplo n.º 19
0
        private string ParseResult(SearchQueryResult res)
        {
            StringBuilder output = new StringBuilder();

            output.Append(RES_HEADER_TEMPLATE);
            output.AppendFormat("<h1>Server response status: {0}</h1>", Enum.GetName(typeof(CommandStatus), res.Status));
            if (res.HasWarning)
            {
                output.AppendFormat("<h2 style='color: olive;'>Warning: {0}</h2>", res.Warning);
            }
            output.AppendFormat("<h2>Matches count: {0}</h2>", res.Matches.Count);
            output.Append("<table border=1><tr><th>Document ID</th><th>Weight</th><th>Attributes</th></tr>");
            foreach (Match match in res.Matches)
            {
                output.Append("<tr>");
                output.AppendFormat("<td>{0}</td>", match.DocumentId);
                output.AppendFormat("<td>{0}</td>", match.Weight);
                output.AppendFormat("<td><div>Attributes count: {0}</div>", match.AttributesValues.Count);
                output.AppendFormat("<table border=1><tr><th>Name</th><th>Value</th><th>Type</th></tr>");
                foreach (AttributeBase attr in match.AttributesValues)
                {
                    string name = attr.Name;
                    string type = Enum.GetName(typeof(AttributeType), attr.AttributeType);
                    string val  = GetAttributeValueAsString(attr);

                    output.AppendFormat("<tr><td>{0}</td><td>{1}</td><td>{2}</td></tr>", name, val, type);
                }
                output.Append("</table></td></tr>");
            }
            output.Append("</table>");
            output.AppendFormat("<h2>Words count: {0}</h2>", res.Words.Count);
            output.Append("<table border=1><tr><th>Word</th><th>Hits</th><th>Documents</th></tr>");
            foreach (WordInfo w in res.Words)
            {
                output.AppendFormat("<tr><td>{0}</td><td>{1}</td><td>{2}</td></tr>", w.Word, w.Hits, w.Documents);
            }
            output.Append("</table>");
            output.AppendFormat("<p>Elapsed time: {0}</p>", res.ElapsedTime);
            output.AppendFormat("<p>Count in list: {0}</p>", res.Count);
            output.AppendFormat("<p>Total found: {0}</p>", res.TotalFound);

            output.Append(RES_FOOTER_TEMPLATE);
            return(output.ToString());
        }
        private async Task GetListingsAsyncShouldFetchItemsWithCorrectUri(AsyncTestDelegate asyncTestDelegate)
        {
            var searchQueryResult = new SearchQueryResult
            {
                Result = Enumerable.Range(0, 20).Select(i => i.ToString()).ToList(),
                Total  = 20
            };

            string expectedUri = $"{Resources.PoeTradeApiFetchEndpoint}/{string.Join(',', searchQueryResult.Result.Take(10))}";

            this.poeTradeApiJsonSerializerMock.Setup(x => x.Deserialize <SearchQueryResult>(It.IsAny <string>()))
            .Returns(searchQueryResult);

            this.poeTradeApiJsonSerializerMock.Setup(x => x.Deserialize <ItemListingsQueryResult>(It.IsAny <string>()))
            .Returns(new ItemListingsQueryResult());

            await asyncTestDelegate();

            this.httpClientWrapperMock.Verify(x => x.GetAsync(expectedUri, It.IsAny <CancellationToken>()));
        }
Exemplo n.º 21
0
        public override void Process(SearchQueryResult queryResults)
        {
            var item = new PSObject();

            item.Properties.Add(new PSVariableProperty(new PSVariable("StatusCode", queryResults.StatusCode)));
            item.Properties.Add(new PSVariableProperty(new PSVariable("StatusDescription", queryResults.StatusDescription)));
            item.Properties.Add(new PSVariableProperty(new PSVariable("HTTPProtocalVersion", queryResults.HttpProtocolVersion)));
            item.Properties.Add(new PSVariableProperty(new PSVariable("ContentType", queryResults.ContentType)));
            //item.Properties.Add(new PSVariableProperty(new PSVariable("ResponseHeaders", String.Join(",",queryResults.ResponseHeaders.AllKeys))));
            item.Properties.Add(new PSVariableProperty(new PSVariable("TotalRows", queryResults.PrimaryQueryResult.TotalRows)));
            item.Properties.Add(new PSVariableProperty(new PSVariable("TotalRowsInclDups", queryResults.PrimaryQueryResult.TotalRowsIncludingDuplicates)));
            item.Properties.Add(new PSVariableProperty(new PSVariable("QueryId", queryResults.PrimaryQueryResult.QueryId)));
            item.Properties.Add(new PSVariableProperty(new PSVariable("QueryModification", queryResults.PrimaryQueryResult.QueryModification)));
            item.Properties.Add(new PSVariableProperty(new PSVariable("QueryRuleId", queryResults.PrimaryQueryResult.QueryRuleId)));
            item.Properties.Add(new PSVariableProperty(new PSVariable("NumSecondaryResults", queryResults.SecondaryQueryResults != null ? queryResults.SecondaryQueryResults.Count : 0)));
            //item.Properties.Add(new PSVariableProperty(new PSVariable("NumRefiners", queryResults.PrimaryQueryResult.RefinerResults != null ? queryResults.PrimaryQueryResult.RefinerResults.Count : 0)));
            item.Properties.Add(new PSVariableProperty(new PSVariable("NumTriggeredRules", queryResults.TriggeredRules != null ? queryResults.TriggeredRules.Count : 0)));

            Cmdlet.WriteObject(item);
        }
        public override async Task <ISearchQueryResult> SendWithRetryAsync(SearchQuery searchQuery)
        {
            ISearchQueryResult searchResult = null;

            try
            {
                if (!ConfigInfo.IsSearchCapable)
                {
                    throw new ServiceNotSupportedException
                              (ExceptionUtil.GetMessage(ExceptionUtil.ServiceNotSupportedMsg, "FTS"));
                }

                var     attempts = 0;
                IServer server;
                while ((server = ConfigInfo.GetSearchNode()) == null)
                {
                    if (attempts++ > 10)
                    {
                        throw new TimeoutException("Could not acquire a server.");
                    }
                    Thread.Sleep((int)Math.Pow(2, attempts));
                }

                searchResult = await server.SendAsync(searchQuery);
            }
            catch (Exception e)
            {
                Log.Info(e);
                searchResult = new SearchQueryResult
                {
                    Status    = SearchStatus.Failed,
                    Success   = false,
                    Exception = e
                };
            }
            return(searchResult);
        }
Exemplo n.º 23
0
        public override void Process(SearchQueryResult queryResults)
        {
            ProcessSearchQueryResultInfo(queryResults);


            if (queryResults.PrimaryQueryResult.TotalRows == 0)
            {
                Cmdlet.WriteWarning("The query returned zero results.");
            }
            else
            {
                ProcessPrimaryQueryResults(queryResults.PrimaryQueryResult);
            }

            if (queryResults.SecondaryQueryResults != null)
            {
                ProcessSecondaryQueryResults(queryResults.SecondaryQueryResults);
            }

            if (queryResults.TriggeredRules != null)
            {
                ProcessTriggeredRules(queryResults.TriggeredRules);
            }
        }
Exemplo n.º 24
0
        public Task <ProductSearchResult> GetCategoryFacetCountsAsync(SearchCriteria criteria, SearchQueryResult queryResults)
        {
            if (criteria == null)
            {
                throw new ArgumentNullException(nameof(criteria));
            }

            var request = ProductRequestFactory.CreateProductRequest(criteria);

            request.Query.IncludeTotalCount = true;
            request.Query.MaximumItems      = 0;
            request.Query.StartingIndex     = 0;
            request.CultureName             = criteria.CultureInfo.Name;
            request.SearchTerms             = criteria.Keywords;
            request.ScopeId       = criteria.Scope;
            request.IncludeFacets = criteria.IncludeFacets;

            var facetsForCounts = FacetConfigContext.GetFacetSettings()
                                  .Where(fs => fs.FieldName.StartsWith(SearchConfiguration.CategoryFacetFiledNamePrefix))
                                  .Select(f => f.FieldName.Replace("_Facet", ""));
            var facets = GetFacetFieldNameToQuery(criteria);

            facets.AddRange(facetsForCounts);
            request.Facets          = facets;
            request.FacetPredicates = new List <FacetPredicate>();
            if (criteria.SelectedFacets != null)
            {
                request.FacetPredicates = criteria.SelectedFacets
                                          .Where(sf => !sf.Name.StartsWith(SearchConfiguration.CategoryFacetFiledNamePrefix))
                                          .Select(FacetPredicateFactory.CreateFacetPredicate)
                                          .Where(fp => fp != null).ToList();
            }
            if (queryResults.SelectedFacets != null)
            {
                foreach (var queryFacet in queryResults.SelectedFacets)
                {
                    foreach (var queryFacetValue in queryFacet.Values)
                    {
                        if (criteria.SelectedFacets.FirstOrDefault(s => s.Value == queryFacetValue && s.Name == queryFacet.FacetName) == null)
                        {
                            var facetPredicate = FacetPredicateFactory.CreateFacetPredicate(queryFacet.FacetName, queryFacetValue);
                            if (facetPredicate != null)
                            {
                                request.FacetPredicates.Add(facetPredicate);
                            }
                        }
                    }
                }
            }
            request.InventoryLocationIds = criteria.InventoryLocationIds;
            request.AutoCorrect          = criteria.AutoCorrect;
            request.AvailabilityDate     = criteria.AvailabilityDate;

            return(ExecuteProductSearchRequestAsync(request));
        }
Exemplo n.º 25
0
 protected override void PopulateItemFromSecondaryResults(SearchQueryResult queryResults, PSObject item)
 {
     // no secondary result information
 }
Exemplo n.º 26
0
 public abstract void Process(SearchQueryResult searchQueryResult);
Exemplo n.º 27
0
        public override void Process(SearchQueryResult queryResults)
        {
            var item = new PSObject(queryResults);

            Cmdlet.WriteObject(item);
        }