<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
B
    ¿öYu  ã               @   sœ   d Z ddlmZ ddlZddlZddl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mZ dZe d	¡ZG d
d„ deƒZG dd„ de
eƒZdS )z­
raven.transport.threaded
~~~~~~~~~~~~~~~~~~~~~~~~

:copyright: (c) 2010-2012 by the Sentry Team, see AUTHORS for more details.
:license: BSD, see LICENSE for more details.
é    )Úabsolute_importN)ÚsleepÚtime)ÚAsyncTransport)ÚHTTPTransport)ÚQueueÚcheck_threadsé
   zsentry.errorsc               @   s`   e Zd Zeƒ Zefdd„Zdd„ Zdd„ Zdd„ Z	d	d
„ Z
dd„ Zddd„Zdd„ Zdd„ ZdS )ÚAsyncWorkerc             C   s<   t ƒ  tdƒ| _t ¡ | _d | _d | _d|i| _|  	¡  d S )NéÿÿÿÿÚshutdown_timeout)
r   r   Ú_queueÚ	threadingÚLockÚ_lockÚ_threadÚ_thread_for_pidÚoptionsÚstart)Úselfr   © r   úI/opt/alt/python37/lib/python3.7/site-packages/raven/transport/threaded.pyÚ__init__   s    


zAsyncWorker.__init__c             C   s"   | j t ¡ krdS | jo | j ¡ S )NF)r   ÚosÚgetpidr   Úis_alive)r   r   r   r   r   (   s    zAsyncWorker.is_alivec             C   s   |   ¡ rd S |  ¡  d S )N)r   r   )r   r   r   r   Ú_ensure_thread-   s    zAsyncWorker._ensure_threadc             C   sª   | j  ¡  zŽ|  ¡ sd S | j | j¡ | jd }td|ƒ}|  |¡s| j 	¡ }t
d| ƒ t
d| ƒ tjdkrzt
dƒ nt
dƒ |  || ¡ d | _W d | j  ¡  X d S )Nr   gš™™™™™¹?z6Sentry is attempting to send %i pending error messageszWaiting up to %s secondsÚntzPress Ctrl-Break to quitzPress Ctrl-C to quit)r   Úacquirer   r   Ú
put_nowaitÚ_terminatorr   ÚminÚ_timed_queue_joinÚqsizeÚprintr   Únamer   Úrelease)r   ÚtimeoutZinitial_timeoutÚsizer   r   r   Úmain_thread_terminated2   s$    







z"AsyncWorker.main_thread_terminatedc             C   s`   t ƒ | }| j}|j ¡  z4x.|jrJ|t ƒ  }|dkr:dS |jj|d qW dS |j ¡  X dS )z‚
        implementation of Queue.join which takes a 'timeout' argument

        returns true on success, false on timeout
        r   F)r'   TN)r   r   Úall_tasks_doner   Úunfinished_tasksÚwaitr&   )r   r'   ZdeadlineÚqueueÚdelayr   r   r   r"   W   s    


zAsyncWorker._timed_queue_joinc          	   C   sf   | j  ¡  z>|  ¡ sFtj| jdd| _| j d¡ | j ¡  t	 
¡ | _W d| j  ¡  t | j¡ X dS )z)
        Starts the task thread.
        zraven.AsyncWorker)Útargetr%   TN)r   r   r   r   ÚThreadÚ_targetr   Ú	setDaemonr   r   r   r   r&   ÚatexitÚregisterr)   )r   r   r   r   r   o   s    


zAsyncWorker.startNc             C   sN   | j  ¡  z2| jr:| j | j¡ | jj|d d| _d| _W d| j  ¡  X dS )z5
        Stops the task thread. Synchronous!
        )r'   N)	r   r   r   r   r   r    Újoinr   r&   )r   r'   r   r   r   Ústop~   s    

zAsyncWorker.stopc             O   s   |   ¡  | j |||f¡ d S )N)r   r   r   )r   ÚcallbackÚargsÚkwargsr   r   r   r-   Œ   s    zAsyncWorker.queuec             C   sv   xp| j  ¡ }zL|| jkrP |\}}}y|||Ž W n" tk
rT   tjddd Y nX W d | j  ¡  X tdƒ qW d S )NzFailed processing jobT)Úexc_infor   )r   Úgetr    Ú	ExceptionÚloggerÚerrorÚ	task_doner   )r   Úrecordr7   r8   r9   r   r   r   r1      s    


zAsyncWorker._target)N)Ú__name__Ú
__module__Ú__qualname__Úobjectr    ÚDEFAULT_TIMEOUTr   r   r   r)   r"   r   r6   r-   r1   r   r   r   r   r
      s   %
r
   c                   s8   e Zd ZddddgZdd„ Z‡ fdd„Zd	d
„ Z‡  ZS )ÚThreadedHTTPTransportÚhttpÚhttpszthreaded+httpzthreaded+httpsc             C   s"   t | dƒr| j ¡ stƒ | _| jS )NÚ_worker)ÚhasattrrI   r   r
   )r   r   r   r   Ú
get_worker¥   s    z ThreadedHTTPTransport.get_workerc          
      sN   yt t| ƒ |||¡ W n* tk
rB } z||ƒ W d d }~X Y nX |ƒ  d S )N)ÚsuperrF   Úsendr<   )r   ÚurlÚdataÚheadersÚ
success_cbÚ
failure_cbÚe)Ú	__class__r   r   Ú	send_syncª   s
    zThreadedHTTPTransport.send_syncc             C   s   |   ¡  | j|||||¡ d S )N)rK   r-   rU   )r   rN   rO   rP   rQ   rR   r   r   r   Ú
async_send²   s    z ThreadedHTTPTransport.async_send)rA   rB   rC   ÚschemerK   rU   rV   Ú__classcell__r   r   )rT   r   rF   ¡   s   rF   )Ú__doc__Ú
__future__r   r3   Úloggingr   r   r   r   Zraven.transport.baser   Zraven.transport.httpr   Zraven.utils.compatr   r   rE   Ú	getLoggerr=   rD   r
   rF   r   r   r   r   Ú<module>   s   
 