Ë
    ™V.jªM  ã                   óü  — 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¬«      drd„«       Z)d „ Z* e'd!d"¬#«      d$„ «       Z+ejX                  jZ                  fd%„Z.ej^                  j`                  ejb                  j`                  fd&„Z2 e&d'd"¬#«      dsd(„«       Z3 e&d)d*¬#«      dsd+„«       Z4dsd,„Z5 e&d'd-e6fgd.¬/«      d0„ «       Z7 e&d1e6fd2e6fgd3¬4«      d5„ «       Z8 e&d1e6fd6e9fd7e9fgd8¬4«      dtd9„«       Z: e'«       d:„ «       Z; e&«       dud;„«       Z< e&«       d<„ «       Z= e&«       d=„ «       Z> e&«       d>„ «       Z? e'd¬?«      dud@„«       Z@ e'dA¬B«      dC„ «       ZA e'«       dD„ «       ZB e'dE¬F«      dG„ «       ZCdH„ ZD e'dI¬F«      dJ„ «       ZE e'dK¬F«      drdL„«       ZF e'dM¬F«      dN„ «       ZG e'dOdPdQ¬R«      dvdS„«       ZH e'dTdUe6fdVeIfdWeIfgdX¬Y«      dwdZ„«       ZJ e'«       d[„ «       ZK e'd\eIfgd]¬4«      dxd^„«       ZL e&d_eIfgd`¬4«      dyda„«       ZM e&d_eIfgd`¬4«      dydb„«       ZN e&«       dzdc„«       ZO e&ddeIfdeeIfgdf¬4«      d{dg„«       ZP e&«       d|dh„«       ZQ e&die6fdje6fdke6fdle6fgdm¬4«      	 	 dtdn„«       ZR e&die6fgdo¬4«      dp„ «       ZS e'«       dq„ «       ZTy)}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    úWC:\xampp\htdocs\tradingbinance\backend\.venv\Lib\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>._inner7   s‡   ø€ ØÒ/ 3§<¡<ˆLØÒF˜SŸ[™[Ò.¨B×5Ñ5Ó7×=Ñ=¸dÓCÀAÑFˆEØ%(ˆC�H‰H�\Ñ"Ü%6Ø�t˜W oØ�y $¨ó&2ˆC�H‰H�\Ñ"ñ Ø"%�—‘˜‘ØˆJr&   r"   )r-   r=   r   r   r   r   r   r   r   r   r>   s   `````````` r%   r,   zPanel._register2   s   ÿù€ ÷
		õ 		ð ˆr&   )	NNÚcontrolTg      ð?NNNN)	r4   Ú
__module__Ú__qualname__r5   r8   r9   Úclassmethodr/   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   r/   ©r.   s    r%   Úcontrol_commandrF   D   ó   € Ü�>‰>Ñ3˜yÐ3¨FÑ3Ð3r&   c                  ó0   — t        j                  dddi| ¤ŽS )Nr   Úinspectr"   rD   rE   s    r%   Úinspect_commandrJ   H   rG   r&   c                 óH   — t        | j                  j                  «       «      S )z6Information about Celery installation for bug reports.)r!   ÚappÚ	bugreportr   s    r%   ÚreportrN   N   s   € ô ˆe�i‰i×!Ñ!Ó#Ó$Ð$r&   Ú	dump_confz[include_defaults=False]Úwith_defaults)r   r   r   Fc                 óv   — t        | j                  j                  j                  |¬«      t        t
        ¬«      S )zList configuration.)rP   )Ú	keyfilterÚunknown_type_filter)r   rL   ÚconfÚtableÚ_wanted_config_keyr   )r   rP   r.   s      r%   rT   rT   T   s/   € ô �5—9‘9—>‘>×'Ñ'°mÐ'ÓDÜ/Ü'0ô2ð 2r&   c                 óJ   — t        | t        «      xr | j                  d«       S )NÚ__)Ú
isinstanceÚstrÚ
startswith)Úkeys    r%   rV   rV   `   s    € Ü�cœ3ÓÒ<¨¯©°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_taskrd   f   sK   € ô (¬
°3«Ô8óá8ˆCð 	�‰” Ó$ c§h¡h£jÐ1Ñ1Ø8ñð ùò 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_   r   s3   è ø€ ãˆð	Ù˜gÓ&Ó&ñ øô ò 	Ùð	üs   ‚%‰
“%–	"Ÿ%¡"¢%c                 ó(   —  || «      ry || «      ryy)NÚactiveÚreservedÚreadyr"   )ÚrequestÚ	is_activeÚis_reserveds      r%   ra   ra   {   s   € ñ �ÔØÙ	�WÔ	ØØr&   ri   c                 óž   — t        t        |«      xs g «      d}}t        | |||fi |¤Ž}t        |t        «      rd|v r|S t        d|› d�«      S )zÝRevoke 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
   Ú_revokerY   Údictr!   )r   ri   Ú	terminateÚsignalr.   Útask_idss         r%   Úrevokerx   …   s\   € ô œJ wÓ/Ò5°2Ó6¸ˆg€HÜ�u˜h¨	°6ÑD¸VÑD€HÜ�(œDÔ! d¨hÑ&6ØˆÜ��x�jÐ 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©rv   z were not terminatedz revoked)Ú_signalsÚsignumr   rY   Úlistr7   Úitemsr
   Úworker_stateÚrevoked_stampsÚgetr!   Úactive_requestsr   rr   Úhasattrr|   Úupdateru   ÚconsumerÚpool)r   ry   ru   rv   r.   r   ÚhÚheaderr|   Úupdated_stampsr…   Ú#terminated_scheme_to_stamps_mappingrc   Úexpected_header_keyÚexpected_header_valueÚactual_headerÚmatching_stamps_for_requests                    r%   Úrevoke_by_stamped_headersr’   ›   s¼  € ô& �_‰_˜VÒ3¤|Ó4€Fä�'œ4Ô Ù=DÓE¹W¸�1—7‘7˜3“< ‘? A§G¡G¨C£L°¡OÑ3¸WˆÐEà!Ÿ-™-ž/‰ˆ�Ü#¤L×$?Ñ$?×$CÑ$CÀFÓ$KÒ$QÈrÓRÔUYÔZdÐekÓZlÓUmÑmˆØ.<Œ×#Ñ# FÒ+ð *ñ Ü�H˜W˜IÐ%LÐMÓNÐNäœ<×7Ñ7Ó8€Oä*5´cÓ*:Ð'ó ˆä�3˜Õ! c§j£jà>E¿m¹m¾oÑ:Ð#Ð%:Ø&¨#¯*©*Ò4Ü,6Ð7LÓ,MÐ)Ü$.¨s¯z©zÐ:MÑ/NÓ$O�MÜ25°mÓ2DÄsÐK`ÓGaÑ2aÐ/â2Ø;Ð<OÑP×WÑWÐXsÔtØŸ™ e§n¡n×&9Ñ&9À&˜ÕIñ ?Nð	 ñ /Ü�H˜W˜IÐ%9Ð:Ó;Ð;Ü�Ð<Ð=¸XÐFÓGÐGùòC Fs   ².G'c                 óŠ  — t        |«      }t        «       }t        j                  j	                  |«       |råt        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)Úlenrr   r‚   Úrevokedr‡   r~   r   r   r_   r`   ÚaddÚloggerrb   ru   rˆ   r‰   r!   ÚformatÚjoin)
r   rw   ru   rv   r.   ÚsizeÚ
terminatedr   rn   Úidstrs
             r%   rs   rs   Õ   sú   € Üˆx‹=€DÜ“€Jä×Ñ×Ñ Ô)ÙÜ—‘ Ò!7¬<Ó8ˆÜ+¨HÖ5ˆGØ�z‰z Ò+Ø—‘˜wŸz™zÔ*Ü—‘Ð1°7·:±:¸vÔFØ×!Ñ! %§.¡.×"5Ñ"5¸fÐ!ÔEÜ�z“? dÓ*Ùð 6ñ ÜÐ0Ó1Ð1Ü�/×(Ñ(¨¯©°:Ó)>Ó?Ó@Ð@à�I‰I�hÓ€EÜ
‡K�KÐ.°Ô6Ø€Or&   rv   z <signal> [id1 [id2 [... [idN]]]])r   r   r   c                 ó    — t        | |d|¬«      S )z+Terminate task by task id (or list of ids).T)ru   rv   )rx   )r   rv   ri   r.   s       r%   ru   ru   í   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)züTell 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)   rL   Útasksr   rg   r—   r(   rˆ   Úreset_rate_limitsrb   r!   )r   rž   r   r.   Úexcs        r%   r   r   ÷   sÒ   € ð":ÜˆZÔð#Ø0:ˆ�	‰	�‰˜	Ñ"Ô-ð 
‡N�N×$Ñ$Ô&áÜ�‰Ð?ÀÔKÜÐ4Ó5Ð5ä
‡K�KÐ:Ø˜:ô'äÐ/Ó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)zÍTell 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)
rL   r¤   rg   r—   r(   r)   Úsoft_time_limitÚ
time_limitrb   r!   )r   rž   r¨   r§   r.   Útasks         r%   r«   r«     s�   € ð#Ø�y‰y�‰˜yÑ)ˆð  €DÔØ€D„Oä
‡K�KÐGØ˜4 ô'äÐ,Ó-Ð-øô ò #Ü�‰ÐDØ¨ð 	ô 	/ä�>Ó"Ò"ð#ús   ‚A Á,A;Á:A;c                 óF   — d| j                   j                  j                  iS )z Get current logical clock value.Úclock)rL   r®   r$   ©r   r.   s     r%   r®   r®   =  s   € ð �U—Y‘Y—_‘_×*Ñ*Ð+Ð+r&   c                 ó€   — | j                   j                  r(| j                   j                  j                  |||«       yy)z¦Hold election.

    Arguments:
        id (str): Unique election id.
        topic (str): Election topic.
        action (str): Action to take for elected actor.
    N)rˆ   ÚgossipÚelection)r   r`   ÚtopicÚactionr.   s        r%   r²   r²   C  s2   € ð ‡~�~×ÒØ�‰×Ñ×&Ñ& r¨5°&Õ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—   rb   r!   ©r   Ú
dispatchers     r%   Úenable_eventsrº   P  sb   € ð —‘×0Ñ0€JØ×Ò˜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—   rb   r!   r¸   s     r%   Údisable_eventsr½   [  sZ   € ð —‘×0Ñ0€JØ�×"Ñ"Ñ"Ø×Ñ×!Ñ! &Ô)Ü�‰Ð@Ô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Ä   f  s<   € ô ‡L�LÐ1Ô2Ø—‘×0Ñ0€JØ€J‡O�OÑM¨QÐM´,×2LÑ2LÓMr&   )r   c                 óJ  — || j                   k7  r”t        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—   rb   r‚   r•   r‡   ÚpurgeÚ_datarL   r®   Úforward)r   Ú	from_noder•   r.   s       r%   ÚhellorË   p  sy   € ð �E—N‘NÒ"Ü�‰�N IÔ.ÙÜ× Ñ ×'Ñ'¨Ô0ä×Ñ×"Ñ"Ô$ä#×+Ñ+×1Ñ1Ø—Y‘Y—_‘_×,Ñ,Ó.ñ
ð 	
ð #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Úpriorityrn   )ÚscheduleÚqueueÚentryr   rY   r   rØ   Ú	isoformatrÙ   rb   Ú
IndexErrorÚ	TypeError)rÕ   ÚwaitingÚarg0s      r%   rÔ   rÔ   ”  s‹   è ø€ Ø—>‘>×'Ô'ˆð
	Ø—=‘=×%Ñ% aÑ(ˆDô ˜$¤Õ(à37·8²8˜4Ÿ8™8×-Ñ-Ô/ÀØ '× 0Ñ 0Ø#Ÿy™y›{ñó ñ (øô œ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…   rb   )r   r.   Úreserved_tasksrn   s       r%   rl   rl   £  sZ   € ð 	�
‰
”<×1Ñ1Ó2Ø�
‰
”<×/Ñ/Ó0ñ	1ð ñ Øˆ	Ù*8Ó9©.˜wˆG�L‰L�N¨.Ñ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…   rb   )r   ré   r.   rn   s       r%   rk   rk   ¯  sG   € ð !Ÿ:™:¤l×&BÑ&BÔCóEÙC�ð �L‰L˜dˆLÕ#ØCñ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 )zìList 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    è ø€ ð "@Ù� D§O¡O°IÕ$>Œ™ù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{} [{}]Ú )ÚgetattrrZ   r�   r™   r˜   r=   )r¬   ÚfieldÚfieldsÚfrb   rí   s        €r%   Ú_extract_infoz!registered.<locals>._extract_infoÏ  sž   ø€ á@Mó
Ù@M°uÜ�t˜U DÓ)Ð5ð ”3”w˜t U¨DÓ1Ó2Ñ2Àð 	ð 
ñ Ø)/¯©¬Ó8© A�C—H‘H˜Q•K¨ˆDÐ8Ø×#Ñ# D§I¡I¨s¯x©x¸«~Ó>Ð>Ø�y‰yÐùò
ùò
 9s   †+BÁB)rL   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 rf   r"   )ÚvÚobjectss    €r%   Ú<lambda>zobjgraph.<locals>.<lambda>õ  s	   ø€ °Q¸'±\r&   )rÿ   Ú	highlightÚfilenamer
  )	ÚobjgraphÚImportErrorr—   rb   ÚtempfileÚNamedTemporaryFileÚby_typeÚshow_backrefsr=   )r   rþ   rÿ   r   Ú	_objgraphÚfhr  s         @r%   r  r  Þ  s³   ø€ ð;Û$ô ‡K�KÐ+¨TÔ2Ü	×	$Ñ	$¨GØ,2¸5õ
BØEGØ×#Ñ# DÓ)¨$¨3Ð/ˆØ×ÑØØÓ+AØ—W‘Wð 	 ô 	
ð
 ˜BŸG™GÐ$÷
Bñ 
Bøô ò ;ÜÐ9Ó:Ð:ð;ú÷
Bð 
Bú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Ø	‡M�M�s€MÔØ�<‰<‹>Ð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Ô%Ø�‰×-Ñ-¨q¨bÔ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)rL   rT   Úworker_pool_restartsrˆ   rÐ   Úreloadr!   r£   )r   Úmodulesr-  r+  r.   s        r%   Úpool_restartr/  ,  sL   € ð ‡y�y‡~�~×*Ò*Ø�‰×!Ñ!×(Ñ(¨°&À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   r0  r1  r"  Úmax_Úmin_s         r%   Ú	autoscaler5  6  sW   € ð —‘×*Ñ*×5Ñ5€JÙØ×&Ñ& s¨CÓ0‰
ˆˆdÜÐ& t f¨E°$°Ð8Ó9Ð9Ü
Ð,Ó
-Ð-r&   c                 óB   — t         j                  |«       t        d«      ‚)zShutdown worker(s).r   )r—   Úwarningr   )r   Úmsgr.   s      r%   Úshutdownr9  C  s   € ô ‡N�N�3ÔÜ
˜Ó
Ð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_consumerr@  L  sQ   € ð €E‡N�N×ÑØ�‰×%Ñ%Øˆx˜Ò2¨(°KñLàCJòLô �˜e˜WÐ%Ó&Ð&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_consumerrD  ^  s:   € ð 
‡N�N×ÑØ�‰×(Ñ(¨%ôô Ð)¨%¨Ð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Úqueuesrt   Úas_dict)r   rÛ   s     r%   Úactive_queuesrJ  j  s_   € ð ‡~�~×#Ò#à"Ÿ^™^×9Ñ9×@Ò@óBÙ@�Eô �U—]‘]¨4�]Ó0Õ1Ø@ñBð 	Bà€IùòBs   ¹"A )F)FN)NNNrf   )NF)éÈ   é
   r   )rL  )r   )NFN)NN)zGot shutdown from remote)Ur5   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   r2   r   r‚   rn   r   Ú__all__rù   r4   r—   r   r!   r)   r   rF   rJ   rN   rT   rV   rd   ÚrequestsÚ__getitem__r_   r…   Ú__contains__rå   ra   rx   r’   rs   rZ   ru   r   Úfloatr«   r®   r²   rº   r½   rÄ   rË   rÎ   rÑ   rÖ   rÔ   rl   rk   r•   rý   Úintr  r  r  r&  r)  r/  r5  r9  r@  rD  rJ  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ó	ð!1ñH Ø˜Ð
˜v u˜o°¸¨Ð	?Ø3ôò.ó	ð.ñ4 Óñ,ó ð,ñ
 Óò	:ó ð	:ñ Óñ-ó ð-ñ Óñ.ó ð.ñ ÓñNó ðNñ ˜Ôò
ó  ð
ñ"  Ô%ñó &ðñ
 Óñ-ó ð-ñ
 �Ô'ñ?ó (ð?ò
ñ �Ô'ñ:ó (ð:ñ �}Ô%òEó &ðEñ �~Ô&ñ&ó 'ð&ñ
 Ø
ØØ-ôò
@óð
@ñ: ØØ�3ˆ-˜% ˜¨°SÐ'9Ð	:Ø>ôò
%óð
%ñ0 Óñó ðñ Ø�cÐ
Ð	Øôòó	ðñ Ø�ˆ*ˆØôò ó	ð ñ Ø�ˆ*ˆØôò"ó	ð"ñ Óò6ó ð6ñ Ø�#ˆ,˜ ˜Ð	%Øôò.ó	ð.ñ Óòó ðñ à	�#ˆØ	�SÐØ	˜#ÐØ	˜Ðð	
ð 8ôð =AØ!ò'óð'ñ Ø�Cˆ.Ð	Øôñ3ó	ð3ñ Óñó ñr&   