o
    i                     @   s   d dl Z d dlZd dlmZmZ d dlmZ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 e ZG d
d dZdS )    N)sleeptime)Queue	FullError)logger)DEFAULT_QUEUE_SIZE)TYPE_CHECKING)Any)Optional)Callablec                   @   s   e Zd ZefdeddfddZedefddZddd	Z	d
e
defddZdddZdddZdd
e
ddddfddZdefddZd
e
ddddfddZdddefddZdddZdS ) BackgroundWorker
queue_sizereturnNc                 C   s$   t || _t | _d | _d | _d S N)r   _queue	threadingLock_lock_thread_thread_for_pid)selfr    r   N/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/sentry_sdk/worker.py__init__   s   


zBackgroundWorker.__init__c                 C   s&   | j t kr	dS | jsdS | j S )NF)r   osgetpidr   is_aliver   r   r   r   r      s
   
zBackgroundWorker.is_alivec                 C   s   | j s	|   d S d S r   )r   startr   r   r   r   _ensure_thread#   s   zBackgroundWorker._ensure_threadtimeoutc                 C   st   t  | }| j}|j  z&|jr,|t   }|dkr"W |j  dS |jj|d |jsW |j  dS |j  w )Nr   F)r    T)r   r   all_tasks_doneacquireunfinished_tasksreleasewait)r   r    deadlinequeuedelayr   r   r   _timed_queue_join'   s   


z"BackgroundWorker._timed_queue_joinc              	   C   s   | j B | js-tj| jdd| _d| j_z| j  t	 | _
W n ty,   d | _Y nw W d    d S W d    d S W d    d S 1 sHw   Y  d S )Nzsentry-sdk.BackgroundWorker)targetnameT)r   r   r   Thread_targetr   daemonr   r   r   r   RuntimeErrorr   r   r   r   r   8   s$   

"zBackgroundWorker.startc              	   C   s   t d | j1 | jr1z| jt W n ty"   t d Y nw d| _d| _W d   dS W d   dS 1 s<w   Y  dS )z
        Kill worker thread. Returns immediately. Not useful for
        waiting on shutdown for events, use `flush` for that.
        z"background worker got kill requestz)background worker queue full, kill failedN)	r   debugr   r   r   
put_nowait_TERMINATORr   r   r   r   r   r   killH   s   
"zBackgroundWorker.killcallbackzOptional[Any]c                 C   sX   t d | j | jr|dkr| || W d    n1 s w   Y  t d d S )Nz#background worker got flush requestg        zbackground worker flushed)r   r0   r   r   _wait_flush)r   r    r4   r   r   r   flushX   s   
zBackgroundWorker.flushc                 C   s
   | j  S r   )r   fullr   r   r   r   r7   _   s   
zBackgroundWorker.fullc                 C   st   t d|}| |s6| j d }td| |d ur ||| | || s8| j d }td| d S d S d S )Ng?   z%d event(s) pending on flushz"flush timed out, dropped %s events)minr)   r   qsizer   r0   error)r   r    r4   initial_timeoutpendingr   r   r   r5   b   s   


zBackgroundWorker._wait_flushzCallable[[], None]c                 C   s0   |    z	| j| W dS  ty   Y dS w )NTF)r   r   r1   r   r   r4   r   r   r   submitn   s   zBackgroundWorker.submitc                 C   sv   	 | j  }z)|tu rW | j   d S z|  W n ty(   tjddd Y nw W | j   n| j   w td q)NTzFailed processing job)exc_infor   )r   getr2   	task_done	Exceptionr   r;   r   r>   r   r   r   r-   v   s   

zBackgroundWorker._target)r   Nr   )__name__
__module____qualname__r   intr   propertyboolr   r   floatr)   r   r3   r6   r7   r5   r?   r-   r   r   r   r   r      s    


r   )r   r   r   r   sentry_sdk._queuer   r   sentry_sdk.utilsr   sentry_sdk.constsr   typingr   r	   r
   r   objectr2   r   r   r   r   r   <module>   s    