o
    i                     @   sx   d dl 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eZG dd deZG dd	 d	e
ZdS )
    N)	TypedDict)
get_logger)PeriodicService)RLockc                   @   sJ   e Zd ZU dZeed< eed< eed< eed< eed< eed< eed< d	S )

V2LogEventzX
    Note: these attribute names match the corresponding entry in the JSON payload.
    	timestampmessageddtagsservicehostnameddsourcestatusN)__name__
__module____qualname____doc__int__annotations__str r   r   N/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/llmobs/_log_writer.pyr      s   
 r   c                
       sx   e Zd ZdZdededededdf
 fdd	Z fd
dZdeddfddZ	dd Z
edefddZdddZ  ZS )V2LogWriterzWriter to the Datadog log intake.

    v2/logs:
        - max payload size: 5MB
        - max single log: 1MB
        - max array size 1000

    refs:
        - https://docs.datadoghq.com/api/v2/logs/#send-logs
    siteapi_keyintervaltimeoutreturnNc                    sj   t t| j|d t | _g | _d| _|| _|| _d| _	|| _
d| j
 | _| jdd| _td| j d S )N)r   i  z/api/v2/logszhttp-intake.logs.%szapplication/json)z
DD-API-KEYzContent-Typezstarted log writer to %r)superr   __init__r   _lock_buffer_buffer_limit_timeout_api_key	_endpoint_site_intake_headersloggerdebug_url)selfr   r   r   r   	__class__r   r   r   *   s   zV2LogWriter.__init__c                    s   t t|   t| j d S N)r   r   startatexitregisteron_shutdown)r+   argskwargsr,   r   r   r/   ;   s   zV2LogWriter.startlogc                 C   sh   | j ' t| j| jkrtd| j 	 W d    d S | j| W d    d S 1 s-w   Y  d S )Nz+log buffer full (limit is %d), dropping log)r   lenr    r!   r(   warningappend)r+   r5   r   r   r   enqueue?   s   "zV2LogWriter.enqueuec                 C   s   |    d S r.   )periodicr+   r   r   r   r2   F   s   zV2LogWriter.on_shutdownc                 C   s   d| j | jf S )Nzhttps://%s%s)r&   r$   r;   r   r   r   r*   I   s   zV2LogWriter._urlc              
   C   sN  | j  | js	 W d    d S | j}g | _W d    n1 s w   Y  t|}zt|}W n tyB   tjd|dd Y d S w tj	| j
d| jd}zTz/|d| j|| j | }|jdkrttjd|| j|j| d	d
id ntd|| j W n ty   tjd|| j
dd	d
id Y nw W |  d S W |  d S |  w )Nzfailed to encode %d logsT)exc_infoi  )r   POSTi,  z>failed to send %d logs to %r, got response code %r, status: %rsend_to_telemetryF)extrazsent %d logs to %rzfailed to send %d logs to %r)r<   r?   )r   r    r6   jsondumps	TypeErrorr(   errorhttplibHTTPSConnectionr&   r"   requestr$   r'   getresponser   r*   readr)   	Exceptionclose)r+   logsnum_logsenc_logsconnrespr   r   r   r:   M   sT   
	
	zV2LogWriter.periodic)r   N)r   r   r   r   r   floatr   r/   r   r9   r2   propertyr*   r:   __classcell__r   r   r,   r   r      s    "r   )r0   http.clientclientrD   r@   typingr   ddtrace.internal.loggerr   ddtrace.internal.periodicr   ddtrace.internal.threadsr   r   r(   r   r   r   r   r   r   <module>   s    