3
ãdex  ã               @   sZ   d dl Z d dlZej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jƒ ƒS )N)ÚstrÚuuidÚuuid4© r
   r
   úE/var/www/agendate/envp3/lib/python3.6/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_sizeéd   i^  Nc             C   s:   || _ || _|| _|ptƒ | _|p$t| _tj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 �Ž dj| j| jd�}t|ƒ| jkr:tjdj| jƒƒ | jj	| j
g ƒ}t| jt|tdj| jj	| jdƒdjdd„ |D ƒƒdjd	d„ |D ƒƒd
�iS Q R X 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 f |ŽV  qdS )z{a},{c}N)Ú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   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   s2   | j �" | jj| jdƒd | j| j< W d Q R X d S )Nr   r   )r   r   r)   r.   )r   r
   r
   r   Úhit_an_access_token:   s    z%_TelemetryContext.hit_an_access_tokenc          
   C   s<   |r8| j �( d|kr$| j|d ƒ n
| jjƒ  W d Q R X d S )NÚerror)r   Ú_record_failurer   Úclear)r   Zauth_resultr
   r
   r   Úupdate_telemetry>   s
    z"_TelemetryContext.update_telemetryc             C   st   t dj| j| j|d�ƒ}| jj| jdƒ| | jk rp| jj| jdƒ| | j| j< | jj| j	g ƒj
| j| j|dœƒ d S )Nz",{api_id},{correlation_id},{error})r   r   r3   r   )ÚaÚcr$   )r&   r    r   r   r   r)   Ú_FAILURE_SIZEÚ_LAST_HEADER_SIZE_LIMITÚ
setdefaultr*   Úappend)r   r3   Z
simulationr
   r
   r   r4   F   s    z!_TelemetryContext._record_failure)NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r.   r*   r9   r'   r:   r   r1   r2   r6   r4   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   
