o
    $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   b/home/ubuntu/veenaModal/venv/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 )stateALIVEr   ).0node_id	node_infor   r   r   	<setcomp>/   s
    z&DataOrganizer.purge.<locals>.<setcomp>)r   r   itemsr   keyspopr   )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   )cls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languagejobIdr+   r"   )r%   dictdashboard_constsDEFAULT_LANGUAGEDEFAULT_JOB_IDappend)
r(   r   r   r+   pid_to_worker_statspid_to_languagepid_to_job_idr   r1   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< |stj
|i }dd | D I d H |
d< tj|g |
d< |
S )Nr+   workersStatsr0   
storeStatsobjectStoreBytesUsedr   objectStoreBytesAvail)object_store_used_memoryobject_store_available_memoryraylet	deathInforeasonreasonMessagestateMessagec                    $   i | ]\}}|t |I d H qS Nr   _get_actor_infor   actor_idactor_table_entryr   r   r   
<dictcomp>   
    z/DataOrganizer.get_node_info.<locals>.<dictcomp>r   )r4   r   r   r%   r   r   r   intupdater   r   r   r   )r(   r   get_summaryr   r   nodestore_statsusedtotal	ray_statsr   
death_info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)rR   N)r   rZ   )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   rL   r   r   r   rN      s    z1DataOrganizer.get_actor_infos.<locals>.<dictcomp>c                    rG   rH   rI   rK   r   r   r   rN      rO   )r   r   r   )r(   r]   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#   nodeIdr1   r+   gpusprocessesPidsprocessStatsmemrequiredResources)copyr   r   r%   rQ   r   r8   r   )r`   r.   r   r   r1   r   actor_process_statsactor_process_gpu_statsprocess_stats	gpu_statsprocessrequired_resourcesr   r   r   rJ      sB   


zDataOrganizer._get_actor_info)FrH   )r	   r
   r   staticmethodr   r5   $RAY_DASHBOARD_STATS_PURGING_INTERVALr!   classmethod%RAY_DASHBOARD_STATS_UPDATING_INTERVALr/   r'   rZ   r\   r   r   strr_   r4   rJ   r   r   r   r   r   &   s"    '
-
 r   )loggingtypingr   r   ray.dashboard.consts	dashboardconstsr5   ray._common.utilsr   ray._private.utilsr   ray.dashboard.utilsr   r   	getLoggerr	   loggerr   r   r   r   r   r   <module>   s    
