U 췀g2@sddlZddlZddlmZddlZddlmZddlmZm Z m Z ddl m Z m Z mZddlmZddlmZddlmZmZdd lmZmZmZdd lmZdd lmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(zm?Z?ddl4m@Z@ddl4mAZAddl4mBZBddl4mCZCddlmDZDddlEmFZFmGZGdZHGddde ZIdd ZJd!d"ZKd#d$ZLd%ZMd&d'ZNdS)(N)wraps)continue_trace)OP SPANSTATUSSPANDATA)$_DEFAULT_FAILED_REQUEST_STATUS_CODES Integration DidNotEnable) ignore_logger) track_session)_filter_headersrequest_body_within_bounds)BAGGAGE_HEADER_NAMESOURCE_FOR_STYLETRANSACTION_SOURCE_ROUTE)should_propagate_trace) capture_internal_exceptionsensure_integration_enabledevent_from_exceptionlogger parse_url parse_versionreraisetransaction_from_functionHAS_REAL_CONTEXTVARSCONTEXTVARS_ERROR_MESSAGESENSITIVE_DATA_SUBSTITUTEAnnotatedValue) __version__) ClientSession TraceConfig) Application HTTPException UrlDispatcherzAIOHTTP not installed) TYPE_CHECKING)Request)UrlMappingMatchInfo)TraceRequestStartParamsTraceRequestEndParams)Set)SimpleNamespace)Any)Optional)Tuple)Union)ExcInfo)EventEventProcessor) handler_namemethod_and_path_patternc@s6eZdZdZdeZd edddZeddZd S) AioHttpIntegrationaiohttpz auto.http.r2)failed_request_status_codescCs(|tkrtd|tf||_||_dS)Nz7Invalid value for transaction_style: %s (must be in %s))TRANSACTION_STYLE_VALUES ValueErrortransaction_style_failed_request_status_codes)selfr9r6r<M/opt/hc_python/lib/python3.8/site-packages/sentry_sdk/integrations/aiohttp.py__init__JszAioHttpIntegration.__init__cstt}|dkrtdt|dkr.tdts>tdttdtjfdd}|t_t j t fdd }|t _ t j ttfd d }|t _ dS) NzUnparsable AIOHTTP version: {})zAIOHTTP 3.4 or newer required.zSThe aiohttp integration for Sentry requires Python 3.7+ or aiocontextvars package.zaiohttp.serverc stt}|dkr.||f||IdHSt|}tj}t|ddP|| | t |t |j }t|tjdttjd}tj|d|idz||IdH} Wntk r} z$|| j| j|jkrtW5d} ~ XYnHtjtfk r$|tjYn tk rBt tYnXz | j!} Wnt"k rdYn X|| | W5QRW5QRW5QRSQRXW5QRXW5QRXdS)Nrequest)Z session_modezgeneric AIOHTTP request)opnamesourceoriginZaiohttp_request)Zcustom_sampling_context)# sentry_sdk get_clientget_integrationr4weakrefrefZisolation_scoper Zgenerate_propagation_contextZclear_breadcrumbsZadd_event_processor_make_request_processordictheadersrrZ HTTP_SERVERrrEZstart_transactionr"set_http_status status_coder:_capture_exceptionasyncioZCancelledErrorConnectionResetErrorZ set_statusrZ CANCELLED ExceptionrstatusAttributeError) r;rAargskwargs integration weak_requestscoperMZ transactionresponseeZresponse_status) old_handler<r=sentry_app_handleqsT        z8AioHttpIntegration.setup_once..sentry_app_handlecs||IdH}tt}|dkr*|Sd}zN|jdkrFt|j}n4|jdkrz|}|dpj|d}d |j |}Wnt k rYnX|dk rt j |t|jd|S)Nr2r3path formatterz{} {})rD)rFrGrHr4r9rhandlerget_infogetformatmethodrSget_current_scopeZset_transaction_namer)r;rArvrXrCZ route_infopattern)old_urldispatcher_resolver<r=sentry_urldispatcher_resolves(   zCAioHttpIntegration.setup_once..sentry_urldispatcher_resolvecs4t|dpd}t}||||d<||S)NZ trace_configsr<)listrccreate_trace_configappend)rVrWZclient_trace_configs trace_config)old_client_session_initr<r=inits  z+AioHttpIntegration.setup_once..init)rAIOHTTP_VERSIONr rdrrr r!Z_handler#resolverrr>rr4)versionr^rjrpr<)ror]rir= setup_onceYs. ? zAioHttpIntegration.setup_onceN)r2) __name__ __module__ __qualname__ identifierrErr> staticmethodrtr<r<r<r=r4Fs  r4cCs2dd}dd}t}|j||j||S)Nc sBttdkrdS|j}d}ttt|j dd}W5QRXtj t j d||r^|j nt ftjd}|tj||dk r|d|j |tj|j|tj|jt}t|t|j r8tj|dD]Z\}}tdj|||j d|tkr,|jtr,|j|d |7<q||j|<q||_dS) NF)sanitizez%s %s)rBrCrEurl)spanzE[Tracing] Adding `{key}` header {value} to outgoing request to {url}.)keyvaluer{,) rFrGrHr4reupperrrstrr{Z start_spanrZ HTTP_CLIENTrrEset_datarZ HTTP_METHODZ HTTP_QUERYqueryZ HTTP_FRAGMENTfragmentrrfZiter_trace_propagation_headersrdebugrdrrMrcr|) sessiontrace_config_ctxparamsre parsed_urlr|clientr}r~r<r<r=on_request_startsN  z-create_trace_config..on_request_startcsB|jdkrdS|j}|t|jj|d|jj|dS)Nreason)r|rNintr[rTrrfinish)rrrr|r<r<r=on_request_ends  z+create_trace_config..on_request_end)r rrmr)rrrnr<r<r=rls /   rlcsfdd}|S)Nc s}|dkr|Stj|di}d|j|j|jf|d<|j|d<|j|d<d|ji|d<tt |j |d<t ||d <W5QRX|S) NrAz %s://%s%sr{ query_stringreZ REMOTE_ADDRenvrMdata) r setdefaultschemehostr_rreremoter rLrMget_aiohttp_request_data)eventhintrAZ request_inforYr<r=aiohttp_processor(s     z2_make_request_processor..aiohttp_processorr<)rYrr<rr=rK&s rKcCs8t}t|tjdddd\}}tj||d|S)Nr5F)typeZhandled)Zclient_optionsZ mechanism)r)sysexc_inforrFrGoptionsZ capture_event)rrrr<r<r=rPIs rPz8[Can't show request body due to implementation details.]cCsL|j}|dk r>ttt|s(tS|jp0d}||dS|j rHt SdS)Nzutf-8replace) Z _read_bytesr rFrGlenrZremoved_because_over_size_limitcharsetdecodeZ can_read_bodyBODY_NOT_READ_MESSAGE)rAZ bytes_bodyencodingr<r<r=rXs  r)OrrI functoolsrrFZsentry_sdk.apirZsentry_sdk.constsrrrZsentry_sdk.integrationsrrr Zsentry_sdk.integrations.loggingr Zsentry_sdk.sessionsr Z$sentry_sdk.integrations._wsgi_commonr r Zsentry_sdk.tracingrrrZsentry_sdk.tracing_utilsrZsentry_sdk.utilsrrrrrrrrrrrrrQr5rrqrr Z aiohttp.webr!r"r# ImportErrortypingr$Zaiohttp.web_requestr%Zaiohttp.web_urldispatcherr&r'r(collections.abcr)typesr*r+r,r-r.r/Zsentry_sdk._typesr0r1r7r4rlrKrPrrr<r<r<r=sP     8           D#