ó
P'—^c           @@  s¤  d  Z  d d l m Z d d l Z d d l 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 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 g Z d9 Z e e ƒ Z  d e
 f d „  ƒ  YZ! d „  Z" e! j# d „  ƒ Z$ e! j# e% d d „ ƒ Z' e! j# d „  ƒ Z( e! j# d „  ƒ Z) e! j# d „  ƒ Z* e! j# d „  ƒ Z+ e! j# d „  ƒ Z, e! j# d d d d „ ƒ Z- e! j# e% d „ ƒ Z. e! j# e% d „ ƒ Z/ e! j# e% d  „ ƒ Z0 e! j# d! „  ƒ Z1 e! j# d" d# d$ d% „ ƒ Z2 e! j# d& „  ƒ Z3 e! j# d# d' „ ƒ Z4 e! j# d( „  ƒ Z5 e! j# d) „  ƒ Z6 e! j# d d* „ ƒ Z7 e! j# d e% d+ „ ƒ Z8 e! j# d, „  ƒ Z9 e! j# d d- „ ƒ Z: e! j# d d. „ ƒ Z; e! j# d e% d d/ „ ƒ Z< e! j# d d d0 „ ƒ Z= e! j# d1 d2 „ ƒ Z> e! j# d d d d3 „ ƒ Z? e! j# d d4 „ ƒ Z@ e! j# d5 „  ƒ ZA d6 „  ZB e! j# e% d7 „ ƒ ZC e! j# d d8 „ ƒ ZD d S(:   sT   
    celery.worker.control
    ~~~~~~~~~~~~~~~~~~~~~

    Remote control commands.

i    (   t   absolute_importN(   t	   safe_repr(   t   WorkerShutdown(   t   UserDictt   itemst   string_t(   t   signals(   t	   timeutils(   t
   maybe_list(   t
   get_logger(   t   jsonifyi   (   t   state(   t   revoked(   t   Requestt   Panelt   exchanget   routing_keyt
   rate_limitc           B@  s#   e  Z e ƒ  Z e d d  „ ƒ Z RS(   c         C@  s   | |  j  | p | j <| S(   N(   t   datat   __name__(   t   clst   methodt   name(    (    s7   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/control.pyt   register$   s    N(   R   t
   __module__t   dictR   t   classmethodt   NoneR   (    (    (    s7   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/control.pyR   !   s   	c         c@  sY   d t  |  ƒ } } x? | D]7 } | j |  k r | V| d 7} | | k rQ PqQ q q Wd  S(   Ni    i   (   t   lent   id(   t   idst   requestst   foundt   totalt   request(    (    s7   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/control.pyt   _find_requests_by_id*   s    
c         K@  sd   t  | ƒ } d „  } t d „  t | t j ƒ Dƒ ƒ } | j t d „  t | t j ƒ Dƒ ƒ ƒ | S(   Nc         S@  s   |  | j  ƒ  f S(   N(   t   info(   R   t   req(    (    s7   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/control.pyt   reqinfo8   s    c         s@  s*   |  ]  } | j  d  | j ƒ  f f Vq d S(   t   reservedN(   R   R$   (   t   .0R%   (    (    s7   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/control.pys	   <genexpr>;   s   c         s@  s*   |  ]  } | j  d  | j ƒ  f f Vq d S(   t   activeN(   R   R$   (   R(   R%   (    (    s7   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/control.pys	   <genexpr>?   s   (   R   R   R#   t   worker_statet   reserved_requestst   updatet   active_requests(   R   R   t   kwargsR&   t   reqs(    (    s7   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/control.pyt
   query_task4   s    			c         K@  sM  t  t | ƒ p g  ƒ d
 } } t | ƒ } t  ƒ  } t j | ƒ | rt j | pV d ƒ } t  t | t	 j
 ƒ ƒ }	 xu |	 D]m }
 |
 j | k r{ | j |
 j ƒ t j d |
 j | ƒ |
 j |  j j d | ƒt | ƒ | k rè Pqè q{ q{ W| sý i d d 6Si d j d j | ƒ ƒ d 6Sd j | ƒ } t j d | ƒ i d	 j | ƒ d 6S(   s   Revoke task by task id.t   TERMs   Terminating %s (%s)t   signals   terminate: tasks unknownt   oks   terminate: {0}s   , s   Tasks flagged as revoked: %ss   tasks {0} flagged as revokedN(   t   setR   R   R   R   R,   t   _signalst   signumR#   R*   R+   R   t   addt   loggerR$   t	   terminatet   consumert   poolt   formatt   join(   R   t   task_idR9   R2   R.   t   task_idst   sizet
   terminatedR6   R   R"   t   idstr(    (    s7   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/control.pyt   revokeH   s,    	c         C@  s   i |  j  j ƒ  d 6S(   NR3   (   t   appt	   bugreport(   R   (    (    s7   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/control.pyt   reportj   s    c         C@  sW   |  j  j } | j rL d | j k rL | j j d ƒ t j d ƒ i d d 6Si d d 6S(   Nt   tasks)   Events of group {task} enabled by remote.s   task events enabledR3   s   task events already enabled(   R:   t   event_dispatchert   groupsR7   R8   R$   (   R   t
   dispatcher(    (    s7   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/control.pyt   enable_eventso   s    c         C@  sN   |  j  j } d | j k rC | j j d ƒ t j d ƒ i d d 6Si d d 6S(   NRG   s*   Events of group {task} disabled by remote.s   task events disabledR3   s   task events already disabled(   R:   RH   RI   t   discardR8   R$   (   R   RJ   (    (    s7   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/control.pyt   disable_eventsy   s    c         C@  s6   t  j d ƒ |  j j } | j d d d t j d  S(   Ns   Heartbeat requested by remote.s   worker-heartbeatt   freqi   (   R8   t   debugR:   RH   t   sendR*   t   SOFTWARE_INFO(   R   RJ   (    (    s7   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/control.pyt	   heartbeatƒ   s    c         K@  sÍ   y t  j | ƒ Wn$ t k
 r7 } i d j | ƒ d 6SXy | |  j j | _ Wn/ t k
 r€ t j	 d | d t
 ƒi d d 6SX|  j j ƒ  | s¯ t j d | ƒ i d d 6St j d	 | | ƒ i d
 d 6S(   s¨   Set new rate limit for a task type.

    See :attr:`celery.task.base.Task.rate_limit`.

    :param task_name: Type of task.
    :param rate_limit: New rate limit.

    s    Invalid rate limit string: {0!r}t   errors&   Rate limit attempt for unknown task %st   exc_infos   unknown tasks)   Rate limits disabled for tasks of type %ss    rate limit disabled successfullyR3   s(   New rate limit for tasks of type %s: %s.s   new rate limit set successfully(   R   t   ratet
   ValueErrorR<   RD   t   tasksR   t   KeyErrorR8   RS   t   TrueR:   t   reset_rate_limitsR$   (   R   t	   task_nameR   R.   t   exc(    (    s7   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/control.pyR   Š   s"    		
c         K@  sy   y |  j  j | } Wn/ t k
 rE t j d | d t ƒi d d 6SX| | _ | | _ t j d | | | ƒ i d d 6S(   Ns-   Change time limit attempt for unknown task %sRT   s   unknown taskRS   s5   New time limits for tasks of type %s: soft=%s hard=%ss   time limits set successfullyR3   (	   RD   RW   RX   R8   RS   RY   t   soft_time_limitt
   time_limitR$   (   R   R[   t   hardt   softR.   RG   (    (    s7   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/control.pyR^   ¬   s    				c         @  s   ‡  ‡ f d †  } t  | ƒ  ƒ S(   Nc          3@  s¥   xž ˆ j  j j j D]Š }  y |  j j d } Wn t t f k
 rI q q Xt | t	 ƒ r i | j
 rt | j
 j ƒ  n d  d 6|  j d 6| j d ˆ  ƒ d 6Vq q Wd  S(   Ni    t   etat   priorityt   safeR"   (   R:   t   timert   schedulet   queuet   entryt   argst
   IndexErrort	   TypeErrort
   isinstanceR   Ra   t	   isoformatR   Rb   R$   (   t   waitingt   arg0(   Rc   R   (    s7   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/control.pyt   prepare_entriesÀ   s    "
(   t   list(   R   Rc   R.   Ro   (    (   Rc   R   s7   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/control.pyt   dump_schedule½   s    c         K@  s=   t  j t  j } | s g  Sg  | D] } | j d | ƒ ^ q! S(   NRc   (   R*   R+   R-   R$   (   R   Rc   R.   R'   R"   (    (    s7   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/control.pyt   dump_reservedÎ   s    c         K@  s&   g  t  j D] } | j d | ƒ ^ q
 S(   NRc   (   R*   R-   R$   (   R   Rc   R.   R"   (    (    s7   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/control.pyt   dump_activeÖ   s    c         K@  s   |  j  j j ƒ  S(   N(   R:   t
   controllert   stats(   R   R.   (    (    s7   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/control.pyRu   Ü   s    iÈ   i
   R   c         @  s³   y d d  l  } Wn t k
 r/ t d ƒ ‚ n Xd | f GHt j d d d d d t ƒ S } | j | ƒ |  ‰  | j ˆ  d	 | d
 ‡  f d †  d | j ƒi | j d 6SWd  QXd  S(   Ni    s   Requires the objgraph librarys   Dumping graph for type %rt   prefixt   cobjgt   suffixs   .pngt   deletet	   max_deptht	   highlightc         @  s
   |  ˆ  k S(   N(    (   t   v(   t   objects(    s7   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/control.pyt   <lambda>í   t    t   filename(   t   objgrapht   ImportErrort   tempfilet   NamedTemporaryFilet   Falset   by_typet   show_backrefsR   (   R   t   numRz   t   typeR   t   fh(    (   R}   s7   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/control.pyR   á   s    
c         K@  s   d d l  m } | ƒ  S(   Ni    (   t
   sample_mem(   t   celery.utils.debugR‹   (   R   R.   R‹   (    (    s7   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/control.pyt	   memsampleó   s    c         K@  s3   d d l  m } t j ƒ  } | d | ƒ | j ƒ  S(   Ni    (   t   memdumpt   file(   RŒ   RŽ   t   iot   StringIOt   getvalue(   R   t   samplesR.   RŽ   t   out(    (    s7   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/control.pyRŽ   ù   s    c         K@  s   i |  j  j j d 6S(   Nt   clock(   RD   R•   t   value(   R   R.   (    (    s7   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/control.pyR•     s    c         K@  s   t  t j ƒ S(   N(   Rp   R*   R   (   R   R.   (    (    s7   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/control.pyt   dump_revoked  s    c         K@  s`   | |  j  k r\ t j d | ƒ | r8 t j j | ƒ n  i t j j d 6|  j j j	 ƒ  d 6Sd  S(   Ns   sync with %sR   R•   (
   t   hostnameR8   R$   R*   R   R,   t   _dataRD   R•   t   forward(   R   t	   from_nodeR   R.   (    (    s7   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/control.pyt   hello  s    c         @  sj   |  j  j } ˆ  p t ‰  | r$ | n d „  | Dƒ } ‡  f d †  } g  t | ƒ D] } | | | ƒ ^ qP S(   Nc         s@  s$   |  ] } | j  d  ƒ s | Vq d S(   s   celery.N(   t
   startswith(   R(   RG   (    (    s7   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/control.pys	   <genexpr>  s    c         @  sm   t  ‡  f d †  ˆ Dƒ ƒ } | rf g  t | ƒ D] } d j | ƒ ^ q/ } d j ˆ  j d j | ƒ ƒ Sˆ  j S(   Nc         3@  sE   |  ]; } t  ˆ  | d  ƒ d  k	 r | t t  ˆ  | d  ƒ ƒ f Vq d  S(   N(   t   getattrR   t   str(   R(   t   field(   RG   (    s7   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/control.pys	   <genexpr>  s   t   =s	   {0} [{1}]t    (   R   R   R=   R<   R   (   RG   t   fieldst   fR$   (   t   taskinfoitems(   RG   s7   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/control.pyt   _extract_info  s    ((   RD   RW   t   DEFAULT_TASK_INFO_ITEMSt   sorted(   R   R¥   t   builtinsR.   t   regRW   R¦   RG   (    (   R¥   s7   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/control.pyt
   dump_tasks  s    	c         K@  s   i d d 6S(   Nt   pongR3   (    (   R   R.   (    (    s7   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/control.pyt   ping)  s    c         K@  sV   |  j  j j r( |  j  j j j | ƒ n# |  j  j j | ƒ |  j  j | ƒ i d d 6S(   Ns   pool will growR3   (   R:   Rt   t
   autoscalert   force_scale_upR;   t   growt   _update_prefetch_count(   R   t   nR.   (    (    s7   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/control.pyt	   pool_grow.  s
    c         K@  sW   |  j  j j r( |  j  j j j | ƒ n$ |  j  j j | ƒ |  j  j | ƒ i d d 6S(   Ns   pool will shrinkR3   (   R:   Rt   R®   t   force_scale_downR;   t   shrinkR±   (   R   R²   R.   (    (    s7   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/control.pyt   pool_shrink8  s
    c         K@  sF   |  j  j j r6 |  j j j | | d | ƒi d d 6St d ƒ ‚ d  S(   Nt   reloaders   reload startedR3   s   Pool restarts not enabled(   RD   t   conft   CELERYD_POOL_RESTARTSR:   Rt   t   reloadRV   (   R   t   modulesRº   R·   R.   (    (    s7   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/control.pyt   pool_restartB  s    c         C@  sT   |  j  j j } | rD | j | | ƒ \ } } i d j | | ƒ d 6St d ƒ ‚ d  S(   Ns   autoscale now max={0} min={1}R3   s   Autoscale not enabled(   R:   Rt   R®   R,   R<   RV   (   R   t   maxt   minR®   t   max_t   min_(    (    s7   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/control.pyt	   autoscaleK  s
    s   Got shutdown from remotec         K@  s   t  j | ƒ t | ƒ ‚ d  S(   N(   R8   t   warningR   (   R   t   msgR.   (    (    s7   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/control.pyt   shutdownT  s    c         K@  s0   |  j  j | | | | |  i d j | ƒ d 6S(   Ns   add consumer {0}R3   (   R:   t   add_task_queueR<   (   R   Rf   R   t   exchange_typeR   t   options(    (    s7   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/control.pyt   add_consumerZ  s    
c         K@  s$   |  j  j | ƒ i d j | ƒ d 6S(   Ns   no longer consuming from {0}R3   (   R:   t   cancel_task_queueR<   (   R   Rf   t   _(    (    s7   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/control.pyt   cancel_consumerb  s    c         C@  sB   |  j  j r> g  |  j  j j D] } t | j d t ƒ ƒ ^ q Sg  S(   s;   Return information about the queues a worker consumes from.t   recurse(   R:   t   task_consumert   queuesR   t   as_dictRY   (   R   Rf   (    (    s7   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/control.pyt   active_queuesh  s    /c         C@  s)   t  |  t ƒ o( |  j ƒ  o( |  j d ƒ S(   Nt   __(   Rk   R   t   isupperR   (   t   key(    (    s7   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/control.pyt   _wanted_config_keyq  s    c         K@  s(   t  |  j j j d | ƒ d t d t ƒS(   Nt   with_defaultst	   keyfiltert   unknown_type_filter(   R
   RD   R¸   t   tableRÔ   R   (   R   RÕ   R.   (    (    s7   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/control.pyt	   dump_confw  s    c         K@  s,   |  j  j r( |  j  j j | | | ƒ n  d  S(   N(   R:   t   gossipt   election(   R   R   t   topict   actionR.   (    (    s7   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/control.pyRÛ   ~  s    (   R   R   R   (E   t   __doc__t
   __future__R    R   Rƒ   t   kombu.utils.encodingR   t   celery.exceptionsR   t   celery.fiveR   R   R   t   celery.platformsR   R5   t   celery.utilsR   t   celery.utils.functionalR   t   celery.utils.logR	   R
   R   R   R*   R   t   jobR   t   __all__R§   R   R8   R   R#   R   R0   R…   R   RC   RF   RK   RM   RR   R   R^   Rq   Rr   Rs   Ru   R   R   RŽ   R•   R—   Rœ   R«   R­   R³   R¶   R¼   RÁ   RÄ   RÈ   RË   RÐ   RÔ   RÙ   RÛ   (    (    (    s7   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/control.pyt   <module>   sŠ   			
!

"					