
    `fM                     T   d 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 dd
lmZmZ ddlmZ ddlmZ ddlmZ dZdZ ee           Z! edg d          Z"d Z#d Z$ G d de          Z%d Z&d Z' e'            d             Z( e'dddefg          dvd            Z)d  Z* e'd!d"#          d$             Z+ej,        j-        fd%Z.ej/        j0        ej1        j0        fd&Z2 e&d'd"#          dwd(            Z3 e&d)d*#          dwd+            Z4dwd,Z5 e&d'd-e6fgd./          d0             Z7 e&d1e6fd2e6fgd34          d5             Z8 e&d1e6fd6e9fd7e9fgd84          dxd9            Z: e'            d:             Z; e&            dyd;            Z< e&            d<             Z= e&            d=             Z> e&            d>             Z? e'd?          dyd@            Z@ e'dAB          dC             ZA e'            dD             ZB e'dEF          dG             ZCdH ZD e'dIF          dJ             ZE e'dKF          dvdL            ZF e'dMF          dN             ZG e'dOdPdQR          dzdS            ZH e'dTdUe6fdVeIfdWeIfgdXY          d{d]            ZJ e'            d^             ZK e'd_eIfgd`4          d|da            ZL e&dbeIfgdc4          d}dd            ZM e&dbeIfgdc4          d}de            ZN e&            d~df            ZO e&dgeIfdheIfgdi4          ddj            ZP e&            ddl            ZQ e&dme6fdne6fdoe6fdpe6fgdq4          	 	 dxdr            ZR e&dme6fgds4          dt             ZS e'            du             ZTdS )z.Worker remote control command implementations.    N)UserDictdefaultdict
namedtuple)TERM_SIGNAME)	safe_repr)WorkerShutdown)signals)
maybe_list)
get_logger)jsonify	strtobool)rate   state)Request)Panel)exchangerouting_key
rate_limitcontroller_info_t)aliastypevisibledefault_timeouthelp	signatureargsvariadicc                 
    d| iS )Nok values    G/var/www/html/env/lib/python3.11/site-packages/celery/worker/control.pyr!   r!      s    %=    c                 
    d| iS )Nerrorr"   r#   s    r%   nokr)   "   s    Ur&   c                   N    e Zd ZdZi Zi Zed             Ze	 	 	 dd            ZdS )	r   z+Global registry of remote control commands.c                 @    |r  | j         di || S  | j         di |S )Nr"   )	_register)clsr   kwargss      r%   registerzPanel.register,   sA     	2*=3=**6**D11s}&&v&&&r&   NcontrolT      ?c
           
      6    	  	f
d}
|
S )Nc           
         
 p| j         }p3| j        pd                                                    d          d         }| j        |<   t          
|	          j        |<   r
| j        <   | S )N 
r   )__name____doc__stripsplitdatar   meta)funcontrol_name_helpr   r   r-   r   r   namer   r   r   r   s      r%   _innerzPanel._register.<locals>._inner7   s    /3<LFS[.B5577==dCCAFE%(CH\"%6tWoy$&2 &2CH\"  &"%Jr&   r"   )r-   r?   r   r   r   r   r   r   r   r   r@   s   `````````` r%   r,   zPanel._register2   sY    
		 		 		 		 		 		 		 		 		 		 		 		 		 		 r&   )	NNr0   Tr1   NNNN)	r6   
__module____qualname__r7   r:   r;   classmethodr/   r,   r"   r&   r%   r   r   &   sf        55DD' ' ['
 3<:>6:   [  r&   r   c                  (    t          j        dddi| S )Nr   r0   r"   r   r/   r.   s    r%   control_commandrG   D       >33y3F333r&   c                  (    t          j        dddi| S )Nr   inspectr"   rE   rF   s    r%   inspect_commandrK   H   rH   r&   c                 N    t          | j                                                  S )z6Information about Celery installation for bug reports.)r!   app	bugreportr   s    r%   reportrO   N   s      ei!!##$$$r&   	dump_confz[include_defaults=False]with_defaults)r   r   r   Fc                 v    t          | j        j                            |          t          t
                    S )zList configuration.)rQ   )	keyfilterunknown_type_filter)r   rM   conftable_wanted_config_keyr   )r   rQ   r.   s      r%   rU   rU   T   s8     59>''m'DD/'02 2 2 2r&   c                 X    t          | t                    o|                     d           S )N__)
isinstancestr
startswith)keys    r%   rW   rW   `   s&    c3<t(<(<$<<r&   idsz[id1 [id2 [... [idN]]]])r   r   c                 N    d t          t          |                    D             S )z!Query for task information by id.c                 `    i | ]+}|j         t          |          |                                f,S r"   )id_state_of_taskinfo).0reqs     r%   
<dictcomp>zquery_task.<locals>.<dictcomp>l   sA        	$$chhjj1  r&   )_find_requests_by_idr
   )r   r^   r.   s      r%   
query_taskrh   f   s1     '
388   r&   c              #   P   K   | D ] }	  ||          V  # t           $ r Y w xY wd S N)KeyError)r^   get_requesttask_ids      r%   rg   rg   r   s]        	+g&&&&&& 	 	 	D	 s   
##c                 :     ||           rdS  ||           rdS dS )Nactivereservedreadyr"   )request	is_activeis_reserveds      r%   rb   rb   {   s7     y x	W		 z7r&   rm   c                     t          t          |          pg           d}}t          | |||fi |}t          |t                    rd|v r|S t          d| d          S )zRevoke task by task id (or list of ids).

    Keyword Arguments:
        terminate (bool): Also terminate the process if the task is active.
        signal (str): Name of signal to use for terminate (e.g., ``KILL``).
    Nr!   ztasks z flagged as revoked)setr
   _revokerZ   dictr!   )r   rm   	terminatesignalr.   task_idss         r%   revoker|      sx     Jw//5266gHuh	6DDVDDH(D!! dh&6&64x444555r&   headersz/[key1=value1 [key2=value2 [... [keyN=valueN]]]]c                    t          j        |pt                    }t          |t                    rd |D             }|                                D ]_\  }}t          t          j        	                    |          pg           t	          t          |                    z   }|t          j        |<   `|st          d| d          S t	          t          j                  }	t          t                    }
|	D ]}t          |d          r|j        r|                                D ]\  }}||j        v rt          |          }t          |j        |                   }t          |          t          |          z  }|r<|
|                             |           |                    | j        j        |           |
st          d| d          S t          d|
 d          S )a  Revoke task by header (or list of headers).

    Keyword Arguments:
        headers(dictionary): Dictionary that contains stamping scheme name as keys and stamps as values.
                             If headers is a list, it will be converted to a dictionary.
        terminate (bool): Also terminate the process if the task is active.
        signal (str): Name of signal to use for terminate (e.g., ``KILL``).
    Sample headers input:
        {'mtask_id': [id1, id2, id3]}
    c                 x    i | ]7}|                     d           d         |                     d           d         8S )=r   r   )r9   )rd   hs     r%   rf   z-revoke_by_stamped_headers.<locals>.<dictcomp>   s6    EEE1773<<?AGGCLLOEEEr&   zheaders z' flagged as revoked, but not terminatedstampsrz   z were not terminatedz revoked)_signalssignumr   rZ   listitemsr
   worker_staterevoked_stampsgetr!   active_requestsr   rv   hasattrr   updatery   consumerpool)r   r}   ry   rz   r.   r   headerr   updated_stampsr   #terminated_scheme_to_stamps_mappingre   expected_header_keyexpected_header_valueactual_headermatching_stamps_for_requests                   r%   revoke_by_stamped_headersr      s    & _V3|44F'4   FEEWEEE!--// = =#L$?$C$CF$K$K$QrRRUYZdekZlZlUmUmm.<#F++ OMWMMMNNN<788O*5c*:*:'  J J3!! 
	Jcj 
	J>Emmoo J J:#%:&#*44,67L,M,M)$.sz:M/N$O$OM25m2D2DsK`GaGa2a/2 J;<OPWWXsttten&9&III. <:W:::;;;F<FFFGGGr&   c                    t          |          }t                      }t          j                            |           |rt          j        |pt                    }t          |          D ]|}|j	        |vrq|
                    |j	                   t                              d|j	        |           |                    | j        j        |           t          |          |k    r n}|st!          d          S t!          d                    d                    |                              S d                    |          }	t                              d|	           |S )NzTerminating %s (%s)r   zterminate: tasks unknownzterminate: {}z, zTasks flagged as revoked: %s)lenrv   r   revokedr   r   r   r   rg   ra   addloggerrc   ry   r   r   r!   formatjoin)
r   r{   ry   rz   r.   size
terminatedr   rr   idstrs
             r%   rw   rw      s:   x==DJ))) A!7<88+H55 	 	Gz++wz***17:vFFF!!%."5f!EEEz??d**E 	20111/((:)>)>??@@@IIhE
KK.666Or&   rz   z <signal> [id1 [id2 [... [idN]]]])r   r   r   c                 (    t          | |d|          S )z+Terminate task by task id (or list of ids).T)ry   rz   )r|   )r   rz   rm   r.   s       r%   ry   ry      s     %D@@@@r&   	task_namer   z0<task_name> <rate_limit (e.g., 5/s | 5/m | 5/h)>)r   r   c                     	 t          |           n)# t          $ r}t          d|          cY d}~S d}~ww xY w	 || j        j        |         _        n<# t          $ r/ t                              d|d           t          d          cY S w xY w| j	        
                                 |s*t                              d|           t          d          S t                              d	||           t          d
          S )zTell worker(s) to modify the rate limit for a task by type.

    See Also:
        :attr:`celery.app.task.Task.rate_limit`.

    Arguments:
        task_name (str): Type of task to set rate limit for.
        rate_limit (int, str): New rate limit.
    zInvalid rate limit string: Nz&Rate limit attempt for unknown task %sTexc_infounknown taskz)Rate limits disabled for tasks of type %sz rate limit disabled successfullyz(New rate limit for tasks of type %s: %s.znew rate limit set successfully)r   
ValueErrorr)   rM   tasksr   rk   r   r(   r   reset_rate_limitsrc   r!   )r   r   r   r.   excs        r%   r   r      s7   ":Z : : :88899999999:#0:		"-- # # #= 	 	/ 	/ 	/>"""""#
 
N$$&&& 6?KKK4555
KK::' ' '/000s%    
8388A 6BBsofthardz#<task_name> <soft_secs> [hard_secs]c                    	 | j         j        |         }n<# t          $ r/ t                              d|d           t          d          cY S w xY w||_        ||_        t                              d|||           t          d          S )zTell worker(s) to modify the time limit for task by type.

    Arguments:
        task_name (str): Name of task to change.
        hard (float): Hard time limit.
        soft (float): Soft time limit.
    z-Change time limit attempt for unknown task %sTr   r   z5New time limits for tasks of type %s: soft=%s hard=%sztime limits set successfully)
rM   r   rk   r   r(   r)   soft_time_limit
time_limitrc   r!   )r   r   r   r   r.   tasks         r%   r   r     s    #yy) # # #D 	 	/ 	/ 	/>"""""#
  DDO
KKG4' ' ',---s    6AAc                 (    d| j         j        j        iS )z Get current logical clock value.clock)rM   r   r$   r   r.   s     r%   r   r   =  s     UY_*++r&   c                 d    | j         j        r#| j         j                            |||           dS dS )zHold election.

    Arguments:
        id (str): Unique election id.
        topic (str): Election topic.
        action (str): Action to take for elected actor.
    N)r   gossipelection)r   ra   topicactionr.   s        r%   r   r   C  s>     ~ :&&r5&99999: :r&   c                     | j         j        }|j        rLd|j        vrC|j                            d           t                              d           t          d          S t          d          S )z+Tell worker(s) to send task-related events.r   z)Events of group {task} enabled by remote.ztask events enabledztask events already enabled)r   event_dispatchergroupsr   r   rc   r!   r   
dispatchers     r%   enable_eventsr   P  sn     0J )V:+<<<f%%%?@@@'(((+,,,r&   c                     | j         j        }d|j        v rC|j                            d           t                              d           t          d          S t          d          S )z3Tell worker(s) to stop sending task-related events.r   z*Events of group {task} disabled by remote.ztask events disabledztask events already disabled)r   r   r   discardr   rc   r!   r   s     r%   disable_eventsr   [  sd     0J"""!!&)))@AAA())),---r&   c                     t                               d           | j        j        } |j        dddit
          j         dS )z3Tell worker(s) to send event heartbeat immediately.zHeartbeat requested by remote.worker-heartbeatfreq   N)r   )r   debugr   r   sendr   SOFTWARE_INFOr   s     r%   	heartbeatr   f  sG     LL12220JJOMMQM,2LMMMMMr&   )r   c                 0   || j         k    rt                              d|           |rt          j                            |           t          j                                         t          j        j        | j        j	        
                                dS dS )zRequest mingle sync-data.zsync with %s)r   r   N)hostnamer   rc   r   r   r   purge_datarM   r   forward)r   	from_noder   r.   s       r%   hellor   p  s     EN""NI... 	1 ''000""$$$#+1Y_,,..
 
 	
 #"r&   g?)r   c                      t          d          S )zPing worker(s).pong)r!   r   s     r%   pingr     s     f::r&   c                 >    | j         j                                        S )z&Request worker statistics/information.)r   
controllerstatsr   s     r%   r   r     s     >$**,,,r&   dump_schedule)r   c                 N    t          t          | j        j                            S )z0List of currently scheduled ETA/countdown tasks.)r   _iter_schedule_requestsr   timerr   s     r%   	scheduledr     s      '(<==>>>r&   c              #   $  K   | j         j        D ]}	 |j        j        d         }t	          |t
                    r?|j        r|j                                        nd |j        |	                                dV  j# t          t          f$ r Y }w xY wd S )Nr   )etapriorityrr   )schedulequeueentryr   rZ   r   r   	isoformatr   rc   
IndexError	TypeError)r   waitingarg0s      r%   r   r     s      >'  
	=%a(D $(( 378E48--/// ' 0#yy{{    	 I& 	 	 	H	 s   A99BBdump_reservedc                     |                      t          j                  |                      t          j                  z
  }|sg S d |D             S )zAList of currently reserved tasks, not including scheduled/active.c                 6    g | ]}|                                 S r"   rc   )rd   rr   s     r%   
<listcomp>zreserved.<locals>.<listcomp>  s     999wGLLNN999r&   )tsetr   reserved_requestsr   )r   r.   reserved_taskss      r%   rp   rp     sU     	

<122

</00	1   	99.9999r&   dump_activec                 Z    fd|                      t          j                  D             S )z'List of tasks currently being executed.c                 <    g | ]}|                                S ))safer   )rd   rr   r   s     r%   r   zactive.<locals>.<listcomp>  s=     E E E LLdL## E E Er&   )r   r   r   )r   r   r.   s    ` r%   ro   ro     sE    E E E E ::l&BCCE E E Er&   dump_revokedc                 4    t          t          j                  S )zList of revoked task-ids.)r   r   r   r   s     r%   r   r     s     $%%%r&   
dump_taskstaskinfoitemsz[attr1 [attr2 [... [attrN]]]])r   r   r   c                     | j         j        pt          |rnd D             }fdfdt          |          D             S )zList of registered tasks.

    Arguments:
        taskinfoitems (Sequence[str]): List of task attributes to include.
            Defaults to ``exchange,routing_key,rate_limit``.
        builtins (bool): Also include built-in tasks.
    c              3   D   K   | ]}|                     d           |V  dS )zcelery.N)r\   )rd   r   s     r%   	<genexpr>zregistered.<locals>.<genexpr>  sP       "@ "@DOOI$>$>"@"@ "@ "@ "@ "@ "@r&   c                       fdD             }|rLd |                                 D             }d                     j        d                    |                    S  j        S )Nc           
      p    i | ]2}t          |d           |t          t          |d                     3S rj   )getattrr[   )rd   fieldr   s     r%   rf   z5registered.<locals>._extract_info.<locals>.<dictcomp>  sK     
 
 
7<tUD))5 3wtUD1122555r&   c                 8    g | ]}d                      |          S )r   )r   )rd   fs     r%   r   z5registered.<locals>._extract_info.<locals>.<listcomp>  s"    888ACHHQKK888r&   z{} [{}] )r   r   r?   r   )r   fieldsrc   r   s   `  r%   _extract_infoz!registered.<locals>._extract_info  s{    
 
 
 
@M
 
 
  	?88888D##DIsxx~~>>>yr&   c                 2    g | ]} |                   S r"   r"   )rd   r   r  regs     r%   r   zregistered.<locals>.<listcomp>  s'    ???MM#d)$$???r&   )rM   r   DEFAULT_TASK_INFO_ITEMSsorted)r   r   builtinsr.   r   r  r  s    `   @@r%   
registeredr	    s     )/C!<%<M @CC "@ "@"@ "@ "@E     @????????r&   g      N@r   num	max_depthz.[object_type=Request] [num=200 [max_depth=10]])r   r   r      
   r   c                 p   	 ddl }n# t          $ r t          d          w xY wt                              d|           t	          j        ddd          5 }|                    |          d|         |                    |fd	|j        
           d|j        icddd           S # 1 swxY w Y   dS )a  Create graph of uncollected objects (memory-leak debugging).

    Arguments:
        num (int): Max number of objects to graph.
        max_depth (int): Traverse at most n levels deep.
        type (str): Name of object to graph.  Default is ``"Request"``.
    r   NzRequires the objgraph libraryzDumping graph for type %rcobjgz.pngF)prefixsuffixdeletec                     | v S rj   r"   )vobjectss    r%   <lambda>zobjgraph.<locals>.<lambda>  s    Q'\ r&   )r  	highlightfilenamer  )	objgraphImportErrorr   rc   tempfileNamedTemporaryFileby_typeshow_backrefsr?   )r   r
  r  r   	_objgraphfhr  s         @r%   r  r    s6   ;$$$$$ ; ; ;9:::;
KK+T222		$G,25
B 
B 
B %EG##D))$3$/+A+A+A+AW 	  	
 	
 	

 BG$% % % % % % % % % % % % % % % % % %s    "AB++B/2B/c                 "    ddl m}  |            S )z Sample current RSS memory usage.r   )
sample_mem)celery.utils.debugr"  )r   r.   r"  s      r%   	memsampler$    s"     .-----:<<r&   samplesz[n_samples=10]c                     ddl m} t          j                    }|                    |           |                                S )z/Dump statistics of previous memsample requests.r   )r   )file)celery.utilsr   ioStringIOmemdumpgetvalue)r   r%  r.   r   outs        r%   r+  r+    sC     #"""""
+--C	MMsM<<>>r&   nz[N=1]c                     | j         j        j        rt          d          S | j         j                            |           | j                             |           t          d          S )z!Grow pool by n processes/threads.zJpool_grow is not supported with autoscale. Adjust autoscale range instead.zpool will grow)r   r   
autoscalerr)   r   grow_update_prefetch_countr!   r   r.  r.   s      r%   	pool_growr4    sa     ~ + 1_```  ###--a000r&   c                     | j         j        j        rt          d          S | j         j                            |           | j                             |            t          d          S )z#Shrink pool by n processes/threads.zLpool_shrink is not supported with autoscale. Adjust autoscale range instead.zpool will shrink)r   r   r0  r)   r   shrinkr2  r!   r3  s      r%   pool_shrinkr7    sc     ~ + 2abbb""1%%%--qb111 !!!r&   c                     | j         j        j        r1| j        j                            |||           t          d          S t          d          )zRestart execution pool.)reloaderzreload startedzPool restarts not enabled)rM   rU   worker_pool_restartsr   r   reloadr!   r   )r   modulesr;  r9  r.   s        r%   pool_restartr=  ,  sQ     y~* 6!((&8(LLL"###4555r&   maxminz[max [min]]c                     | j         j        j        }|r.|                    ||          \  }}t	          d| d|           S t          d          )zModify autoscale settings.zautoscale now max=z min=zAutoscale not enabled)r   r   r0  r   r!   r   )r   r>  r?  r0  max_min_s         r%   	autoscalerC  6  s`     *5J :&&sC00
d8t88$88999
,
-
--r&   Got shutdown from remotec                 T    t                               |           t          d          )zShutdown worker(s).r   )r   warningr   )r   msgr.   s      r%   shutdownrH  C  s$     NN3


r&   r   r   exchange_typer   z'<queue> [exchange [type [routing_key]]]c                 l     | j         j        | j         j        |||pd|fi | t          d|           S )z2Tell worker(s) to consume from task queue by name.directzadd consumer )r   	call_soonadd_task_queuer!   )r   r   r   rI  r   optionss         r%   add_consumerrO  L  s^     EN%x2(KL LCJL L L %e%%&&&r&   z<queue>c                 p    | j                             | j         j        |           t          d|           S )z9Tell worker(s) to stop consuming from task queue by name.zno longer consuming from )r   rL  cancel_task_queuer!   )r   r   _s      r%   cancel_consumerrS  ^  sA     
N(%   1%11222r&   c                 T    | j         j        rd | j         j        j        D             S g S )z:List the task queues a worker is currently consuming from.c                 T    g | ]%}t          |                    d                     &S )T)recurse)rx   as_dict)rd   r   s     r%   r   z!active_queues.<locals>.<listcomp>n  sD     B B B U]]4]0011 B B Br&   )r   task_consumerqueuesr   s    r%   active_queuesrZ  j  sF     ~# BB B"^9@B B B 	BIr&   )F)FN)NNNrj   )NF)r  r  r   )r  )r   )NFN)NN)rD  )Ur7   r)  r  collectionsr   r   r   billiard.commonr   kombu.utils.encodingr   celery.exceptionsr   celery.platformsr	   r   celery.utils.functionalr
   celery.utils.logr   celery.utils.serializationr   r   celery.utils.timer   r4   r   r   rr   r   __all__r  r6   r   r   r!   r)   r   rG   rK   rO   rU   rW   rh   requests__getitem__rg   r   __contains__r   rb   r|   r   rw   r[   ry   r   floatr   r   r   r   r   r   r   r   r   r   r   rp   ro   r   r	  intr  r$  r+  r4  r7  r=  rC  rH  rO  rS  rZ  r"   r&   r%   <module>rj     s   4 4 				  9 9 9 9 9 9 9 9 9 9 ( ( ( ( ( ( * * * * * * , , , , , , 0 0 0 0 0 0 . . . . . . ' ' ' ' ' ' 9 9 9 9 9 9 9 9 " " " " " " # # # # # #      
C 	H		J2 5 5 5           H   <4 4 44 4 4 % % %
 
(I
&	'  
2 2 2 
2= = = '   	  &2%:%F    *9F+=J    '  6 6 6	 6$ ?  3H 3H 3H	 3Hl   0 S/	0  
A A 
A
 
|S1	2@  !1 !1	 !1H 
vuo	?3  . . .	 .4 , , ,
 	: 	: 	: 	: - - - . . . N N N 
 
 
  
" %%%  &%
 - - -
 '''? ? ('?
   ''': : (': }%%%E E E &%E ~&&&& & '&&
 
-  
@ @ @ 
@: 3-%S'9	:>  
% % % 
%0    c
	    	  *       	   *  " " "	 " 6 6 6 6 #,	%  . . .	 .     	#	S	#		
 8   =A!' ' ' ' C.	  3 3	 3     r&   