o
    1 i±#  ã                   @   s|   d dl Z d dlmZmZ d dlm  mZ d dlm	Z	 d dl
mZ d dlmZmZ e  e¡ZG dd„ dƒZG dd	„ d	ƒZdS )
é    N)ÚListÚOptional)Úget_or_create_event_loop)Ú(parse_pg_formatted_resources_to_original)Úasync_loop_foreverÚcompose_state_messagec                   @   s(   e Zd Zi Zi Zi Zi Zi Zi Zi Z	dS )Ú
DataSourceN)
Ú__name__Ú
__module__Ú__qualname__Ú
node_statsÚnode_physical_statsÚactorsÚnodesÚnode_workersÚnode_actorsÚcore_worker_stats© r   r   úq/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/ray/dashboard/modules/node/datacenter.pyr      s    r   c                   @   s˜   e Zd Zeeejƒdd„ ƒƒZeeej	ƒdd„ ƒƒZ
edd„ ƒZeddd	„ƒZed
d„ ƒZeddeee  fdd„ƒZedee dee fdd„ƒZdS )ÚDataOrganizerc                  Ã   sZ   dd„ t j ¡ D ƒ} t j ¡ |  D ]}t j |¡ qt j ¡ |  D ]}t j |¡ q"d S )Nc                 S   s    h | ]\}}|d  dkr|’qS )ÚstateZALIVEr   )Ú.0Únode_idÚ	node_infor   r   r   Ú	<setcomp>/   s
    þz&DataOrganizer.purge.<locals>.<setcomp>)r   r   Úitemsr   ÚkeysÚpopr   )Zalive_nodesÚkeyr   r   r   Úpurge'   s   €þÿzDataOrganizer.purgec                 Ã   sœ   t ƒ }i }i }ttj ¡ ƒD ]6}tj |i ¡}tj |i ¡}| || j	||¡I dH }|D ]}	|	 dg ¡D ]
}
|
d }|
||< q5q-|||< q|t_
|t_dS )ah  
        Organizes data: read from (node_physical_stats, node_stats) and updates
        (node_workers, node_worker_stats).

        This methods is not really async, but DataSource is not thread safe so we need
        to make sure it's on the main event loop thread. To avoid blocking the main
        event loop, we yield after each node processed.
        NÚcoreWorkerStatsÚworkerId)r   Úlistr   r   r   r   Úgetr   Úrun_in_executorÚ_extract_workers_for_noder   r   )ÚclsZthread_pool_executorÚloopr   r   r   r   r   ÚworkersÚworkerÚstatsÚ	worker_idr   r   r   Úorganize:   s*   €
ü
þ

zDataOrganizer.organizec           
      C   sº   g }i }i }i }|  dg ¡D ]}|d }|||< |d ||< |d ||< q|  dg ¡D ]/}	t|	ƒ}	|	d }|  |¡}|r?|gng |	d< |  |tj¡|	d< |  |tj¡|	d< | |	¡ q+|S )NÚcoreWorkersStatsÚpidÚlanguageZjobIdr(   r    )r#   ÚdictÚdashboard_constsZDEFAULT_LANGUAGEZDEFAULT_JOB_IDÚappend)
r&   r   r   r(   Zpid_to_worker_statsZpid_to_languageZpid_to_job_idr   r.   r)   r   r   r   r%   c   s(   
ÿz'DataOrganizer._extract_workers_for_nodeFc                 Ã   s2  t tj |i ¡ƒ}t tj |i ¡ƒ}tj |i ¡}|r)| dd ¡ | dd ¡ n| dd ¡ | di ¡}t| dd¡ƒ}t| dd¡ƒ}||| dœ}	|}
||
d	< |
d	  |	¡ |
d	  |¡ | d
i ¡}t	| dd ¡| dd ¡ƒ|
d	 d< |s—tj
 |i ¡}dd„ | ¡ D ƒI d H |
d< tj |g ¡|
d< |
S )Nr(   ZworkersStatsr-   Z
storeStatsZobjectStoreBytesUsedr   ZobjectStoreBytesAvail)Zobject_store_used_memoryZobject_store_available_memoryZrayletZ	deathInfoÚreasonZreasonMessageZstateMessagec                 Ó   ó$   i | ]\}}|t  |¡I d H “qS ©N©r   Ú_get_actor_info©r   Úactor_idZactor_table_entryr   r   r   Ú
<dictcomp>¦   ó
   € ÿÿz/DataOrganizer.get_node_info.<locals>.<dictcomp>r   )r0   r   r   r#   r   r   r   ÚintÚupdater   r   r   r   )r&   r   Úget_summaryr   r   ÚnodeZstore_statsÚusedÚtotalZ	ray_statsr   Z
death_infoZactor_table_entriesr   r   r   Úget_node_info‚   s:   €þÿþzDataOrganizer.get_node_infoc                 Ã   s   dd„ t j ¡ D ƒI d H S )Nc                 Ó   s"   g | ]}t j|d dI dH ‘qS )T)r>   N)r   rB   )r   r   r   r   r   Ú
<listcomp>²   s
   € ÿýz6DataOrganizer.get_all_node_summary.<locals>.<listcomp>)r   r   r   )r&   r   r   r   Úget_all_node_summary°   s   €üz"DataOrganizer.get_all_node_summaryNÚ	actor_idsc                 Ã   s8   |d urdd„ |D ƒ}nt j}dd„ | ¡ D ƒI d H S )Nc                 S   s   i | ]	}|t j |¡“qS r   )r   r   r#   )r   r9   r   r   r   r:   ½   s    ÿz1DataOrganizer.get_actor_infos.<locals>.<dictcomp>c                 Ó   r4   r5   r6   r8   r   r   r   r:   Ã   r;   )r   r   r   )r&   rE   Ztarget_actor_table_entriesr   r   r   Úget_actor_infos¹   s   €ÿþzDataOrganizer.get_actor_infosÚactorÚreturnc                 Ã   s  | d u rd S |   ¡ } | d d }tj |i ¡}|  |¡ | d d }| d¡}tj |i ¡}d }g }|rh| dg ¡D ]}|d |krG|} nq;| dg ¡D ]}	|	 d¡pVg D ]}
|
d |krf| |	¡  nqWqN|| d< || d< | d	g ¡| d	< t| d
 ƒ}|| d
< | S )NÚaddressr!   ZnodeIdr.   r(   ZgpusZprocessesPidsZprocessStatsZmemZrequiredResources)Úcopyr   r   r#   r=   r   r2   r   )rG   r+   r   r   r.   r   Zactor_process_statsZactor_process_gpu_statsZprocess_statsZ	gpu_statsÚprocessZrequired_resourcesr   r   r   r7   È   sB   €

þ
þ€ÿzDataOrganizer._get_actor_info)Fr5   )r	   r
   r   Ústaticmethodr   r1   Z$RAY_DASHBOARD_STATS_PURGING_INTERVALr   ÚclassmethodZ%RAY_DASHBOARD_STATS_UPDATING_INTERVALr,   r%   rB   rD   r   r   ÚstrrF   r0   r7   r   r   r   r   r   &   s"    '
-
 r   )ÚloggingÚtypingr   r   Zray.dashboard.constsZ	dashboardZconstsr1   Zray._common.utilsr   Zray._private.utilsr   Zray.dashboard.utilsr   r   Ú	getLoggerr	   Úloggerr   r   r   r   r   r   Ú<module>   s    
