Beispiel #1
0
        private async Task <HttpContent> Request(string path, object?body, HttpMethod method, NodeCredentials credentials, CancellationToken ct = default)
        {
            using var client = ClientFor(credentials);

            var request = new HttpRequestMessage();

            if (body != null)
            {
                request.Content = new StringContent(JsonConvert.SerializeObject(body), Encoding.UTF8);
            }

            request.Method     = method;
            request.RequestUri = new Uri(path, UriKind.Relative);

            var resp = await client.SendAsync(request, ct);

            if (!resp.IsSuccessStatusCode)
            {
                var errorResponse = await resp.Content.ReadFromJsonAsync <ProxyClientErrorResponse>(cancellationToken : ct)
                                    ?? throw new InvalidOperationException("Could not read error response");

                var exp = new ProxyClientException(errorResponse.Title)
                {
                    ErrorResponse = errorResponse
                };

                LogError(exp);

                throw exp;
            }

            return(resp.Content);
        }
Beispiel #2
0
        private void LogError(ProxyClientException ex)
        {
            var currentActivity = Activity.Current;

            connectionLog.Error(
                currentActivity != null && ex.ErrorResponse != null ? $"{currentActivity.DisplayName} failed" : ex.Message,
                ex,
                ex.ErrorResponse != null ? new Dictionary <string, dynamic>(
                    new[]
            {
                new KeyValuePair <string, dynamic>("detail", ex.ErrorResponse.Detail)
            }) : null
                );

            currentActivity?.AddEvent(new ActivityEvent("Request failed", tags: new ActivityTagsCollection
            {
                ["detail"] = ex.ErrorResponse?.Detail,
                ["title"]  = ex.ErrorResponse?.Title,
                ["type"]   = ex.ErrorResponse?.Type
            }));
        }