Ë
    S>{i  ã                   óþ   — 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r*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lmZ dd„Zedd„«       ZdZdZd„ Z G d„ de«      Zy)é    N)ÚThreadÚLock)Úcontextmanager)ÚEnvelope)ÚSession)ÚTYPE_CHECKING)Úformat_timestamp)ÚAny)ÚCallable)ÚDict)Ú	Generator)ÚList)ÚOptional)ÚUnionc                 óÚ   — | €t         j                  j                  } | j                  j                  }|€6| j
                  r| j
                  j                  ni }|j                  dd«      }|S )z<Utility function to find out if session tracking is enabled.Úauto_session_trackingF)Ú
sentry_sdkÚHubÚcurrentÚscopeÚ_force_auto_session_trackingÚclientÚoptionsÚget)ÚhubÚshould_trackÚclient_optionss      úQ/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sentry_sdk/sessions.pyÚ is_auto_session_tracking_enabledr      s]   € ð €{Ü�n‰n×$Ñ$ˆà—9‘9×9Ñ9€LàÐØ/2¯zªz˜Ÿ™×+Ò+¸rˆØ%×)Ñ)Ð*AÀ5ÓIˆàÐó    c              #   óâ   K  — | €t         j                  j                  } t        | «      }|r| j	                  |¬«       	 d–— |r| j                  «        yy# |r| j                  «        w w xY w­w)z8Starts and stops a session automatically around a block.N)Úsession_mode)r   r   r   r   Ústart_sessionÚend_session)r   r"   r   s      r   r   r   %   sf   è ø€ ð €{Ü�n‰n×$Ñ$ˆÜ3°CÓ8€LÙØ×Ñ |ÐÔ4ðÛáØ�O‰OÕð ø‰<Ø�O‰OÕð üs   ‚<A/¿A ÁA/ÁA,Á,A/)ÚexitedÚabnormalÚcrashedéd   c                 óL   — t        |«      t        | j                  «       «      dœS )N)ÚattrsÚ
aggregates)ÚdictÚlistÚvalues)Úaggregate_statesr*   s     r   Úmake_aggregate_enveloper0   9   s    € ä˜%“[´Ð5E×5LÑ5LÓ5NÓ0OÑPÐPr    c                   ó:   — e Zd Z	 d	d„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	y)
ÚSessionFlusherc                 ó¢   — || _         || _        g | _        i | _        d | _        t        «       | _        t        «       | _        d | _        d| _	        y )NT)
Úcapture_funcÚflush_intervalÚpending_sessionsÚpending_aggregatesÚ_threadr   Ú_thread_lockÚ_aggregate_lockÚ_thread_for_pidÚ_running)Úselfr4   r5   s      r   Ú__init__zSessionFlusher.__init__?   sN   € ð )ˆÔØ,ˆÔØ "ˆÔØ"$ˆÔØˆŒÜ ›FˆÔÜ#›vˆÔØ#ˆÔØˆ�r    c                 ól  — | j                   }g | _         | j                  5  | j                  }i | _        d d d «       t        «       }|D ]J  }t	        |j
                  «      t        k(  r| j                  |«       t        «       }|j                  |«       ŒL j                  «       D ]W  \  }}t	        |j
                  «      t        k(  r| j                  |«       t        «       }|j                  t        ||«      «       ŒY t	        |j
                  «      dkD  r| j                  |«       y y # 1 sw Y   Œ÷xY w)Nr   )r6   r:   r7   r   ÚlenÚitemsÚMAX_ENVELOPE_ITEMSr4   Úadd_sessionÚadd_sessionsr0   )r=   r6   r7   ÚenvelopeÚsessionr*   Ústatess          r   ÚflushzSessionFlusher.flushO   s  € à×0Ñ0ÐØ "ˆÔà×!Ñ!ñ 	)Ø!%×!8Ñ!8ÐØ&(ˆDÔ#÷	)ô “:ˆØ'ò 	*ˆGÜ�8—>‘>Ó"Ô&8Ò8Ø×!Ñ! (Ô+Ü#›:�à× Ñ  Õ)ð	*ð 0×5Ñ5Ó7ò 	J‰MˆE�6Ü�8—>‘>Ó"Ô&8Ò8Ø×!Ñ! (Ô+Ü#›:�à×!Ñ!Ô"9¸&À%Ó"HÕIð	Jô ˆx�~‰~Ó Ò"Ø×Ñ˜hÕ'ð #÷'	)ð 	)ús    D*Ä*D3c                 ó¢  ‡ — ‰ j                   t        j                  «       k(  r‰ j                  �y ‰ j                  5  ‰ j                   t        j                  «       k(  r‰ j                  �
	 d d d «       y ˆ fd„}t        |¬«      }d|_        |j                  «        |‰ _        t        j                  «       ‰ _         d d d «       y # 1 sw Y   y xY w)Nc                  ó°   •— ‰ j                   rIt        j                  ‰ j                  «       ‰ j                   r‰ j	                  «        ‰ j                   rŒHy y ©N)r<   ÚtimeÚsleepr5   rH   ©r=   s   €r   r8   z/SessionFlusher._ensure_running.<locals>._threadr   s5   ø€ à—m’mÜ—J‘J˜t×2Ñ2Ô3Ø—}’}ØŸ
™
œð —m•mr    )ÚtargetT)r;   ÚosÚgetpidr8   r9   r   ÚdaemonÚstart)r=   r8   Úthreads   `  r   Ú_ensure_runningzSessionFlusher._ensure_runningj   s¦   ø€ à×Ñ¤2§9¡9£;Ò.°4·<±<Ð3KØØ×Ññ 	/Ø×#Ñ#¤r§y¡y£{Ò2°t·|±|Ð7OØ÷	/ð 	/ô%ô  7Ô+ˆFØ ˆFŒMØ�L‰LŒNØ!ˆDŒLÜ#%§9¡9£;ˆDÔ ÷	/ð  ÷!	/ð  ús   ¼/CÁ4ACÃCc                 óz  — | j                   5  |j                  d¬«      }t        t        |j	                  «       «      «      }|j
                  }| j                  j                  |i «      }|j                  |i «      }d|vrt        |j
                  «      |d<   |j                  dk(  r|j                  dd«      dz   |d<   nh|j                  dk(  r|j                  dd«      dz   |d<   n@|j                  dkD  r|j                  dd«      dz   |d<   n|j                  d	d«      dz   |d	<   d d d «       y # 1 sw Y   y xY w)
NF)Úwith_user_infoÚstartedr'   r   é   r&   Úerroredr%   )r:   Úget_json_attrsÚtupleÚsortedrA   Útruncated_startedr7   Ú
setdefaultr	   Ústatusr   Úerrors)r=   rF   r*   Úprimary_keyÚsecondary_keyrG   Ústates          r   Úadd_aggregate_sessionz$SessionFlusher.add_aggregate_session€   s)  € ð ×!Ñ!ñ 	=Ø×*Ñ*¸%Ð*Ó@ˆEÜ¤ u§{¡{£}Ó 5Ó6ˆKØ#×5Ñ5ˆMØ×,Ñ,×7Ñ7¸ÀRÓHˆFØ×%Ñ% m°RÓ8ˆEà Ñ%Ü#3°G×4MÑ4MÓ#N��iÑ ð �~‰~ Ò*Ø#(§9¡9¨Y¸Ó#:¸QÑ#>��iÒ Ø—‘ :Ò-Ø$)§I¡I¨j¸!Ó$<¸qÑ$@��jÒ!Ø—‘ !Ò#Ø#(§9¡9¨Y¸Ó#:¸QÑ#>��iÒ à"'§)¡)¨H°aÓ"8¸1Ñ"<��h‘÷%	=÷ 	=ñ 	=ús   �DD1Ä1D:c                 ó¸   — |j                   dk(  r| j                  |«       n)| j                  j                  |j	                  «       «       | j                  «        y )NÚrequest)r"   re   r6   ÚappendÚto_jsonrU   )r=   rF   s     r   rC   zSessionFlusher.add_sessionŸ   sG   € ð ×Ñ 9Ò,Ø×&Ñ& wÕ/à×!Ñ!×(Ñ(¨¯©Ó):Ô;Ø×ÑÕr    c                 ó   — d| _         y )NF)r<   rN   s    r   ÚkillzSessionFlusher.kill©   s	   € àˆ�r    c                 ó$   — | j                  «        y rK   )rk   rN   s    r   Ú__del__zSessionFlusher.__del__­   s   € à�	‰	�r    N)é<   )
Ú__name__Ú
__module__Ú__qualname__r>   rH   rU   re   rC   rk   rm   © r    r   r2   r2   >   s*   „ ð óò (ò6ò,=ò>òór    r2   rK   )NÚapplication)rP   rL   Ú	threadingr   r   Ú
contextlibr   r   Úsentry_sdk.enveloper   Úsentry_sdk.sessionr   Úsentry_sdk._typesr   Úsentry_sdk.utilsr	   Útypingr
   r   r   r   r   r   r   r   r   ÚTERMINAL_SESSION_STATESrB   r0   Úobjectr2   rr   r    r   ú<module>r}      ss   ðÛ 	Û ß "Ý %ã Ý (Ý &Ý +Ý -áÝÝÝÝ ÝÝÝóð òó ðð <Ð ØÐ òQô
q�Võ qr    