
    `f)F                         d Z ddlZddlZddl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mZ dZdZdZdZdZdZdZdZdZ G d d          Z G d dej                  Zd Z ddZ!e"dk    r e!             dS dS )z0Graphical monitor of Celery events using curses.    N)datetime)count)ceil)wrap)time)VERSION_BANNERstates)app_or_default)abbrabbrtask)CursesMonitorevtop      $            zGevents: {s.event_count} tasks:{s.task_count} workers:{w_alive}/{w_all}
c                      e Zd ZdZi ZdZdZdZdZdZ	e
j        Ze
j        ZdZdZdZd	e Zd
Zd+dZd Zed             Zed             Zed             Zed             Zed             Zd Zd Zd Zd,dZ e
j!        de
j"        de
j#        diZ$d Z%d+dZ&d Z'd Z(d Z)d Z*d  Z+d! Z,d" Z-d# Z.d$ Z/d% Z0d& Z1d' Z2d( Z3ed)             Z4ed*             Z5dS )-r   z#A curses based Celery task monitor.N
   r   z
Selected: zWorkers online: zKeys: z9j:down k:up i:info t:traceback r:result c:revoke ^c: quitzcelery events zInfo: c                     || _         |p| j        | _        || _        | j        | j        | j        | j        | j        | j        | j	        d}t          |fi | j        | _        t          j                    | _        d S )N)JKCTRIL)appkeymapstatemove_selection_downmove_selection_uprevoke_selectionselection_tracebackselection_resultselection_infoselection_rate_limitdict	threadingRLocklock)selfr!   r   r    default_keymaps        I/var/www/html/env/lib/python3.11/site-packages/celery/events/cursesmon.py__init__zCursesMonitor.__init__3   s    +
)'&)&$*
 
 >99T[99O%%			    c           
         | j         }|dz
  t          z
  dz
  t          z
  }|dz
  t          z
  dz
  t          z
  }|t
          k     r|}	nt
          }	||	z
  dz
  }t          t          |dz                      }
||
z
  dz
  }t          ||	          	                    |	          }t          ||          	                    |          }t          ||
          	                    |
          }t          |t                    	                    t                    }|	                    t                    }| d| d| d| d| d
}| j        t          |d |                   | _        |d |         S )N   g       @ )display_widthSTATE_WIDTHTIMESTAMP_WIDTHMIN_TASK_WIDTHMIN_WORKER_WIDTH
UUID_WIDTHintr   r   ljustr   screen_widthlen)r-   uuidtaskworker	timestampr!   mxdetail_width
uuid_space
uuid_width
task_widthworker_widthrows                r/   
format_rowzCursesMonitor.format_rowC   sl    Av+a//A!A%6:=MM

""#JJ#J#j014lS01122
#j014D*%%++J77fl++11,??j))//
;;UK((..{;;OOO44	<<<<<<	<<E<<<$ #CHD3B3xr1   c                 >    | j                                         \  }}|S Nwingetmaxyxr-   _rC   s      r/   r=   zCursesMonitor.screen_width^   s    !!##2	r1   c                 >    | j                                         \  }}|S rL   rM   r-   myrQ   s      r/   screen_heightzCursesMonitor.screen_heightc   s    !!##A	r1   c                 N    | j                                         \  }}|t          z
  S rL   )rN   rO   BORDER_SPACINGrP   s      r/   r5   zCursesMonitor.display_widthh   s$    !!##2N""r1   c                 D    | j                                         \  }}|dz
  S )Nr   rM   rS   s      r/   display_heightzCursesMonitor.display_heightm   s"    !!##ABwr1   c                     | j         S rL   )rY   r-   s    r/   limitzCursesMonitor.limitr   s    ""r1   c                 v    | j         sdS t          | j                   D ]\  }}| j        |d         k    r|c S dS Nr   )tasks	enumerateselected_task)r-   ies      r/   find_positionzCursesMonitor.find_positionv   sS    z 	1dj)) 	 	DAq!QqT)) *qr1   c                 0    |                      d           d S )Nmove_selectionr[   s    r/   r#   zCursesMonitor.move_selection_up~   s    Br1   c                 0    |                      d           d S )Nr3   rg   r[   s    r/   r"   z!CursesMonitor.move_selection_down   s    Ar1   r3   c                     | j         sd S |                                 }	 | j         ||z            d         | _        d S # t          $ r | j         d         d         | _        Y d S w xY wr^   )r_   rd   ra   
IndexError)r-   	directionposs      r/   rh   zCursesMonitor.move_selection   s|    z 	F  ""	2!%C)O!<Q!?D 	2 	2 	2!%Aq!1D	2s   < "A"!A"r   r   r   c                 
   	 | j                                                                         }n# t          $ r Y d S w xY w| j                            |          p|}| j                            |          }| |             d S d S rL   )rN   getkeyupper	Exceptionkeyaliasgetr    )r-   keyhandlers      r/   handle_keypresszCursesMonitor.handle_keypress   s    	(//##))++CC 	 	 	FF	m$$++//#&&GIIIII s   +. 
<<c                 h   | j                                          | j                                         \  }}t          d          x}}|rP| j                             t          |          d|t          j        t          j        z             t          |            |||t          |                     | j                             |dz
  ddt          j                   | j         	                                 	 	 | j         
                                                                S # t          $ r Y nw xY w=)N   r   r3   r   zPress any key to continue...)rN   eraserO   r   addstrnextcursesA_BOLDA_UNDERLINErefreshro   rp   rq   )r-   callbacktitlerT   rC   y
blank_lines          r/   alertzCursesMonitor.alert   s(   ""$$Bq!J 	HOODGGQ"MF,>>@ @ @Ra!!!Q#A	' 	' 	'	x((..000   	s   8*D# #
D0/D0c           	         | j         st          j                    S | j        j        | j                  }|j        st          j                    S | j                                        \  }}d}| j                            |dz
  d|t          j	        t          j
        z             | j                            |dz
  t          |          dz   d|t          |          z
  z             |                     |dz
  dt          |          z             }|rP| j        j                            |j        |                                d          }|                     |           d S d S )NzNew rate limit: rx   r   r4   Treply)ra   r|   beepr!   r_   namerN   rO   rz   r}   r~   r>   readliner   control
rate_limitstripalert_remote_control_reply)r-   r@   rT   rC   rrlimitr   s          r/   r(   z"CursesMonitor.selection_rate_limit   s9   ! 	!;== z 23y 	!;== ""$$BQ1fmf6H&HIIIQA
C2A;,?@@@rAvq3q66z22 	3H$//	06d 0 L LE++E22222	3 	3r1   c                 >      fd}                      |d          S )Nc           	         t          |          }
sKj                            t          |          ddt          j        t	          j        d          z              d S 
D ]}t          |          }t          |                                          \  }}| d}j                            |d|t          j                   t          j        }d}	d|v r |d         }	|t	          j        d          z  }n#d|v r|d         }	|t	          j        d          z  }j                            |dt          |          z   |	|           d S )Nr   z#No replies received in 1s deadline.rx   :  errorok)
r   rN   rz   r{   r|   r}   
color_pairitemsA_NORMALr>   )rT   rC   xsr   subreplycurlinehostresponseattrtextr   r-   s             r/   r   z:CursesMonitor.alert_remote_control_reply.<locals>.callback   sJ   b		A GGQ EMF$5a$8$88   ! D Dq''!%hnn&6&6!7!7h{{{D&-@@@h&&#G,DF-a000DDX%%#D>DF-a000DSYYdCCCCD Dr1   zRemote Control Command Replies)r   )r-   r   r   s   `` r/   r   z(CursesMonitor.alert_remote_control_reply   s?    	D 	D 	D 	D 	D 	D2 zz($DEEEr1   c                 8   d}t          j                     	 d}	 | j                            |||z             }|dk    r/|dt           j        fv rn|dv rd}n|t          |          z  }|dz  }Tt          j                     n# t          j                     w xY w|S )Nr   r   r3   rf   r   )   )r|   echorN   getch	KEY_ENTERchrnoecho)r-   xr   bufferrb   chs         r/   r   zCursesMonitor.readline   s    	A	X^^Aq1u--88b&"2333U{{!#c"gg%FFA	 MOOOOFMOOOOs   AB Bc                     | j         st          j                    S | j        j                            | j         d          }|                     |           d S )NTr   )ra   r|   r   r   r   revoker   )r-   r   s     r/   r$   zCursesMonitor.revoke_selection   sS    ! 	!;==  ''(:$'GG''.....r1   c                 \      j         sd S  fd}                     |d j                    S )Nc                    j                                         \  }} t          |          }j        j        j                 }|                    dg          }d|                    dd           fd|                    dd           fgt          |	                                          z   }|D ]1\  }}|	t          |          }t          |          }	|dz   }
j                             |	d|
t          j                   t          || dz
            }t!          |          dk    rYj                             |	t!          |
          dz   t#          |d	         j        t!          |
          dz   z
                       |D ]\}t          |          }||dz
  k    rd
}j                             |dt#          d|z   j        dz
            t          j                   ]3d S )Nr!   )extraargskwargsr   r   rx   r3   r   z	    [...]z    r   )rN   rO   r   r!   r_   ra   infopoplistr   strr{   rz   r|   r}   r   r>   r   r=   r   )rC   rT   r   r   r@   r   	infoitemsrt   valuer   keyswrappedsublinenextyr-   s                 r/   alert_callbackz4CursesMonitor.selection_info.<locals>.alert_callback   s   X&&((FBb		A:#D$67D99G99--D&$//0488Hd334 TZZ\\""#I (  
U;E

q''TzD&-@@@ub1f--w<<1$$HOOTQWQZ!.#d))a-@B BC C C C
 $+   $Q BF??&7G!1 7!2D4E4IJJ"O   	 r1   zTask details for ra   r   r-   r   s   ` r/   r'   zCursesMonitor.selection_info   sV    ! 	F	 	 	 	 	B zzD0BDD
 
 	
r1   c                       j         st          j                    S  j        j         j                  j        t
          j        vrt          j                    S  fd}                     |d j                    S )Nc                     t          |          }j                            d          D ]+}j                            t          |          d|           ,d S )N
r   )r   	tracebacksplitrN   rz   r{   )rT   rC   r   r   liner-   r@   s        r/   r   z9CursesMonitor.selection_traceback.<locals>.alert_callback%  sX    b		A,,T22 2 2QD11112 2r1   zTask Exception Traceback for )ra   r|   r   r!   r_   r	   EXCEPTION_STATESr   )r-   r   r@   s   ` @r/   r%   z!CursesMonitor.selection_traceback  s    ! 	!;== z 23:V444;== 	2 	2 	2 	2 	2 	2
 zz@D,>@@
 
 	
r1   c                 \      j         sd S  fd}                     |d j                    S )Nc                    t          |          }j        j        j                 }t	          |dd           pt	          |dd           }t          |pd|dz
            D ]+}j                            t          |          d|           ,d S )Nresult	exceptionr   rx   r   )	r   r!   r_   ra   getattrr   rN   rz   r{   )rT   rC   r   r   r@   r   r   r-   s          r/   r   z6CursesMonitor.selection_result.<locals>.alert_callback3  s    b		A:#D$67DdHd33 7dK66 V\r2622 2 2QD11112 2r1   zTask Result for r   r   s   ` r/   r&   zCursesMonitor.selection_result/  sU    ! 	F	2 	2 	2 	2 	2 zz3t133
 
 	
r1   c                 \   | j                             |j                  }t          j        }|j        | j        k    rt          j        }t          j	        |j
        pt                                }|                    d          }|j        r|j        j        nd}|                     |j        |j        |||j                  }| j                            |t&          ||           |rG| j                            |t)          |          t*          z
  t,          z   dz
  |j        ||z             d S d S )Nz%H:%M:%Sz*NONE*r3   )state_colorsrs   r!   r|   r   r?   ra   
A_STANDOUTr   utcfromtimestamprB   r   strftimerA   hostnamerJ   r   rN   rz   LEFT_BORDER_OFFSETr>   r6   rW   )	r-   linenor@   state_colorr   rB   timefr   r   s	            r/   display_task_rowzCursesMonitor.display_task_row@  s    '++DJ779***$D-N$dff
 
	 "":..+/;D4;''Hty$)'$dj2 2 	 2D$??? 	<HOOFII3nDqH Jd(:< < < < <	< 	<r1   c                 ^   | j         5  | j        }|                                  t          }t	          d          x}}|                                \  }}|                                 |                    dt          j	        d                     |
                                 |                    d|| j        t          j        t          j	        d          z             t          |           |                    t          |          ||                     ddddd	          t          j        t          j        z             | j        }|rQt'          |          D ]A\  }\  }}	|| j        k    r n-|	j        rt          |          }
|                     |
|	           Bt          |           |                    |d
z
  |t          j        | j        dz
             | j        r|                    |dz
  || j        t          j                   d}d}	 | j        j        | j                 }|                                }d|v rd                    |d                   |d<   d|v rt?          |d         d          |d<   d                     d |!                                D                       }d}n# tD          $ r Y nw xY wt?          || j        tG          | j                  z
  dz
  |          }|                    |dz
  |tG          | j                  z   |           ||v r\tG          |          tG          |          z
  }|                    |dz
  |tG          | j                  z   |z   |t          j                   n%|                    |dz
  |dt          j$                   | j%        r|                    |dz
  || j&        t          j                   |                    |dz
  |tG          | j&                  z   d                     tO          | j%                            t          j$                   n|                    |dz
  |d           |                    |dz
  || j(        t          j                   |                    |dz
  |tG          | j(                  z   tR                              | j        tG          d | j        j%        *                                D                       tG          | j        j%                            t          j                   | +                    |dz
  || j,        t          j                   | +                    |dz
  |tG          | j,                  z   | j-        t          j                   |.                                 d d d            d S # 1 swxY w Y   d S )Nrx   r4   r3      UUIDTASKWORKERTIMESTATE   r   zMissing extended infor   runtimez{:.2f}r   r   c              3   *   K   | ]\  }}| d | V  dS )=N ).0rt   r   s      r/   	<genexpr>z%CursesMonitor.draw.<locals>.<genexpr>  sH       $ $&C (((($ $ $ $ $ $r1   z... -> key izNo task selectedz, zNo workers discovered.r   c                      g | ]}|j         	|S r   alive)r   ws     r/   
<listcomp>z&CursesMonitor.draw.<locals>.<listcomp>  s.     !- !- !-q$%G!- !- !- !-r1   )sw_alivew_all)/r,   rN   rv   r   r   rO   ry   bkgdr|   r   borderrz   greetA_DIMr{   rJ   r}   r~   r_   r`   rY   r?   r   hline	ACS_HLINEr=   ra   selected_strr!   r   formatr   joinr   KeyErrorr>   r   workers
online_strsortedinfo_strSTATUS_SCREENvaluessafe_add_str
help_titlehelpr   )r-   rN   r   r   r   rT   rQ   r_   rI   r@   r   r   detail	selectioninfowin	detailposs                   r/   drawzCursesMonitor.drawT  s   Y U	 U	(C  """"A"1XX%A
LLNNEBIIKKKHHS&+A..///JJLLLJJq!TZ8I!8L8L)LMMMJJtAww4??663;VW$N $N}v'99; ; ; JE 8&/&6&6 8 8NC!TT000y )!%a))&$7777 IIb1fa!143Dq3HIII ! K

261d&7GGG., $
 01C DI %>>++D D((*2//$y/*J*JY4'')-d8nb)A)AX88 $ $*.**,,$ $ $  D ,FF     D t#03t7H3I3IIAM%' ' 

261s4+<'='=#=wGGGW$$ #Gs6{{ :IJJrAvq3t/@+A+A'AI'M%v}6 6 6 

261&8&/JJJ | @

261dov}EEE

261s4?';';#;99VDL%9%9::FOM M M M 

261&>??? JJrAvq$-???JJQC...$$j !- !-DJ,>,E,E,G,G !- !- !- . .dj011	 %   	 	 	 b1fa&-HHHb1fa#do*>*>&>	$l, , ,KKMMMkU	 U	 U	 U	 U	 U	 U	 U	 U	 U	 U	 U	 U	 U	 U	 U	 U	 U	s8   HV"J,%BV",
J96V"8J99KV""V&)V&c                     |t          |          z   | j        k    r|d | j        |z
           } | j        j        |||g|R i | d S rL   )r>   r=   rN   rz   )r-   r   r   stringr   r   s         r/   r   zCursesMonitor.safe_add_str  s`    s6{{?T...2T.223F1f6t666v66666r1   c           	         | j         5  t          j                    | _        | j                            d           | j                            d           t          j                     t          j        d| j        | j	                   t          j        dt          j
        | j	                   t          j        dt          j        | j	                   t          j        dt          j        | j	                   t          j        dt          j        | j	                   t          j        dt          j        | j                   t          j        t          j        d          t          j        t          j        d          t          j        t          j        d          i| _        t          j        D ]}t          j        d          | j        |<   t          j                     d d d            d S # 1 swxY w Y   d S )NTr3   rx   r   r   r   r   )r,   r|   initscrrN   nodelaykeypadstart_color	init_pair
foreground
background	COLOR_REDCOLOR_GREENCOLOR_MAGENTA
COLOR_BLUECOLOR_YELLOWr	   SUCCESSr   REVOKEDSTARTEDr   r   cbreak)r-   r!   s     r/   init_screenzCursesMonitor.init_screen  s   Y 	 	~''DHHT"""HOOD!!!   QAAAQ 0$/BBBQ 2DODDDQ 4doFFFQ 14?CCCQ 3T_EEE!'1B11E1E!'1B11E1E!'1B11E1E!GD  0 @ @+1+<Q+?+?!%((MOOO/	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   GG--G14G1c                     | j         5  t          j                     | j                            d           t          j                     t          j                     d d d            d S # 1 swxY w Y   d S NF)r,   r|   nocbreakrN   r	  r   endwinr[   s    r/   resetscreenzCursesMonitor.resetscreen  s    Y 	 	OHOOE"""KMMMMOOO		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AA))A-0A-c                 8    t          j        | j                   d S rL   )r|   napmsscreen_delayr[   s    r/   napzCursesMonitor.nap  s    T&'''''r1   c                 \    t          | j                            | j                            S )N)r\   )r   r!   tasks_by_timer\   r[   s    r/   r_   zCursesMonitor.tasks  s%    DJ,,4:,>>???r1   c                 R    d | j         j                                        D             S )Nc                 &    g | ]\  }}|j         |S r   r   )r   r   r   s      r/   r   z)CursesMonitor.workers.<locals>.<listcomp>  s2       [Xq7   r1   )r!   r   r   r[   s    r/   r   zCursesMonitor.workers  s3     DJ,>,D,D,F,F    	r1   rL   )r3   )6__name__
__module____qualname____doc__r    rN   r  ra   selected_positionr   r|   COLOR_BLACKr  COLOR_WHITEr  r   r   r   r   r   r   r0   rJ   propertyr=   rU   r5   rY   r\   rd   r#   r"   rh   KEY_DOWNKEY_UPr   rr   rv   r   r(   r   r   r$   r'   r%   r&   r   r  r   r  r  r   r_   r   r   r1   r/   r   r   "   s       --F
CLML#J#J#JJGD-^--EH& & & &   6   X   X # # X#   X # # X#         2 2 2 2 s #'H     $3 3 3$F F F:  &/ / /'
 '
 '
R
 
 
"
 
 
"< < <(V V Vp7 7 7
  4  ( ( ( @ @ X@   X  r1   r   c                   $     e Zd Z fdZd Z xZS )DisplayThreadc                 d    || _         d| _        t                                                       d S r  )displayshutdownsuperr0   )r-   r2  	__class__s     r/   r0   zDisplayThread.__init__  s-    r1   c                     | j         s;| j                                         | j                                         | j         9d S d S rL   )r3  r2  r  r   r[   s    r/   runzDisplayThread.run  sT    - 	LL - 	 	 	 	 	r1   )r%  r&  r'  r0   r7  __classcell__)r5  s   @r/   r0  r0    sG            
      r1   r0  c                    d }	 t          dt          j                   |                                 5 }	 |                    || j        j                   | j                            |d|j	        i          }|
                                 |                                 |                                 n=# |j        |j        z   $ r(}t          d|t          j                   Y d }~nd }~ww xY wd d d            n# 1 swxY w Y   )Nc                 d    t          d                    | |          t          j                   d S )Nz&Connection Error: {!r}.  Retry in {}s.file)printr   sysstderr)excintervals     r/   on_connection_errorz+capture_events.<locals>.on_connection_error  s@    6== !$	- 	- 	- 	- 	- 	-r1   r3   z-> evtop: starting capture...r;  *)handlerszConnection lost: )r=  r>  r?  connection_for_readensure_connectionconfbroker_connection_max_retrieseventsReceivereventr  r  captureconnection_errorschannel_errors)r   r!   r2  rB  connrecvr@  s          r/   capture_eventsrQ    s   - - -D-CJ????$$&& 		D$D&&':'*x'MO O Oz**43:L*MM##%%%##%%%)D,?? D D D1#11
CCCCCCCCCD		D 		D 		D 		D 		D 		D 		D 		D 		D 		D 		D 		D 		D 		D 		DDs;   C?A?B65C?6C0C+&C?+C00C??DDc                    t          |           } | j                                        }t          ||           }|                                 t          |          }|                                 	 t          | ||           dS # t          $ r1 d|_	        |
                                 |                                  t          t          f$ r3 d|_	        |
                                 |                                 Y dS w xY w)zStart curses monitor.TN)r
   rI  Stater   r  r0  startrQ  rq   r3  r   r  KeyboardInterrupt
SystemExit)r   r!   r2  	refreshers       r/   r   r      s   


CJEE3''Gg&&IOO
sE7+++++   !	z*   !	s   1B A9D D__main__rL   )#r(  r|   r>  r*   r   	itertoolsr   mathr   textwrapr   r   celeryr   r	   
celery.appr
   celery.utils.textr   r   __all__rW   r   r:   r6   r7   r9   r8   r   r   Threadr0  rQ  r   r%  r   r1   r/   <module>ra     s   6 6  



                                   ) ) ) ) ) ) ) ) % % % % % % , , , , , , , ,
$ 
 

z z z z z z z zz
 
 
 
 
I$ 
 
 
D D D(   * z	EGGGGG r1   