o
    ix                     @   sZ   d dl Z d dlZeeZdZdZdZd ZdZ	dZ
dZdZd	Zd
d ZG dd deZdS )    Nzclient-request-idzx-client-current-telemetryzx-client-last-telemetry               c                   C   s   t t S )N)struuiduuid4 r
   r
   E/home/app/Keep/.python/lib/python3.10/site-packages/msal/telemetry.py_get_new_correlation_id   s   r   c                   @   sN   e Zd ZdZdZdZdZdZdZddd	Z	d
d Z
dd Zdd Zdd ZdS )_TelemetryContextzLIt is used for handling the telemetry context for current OAuth2 "exchange".	succeededfailedZfailure_sized   i^  Nc                 C   s:   || _ || _|| _|pt | _|pt| _td| j d S )Nz$Generate or reuse correlation_id: %s)	_buffer_lock_api_idr   _correlation_idNON_SILENT_CALL_refresh_reasonloggerdebug)selfbufferlockapi_idcorrelation_idZrefresh_reasonr
   r
   r   __init__   s   
z_TelemetryContext.__init__c                 C   s   | j N dj| j| jd}t|| jkrtd| j | j	| j
g }t| jt|tdj| j	| jdddd |D dd	d |D d
iW  d    S 1 sTw   Y  d S )Nz4|{api_id},{cache_refresh}|)r   Zcache_refreshz9Telemetry header greater than {} will be truncated by AADz)4|{succeeded}|{failed_requests}|{errors}|r   ,c                 s   s     | ]}d j di |V  qdS )z{a},{c}Nr
   )format.0fr
   r
   r   	<genexpr>5   s    z5_TelemetryContext.generate_headers.<locals>.<genexpr>c                 s   s    | ]}|d  V  qdS )eNr
   r!   r
   r
   r   r$   6   s    )r   Zfailed_requestserrors)r   r    r   r   len_CURRENT_HEADER_SIZE_LIMITr   warningr   get_FAILEDCLIENT_REQUEST_IDr   CLIENT_CURRENT_TELEMETRYCLIENT_LAST_TELEMETRY
_SUCCEEDEDjoin)r   currentZfailuresr
   r
   r   generate_headers'   s(   $z"_TelemetryContext.generate_headersc                 C   sH   | j  | j| jdd | j| j< W d    d S 1 sw   Y  d S )Nr   r   )r   r   r*   r/   )r   r
   r
   r   hit_an_access_token:   s   "z%_TelemetryContext.hit_an_access_tokenc                 C   sf   |r1| j " d|v r| |d  n| j  W d    d S W d    d S 1 s*w   Y  d S d S )Nerror)r   _record_failurer   clear)r   Zauth_resultr
   r
   r   update_telemetry>   s   "z"_TelemetryContext.update_telemetryc                 C   sx   t dj| j| j|d}| j| jd| | jk r:| j| jd| | j| j< | j| j	g 
| j| j|d d S d S )Nz",{api_id},{correlation_id},{error})r   r   r4   r   )acr%   )r'   r    r   r   r   r*   _FAILURE_SIZE_LAST_HEADER_SIZE_LIMIT
setdefaultr+   append)r   r4   Z
simulationr
   r
   r   r5   F   s   

z!_TelemetryContext._record_failure)NN)__name__
__module____qualname____doc__r/   r+   r:   r(   r;   r   r2   r3   r7   r5   r
   r
   r
   r   r      s    
r   )r   logging	getLoggerr>   r   r,   r-   r.   r   ZFORCE_REFRESHZ	AT_ABSENTZ
AT_EXPIREDZAT_AGINGZRESERVEDr   objectr   r
   r
   r
   r   <module>   s    
