
    \j                     d   d dl 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	 e	rd dlm
Z
 dZdZd	Zd
j                  e      Zdj                  e      ZdZdj                  e      Z G d d      Z G d d      Z G d de      Zej,                  ej.                  ej0                  ej2                  iZy)    N)Integration)set_context)logger)TYPE_CHECKING)Dictcloud_resourceg       @z169.254.169.254zhttp://{}/latest/api/tokenz3http://{}/latest/dynamic/instance-identity/documentzmetadata.google.internalz,http://{}/computeMetadata/v1/?recursive=truec                   (    e Zd ZdZdZdZdZdZdZdZ	y)	CLOUD_PROVIDERz
    Name of the cloud provider.
    see https://opentelemetry.io/docs/reference/specification/resource/semantic_conventions/cloud/
    alibaba_cloudawsazuregcp	ibm_cloudtencent_cloudN)
__name__
__module____qualname____doc__ALIBABAAWSAZUREGCPIBMTENCENT     X/root/env/lib/python3.12/site-packages/sentry_sdk/integrations/cloud_resource_context.pyr
   r
      s'    
 G
CE
C
CGr   r
   c                       e Zd ZdZdZdZy)CLOUD_PLATFORMz
    The cloud platform.
    see https://opentelemetry.io/docs/reference/specification/resource/semantic_conventions/cloud/
    aws_ec2gcp_compute_engineN)r   r   r   r   AWS_EC2GCP_COMPUTE_ENGINEr   r   r   r   r   ,   s    
 G-r   r   c                       e Zd ZdZdZdZdZ ej                  e	      Z
dZddeddfdZedefd	       Zedd
       Zedefd       Zedd       Zedefd       Zedd       Zedd       Zy)CloudResourceContextIntegrationz8
    Adds cloud resource context to the Senty scope
    cloudresourcecontext )timeoutNcloud_providerreturnc                     |t         _        y )N)r%   r)   )selfr)   s     r   __init__z(CloudResourceContextIntegration.__init__D   s    9G'6r   c                    	 | j                   j                  dt        ddi      }|j                  dk7  ry|j                  j                         | _        y# t        j                  j                  $ r t        j                  dt               Y yt        $ r)}t        j                  d	t        |             Y d }~yd }~ww xY w)
NPUTz$X-aws-ec2-metadata-token-ttl-seconds60headers   FT/AWS metadata service timed out after %s secondsz'Error checking AWS metadata service: %s)httprequestAWS_TOKEN_URLstatusdatadecode	aws_tokenurllib3
exceptionsTimeoutErrorr   debugHTTP_TIMEOUT	Exceptionstrclsres      r   _is_awsz'CloudResourceContextIntegration._is_awsG   s    	  ?F ! A xx3FFMMOCM!!.. 	LLA<  	LLBCFK	s"   3A A 7C C B;;C c                    t         j                  t        j                  d}	 | j                  j                  dt        d| j                  i      }|j                  dk7  r|S t        j                  |j                  j                  d            }	 |d   |d<   	 |d	   |d
<   	 |d   |d<   	 |d   |d<   	 |d   |d<   |S # t        $ r Y 1w xY w# t        $ r Y 7w xY w# t        $ r Y =w xY w# t        $ r Y Cw xY w# t        $ r Y |S w xY w# t        j                  j                   $ r t#        j$                  dt&               Y |S t        $ r*}t#        j$                  dt)        |             Y d }~|S d }~ww xY w)Nzcloud.providerzcloud.platformGETzX-aws-ec2-metadata-tokenr1   r3   utf-8	accountIdcloud.account.idavailabilityZonecloud.availability_zoneregioncloud.region
instanceIdhost.idinstanceTypez	host.typer4   zError fetching AWS metadata: %s)r
   r   r   r"   r5   r6   AWS_METADATA_URLr;   r8   jsonloadsr9   r:   rA   r<   r=   r>   r   r?   r@   rB   )rD   ctxrE   r9   rF   s        r   _get_aws_contextz0CloudResourceContextIntegration._get_aws_context_   s    -00,44

*	D   3S]]C ! A xx3
::affmmG45D*.{*;&'156H1I-.&*8nN#!%l!3I#'#7K  
=  
  
  
  
   
 !!.. 	LLA< 
  	DLL:CFCC
	Ds   >D ".D B? C #C ,C, 5C; ?	CD 
CD 	CD CD 	C)&D (C))D ,	C85D 7C88D ;	DD DD 7E7E7E22E7c                    	 | j                   j                  dt        ddi      }|j                  dk7  ryt	        j
                  |j                  j                  d            | _        y# t        j                  j                  $ r t        j                  d	t               Y yt        $ r)}t        j                  d
t!        |             Y d }~yd }~ww xY w)NrJ   Metadata-FlavorGoogler1   r3   FrK   T/GCP metadata service timed out after %s secondsz'Error checking GCP metadata service: %s)r5   r6   GCP_METADATA_URLr8   rV   rW   r9   r:   gcp_metadatar<   r=   r>   r   r?   r@   rA   rB   rC   s      r   _is_gcpz'CloudResourceContextIntegration._is_gcp   s    	   *H5 ! A xx3#zz!&&--*@AC!!.. 	LLA<  	LLBCFK	s"   3A* 3A* *7C#C+CCc                    t         j                  t        j                  d}	 | j                  h| j
                  j                  dt        ddi      }|j                  dk7  r|S t        j                  |j                  j                  d            | _        	 | j                  d   d	   |d
<   	 | j                  d   d   j                  d      d   |d<   	 | j                  d   d   j                  d      d   |d<   	 | j                  d   d   |d<   |S # t        $ r Y sw xY w# t        $ r Y Zw xY w# t        $ r Y Aw xY w# t        $ r Y |S w xY w# t        j                   j"                  $ r t%        j&                  dt(               Y |S t        $ r*}t%        j&                  dt+        |             Y d }~|S d }~ww xY w)NrI   rJ   r[   r\   r1   r3   rK   project	projectIdrM   instancezone/rO   rP   rQ   idrS   r]   zError fetching GCP metadata: %s)r
   r   r   r#   r_   r5   r6   r^   r8   rV   rW   r9   r:   rA   splitr<   r=   r>   r   r?   r@   rB   )rD   rX   rE   rF   s       r   _get_gcp_contextz0CloudResourceContextIntegration._get_gcp_context   s    -00,??

+	D'HH$$$.9 %  88s?J#'::affmmG.D#E *-*:*:9*Ek*R&'141A1A*1M2%*R2!-.&)&6&6z&B8&L&R&RSV&W'N#!$!1!1*!=d!CI 
=      
   
 !!.. 	LLA< 
  	DLL:CFCC
	Ds   A E $3E D .'D$ 'D3 >E 	D!E  D!!E $	D0-E /D00E 3	D?<E >D??E 	EE EE 7F>F>F99F>c                     | j                         rt        j                  S | j                         rt        j                  S yNr'   )rG   r
   r   r`   r   )rD   s    r   _get_cloud_providerz3CloudResourceContextIntegration._get_cloud_provider   s/    ;;=!%%%;;=!%%%r   c                     | j                   dk7  r| j                   nt        j                         }|t        j	                         v rt        |          S i S rl   )r)   r%   rm   context_getterskeys)rD   r)   s     r   _get_cloud_resource_contextz;CloudResourceContextIntegration._get_cloud_resource_context   sT     !!R' 0DDF 	
 _1133">244	r   c                  6   t         j                  } | dk7  xr | t        j                         v}|r@t	        j
                  dt         j                  t        t        j                                      t         j                         }|i k7  rt        t        |       y y )Nr'   zVInvalid value for cloud_provider: %s (must be in %s). Falling back to autodetection...)
r%   r)   ro   rp   r   warninglistrq   r   CONTEXT_TYPE)r)   unsupported_cloud_providercontexts      r   
setup_oncez*CloudResourceContextIntegration.setup_once   s    8GGb Q^?;O;O;Q%Q 	# &NNh/>>_))+, 2MMOb=g. r   )r'   )r*   zDict[str, str])r*   N)r   r   r   r   
identifierr)   r;   r<   PoolManagerr@   r5   r_   rB   r-   classmethodboolrG   rY   r`   rj   rm   rq   staticmethodrx   r   r   r   r%   r%   6   s     (JNI7|4DLHs HD H   . 2 2h   . 3 3j C   	 	 / /r   r%   )rV   r<   sentry_sdk.integrationsr   sentry_sdk.apir   sentry_sdk.utilsr   typingr   r   ru   r@   AWS_METADATA_HOSTformatr7   rU   GCP_METADATA_HOSTr^   r
   r   r%   r   rY   r   rj   ro   r   r   r   <module>r      s      / & #    % ,334EFHOO  / AHH 
 . .R/k R/p 7HH7HHr   