
    &`i                         d dl Z d dlmZ d dlmZmZmZ d dlmZ d dl	m
Z
 d dlmZmZmZ d dlmZ d dlmZmZ  e j        e          Z G d	 d
          ZdS )    N)defaultdict)DictListOptional)EventLoggerAdapter)ResourceRequestUtil)ClusterResourceConstraintGangResourceRequestResourceRequest)LabelSelectorOperator)LaunchRequestTerminationRequestc                       e Zd ZdZdefdZ	 	 	 	 	 ddeeef         de	e
e                  de	e
e                  de	e
e                  d	e	e
e                  d
e	e
e                  ddfdZdS )AutoscalerEventLoggerz
    Logs events related to the autoscaler.

    # TODO:
    - Add more logging for other events.
    - Rate limit the events if too spammy.
    loggerc                     || _         d S )N)_logger)selfr   s     r/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/ray/autoscaler/v2/event_logger.py__init__zAutoscalerEventLogger.__init__   s        Ncluster_resourceslaunch_requeststerminate_requestsinfeasible_requestsinfeasible_gang_requests'infeasible_cluster_resource_constraintsreturnc                 f	   |rt          t                    }|D ]}||j        xx         |j        z  cc<   t	          |                                          D ]G\  }	\  }
}d| d|
 d}| j                            |            t                              |            H|rt          t                    }|D ]}||j	        |j        fxx         dz  cc<   t          j        j        dt          j        j        dt          j        j        dt          j        j        di}t	          |                                          D ]S\  }	\  \  }}
}d	| d
|
 d||          d}| j                            |            t                              |            T|s|r|                    dd          }dt          |           d}d|v r|dt          |d                    dz  }d|v r|dt          |d                    dz  }| j                            | d           | j                            dt%          |           d           |r*t'          j        |          }d}t	          |          D ]\  }	}t'          j        |j                  }|| d|j         z  }|	t/          |          dz
  k     r|dz  }|j        j        rg }|j        j        D ]b}|j        D ]X}t5          j        |j                  }d                    |j                  }|                    |j          d| d| d           Yc|r|dd                    |          z   dz   z  }|dz  }| j        !                    |           |r|D ]}d "                    |j#        !          }t'          j        |j$                  }t	          |          D ]H\  }	}t'          j        |j                  }|| d|j         z  }|	t/          |          dz
  k     r|dz  }I|dz  }| j        !                    |           |r|D ]}d"}t	          |j%                  D ]M\  }}t'          j        |j                  }|| d|j         z  }|t/          |j%                  dz
  k     r|dz  }N|dz  }| j        !                    |           d#S d#S )$az  
        Log updates to the autoscaler scheduling state.

        Emits:
        - info logs for node launches and terminations (counts grouped by node type).
        - an info log summarizing the cluster size after a resize (CPUs/GPUs/TPUs).
        - warnings describing infeasible single resource requests, infeasible gang
          (placement group) requests, and infeasible cluster resource constraints.

        Args:
            cluster_resources: Mapping of resource name to total resources for the
                current cluster state.
            launch_requests: Node launch requests issued in this scheduling step.
            terminate_requests: Node termination requests issued in this scheduling
                step.
            infeasible_requests: Resource requests that could not be satisfied by
                any available node type.
            infeasible_gang_requests: Gang/placement group requests that could not
                be scheduled.
            infeasible_cluster_resource_constraints: Cluster-level resource
                constraints that could not be satisfied.

        Returns:
            None
        zAdding z node(s) of type .   outdatedz"max number of worker nodes reachedz+max number of worker nodes per type reachedidlez	Removing z nodes of type z (z).CPUr   zResized to z CPUsGPUz, z GPUsTPUz TPUszCurrent cluster resources: z6No available node types can fulfill resource requests *, z []z with label selectors: [z; z@. Add suitable node types to this cluster to resolve this issue.zQNo available node types can fulfill placement group requests (detail={details}): )detailsz8No available node types can fulfill cluster constraint: N)&r   intinstance_typecount	enumerateitemsr   infor   causer   CauseOUTDATEDMAX_NUM_NODESMAX_NUM_NODE_PER_TYPEIDLEgetdebugdictr   group_by_countto_resource_maprequestlenlabel_selectorslabel_constraintsr   Nameoperatorjoinlabel_valuesappend	label_keywarningformatr+   requestsresource_requests)r   r   r   r   r   r   r   launch_type_countreqidxr-   r.   log_strtermination_by_causes_and_typecause_reason_mapr2   num_cpusrequests_by_count	req_countresource_mapselector_strsselector
constraintopvaluesgang_requestinfeasible_constraintis                               r   log_cluster_scheduling_updatez3AutoscalerEventLogger.log_cluster_scheduling_update   s&   L  	* +C 0 0& B B!#"3444	A4444/89J9P9P9R9R/S/S * *++mULELLMLLL!!W,///wL))))  	*-8-=-=*) T T.	3;L/MNNNRSSNNNN #(1:"(68\"(>@m"(-v	  9B.44669 9 * *44,ume iehhMhhM]^cMdhhh!!W,///wL))))  
	Y0 
	Y(,,UA66H8CMM888G)))D$5e$< = =DDDD)))D$5e$< = =DDDDLmmm,,,LWTBS=T=TWWWXXX  	* 3 BCV W WNG"+,=">">  Y2B9CTUUl>>Y_>>>.//!333tOG $4 $&M$-$5$E  *2*D  J!6!;J<O!P!PB%(XXj.E%F%FF)00#-#7 I I" I I I I I    % 6=9Q9QQTWW RG L  )))# 	. 8 . .DDJF , 4 EK E E  %8$F )% %! '00A&B&B ( (NC#6#F!)$ $L ,BBBBBGS!233a7774V $$W----2 	. *Q . .%T,5);- - ( ((A( $7#F)1$ $L ,JJ1B1HJJJG34FGG!KKK4V $$W----'	. 	.. .r   )NNNNN)__name__
__module____qualname____doc__r   r   r   strfloatr   r   r   r   r   r
   r	   r]    r   r   r   r      s         1     :>AE?CHL [. [.U
+[. "$}"56[. %T*<%=>	[.
 &d?&;<[. #+40C+D"E[. 2:*+2
[. 
[. [. [. [. [. [.r   r   )loggingcollectionsr   typingr   r   r   ray._private.event.event_loggerr   ray.autoscaler.v2.utilsr   !ray.core.generated.autoscaler_pb2r	   r
   r   ray.core.generated.common_pb2r   'ray.core.generated.instance_manager_pb2r   r   	getLoggerr^   r   r   rd   r   r   <module>rn      s    # # # # # # ' ' ' ' ' ' ' ' ' ' > > > > > > 7 7 7 7 7 7         
 @ ? ? ? ? ? U U U U U U U U		8	$	$g. g. g. g. g. g. g. g. g. g.r   