o
    iic                     @   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)Dict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/
    alibaba_cloudawsazuregcp	ibm_cloudtencent_cloudN)
__name__
__module____qualname____doc__ALIBABAAWSAZUREGCPIBMTENCENT r   r   m/var/www/html/pca-backend/venv/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/
    aws_ec2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
    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-seconds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-8	accountIdcloud.account.idavailabilityZonecloud.availability_zoneregioncloud.region
instanceIdhost.idinstanceTypez	host.type)r   r   r   r   r+   r,   AWS_METADATA_URLr1   r.   jsonloadsr/   r0   r2   )r4   ctxr5   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 )	Nr8   Metadata-FlavorGoogler(   r*   Fr9   T)
r+   r,   GCP_METADATA_URLr.   rD   rE   r/   r0   gcp_metadatar2   r3   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 )Nr7   r8   rH   rI   r(   r*   r9   project	projectIdr;   instancezone/r=   r>   r?   idrA   )r   r   r   r   rK   r+   r,   rJ   r.   rD   rE   r/   r0   r2   split)r4   rF   r5   r   r   r   _get_gcp_context   sZ   

z0CloudResourceContextIntegration._get_gcp_contextc                 C   s    |   rtjS |  rtjS dS Nr"   )r6   r   r   rL   r   )r4   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 rV   )r#   r    rW   context_getterskeys)r4   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#   rX   rY   r   warninglistrZ   r   CONTEXT_TYPE)r#   unsupported_cloud_providercontextr   r   r   
setup_once   s   
z*CloudResourceContextIntegration.setup_once)r"   )r   r   r   r   
identifierr#   r1   urllib3PoolManagerr+   rK   r%   classmethodr6   rG   rL   rU   rW   rZ   staticmethodr`   r   r   r   r   r    4   s,    


1

2


r    )rD   rb   sentry_sdk.integrationsr   sentry_sdk.apir   sentry_sdk.utilsr   sentry_sdk._typesr   typingr   r]   AWS_METADATA_HOSTformatr-   rC   GCP_METADATA_HOSTrJ   r   r   r    r   rG   r   rU   rX   r   r   r   r   <module>   s2    

 M