
    &`iH                        d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlZd dl	m
Z
 d dlmZmZmZ d dlmZ  ej        e          Z ej                    Z ej                    Z ej                    Zded	efd
Z G d de          Z G d de          Z G d de          ZdefdZdefdZ G d d          Z  G d d          Z!ej"        ej#        fdeded	e!fdZ$d Z%	 	 	 	 	 d!d	efd Z&dS )"    N)defaultdict)Enum)List)
node_stats)ActorIDJobIDTaskID)node_stats_to_dict
object_refreturnc                     |                      d          rt          j        |           S t          j        j                            |           S )a  Decode objectRef bytes string.

    gRPC reply contains an objectRef that is encodded by Base64.
    This function is used to decode the objectRef.
    Note that there are times that objectRef is already decoded as
    a hex string. In this case, just convert it to a binary number.
    =)endswithbase64standard_b64decoderay_commonutilshex_to_binary)r   s    n/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/ray/dashboard/memory_utils.pydecode_object_ref_if_neededr      sF     3 ; (444{ ..z:::    c                       e Zd ZdZdZdZdS )SortingType         N)__name__
__module____qualname__PIDOBJECT_SIZEREFERENCE_TYPE r   r   r   r   %   s        
CKNNNr   r   c                       e Zd ZdZdZdS )GroupByTypenodestack_traceN)r   r   r    NODE_ADDRESSSTACK_TRACEr$   r   r   r&   r&   +   s        LKKKr   r&   c                   &    e Zd ZdZdZdZdZdZdZdS )ReferenceTypeACTOR_HANDLEPINNED_IN_MEMORYLOCAL_REFERENCEUSED_BY_PENDING_TASKCAPTURED_IN_OBJECTUNKNOWN_STATUSN)	r   r   r    r-   r.   r/   r0   r1   r2   r$   r   r   r,   r,   0   s/        !L)'O1-%NNNr   r,   sort_byc                     |                                  } | dk    rt          j        S | dk    rt          j        S | dk    rt          j        S t          d          )z0Translate string input into SortingType instancer!   r"   r#   z\The sort-by input provided is not one of                PID, OBJECT_SIZE, or REFERENCE_TYPE.)upperr   r!   r"   r#   	Exception)r3   s    r   get_sorting_typer7   :   sb    mmooG%	M	!	!&&	$	$	$))6
 
 	
r   group_byc                     |                                  } | dk    rt          j        S | dk    rt          j        S t	          d          )z0Translate string input into GroupByType instancer)   r*   zUThe group-by input provided is not one of                NODE_ADDRESS or STACK_TRACE.)r5   r&   r)   r*   r6   )r8   s    r   get_group_by_typer:   J   sP    ~~H>!!''	]	"	"&&.
 
 	
r   c                   l    e Zd ZdedededefdZdefdZde	defd	Z
defd
ZdefdZd Zd Zd ZdS )MemoryTableEntryr   node_address	is_driverpidc                h   || _         || _        || _        |                    dd          | _        | j        dk    rd| _        t          |                    dd                    dz   | _        t          |                    dd	                    | _        |                    d
d          | _        t          | j                  dk    rd| _        t          j        t          |d                             | _        t          |                    dd                    | _        t          |                    dd                    | _        t          |                    dd                    | _        d |                    dg           D             | _        |                                 | _        d S )N
taskStatus?NIL-attemptNumberr   r   
objectSizecallSitez	<Unknown>disabledobjectIdlocalRefCountpinnedInMemoryFsubmittedTaskRefCountc                 P    g | ]#}t          j        t          |                    $S r$   )r   	ObjectRefr   .0r   s     r   
<listcomp>z-MemoryTableEntry.__init__.<locals>.<listcomp>r   s;     #
 #
 #
 M5jAABB#
 #
 #
r   containedInOwned)r>   r?   r=   gettask_statusintattempt_numberobject_size	call_sitelenr   rO   r   r   local_ref_countboolpinned_in_memorysubmitted_task_ref_countcontained_in_owned_get_reference_typereference_type)selfr   r=   r>   r?   s        r   __init__zMemoryTableEntry.__init__Y   s    #( &>>,<<u$$"D!*..!"D"DEEIz~~lB??@@#
K@@t~!##'DN-'
:(>??
 

  #:>>/1#E#EFF $Z^^4De%L%L M M(+JNN;RTU,V,V(W(W%#
 #
(nn-?DD#
 #
 #
 #6688r   r   c                     | j         s0| j        dk    r%| j        dk    rt          | j                  dk    rdS | j                                        rdS dS )Nr   FT)r]   r[   r^   rZ   r_   r   is_nilrb   s    r   is_validzMemoryTableEntry.is_validx   sf     %
	$))-22D+,,115_##%% 	54r   group_by_typec                     |t           j        k    r| j        S |t           j        k    r| j        S t          d| d          )Nzgroup by type  is invalid.)r&   r)   r=   r*   rY   
ValueError)rb   rh   s     r   	group_keyzMemoryTableEntry.group_key   sI    K444$$k555>!ImIIIJJJr   c                 `   |                                  rt          j        j        S | j        rt          j        j        S | j        dk    rt          j        j        S | j        dk    rt          j	        j        S t          | j                  dk    rt          j        j        S t          j        j        S )Nr   )_is_object_ref_actor_handler,   r-   valuer]   r.   r^   r0   r[   r/   rZ   r_   r1   r2   rf   s    r   r`   z$MemoryTableEntry._get_reference_type   s    ++-- 	4 -33  		6 177*Q.. 5;;!A%% 066())A-- 399 /55r   c                     | j                                         }t          t          z
  dz  }t          t          z
  dz  }|d |         }||||z            }|dk    r|dk    sdS dS )N   ffffffffffffffffffffffffffffffffffffffffTF)r   hexTASKID_BYTES_SIZEACTORID_BYTES_SIZEJOBID_BYTES_SIZE)rb   object_ref_hextaskid_random_bits_sizeactorid_random_bits_sizerandom_bitsactor_random_bitss         r   rn   z,MemoryTableEntry._is_object_ref_actor_handle   s    ,,.. $57I#IQ"N$69I$IQ#N  %%=&=%=>*#&=@X&XX
 (""+<+H+H45r   c                     | j                                         | j        | j        | j        | j        | j        | j        | j        | j	        | j
        | j        d | j        D             | j        rdnddS )Nc                 6    g | ]}|                                 S r$   )rt   rP   s     r   rR   z,MemoryTableEntry.as_dict.<locals>.<listcomp>   s/     # # #%/
  # # #r   DriverWorker)r   r?   node_ip_addressrX   ra   rY   rU   rW   r[   r]   r^   r_   type)r   rt   r?   r=   rX   ra   rY   rU   rW   r[   r]   r^   r_   r>   rf   s    r   as_dictzMemoryTableEntry.as_dict   s    /--//8#0+"1+"1#3 $ 5(,(E# #373J# # # !%<HHH
 
 	
r   c                 *    |                                  S N__repr__rf   s    r   __str__zMemoryTableEntry.__str__       }}r   c                 D    t          |                                           S r   strr   rf   s    r   r   zMemoryTableEntry.__repr__       4<<>>"""r   N)r   r   r    dictr   r\   rV   rc   rg   r&   rl   r`   rn   r   r   r   r$   r   r   r<   r<   X   s        9!9149AE9LO9 9 9 9>$    K{ Ks K K K K6S 6 6 6 6T    *
 
 
&  # # # # #r   r<   c                       e Zd Zej        ej        fdee         dedefdZ	dedefdZ
defdZd Zd	efd
ZdefdZd Zdee         fdZd Zd ZdS )MemoryTableentriesrh   sort_by_typec                     || _         i | _        t          t                    | _        |r|r|                     ||           d S |r|                     |           d S |r|                     |           d S d S r   )tablegroupr   rV   summarysetup	_group_by_sort_by)rb   r   rh   r   s       r   rc   zMemoryTable.__init__   s     

"3''  	(\ 	(JJ}l33333 	(NN=))))) 	(MM,'''''	( 	(r   c                     |                      |                              |           | j                                        D ]}|                                 |                                  | S )zSetup memory table.

        This will sort entries first and group them after.
        Sort order will be still kept.
        )r   r   r   values	summarize)rb   rh   r   group_memory_tables       r   r   zMemoryTable.setup   sl     	l##--m<<<"&*"3"3"5"5 	+ 	+((****r   entryc                 :    | j                             |           d S r   )r   append)rb   r   s     r   insert_entryzMemoryTable.insert_entry   s    
%     r   c                    d}d}d}d}d}d}| j         D ]}|j        dk    r
||j        z  }|j        t          j        j        k    r|dz  }7|j        t          j        j        k    r|dz  }W|j        t          j        j        k    r|dz  }w|j        t          j        j        k    r|dz  }|j        t          j	        j        k    r|dz  }||||||d| _
        | S )Nr   r   )total_object_sizetotal_local_ref_counttotal_pinned_in_memorytotal_used_by_pending_tasktotal_captured_in_objectstotal_actor_handles)r   rX   ra   r,   r/   ro   r.   r0   r1   r-   r   )rb   r   r   r   r   r   r   r   s           r   r   zMemoryTable.summarize   s$    !!"%&"$%!Z 	) 	)E 1$$!U%66!#}'D'JJJ%*%%%)G)MMM&!+&&%)K)QQQ*a/**%)I)OOO)Q.))%)C)III#q(# "3%:&<*D)B#6
 
 r   sorting_typec                 :   |t           j        k    r| j                            d            nm|t           j        k    r| j                            d            n@|t           j        k    r| j                            d            nt          d| d          | S )Nc                     | j         S r   )r?   r   s    r   <lambda>z&MemoryTable._sort_by.<locals>.<lambda>  s    ei r   )keyc                     | j         S r   )rX   r   s    r   r   z&MemoryTable._sort_by.<locals>.<lambda>  s	    e.? r   c                     | j         S r   )ra   r   s    r   r   z&MemoryTable._sort_by.<locals>.<lambda>  s	    e.B r   zGive sorting type: rj   )r   r!   r   sortr"   r#   rk   )rb   r   s     r   r   zMemoryTable._sort_by  s    ;?**JOO 7 7O8888[444JOO ? ?O@@@@[777JOO B BOCCCCM<MMMNNNr   c                 z   i | _         t          t                    }| j        D ]0}||                    |                                       |           1|                                D ]\  }}t          |dd          | j         |<    | j                                         D ]\  }}|                                 | S )zbGroup entries and summarize the result.

        NOTE: Each group is another MemoryTable.
        Nrh   r   )	r   r   listr   rl   r   itemsr   r   )rb   rh   r   r   rl   r   r   s          r   r   zMemoryTable._group_by  s     
 D!!Z 	@ 	@E%//-00188???? #(++-- 	 	Iw$/t$% % %DJy!! .2Z-=-=-?-? 	+ 	+)I)((****r   c                 X    | j         d | j                                        D             dS )Nc                 N    i | ]"\  }}||                                 |j        d #S ))r   r   )get_entriesr   )rQ   rl   r   s      r   
<dictcomp>z'MemoryTable.as_dict.<locals>.<dictcomp>4  sN       
 2I1	 1==??19   r   )r   r   )r   r   r   rf   s    r   r   zMemoryTable.as_dict1  sB    | 
 6:Z5E5E5G5G  	
 	
 		
r   r   c                 $    d | j         D             S )Nc                 6    g | ]}|                                 S r$   )r   )rQ   r   s     r   rR   z+MemoryTable.get_entries.<locals>.<listcomp>>  s     888E888r   )r   rf   s    r   r   zMemoryTable.get_entries=  s    88TZ8888r   c                 D    t          |                                           S r   r   rf   s    r   r   zMemoryTable.__repr__@  r   r   c                 *    |                                  S r   r   rf   s    r   r   zMemoryTable.__str__C  r   r   N)r   r   r    r&   r)   r   r!   r   r<   rc   r   r   r   r   r   r   r   r   r   r   r$   r   r   r   r      s,        &1%=$/O	( (&'( #( "	( ( ( (&
; 
k 
 
 
 
!"2 ! ! ! !  B	[ 	 	 	 	{    ,

 

 

9T$Z 9 9 9 9# # #    r   r   workers_statsc                 8   g }| D ]}|d         }|                     d          dk    }|d         }|                     dg           }|D ]>}	t          |	|||          }
|
                                r|                    |
           ?t	          |||          }|S )Nr?   
workerTypeDRIVER	ipAddress
objectRefs)r   r=   r>   r?   r   )rT   r<   rg   r   r   )r   r8   r3   memory_table_entriescore_worker_statsr?   r>   r=   object_refsr   memory_table_entrymemory_tables               r   construct_memory_tabler   G  s    
 * @ @&%)),778C	(5'++L"==% 	@ 	@J!1%)#	" " " "**,, @$++,>???	@ H7  L r   c                     t          t                    }dddddd}| d         D ].}|d         }|d	k    rd
}|||d                  xx         |z  cc<   /|S )z]Returns dictionary mapping reference type
    to memory usage for a given memory table group.r   r   r   r   r   )r/   r.   r0   r1   r-   r   rX   rG   r   ra   )r   rV   )r   d
table_namer   sizes        r   track_reference_sizer   b  s     	CA24 <9- J y! 7 7]#2::D	*U+,
-...$6....Hr   r)   r"   TBc                 p	    dd l }|                    d          j        }d}ddddd}	g }
|                                 D ]}}|d	         s	 t	          t          |d
         |d                             }n# t          $ r Y Bw xY w|
                    |d                    t          |          t          u rd|v sJ ~t          |          t          |          }}t          |
||                                          }d|v rd|v sJ d}|j                                                            dd          |j                                                            dd          }}g d}d}g d}d}||k    r|rd}|d| d| d||nd dz  }|d                                         D ]\  }}|d         }t%          |          }|                                D ]X\  }}|dk    r"t'          ||	|         z            d| z   ||<   -t'          |          d||         |	|         z   d| dz   ||<   Y|d| d | d!z  }| |j        | z  }| |j        |                                 d"z   z  }|d#| d | d!z  }| |j        | z  }d}|d$         D ]|	||k    r nd%         d&k    r$t'          d%         |	|         z            d| z   nd'd%<   d}||k    r|rd(t-          d)                   dk    rd*gd)<   n4fd+t/          dt-          d)                             D             d)<   d,  fd-t/          dt-          d.                              D             d.<   t1          t-          d)                   t-          d.                             }n|d"z  }d/         d0         d1         d)         d.         d2         d%         d3         d4         g	}t/          t-          |                    D ]qt3          |         t4                    s|         g|<   |                             d5 t/          |t-          |                   z
            D                        rt/          |          D ]fd6|D             }| |j        | z  }|d"z  }|dz  }|d7z  }|S )8Nr   )P         r   i  i@B i ʚ;)r   KBMBGBAliveNodeManagerAddressNodeManagerPortcoreWorkersStatsr   r    _ )zMem Used by ObjectszLocal ReferencesPinnedzUsed by taskzCaptured in ObjectszActor Handlesz/{:<19}  {:<16}  {:<12}  {:<13}  {:<19}  {:<13}
)	z
IP Addressr!   Typez	Call SiteStatusAttemptSizezReference Typez
Object RefzI{:<13} | {:<8} | {:<7} | {:<9} | {:<9} | {:<8} | {:<8} | {:<14} | {:<10}
zC{:<15}  {:<5}  {:<6}  {:<22}  {:<14}  {:<8}  {:<6}  {:<18}  {:<56}
zGrouping by z...        Sorting by z...        Display allz entries per group...


r   z, ()z--- Summary for z: z ---

z--- Object references for r   rX   rG   rB      rY   rI   c                 6    g | ]}d          ||z            S )rY   r$   )rQ   icall_site_lengthr   s     r   rR   z"memory_summary.<locals>.<listcomp>  s>     * * * k*1q3C/C+CD* * *r      c                 6    g | ]}d          ||z            S )rU   r$   )rQ   r   r   task_status_lengths     r   rR   z"memory_summary.<locals>.<listcomp>  s>     ( ( ( -(Q1C-C)CD( ( (r   rU   r   r?   r   rW   ra   r   c                     g | ]}d S )r   r$   )rQ   xs     r   rR   z"memory_summary.<locals>.<listcomp>  s    NNNARNNNr   c                      g | ]
}|         S r$   r$   )rQ   elemr   s     r   rR   z"memory_summary.<locals>.<listcomp>  s    ===4tAw===r   zmTo record callsite information for each ObjectRef created, set env variable RAY_record_ref_creation_sites=1

)shutilget_terminal_sizecolumns
node_tabler
   r   RuntimeErrorextendr   r   r:   r7   r   r   namelowerreplacer   r   r   formatr   rZ   rangemax
isinstancer   )!stater8   r3   	line_wrapunitnum_entriesr   r   line_wrap_thresholdunitsr   rayletstatsr   memsummary_labelssummary_stringobject_ref_labelsobject_ref_stringr   r   r   ref_sizekvn	num_linesobject_ref_valuesrowr   r   r   r   s!                                @@@@r   memory_summaryr  v  s    MMM##H--5D uE??E ""$$ 
C 
Cg 		&6"67@Q9RSS EE  	 	 	H	  '9!:;;;E{{d""'9U'B'B'BB'B *(335Eg5N5NgH)8W gii  $$L)@)@)@@ C ++--55S |##C-- H  N HN
 
 
- !!!i!  (    + 7U   C
 #7+1133 B B
U	"'..MMOO 	P 	PDAq''' U4[11JJJ>

 VV&OHQK%+,E&O&O&O&O&OO

9(99c9999$~$n55$~$gnn&6&67$>> 	CHCCCCCC' '):;;9% 1	 1	E&1{?? '",, E-(5;677*d**DD - 
 I)))i)#% u[)**a//*4E+&&* * * * *!&q#eK.@*A*ACS!T!T* * *E+&
 &("( ( ( ( ("1c%*>&?&?ASTT( ( (m$  E+$6 7 7U==Q9R9RSS		 t'(efk"m$&'m$&'l#
! 301122  !"3A"6== B,=a,@+A%a(!!$++NNy37H7K3L3L'L!M!MNNN    9%% 6 6====+<===/(/554KCFAA	;C
 Js   )A88
BB)r)   r"   Tr   N)'r   loggingcollectionsr   enumr   typingr   r   ray._private.internal_apir   ray._rayletr   r   r	   ray.dashboard.utilsr
   	getLoggerr   loggerr   ru   rv   rw   r   bytesr   r   r&   r,   r7   r:   r<   r   r)   r"   r   r   r  r$   r   r   <module>r     s     # # # # # #             



 0 0 0 0 0 0 . . . . . . . . . . 2 2 2 2 2 2		8	$	$  FKMM !W\^^ 5:<< ;C ;E ; ; ; ;"    $            $      
& & & & &D & & &
c 
 
 
 
 
 
 
 
 
q# q# q# q# q# q# q# q#hx x x x x x x xz (4#  	   6  , 	U U 	U U U U U Ur   