
    OjW                        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     y/var/www/origus_pro_usr/data/www/origus.pro/core/.venv/lib/python3.12/site-packages/starlette/middleware/opentelemetry.py	<genexpr>z3OpenTelemetryMiddleware.__init__.<locals>.<genexpr>,   s     #UGBJJw$7#Us   !)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     -mS)YfM<O<OPS<TUW]]_UlnM##U}#UU / N53L3L3N 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(+Os   $'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 OOF:3C3C,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"eii0I&J%$777+/'(J	1"33O/5+C+CD!XXeWd;;N /0K E"CO4;N;NOO!XXeWd;;F /0C $ii"5O$**,F,.G$yyB7 ge""4;;y#9#?#?#A2FMMell[dNefg (.!IIfb1#ii&90J
 &(=L
9:yy*-))
;'||'/2||
+,8,*-((*>chhQWQcF1Iim*0;J}-yy(9>~9N
56yy"./4Xq/A
+,{{<(4;L4I!4L
01 ++KE[[!))'2__%	 \  "E
 (E((5'3FGGG
 "IIg.E!%/%*YY{%;%Bs
&-e]D&I  *+s; "IIk26==cB[PWTW!% #
 "-((F81ZL)AB**<DE"EH /0[ 8 < <` H  &&|T#Y5K5KL "IIg.E!%/%*YY{%;%Bs
&-e]D&I  *+s; "IIk26==cB[PWTW!% #
 "-((F81ZL)AB**<D .A"E "EH /0s   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    " .07;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
flppqs   A A 