Ë
    Fêñi/  ã            	       óÐ   — d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZm	Z	 d dl
mZmZ d dlmZmZmZmZmZmZmZmZ d dlmZ d dlmZ dd	ed
ededdfd„Z G d„ d«      Z e«       Zy)é    N)ÚPath)ÚThread)ÚRequestÚurlopen)ÚSETTINGSÚ__version__)ÚARGVÚENVIRONMENTÚGITÚIS_PIP_PACKAGEÚONLINEÚPYTHON_VERSIONÚRANKÚTESTS_RUNNING)ÚGITHUB_ASSETS_NAMES)Úget_cpu_infoÚurlÚdataÚtimeoutÚreturnc                 óÄ   — 	 t        j                  |d¬«      j                  «       }t        | |ddi¬«      }t	        ||¬«      j                  «        y# t        $ r Y yw xY w)z"Send a one-shot JSON POST request.)ú,ú:)Ú
separatorszContent-Typezapplication/json)r   Úheaders)r   N)ÚjsonÚdumpsÚencoder   r   ÚcloseÚ	Exception)r   r   r   ÚbodyÚreqs        úZ/var/www/pod-logistic/pod-ai/venv/lib/python3.12/site-packages/ultralytics/utils/events.pyÚ_postr$      sY   € ðÜ�z‰z˜$¨:Ô6×=Ñ=Ó?ˆÜ�c ¨~Ð?QÐ.RÔSˆÜ�˜WÔ%×+Ñ+Õ-øÜò Ùðús   ‚AA Á	AÁAc                   ó&   — e Zd ZdZdZdd„Zddd„Zy)ÚEventsa  Collect and send anonymous usage analytics with rate-limiting.

    Event collection and transmission are enabled when sync is enabled in settings, the current process is rank -1 or 0,
    tests are not running, the environment is online, and the installation source is either pip or the official
    Ultralytics GitHub repository.

    Attributes:
        url (str): Measurement Protocol endpoint for receiving anonymous events.
        events (list[dict]): In-memory queue of event payloads awaiting transmission.
        rate_limit (float): Minimum time in seconds between POST requests.
        t (float): Timestamp of the last transmission in seconds since the epoch.
        metadata (dict): Static metadata describing runtime, installation source, and environment.
        enabled (bool): Flag indicating whether analytics collection is active.

    Methods:
        __init__: Initialize the event queue, rate limiter, and runtime metadata.
        __call__: Queue an event and trigger a non-blocking send when the rate limit elapses.
    zihttps://www.google-analytics.com/mp/collect?measurement_id=G-X8NCJYTQXM&api_secret=QLQrATrNSwGRFRLE-cbHJwNc           
      óÒ  — g | _         d| _        d| _        t        t        d   «      j
                  dk(  t        j                  rdn	t        rdndt        j                  dd	«      d   t        «       t        t        t        t        j                  «       d
z  «      ddœ| _        t"        d   xr6 t$        dv xr, t&         xr# t(        xr t        xs t        j*                  dk(  | _        y)zRInitialize the Events instance with queue, rate limiter, and environment metadata.g      >@g        r   ÚyoloÚgitÚpipÚotherú.é   g  4&õkCiè  )ÚcliÚinstallÚpythonÚCPUÚversionÚenvÚ
session_idÚengagement_time_msecÚsync>   r   éÿÿÿÿz.https://github.com/ultralytics/ultralytics.gitN)ÚeventsÚ
rate_limitÚtr   r	   Únamer   Úis_repor   r   Úrsplitr   r   r
   ÚroundÚrandomÚmetadatar   r   r   r   ÚoriginÚenabled)Úselfs    r#   Ú__init__zEvents.__init__0   sÊ   € àˆŒØˆŒØˆŒäœ˜Q™“=×%Ñ%¨Ñ/Ü #§¢‘u½.±ÈgÜ$×+Ñ+¨C°Ó3°AÑ6Ü“>ä"ÜÜ¤§¡£°$Ñ 6Ó7Ø$(ñ

ˆŒô �VÑò cÜ˜�òcä!Ð!òcô òcô  Òa¤3§:¡:Ð1aÑ#að 	�ó    c                 óÎ  — | j                   syt        | j                  «      dk  r¶i | j                  ¥|j                  |j
                  t        v r|j
                  ndt        |«      dœ¥}|j                  dk(  r|j                  |d<   |j                  dk(  r|�t        |«      j                  nd|d<   | j                  j                  |j                  |d	œ«       t        j                  «       }|| j                  z
  | j                  k  ryt!        | j                  «      }t#        t$        | j&                  t(        d
   |dœfd¬«      j+                  «        g | _        || _        y)a�  Queue an event and flush the queue asynchronously when the rate limit elapses.

        Args:
            cfg (IterableSimpleNamespace): The configuration object containing mode and task information.
            device (torch.device | str, optional): The device type (e.g., 'cpu', 'cuda').
            backend (object | None, optional): The inference backend instance used during prediction.
        Né   Úcustom)ÚtaskÚmodelÚdeviceÚexportÚformatÚpredictÚbackend)r;   ÚparamsÚuuid)Ú	client_idr8   T)ÚtargetÚargsÚdaemon)rB   Úlenr8   r@   rI   rJ   r   ÚstrÚmoderM   ÚtypeÚ__name__ÚappendÚtimer:   r9   Úlistr   r$   r   r   Ústart)rC   ÚcfgrK   rO   rP   r:   Úpayload_eventss          r#   Ú__call__zEvents.__call__H   s,  € ð �|Š|àô ˆt�{‰{Ó˜bÒ ðØ—-‘-ðàŸ™Ø&)§i¡iÔ3FÑ&F˜ŸšÈHÜ˜f›+ò	ˆFð �x‰x˜8Ò#Ø#&§:¡:��xÑ Ø�x‰x˜9Ò$Ø>EÐ>Q¤D¨£M×$:Ò$:ÐW[��yÑ!Ø�K‰K×Ñ¨¯©¸FÑCÔDô �I‰I‹KˆØ�—‘‰J˜$Ÿ/™/Ò)Øô ˜dŸk™kÓ*ˆÜÜØ—(‘(¬(°6Ñ*:ÀnÑUÐVØô	
÷ ‰%Œ'ð ˆŒØˆ�rE   )r   N)NN)rZ   Ú
__module__Ú__qualname__Ú__doc__r   rD   ra   © rE   r#   r&   r&      s   „ ñð& v€Có
õ0)rE   r&   )g      @) r   r?   r\   Úpathlibr   Ú	threadingr   Úurllib.requestr   r   Úultralyticsr   r   Úultralytics.utilsr	   r
   r   r   r   r   r   r   Úultralytics.utils.downloadsr   Úultralytics.utils.torch_utilsr   rW   ÚdictÚfloatr$   r&   r8   re   rE   r#   ú<module>ro      sb   ðó Û Û Ý Ý ß +ç -ß q× qÓ qÝ ;Ý 6ñˆsð ˜$ð ¨ð ¸ó ÷Wñ Wñt 
‹�rE   