§
    y›jF  ã                  óh  — 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¬¦  «         G d„ de¦  «        ¦   «         Z G d„ d¦  «        Ze G d„ d¦  «        ¦   «         Z e	j!        dd„¦   «         Z"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                  ó2   — e Zd ZdZdZdZd
d„Zdd„Zdd„Zd	S )r   z±Generate 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                ó"   — d| _         d| _        dS )zResets the trace and span ids.r   N)Útrace_id_counterÚspan_id_counter©Úselfs    úL/home/lighthouse/health/venv/lib/python3.11/site-packages/logfire/testing.pyÚreset_trace_span_idsz+IncrementalIdGenerator.reset_trace_span_ids,   s   € à !ˆÔØ ˆÔÐÐó    Úintc                ód   — | xj         dz  c_         | j         dk    rt          d¦  «        ‚| j         S )zGenerates a span id.r   l   ÿÿÿÿ zSpan ID overflow)r   ÚOverflowErrorr   s    r   Úgenerate_span_idz'IncrementalIdGenerator.generate_span_id1   s<   € àÐÔ Ñ!ÐÔØÔ )Ò+Ð+ÝÐ 2Ñ3Ô3Ð3ØÔ#Ð#r!   c                óp   — | xj         dz  c_         | j         ddz  dz
  k    rt          d¦  «        ‚| j         S )zGenerates a trace id.r   é   é€   zTrace ID overflow)r   r$   r   s    r   Úgenerate_trace_idz(IncrementalIdGenerator.generate_trace_id8   sD   € àÐÔ Ñ"ÐÔØÔ  1 c¡6¨A¡:Ò-Ð-ÝÐ 3Ñ4Ô4Ð4ØÔ$Ð$r!   N)r   r   ©r   r"   )	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r    r%   r)   © r!   r   r   r   !   sg   € € € € € ðð ð ÐØ€Oð!ð !ð !ð !ð
$ð $ð $ð $ð%ð %ð %ð %ð %ð %r!   r   c                  ó,   — e Zd ZdZddd„Zdd„Zdd	„Zd
S )r   z£Generate 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                ó   — || _         d S ©N©r1   )r   r1   s     r   Ú__init__zTimeGenerator.__init__G   s   € ØˆŒˆˆr!   r   c                ó:   — | xj         t          z  c_         | j         S r3   )r1   r   r   s    r   Ú__call__zTimeGenerator.__call__J   s   € ØˆŒÕ1Ñ1ˆŒØŒ|Ðr!   Ústrc                ó   — d| j         › d�S )NzTimeGenerator(ns_time=ú)r4   r   s    r   Ú__repr__zTimeGenerator.__repr__N   s   € Ø7¨¬Ð7Ð7Ð7Ð7r!   N)r   )r1   r"   r*   )r   r8   )r+   r,   r-   r.   r5   r7   r;   r/   r!   r   r   r   A   s_   € € € € € ðð ð
ð ð ð ð ðð ð ð ð8ð 8ð 8ð 8ð 8ð 8r!   r   c                  ó>   — e Zd ZU dZded<   	 ded<   	 ded<   	 d„ Zd	S )
r   zˆA 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                ó*   — t          | j        ¦  «        S )ú4Get the collected metrics as a list of dictionaries.)Úget_collected_metricsr>   r   s    r   rB   z$CaptureLogfire.get_collected_metrics`   s   € å$ TÔ%8Ñ9Ô9Ð9r!   N)r+   r,   r-   r.   Ú__annotations__rB   r/   r!   r   r   r   R   s^   € € € € € € ðð ð
 ÐÐÑØØ(Ð(Ð(Ñ(ØØ!Ð!Ð!Ñ!Øð:ð :ð :ð :ð :r!   r   r   c                 óz  — t          ¦   «         } t          t          ¬¦  «        }t          ¦   «         }t	          |¦  «        }t          j        ddt          j        t          ¦   «         |t          |¦  «        g¬¦  «        t          | ¦  «        gt          j        |g¬¦  «        ¬¦  «         t          | ||¬¦  «        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)r=   r>   r?   )r   r   r   r   r   ÚlogfireÚ	configureÚAdvancedOptionsr   r   r
   ÚMetricsOptionsr   )r=   r>   Útime_generatorr?   s       r   r   r   e   s¿   € õ ‰~Œ~€HÝ)Õ@]Ð^Ñ^Ô^€NÝ"‘_”_€NÝ" >Ñ2Ô2€LÝÔØØÝÔ(Ý/Ñ1Ô1Ø#1Ý#;¸LÑ#IÔ#IÐ"Jð
ñ 
ô 
õ
 %8¸Ñ$AÔ$AÐ#BÝÔ&¸>Ð:JÐKÑKÔKð
ñ 
ô 
ð 
õ  8¸NÐYeÐfÑfÔfÐfr!   r>   r   úlist[dict[str, Any]]c                óÐ   — t          j        t          t          |                      ¦   «         ¦  «                             ¦   «         ¦  «        }|d         \  }d„ |d         D ¦   «         S )rA   Úresource_metricsc                ó(   — g | ]}|d          D ]}|‘ŒŒS )rN   r/   )Ú.0Úscope_metricÚmetrics      r   ú
<listcomp>z)get_collected_metrics.<locals>.<listcomp>   s,   € ÐnÐnÐn�|ÐVbÐclÔVmÐnÐnÈFˆFÐnÐnÐnÐnr!   Úscope_metrics)ÚjsonÚloadsr   r	   Úget_metrics_dataÚto_json)r>   Úexported_metricsÚresource_metrics      r   rB   rB   {   s[   € å”z¥$¥{°N×4SÒ4SÑ4UÔ4UÑ"VÔ"V×"^Ò"^Ñ"`Ô"`ÑaÔaÐØ(Ð);Ô<Ñ€_ØnÐn °Ô'GÐnÑnÔnÐnr!   )r   r   )r>   r   r   rT   )$r.   Ú
__future__r   r]   Údataclassesr   Útypingr   r   ÚpytestÚopentelemetry.sdk._logs.exportr   Ú opentelemetry.sdk.metrics.exportr   r	   Úopentelemetry.sdk.trace.exportr
   Ú$opentelemetry.sdk.trace.id_generatorr   rO   Ú_internal.configr   Ú_internal.constantsr   Ú_internal.exporters.testr   r   Ú_internal.utilsr   Ú__all__r   r   r   Úfixturer   rB   r/   r!   r   ú<module>rq      sÿ  ðð Bð  Bà "Ð "Ð "Ð "Ð "Ð "à €€€Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð Ð Ð à €€€Ø CÐ CÐ CÐ CÐ CÐ CØ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NØ >Ð >Ð >Ð >Ð >Ð >Ø <Ð <Ð <Ð <Ð <Ð <à €€€à ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø :Ð :Ð :Ð :Ð :Ð :Ø CÐ CÐ CÐ CÐ CÐ CÐ CÐ CØ 4Ð 4Ð 4Ð 4Ð 4Ð 4ðð ð €ð €�ÐÑÔð%ð %ð %ð %ð %˜[ñ %ô %ñ Ôð%ð>8ð 8ð 8ð 8ð 8ñ 8ô 8ð 8ð" ð:ð :ð :ð :ð :ñ :ô :ñ „ð:ð$ „ðgð gð gñ „ðgð*oð oð oð oð oð or!   