
    dT                     N    d dl Z d dlZd dlmZ d dlmZ d dlmZ  G d de      Z	y)    N)logger)	CpuCgroup)ustrc                       e Zd ZdZi ZdZ ej                         Ze	d        Z
e	d        Ze	d        Ze	d        Ze	d        Ze	d        Ze	d	        Zy
)CGroupsTelemetryz
    Fc                     | t         _        y Nr   _track_throttled_time)values    I/usr/lib/python3/dist-packages/azurelinuxagent/common/cgroupstelemetry.pyset_track_throttled_timez)CGroupsTelemetry.set_track_throttled_time   s    16.    c                  "    t         j                  S r	   r
    r   r   get_track_throttled_timez)CGroupsTelemetry.get_track_throttled_time#   s    555r   c                 2   t        | t              r| j                          t        j                  5  t        j                  | j                        s3| t        j                  | j                  <   t        j                  d|        ddd       y# 1 sw Y   yxY w)zJ
        Adds the given item to the dictionary of tracked cgroups
        zStarted tracking cgroup {0}N)

isinstancer   initialize_cpu_usager   _rlock
is_trackedpath_trackedr   infocgroups    r   track_cgroupzCGroupsTelemetry.track_cgroup'   sr    
 fi('')$$ 	C#..v{{;9? ))&++696B	C 	C 	Cs   ABBc                     t         j                  5  | t         j                  v r
	 ddd       y	 ddd       y# 1 sw Y   yxY w)zh
        Returns true if the given item is in the list of tracked items
        O(1) operation.
        NTF)r   r   r   )r   s    r   r   zCGroupsTelemetry.is_tracked5   sF     $$ 	'000	 	0	 		 s	   8Ac                    t         j                  5  | j                  t         j                  v r?t         j                  j	                  | j                         t        j                  d|        ddd       y# 1 sw Y   yxY w)z>
        Stop tracking the cgroups for the given path
        zStopped tracking cgroup {0}N)r   r   r   r   popr   r   r   s    r   stop_trackingzCGroupsTelemetry.stop_trackingA   s`    
 $$ 	C{{.777 ))--fkk:96B	C 	C 	Cs   AA66A?c                     g } g }t         j                  5  t         j                  j                         D ]T  }	 | j	                  |j                  t         j                               |j'                         rD|j)                  |       V |D ]  }t         j+                  |        	 d d d        | S # t        $ r}t        |t        t        f      r|j                  t        j                  k7  rGt        j                  t        j                  dj!                  |j"                  t%        |                   Y d }~d }~ww xY w# 1 sw Y   | S xY w)N)track_throttled_timez@[PERIODIC] Could not collect metrics for cgroup {0}. Error : {1})r   r   r   valuesextendget_tracked_metricsr   	Exceptionr   IOErrorOSErrorerrnoENOENTr   periodic_warn
EVERY_HOURformatnamer   	is_activeappendr!   )metricsinactive_cgroupsr   einactive_cgroups        r   poll_all_trackedz!CGroupsTelemetry.poll_all_trackedK   s'   $$ 	@*33::< 4	qNN6#=#=ScSySy#=#z{ '')$++F34 $4 @ ..?@	@"  ! q
 &a'7);<5<<@W,,V->-> ASSYSYZ`ZeZegklmgnSoqq		@" s;   "E/B2'E8/E2	D?;A:D:5E:D??EEc                      t         j                  5  t         j                  j                          dt         _        d d d        y # 1 sw Y   y xY w)NF)r   r   r   clearr   r   r   r   resetzCGroupsTelemetry.resetb   s;    $$ 	;%%++-5:2	; 	; 	;s   *AAN)__name__
__module____qualname____doc__r   r   	threadingRLockr   staticmethodr   r   r   r   r!   r6   r9   r   r   r   r   r      s    H!Y__F7 7 6 6 C C 	 	 C C  , ; ;r   r   )
r*   r>   azurelinuxagent.commonr   azurelinuxagent.common.cgroupr   azurelinuxagent.common.futurer   objectr   r   r   r   <module>rE      s$       ) 3 .N;v N;r   