bgHddlmZddlZddlZddlZddlZddlZddlmZmZddl m Z ddl m Z m Z mZmZddlmZddlmZmZmZddlmZerRdd lmZdd lmZdd lmZdd lmZdd lmZddlmZddlmZddlm Z ddlm!Z!ddl"m#Z#ddl"m$Z$ddlm%Z%m&Z&ee'Z( ddl)m*Z*n#e+$r ddl,m*Z*YnwxYwGdde-Z.ddZ/Gdde.Z0Gdde.Z1dZ2dS))print_functionN)datetime timedelta) defaultdict)Dsnloggercapture_internal_exceptions json_dumps)BackgroundWorker)EnvelopeItem PayloadRef) TYPE_CHECKING)Any)Callable)Dict)Iterable)Optional)Tuple)Type)Union) DefaultDict) PoolManager) ProxyManager)Event EndpointType) getproxiescTeZdZdZdZ d dZdZdZ d dZdZ d dZ d Z d Z dS) TransportzWBaseclass for all transports. A transport is used to send an event to sentry. Nc~||_|r,|d$|drt|d|_dSd|_dS)Ndsn)optionsr parsed_dsn)selfr"s K/opt/cloudlinux/venv/lib64/python3.11/site-packages/sentry_sdk/transport.py__init__zTransport.__init__2sG  #wu~1gen1!'%.11DOOO"DOOOct)zm This gets invoked with the event dictionary when an event should be sent to sentry. NotImplementedErrorr$events r% capture_eventzTransport.capture_event<s"###r'ct)a$ Send an envelope to Sentry. Envelopes are a data container format that can hold any type of data submitted to Sentry. We use it for transactions and sessions, but regular "error" events should go through `capture_event` for backwards compat. r))r$envelopes r%capture_envelopezTransport.capture_envelopeFs"###r'cdS)z=Wait `timeout` seconds for the current events to be sent out.Nr$timeoutcallbacks r%flushzTransport.flushTs  r'cdS)zForcefully kills the transport.Nr2r$s r%killzTransport.kill]s  r'cdS)zVThis increments a counter for event loss by reason and data category. Nr2)r$reason data_categoryitems r%record_lost_eventzTransport.record_lost_eventbs tr'cdS)NTr2r8s r% is_healthyzTransport.is_healthyntr'cR |dS#t$rYdSwxYwN)r9 Exceptionr8s r%__del__zTransport.__del__rs:  IIKKKKK    DD s  &&rCNN) __name__ __module__ __qualname____doc__r#r&r-r0r6r9r>r@rEr2r'r%rr*s J####$$$ $ $ $"            r'rc#pK|tj}|dD]} |dd\}}}|t t |z}|r|dpdD]}||fV r#t tf$rYwxYwdS)N,:seconds;rC)rutcnowsplitstriprint LookupError ValueError)headernowlimit retry_after categories_categorys r%_parse_rate_limitsr_zs {oc"" ).)<)zHttpTransport.record_lost_events|12  F   .M ,,t~~//005A  "899 9 }f4555A55555r'c|jd}|r=tjd|jt |dS|jdkr\tjdtj t|j |pdz|jd<dSdS)Nzx-sentry-rate-limitsz%Rate-limited via x-sentry-rate-limitszRate-limited via 429<rO) headersgetrwarningroupdater_statusrrRrrsget_retry_after)r$responserXs r%_update_rate_limitsz!HttpTransport._update_rate_limitss !%%&<==   NB C C C  ' '(:6(B(B C C C C C _ # # N1 2 2 2)1):):Y 33H==C>>>*D  & & &$ #r'storecHfd}|tjjtjd jdtj|||}n/#t$r" d|dwxYw ||j dkr dnn|j d ks |j d krXtj d |j |j d |j |d|dS#|wxYw) Nc|ddSjD]}||dS)Nerrorr<r=)r>items)r;r=r/r$s r% record_lossz0HttpTransport._send_request..record_losss_&&vW&EEEEE$N>>D**6*====>>r')z User-Agentz X-Sentry-AuthPOST)bodyrnetwork network_errorr status_429i,z%Unexpected status code: %s (body: %s)z status_{})rstrrnclient to_headerrxrequest get_api_urlrDon_dropped_eventrrrrdataformatclose)r$rr endpoint_typer/rrs` ` r% _send_requestzHttpTransport._send_requests > > > > > > !$*"344!$TZ%9%9%;%;!z>HttpTransport._fetch_pending_client_report..#s>))).Xv$$*xXVV)))r') timestampdiscarded_events)json client_report)type) r"rvrurtrrUr rr)r$forceintervalrs r%_fetch_pending_client_reportz*HttpTransport._fetch_pending_client_reports|12 4 6x9OOO41!,S!1!1(, % 4 !%)) .3355 )))     !    r'c||d}|&|t|gdSdS)Nr)rr)r)rr0r )r$rrs r%_flush_client_reportsz#HttpTransport._flush_client_reports/sP99PR9SS  $  ! !(-"A"A"A B B B B B % $r'c:fd}||p |dS)Ncnj|}|duo|tjkSrC)rorrrR)buckettsr$s r% _disabledz0HttpTransport._check_disabled.._disabled7s5%))&11BT>z1HttpTransport._is_rate_limited..@s/RRb2)))RRRRRRr')anyrovaluesr8s r%_is_rate_limitedzHttpTransport._is_rate_limited>s.RRD4H4O4O4Q4QRRRRRRr'c4|jSrC)rlfullr8s r%_is_worker_fullzHttpTransport._is_worker_fullBs|  """r'cT|p| SrC)rrr8s r%r@zHttpTransport.is_healthyFs(((**Ed.C.C.E.EFFr'c |dr.|d|dddStj}t j|d5}|t|dddn #1swxYwY|j Jtj d| dpd d | d pd d | d pd d|j j d|j j ||ddddS)Nrself_rate_limitsratelimit_backoffrwfileobjmodezSending event, type:rnullz level:levelz event_id:event_idz project:z host:zapplication/jsongzipz Content-TypezContent-Encoding)r)rrr>ioBytesIOrGzipFilewriter r#rdebugr project_idhostrgetvalue)r$r,rfs r% _send_eventzHttpTransport._send_eventJs    ( (   ! !"4 5 5 5  " "#6g " N N N4z|| ]4c 2 2 2 'a GGJu%% & & & ' ' ' ' ' ' ' ' ' ' ' ' ' ' '***  &!!+V++ '"",f,, *%%///***$$     MMOO%7VTT    ts-#BB #B cg}|jD]g}||jr6|jdvr|d|d|R||ht |j|}|jsdS|d}||j|tj }tj |d 5}| |dddn #1swxYwY|jJtjd |j|jj|jj||d d d d|dS)N) transactionrdefaultrrr)rr)rrrz(Sending envelope [%s] project:%s host:%szapplication/x-sentry-enveloperrr/)rrr/)rrr<rr>appendr rrrrrrserialize_intor#rr descriptionrrrr)r$r/ new_itemsr=client_report_itemrrs r%_send_envelopezHttpTransport._send_envelopeis  N ' 'D##D$677 '%)LLL))*<===&&':&FFFF  &&&&H$4IFFF~ 4">>>KK  ) N ! !"4 5 5 5z|| ]4c 2 2 2 'a  # #A & & & ' ' ' ' ' ' ' ' ' ' ' ' ' ' '*** 6  O & O      MMOO ?$*%    ts,DDDc4dd|ptjdS)NrN CERT_REQUIRED) num_pools cert_reqsrh)certifiwhere)r$rhs r%_get_pool_optionszHttpTransport._get_pool_optionss'( 3GMOO   r'ctd}|sdS|dD]M}|}|j|s|j|rdSNdS)NnoFrLT)rrrSrTrendswithnetloc)r$r#no_proxyrs r% _in_no_proxyzHttpTransport._in_no_proxys<<##D)) 5NN3''  D::<->OL$NZ\\5E5Eg5N5NE N***Mx<#LJLL4D4DV4L4LE%%h//  / 6(5_%(( ;"&GGGGGGG"&+ON]#7,,U;;d;;;".66666+E::T:::&.... .s3B::!CCcjjfd}j|s.ddddSdS)Nc5t5dddn #1swxYwYddddS#1swxYwYdSrC)r rr)r,hubr$sr%send_event_wrapperz7HttpTransport.capture_event..send_event_wrappers 1 102211$$U+++..000111111111111111 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 13A!*A  A! A A!A A!!A%(A% full_queuequeue_overflowrr)rzcurrentrlsubmitrr>)r$r,rrs`` @r%r-zHttpTransport.capture_eventsl" 1 1 1 1 1 1 1|""#566 L  ! !, / / /  " "#37 " K K K K K L Lr'cjjfd}j|s6djD]}d|dSdS)Nc5t5dddn #1swxYwYddddS#1swxYwYdSrC)r rr)r/rr$sr%send_envelope_wrapperz=HttpTransport.capture_envelope..send_envelope_wrappers 1 102211''111..000111111111111111 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1rrrr)rzrrlrrrr>)r$r/r r=rs`` @r%r0zHttpTransport.capture_envelopesl" 1 1 1 1 1 1 1|""#899 D  ! !, / / /  D D&&'7d&CCCC D D D Dr'ctjd|dkr:jfdj||dSdS)NzFlushing HTTP transportrc0dS)NT)r)rr8sr%z%HttpTransport.flush.. s(B(B(B(N(Nr')rrrlrr6r3s` r%r6zHttpTransport.flushsd  ./// Q;; L   N N N N O O O L  w 1 1 1 1 1 ;r'c`tjd|jdS)NzKilling HTTP transport)rrrlr9r8s r%r9zHttpTransport.kills- -... r'rF)rN)Fr)FrC)rGrHrIrJr&r>rrrrrrrrr@rrrrrwr-r0r6r9r2r'r%raras%%B  BBBB,. 7777r    >CCCC 666SSS###GGG>444l      -/-/-/^LLL"DDD* 2 2 2 2r'raceZdZdZdZdS)_FunctionTransportcHt|||_dSrC)rr&_func)r$funcs r%r&z_FunctionTransport.__init__s# 4    r'c0||dSrC)rr+s r%r-z _FunctionTransport.capture_events 5tr'N)rGrHrIr&r-r2r'r%rrs2r'rc|d}|t}nbt|tr|St|trt |tr|}nt |rt |S|dr ||SdS)N transportr!)ra isinstancerr issubclasscallabler)r" ref_transport transport_clss r%make_transportr&sK(M% M9 - -1 M4 ( (1Z y-Q-Q1% - 1!-000u~&}W%%% 4r'rC)3 __future__rrrprrrurr collectionsrsentry_sdk.utilsrrr r sentry_sdk.workerr sentry_sdk.enveloper r rsentry_sdk._typesrtypingrrrrrrrrrurllib3.poolmanagerrrrrr DataCategoryurllib.requestrrurllibobjectrr_rarrr2r'r%r*s%%%%%%  ((((((((######QQQQQQQQQQQQ......::::::::::++++++!""""""//////00000055555555C=L")))))))"""!!!!!!!!"MMMMMMMM`    JJJJJIJJJZ         s B'' B54B5