Ë
    bQêjW  ã                  óÆ   — d dl mZ d dlZd dlmZ 	 d dlmZmZmZ d dl	m
Z
mZmZ d dlmZ d dlmZ d d	lmZ d d
lmZmZmZmZmZ  G d„ d«      Zy# e$ r
  ed«      d‚w xY w)é    )ÚannotationsN)ÚSequence)ÚmetricsÚ	propagateÚtrace)ÚSpanKindÚStatusÚ
StatusCodezMThe `opentelemetry-api` package is required to use `OpenTelemetryMiddleware`.)Ú__version__)ÚURL)ÚMount)ÚASGIAppÚMessageÚReceiveÚScopeÚSendc                  ó<   — e Zd ZdZddddœ	 	 	 	 	 	 	 	 	 dd„Zdd„Zy)	ÚOpenTelemetryMiddlewarea]  Create OpenTelemetry server spans for incoming HTTP requests.

    This middleware is experimental. Its API and emitted telemetry may change in minor
    releases without a deprecation period.

    Args:
        app: The ASGI application to wrap.
        excluded_urls: Regular expressions matched against the full request URL.
            Pass a comma-separated string or a sequence. By default, exclude no URLs.
        tracer_provider: Optional tracer provider. If omitted, use the global tracer provider.
        meter_provider: Optional meter provider. If omitted, use the global meter provider.
    © N)Úexcluded_urlsÚtracer_providerÚmeter_providerc               ó  — || _         || _        t        |t        «      r1|r-|j	                  d«      D �cg c]  }|j                  «       ‘Œ c}nd}t        d„ |D «       «      | _        |xs t        j                  «       | _
        y c c}w )Nú,r   c              3  óF   K  — | ]  }t        j                  |«      –— Œ y ­w©N)ÚreÚcompile)Ú.0Úpatterns     úg/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/starlette/middleware/opentelemetry.pyú	<genexpr>z3OpenTelemetryMiddleware.__init__.<locals>.<genexpr>,   s   è ø€ Ò#U¸G¤B§J¡J¨w×$7Ñ#Uùs   ‚!)ÚappÚ_meter_providerÚ
isinstanceÚstrÚsplitÚstripÚtupleÚ_excluded_urlsr   Úget_tracer_providerÚ_tracer_provider)Úselfr#   r   r   r   r    s         r!   Ú__init__z OpenTelemetryMiddleware.__init__    ss   € ð ˆŒØ-ˆÔÜ�m¤SÔ)ÙYf¸M×<OÑ<OÐPSÓ<TÖU°˜WŸ]™]�_ÓUÐlnˆMÜ#Ñ#UÀ}Ô#UÓUˆÔØ /Ò N´5×3LÑ3LÓ3NˆÕùò Vs   ´Bc              ƒ  óâ  ‡‡‡K  — |d   dk7  s|j                  d«      r| j                  ||‰«      ƒ d {  –—† S d|d<   	 | j                  }t        |t        j
                  «      r| j                  ||‰«      ƒ d {  –—† |d= S t        |¬«      Št        ˆfd„| j                  D «       «      r| j                  ||‰«      ƒ d {  –—† |d= S |j                  dd«      }|j                  «       }i }|j                  d	g «      D ]R  \  }}	|j                  |j                  d
«      j                  «       g «      j                  |	j                  d
«      «       ŒT ||j                  dd«      |j                  dd«      dœ}
||k7  r||
d<   ‰j                  r‰j                  |
d<   ‰j                  �H‰j                  |
d<   |j                  d«      }‰j                   �‰j                   n|�|d   nd }|�||
d<   |j                  d«      r|d   |
d<   |j                  d«      �|d   d   |
d<   |j                  d«      r|d   d   |
d<   |j#                  dt$        «      j'                  |t)        j*                  |«      t,        j.                  |
¬«      5 Šd%ˆˆfd„}	 | j                  |||«      ƒ d {  –—†  	 |j                  d«      }t        |t8        «      r|j                  d «      xs d!}nGt;        |d"d «      }t        |t<        «      r(|j                  d d«      j?                  d!«      |z   xs d!nd }|�)‰jA                  |› d#|› �«       ‰j3                  d$|«       	 d d d «       |d= y 7 �Œ67 �Œò7 �Œ­7 ŒÃ# t0        $ r+}‰j3                  dt5        |«      j6                  «       ‚ d }~ww xY w# |j                  d«      }t        |t8        «      r|j                  d «      xs d!}nGt;        |d"d «      }t        |t<        «      r(|j                  d d«      j?                  d!«      |z   xs d!nd }|�)‰jA                  |› d#|› �«       ‰j3                  d$|«       w w xY w# 1 sw Y   ŒýxY w# |d= w xY w­w)&NÚtypeÚhttpzstarlette.opentelemetryT)Úscopec              3  óR   •K  — | ]  }|j                  t        ‰«      «      –— Œ  y ­wr   )Úsearchr&   )r   r    Úurls     €r!   r"   z3OpenTelemetryMiddleware.__call__.<locals>.<genexpr>:   s   øè ø€ ÒO°�7—>‘>¤# c£(×+ÑOùs   ƒ$'ÚmethodÚ Úheaderszlatin-1ÚpathÚscheme)zhttp.request.methodzurl.pathz
url.schemezhttp.request.method_originalz	url.queryzserver.addressÚserveré   zserver.portÚhttp_versionznetwork.protocol.versionÚclientr   zclient.addressz
user-agentzuser_agent.originalÚ	starlette)ÚcontextÚkindÚ
attributesc              “  ó   •K  — | d   dk(  r_| d   }‰j                  d|«       |dk\  rC‰j                  dt        |«      «       ‰j                  t        t        j
                  «      «        ‰| «      ƒ d {  –—†  y 7 Œ­w)Nr0   zhttp.response.startÚstatuszhttp.response.status_codeiô  ú
error.type)Úset_attributer&   Ú
set_statusr	   r
   ÚERROR)ÚmessageÚstatus_codeÚsendÚspans     €€r!   Úsend_with_telemetryz=OpenTelemetryMiddleware.__call__.<locals>.send_with_telemetrya   sp   øè ø€ Ø˜v‘Ð*?Ò?Ø&-¨hÑ&7˜Ø×*Ñ*Ð+FÈÔTØ&¨#Ò-Ø ×.Ñ.¨|¼SÀÓ=MÔNØ ŸO™O¬F´:×3CÑ3CÓ,DÔEÙ˜w›-×'Ò'ús   ƒA3A>Á6A<Á7A>rE   ÚrouteÚ	root_pathú/Úpath_formatú z
http.route)rI   r   ÚreturnÚNone)!Úgetr#   r,   r%   r   ÚNoOpTracerProviderr   Úanyr*   ÚupperÚ
setdefaultÚdecodeÚlowerÚappendÚqueryÚhostnameÚportÚ
get_tracerr   Ústart_as_current_spanr   Úextractr   ÚSERVERÚ	ExceptionrF   r0   Ú__qualname__r   Úgetattrr&   ÚrstripÚupdate_name)r-   r2   ÚreceiverK   r   Úoriginal_methodr6   r8   ÚnameÚvaluerB   r;   Úserver_portrM   ÚexcrN   Ú
route_pathrQ   rL   r5   s      `              @@r!   Ú__call__z OpenTelemetryMiddleware.__call__/   sv  úè ø€ Ø�‰=˜FÒ" e§i¡iÐ0IÔ&JØŸ™ %¨°$Ó7×7Ð7à+/ˆÐ'Ñ(ðJ	1Ø"×3Ñ3ˆOÜ˜/¬5×+CÑ+CÔDØ!ŸX™X e¨W°dÓ;×;ðN Ð/Ñ0ôK ˜EÔ"ˆCÜÓO¸4×;NÑ;NÔOÔOØ!ŸX™X e¨W°dÓ;×;ðF Ð/Ñ0ðC $Ÿi™i¨°"Ó5ˆOØ$×*Ñ*Ó,ˆFà,.ˆGØ$Ÿy™y¨°BÓ7ò g‘��eØ×"Ñ" 4§;¡;¨yÓ#9×#?Ñ#?Ó#AÀ2ÓF×MÑMÈeÏlÉlÐ[dÓNeÕfðgð (.Ø!ŸI™I f¨bÓ1Ø#Ÿi™i¨°&Ó9ñ0ˆJð
  &Ò(Ø=L�
Ð9Ñ:Ø�yŠyØ*-¯)©)�
˜;Ñ'Ø�|‰|Ð'Ø/2¯|©|�
Ð+Ñ,ØŸ™ 8Ó,�Ø*-¯(©(Ð*>˜cŸhšhÐQWÐQcÀFÈ1ÂIÐim�ØÐ*Ø0;�J˜}Ñ-Ø�y‰y˜Ô(Ø9>¸~Ñ9N�
Ð5Ñ6Ø�y‰y˜Ó"Ð.Ø/4°X©¸qÑ/A�
Ð+Ñ,Ø�{‰{˜<Ô(Ø4;¸LÑ4IÈ!Ñ4L�
Ð0Ñ1à ×+Ñ+¨K¼ÓE×[Ñ[ØÜ!×)Ñ)¨'Ó2Ü—_‘_Ø%ð	 \ó ð "Eð
 ö(ðEØŸ(™( 5¨'Ð3FÓG×GÑGð
 "ŸI™I gÓ.�EÜ! %¬Ô/Ø%*§Y¡Y¨{Ó%;Ò%B¸s™
ä&-¨e°]ÀDÓ&I˜ô  *¨+´sÔ;ð "ŸI™I k°2Ó6×=Ñ=¸cÓBÀ[ÑPÒWÑTWà!%ð #ð
 "Ð-Ø×(Ñ(¨F¨8°1°Z°LÐ)AÔBØ×*Ñ*¨<¸ÕD÷E"EðH Ð/Ñ0ð[ 8ùð <ùð <ùð` HùÜ ò Ø×&Ñ& |´T¸#³Y×5KÑ5KÔLØûðûð "ŸI™I gÓ.�EÜ! %¬Ô/Ø%*§Y¡Y¨{Ó%;Ò%B¸s™
ä&-¨e°]ÀDÓ&I˜ô  *¨+´sÔ;ð "ŸI™I k°2Ó6×=Ñ=¸cÓBÀ[ÑPÒWÑTWà!%ð #ð
 "Ð-Ø×(Ñ(¨F¨8°1°Z°LÐ)AÔBØ×*Ñ*¨<¸ÕDð .ú÷A"Eð "EûðH Ð/Ñ0üsÁ   …0Q/µM+¶	Q/Á <Q' Á<M.Á=Q' Â Q/ÂA Q' ÃM1ÃQ' ÃQ/ÃGQ' ÊQÊM6Ê0M4Ê1M6Ê6B)QÍQ' Í'Q/Í.Q' Í1Q' Í4M6Í6	N*Í?&N%Î%N*Î*N-Î-B+QÑQÑQ$Ñ Q' Ñ'Q,Ñ,Q/)
r#   r   r   zstr | Sequence[str]r   ztrace.TracerProvider | Noner   zmetrics.MeterProvider | NonerS   rT   )r2   r   ri   r   rK   r   rS   rT   )Ú__name__Ú
__module__re   Ú__doc__r.   rp   r   ó    r!   r   r      sS   „ ñð" .0Ø7;Ø7;ñOàðOð +ð	Oð
 5ðOð 5ðOð 
óOôO1rt   r   )Ú
__future__r   r   Úcollections.abcr   Úopentelemetryr   r   r   Úopentelemetry.tracer   r	   r
   ÚImportErrorr?   r   Ústarlette.datastructuresr   Ústarlette.routingr   Ústarlette.typesr   r   r   r   r   r   r   rt   r!   ú<module>r}      s_   ðÝ "ã 	Ý $ðqß7Ñ7ß@Ñ@õ "Ý (Ý #ß BÕ B÷l1ò l1øð ò qÙ
ÐeÓ
fÐlpÐpðqús   ’A ÁA 