o
    i|                     @   sv  d Z 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 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 ddlmZ eeZdgZ				d*dejeee f dejdejejejgejf  deje dejf
ddZeddeddZ e rddl!m"Z" nddl#m$Z" e" Z%deddfddZ&d d! Z'd"d# Z(d$d% Z)d&d' Z*d(d) Z+e&e dS )+z
Instrumentation Telemetry API.
This is normally started automatically when ``ddtrace`` is imported. It can be disabled by setting
``DD_INSTRUMENTATION_TELEMETRY_ENABLED`` variable to ``False``.
    N)
get_logger)config)FLEET_CONFIG)FLEET_CONFIG_IDS)LOCAL_CONFIG)DDConfig)ENV_VAR_MAPPINGS)SUPPORTED_OTEL_ENV_VARS)parse_otel_env)TELEMETRY_NAMESPACE)asbooltelemetry_writerTenvsdefaultmodifierotel_envreturnc                 C   s  t | tr| g} |}| d }|rt||d | D ]}|tv r6t| }|r)||}|r2t||d |} nq|durb|tjv rbt|\}	}
|
dur^|
}|rR||}|r[t||	d |}nt| | D ]-}|tjv rtj| }|rv||}|rt||d |dur|tjv rt	|| |} nqd| D ]2}|t
v rt
| }t|}|r||}|rt||d| |dur|tjv rt	|| |} |S q|S )a  Retrieve a configuration value in order of precedence:
    1. Fleet stable config (highest)
    2. Datadog env vars
    3. OpenTelemetry env vars
    4. Local stable config
    5. Default value (lowest)

    Reports telemetry for every detected configuration source.
    r   r   local_stable_configNotel_env_varenv_varfleet_stable_config)
isinstancestrr   add_configurationr   osenvironr
   _invalid_otel_config_hiding_otel_configr   r   get)r   r   r   r   report_telemetryeffective_valtelemetry_nameenvvalraw_val
parsed_val	config_id r'   W/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/internal/telemetry/__init__.py
get_config   sj   






r)   $DD_INSTRUMENTATION_TELEMETRY_ENABLEDF)r      )TelemetryWriter)NoOpTelemetryWriterr   c                 C   sb   t | jddD ]&\}}|jrq|j}| }|dD ]}t||}qt||| || j	 qd S )NT)	recursive.)
typeitemsprivate	full_namesplitgetattrr   r   value_sourcer&   )r   nameeenv_nameenv_valpr'   r'   r(   report_configurationt   s   r<   c                 C   s8   t d| tj| d ttjddd| 	 ff d S )NzQSetting %s to %s is not supported by ddtrace, this configuration will be ignored. zotel.env.invalidr+   config_opentelemetry)
logwarningr   r   r   r   add_count_metricr   TRACERSlowerr   r'   r'   r(   r      s   r   c                 C   s,   t d|  ttjddd|  ff d S )Nz;OpenTelemetry configuration %s is not supported by Datadog.zotel.env.unsupportedr+   r>   )r?   r@   r   rA   r   rB   rC   rD   r'   r'   r(   _unsupported_otel_config   s   rE   c                  C   s   dd t j D } |  D ]8\}}|tvr$|dr$|tvr$t| q|dkrAt j|d }|dkr9t	| t
||d q|dkrF	 qd S )Nc                 S      i | ]	\}}|  |qS r'   upper.0keyvaluer'   r'   r(   
<dictcomp>       z&validate_otel_envs.<locals>.<dictcomp>OTEL_OTEL_LOGS_EXPORTERnoner   OTEL_METRICS_EXPORTER)r   r   r1   r   
startswithr	   rE   r   rC   r   r   r   )	user_envsr   _
otel_valuer'   r'   r(   validate_otel_envs   s    
rW   c                  C   sb   d} dd t j D }d|v r/t jdd }|dkr d} n|dkr(td td|d | S )	NTc                 S   rF   r'   rG   rI   r'   r'   r(   rM      rN   zEvalidate_and_report_otel_metrics_exporter_enabled.<locals>.<dictcomp>rR   otlprQ   Fr   )r   r   r1   r   rC   r   r   r   )metrics_exporter_enabledrT   rV   r'   r'   r(   1validate_and_report_otel_metrics_exporter_enabled   s   rZ   c              	   C   s@   t d|| tj|   ttjddd|  fd| ff d S )Nz[Datadog configuration %s is already set. OpenTelemetry configuration will be ignored: %s=%szotel.env.hidingr+   r>   config_datadog)	r?   debugr   r   r   rA   r   rB   rC   )r   dd_envr'   r'   r(   r      s   r   )NNNT),__doc__r   typingtddtrace.internal.loggerr    ddtrace.internal.settings._agentr   agent_configddtrace.internal.settings._corer   r   r   r   (ddtrace.internal.settings._otel_remapperr   r	   r
   $ddtrace.internal.telemetry.constantsr   ddtrace.internal.utils.formatsr   __name__r?   __all__Unionr   listAnyOptionalCallabler)   telemetry_enabledwriterr,   noop_writerr-   r   r<   r   rE   rW   rZ   r   r'   r'   r'   r(   <module>   sV    
O
