
    `f?                     P   d Z ddlZddlZddlZddlZddl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 ddlmZ ddlmZ dd	lmZmZmZ dd
lmZmZmZmZ ddlmZ dZdZ d Z!d Z"d Z#d Z$d Z% G d d          Z& G d d          Z'd Z( G d d          Z) G d de          Z*dS )zStart/stop/manage workers.    N)OrderedDictUserListdefaultdict)partial)Popen)sleep)	from_utf8)cached_property)
IS_WINDOWSPidfilesignal_name)gethostnamehost_formatnode_format	nodesplit)saferepr)ClusterNodeceleryc                  >    d                     t          f| z             S )N )join
CELERY_EXE)argss    C/var/www/html/env/lib/python3.11/site-packages/celery/apps/multi.py
celery_exer      s    88ZMD()))    c                     |}d| v r$t          |           }t          |          \  }}|} n| |  }t          | d|           }| ||fS )N@)r   r   )nameprefixsuffixhostnamenodename	shortnames         r   build_nodenamer&      su    H
d{{t$$'11	8%t%%	%%8%%
 
 8##r   c           	      8    t          t          | ||| dd          S )Nz%iz%I)r    NdhiI)r   r   )r$   r%   r#   s      r   build_expanderr-   *   s.    




   r   c                 P    |s| S |                      d          r|  d| S |  d| S )N--=r   )
startswith)optvalues     r   
format_optr4   6   sK     

~~d  Er   c                 >    d |                                  D             S )Nc                     i | ]H\  }}t          |          d k    r)d                    |                    dd                    nd| | IS )   z--{}_-)lenformatreplace).0kvs      r   
<dictcomp>z+_kwargs_to_command_line.<locals>.<dictcomp>?   si        Aq FFQJJ 
qyyc**	+	+	+#GGf  r   )items)kwargss    r   _kwargs_to_command_linerC   >   s-      LLNN   r   c                   :    e Zd Zd Zd Zd	dZd	dZd	dZd
dZdS )NamespacedOptionParserc                     || _         t                      | _        g | _        d| _        t          d           | _        d S )N c                      t                      S N)r    r   r   <lambda>z1NamespacedOptionParser.__init__.<locals>.<lambda>M   s
    kmm r   )r   r   optionsvaluespassthroughr   
namespaces)selfr   s     r   __init__zNamespacedOptionParser.__init__H   s:    	"}}%&;&;<<r   c                 B   d | j         D             }d}|t          |          k     r||         }|dk    r$d                    ||d                    | _        d S |d         dk    r|d         dk    r|                     |dd                     nvd }t          |          |dz   k    r%||dz            d         dk    r||dz            }|dz  }|                     |dd          |           n| j                            |           |dz  }|t          |          k     d S d S )Nc                     g | ]}||S rJ   rJ   )r=   args     r   
<listcomp>z0NamespacedOptionParser.parse.<locals>.<listcomp>P   s    111S1111r   r   r/   r   r9   r7      )r   r:   r   rN   process_long_optprocess_short_optrM   append)rP   rargsposrT   r3   s        r   parsezNamespacedOptionParser.parseO   s?   11	111CJJ*Cd{{#&88E#$$K#8#8 Q3q6S==))#abb'2222 E5zzC!G++cAgq0AS0H0H %cAgq**3qrr7E::::""3'''1HC! CJJr   Nc                 p    d|v r|                     dd          \  }}|                     ||d           d S )Nr0   r7   Fshort)split
add_optionrP   rT   r3   s      r   rW   z'NamespacedOptionParser.process_long_optd   s@    #::3**JCU%00000r   c                 6    |                      ||d           d S )NTr^   )ra   rb   s      r   rX   z(NamespacedOptionParser.process_short_opti   s     U$/////r   c                 D    || j         }t          |fi | j        |         S rI   )rL   r   rO   )rP   nsdefaultss      r   optmergezNamespacedOptionParser.optmergel   s,    |H8;;tr':;;;r   Fc                     |rdpd}| j         }d|v r%|                    d          \  }}| j        |         }||||z   <   d S )Nr9   r/   :)rL   r`   rO   )rP   r    r3   r_   re   r!   dests          r   ra   z!NamespacedOptionParser.add_optionq   sS    3&$|$;;zz#HD"?2&D#Vd]r   rI   )FN)	__name__
__module____qualname__rQ   r\   rW   rX   rg   ra   rJ   r   r   rE   rE   F   s        = = =  *1 1 1 1
0 0 0 0< < < <
$ $ $ $ $ $r   rE   c                   $   e Zd ZdZ	 ddZd Zd Zd Zd Zd Z	dd	Z
dd
Zej        ddddfdZddZd Zd Zd Zed             Zed             Zed             Zej        d             Zed             Zed             Zed             ZdS )r   zRepresents a node in a cluster.Nc                 *   || _         |pdt          dd           | _        || _        |pd| _        |                     |pt                                | _        |                                 | _	        | 
                                | _        d | _        d S )Nz-m workerz--detachrG   )r    r   cmdrY   
extra_args_annotate_with_default_optsr   rL   _prepare_expanderexpander_prepare_argvargv_pid)rP   r    rq   rY   rL   rr   s         r   rQ   zNode.__init__}   s    	BB
8Z @ @BB$*77${}}& &..00&&((				r   c                     | j         |d<   |                     |ddgd           |                     |ddgd           |                     |dgt          j                   |S )	N-n	--pidfile-pz/var/run/celery/%n.pid	--logfile-fz/var/log/celery/%n%I.log--executable)r    _setdefaultoptsys
executable)rP   rL   s     r   rs   z Node._annotate_with_default_opts   sk    	Gk4%8:RSSSGk4%8:TUUUGn%5s~FFFr   c                 n   |dd          D ]}	 ||         c S # t           $ r Y w xY w|                    |d         t          j                            |                    }t          j                            |          }|r3t          j                            |          st          j        |           |S )Nr7   r   )KeyError
setdefaultospathnormpathdirnameexistsmakedirs)rP   r)   altr3   r2   dir_paths         r   r   zNode._setdefaultopt   s    qrr7 	 	Cv   SVRW%5%5e%<%<==7??5)) 	"BGNN844 	"K!!!s   
%%c                 j    | j                             dd          \  }}t          | j         ||          S )Nr   r7   )r    r`   r-   )rP   r%   r#   s      r   rt   zNode._prepare_expander   s7    "iooc155	8Iy(, , 	,r   c           
                                 j                                      d          }|                    d          dz   } j                                        } j                                        D ]U\  }}|dv rL|                    |t          |                      |                               |	                    |           Vd
                    |          g}t          | fd|                                D             z    j        gz             } j        r|                       j                  fz  }|S )Nr   r   r7   )z-Az--appz-bz--brokerz--result-backendz--loaderz--configz	--workdirz-Cz
--no-colorz-qz--quietc                 \    g | ](\  }}t          |                    |                    )S rJ   )r4   ru   )r=   r2   r3   rP   s      r   rU   z&Node._prepare_argv.<locals>.<listcomp>   sC     0 0 0e T]]51122 0 0 0r   )ru   rq   r`   indexrL   copyrA   insertr4   popr   tuplerr   rY   )rP   rq   r+   rL   r2   r3   rw   s   `      r   rv   zNode._prepare_argv   sP   mmDH%%++C00IIh!#,##%%,,,.. 	! 	!JC 	 	 	 

1jdmmE.B.BCCDDDC   xx}}o0 0 0 0&}}0 0 00 _
 
 ; 	2T]]4;//11Dr   c                 ,    |                      d          S Nr   )sendrP   s    r   alivez
Node.alive   s    yy||r   c                     | j         }|rW	 t          j        ||           n># t          $ r1}|j        t          j        k    r t          ||            Y d }~dS d }~ww xY wdS t          ||            d S )NFT)pidr   killOSErrorerrnoESRCH
maybe_call)rP   sigon_errorr   excs        r   r   z	Node.send   s    h 	S!!!!   9++8T***uuuuu	
 48T"""""s   ! 
A&AAc                 8     | j         | j        f| j        |d|S )N)r   env)	_waitexecrw   r   )rP   r   rB   s      r   startz
Node.start   s<    t~I@ O@ @8>@ @ 	@r   c                     |                      ||          }t          || d                    |          |           t          ||          }|                     |                                ||          S )Nr   )argstrr   )r   )on_signalled
on_failure)prepare_argvr   r   r   handle_process_exitwait)	rP   rw   r   r   on_spawnr   r   r   pipes	            r   r   zNode._waitexec   sz    ""4..8T#((6*:*:DDDDV%%%''IIKK%! ( 
 
 	
r   c                 j    |dk     rt          || |            | S |dk    rt          || |           |S r   )r   )rP   retcoder   r   s       r   r   zNode.handle_process_exit   sF    Q;;|TG84448Oq[[z4111r   c                     d                     |gt          |          z             }t          j        t	          |          t
                     S )Nr   )posix)r   listshlexr`   r	   r   )rP   rw   r   r   s       r   r   zNode.prepare_argv   s=    xxd+,,{9T??j.AAAAr   c                 t    |D ]!}	 | j         |         c S # t          $ r Y w xY wt          |d                   r   )rL   r   )rP   r   r2   s      r   getoptzNode.getopt   s[     	 	C|C((((   s1vs   
""c                 B    dt          |           j         d| j         dS )N<z: >)typerk   r    r   s    r   __repr__zNode.__repr__   s&    64::&66$)6666r   c                 T    |                      |                     dd                    S )Nr{   r|   ru   r   r   s    r   pidfilezNode.pidfile   "    }}T[[d;;<<<r   c                 T    |                      |                     dd                    S )Nr}   r~   r   r   s    r   logfilezNode.logfile   r   r   c                     | j         | j         S 	 t          | j                                                  S # t          $ r Y d S w xY wrI   )rx   r   r   read_pid
ValueErrorr   s    r   r   zNode.pid   sU    9 9	4<((11333 	 	 	DD	s   %6 
AAc                     || _         d S rI   )rx   )rP   r3   s     r   r   zNode.pid  s    			r   c                     | j         d         S )Nr   rL   r   s    r   r   zNode.executable  s    |N++r   c                 "    | j         f| j        z   S rI   )r   rw   r   s    r   argv_with_executablezNode.argv_with_executable  s    !DI--r   c                 6     | |t          |                    S )Nr   )rC   )clsr    rB   s      r   from_kwargszNode.from_kwargs  s     s4!8!@!@AAAAr   )NNNNrI   )NN)rk   rl   rm   __doc__rQ   rs   r   rt   rv   r   r   r   r   r   r   r   r   r   r   r
   r   r   propertyr   setterr   classmethodr   rJ   r   r   r   r   z   s       )) BF
 
 
 
  
 
 
, , ,
  >  # # # #@ @ @ @ $'>tdt	
 	
 	
 	
   B B B  7 7 7 = = _= = = _=   X 	Z  Z , , _, . . _. B B [B B Br   r   c                     | 
 | |i | d S d S rI   rJ   )funr   rB   s      r   r   r     s)    
TV r   c                   F    e Zd ZeZ	 	 	 ddZd Zd Zd Zd Zd	 Z	ddZ
dS )MultiParsercelery workerrG   r   c                 L    || _         || _        || _        || _        || _        d S rI   )rq   rY   r!   r"   range_prefix)rP   rq   rY   r!   r"   r   s         r   rQ   zMultiParser.__init__   s.     (r   c                    	
 j         }t          j                  t          |          dk    } j        	                    d j                                      d j                                      d                    dt                                          }                    d	          pd	                    d j	                  p|

d	v rdn

                    d
d          p j
        }|r*	                      |          |c}	n# t          $ r Y nw xY w                     |                                |           	 
fd|D             S )Nr7   z--cmdz--appendz
--hostnamerz   z--prefixrG   z--suffix)z""z''z--range-prefixc           
   3   N   K   | ]}                     |          V   d S rI   )_node_from_options)	r=   r    rY   rq   rL   pr!   rP   r"   s	     r   	<genexpr>z$MultiParser.parse.<locals>.<genexpr>=  sX       
 
  ##4fg? ?
 
 
 
 
 
r   )rM   dictrL   r:   r!   r   rq   rY   r   r"   r   _get_rangesr   _update_ns_opts_update_ns_ranges)rP   r   namesrangesr#   r   rY   rq   rL   r!   r"   s   ``    @@@@@r   r\   zMultiParser.parse)  s   qy//Uqkk'48,,Z55;;|W[[{}}-M-MNNZ006BZ55A--6{{#3R88MD<M 	 $ 0 0 7 7vv   Q&&&q&)))
 
 
 
 
 
 
 
 
 
 
 
 
 	
s   D 
D,+D,c           	          t          |||          \  }}	}
|	|j        v r|	n|}t          |	|||                    ||          |j                  S rI   )r&   rO   r   rg   rN   )rP   r   r    r!   r"   rq   rY   rL   	namespacer$   r8   s              r   r   zMultiParser._node_from_optionsC  s_    !/ff!E!E	8Q (AL 8 8HHi	Hc6JJy'22AMC C 	Cr   c                 f    t          |d                   }d t          d|dz             D             S )Nr   c                 ,    g | ]}t          |          S rJ   strr=   ns     r   rU   z+MultiParser._get_ranges.<locals>.<listcomp>L  s    8881A888r   r7   )intrange)rP   r   	noderanges      r   r   zMultiParser._get_rangesJ  s3    aMM	88aQ 7 78888r   c                 j   t          |j                                                  D ]\  }}|                                rrt	          |          dz
  }|dk     rt          d|          	 |j        ||                                      |           k# t          $ r t          d|          w xY wd S )Nr7   r   zIndexes start at 1 got: zNo node at index )r   rO   rA   isdigitr   r   update
IndexError)rP   r   r   ns_namens_optsns_indexs         r   r   zMultiParser._update_ns_optsN  s     !%Q\%7%7%9%9 : : 	D 	DGW   Dw<<!+a<<"#Ig#I#IJJJDLx188AAAA! D D D"#Bw#B#BCCCDD	D 	Ds   +&BB/c                    t          |j                                                  D ]b\  }}d|v s|rWd|v rS|                     ||          D ]"}|j        |                             |           #|j                            |           cd S )N,r9   )r   rO   rA   _parse_ns_ranger   r   )rP   r   r   r   r   subnss         r   r   zMultiParser._update_ns_ranges[  s     $Q\%7%7%9%9 : : 	* 	*GWg~~&~SG^^!11'6BB 8 8EL'..w7777  )))		* 	*r   Fc           
      D   g }d|v r|                     d          p|gD ]}|rgd|v rc|                     d          \  }}|                    d t          t          |          t          |          dz             D                        k|                    |           |S )Nr   r9   c              3   4   K   | ]}t          |          V  d S rI   r   r   s     r   r   z.MultiParser._parse_ns_range.<locals>.<genexpr>g  s9         CFF     r   r7   )r`   extendr   r   rY   )rP   re   r   retspacer   stops          r   r   zMultiParser._parse_ns_rangeb  s    BY0288C==8RD 	" 	"E "#,,#kk#..t

  $)#e**c$ii!m$D$D       

5!!!!
r   N)r   rG   rG   rG   r   )F)rk   rl   rm   r   rQ   r\   r   r   r   r   r   rJ   r   r   r   r     s        D*.0&) ) ) )
 
 
4C C C9 9 9D D D* * *
 
 
 
 
 
r   r   c                       e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZd Zd Zd Zd Zd Z	e
j        fd	Zdde
j        fd
Zdde
j        fdZdde
j        fdZe
j        dfdZd ZddZd Zed             ZdS )r   zRepresent a cluster of workers.Nc                     || _         |pt          d          | _        || _        || _        || _        || _        || _        || _        |	| _	        |
| _
        || _        || _        || _        || _        || _        || _        || _        || _        d S )Nrp   )nodesr   rq   r   on_stopping_preambleon_send_signalon_still_waiting_foron_still_waiting_progresson_still_waiting_endon_node_starton_node_restarton_node_shutdown_okon_node_statuson_node_signalon_node_signal_deadon_node_downon_child_spawnon_child_signalledon_child_failure)rP   r  rq   r   r  r  r  r  r	  r
  r  r  r  r  r  r  r  r  r  s                      r   rQ   zCluster.__init__r  s      
.*X..$8!,$8!)B&$8!*.#6 ,,#6 (,"4 0r   c                        fd D             S )Nc                 :    g | ]}                     |          S rJ   )
start_node)r=   noderP   s     r   rU   z!Cluster.start.<locals>.<listcomp>  s%    777$%%777r   rJ   r   s   `r   r   zCluster.start  s    7777$7777r   c                     t          | j        |           |                     |          }t          | j        ||           |S rI   )r   r
  _start_noder  )rP   r  r   s      r   r  zCluster.start_node  sB    4%t,,,""4((4&g666r   c                 \    |                     | j        | j        | j        | j                  S )N)r   r   r   )r   r   r  r  r  )rP   r  s     r   r  zCluster._start_node  s4    zzH(0,	  
 
 	
r   c                     |                      | j                  D ]@}t          | j        |t	          |                     |                    || j                   Ad S )Non_down)getpidsr  r   r  r   r   r  )rP   r   r  s      r   send_allzCluster.send_all  sc    LL):L;; 	5 	5Dt*D+c2B2BCCCIIc434444	5 	5r   c                 @    |                      t          j                  S rI   )r  signalSIGKILLr   s    r   r   zCluster.kill  s    }}V^,,,r   c                 J     g  fd}                      d||           S )Nc                     t          j        |                                |           }t          j        | |                               |           d S rI   )r   r  r  r  rY   )r  retvalretvalsrP   s     r   restart_on_downz(Cluster.restart.<locals>.restart_on_down  sV    t+T222%%d++Ft*D&999NN6"""""r   rV   retryr  r   _stop_nodes)rP   r   r'  r&  s   `  @r   restartzCluster.restart  sI    	# 	# 	# 	# 	# 	# 	q/sCCCr   c                 2    |                      |||          S Nr(  r*  rP   r)  callbackr   s       r   r  zCluster.stop      eX3GGGr   rV   c                 2    |                      |||          S r.  r*  r/  s       r   stopwaitzCluster.stopwait  r1  r   c                     ||n| j         }t          |                     |                    }|r+|                     |||          D ]}t	          ||           d S d S )Nr  )r   r)  )r  r   r  shutdown_nodesr   )rP   r)  r  r   r  r  s         r   r+  zCluster._stop_nodes  s    $0''d6GT\\'\2233 	*++Es%+HH * *7D))))	* 	** *r   c              #     K   t          |          }t          | j        |           t                      }|D ]Y}t          | j        |t	          |                     |                    || j                  s|                    |           |V  Z||z  }|rt          | j        |           d}|rt                      }|D ]u}|dz  }t          | j	        |           |
                                sEt          | j        |           |                    |           |V  t          | j        |            nv||z  }|r.|t          |          z  st          t          |                     |t          | j                   d S d S )Nr   r7   )setr   r  r  r   r   r  addr  r  r   r  r:   r   floatr	  )rP   r  r   r)  P	to_remover  itss           r   r5  zCluster.shutdown_nodes  s     JJ4,e444EE	 	 	Dt*D+c2B2BCCC99S$":;; d###


	Y 	2t0!444C (EE	  D1HCt=qAAA::<< "4#;TBBB!d+++"


"4#<a@@@ Y (S3q66\ (%,,'''  ( t011111#	2 	2r   c                 H    | D ]}|j         |k    r|c S t          |          rI   )r    r   )rP   r    r  s      r   findzCluster.find  s8     	 	DyD   !tnnr   c              #   L   K   | D ]}|j         r|V  t          ||           d S rI   )r   r   )rP   r  r  s      r   r  zCluster.getpids  sG       	* 	*Dx *



7D))))		* 	*r   c                     d                     t          |           t          d | D                       t          |           j                  S )Nz<{name}({0}): {1}>c                     g | ]	}|j         
S rJ   r    r   s     r   rU   z$Cluster.__repr__.<locals>.<listcomp>  s     6 6 6A 6 6 6r   rB  )r;   r:   r   r   rk   r   s    r   r   zCluster.__repr__  sM    #**IIx 6 6 6 6 677d$ + 
 
 	
r   c                     | j         S rI   )r  r   s    r   datazCluster.data  s
    zr   )NNNNNNNNNNNNNNNNNrI   )rk   rl   rm   r   rQ   r   r  r  r  r   r!  SIGTERMr,  r  r3  r+  r5  r>  r  r   r   rD  rJ   r   r   r   r   o  s       )),0&* $&*+/&*#!%%) $ $%)" $$("&"1 "1 "1 "1H8 8 8  
 
 
5 5 5
- - - !. 
 
 
 
 &. H H H H 6> H H H H !%d * * * * )/d 2 2 2 2:  * * * *
 
 
   X  r   r   )+r   r   r   r   r!  r   collectionsr   r   r   	functoolsr   
subprocessr   timer   kombu.utils.encodingr	   kombu.utils.objectsr
   celery.platformsr   r   r   celery.utils.nodenamesr   r   r   r   celery.utils.safereprr   __all__r   r   r&   r-   r4   rC   rE   r   r   r   r   rJ   r   r   <module>rP     s9        				   



 : : : : : : : : : :                   * * * * * * / / / / / / = = = = = = = = = = S S S S S S S S S S S S * * * * * *

* * *$ $ $	 	 	    1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$h[B [B [B [B [B [B [B [B|  
O O O O O O O OdK K K K Kh K K K K Kr   