o
    i                     @   sf   d Z ddlZddlmZmZ ddlmZ ddlmZ ddl	m
Z
 h dZd	ed
efddZdd ZdS )zLog utilities.    N)urlparse
urlunparse)
access_log   )User)prometheus_log_method>   keyauthcodexsrfstatetokenurireturnc           
      C   s   t | }|jrC|jd}d}t|D ] \}}|d\}}}tD ]}	|	|v r2| | d||< d}q!q|rC|jd|d}t|S | S )zscrub auth info from uri&F=z[secret]T)query)	r   r   split	enumerate	partition_SCRUB_PARAM_KEYS_replacejoinr   )
r   parsedpartschangedisr   sepvalue	substring r!   M/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/jupyter_server/log.py
_scrub_uri   s    r#   c                 C   sn  |   }| j}z| j}W n ty   t}Y nw |dk s |dkr$|j}n|dk r,|j}n|dk r4|j}n|j}d| j	  }||j
|jt|j|d}z| j}W n ty[   d}Y nw |rht|trf|jndnd	}||d
< d}	|dkrt|jdd|d< |	d }	|dkr|dkri }
dD ]}||jv r|j| |
|< q|tj|
dd ||	jdi | t|  dS )a  log a bit more information about each request than tornado's default

    - move static file get success to debug-level (reduces noise)
    - get proxied IP instead of proxy IP
    - log referer for redirect and failed requests
    - log user-agent for failed requests
    i,  i0  i  i  g     @@)statusmethodipr   request_timeNunknown usernamez>{status} {method} {uri} ({username}@{ip}) {request_time:.2f}msRefererNonerefererz referer={referer}i  )HostAcceptr+   z
User-Agent   )indentr!   )
get_statusrequestlogAttributeErrorr   debuginfowarningerrorr'   r%   	remote_ipr#   r   current_user	Exception
isinstancer   r*   headersgetjsondumpsformatr   )handlerr$   r3   logger
log_methodr'   nsuserr*   msgr>   headerr!   r!   r"   log_request+   sR   



rJ   )__doc__r@   urllib.parser   r   tornado.logr   r	   r   prometheus.log_functionsr   r   strr#   rJ   r!   r!   r!   r"   <module>   s    