コード例 #1
0
        private async Task <ResponseStreamHolder> CaptureMetricsAsync(int processId, int durationSeconds, HttpMethod method, HttpContent content, CancellationToken token)
        {
            string uri = FormattableString.Invariant($"/livemetrics?pid={processId}&durationSeconds={durationSeconds}");

            using HttpRequestMessage request = new(method, uri);
            request.Headers.Add(HeaderNames.Accept, ContentTypes.ApplicationJsonSequence);
            request.Content = content;

            using DisposableBox <HttpResponseMessage> responseBox = new(
                      await SendAndLogAsync(
                          request,
                          HttpCompletionOption.ResponseHeadersRead,
                          token).ConfigureAwait(false));

            switch (responseBox.Value.StatusCode)
            {
            case HttpStatusCode.OK:
                ValidateContentType(responseBox.Value, ContentTypes.ApplicationJsonSequence);
                return(await ResponseStreamHolder.CreateAsync(responseBox).ConfigureAwait(false));

            case HttpStatusCode.BadRequest:
                ValidateContentType(responseBox.Value, ContentTypes.ApplicationProblemJson);
                throw await CreateValidationProblemDetailsExceptionAsync(responseBox.Value).ConfigureAwait(false);

            case HttpStatusCode.Unauthorized:
            case HttpStatusCode.NotFound:
            case HttpStatusCode.TooManyRequests:
                ThrowIfNotSuccess(responseBox.Value);
                break;
            }

            throw await CreateUnexpectedStatusCodeExceptionAsync(responseBox.Value).ConfigureAwait(false);
        }
コード例 #2
0
        private async Task <ResponseStreamHolder> CaptureDumpAsync(string processQuery, DumpType dumpType, CancellationToken token)
        {
            using HttpRequestMessage request = new(HttpMethod.Get, $"/dump?{processQuery}&type={dumpType.ToString("G")}");
            request.Headers.Add(HeaderNames.Accept, ContentTypes.ApplicationOctetStream);

            using DisposableBox <HttpResponseMessage> responseBox = new(
                      await SendAndLogAsync(
                          request,
                          HttpCompletionOption.ResponseHeadersRead,
                          token).ConfigureAwait(false));

            switch (responseBox.Value.StatusCode)
            {
            case HttpStatusCode.OK:
                ValidateContentType(responseBox.Value, ContentTypes.ApplicationOctetStream);
                return(await ResponseStreamHolder.CreateAsync(responseBox).ConfigureAwait(false));

            case HttpStatusCode.BadRequest:
                ValidateContentType(responseBox.Value, ContentTypes.ApplicationProblemJson);
                throw await CreateValidationProblemDetailsExceptionAsync(responseBox.Value).ConfigureAwait(false);

            case HttpStatusCode.Unauthorized:
            case HttpStatusCode.NotFound:
            case HttpStatusCode.TooManyRequests:
                ThrowIfNotSuccess(responseBox.Value);
                break;
            }

            throw await CreateUnexpectedStatusCodeExceptionAsync(responseBox.Value).ConfigureAwait(false);
        }
コード例 #3
0
        private async Task <ResponseStreamHolder> CaptureLogsAsync(HttpMethod method, string uri, HttpContent content, LogFormat logFormat, CancellationToken token)
        {
            string contentType = "";

            if (logFormat == LogFormat.JsonSequence)
            {
                contentType = ContentTypes.ApplicationJsonSequence;
            }
            else if (logFormat == LogFormat.NewlineDelimitedJson)
            {
                contentType = ContentTypes.ApplicationNDJson;
            }

            using HttpRequestMessage request = new(method, uri);
            request.Headers.Add(HeaderNames.Accept, contentType);
            request.Content = content;

            using DisposableBox <HttpResponseMessage> responseBox = new(
                      await SendAndLogAsync(
                          request,
                          HttpCompletionOption.ResponseHeadersRead,
                          token).ConfigureAwait(false));

            switch (responseBox.Value.StatusCode)
            {
            case HttpStatusCode.OK:
                ValidateContentType(responseBox.Value, contentType);
                return(await ResponseStreamHolder.CreateAsync(responseBox).ConfigureAwait(false));

            case HttpStatusCode.BadRequest:
                ValidateContentType(responseBox.Value, ContentTypes.ApplicationProblemJson);
                throw await CreateValidationProblemDetailsExceptionAsync(responseBox.Value).ConfigureAwait(false);

            case HttpStatusCode.Unauthorized:
            case HttpStatusCode.NotFound:
            case HttpStatusCode.TooManyRequests:
                ThrowIfNotSuccess(responseBox.Value);
                break;
            }

            throw await CreateUnexpectedStatusCodeExceptionAsync(responseBox.Value).ConfigureAwait(false);
        }