
    \jE                        d dl Z d dlZd dlZd dlZd dlmZ d dlmZmZ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 d dlmZ d d	lmZmZmZmZmZmZmZ d d
lmZ d dlmZ d dl m!Z! e!r1d dl 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)  e#de$de"f         Z*dZ+dZ,d(dZ-d)dZ.d*dZ/ G d de      Z0d+dZ1	 	 	 	 	 	 	 	 d,d!Z2ddd dde3fd"Z4d dd#d$de3fd%Z5d-d&Z6d.d'Z7y)/    N)deepcopy)datetime	timedeltatimezone)environ)continue_trace)OP)should_send_default_pii)TransactionSource)AnnotatedValuecapture_internal_exceptionsensure_integration_enabledevent_from_exceptionloggerTimeoutThreadreraise)Integration)_filter_headers)TYPE_CHECKING)Any)TypeVar)Callable)Optional)EventProcessorEventHintF.)boundi  g     @@returnc                 :     t        t               d fd       }|S )Nc                      t        j                         }t               5  t        j                         j	                          t        j                         }|rAt        |      r6t        ||j                  ddd      \  }}t        j                  ||       nJ| d   }t        |t              rt        j                  |      }t        |      }t        j                  |       d d d         | i |S # 1 sw Y   xY w)N
aws_lambdaFtypehandledclient_options	mechanismhint   )
sentry_sdk
get_clientr   get_isolation_scopeclear_breadcrumbssysexc_infoallr   optionscapture_event
isinstancestrjsonloads_event_from_error_json)argskwargsclientr1   sentry_eventr*   
error_info
init_errors          L/root/env/lib/python3.12/site-packages/sentry_sdk/integrations/aws_lambda.pysentry_init_errorz+_wrap_init_error.<locals>.sentry_init_error,   s    &&((* 	7**,>>@||~HCM%9#)>>'3F&"d
 ((DA "!W
j#.!%J!7J5jA((6%	7( 4*6**)	7 	7s   CC44C=r:   r   r;   r   r   r   )r   AwsLambdaIntegration)r?   rA   s   ` r@   _wrap_init_errorrD   +   s&     4jA+ B+2     c                 X     t        j                         	 	 	 	 	 	 	 	 	 	 d fd       }|S )Nc           
          t        j                         }|j                  t              }| | |g|i |S t	        | t
              rt        |       dk\  r| d   }t        |       }n| }d}t	        |t              si }|j                         }t        j                         5 }	d }
t               5  |	j                          |	j                  t        |||             |	j                  d|j                  j!                  d      d          |dkD  r$|	j                  dd       |	j                  d|       |j"                  rQ|t$        kD  rH|t$        z
  t&        z  }t)        ||t&        z  |	t        j*                         	      }
|
j-                          d d d        |j/                  d
i       }t	        |t              si }t1        |t2        j4                  |j6                  t8        j:                  t        j<                        }t        j>                  || |d      5  	  | |g|i ||
r|
jA                          cd d d        cd d d        S # 1 sw Y   xY w# tB        $ rT tE        jF                         }tI        ||jJ                  ddd      \  }}t        jL                  ||       tO        |  Y nw xY w	 |
r)|
jA                          n# |
r|
jA                          w w xY wd d d        n# 1 sw Y   nxY wd d d        y # 1 sw Y   y xY w)Nr+   r   
aws_region:   batch_requestT
batch_size)isolation_scopecurrent_scopeheaders)opnamesourceorigin)	aws_eventaws_context)custom_sampling_contextr"   Fr#   r&   r)   )(r,   r-   get_integrationrC   r5   listlendictget_remaining_time_in_millisrM   r   r/   add_event_processor_make_request_event_processorset_taginvoked_function_arnsplittimeout_warningTIMEOUT_WARNING_BUFFERMILLIS_TO_SECONDSr   get_current_scopestartgetr   r	   FUNCTION_AWSfunction_namer   	COMPONENTrS   start_transactionstop	Exceptionr0   r1   r   r3   r4   r   )rT   rU   r:   r;   r<   integrationrequest_datarL   configured_timescopetimeout_threadwaiting_timerO   transactionr1   r=   r*   handlers                    r@   sentry_handlerz%_wrap_handler.<locals>.sentry_handlerJ   s    &&(,,-AB9kCDCFCCi&3y>Q+>$Q<LYJ$LJ,- L%BBD'') E	.U!N,.  +'')))1$k?
  +"B"B"H"H"Ma"P >MM/48MM,
;
  //'*@@ (*@@)$*L &3$'*;;(-&0&B&B&D	&N #((*A +D #&&y"5G gt,(?? ..(22+22K --!*#.) .."9kKDKFK &&++-). .cE	. E	. +  +p ! '"||~H)= '-~~+7E"J*&L$
 ,,\EX&' '%&++- &&++- &'. . .cE	. E	. E	.s{   #L0C!IB
LK/I)K/;	LI	LAJ74K6J77K;K/K##K/&	L/K8	4LL)
rT   r   rU   r   r:   r   r;   r   r   r   )	functoolswraps)rt   ru   s   ` r@   _wrap_handlerrx   I   sV    __Wg.g.',g.5:g.FKg.	g. g.R rE   c                      t               5  t        j                         } | j                  t              }|| j                          d d d        y # 1 sw Y   y xY wN)r   r,   r-   rW   rC   flush)r<   rm   s     r@   _drain_queuer|      sM    	$	& &&(,,-AB" LLN  s   <AAc                   >    e Zd ZdZde ZddeddfdZed	d       Zy)
rC   r"   zauto.function.ra   r   Nc                     || _         y rz   )ra   )selfra   s     r@   __init__zAwsLambdaIntegration.__init__   s
    .rE   c                     t               } | st        j                  d       y t        | d      st        j                  d       y t        | d      }|r\| j                  	 	 	 	 	 	 	 	 d
fd}|| _        | j
                  	 	 	 	 	 	 	 	 d
fd}|| _        | j                  dfd}|| _        y t        | j                  j                        | j                  _	        | j                  fd}|| _        dd	} || j                  j                        | j                  _
         || j                  j                        | j                  _        y )NzfNot running in AWS Lambda environment, AwsLambdaIntegration disabled (could not find bootstrap module)handle_event_requestzjNot running in AWS Lambda environment, AwsLambdaIntegration disabled (could not find handle_event_request)handle_http_requestc                 2    t        |       }  | g|i |S rz   rx   )request_handlerr:   r;   old_handle_event_requests      r@   sentry_handle_event_requestzDAwsLambdaIntegration.setup_once.<locals>.sentry_handle_event_request   s$     #0"@/Q$Q&QQrE   c                 2    t        |       }  | g|i |S rz   r   )r   r:   r;   old_handle_http_requests      r@   sentry_handle_http_requestzCAwsLambdaIntegration.setup_once.<locals>.sentry_handle_http_request   s$     #0"@.PPPPrE   c                  (    t                 | i |S rz   r|   )r:   r;   old_to_jsons     r@   sentry_to_jsonz7AwsLambdaIntegration.setup_once.<locals>.sentry_to_json   s    "D3F33rE   c                 4    t        |      } | |g|i |S rz   r   )lambda_runtime_clientr   r:   r;   r   s       r@   r   zDAwsLambdaIntegration.setup_once.<locals>.sentry_handle_event_request  s1     #0"@/)?=AEK rE   c                      d fd}|S )Nc                  (    t                 | i |S rz   r   )r:   r;   fs     r@   innerzKAwsLambdaIntegration.setup_once.<locals>._wrap_post_function.<locals>.inner  s     Nd-f--rE   rB    )r   r   s   ` r@   _wrap_post_functionz<AwsLambdaIntegration.setup_once.<locals>._wrap_post_function  s    . rE   )r   r   r:   r   r;   r   r   r   rB   )r   r   r   r   )get_lambda_bootstrapr   warninghasattrr   r   to_jsonrD   LambdaRuntimeClientpost_init_errorpost_invocation_resultpost_invocation_error)	lambda_bootstrappre_37r   r   r   r   r   r   r   s	         @@@r@   
setup_oncezAwsLambdaIntegration.setup_once   s   /1NNR ')?@NNV )+@A'7'L'L$R!&R/4R@ERR 5P1&6&J&J#Q!&Q/4Q@EQQ 4N0
 +22K4 (6$CS 44DDD00@ (8'L'L$ 5P1
 $$88OO 00G $$88NN 00FrE   )Fr   N)	__name__
__module____qualname__
identifierrS   boolr   staticmethodr   r   rE   r@   rC   rC      s<    Jj\*F/ / / U UrE   rC   c                  <   dt         j                  v rt         j                  d   S dt         j                  v ret         j                  d   } t        | d      r,t        | j                  d      r| j                  j                  S t        | d      r| j                  S | S y )N	bootstrap__main__awslambdaricmain)r0   modulesr   r   r   )modules    r@   r   r   !  s      ckk!{{;''	s{{	"Z(6-.7##[4
 **444V[)### rE   rT   r   rU   c                 t     t        j                  t        j                        }|f	 	 	 	 	 	 	 d fd}|S )Nc                 @   j                         }|z
  }| j                  di       }j                  j                  j                  j
                  ||d|d<   t        |      j                  j                  d|d<   | j                  di       }dv rd   |d<   t              |d	<   d
v rd
   |d<   dv rt        d         |d<   t               r| j                  di       }j                  d      }|i }|j                  d      }	|	|j                  d|	       |j                  d      }
|
|j                  d|
       dv r?j                  dd      |d<   n)j                  dd       rt        j                         |d<   t        |      | d<   | S )Nextra)rh   function_versionr_   aws_request_idexecution_duration_in_millisremaining_time_in_millislambda)url	log_group
log_streamzcloudwatch logsrequest
httpMethodmethodr   queryStringParametersquery_stringrO   useridentityuserArnidsourceIp
ip_addressbody data)r[   
setdefaultrh   r   r_   r   _get_cloudwatch_logs_urllog_group_namelog_stream_namerf   _get_urlr   r
   r   removed_because_raw_datar   )r=   r*   
start_timeremaining_time_in_milisexec_durationr   r   	user_infor   r   iprU   rT   configured_timeouts              r@   event_processorz6_make_request_event_processor.<locals>.event_processorI  s    #."J"J"L*-DD''4(66 + < <$/$D$D)88,9(?
h ,KD$33%55$
  ""9b19$ ), 7GH!)[9"i/&/0G&HGN#	!!091E!FGI"$$//;I }}Z0Hi(B~$$T2.j)B~$$\26""+--";}}VT* #1"I"I"K"*7"3YrE   )r=   r   r*   r   r   r   r   zOptional[Event])r   nowr   utc)rT   rU   r   r   r   s   ```  r@   r]   r]   D  sL     hll+J GQ<<%+<9C<	<| rE   c                     | j                  dd       }| j                  d      }|i }|j                  dd       }|j                  dd       }|r|r|rdj                  |||      S dj                  |j                        S )NpathrO   HostzX-Forwarded-Protoz	{}://{}{}zawslambda:///{})rf   formatrh   )rT   rU   r   rO   hostprotos         r@   r   r     s~    ==&DmmI&G;;vt$DKK+T2E$!!%t44##K$=$=>>rE   r   r   c                 d   d}t        j                  dd      }dj                  |j                  d      rdnd|| j                  | j
                  |t        d	      z
  j                  |      t        j                  t        j                        t        d
	      z   j                  |            }|S )z
    Generates a CloudWatchLogs console URL based on the context object

    Arguments:
        aws_context {Any} -- context from lambda handler

    Returns:
        str -- AWS Console URL to logs.
    z%Y-%m-%dT%H:%M:%SZ
AWS_REGIONr   zhttps://console.{domain}/cloudwatch/home?region={region}#logEventViewer:group={log_group};stream={log_stream};start={start_time};end={end_time}zcn-zamazonaws.cnzaws.amazon.comr+   )seconds   )domainregionr   r   r   end_time)r   rf   r   
startswithr   r   r   strftimer   r   r   r   )rU   r   formatstringr   r   s        r@   r   r     s     (L[[r*F	- f!'!2!25!9~?O,,..1!55??M,,x||,y/CCMM
  		  JrE   c                     g }| D ]a  }t        j                  d|j                               }|s*|j                         \  }}}t	        |      }|j                  |||d d d d d       c |S )Nz File "(.+)", line (\d+), in (.+))filenamefunctionlinenovarspre_contextcontext_linepost_context)rematchstripgroupsintappend)formatted_tbframesframer   	file_nameline_number	func_names          r@   _parse_formatted_tracebackr     sy    F <ekkmL05-I{Ik*KMM ) )) #'$($(
  MrE   c                     dd| j                  d      | j                  d      dt        | j                  dg             iddd	d
gid}|S )a9  
    Converts the error JSON from AWS Lambda into a Sentry error event.
    This is not a full fletched event, but better than nothing.

    This is an example of where AWS creates the error JSON:
    https://github.com/aws/aws-lambda-python-runtime-interface-client/blob/2.2.1/awslambdaric/bootstrap.py#L479
    errorvalues	errorTypeerrorMessager   
stackTracer"   Fr#   )r$   value
stacktracer(   )level	exception)rf   r   )
error_jsonevents     r@   r9   r9     sj     &NN;7'^^N; "<&NN<<## !-#("
E* LrE   )r?   r   r   r   )rt   r   r   r   r   )r   zOptional[Any])rT   r   rU   r   r   r   r   r   )r   z	list[str]r   zlist[dict[str, Any]])r  zdict[str, Any]r   r   )8rv   r7   r   r0   copyr   r   r   r   osr   r,   sentry_sdk.apir   sentry_sdk.constsr	   sentry_sdk.scoper
   sentry_sdk.tracingr   sentry_sdk.utilsr   r   r   r   r   r   r   sentry_sdk.integrationsr   $sentry_sdk.integrations._wsgi_commonr   typingr   r   r   r   r   sentry_sdk._typesr   r   r   r   rb   rc   rD   rx   r|   rC   r   r]   r6   r   r   r   r9   r   rE   r@   <module>r     s     	 
  2 2   )   4 0   0 @  ==8CH-.A   <k\]; ]@ FCC#(C>CCCL? ?E ?c ?% Z C >*rE   