o
    ZhQ                      @   sP  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
 d dlmZmZ d dlmZ d d	lmZmZmZ d d
l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 dZ dZ!erd dlm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) e$de%de#f dZ*dd Z+G dd deZ,dd Z-dd  Z.dS )!    N)deepcopy)	timedelta)environ)continue_trace)OP)Hub_should_send_default_pii)TRANSACTION_SOURCE_COMPONENT)datetime_utcnowduration_in_millisecondsreraise)AnnotatedValuecapture_internal_exceptionsevent_from_exceptionloggerTimeoutThread)Integration)_filter_headers)TYPE_CHECKINGg      ?g     @@)datetime)Any)TypeVar)Callable)Optional)EventProcessorEventHintF.)boundc                    s    fdd}|S )Nc                    s  t j}|t}|d u r | |g|R i |S |j}td}|s3td  | |g|R i |S t	|}t
 }|  }	t 4 |	  |	t||| |	dtd d }
|jrp|tkrp|t }t||}
|
  W d    n1 szw   Y  i }t|dr|j}t|tjtddtd}tdtd	td
tdtdd|d}|j||do zZz& | |g|R i |W W |
r|
  |  W  d    W  d    S  ty   t  }t!||j"dddd\}}|j#||d t$|  Y nw W |
r|
  |  n|
r|
  |  w W d    n1 s*w   Y  W d    d S W d    d S 1 sCw   Y  d S )NZFUNCTION_TIMEOUT_SECzOThe configured timeout could not be fetched from Cloud Functions configuration.Z
gcp_regionFUNCTION_REGIONheadersFUNCTION_NAME )opnamesourceENTRY_POINTFUNCTION_IDENTITYGCP_PROJECT)function_namefunction_entry_pointfunction_identityfunction_regionfunction_project)Zgcp_env	gcp_event)Zcustom_sampling_contextgcpF)typeZhandled)Zclient_optionsZ	mechanism)hint)%r   currentZget_integrationGcpIntegrationclientr   getr   debugintr
   Z
push_scoper   Zclear_breadcrumbsZadd_event_processor_make_request_event_processorZset_tagtimeout_warningTIMEOUT_WARNING_BUFFERr   starthasattrr    r   r   ZFUNCTION_GCPr	   Zstart_transactionstopflush	Exceptionsysexc_infor   optionsZcapture_eventr   )Zfunctionhandlerr.   argskwargsZhubZintegrationr4   Zconfigured_timeinitial_timescopeZtimeout_threadZwaiting_timer    ZtransactionZsampling_contextrA   Zsentry_eventr1   func R/var/www/html/lang_env/lib/python3.10/site-packages/sentry_sdk/integrations/gcp.pysentry_func)   s   





.

 )$z_wrap_func.<locals>.sentry_funcrI   )rH   rK   rI   rG   rJ   
_wrap_func'   s   SrL   c                   @   s&   e Zd ZdZdddZedd ZdS )	r3   r/   Fc                 C   s
   || _ d S )N)r9   )selfr9   rI   rI   rJ   __init__   s   
zGcpIntegration.__init__c                  C   s:   dd l } t| dstd d S | j}t|jj|j_d S )Nr   	worker_v1zFGcpIntegration currently supports only Python 3.7 runtime environment.)__main__r<   r   warningrO   rL   ZFunctionHandlerZinvoke_user_function)Zgcp_functionsZworker1rI   rI   rJ   
setup_once   s   
zGcpIntegration.setup_onceN)F)__name__
__module____qualname__
identifierrN   staticmethodrR   rI   rI   rI   rJ   r3      s
    
r3   c                    s    fdd}|S )Nc                    s  t  }| }t|}| di }tdtdtdtdtd| d|d< d	t|i|d
< | di }dtd|d	< tdrNj|d< tdr[j	
d|d< tdrgtj|d< t rutdrtj|d< ntdrt |d< t|| d< | S )Nextrar!   r&   r'   r   r(   )r)   r*   r+   r,   r-   execution_duration_in_millisZconfigured_timeout_in_secondszgoogle cloud functionsurlzgoogle cloud logsrequestz	gcp:///{}methodquery_stringzutf-8r    data)r
   r   
setdefaultr   r5   _get_google_cloud_logs_urlformatr<   r\   r]   decoder   r    r   r^   r   Zremoved_because_raw_datar   )eventr1   
final_timeZ	time_diffrY   rX   r[   configured_timeoutr.   rE   rI   rJ   event_processor   s<   







z6_make_request_event_processor.<locals>.event_processorrI   )r.   rf   rE   rg   rI   re   rJ   r8      s   1r8   c                 C   sH   | t dd }d}djtdtdtd| |||d}|S )	z
    Generates a Google Cloud Logs console URL based on the environment variables
    Arguments:
        final_time {datetime} -- Final time
    Returns:
        str -- Google Cloud Logs Console URL to logs.
       )hoursz%Y-%m-%dT%H:%M:%SZaY  https://console.cloud.google.com/logs/viewer?project={project}&resource=cloud_function%2Ffunction_name%2F{function_name}%2Fregion%2F{region}&minLogLevel=0&expandAll=false&timestamp={timestamp_end}&customFacets=&limitCustomFacetWidth=true&dateRangeStart={timestamp_start}&dateRangeEnd={timestamp_end}&interval=PT1H&scrollTimestamp={timestamp_end}r(   r!   r   )projectr)   regionZtimestamp_endZtimestamp_start)r   ra   r   r5   strftime)rd   Zhour_agoformatstringrZ   rI   rI   rJ   r`      s   	r`   )/r@   copyr   r   r   osr   Zsentry_sdk.apir   Zsentry_sdk.constsr   Zsentry_sdk.hubr   r   Zsentry_sdk.tracingr	   Zsentry_sdk._compatr
   r   r   Zsentry_sdk.utilsr   r   r   r   r   Zsentry_sdk.integrationsr   Z$sentry_sdk.integrations._wsgi_commonr   Zsentry_sdk._typesr   r:   ZMILLIS_TO_SECONDStypingr   r   r   r   r   r   r   r   rL   r3   r8   r`   rI   rI   rI   rJ   <module>   s6    X7