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); }
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); }
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); }