public async Task <TResponse> GetAsync <TResponse>(string path) { var request = new HttpRequest(HttpMethod.Get, _basePath + path); var response = await _server.InvokeAsync(request); response.EnsureSuccessStatusCode(); return((TResponse)response.Body !); }
public override async Task <HttpResponse> InvokeAsync(HttpRequest request) { await Task.Delay(100 + (int)(Distribution.Uniform() * 300)); var response = await _next.InvokeAsync(request); await Task.Delay(10 + (int)(Distribution.Uniform() * 100)); return(response); }
public override async Task <HttpResponse> InvokeAsync(HttpRequest request) { if (Distribution.OnceIn(220)) { var fault = Distribution.Uniform(_faults); return(await fault(request)); } var result = await _next.InvokeAsync(request); if (Distribution.OnceIn(280)) { return(await Dropped()); } return(result); }
public override async Task <HttpResponse> InvokeAsync(HttpRequest request) { var current = Interlocked.Increment(ref _activeRequests); try { var delay = (int)(10 * Distribution.Uniform()); if (current > Capacity) { // One extra millisecond per concurrent request over capacity, ramping up delay += (int)Math.Pow(current - Capacity, 1.6); } await Task.Delay(delay); return(await _next.InvokeAsync(request)); } finally { Interlocked.Decrement(ref _activeRequests); } }
public override async Task <HttpResponse> InvokeAsync(HttpRequest request) { using var _ = LogContext.PushProperty("RequestId", request.RequestId); var sw = Stopwatch.StartNew(); try { var response = await _next.InvokeAsync(request); LogCompletion(null, request, sw, response.StatusCode); return(response); } catch (Exception ex1) when(LogCompletion(ex1, request, sw, HttpStatusCode.InternalServerError)) { // We never hit this, because the exception filter always returns false. throw; } catch { return(new HttpResponse(HttpStatusCode.InternalServerError, "An error occurred.")); } }