o
    iB                     @   sZ  d dl Z d dlmZ d dlm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 ddlmZ ddlmZ ddlmZ ddlmZ eeZG dd de Z!G dd de!Z"G dd de!Z#G dd de!Z$G dd de!Z%G dd  d e!Z&G d!d" d"ej'Z(dS )#    N)ClassVar)Optional)atexit)EXPERIMENTAL_FEATURES)Lock)	DogStatsd   )periodic)get_dogstatsd_client)
get_logger   )DEFAULT_RUNTIME_METRICS) DEFAULT_RUNTIME_METRICS_INTERVAL)GCRuntimeMetricCollector)PSUtilRuntimeMetricCollector)PlatformTagCollector)PlatformTagCollectorV2)ProcessTagCollector)TracerTagCollectorc                   @   s&   e Zd ZdddZdd Zdd ZdS )	RuntimeCollectorsIterableNc                 C   s"   |p| j | _dd | jD | _d S )Nc                 S   s   g | ]}| qS  r   ).0cr   r   \/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/internal/runtime/runtime_metrics.py
<listcomp>   s    z6RuntimeCollectorsIterable.__init__.<locals>.<listcomp>)ENABLED_enabled
COLLECTORS_collectors)selfenabledr   r   r   __init__   s   z"RuntimeCollectorsIterable.__init__c                    s     fdd j D }tj|S )Nc                 3   s    | ]	}|  jV  qd S N)collectr   )r   	collectorr   r   r   	<genexpr>"   s    z5RuntimeCollectorsIterable.__iter__.<locals>.<genexpr>)r   	itertoolschainfrom_iterable)r   	collectedr   r%   r   __iter__!   s   z"RuntimeCollectorsIterable.__iter__c                 C   s   d | jj| jS )Nz{}(enabled={}))format	__class____name__r   r%   r   r   r   __repr__%   s   z"RuntimeCollectorsIterable.__repr__r"   )r.   
__module____qualname__r!   r+   r/   r   r   r   r   r      s    
r   c                   @      e Zd ZdZegZdS )PlatformTagsN)r.   r0   r1   r   r   r   r   r   r   r   r3   ,       
r3   c                   @   r2   )PlatformTagsV2N)r.   r0   r1   r   r   r   r   r   r   r   r5   2   r4   r5   c                   @   r2   )
TracerTagsN)r.   r0   r1   r   r   r   r   r   r   r   r6   8   r4   r6   c                   @   r2   )ProcessTagsN)r.   r0   r1   r   r   r   r   r   r   r   r7   >   r4   r7   c                   @   s   e Zd ZeZeegZdS )RuntimeMetricsN)r.   r0   r1   r   r   r   r   r   r   r   r   r   r8   D   s
    r8   c                       s   e Zd ZdZdZdZe Zeddfd fddZ	e
dddZe
		dd	eejj d
ee ddfddZdddZdedee fddZeZeZ  ZS )RuntimeWorkerzOWorker thread for collecting and writing runtime metrics to a DogStatsd client.FNreturnc                    s   t  j|d || _t| jptjjjjj| _	|ptj
| _
t | _tjtjjv r.| j	j| _n| j	j| _tjjr?| t | _n| t | _tt | _d S )N)interval)superr!   dogstatsd_urlr
   ddtraceinternalsettings_agentconfig_dogstatsd_clienttracerr8   _runtime_metricsr   RUNTIME_METRICS_experimental_features_enabledgaugesend_metricdistribution#_runtime_metrics_runtime_id_enabled_format_tagsr5   _platform_tagsr3   listr7   _process_tags)r   r;   rD   r=   r-   r   r   r!   S   s   
zRuntimeWorker.__init__c                 C   sj   | j ( | jd u r	 W d    d S | j  | jd d | _d| _W d    d S 1 s.w   Y  d S )Nr   F)_lock	_instancestopjoinr    )clsr   r   r   disablei   s   

	"zRuntimeWorker.disablerD   r=   c                 C   st   | j - | jd ur	 W d    d S | t||}|  t| j || _d| _W d    d S 1 s3w   Y  d S )NT)rQ   rR   r   startr   registerrV   r    )rU   rD   r=   runtime_workerr   r   r   enable|   s   
"zRuntimeWorker.enablec                 C   s   |  t | j | j }td| || j_| j | jD ]\}}td|| | 	|| qW d    d S 1 s:w   Y  d S )Nz3Sending runtime metrics with the following tags: %sz$Sending ddtrace runtime metric %s:%s)
rL   r6   rM   rO   logdebugrC   constant_tagsrE   rI   )r   runtime_tagskeyvaluer   r   r   flush   s   "zRuntimeWorker.flushtagsc                 C   s   dd |D S )Nc                 S   s   g | ]
\}}d  ||qS )z{}:{})r,   )r   kvr   r   r   r      s    z.RuntimeWorker._format_tags.<locals>.<listcomp>r   )r   rb   r   r   r   rL      s   zRuntimeWorker._format_tags)r:   N)NN)r.   r0   r1   __doc__r    rR   r   rQ   r   r!   classmethodrV   r   r>   traceTracerstrrZ   ra   r   rN   rL   r	   on_shutdown__classcell__r   r   rP   r   r9   L   s,    

r9   ))r'   typingr   r   r>   ddtrace.internalr   ddtrace.internal.constantsr   ddtrace.internal.threadsr   ddtrace.vendor.dogstatsdr    r	   	dogstatsdr
   loggerr   	constantsr   r   metric_collectorsr   r   tag_collectorsr   r   r   r   r.   r[   objectr   r3   r5   r6   r7   r8   PeriodicServicer9   r   r   r   r   <module>   s6    