o
    iV                     @  s  d Z ddlmZ ddlZddlmZ ddlmZmZ ddl	Z	ddl
mZ ddlmZmZ ddlm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mZ d
dlmZ g dZeddG dd deZG dd dZeG dd dZ e	j!d ddZ"d!ddZ#dS )"z{Testing utilities for Logfire. See [the guide](https://logfire.pydantic.dev/docs/reference/advanced/testing/) for examples.    )annotationsN)	dataclass)Anycast)SimpleLogRecordProcessor)InMemoryMetricReaderMetricsData)SimpleSpanProcessor)IdGenerator   )METRICS_PREFERRED_TEMPORALITY)ONE_SECOND_IN_NANOSECONDS)TestExporterTestLogExporter)SeededRandomIdGenerator)capfireCaptureLogfireIncrementalIdGeneratorr   TimeGeneratorr   r   T)reprc                   @  s6   e Zd ZdZdZdZdddZddd	Zdd
dZdS )r   zGenerate sequentially incrementing span/trace IDs for testing.

    Trace IDs start at 1 and increment by 1 each time.
    Span IDs start at 1 and increment by 1 each time.
    r   returnNonec                 C  s   d| _ d| _dS )zResets the trace and span ids.r   N)trace_id_counterspan_id_counterself r   U/var/www/html/karishye-ai-python/venv/lib/python3.10/site-packages/logfire/testing.pyreset_trace_span_ids,   s   
z+IncrementalIdGenerator.reset_trace_span_idsintc                 C  s&   |  j d7  _ | j dkrtd| j S )zGenerates a span id.r   l    zSpan ID overflow)r   OverflowErrorr   r   r   r   generate_span_id1   s   
z'IncrementalIdGenerator.generate_span_idc                 C  s.   |  j d7  _ | j dd d krtd| j S )zGenerates a trace id.r         zTrace ID overflow)r   r    r   r   r   r   generate_trace_id8   s   z(IncrementalIdGenerator.generate_trace_idN)r   r   r   r   )	__name__
__module____qualname____doc__r   r   r   r!   r$   r   r   r   r   r   !   s    

r   c                   @  s0   e Zd ZdZddddZddd	ZdddZdS )r   zGenerate incrementing timestamps for testing.

    Timestamps are in nanoseconds, start at 1_000_000_000, and increment by 1_000_000_000 (1 second) each time.
    r   ns_timer   c                 C  s
   || _ d S Nr*   )r   r*   r   r   r   __init__G   s   
zTimeGenerator.__init__r   c                 C  s   |  j t7  _ | j S r+   )r*   r   r   r   r   r   __call__J   s   zTimeGenerator.__call__strc                 C  s   d| j  dS )NzTimeGenerator(ns_time=)r,   r   r   r   r   __repr__N   s   zTimeGenerator.__repr__N)r   )r*   r   r%   )r   r/   )r&   r'   r(   r)   r-   r.   r1   r   r   r   r   r   A   s
    
r   c                   @  s8   e Zd ZU dZded< 	 ded< 	 ded< 	 dd	 Zd
S )r   zA dataclass that holds a span exporter, log exporter, and metric reader.

    This is used as the return type of `capfire` fixture.
    r   exporterr   metrics_readerr   log_exporterc                 C  s
   t | jS )4Get the collected metrics as a list of dictionaries.)get_collected_metricsr3   r   r   r   r   r6   `   s   
z$CaptureLogfire.get_collected_metricsN)r&   r'   r(   r)   __annotations__r6   r   r   r   r   r   R   s   
 r   r   c                  C  sd   t  } ttd}t }t|}tjddtjt |t	|gdt
| gtj|gdd t| ||dS )z1A fixture that returns a CaptureLogfire instance.)preferred_temporalityF)id_generatorns_timestamp_generatorlog_record_processors)additional_readers)send_to_logfireconsoleadvancedadditional_span_processorsmetrics)r2   r3   r4   )r   r   r   r   r   logfire	configureAdvancedOptionsr   r   r	   MetricsOptionsr   )r2   r3   time_generatorr4   r   r   r   r   e   s    
r   r3   r   list[dict[str, Any]]c                 C  s4   t tt|   }|d \}dd |d D S )r5   resource_metricsc                 S  s   g | ]}|d  D ]}|qqS )rA   r   ).0scope_metricmetricr   r   r   
<listcomp>   s    z)get_collected_metrics.<locals>.<listcomp>scope_metrics)jsonloadsr   r   get_metrics_datato_json)r3   exported_metricsresource_metricr   r   r   r6   {   s   
r6   )r   r   )r3   r   r   rG   )$r)   
__future__r   rN   dataclassesr   typingr   r   pytestopentelemetry.sdk._logs.exportr    opentelemetry.sdk.metrics.exportr   r   opentelemetry.sdk.trace.exportr	   $opentelemetry.sdk.trace.id_generatorr
   rB   _internal.configr   _internal.constantsr   _internal.exporters.testr   r   _internal.utilsr   __all__r   r   r   fixturer   r6   r   r   r   r   <module>   s0    