o
    Zhc                     @   s   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	eZd
eZdZdeZG dd dZG dd dZG dd deZejejejejiZdS )    N)Integration)set_context)logger)TYPE_CHECKING)DictZcloud_resourcez169.254.169.254zhttp://{}/latest/api/tokenz3http://{}/latest/dynamic/instance-identity/documentzmetadata.google.internalz,http://{}/computeMetadata/v1/?recursive=truec                   @   s(   e Zd ZdZdZdZdZdZdZdZ	dS )	CLOUD_PROVIDERz
    Name of the cloud provider.
    see https://opentelemetry.io/docs/reference/specification/resource/semantic_conventions/cloud/
    Zalibaba_cloudZawsZazureZgcpZ	ibm_cloudZtencent_cloudN)
__name__
__module____qualname____doc__ZALIBABAAWSZAZUREGCPZIBMZTENCENT r   r   e/var/www/html/lang_env/lib/python3.10/site-packages/sentry_sdk/integrations/cloud_resource_context.pyr      s    r   c                   @   s   e Zd ZdZdZdZdS )CLOUD_PLATFORMz
    The cloud platform.
    see https://opentelemetry.io/docs/reference/specification/resource/semantic_conventions/cloud/
    Zaws_ec2Zgcp_compute_engineN)r   r	   r
   r   AWS_EC2GCP_COMPUTE_ENGINEr   r   r   r   r   *   s    r   c                   @   s   e Zd ZdZdZdZdZe Z	dZ
dddZedd Zed	d
 Zedd Zedd Zedd Zedd Zedd ZdS )CloudResourceContextIntegrationz8
    Adds cloud resource context to the Senty scope
    Zcloudresourcecontext Nc                 C   s
   |t _d S )N)r   cloud_provider)selfr   r   r   r   __init__B   s   
z(CloudResourceContextIntegration.__init__c                 C   sN   z| j jdtddid}|jdkrW dS |j | _W dS  ty&   Y dS w )NPUTz$X-aws-ec2-metadata-token-ttl-secondsZ60headers   FT)httprequestAWS_TOKEN_URLstatusdatadecode	aws_token	Exceptionclsrr   r   r   _is_awsF   s   
z'CloudResourceContextIntegration._is_awsc                 C   s  t jtjd}z{| jjdtd| jid}|jdkr|W S t	
|jd}z|d |d< W n	 ty6   Y nw z|d	 |d
< W n	 tyH   Y nw z|d |d< W n	 tyZ   Y nw z|d |d< W n	 tyl   Y nw z
|d |d< W W |S  ty   Y W |S w  ty   Y |S w )Nzcloud.providerzcloud.platformGETzX-aws-ec2-metadata-tokenr   r   utf-8Z	accountIdcloud.account.idZavailabilityZonecloud.availability_zoneregioncloud.regionZ
instanceIdhost.idZinstanceTypez	host.type)r   r   r   r   r   r   AWS_METADATA_URLr"   r   jsonloadsr    r!   r#   )r%   ctxr&   r    r   r   r   _get_aws_contextY   sV   
z0CloudResourceContextIntegration._get_aws_contextc                 C   sV   z | j jdtddid}|jdkrW dS t|jd| _W dS  t	y*   Y dS w )	Nr)   Metadata-FlavorGoogler   r   Fr*   T)
r   r   GCP_METADATA_URLr   r1   r2   r    r!   gcp_metadatar#   r$   r   r   r   _is_gcp   s   
z'CloudResourceContextIntegration._is_gcpc                 C   s,  t jtjd}z| jd u r*| jjdtddid}|jdkr |W S t	
|jd| _z| jd d	 |d
< W n	 ty>   Y nw z| jd d dd |d< W n	 tyX   Y nw z| jd d dd |d< W n	 tyr   Y nw z| jd d |d< W W |S  ty   Y W |S w  ty   Y |S w )Nr(   r)   r5   r6   r   r   r*   projectZ	projectIdr+   instancezone/r,   r-   r.   idr/   )r   r   r   r   r8   r   r   r7   r   r1   r2   r    r!   r#   split)r%   r3   r&   r   r   r   _get_gcp_context   sZ   

z0CloudResourceContextIntegration._get_gcp_contextc                 C   s    |   rtjS |  rtjS dS Nr   )r'   r   r   r9   r   )r%   r   r   r   _get_cloud_provider   s
   z3CloudResourceContextIntegration._get_cloud_providerc                 C   s2   | j dkr| j nt }|t v rt|  S i S rB   )r   r   rC   context_getterskeys)r%   r   r   r   r   _get_cloud_resource_context   s   

z;CloudResourceContextIntegration._get_cloud_resource_contextc                  C   sX   t j} | dko| t v}|rtdt jtt  t  }|i kr*tt	| d S d S )Nr   zVInvalid value for cloud_provider: %s (must be in %s). Falling back to autodetection...)
r   r   rD   rE   r   warninglistrF   r   CONTEXT_TYPE)r   Zunsupported_cloud_providercontextr   r   r   
setup_once   s   
z*CloudResourceContextIntegration.setup_once)r   )r   r	   r
   r   
identifierr   r"   urllib3PoolManagerr   r8   r   classmethodr'   r4   r9   rA   rC   rF   staticmethodrK   r   r   r   r   r   4   s,    


1

2


r   )r1   rM   Zsentry_sdk.integrationsr   Zsentry_sdk.apir   Zsentry_sdk.utilsr   Zsentry_sdk._typesr   typingr   rI   ZAWS_METADATA_HOSTformatr   r0   ZGCP_METADATA_HOSTr7   r   r   r   r   r4   r   rA   rD   r   r   r   r   <module>   s2    

 M