o
    0 i|                     @   s   d dl Z d dlZd dlZd dlmZmZ d dlmZmZmZm	Z	m
Z
 d dlmZmZ d dlmZmZmZ e	r<d dlmZ G dd dZdS )	    N)datetimetimezone)OptionalListCallableTYPE_CHECKINGAny)format_timestamp	safe_repr)EnvelopeItem
PayloadRef)Logc                   @   s\   e Zd ZdZdZdZdd Zdd Zdd	 Zd
d Z	dd Z
dd Zedd Zdd ZdS )
LogBatcherd   i  g      @c                 C   s<   g | _ || _|| _d| _t | _t | _d | _	d | _
d S )NT)_log_buffer_capture_func_record_lost_func_running	threadingLock_lockEvent_flush_event_flusher_flusher_pid)selfZcapture_funcZrecord_lost_func r   c/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/sentry_sdk/_log_batcher.py__init__   s   


zLogBatcher.__init__c              	   C   s   | j sdS t }| j|krdS | jA | j|kr"	 W d   dS || _tj| jd| _d| j_	z| j
  W n tyK   d| _ Y W d   dS w W d   dS 1 sWw   Y  dS )zFor forking processes we might need to restart this thread.
        This ensures that our process actually has that thread running.
        FTN)target)r   osgetpidr   r   r   Thread_flush_loopr   daemonstartRuntimeError)r   pidr   r   r   _ensure_thread$   s0   


zLogBatcher._ensure_threadc                 C   s<   | j r| j| jt   | j  |   | j sd S d S N)r   r   waitFLUSH_WAIT_TIMErandomclear_flushr   r   r   r   r$   E   s
   
zLogBatcher._flush_loopc                 C   s   |   r	| jd u rd S | j= t| j| jkr(| jdddd 	 W d    d S | j| t| j| jkrC| j	
  W d    d S W d    d S 1 sNw   Y  d S )NZqueue_overflowZlog_item   )reasonZdata_categoryZquantity)r)   r   r   lenr   MAX_LOGS_BEFORE_DROPr   appendMAX_LOGS_BEFORE_FLUSHr   set)r   logr   r   r   addL   s"   	
"zLogBatcher.addc                 C   s(   | j d u rd S d| _| j  d | _ d S )NF)r   r   r   r7   r0   r   r   r   killa   s
   


zLogBatcher.killc                 C   s   |    d S r*   )r/   r0   r   r   r   flushj   s   zLogBatcher.flushc                    s   dd  d| d vr| d | d d< d| d vr | d | d d< t | d d	 | d
dt| d t| d  fdd| d  D d}|S )Nc                 S   s^   t | tr
| ddS t | tr| ddS t | tr| ddS t | tr(| ddS t| ddS )Nboolean)valuetypeintegerdoublestring)
isinstanceboolintfloatstrr
   )valr   r   r   format_attributeq   s   







z=LogBatcher._log_to_transport_format.<locals>.format_attributezsentry.severity_number
attributesZseverity_numberzsentry.severity_textZseverity_textZtime_unix_nanog    eAtrace_idz$00000000-0000-0000-0000-000000000000bodyc                    s   i | ]	\}}| |qS r   r   ).0kvrH   r   r   
<dictcomp>   s    z7LogBatcher._log_to_transport_format.<locals>.<dictcomp>)	timestamprJ   levelrK   rI   )rD   getrF   items)r8   resr   rO   r   _log_to_transport_formatn   s   





z#LogBatcher._log_to_transport_formatc                    s   t dtttjid} j: t jdkr!	 W d    d S |	t
dddt jitd fdd	 jD id
d  j  W d    n1 sMw   Y   | |S )NZsent_at)headersr   r8   z%application/vnd.sentry.items.log+json
item_countrT   c                    s   g | ]}  |qS r   )rV   )rL   r8   r0   r   r   
<listcomp>   s    z%LogBatcher._flush.<locals>.<listcomp>)json)r>   content_typerW   payload)r   r	   r   nowr   utcr   r3   r   Zadd_itemr   r   r.   r   )r   enveloper   r0   r   r/      s2   

zLogBatcher._flushN)__name__
__module____qualname__r6   r4   r,   r   r)   r$   r9   r:   r;   staticmethodrV   r/   r   r   r   r   r      s    !	
r   )r!   r-   r   r   r   typingr   r   r   r   r   Zsentry_sdk.utilsr	   r
   Zsentry_sdk.enveloper   r   r   Zsentry_sdk._typesr   r   r   r   r   r   <module>   s    