
    hM                        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 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      dsd        Z*d! Z+ e(d"d#$      d%        Z,ejZ                  j\                  fd&Z/ej`                  jb                  ejd                  jb                  fd'Z3 e'd(d#$      dtd)       Z4 e'd*d+$      dtd,       Z5dtd-Z6 e'd(d.e7fgd/0      d1        Z8 e'd2e7fd3e7fgd45      d6        Z9 e'd2e7fd7e:fd8e:fgd95      dud:       Z; e(       d;        Z< e'       dvd<       Z= e'       d=        Z> e'       d>        Z? e'       d?        Z@ e(d@      dvdA       ZA e(dBC      dD        ZB e(       dE        ZC e(dFG      dH        ZDdI ZE e(dJG      dK        ZF e(dLG      dsdM       ZG e(dNG      dO        ZH e(dPdQdRS      dwdT       ZI e(dUdVe7fdWeJfdXeJfgdYZ      dxd[       ZK e(       d\        ZL e(d]eJfgd^5      dyd_       ZM e'd`eJfgda5      dzdb       ZN e'd`eJfgda5      dzdc       ZO e'       d{dd       ZP e'deeJfdfeJfgdg5      d|dh       ZQ e'       d}di       ZR e'dje7fdke7fdle7fdme7fgdn5      	 	 dudo       ZS e'dje7fgdp5      dq        ZT e(       dr        ZUy)~z.Worker remote control command implementations.    N)UserDictdefaultdict
namedtuple)TERM_SIGNAME)	safe_repr)WorkerShutdown)EX_OK)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    Q/var/www/Befach/backend/env/lib/python3.12/site-packages/celery/worker/control.pyr"   r"      s    %=    c                 
    d| iS )Nerrorr#   r$   s    r&   nokr*   #   s    Ur'   c                   @    e Zd ZdZi Zi Zed        Ze	 	 	 dd       Zy)r   z+Global registry of remote control commands.c                 T    |r  | j                   di || S  | j                   di |S )Nr#   )	_register)clsr   kwargss      r&   registerzPanel.register-   s4    *=3==*6*D11s}}&v&&r'   Nc
           
      6    	  	f
d}
|
S )Nc           
        
 xs | j                   }xs0 | j                  xs dj                         j                  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>._inner8   s    /3<<LFS[[.B557==dCAFE%(CHH\"%6tWoy$&2CHH\" "%Jr'   r#   )r.   r>   r   r   r   r   r   r   r   r    r?   s   `````````` r&   r-   zPanel._register3   s    
		 		 r'   )	NNcontrolTg      ?NNNN)	r5   
__module____qualname__r6   r9   r:   classmethodr0   r-   r#   r'   r&   r   r   '   s>    5DD' '
 3<:>6: r'   r   c                  0    t        j                  dddi| S )Nr   r@   r#   r   r0   r/   s    r&   control_commandrG   E       >>3y3F33r'   c                  0    t        j                  dddi| S )Nr   inspectr#   rE   rF   s    r&   inspect_commandrK   I   rH   r'   c                 H    t        | j                  j                               S )z6Information about Celery installation for bug reports.)r"   app	bugreportr   s    r&   reportrO   O   s     eii!!#$$r'   	dump_confz[include_defaults=False]with_defaults)r   r   r   Fc                 v    t        | j                  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   U   s/     599>>''m'D/'02 2r'   c                 J    t        | t              xr | j                  d       S )N__)
isinstancestr
startswith)keys    r&   rW   rW   a   s     c3<t(<$<<r'   idsz[id1 [id2 [... [idN]]]])r    r   c                     t        t        |            D ci c](  }|j                  t        |      |j	                         f* c}S c c}w )z!Query for task information by id.)_find_requests_by_idr   id_state_of_taskinfo)r   r^   r/   reqs       r&   
query_taskre   g   sF     (
38 	$chhj11  s   -Ac              #   N   K   | D ]  }	  ||        y # t         $ r Y w xY wwN)KeyError)r^   get_requesttask_ids      r&   r`   r`   s   s3     	g&&   		s   %
%	"%"%c                 (     ||       ry ||       ryy)Nactivereservedreadyr#   )request	is_activeis_reserveds      r&   rb   rb   |   s     	W	r'   rj   c                     t        t        |      xs 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   rj   	terminatesignalr/   task_idss         r&   revokery      s\     Jw/526gHuh	6DVDH(D!dh&6xj 3455r'   headersz/[key1=value1 [key2=value2 [... [keyN=valueN]]]]c                    t        j                  |xs t              }t        |t              r4|D ci c])  }|j                  d      d   |j                  d      d   + }}|j                         D ]Y  \  }}t        t        j                  j                  |      xs g       t	        t        |            z   }	|	t        j                  |<   [ |st        d| d      S t	        t        j                        }
t        t              }|
D ]  }t        |d      s|j                   s|j                         D ]  \  }}||j                   v st        |      }t        |j                   |         }t        |      t        |      z  }|sR||   j#                  |       |j%                  | j&                  j(                  |         |st        d| d      S t        d| d	      S c c}w )
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]}
    =r   r   zheaders z' flagged as revoked, but not terminatedstampsrw   z were not terminatedz revoked)_signalssignumr   rZ   listr8   itemsr   worker_staterevoked_stampsgetr"   active_requestsr   rs   hasattrr}   updaterv   consumerpool)r   rz   rv   rw   r/   r   hheaderr}   updated_stampsr   #terminated_scheme_to_stamps_mappingrd   expected_header_keyexpected_header_valueactual_headermatching_stamps_for_requests                    r&   revoke_by_stamped_headersr      s   & __V3|4F'4 =DE1773<?AGGCLO3EE!--/#L$?$?$C$CF$K$QrRUYZdekZlUmm.<##F+ * HWI%LMNN<778O*5c*:' 3!cjj>Emmo:#%:&#**4,67L,M)$.szz:M/N$OM25m2DsK`Ga2a/2;<OPWWXstenn&9&9&I ?N	  /HWI%9:;;<=XFGGC Fs   .G'c                    t        |      }t               }t        j                  j	                  |       |rt        j                  |xs t              }t        |      D ]  }|j                  |vs|j                  |j                         t        j                  d|j                  |       |j                  | j                  j                  |       t        |      |k\  s n |st!        d      S t!        dj#                  dj%                  |                  S dj%                  |      }	t        j                  d|	       |S )NzTerminating %s (%s)r~   zterminate: tasks unknownzterminate: {}z, zTasks flagged as revoked: %s)lenrs   r   revokedr   r   r   r   r`   ra   addloggerrc   rv   r   r   r"   formatjoin)
r   rx   rv   rw   r/   size
terminatedr   ro   idstrs
             r&   rt   rt      s    x=DJ)!7<8+H5Gzz+wzz*17::vF!!%.."5"5f!Ez?d* 6 011/((:)>?@@IIhE
KK.6Or'   rw   z <signal> [id1 [id2 [... [idN]]]])r    r   r   c                      t        | |d|      S )z+Terminate task by task id (or list of ids).T)rv   rw   )ry   )r   rw   rj   r/   s       r&   rv   rv      s     %D@@r'   	task_namer   z0<task_name> <rate_limit (e.g., 5/s | 5/m | 5/h)>)r   r   c                    	 t        |       	 || j                  j                  |   _        | j                  j                          |s!t        j                  d|       t        d      S t        j                  d	||       t        d
      S # t        $ r}t        d|      cY d}~S d}~ww xY w# t        $ r& t        j                  d|d       t        d      cY S w xY w)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   rh   r   r)   r   reset_rate_limitsrc   r"   )r   r   r   r/   excs        r&   r   r      s    ":Z#0:			"- 
NN$$&?K455
KK::'/00%  :0899:
  #= 	 	/>""#s.   B B/ 	B,B'!B,'B,/,CCsofthardz#<task_name> <soft_secs> [hard_secs]c                     	 | j                   j                  |   }||_        ||_        t        j                  d|||       t        d      S # t        $ r& t        j	                  d|d       t        d      cY S w xY w)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   rh   r   r)   r*   soft_time_limit
time_limitrc   r"   )r   r   r   r   r/   tasks         r&   r   r      s    #yyy)  DDO
KKG4',--  #D 	 	/>""#s   A ,A;:A;c                 F    d| j                   j                  j                  iS )z Get current logical clock value.clock)rM   r   r%   r   r/   s     r&   r   r   >  s     UYY__**++r'   c                     | j                   j                  r(| j                   j                  j                  |||       yy)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   D  s2     ~~&&r5&9 r'   c                     | j                   j                  }|j                  rId|j                  vr;|j                  j                  d       t        j                  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   Q  sb     00JV:+<+<<f%?@'((+,,r'   c                     | j                   j                  }d|j                  v r;|j                  j                  d       t        j                  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   \  sZ     00J"""!!&)@A()),--r'   c                     t         j                  d       | j                  j                  } |j                  dddit
        j                   y)z3Tell worker(s) to send event heartbeat immediately.zHeartbeat requested by remote.freq   N)zworker-heartbeat)r   debugr   r   sendr   SOFTWARE_INFOr   s     r&   	heartbeatr   g  s<     LL1200JJOOMQM,2L2LMr'   )r   c                 J   || j                   k7  rt        j                  d|       |rt        j                  j                  |       t        j                  j                          t        j                  j                  | j                  j                  j                         dS y)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   q  sy     ENN"NI.  ''0""$#++11YY__,,.
 	
 #r'   g?)r   c                     t        d      S )zPing worker(s).pong)r"   r   s     r&   pingr     s     f:r'   c                 J    | j                   j                  j                         S )z&Request worker statistics/information.)r   
controllerstatsr   s     r&   r   r     s     >>$$**,,r'   dump_schedule)r   c                 R    t        t        | j                  j                              S )z0List of currently scheduled ETA/countdown tasks.)r   _iter_schedule_requestsr   timerr   s     r&   	scheduledr     s     '(<(<=>>r'   c              #   N  K   | j                   j                  D ]s  }	 |j                  j                  d   }t	        |t
              s.|j                  r|j                  j                         nd |j                  |j                         d u y # t        t        f$ r Y w xY ww)Nr   )etapriorityro   )schedulequeueentryr   rZ   r   r   	isoformatr   rc   
IndexError	TypeError)r   waitingarg0s      r&   r   r     s     >>''
	==%%a(D $(3788488--/ ' 0 0#yy{  ( I& 		s.   B%BB%A	B%B"B%!B""B%dump_reservedc                     | j                  t        j                        | j                  t        j                        z
  }|sg S |D cg c]  }|j	                          c}S c c}w )zAList of currently reserved tasks, not including scheduled/active.)tsetr   reserved_requestsr   rc   )r   r/   reserved_tasksro   s       r&   rm   rm     sV     	

<112

<//0	1  	*89wGLLN999s   A"dump_activec                     | j                  t        j                        D cg c]  }|j                  |       c}S c c}w )z'List of tasks currently being executed.)safe)r   r   r   rc   )r   r   r/   ro   s       r&   rl   rl     sB     !::l&B&BCE LLdL# E E Es   >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                  }xs t        |r|nd |D        }fd}t        |      D cg c]  } |||          c}S c c}w )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   | ]  }|j                  d       r|  yw)zcelery.N)r\   ).0r   s     r&   	<genexpr>zregistered.<locals>.<genexpr>  s"      "@DOOI$>"@s     c                 D   D ci c]&  }t        | |d       |t        t        | |d             ( }}|rW|j                         D cg c]  }dj                  |       }}dj	                  | j
                  dj                  |            S | j
                  S c c}w c c}w )Nr|   z{} [{}] )getattrr[   r   r   r   r>   )r   fieldfieldsfrc   r   s        r&   _extract_infoz!registered.<locals>._extract_info  s    @M
7<tUD)5 3wtUD122
 
 )/8ACHHQK8D8##DIIsxx~>>yy

 9s   +BB)rM   r   DEFAULT_TASK_INFO_ITEMSsorted)r   r   builtinsr/   regr   r   r   s    `      r&   
registeredr     s[     ))//C!<%<MC "@"@E 28?M#d)$???s   Ag      N@r   num	max_depthz.[object_type=Request] [num=200 [max_depth=10]])r   r   r   c                 N   	 ddl }t        j                  d|       t	        j
                  ddd      5 }|j                  |      d| |j                  |fd	|j                  
       d|j                  icddd       S # t        $ r t        d      w xY w# 1 sw Y   yxY w)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 rg   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    s    ;$ KK+T2		$	$G,25
B %EG##D)$3/+AWW 	  	

 BGG$% %  ;9::;% %s   B ABB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                 z    ddl m} t        j                         }|j	                  |       |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    s,     #
++-C	MMsM<<>r'   nz[N=1]c                     | j                   j                  j                  rt        d      S | j                   j                  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_growr'    sY     ~~  ++_``  #--a0r'   c                     | j                   j                  j                  rt        d      S | j                   j                  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   r#  r*   r   shrinkr%  r"   r&  s      r&   pool_shrinkr*    s[     ~~  ++abb""1%--qb1 !!r'   c                     | j                   j                  j                  r3| j                  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.  r,  r/   s        r&   pool_restartr0  -  sL     yy~~**!!((&8(L"##455r'   maxminz[max [min]]c                     | j                   j                  j                  }|r&|j                  ||      \  }}t	        d| d|       S t        d      )zModify autoscale settings.zautoscale now max=z min=zAutoscale not enabled)r   r   r#  r   r"   r   )r   r1  r2  r#  max_min_s         r&   	autoscaler6  7  sW     **55J&&sC0
d&tfE$899
,
--r'   c                 J    t         j                  |       t        t              )zShutdown worker(s).)r   warningr   r	   )r   msgr/   s      r&   shutdownr:  D  s     NN3

r'   r   r   exchange_typer   z'<queue> [exchange [type [routing_key]]]c                      | j                   j                  | j                   j                  |||xs 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   r;  r   optionss         r&   add_consumerrA  M  sQ     ENN%%x2(KLCJL eW%&&r'   z<queue>c                 ~    | j                   j                  | j                   j                  |       t        d|       S )z9Tell worker(s) to stop consuming from task queue by name.zno longer consuming from )r   r>  cancel_task_queuer"   )r   r   _s      r&   cancel_consumerrE  _  s:     
NN((% )%122r'   c                     | j                   j                  rG| j                   j                  j                  D cg c]  }t        |j	                  d             c}S g S c c}w )z:List the task queues a worker is currently consuming from.T)recurse)r   task_consumerqueuesru   as_dict)r   r   s     r&   active_queuesrK  k  sZ     ~~##"^^99@@B U]]4]01 B 	BIBs   "A )F)FN)NNNrg   )NF)   
   r   )rM  )r   )NFN)NN)zGot shutdown from remote)Vr6   r  r  collectionsr   r   r   billiard.commonr   kombu.utils.encodingr   celery.exceptionsr   celery.platformsr	   r
   r   celery.utils.functionalr   celery.utils.logr   celery.utils.serializationr   r   celery.utils.timer   r3   r   r   ro   r   __all__r   r5   r   r   r"   r*   r   rG   rK   rO   rU   rW   re   requests__getitem__r`   r   __contains__r   rb   ry   r   rt   r[   rv   r   floatr   r   r   r   r   r   r   r   r   r   r   rm   rl   r   r   intr  r  r  r'  r*  r0  r6  r:  rA  rE  rK  r#   r'   r&   <module>r]     s   4 	  9 9 ( * , " 0 . ' 9 " # 
C 	H	2 5  H <44 % %
 
(I
&	'
2
2= '	 &2%:%:%F%F *99FF+==JJ '6	6$ ?3H	3Hl0 S/	0
A
A
 
|S1	2@!1	!1H 
vuo	?3.	.4 , ,
 	: 	: - - . . N N 
  
" % &
 - -
 '? (?
 ': (: }%E &E ~&& '&
 
-
@
@: 3-%S'9	:>
%
%0   c
		 * 	  *"	" 6 6 #,	%.	.     	#	S	#		
 8 =A!'' C.	3	3  r'   