intercept method

  1. @override
Future<HttpResponse> intercept(
  1. HttpRequest request,
  2. CancellationToken token,
  3. HttpRequestHandler next
)
override

Implementation

@override
Future<HttpResponse> intercept(HttpRequest request, CancellationToken token,
    HttpRequestHandler next) async {
  final watch = Stopwatch()..start();
  write({
    'phase': 'request',
    'method': request.method.value,
    'url': '${request.uri.origin}${request.uri.path}',
    'headers': redactor.redact(request.headers)
  });
  try {
    final response = await next(request, token);
    try {
      write({
        'phase': 'headers',
        'status': response.statusCode,
        'elapsedMicroseconds': watch.elapsedMicroseconds
      });
    } catch (_) {
      await response.dispose();
      rethrow;
    }
    return response;
  } catch (error) {
    write({
      'phase': 'failure',
      'errorType': error.runtimeType.toString(),
      'elapsedMicroseconds': watch.elapsedMicroseconds
    });
    rethrow;
  }
}