o
    ^i                     @   sj   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d	ed
efddZd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 t|pg }t| }|jrL|jd}d}t|D ] \}}|d\}}	}
|D ]}||v r;| |	 d||< d}q*q|rL|jd	|d}t
|S | S )zscrub auth info from uri&F=z[secret]T)query)_DEFAULT_SCRUB_PARAM_KEYSunionsetr   r   split	enumerate	partition_replacejoinr   )r   extra_param_keysscrub_param_keysparsedpartschangedisr   sepvalue	substring r%   M/home/ubuntu/hpml_nyu/venv/lib/python3.10/site-packages/jupyter_server/log.py
_scrub_uri   s"   r'   Tc                 C   s  |   }| j}z| j}W n ty   t}Y nw | jdg }|dk s'|dkr+|j}n|dk r3|j}n|dk r;|j	}n|j
}d| j  }||j|jt|j||d}z| j}	W n tyc   d}	Y nw |	rpt|	trn|	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 | |rt|  dS 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

    if record_prometheus_metrics is true, will record a histogram prometheus
    metric (http_request_duration_seconds) for each request handler
    extra_log_scrub_param_keysi,  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Acceptr0   z
User-Agent   )indentr%   )
get_statusrequestlogAttributeErrorr   settingsgetdebuginfowarningerrorr,   r*   	remote_ipr'   r   current_user	Exception
isinstancer   r/   headersjsondumpsformatr   )handlerrecord_prometheus_metricsr)   r8   loggerr   
log_methodr,   nsuserr/   msgrE   headerr%   r%   r&   log_request/   sX   




rQ   )N)T)__doc__rF   urllib.parser   r   tornado.logr   r	   r   prometheus.log_functionsr   r   strr'   rQ   r%   r%   r%   r&   <module>   s    