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)
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())
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)
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'))
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())
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)