a
    xd                     @   s   d dl Z d dlZd dlmZmZ d dlmZ d dlZd dlm	Z	 d dl
mZ d dlmZ d dlmZ erd dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ dddZedddZdZdZdd ZG dd deZdS )    N)ThreadLock)contextmanager)Envelope)Session)MYPY)format_timestamp)Any)Callable)Dict)	Generator)List)Optional)Unionc                 C   sB   | du rt jj} | jj}|du r>| jr.| jjni }|dd}|S )z<Utility function to find out if session tracking is enabled.Nauto_session_trackingF)
sentry_sdkHubcurrentZscopeZ_force_auto_session_trackingclientoptionsget)hubshould_trackZclient_options r   K/var/www/html/Ranjet/env/lib/python3.9/site-packages/sentry_sdk/sessions.py is_auto_session_tracking_enabled   s    r   applicationc                 c   sR   | du rt jj} t| }|r(| j|d zdV  W |rN|   n|rL|   0 dS )z8Starts and stops a session automatically around a block.N)session_mode)r   r   r   r   Zstart_sessionZend_session)r   r   r   r   r   r   r   %   s    
r   )exitedabnormalcrashedd   c                 C   s   t |t|  dS )N)attrsZ
aggregates)dictlistvalues)Zaggregate_statesr"   r   r   r   make_aggregate_envelope9   s    r&   c                   @   sF   e Zd ZdddZdd Zdd Zdd	 Zd
d Zdd Zdd Z	dS )SessionFlusher<   c                 C   s>   || _ || _g | _i | _d | _t | _t | _d | _d| _	d S )NT)
capture_funcflush_intervalpending_sessionspending_aggregates_threadr   _thread_lock_aggregate_lock_thread_for_pid_running)selfr)   r*   r   r   r   __init__?   s    zSessionFlusher.__init__c                 C   s   | j }g | _ | j | j}i | _W d    n1 s40    Y  t }|D ],}t|jtkrj| | t }|| qH| D ]6\}}t|jtkr| | t }|	t
|| q~t|jdkr| | d S )Nr   )r+   r/   r,   r   lenitemsMAX_ENVELOPE_ITEMSr)   add_sessionZadd_sessionsr&   )r2   r+   r,   Zenvelopesessionr"   statesr   r   r   flushO   s$    $

zSessionFlusher.flushc                    s    j t kr jd urd S  jl  j t krL jd urLW d    d S  fdd}t|d}d|_|  | _t  _ W d    n1 s0    Y  d S )Nc                      s&    j r"t j  j r    q d S N)r1   timesleepr*   r:   r   r2   r   r   r-   r   s    z/SessionFlusher._ensure_running.<locals>._thread)targetT)r0   osgetpidr-   r.   r   daemonstart)r2   r-   threadr   r>   r   _ensure_runningj   s    
(zSessionFlusher._ensure_runningc                 C   s   | j  |jdd}tt| }|j}| j|i }||i }d|vrZt|j|d< |j	dkrz|
ddd |d< nT|j	dkr|
ddd |d< n4|jdkr|
ddd |d< n|
d	dd |d	< W d    n1 s0    Y  d S )
NF)Zwith_user_infostartedr    r      r   Zerroredr   )r/   Zget_json_attrstuplesortedr5   Ztruncated_startedr,   
setdefaultr   statusr   errors)r2   r8   r"   Zprimary_keyZsecondary_keyr9   stater   r   r   add_aggregate_session   s    


z$SessionFlusher.add_aggregate_sessionc                 C   s2   |j dkr| | n| j|  |   d S )Nrequest)r   rN   r+   appendto_jsonrE   )r2   r8   r   r   r   r7      s    
zSessionFlusher.add_sessionc                 C   s
   d| _ d S )NF)r1   r>   r   r   r   kill   s    zSessionFlusher.killc                 C   s   |    d S r;   )rR   r>   r   r   r   __del__   s    zSessionFlusher.__del__N)r(   )
__name__
__module____qualname__r3   r:   rE   rN   r7   rR   rS   r   r   r   r   r'   >   s    

r'   )N)Nr   )r@   r<   	threadingr   r   
contextlibr   r   Zsentry_sdk.enveloper   Zsentry_sdk.sessionr   Zsentry_sdk._typesr   Zsentry_sdk.utilsr   typingr	   r
   r   r   r   r   r   r   r   ZTERMINAL_SESSION_STATESr6   r&   objectr'   r   r   r   r   <module>   s.   
