
    9Yft                     H    d dl Z d dlZd dlZ G d de      Z G d de      Zy)    Nc                       e Zd ZdZy)UnresolvableContainerIDz1
    Unable to get container ID from cgroup.
    N)__name__
__module____qualname____doc__     [/var/www/highfloat_scraper/venv/lib/python3.12/site-packages/datadog/dogstatsd/container.pyr   r      s    r
   r   c                       e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
Z ej                  d      Z ej                  dj!                  e
ee            Zd Zd Zd Zd Zy)CgroupaM  
    A reader class that retrieves either:
    - The current container ID parsed from the cgroup file
    - The cgroup controller inode.

    Returns:
    object: Cgroup

    Raises:
        `NotImplementedError`: No proc filesystem is found (non-Linux systems)
        `UnresolvableContainerID`: Unable to read the container ID
    z/proc/self/cgroupz/sys/fs/cgroupz/proc/self/ns/cgroupmemory l   _ zH[0-9a-f]{8}[-_][0-9a-f]{4}[-_][0-9a-f]{4}[-_][0-9a-f]{4}[-_][0-9a-f]{12}z[0-9a-f]{64}z[0-9a-f]{32}-\d+z^(\d+):([^:]*):(.+)$z!(?:.+)?({0}|{1}|{2})(?:\.scope)?$c                 z    | j                         r| j                         | _        y | j                         | _        y )N)_is_host_cgroup_namespace_read_cgroup_pathcontainer_id_get_cgroup_from_inodeselfs    r   __init__zCgroup.__init__,   s3    ))+ $ 6 6 8D 779r
   c                     	 t         j                  j                  | j                        r6t        j                  | j                        j
                  | j                  k(  S dS # t        $ r Y yw xY w)z;Check if the current process is in a host cgroup namespace.F)ospathexistsCGROUP_NS_PATHstatst_inoHOST_CGROUP_NAMESPACE_INODE	Exceptionr   s    r   r   z Cgroup._is_host_cgroup_namespace2   sg    	 77>>$"5"56 ++,33t7W7WW 
  		s   AA# !A# #	A/.A/c                    	 t        | j                  d      5 }|D ]  }|j                         }| j                  j	                  |      }|s1|j                         \  }}}|j                  d      D cg c]  }| }}t        |      so| j                  j	                  |j                               }|s|j                  d      c cddd       S  	 ddd       yc c}w # 1 sw Y   yxY w# t        $ rK}|j                  t        j                  k7  r$t        dj                  | j                              Y d}~yd}~wt         $ r}t#        dt%        |      z         d}~ww xY w)z+Read the container ID from the cgroup file.rmode/   NzUnable to open {}.z!Unable to read the container ID: )openCGROUP_PATHstripLINE_REmatchgroupssplitlenCONTAINER_REpopgroupIOErrorerrnoENOENTNotImplementedErrorformatr    r   str)	r   fpliner+   _r   ppartses	            r   r   zCgroup._read_cgroup_path=   sE   	Xd&&S1 2R 
2D::<D LL..t4E  !&JAq$(,

381Q8E85z $ 1 1 7 7		 D #(;;q>12 2
22"  92"   	Yww%,,&)*>*E*EdFVFV*WXX '   	X)*MPSTUPV*VWW	Xsl   C/ AC#4	C=C#+C#7C#		C/ C#C/ C##C,(C/ ,C/ /	E&8AD>>E&
E!!E&c                 N   i }t        | j                  d      5 }|D ]`  }|j                         j                  d      }t	        |      dk7  r1|d   | j
                  k(  s|d   | j                  k(  sV|d   ||d   <   b 	 ddd       | j
                  | j                  fD ]v  }||v st        j                  j                  | j                  |||   dk7  r||   nd	      }t        j                  |      j                  }|dkD  sed
j                  |      c S  y# 1 sw Y   xY w)z,Read the container ID from the cgroup inode.r"   r#   :   r&      Nr%   r   zin-{0})r'   r(   r)   r-   r.   CGROUPV1_BASE_CONTROLLERCGROUPV2_BASE_CONTROLLERr   r   joinCGROUP_MOUNT_PATHr   r   r6   )r   cgroup_controllers_pathsr8   r9   tokens
controller
inode_pathinodes           r   r   zCgroup._get_cgroup_from_inodeS   s:    $& $""- 	D D++C0v;!#!9 = ==dNkNkAk:@),VAY7D	D ))))
 	2J 55WW\\**<TU_<`dg<g,Z8mo

 
+2219#??511	2 1	D 	Ds   AD3DD$N)r   r   r   r   r(   rE   r   rB   rC   r   UUID_SOURCECONTAINER_SOURCETASK_SOURCErecompiler*   r6   r/   r   r   r   r   r	   r
   r   r   r      s     &K(+N'!",]K&%Kbjj01G2::BII+WgituvL:	,r
   r   )r3   r   rN   r    r   objectr   r	   r
   r   <module>rQ      s*     	 	i ^V ^r
   