Beispiel #1
0
def _log_request(handler: RequestHandler) -> None:
    if handler.get_status() < 400:
        log_method = logger.debug

    elif handler.get_status() < 500:
        log_method = logger.warning

    else:
        log_method = logger.error

    request_time = 1000.0 * handler.request.request_time()
    log_method('%d %s %.2fms', handler.get_status(), handler._request_summary(), request_time)
Beispiel #2
0
def _make_http_attributes(
        handler: RequestHandler) -> attributes.NetworkAttributes:
    request = handler.request
    return attributes.HttpAttributes(extract_header=request.headers.get,
                                     url=request.full_url(),
                                     method=request.method,
                                     status_code=handler.get_status())
Beispiel #3
0
    def _intercept_request_and_response(self, handler: RequestHandler) -> None:
        # Record the request and response
        record = TraceRecord(
            timestamp=datetime.now() -
            timedelta(seconds=handler.request.request_time()),
            principal=None,
            session=None,
            request=TraceRequest(
                method=handler.request.method or "",
                uri=handler.request.full_url(),
                headers={
                    k.lower(): v
                    for k, v in handler.request.headers.items()
                }),
            response=TraceResponse(
                status=handler.get_status(),
                headers={k.lower(): [v]
                         for k, v in handler._headers.items()}  # pylint: disable=protected-access
            ),
            timeTaken=int(handler.request.request_time() * 1000),
        )
        self.pyctuator_impl.http_tracer.add_record(record)

        if self.delegate_log_function:
            self.delegate_log_function(handler)
Beispiel #4
0
 def log_request(self, handler: web.RequestHandler) -> None:
     """Writes a completed HTTP request to the logs"""
     if handler.request.path == '/status':
         return
     request_time = 1000.0 * handler.request.request_time()
     status_code = handler.get_status()
     if status_code < 400:
         self._request_logger.info(
             REQUEST_LOG_FORMAT, status_code, handler._request_summary(),
             request_time, handler.request.headers.get('User-Agent'))
     if 400 <= status_code < 500:
         self._request_logger.warning(
             REQUEST_LOG_FORMAT, status_code, handler._request_summary(),
             request_time, handler.request.headers.get('User-Agent'))
     if status_code > 500:
         self._request_logger.error(
             REQUEST_LOG_FORMAT, status_code, handler._request_summary(),
             request_time, handler.request.headers.get('User-Agent'))
Beispiel #5
0
 def log_request(self, handler: web.RequestHandler) -> None:
     """Handle access log."""
     if 'log_function' in self.settings:
         self.settings['log_function'](handler)
         return
     status = handler.get_status()
     if status < 400:
         log_method = logger.info
     elif status < 500:
         log_method = logger.warning
     else:
         log_method = logger.error
     request_time = 1000.0 * handler.request.request_time()
     if request_time > 10:
         logger.warning('%d %s %.2fms', status, handler._request_summary(),
                        request_time)
     else:
         log_method('%d %s', status, handler._request_summary())
Beispiel #6
0
    def _update_metrics(self, handler: RequestHandler) -> None:
        method = handler.request.method
        handler_name = type(handler).__name__
        content_length_str = handler._headers.get("Content-Length")
        try:
            if isinstance(content_length_str, str):
                content_length: Optional[int] = int(content_length_str)
            else:
                content_length = None
        except ValueError:
            content_length = None

        self._requests_duration_seconds_histogram.labels(
            handler_name, method).observe(handler.request.request_time())
        self._requests_total_counter.labels(handler_name, method,
                                            handler.get_status()).inc()
        if isinstance(content_length, int):
            self._response_size_bytes_histogram.labels(
                handler_name, method).observe(content_length)