o
    h                     @   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                   @   sX   e 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   g      @c                 C   s6   g | _ || _d| _t | _t | _d | _d | _	d S )NT)
_log_buffer_capture_func_running	threadingLock_lockEvent_flush_event_flusher_flusher_pid)selfcapture_func r   Y/var/www/html/pro-man-master/venv/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$   B   s
   
zLogBatcher._flush_loopc                 C   sx   |   r	| jd u rd S | j$ | j| t| j| jkr*| j  W d    d S W d    d S 1 s5w   Y  d S r*   )	r)   r   r   r   appendlenMAX_LOGS_BEFORE_FLUSHr   set)r   logr   r   r   addI   s   "zLogBatcher.addc                 C   s(   | j d u rd S d| _| j  d | _ d S )NF)r   r   r   r4   r0   r   r   r   killV   s
   


zLogBatcher.killc                 C   s   |    d S r*   )r/   r0   r   r   r   flush_   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_attributef   s   







z=LogBatcher._log_to_transport_format.<locals>.format_attributezsentry.severity_number
attributesseverity_numberzsentry.severity_textseverity_texttime_unix_nanog    eAtrace_idz$00000000-0000-0000-0000-000000000000bodyc                    s   i | ]	\}}| |qS r   r   ).0kvrE   r   r   
<dictcomp>|   s    z7LogBatcher._log_to_transport_format.<locals>.<dictcomp>)	timestamprJ   levelrK   rF   )rA   getrC   items)r5   resr   rO   r   _log_to_transport_formatc   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 )Nsent_at)headersr   r5   z%application/vnd.sentry.items.log+json
item_countrT   c                    s   g | ]}  |qS r   )rV   )rL   r5   r0   r   r   
<listcomp>   s    z%LogBatcher._flush.<locals>.<listcomp>)json)r;   content_typerX   payload)r   r	   r   nowr   utcr   r2   r   add_itemr   r   r.   r   )r   enveloper   r0   r   r/      s2   

zLogBatcher._flushN)__name__
__module____qualname__r3   r,   r   r)   r$   r6   r7   r8   staticmethodrV   r/   r   r   r   r   r      s    !	
r   )r!   r-   r   r   r   typingr   r   r   r   r   sentry_sdk.utilsr	   r
   sentry_sdk.enveloper   r   r   sentry_sdk._typesr   r   r   r   r   r   <module>   s    