
    h?                     6   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*y)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                  4    dj                  t        f| z         S )N )join
CELERY_EXE)argss    M/var/www/Befach/backend/env/lib/python3.12/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&      sa    H
d{t$'1	8htf%	k8*%
 8##r   c           	      .    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                 H    |s| S | j                  d      r|  d| S |  d| S )N--=r   )
startswith)optvalues     r   
format_optr4   6   s8    

~~dawU!E7r   c           
          | j                         D ci c];  \  }}t        |      dkD  r!dj                  |j                  dd            nd| | = c}}S c c}}w )N   z--{}_-)itemslenformatreplace)kwargskvs      r   _kwargs_to_command_liner@   >   sc     LLN Aq FQJ 
qyyc*	+sG
-  s   A Ac                   8    e Zd Zd Zd ZddZddZddZd	dZy)
NamespacedOptionParserc                 n    || _         t               | _        g | _        d| _        t        d       | _        y )N c                      t               S N)r    r   r   <lambda>z1NamespacedOptionParser.__init__.<locals>.<lambda>M   s    kmr   )r   r   optionsvaluespassthroughr   
namespaces)selfr   s     r   __init__zNamespacedOptionParser.__init__H   s.    	"}%&;<r   c                    | j                   D cg c]  }|s|	 }}d}|t        |      k  r||   }|dk(  rdj                  ||d        | _        y |d   dk(  ra|d   dk(  r| j	                  |dd         n_d }t        |      |dz   kD  r||dz      d   dk7  r||dz      }|dz  }| j                  |dd  |       n| j                  j                  |       |dz  }|t        |      k  ry y c c}w )Nr   r/   r   r8   r6      )r   r:   r   rK   process_long_optprocess_short_optrJ   append)rM   argrargsposr3   s        r   parsezNamespacedOptionParser.parseO   s    $		1S11CJ*Cd{#&88E#$K#8 Q3q6S=))#ab'2 E5zC!G+cAgq0AS0H %cAgq**3qr7E:""3'1HC! CJ 2s
   C+C+Nc                 ^    d|v r|j                  dd      \  }}| j                  ||d       y )Nr0   r6   Fshort)split
add_optionrM   rT   r3   s      r   rQ   z'NamespacedOptionParser.process_long_optd   s/    #:3*JCU%0r   c                 ,    | j                  ||d       y )NTrY   )r\   r]   s      r   rR   z(NamespacedOptionParser.process_short_opti   s    U$/r   c                 P    || j                   }t        |fi | j                  |   S rF   )rI   r   rL   )rM   nsdefaultss      r   optmergezNamespacedOptionParser.optmergel   s*    ||H8;tr':;;r   c                     |xr dxs d}| j                   }d|v r#|j                  d      \  }}| j                  |   }||||z   <   y )Nr8   r/   :)rI   r[   rL   )rM   r    r3   rZ   r`   r!   dests          r   r\   z!NamespacedOptionParser.add_optionq   sM    3&$||$;zz#HD"??2&D#Vd]r   rF   )FN)	__name__
__module____qualname__rN   rW   rQ   rR   rb   r\   rG   r   r   rB   rB   F   s     =*1
0<
$r   rB   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j0                  d        Zed        Zed        Zed        Zy)r   zRepresents a node in a cluster.Nc                    || _         |xs dt        dd       | _        || _        |xs d| _        | j                  |xs
 t                     | _        | j                         | _	        | j                         | _        d | _        y )Nz-m workerz--detachrD   )r    r   cmdrS   
extra_args_annotate_with_default_optsr   rI   _prepare_expanderexpander_prepare_argvargv_pid)rM   r    rl   rS   rI   rm   s         r   rN   zNode.__init__}   sz    	BC
8Z @AB$*77${}&..0&&(		r   c                     | j                   |d<   | j                  |ddgd       | j                  |ddgd       | j                  |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)rM   rI   s     r   rn   z Node._annotate_with_default_opts   s]    		Gk4%8:RSGk4%8:TUGn%5s~~Fr   c                 T   |dd  D ]	  }	 ||   c S  |j                  |d   t        j                  j	                  |            }t        j                  j                  |      }|r4t        j                  j                  |      st        j                  |       |S # t         $ r Y w xY w)Nr6   r   )KeyError
setdefaultospathnormpathdirnameexistsmakedirs)rM   r)   altr3   r2   dir_paths         r   r{   zNode._setdefaultopt   s    qr7Cv 
 SVRWW%5%5e%<=77??5)BGGNN84KK!  s   B	B'&B'c                 n    | j                   j                  dd      \  }}t        | j                   ||      S )Nr   r6   )r    r[   r-   )rM   r%   r#   s      r   ro   zNode._prepare_expander   s3    "iiooc15	8IIy(, 	,r   c                    | j                  | j                        j                  d      }|j                  d      dz   }| j                  j                         }| j                  j                         D ]F  \  }}|dv s|j                  |t        || j                  |                   |j                  |       H dj                  |      g}t        ||j                         D cg c]   \  }}t        || j                  |            " c}}z   | j                  gz         }| j                  r|| j                  | j                        fz  }|S c c}}w )Nr   r   r6   )z-Az--appz-bz--brokerz--result-backendz--loaderz--configz	--workdirz-Cz
--no-colorz-qz--quiet)rp   rl   r[   indexrI   copyr9   insertr4   popr   tuplerm   rS   )rM   rl   r+   rI   r2   r3   rr   s          r   rq   zNode._prepare_argv   s)   mmDHH%++C0IIh!#,,##%,,,,.JC 	 	 

1jdmmE.BCDC  / xx}o&}}0e T]]512 00 __
 ;;T]]4;;/11D0s   '%Ec                 $    | j                  d      S Nr   )sendrM   s    r   alivez
Node.alive   s    yy|r   c                     | j                   }|r	 t        j                  ||       yt        ||        y # t        $ r4}|j                  t        j
                  k7  r t        ||        Y d }~yd }~ww xY w)NFT)pidr   killOSErrorerrnoESRCH
maybe_call)rM   sigon_errorr   excs        r   r   z	Node.send   sb    hhS! 8T"  99+8T*	s   4 	A1*A,,A1c                 V     | j                   | j                  f| j                  |d|S )N)r   env)	_waitexecrr   r}   )rM   r   r=   s      r   startz
Node.start   s6    t~~II@ OO@8>@ 	@r   c                     | j                  ||      }t        || dj                  |      |       t        ||      }| j	                  |j                         ||      S )Nr   )argstrr   )r   )on_signalled
on_failure)prepare_argvr   r   r   handle_process_exitwait)	rM   rr   r   r   on_spawnr   r   r   pipes	            r   r   zNode._waitexec   s^    ""4.8T#((6*:DV%''IIK%! ( 
 	
r   c                 V    |dk  rt        || |        | S |dkD  rt        || |       |S r   )r   )rM   retcoder   r   s       r   r   zNode.handle_process_exit   s6    Q;|TG848Oq[z41r   c                     dj                  |gt        |      z         }t        j                  t	        |      t
               S )Nr   )posix)r   listshlexr[   r	   r   )rM   rr   r   r   s       r   r   zNode.prepare_argv   s2    xxd+,{{9T?j.AAr   c                 l    |D ]  }	 | j                   |   c S  t        |d         # t        $ r Y /w xY wr   )rI   r   )rM   r   r2   s      r   getoptzNode.getopt   sE    C||C(( 
 s1v  s   '	33c                 N    dt        |       j                   d| j                   dS )N<z: >)typerf   r    r   s    r   __repr__zNode.__repr__   s&    4:&&'r$))A66r   c                 D    | j                  | j                  dd            S )Nrv   rw   rp   r   r   s    r   pidfilezNode.pidfile       }}T[[d;<<r   c                 D    | j                  | j                  dd            S )Nrx   ry   r   r   s    r   logfilezNode.logfile   r   r   c                     | j                   | j                   S 	 t        | j                        j                         S # t        $ r Y y w xY wrF   )rs   r   r   read_pid
ValueErrorr   s    r   r   zNode.pid   sE    99 99	4<<(1133 		s   "= 	A	A	c                     || _         y rF   )rs   )rM   r3   s     r   r   zNode.pid  s	    	r   c                      | j                   d   S )Nrz   rI   r   s    r   r}   zNode.executable  s    ||N++r   c                 6    | j                   f| j                  z   S rF   )r}   rr   r   s    r   argv_with_executablezNode.argv_with_executable  s    !DII--r   c                 (     | |t        |            S )Nr   )r@   )clsr    r=   s      r   from_kwargszNode.from_kwargs  s    4!8!@AAr   )NNNNrF   )NN)rf   rg   rh   __doc__rN   rn   r{   ro   rq   r   r   r   r|   r}   r   r   r   r   r   r
   r   r   propertyr   setterr   classmethodr   rG   r   r   r   r   z   s    ) BF

,
>#@ $'>>tdt	
B7 = = = =   	ZZ  , , . . B Br   r   c                     | 	 | |i | y y rF   rG   )funr   r=   s      r   r   r     s    
TV r   c                   D    e Zd ZeZ	 	 	 d	dZd Zd Zd Zd Zd Z	d
dZ
y)MultiParserc                 J    || _         || _        || _        || _        || _        y rF   )rl   rS   r!   r"   range_prefix)rM   rl   rS   r!   r"   r   s         r   rN   zMultiParser.__init__   s(     (r   c                    	
 j                   }t        j                        t        |      dk(  } j                  	j                  d j                        j                  d j                        j                  dj                  dt                           }j                  d	      xs d	j                  d j                        xs |

d	v rdn

j                  d
d      xs  j                  }|r	  j                  |      |c}	 j                  |        j                  |       	 
fd|D        S # t        $ r Y @w xY w)Nr6   z--cmdz--appendz
--hostnameru   z--prefixrD   z--suffix)z""z''z--range-prefixc           
   3   L   K   | ]  }j                  |        y wrF   )_node_from_options)	.0r    rS   rl   rI   pr!   rM   r"   s	     r   	<genexpr>z$MultiParser.parse.<locals>.<genexpr>=  s5      
  ##4fg?
s   !$)rJ   dictrI   r:   r!   r   rl   rS   r   r"   r   _get_rangesr   _update_ns_opts_update_ns_ranges)rM   r   namesrangesr#   r   rS   rl   rI   r!   r"   s   ``    @@@@@r   rW   zMultiParser.parse)  s9   qyy/Uqkk'488,Z5;;|W[[{}-MNZ06BZ5A-6{{#3R8MD<M<M $ 0 0 7v 	Q&q&)
 
 
 	
  s   E 	EEc           	          t        |||      \  }}	}
|	|j                  v r|	n|}t        |	|||j                  ||      |j                        S rF   )r&   rL   r   rb   rK   )rM   r   r    r!   r"   rl   rS   rI   	namespacer$   r7   s              r   r   zMultiParser._node_from_optionsC  sR    !/ff!E	8Q (ALL 8Hi	Hc6JJy'2AMMC 	Cr   c                 t    t        |d         }t        d|dz         D cg c]  }t        |       c}S c c}w Nr   r6   )intrangestr)rM   r   	noderangens       r   r   zMultiParser._get_rangesJ  s2    aM	 %aQ 781A888s   5c                 8   t        |j                  j                               D ]Y  \  }}|j                         st	        |      dz
  }|dk  rt        d|      	 |j                  ||      j                  |       [ y # t        $ r t        d|      w xY w)Nr6   r   zIndexes start at 1 got: zNo node at index )r   rL   r9   isdigitr   r   update
IndexError)rM   r   r   ns_namens_optsns_indexs         r   r   zMultiParser._update_ns_optsN  s     !%Q\\%7%7%9 :GW w<!+a<"%=g[#IJJDLLx188A !; " D"%6wk#BCCDs   !BBc                    t        |j                  j                               D ]a  \  }}d|v s|sd|v s| j                  ||      D ]   }|j                  |   j	                  |       " |j                  j                  |       c y )N,r8   )r   rL   r9   _parse_ns_ranger   r   )rM   r   r   r   r   subnss         r   r   zMultiParser._update_ns_ranges[  ss     $Q\\%7%7%9 :GWg~&SG^!11'6BELL'..w7 C  )	 !;r   c           
         g }d|v xr |j                  d      xs |gD ]e  }|rPd|v rL|j                  d      \  }}|j                  d t        t        |      t        |      dz         D               U|j	                  |       g |S )Nr   r8   c              3   2   K   | ]  }t        |        y wrF   )r   )r   r   s     r   r   z.MultiParser._parse_ns_range.<locals>.<genexpr>g  s       CFs   r6   )r[   extendr   r   rS   )rM   r`   r   retspacer   stops          r   r   zMultiParser._parse_ns_rangeb  s    BY0288C=8RD8E#,#kk#.t

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

5! 9 
r   N)zcelery workerrD   rD   rD   r   )F)rf   rg   rh   r   rN   rW   r   r   r   r   r   rG   r   r   r   r     s5    D*.0&)
4C9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y)r   zRepresent a cluster of workers.Nc                    || _         |xs t        d      | _        || _        || _        || _        || _        || _        || _        |	| _	        |
| _
        || _        || _        || _        || _        || _        || _        || _        || _        y )Nrk   )nodesr   rl   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)rM   r   rl   r   r   r   r   r   r  r  r  r  r  r  r  r  r	  r
  r  s                      r   rN   zCluster.__init__r  s      
.*X.$8!,$8!)B&$8!*.#6 ,,#6 (,"4 0r   c                 J    | D cg c]  }| j                  |       c}S c c}w rF   )
start_noderM   nodes     r   r   zCluster.start  s    267$%777s    c                     t        | j                  |       | j                  |      }t        | j                  ||       |S rF   )r   r  _start_noder  )rM   r  r   s      r   r  zCluster.start_node  s9    4%%t,""4(4&&g6r   c                 |    |j                  | j                  | j                  | j                  | j                        S )N)r   r   r   )r   r   r	  r
  r  r  s     r   r  zCluster._start_node  s:    zzHH((00,,	  
 	
r   c                     | j                  | j                        D ]>  }t        | j                  |t	        |             |j                  || j                         @ y )Non_down)getpidsr  r   r  r   r   r  )rM   r   r  s      r   send_allzCluster.send_all  sH    LL):):L;Dt**D+c2BCIIc4334 <r   c                 @    | j                  t        j                        S rF   )r  signalSIGKILLr   s    r   r   zCluster.kill  s    }}V^^,,r   c                 B     g  fd} j                  d||       S )Nc                     t        j                  |        j                  |       }t        j                  | |       j	                  |       y rF   )r   r  r  r  rS   )r  retvalretvalsrM   s     r   restart_on_downz(Cluster.restart.<locals>.restart_on_down  sA    t++T2%%d+Ft**D&9NN6"r   rP   retryr  r   _stop_nodes)rM   r   r  r  s   `  @r   restartzCluster.restart  s)    	# 	q/sCr   c                 *    | j                  |||      S Nr   r"  rM   r!  callbackr   s       r   r   zCluster.stop      eX3GGr   rP   c                 *    | j                  |||      S r&  r"  r'  s       r   stopwaitzCluster.stopwait  r)  r   c                     ||n| j                   }t        | j                  |            }|r&| j                  |||      D ]  }t	        ||        y y )Nr  )r   r!  )r  r   r  shutdown_nodesr   )rM   r!  r  r   r   r  s         r   r#  zCluster._stop_nodes  sX    $0'd6G6GT\\'\23++Es%+H7D) I r   c              #     K   t        |      }t        | j                  |       t               }|D ]T  }t        | j                  |t	        |             |j                  || j                        r@|j                  |       | V ||z  }|rt        | j                  |       d}|rt               }|D ]p  }|dz  }t        | j                  |       |j                         r/t        | j                  |       |j                  |       | t        | j                  |        n ||z  }|r"|t        |      z  st        t        |             |rt        | j                         y y wr   )setr   r   r   r   r   r  addr   r   r   r  r:   r   floatr  )rM   r   r   r!  P	to_remover  itss           r   r-  zCluster.shutdown_nodes  s7    J4,,e4E	Dt**D+c2BC99S$":":;d#
	 
 	
Yt00!4CE	D1HCt==qA::<"4#;#;TB!d+"
"4#<#<a@  YS3q6\%,'  t001# s   A-E*0A2E*#A/E*E*c                 L    | D ]  }|j                   |k(  s|c S  t        |      rF   )r    r   )rM   r    r  s      r   findzCluster.find  s)    DyyD   tnr   c              #   T   K   | D ]  }|j                   r| t        ||       ! y wrF   )r   r   )rM   r  r  s      r   r  zCluster.getpids  s&     Dxx
7D)	 s   &(c           	          dj                  t        |       t        | D cg c]  }|j                   c}      t	        |       j
                        S c c}w )Nz<{name}({0}): {1}>)r    )r;   r:   r   r    r   rf   )rM   r   s     r   r   zCluster.__repr__  sG    #**Ix 6A 67d$$ + 
 	
 6s   Ac                     | j                   S rF   )r   r   s    r   datazCluster.data  s    zzr   )NNNNNNNNNNNNNNNNNrF   )rf   rg   rh   r   rN   r   r  r  r  r   r  SIGTERMr$  r   r+  r#  r-  r6  r  r   r   r:  rG   r   r   r   r   o  s    ),0&* $&*+/&*#!%%) $ $%)" $$("&"1H8
5
- !.. 
 &.. H 6>> H !%d * )/d 2:*
  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   r@   rB   r   r   r   r   rG   r   r   <module>rF     s       	   
 : :    * / = = S S *

*$	1$ 1$h[B [B|
O OdKh Kr   