
    &`i"              
          d dl Z d dlZd dlZd dlmZmZ d dlmZmZm	Z	 d dl
mZ  ej        e          Z ej        ej                   dZe G d d                      Ze G d	 d
                      Ze G d d                      Ze G d d                      Z G d d          Zd Zdedededeeef         fdZdededede	e         def
dZd Zedk    r e             dS dS )    N)asdict	dataclass)AnyDictList)generate_request_id)leveli  c                   .    e Zd ZU eed<   eed<   eed<   dS )LocustStage
duration_susers
spawn_rateN)__name__
__module____qualname__int__annotations__float     ~/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/ray/serve/_private/benchmarks/locust_utils.pyr   r      s0         OOOJJJr   r   c                   8    e Zd ZU eed<   eed<   eed<   eed<   dS )PerformanceStatsp50_latencyp90_latencyp99_latencyrpsN)r   r   r   r   r   r   r   r   r   r      s=         	JJJJJr   r   c                       e Zd ZU ee         ed<   eed<   eed<   eed<   eed<   eed<   eed<   eed<   ee         ed	<   d
S )LocustTestResultshistorytotal_requestsnum_failuresavg_latencyr   r   r   avg_rpsstats_in_stagesN)	r   r   r   r   r   r   r   r   r   r   r   r   r   r      s         $ZNNN*++++++r   r   c                   B    e Zd ZU eed<   eed<   eed<   eed<   eed<   dS )FailedRequest
request_idstatus_code	exceptionresponse_time_msstart_time_sN)r   r   r   strr   r   r   r   r   r   r'   r'   +   sH         OOONNNr   r'   c            	       6    e Zd Z	 ddededeeef         fdZdS )LocustClientNhost_urltokendatac           
          	 ddl m}mmm	 ddlm g  _        g  _         G  	fdd|          }| _	        d S )Nr   )FastHttpUserconstanteventstask)FastResponsec                       e Zd Z d          Zg ZZfd            Zj        j        d de	de	ffd            Z
dS )+LocustClient.__init__.<locals>.EndpointUserr   c                     t                      }rd |dnd }| j                            d|d          5 }||j        d         d<   d d d            d S # 1 swxY w Y   d S )NzBearer )AuthorizationzX-Request-ID T)headersjsoncatch_responsecontextr(   )r   clientgetrequest_meta)selfr(   r>   rr2   r1   s       r   testz0LocustClient.__init__.<locals>.EndpointUser.testF   s    022
 &7&7&7TTT 
 [__d4 %   I>HAN9-l;I I I I I I I I I I I I I I I I I Is   AAAresponse
start_timeresponse_timec                 F   |r| j         dk    r|d         }t          d| d| d| j                    | j         dk    rbd| _        t	          || j         | j        ||          }j                            |           t          d| d| d| j                    d S d S d S d S )Nr   r(   z	Request 'z' failed with exception:

zutf-8)r(   r)   r*   r+   r,   )r)   printtextencodingr'   errorsappend)	rH   r*   rA   rI   rJ   kwargsr(   errrE   s	           r   
on_requestz6LocustClient.__init__.<locals>.EndpointUser.on_requestS   s     !5!:!:!(!6J8J 8 8$8 8(08 8  
  +q00,3)+'1(0(<&.m-:)3   **3///<
 < <(< <,4M< <    # !:!: 10r   N)r   r   r   	wait_timefailed_requestshostrG   requestadd_listenerr   rT   )r8   r5   r2   r6   r0   rE   r7   r1   s   r   EndpointUserr:   A   s         I OD
I 
I 
I 
I 
I T
I ^(& "	
  %     )(  r   rZ   )
locustr4   r5   r6   r7   locust.contrib.fasthttpr8   rP   r%   
user_class)
rE   r0   r1   r2   r4   rZ   r8   r5   r6   r7   s
   ````  @@@@r   __init__zLocustClient.__init__5   s     	@???????????88888879/	 /	 /	 /	 /	 /	 /	 /	 /	 /	 /	 /	 /	 /	< /	 /	 /	b 'r   )N)r   r   r   r-   r   r   r^   r   r   r   r/   r/   4   sV        
  $	=' ='=' =' 38n	=' =' =' =' =' ='r   r/   c           	         d}| j         j                            |          }|                    t	          |                    d          |                    d          |                    d          |j                             d S )Nr=   GET      ??Gz?)r   r   r   r   )statsentriesrC   rQ   r   $get_current_response_time_percentilecurrent_rps)master_runnerr%   stats_entry_keystats_entrys       r   on_stage_finishedrl   u   s    !O%-11/BBK#HHMM#HHMM#HHNN'		
 	
 	
    r   master_addressr0   r1   r2   c                 `   dd l }ddlm} ddlm}  |d           t          |||          } ||j        g|j                  }|                    | t                    }	|	j
                                         |j        r,t          dt          |j                   d	|j                   d S )
Nr   Environment)setup_loggingINFO)r0   r1   r2   )user_classesr6   )master_hostmaster_portzThere were z	 errors: )r[   
locust.envrp   
locust.logrq   r/   r]   r6   create_worker_runnerMASTER_PORTgreenletjoinrP   RuntimeErrorlen)
rm   r0   r1   r2   r[   rp   rq   rB   envrunners
             r   run_locust_workerr      s     MMM&&&&&&((((((M&85tDDDF
+F$5#6v}
M
M
MC%%" &  F O} WUV]););UUfmUUVVVW Wr   expected_num_workersstageswait_for_workers_timeout_sc                    dd l }dd l}ddlm} ddlm} ddlm}	m}
m}m	}m
} t          | |           G fdd|          } |j        g |            |j                  }|                    dt                    t!          j                    }t#          j        j                  |k     rt!          j                    |z
  |k    rt)          d	| d
          t+          dt#          j        j                   d| d           t!          j        d           t#          j        j                  |k     |                     ||j                             |                    |                                            j                                                                           |j        d          D ]}t+          |            |
j                  D ]}t+          |           j        j        r" |	j                  D ]}t+          |           d}j        j                            |          }tA          j        j!        j        j"        j        j#        |j$        |%                    d          |%                    d          |%                    d          |j&        j'        	  	        }tQ          |          S )Nr   )LoadTestShapero   )get_error_report_summaryget_percentile_stats_summaryget_stats_summarystats_historystats_printerc                   "    e Zd ZdZ fdZdS )&run_locust_master.<locals>.StagesShaper   c                 0   |                                  }d}t                    D ]Y\  }}||j        z  }||k     rD|| j        k    rt	          j                   || _        | j                 }|j        |j        fc S Zt	          j                   d S )Nr   )get_run_time	enumerater   curr_stage_ixrl   r%   r   r   )	clsrun_timeprefix_timeistagecurrent_stagerB   ri   r   s	         r   tickz+run_locust_master.<locals>.StagesShape.tick   s    ''))HK%f-- 	I 	I5u//k))C---)-9OPPP,-)$*3+<$=M(.0HHHHH * mV-CDDDDDr   N)r   r   r   r   r   )rB   ri   r   s   r   StagesShaper      sF        	E 	E 	E 	E 	E 	E 	E 	E 	Er   r   )rs   shape_classr6   *zTimed out waiting for z% workers to connect to Locust master.z!Waiting for workers to be ready, z of z ready.   F)currentr`   rb   rc   rd   )	r    r!   r"   r#   r   r   r   r$   r%   ))geventr[   r   rv   rp   locust.statsr   r   r   r   r   r/   r]   r6   create_master_runnerry   timer}   clientsreadyr|   rM   sleepspawnre   start_shapeshape_greenletr{   quitrP   rf   rC   r   r    num_requestsr"   avg_response_timeget_response_time_percentile	total_rpsr%   r   )r0   r1   r   r   r   r   r[   r   rp   r   r   r   r   r   r   
master_envstartlinerj   rk   resultsrB   ri   s      `                 @@r   run_locust_masterr      s    MMMMMM$$$$$$&&&&&&              (E**FE E E E E E E E Em E E E( '(KMM}  J
 33CEEMIKKE
m#)
*
*-A
A
A9;;!;;;,)= , , ,  
 	0=(.//0 0&0 0 0	
 	
 	

 	
1 m#)
*
*-A
A
A  LLz/00111
LL...  %%''' "!-"5uEEE  d,,]-@AA  d! ,,]-@AA 	 	D$KKKK!O%-11/BBK#+$*7"(51<<SAA<<SAA<<TBB%.
 
 
G '??r   c                     t          j                    } |                     dt          d           |                     dt          d           |                     dt          d           |                     dt          d           |                     dt          d           |                     d	t          d           |                     d
t
          d           |                                 }|j        }|j        }|j	        dk    r#t          |||j        |j        |j                  }nt          |j        |||j                  }t#          |           d S )Nz--worker-typeT)typerequiredz
--host-urlz--tokenz--master-addressFz--expected-num-workersz--stagesz--wait-for-workers-timeout-smaster)argparseArgumentParseradd_argumentr-   r   r   
parse_argsr0   r1   worker_typer   r   r   r   r   rm   r2   rM   )parserargsr0   r1   r   s        r   mainr      sN   $&&F
cDAAA
3>>>
	d;;;
*uEEE
0sUKKK

u===
6UUSSSD}HJE8###%K+
 
 $D$75$)TT	'NNNNNr   __main__)r   loggingr   dataclassesr   r   typingr   r   r   ray.serve._private.utilsr   	getLogger__file__loggerbasicConfigrr   ry   r   r   r   r'   r/   rl   r-   r   r   r   r   r   r   r   r   r   <module>r      sg      ) ) ) ) ) ) ) ) " " " " " " " " " " 8 8 8 8 8 8		8	$	$  ', ' ' ' '                 	, 	, 	, 	, 	, 	, 	, 	,        >' >' >' >' >' >' >' >'B  WW#&W/2W:>sCx.W W W W(bbb b 	b
 !&b b b bJ  4 zDFFFFF r   