
    Fh1                     h    S r SSKrSSKJrJr  SSKJr  SSKJr  SSK	J
r
  1 SkrS	\S
\4S jrSS jrg)zLog utilities.    N)urlparse
urlunparse)
access_log   )User)prometheus_log_method>   keyauthcodexsrfstatetokenurireturnc                 f   [        U 5      nUR                  (       a  UR                  R                  S5      nSn[        U5       H8  u  pEUR	                  S5      u  pgn[
         H  n	X;   d  M
  U U S3X$'   SnM     M:     U(       a)  UR                  SR                  U5      S9n[        U5      $ U $ )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	substrings
             eC:\Users\julio\OneDrive\Documentos\Trabajo\Ideas Frescas\venv\Lib\site-packages\jupyter_server/log.py
_scrub_urir$      s    c]F|| ""3'e$DAkk#.OCe.	#"%se84EH"G / % __388E?_;Ff%%J    c                    U R                  5       nU R                  n U R                  nUS:  d  US:X  a  UR
                  nO2US:  a  UR                  nOUS:  a  UR                  nOUR                  nSU R                  R                  5       -  nUUR                  UR                  [        UR                  5      US.n U R                  nU(       a#  [!        U["        5      (       a  UR$                  OSOS	n	XS
'   Sn
US:  a-  [        UR&                  R)                  SS5      5      US'   U
S-   n
US:  aN  US:w  aH  0 nS H%  nXR&                  ;   d  M  UR&                  U   X'   M'     U" [*        R,                  " USS95        U" U
R.                  " S0 UD65        U(       a  [1        U 5        gg! [         a
    [        n GNf = f! [         a    Sn GNf = f)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
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   )indent )
get_statusrequestlogAttributeErrorr   debuginfowarningerrorr*   r(   	remote_ipr$   r   current_user	Exception
isinstancer   r-   headersgetjsondumpsformatr   )handlerrecord_prometheus_metricsr'   r7   logger
log_methodr*   nsuserr-   msgrB   headers                r#   log_requestrO   ,   s    !FooG |v}\\
	#[[
	#^^
\\
GOO88::L..'++&$
B## LPD$!7!7YUWHzN
JC}"7??#6#6y&#IJ9((}3AF(")//&"9 B 	4::ga01szzB  g& !Y  4  s#   F3 G
 3GG
GG)T)__doc__rD   urllib.parser   r   tornado.logr   r
   r   prometheus.log_functionsr   r   strr$   rO   r5   r%   r#   <module>rU      s:      - "  ;
 F C C *<'r%   