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); }
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))); }
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); }
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); }
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); }
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))); }
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); }
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); }
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))); }
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); } }
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++; } } }
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); }
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); }
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); }
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>())); }
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); }
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); } }
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)); }
protected override void PopulateItemFromSecondaryResults(SearchQueryResult queryResults, PSObject item) { // no secondary result information }
public abstract void Process(SearchQueryResult searchQueryResult);
public override void Process(SearchQueryResult queryResults) { var item = new PSObject(queryResults); Cmdlet.WriteObject(item); }