o
    $i                     @   s   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 eZG d	d
 d
ZdS )    N)defaultdict)DictListOptional)EventLoggerAdapter)ResourceRequestUtil)ClusterResourceConstraintGangResourceRequestResourceRequest)LabelSelectorOperator)LaunchRequestTerminationRequestc                   @   s   e Zd ZdZdefd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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                 C   s
   || _ d S )N)_logger)selfr    r   [/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/ray/autoscaler/v2/event_logger.py__init__   s   
zAutoscalerEventLogger.__init__Ncluster_resourceslaunch_requeststerminate_requestsinfeasible_requestsinfeasible_gang_requests'infeasible_cluster_resource_constraintsreturnc                 C   s  |r8t t}|D ]}||j  |j7  < qt| D ]\}	\}
}d| d|
 d}| j|  t|  q|rt t}|D ]}||j	|jf  d7  < q@t
jjdt
jjdt
jjdt
jjdi}t| D ]#\}	\\}}
}d	| d
|
 d||  d}| j|  t|  qg|s|r|dd}dt| d}d|v r|dt|d  d7 }d|v r|dt|d  d7 }| j| d | jdt| d |rKt|}d}t|D ]`\}	}t|j}|| d|j 7 }|	t|d k r|d7 }|jjr@g }|jjD ]%}|jD ]}t|j}d|j}||j  d| d| d qq|r@|dd| d 7 }q|d7 }| j!| |r|D ]A}d j"|j#d!}t|j$}t|D ]"\}	}t|j}|| d|j 7 }|	t|d k r|d7 }qc|d7 }| j!| qP|r|D ]:}d"}t|j%D ]#\}}t|j}|| d|j 7 }|t|j%d k r|d7 }q|d7 }| j!| qd#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_mapr.   num_cpusrequests_by_count	req_countresource_mapselector_strsselector
constraintopvaluesgang_requestinfeasible_constraintir   r   r   log_cluster_scheduling_update   s   &


z3AutoscalerEventLogger.log_cluster_scheduling_update)NNNNN)__name__
__module____qualname____doc__r   r   r   strfloatr   r   r   r   r
   r	   r   rY   r   r   r   r   r      s2    





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   	getLoggerrZ   r   r   r   r   r   r   <module>   s    
