Exemplo n.º 1
0
        /// <summary>
        /// Posts data to the specified method.
        /// </summary>
        /// <typeparam name="T">Response output type.</typeparam>
        /// <param name="methodName">Name of the service method.</param>
        /// <param name="requestBody">The request body.</param>
        /// <param name="timeoutSec">The timeout sec.</param>
        /// <returns>Response's output.</returns>
        protected void Post(string methodName, object requestBody, int timeoutSec)
        {
            IRestRequest request = _httpClient.CreateJsonRequest(methodName, requestBody);

            _httpClient.Timeout = timeoutSec * 1000;
            var restResponse = _httpClient.Post(request);

            CheckServiceResponse(restResponse);
        }
Exemplo n.º 2
0
        private bool EnrichAccountData(Guid accountId, SearchInfoRequest requestBody)
        {
            var           request = _restClient.CreateJsonRequest(SearchMethodName, requestBody);
            IRestResponse response;

            try {
                response = _restClient.Post(request);
            } catch (Exception ex) {
                throw new HttpException((int)HttpStatusCode.InternalServerError, ex.Message);
            }
            HandleRestClientError(response);
            SearchInfoResponse responseInfo = ServiceStackTextHelper.Deserialize <SearchInfoResponse>(response.Content);

            if (responseInfo.Status == "error")
            {
                throw new HttpException((int)HttpStatusCode.InternalServerError, responseInfo.Message);
            }
            if (responseInfo.CommunicationInfo == null)
            {
                var message = $"CommunicationInfo is null. StatusCode = '{response.StatusCode}' " +
                              $"ResponseStatus = '{response.ResponseStatus}' ErrorMessage = '{response.ErrorMessage}' " +
                              $"Content: {response.Content}";
                throw new HttpException((int)HttpStatusCode.InternalServerError, message);
            }
            bool result = UpdateEnrichedData(accountId, responseInfo.CommunicationInfo);

            return(result);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Applies batch request for set of emails.
        /// </summary>
        /// <param name="emails">List of email entities for processing. Entities must be loaded with
        /// Id, Body, IsHtmlBody, Sender columns.</param>
        /// <returns>Dictionary with email as key and found data as value.</returns>
        /// <exception cref="Terrasoft.Common.ArgumentNullOrEmptyException">Throws when emails are null.</exception>
        /// <exception cref="IncorrectConfigurationException">Throws if configuration is wrong.</exception>
        public Dictionary <Entity, GetEmailEntitiesResponse> BatchCall(IEnumerable <Entity> emails)
        {
            var result = new Dictionary <Entity, GetEmailEntitiesResponse>();

            emails.CheckArgumentNull("emails");
            CheckRequiredParameters(out string serviceUrl, out string apiKey);
#if NETFRAMEWORK
            _httpClient.BaseUrl = serviceUrl;
#else
            _httpClient.BaseUrl = new Uri(serviceUrl);
#endif
            _httpClient.Timeout = (int)_requestTimeout.TotalMilliseconds;
            _httpClient.AddDefaultHeader("ApiKey", apiKey);
            GetEmailEntitiesRequest[] requests    = emails.Select(email => PrepareRequest(email, apiKey)).ToArray();
            IRestRequest  batchRequest            = _httpClient.CreateJsonRequest(ServiceEmailParsingMethod, requests);
            IRestResponse batchResponse           = _httpClient.Post(batchRequest);
            var           batchResponseStatusCode = (int)batchResponse.StatusCode;
            if (batchResponseStatusCode >= 400 || batchResponseStatusCode == 0)
            {
                if (batchResponseStatusCode != 500)
                {
                    _metricReporter.Gauge(EmailMiningUnreachableMetricName, 1);
                }
                switch (batchResponse.StatusCode)
                {
                case 0:
                    if (batchResponse.ErrorException is UriFormatException)
                    {
                        throw new IncorrectConfigurationException(EmailMiningConsts.TextParsingServiceSysSetting,
                                                                  serviceUrl, batchResponse.ErrorMessage);
                    }
                    else
                    {
                        _log.ErrorFormat("Request cannot be completed by RestSharp. Error: {0}",
                                         batchResponse.ErrorMessage);
                        return(result);
                    }

                case HttpStatusCode.Unauthorized:
                    throw new IncorrectConfigurationException(CloudServicesAPIKey, apiKey);

                case HttpStatusCode.NotFound:
                    throw new IncorrectConfigurationException(EmailMiningConsts.TextParsingServiceSysSetting,
                                                              serviceUrl, "Text Mining service not found");

                default:
                    string error = batchResponse.ErrorMessage.IsNullOrEmpty()
                                                        ? batchResponse.Content
                                                        : batchResponse.ErrorMessage;
                    _log.ErrorFormat("Cannot process email pack. Response code: {0}({1}). Error: {2}",
                                     batchResponse.StatusCode, (int)batchResponse.StatusCode, error);
                    return(result);
                }
            }
            else
            {
                _metricReporter.Gauge(EmailMiningUnreachableMetricName, 0);
            }
            List <GetEmailEntitiesResponse> responses;
            try {
                responses = JsonConvert.DeserializeObject <List <GetEmailEntitiesResponse> >(batchResponse.Content)
                            .ToList();
            } catch (JsonSerializationException) {
                throw new IncorrectConfigurationException(EmailMiningConsts.TextParsingServiceSysSetting,
                                                          serviceUrl, "OK, but malformed batch response received - Text Mining API version mismatch.");
            }
            if (responses.Count != requests.Length)
            {
                _log.ErrorFormat(
                    "Batch request corrupted! Number of requests ({0}) is not equal to number of responses ({1}).",
                    requests.Length, responses.Count);
                return(result);
            }
            if (responses.All(response => response.Code == (int)HttpStatusCode.OK && response.TextEntities == null))
            {
                throw new IncorrectConfigurationException(EmailMiningConsts.TextParsingServiceSysSetting,
                                                          serviceUrl, "OK, but malformed responses received - Text Mining API version mismatch.");
            }
            result = emails
                     .Zip(responses, (email, response) => new { email, response })
                     .ToDictionary(pair => pair.email, pair => pair.response);
            LogBatchResponseSummary(result);
            return(result);
        }