
    Mh1                     f    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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                 n   t          |           }|j        r|j                            d          }d}t          |          D ]8\  }}|                    d          \  }}}t
          D ]}	|	|v r| | d||<   d}9|r8|                    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	substrings
             R/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/jupyter_server/log.py
_scrub_urir$      s    c]]F| & ""3''e$$ 	# 	#DAqkk#..OCe. # #	##"%4s444E!H"G#  	&__388E??_;;Ff%%%J    Tc                 F   |                                  }| j        }	 | j        }n# t          $ r
 t          }Y nw xY w|dk     s|dk    r|j        }n#|dk     r|j        }n|dk     r|j        }n|j        }d| j        	                                z  }||j
        |j        t          |j                  |d}	 | j        }n# t          $ r d}Y nw xY w|rt!          |t"                    r|j        ndnd	}	|	|d
<   d}
|dk    r0t          |j                            dd                    |d<   |
dz   }
|dk    rE|dk    r?i }dD ]}||j        v r|j        |         ||<    |t+          j        |d                      | |
j        di |           |rt1          |            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
    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oG    ||v}}\

	#[

	#^

\
GO88:::L.'+&&$
 
B#   KOWD$!7!7FYYUWHBzN
JC}}"7?#6#6y&#I#IJJ9((}}3A 	: 	:F((")/&"9
4:ga000111JzszB     'g&&&&&' 's   % 994B< <C
C)T)__doc__rD   urllib.parser   r   tornado.logr   r
   r   prometheus.log_functionsr   r   strr$   rO   r5   r%   r#   <module>rU      s       - - - - - - - - " " " " " "       ; ; ; ; ; ;
 FEE C C    *<' <' <' <' <' <'r%   