
    vge                        d Z ddlZddlZddl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 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  G d d          Z G d d          Zej        j        ej        j        ej        j        fZ G d dej                  Z  G d dej!                  Z"d Z# G d d          Z$d Z%d Z& G d de$          Z'd dZ(e)dk    r e(             dS dS )!a  supervisorctl -- control applications run by supervisord from the cmd line.

Usage: %s [options] [action [arguments]]

Options:
-c/--configuration FILENAME -- configuration file path (searches if not given)
-h/--help -- print usage message and exit
-i/--interactive -- start an interactive shell after executing commands
-s/--serverurl URL -- URL on which supervisord server is listening
     (default "http://localhost:9001").
-u/--username USERNAME -- username to use for authentication with server
-p/--password PASSWORD -- password to use for authentication with server
-r/--history-file -- keep a readline history (if readline is available)

action [arguments] -- see below

Actions are commands like "tail" or "stop".  If -i is specified or no action is
specified on the command line, a "shell" interpreting actions typed
interactively is started.  Use the action "help" to find out about available
actions.
    N)	xmlrpclib)urlparse)unicode)	raw_input)	as_string)asyncore_25)ClientOptionsmake_namespec)split_namespec)xmlrpc)states)http_clientc                   *    e Zd ZdZdZdZdZdZdZdZ	dS )	LSBInitExitStatusesr                     N)
__name__
__module____qualname__SUCCESSGENERICINVALID_ARGSUNIMPLEMENTED_FEATUREINSUFFICIENT_PRIVILEGESNOT_INSTALLEDNOT_RUNNING     U/var/www/pixelcanvas.ch/venv/lib/python3.11/site-packages/supervisor/supervisorctl.pyr   r   /   s3        GGLMKKKr#   r   c                       e Zd ZdZdZdS )LSBStatusExitStatusesr   r   N)r   r   r   r!   UNKNOWNr"   r#   r$   r&   r&   8   s        KGGGr#   r&   c                   <    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	S )
fgthreadz A subclass of threading.Thread, with a kill() method.
    To be used for foreground output/error streaming.
    http://mail.python.org/pipermail/python-list/2004-May/260937.html
    c                    t           j                            |            d| _        || _        || _        t          j                    | _        t          j	        | j        | j        j
        j        | j        j
        j                  | _        t          j	        | j        | j        j
        j        | j        j
        j                  | _        d S )NF)	threadingThread__init__killedprogramctlr   ListenerlistenerHTTPHandleroptionsusernamepasswordoutput_handlererror_handler)selfr/   r0   s      r$   r-   zfgthread.__init__F   s    !!$'''#,..)5dm6:h6F6O6:h6F6OQ Q )4T]59X5E5N59X5E5NP Pr#   c                 t    | j         | _        | j        | _         t          j                            |            d S N)run_fgthread__run_backup_fgthread__runr+   r,   startr9   s    r$   r?   zfgthread.startS   s2     H:t$$$$$r#   c                     | j                             | j        j        j        d| j        z             | j                            | j        j        j        d| j        z             t          j                     d S )Nz/logtail/%s/stdoutz/logtail/%s/stderr)	r7   getr0   r4   	serverurlr/   r8   asyncoreloopr@   s    r$   r<   zfgthread.runY   su     0 : 4t| C	E 	E 	Etx/93dlB	D 	D 	Dr#   c                 x    t          j        | j                   |                                  | j        | _        d S r;   )syssettraceglobaltracer=   r<   r@   s    r$   __runzfgthread.__run`   s5    T%&&&$r#   c                      |dk    r| j         S d S )Ncall)
localtracer9   framewhyargs       r$   rI   zfgthread.globaltracef   s    &==?"4r#   c                 F    | j         r|dk    rt                      | j        S )Nline)r.   
SystemExitrM   rN   s       r$   rM   zfgthread.localtracel   s'    ; 	#f}} ll"r#   c                 x    | j                                          | j                                         d| _        d S )NT)r7   closer8   r.   r@   s    r$   killzfgthread.killr   s7    !!###  """r#   N)r   r   r   __doc__r-   r?   r<   r>   rI   rM   rW   r"   r#   r$   r)   r)   @   s         
P P P% % %  % % %        r#   r)   c                       e Zd Z	 	 ddZd Zd Zd ZddZd Zd	 Z	d
 Z
d ZddZd ZddZd Zd Zd Zd Zd Zd Zd Zd ZdS )
ControllertabNc                 (   || _         | j         j        dz   | _        g | j         _        dg| _        d | _        t
          j        | _        t          j	        
                    | |||           | j         j        D ]\  }}} || fi |}t          |          D ]V}	|	                    d          r?t          t          ||	                    r"| j                            |	dd                     W| j         j                            |           ||_        d S )Nz> helpdo_r   )r4   promptpluginsvocab_complete_infor   r   
exitstatuscmdCmdr-   plugin_factoriesdir
startswithcallablegetattrappendname)
r9   r4   completekeystdinstdoutrl   factorykwargspluginas
             r$   r-   zController.__init__y   s   l)D0!X
"-5{E6:::%)\%B 	 	!D'6WT,,V,,F[[ - -<<&& -8GFA4F4F+G+G -J%%ae,,,L ''///FKK	 	r#   c                     d S r;   r"   r@   s    r$   	emptylinezController.emptyline   s    r#   c                 X    |                      d|z             t          j        | _        d S )Nz*** Unknown syntax: %s)outputr   r   rc   )r9   rS   s     r$   defaultzController.default   s(    ,t3444-5r#   c                 Z   	 dd l                                 }|                    dd          }|                    dd          }|                    dd          }                    |           j        rK	                     j                   n# t          $ r Y nw xY wfd}dd l}|                    |           n# t          $ r Y nw xY w	 | j
                            d           |                                  d S # t          $ r |                     d           Y d S w xY w)Nr   : *-c                  `    	                       j                   d S # t          $ r Y d S w xY wr;   )write_history_filehistory_fileIOError)r4   readlines   r$   savez%Controller.exec_cmdloop.<locals>.save   sG     33G4HIIIII"   s    
--status)r   get_completer_delimsreplaceset_completer_delimsr   read_history_filer   atexitregisterImportErrorcmdqueuerk   cmdloopKeyboardInterruptrw   )r9   argsr4   delimsr   r   r   s     `   @r$   exec_cmdloopzController.exec_cmdloop   ss   	OOO2244F^^C,,F^^C,,F^^C,,F))&111# &..w/CDDDD   D      %%% 	 	 	D		M  ***LLNNNNN  	 	 	KKOOODD	sH   A6C ;B C 
B# C "B##"C 
CC.D D*)D*c                     ||t           j        j        fv rd S |t          v rt          j        | _        d S t          j        | _        d S r;   )r   Faultsr   DEAD_PROGRAM_FAULTSr   r!   rc   r   )r9   	faultcodeignored_faultcodes      r$    set_exitstatus_from_xmlrpc_faultz+Controller.set_exitstatus_from_xmlrpc_fault   sE    *FM,ABBBD---1=DOOO19DOOOr#   c           	         |                      |          \  }}}|s|                                 S ||                     |          S d| _        || _        |dk    r|                     |          S |                     |          }||                     |          S 	 	  ||          S # t          j        $ r}|j        dk    r| j	        j
        r|                     d           t          d          }t          j        d          }|                     d           || j	        _        || j	        _        |                     |          cY d}~S |                     d           t"          j        | _        nt"          j        | _         Y d}~nd}~ww xY w ||           dS # t(          $ rT t+          j                    \  \  }}	}}
}}d|
d	|d
|d|}|                     |           t"          j        | _        Y dS w xY w)z Override the onecmd method to:
          - catch and print all exceptions
          - call 'do_foo' on plugins rather than ourself
        Nr{   i  zServer requires authenticationz	Username:z	Password:)r_   zerror: z, z: file: z line: )	parselineru   rx   rb   lastcmd_get_do_funcr   ProtocolErrorerrcoder4   interactiverw   r   getpassr5   r6   onecmdr   r   rc   	ExceptionrD   compact_traceback)r9   rS   rd   rQ   do_funcer5   r6   filefuntvtbinfoerrors                 r$   r   zController.onecmd   s.   
 --S$ 	$>>###;<<%%%""99<<%%%'',,G||D)))>"73<<' .   yC''<3 
J KK(HIII'0'='=H'.k'J'J'JH KKOOO4<DL14<DL1#';;t#4#4444444 KK(HIII.A.IDOO*=*E ,OOOO   > > >2:2L2N2N/!sD1a>?aaDDD$$OE""""5"=	>sD   
B) )F8BF	F
F" 9FF" FF" "AH ?H c                 ~    d|z   }t          | |d           }|s$| j        j        D ]}t          ||d           }| n|S )Nr^   )rj   r4   r`   )r9   rd   	func_namefuncrr   s        r$   r   zController._get_do_func   s^    CK	tY-- 	,.  vy$77#E $r#   c                     t          |t                    r|                    d          }| j                            |dz              d S )Nzutf-8
)
isinstancer   encodero   write)r9   messages     r$   rw   zController.output   sE    gw'' 	.nnW--G'D.)))))r#   c                 ,    |                      d          S )N
supervisor)get_server_proxyr@   s    r$   get_supervisorzController.get_supervisor   s    $$\222r#   c                 \    | j                                         }||S t          ||          S r;   )r4   getServerProxyrj   )r9   	namespaceproxys      r$   r   zController.get_server_proxy   s0    ++--L5),,,r#   c                 \   	 |                                  }|                                }ddlm} ||j        k    r4|                     d|j        d|d           t          j        | _        dS n;# t          j
        $ r]}|j        t          j        j        k    r,|                     d           t          j        | _        Y d }~dS t          j        | _         d }~wt"          j        $ r}|j        d         t(          j        k    r9|                     d| j        j        z             t          j        | _        Y d }~dS |j        d         t(          j        k    r9|                     d	| j        j        z             t          j        | _        Y d }~dS t          j        | _         d }~ww xY wd
S )Nr   )rpcinterfacezRSorry, this version of supervisorctl expects to talk to a server with API version z, but the remote version is .FzSorry, supervisord responded but did not recognize the supervisor namespace commands that supervisorctl uses to control it.  Please check that the [rpcinterface:supervisor] section is enabled in the configuration file (see sample.conf).z%s refused connectionz%s no such fileT)r   
getVersionr   r   API_VERSIONrw   r   r    rc   r   Fault	faultCoder   r   UNKNOWN_METHODr   r   socketr   r   errnoECONNREFUSEDr4   rC   r   ENOENTr!   )r9   r   apir   r   s        r$   upcheckzController.upcheck   s   !	,,..J''))C//////l... 0</G/G/GNO O O #6"Cu /  	 	 	{fm:::<= = = #6"Kuuuuu19DO| 
	 
	 
	vayE...3dl6LLMMM"5"Muuuuuel**-0FFGGG"5"Auuuuu19DO
	 ts9   A+A1 1F) A CCF)*AF$>AF$F$$F)c                    |ddl }|                                }g }|                                s|                     |          }n|                                }|d         }t          |          dk    r+|                    d          s|                     |          }nM|dv r|                     |          }n3|dv r|                     |          }n|dv r|                     |          }t          |          |k    r||         S dS )aa  Completer function that Cmd will register with readline using
        readline.set_completer().  This function will be called by readline
        as complete(text, state) where text is a fragment to complete and
        state is an integer (0..n).  Each call returns a string with a new
        completion.  When no more are available, None is returned.Nr   r    r]   )addremoveupdate)	clearfgpidrestartsignalr?   r   stoptail)	r   get_line_bufferstrip_complete_actionssplitlenendswith_complete_groups_complete_processes)r9   textstaterS   r   matcheswordsactions           r$   completezController.complete%  s     <OOO++--Dzz|| 	9,,T22GGJJLLE1XF5zzQt}}S'9'90066F##0066666//55 ? ? ?22488w<<%5>!  r#   c                 *    fd| j         D             S )z5Build a completion list of action names matching textc                 D    g | ]}|                               |d z   S r   rh   ).0rs   r   s     r$   
<listcomp>z0Controller._complete_actions.<locals>.<listcomp>H  s.    CCCQT0B0BCSCCCr#   )ra   )r9   r   s    `r$   r   zController._complete_actionsF  s    CCCC$*CCCCr#   c                     g }|                                  D ]'}|d         |vr|                    |d                    (fd|D             S )z4Build a completion list of group names matching textgroupc                 D    g | ]}|                               |d z   S r   r   )r   gr   s     r$   r   z/Controller._complete_groups.<locals>.<listcomp>P  s.    @@@QALL,>,>@S@@@r#   _get_complete_infork   )r9   r   groupsinfos    `  r$   r   zController._complete_groupsJ  sc    ++-- 	- 	-DG}F**d7m,,,@@@@&@@@@r#   c                 X   g }|                                  D ]}dv s|d         |d         k    rR|                    |d         d|d                    d|d         z  |vr|                    d|d         z             j|                    |d                    fd|D             S )z6Build a completion list of process names matching textrz   rl   r   z%s:*c                 D    g | ]}|                               |d z   S r   r   )r   pr   s     r$   r   z2Controller._complete_processes.<locals>.<listcomp>\  s.    CCCQq||D/A/ACSCCCr#   r   )r9   r   	processesr   s    `  r$   r   zController._complete_processesR  s    	++-- 	/ 	/Dd{{d6ld7m;;  DMMM4<<!HIIIDM)::$$Vd7m%;<<<  f....CCCC)CCCCr#   c                 t    | j         +|                                                                 | _         | j         S )zGet all process info used for completion.  We cache this between
        commands to reduce XML-RPC calls because readline may call
        complete() many times if the user hits tab only once.)rb   r   getAllProcessInfor@   s    r$   r   zController._get_complete_info^  s6     &"&"5"5"7"7"I"I"K"KD""r#   c                     |                                 dk    r|                                  d S | j        j        D ]}|                    |           d S )Nr]   )r   	help_helpr4   r`   do_help)r9   rQ   rr   s      r$   r   zController.do_helpf  s^    99;;&  NN,. $ $s####$ $r#   c                 Z    |                      d           |                      d           d S )Nz'help		Print a list of available actionsz%help <action>	Print help for <action>rw   r@   s    r$   r   zController.help_helpm  s.    ?@@@<=====r#   c                 0    |                      d           dS )Nr{   r   r   r9   rQ   s     r$   do_EOFzController.do_EOFq  s    Bqr#   c                 0    |                      d           d S )Nz(To quit, type ^D or use the quit commandr   r@   s    r$   help_EOFzController.help_EOFu  s    >?????r#   )r[   NNr;   )r   r   r   r-   ru   rx   r   r   r   r   rw   r   r   r   r   r   r   r   r   r   r   r   r  r"   r#   r$   rZ   rZ   w   sl       9=   "  6 6 6  @: : : :+> +> +>Z  * * *
3 3 3- - - -# # #J" " " "BD D DA A A
D 
D 
D# # #$ $ $> > >  @ @ @ @ @r#   rZ   c                     g }| j         g}|rG|                    d          }|j        r|t          |j                  z   }|t	          |          z   }|G|S )Nr   )	__class__pop	__bases__listrg   )instnamesclassesaclasss       r$   	get_namesr  x  si    E~G
 $Q 	7V%5 6 66GF#	  $
 Lr#   c                   :    e Zd ZdZd Zd Z ee          Zd ZdS )ControllerPluginBaseunnamedc                     || _         d S r;   )r0   )r9   
controllers     r$   r-   zControllerPluginBase.__init__  s    r#   c                     d| j         z  S )Nz %s commands (type help <topic>):)rl   r@   s    r$   _doc_headerz ControllerPluginBase._doc_header  s    1DI==r#   c                 d   |r	 t          | d|z             }n# t          $ ru 	 t          | d|z             j        }|r| j                            |           Y d S n# t          $ r Y nw xY w| j                            | j        j        |fz             Y d S w xY w |             d S t          |           }g }g }i }|D ]}|d d         dk    rd||dd          <   |                                 d}	|D ]}|d d         dk    rp||	k    r|}	|dd          }
|
|v r|                    |
           ||
= @t          | |          j        r|                    |
           k|                    |
           | j                            d           | j        	                    | j
        |dd           d S )	Nhelp_r^   r   r   r{   r      P   )rj   AttributeErrorrX   r0   rw   nohelpr  sortrk   print_topics
doc_header)r9   rQ   r   docr  cmds_doc
cmds_undocr]   rl   prevnamerd   s              r$   r   zControllerPluginBase.do_help  s    (	EtWs]33! 	 	 	!$44<C ,,, &   D3& 8999	 DFFFFFdOOEHJD % %8w&&#$DabbNJJLLLH / /8u$$x'' #HQRRCd{{ ,,, II t,,4 / ,,,,"))#...HOOBH!!$/8RDDDDDs2    
B4AB
A(%B'A((+BBN)	r   r   r   rl   r-   r  propertyr  r   r"   r#   r$   r  r    sZ        D  > > >+&&J)E )E )E )E )Er#   r  c                      t          t          j        dd           pd} |                                                     d          rd nt          j        j        S )Nencodingr{   utf)rj   rG   ro   lowerrh   r"  )encs    r$   not_all_langsr&    sD    
#*j$
/
/
52C99;;))%00I44cj6IIr#   c                 Z    t                      }|r|                     d|z             d S d S )NzWarning: sys.stdout.encoding is set to %s, so Unicode output may fail. Check your LANG and PYTHONIOENCODING environment settings.)r&  rw   )r0   problematic_encs     r$   check_encodingr)    sJ    #ooO >

 +-<= 	> 	> 	> 	> 	>> >r#   c                   D   e Zd ZdZdZd Zd Zd Zd Zd Z	d Z
d	 Ze
Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd5dZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d  Z"d! Z#d" Z$d# Z%d$ Z&d% Z'd& Z(d' Z)d( Z*d) Z+d* Z,d+ Z-d, Z.d- Z/d. Z0d/ Z1d0 Z2d1 Z3d2 Z4d3 Z5d6d4Z6dS )7DefaultControllerPluginrx   Nc                    t          | j                   | j                            d           | j        j        j        }| j        j        j        }d }	 | j        t          j                    }n| j        }t          j	        |||          }|
                    | j        j        j        |           t          j                     d S # t          $ r4 |r|                                 | j                            d           Y d S w xY w)N==> Press Ctrl-C to exit <==r{   )r)  r0   rw   r4   r5   r6   r2   r   r1   r3   rB   rC   rD   rE   r   rV   )r9   pathr5   r6   handlerr2   s         r$   _tailfzDefaultControllerPlugin._tailf  s    tx   67778#,8#,	 }$&/11=!-h(KKGKK(2D999MOOOOO  	 	 	  HOOBFF		s   A0C :DDc                 f   | j                                         sd S |                                }t          |          dk     rF| j                             d           t
          j        | j         _        |                                  d S t          |          dk    rF| j                             d           t
          j        | j         _        |                                  d S d }|d         	                    d          r|
                    d          }t          |          dk    r|d         }d}n|r\|d         }|d                                         }|d	vr5| j                             d
|z             t
          j        | j         _        d S n2| j                             d           t
          j        | j         _        d S d}|_|dd          }|dk    rd }nL	 t          |          }n;#  | j                             d|z             t
          j        | j         _        Y d S xY w| j                                         }||                     d|d|          S t          | j                    	 |dk    r|                    || d          }	n|                    || d          }	| j                             |	           d S # t$          j        $ r}
t
          j        | j         _        d}|
j        t*          j        j        k    r | j                             ||dfz             nu|
j        t*          j        j        k    r | j                             ||dfz             nA|
j        t*          j        j        k    r | j                             ||dfz             n Y d }
~
d S Y d }
~
d S Y d }
~
d S d }
~
ww xY w)Nr   zError: too few argumentsr   Error: too many argumentsr   r}   ro   )stderrro   zError: bad channel %rz!Error: tail requires process name@  fError: bad argument %sz	/logtail//%s: ERROR (%s)no log fileunknown error reading logzno such process name)r0   r   r   r   rw   r   r   rc   	help_tailrh   r  r$  intr   r0  r)  readProcessStdoutLogreadProcessStderrLogr   r   r   r   r   NO_FILEFAILEDBAD_NAME)r9   rQ   r   modifierrl   channelbyteswhatr   rw   r   templates               r$   do_tailzDefaultControllerPlugin.do_tail  s   x!! 	Fyy{{t99q==HOO6777"5"=DHNNFYY]]HOO7888"5"=DHNNF7c"" 	#xx{{Ht99>>8DGG 
Awr(..**"666HOO$;g$EFFF*=*EDH'F 7
  CDDD&9&A#ABB<Ds{{IIEEHOO$<x$GHHH*=*EDH'FFX,,..
=;;;444ABBB 48$$$(h&&'<<T>CVQH HFF (<<T>CVQH HF  ''''' ?   &9&A#+;&-"777HOOHm/D$DEEEE[FM$888HOOH-H0J %J K K K K[FM$:::HOOH-C0E %E F F F F  FEEEEEK K K K K KF F F F F Fs%   G* *5H"07K N0CN++N0c                 :    | j                             d           d S )Nztail [-f] <name> [stdout|stderr] (default stdout)
Ex:
tail -f <name>		Continuous tail of named process stdout
			Ctrl-C to exit.
tail -100 <name>	last 100 *bytes* of process stdout
tail <name> stderr	last 1600 *bytes* of process stderrr0   rw   r@   s    r$   r<  z!DefaultControllerPlugin.help_tail3  s*    F	 	 	 	 	r#   c                    | j                                         sd S |                                }t          |          dk    rF| j                             d           t
          j        | j         _        |                                  d S t          |          dk    r|d         	                    d          r|d         dd          }|dk    rd}| 
                    |          S 	 t          |          }|}n~#  | j                             d|d         z             t
          j        | j         _        Y d S xY w| j                             d|d         z             t
          j        | j         _        d S d}| j                                         }	 |                    | d          }| j                             |           d S # t          j        $ r}t
          j        | j         _        d	}	|j        t"          j        j        k    r| j                             |	d
z             n9|j        t"          j        j        k    r| j                             |	dz             n Y d }~d S Y d }~d S d }~ww xY w)Nr   r2  r   r}   r6  z/mainlogtailr7  r5  r9  )supervisordr:  )rL  r;  )r0   r   r   r   rw   r   r   rc   help_maintailrh   r0  r=  r   readLogr   r   r   r   r   r@  rA  )
r9   rQ   r   rF  r.  rE  r   rw   r   rG  s
             r$   do_maintailz#DefaultControllerPlugin.do_maintail=  s   x!! 	Fyy{{t99q==HOO7888"5"=DH   FYY!^^Aw!!#&& Awqrr{3;;)D;;t,,,!t99D !EEHOO$<tAw$FGGG*=*EDH'FF  847 BCCC&9&A# EX,,..
	$''22F HOOF#####  		 		 		"5"=DH'H{fm333+I IJJJJ 444 ,F !F G G G G  KJJJJJG G G G G G		s%   %C7 7;D5G I+B	I&&I+c                 :    | j                             d           d S )Nzmaintail -f 	Continuous tail of supervisor main log file (Ctrl-C to exit)
maintail -100	last 100 *bytes* of supervisord main log file
maintail	last 1600 *bytes* of supervisor main log file
rJ  r@   s    r$   rM  z%DefaultControllerPlugin.help_maintailp  s*    H	 	 	 	 	r#   c                 6    | j                             |          S r;   )r0   r   r   s     r$   do_quitzDefaultControllerPlugin.do_quitx  s    xs###r#   c                 :    | j                             d           d S )Nzquit	Exit the supervisor shell.rJ  r@   s    r$   	help_quitz!DefaultControllerPlugin.help_quit{      :;;;;;r#   c                 :    | j                             d           d S )Nzexit	Exit the supervisor shell.rJ  r@   s    r$   	help_exitz!DefaultControllerPlugin.help_exit  rU  r#   c                    g d}}t          |          D ]b\  }}|                    t          |d         |d                              t          ||                   |k    rt          ||                   }cdt	          |dz             z   dz   }t          |          D ]:\  }}|||         |d         |d         d	z  }| j                            |           ;d S )
N   r   rl   z%(namespec)-r   zs%(state)-10s%(desc)s	statenamedescription)namespecr   desc)	enumeraterk   r   r   strr0   rw   )r9   process_infos	namespecsmaxlenir   rG  rS   s           r$   _show_statusesz&DefaultControllerPlugin._show_statuses  s    6	 // 	+ 	+GAt]4=$v,GGHHH9Q<  6))Yq\**!CqMM14KK // 	" 	"GAt9Q<(,[(9'+M':< < <D HOOD!!!!		" 	"r#   c                    | j                                         st          j        | j         _        d S | j                                         }|                                }t          |                                          }|rd|v r|}ng }|D ]}d}t          |          \  }}	|D ]7}
|
d         |k    }|	|o|
d         |	k    }|rd}|
                    |
           8|r=|	d|z  }nd|z  }| j                             |           t          j        | j         _        |                     |           |D ],}
|
d         t          j        v rt          j        | j         _        -d S )	NallTr   rl   F%s: ERROR (no such group)z%s: ERROR (no such process)r   )r0   r   r&   r'   rc   r   r   r   r   r   rk   rw   rd  r   STOPPED_STATESr!   )r9   rQ   r   	all_infosr  matching_infosrl   bad_name
group_nameprocess_namer   matchedmsgs                r$   	do_statusz!DefaultControllerPlugin.do_status  s    x!! 	"7"?DHFX,,..
0022	#$$&& 	H&NNN H H+9$+?+?(
L% 4 4D"7mz9G#/")"Jd6ll.J 4#(&--d333 H#+9JF;dBHOOC(((*?*GDH'N+++" 	H 	HDG} 555&;&G#	H 	Hr#   c                     | j                             d           | j                             d           | j                             d           | j                             d           d S )Nz.status <name>		Get status for a single processz8status <gname>:*	Get status for all processes in a groupz<status <name> <name>	Get status for multiple named processesz$status			Get all process status inforJ  r@   s    r$   help_statusz#DefaultControllerPlugin.help_status  sl    JKKK / 	0 	0 	0 $ 	% 	% 	%ABBBBBr#   c                 J   | j                                         }| j                                         sd S |                                }|s=|                                }| j                             t          |                     d S d|v rF|                                D ]/}| j                             t          |d                              0d S |D ]}	 |                    |          }|d         }| j                             t          |                     |dk    rt          j
        | j         _        d# t          j        $ rY}t          j        | j         _        |j        t           j        j        k    r| j                             d|z             n Y d }~d }~ww xY wd S )Nrf  r   r   zNo such process %s)r0   r   r   r   getPIDrw   r_  r   getProcessInfor   r!   rc   r   r   r   r   r   r   rB  )r9   rQ   r   r  r   r   rl   r   s           r$   do_pidzDefaultControllerPlugin.do_pid  s   X,,..
x!! 	F		 	N##%%CHOOCHH%%%%%e^^"4466 2 2DK 0 011112 2  N NN%44T::D u+CHOOCHH---axx.A.M+ !   *=*EDH'{fm&<<<(<t(CDDDD EDDDDN Ns   D88F AFF c                     | j                             d           | j                             d           | j                             d           d S )Nz!pid			Get the PID of supervisord.z:pid <name>		Get the PID of a single child process by name.z;pid all			Get the PID of every child process, one per line.rJ  r@   s    r$   help_pidz DefaultControllerPlugin.help_pid  s[    >??? % 	& 	& 	& % 	& 	& 	& 	& 	&r#   c                    t          |d         |d                   }|d         }d}|t          j        j        k    r||dfz  S |t          j        j        k    r||dfz  S |t          j        j        k    r||dfz  S |t          j        j        k    r||dfz  S |t          j        j        k    r||d	fz  S |t          j        j        k    r||d
fz  S |t          j        j	        k    rd|z  S t          d|d|          )Nr   rl   r   r9  no such processzno such filezfile is not executablezalready startedzspawn errorzabnormal termination%s: startedUnknown result code  for )r   r   r   rB  r@  NOT_EXECUTABLEALREADY_STARTEDSPAWN_ERRORABNORMAL_TERMINATIONr   
ValueErrorr9   resultrl   coderG  s        r$   _startresultz$DefaultControllerPlugin._startresult  s"   VG_fVn==h#6=)))t%6777V]***t^444V]111t%=>>>V]222t%6777V]...t]333V]777t%;<<<V]*** 4''jDDD$$GHHHr#   c                    | j                                         sd S |                                }| j                                         }|sF| j                             d           t
          j        | j         _        |                                  d S d|v rx|	                                }|D ]_}| j                             | 
                    |                     | j                             |d         t          j        j                   `d S |D ]}t          |          \  }}|	 |                    |          }|D ]_}| j                             | 
                    |                     | j                             |d         t          j        j                   `# t"          j        $ rr}	|	j        t          j        j        k    r6d|z  }
| j                             |
           t
          j        | j         _        nt
          j        | j         _         Y d }	~	d }	~	ww xY w	 |                    |          }t/          ||          }| j                             d|z             Y# t"          j        $ ry}	|	j        |||	j        d}
| j                             | 
                    |
                     | j                             |
d         t          j        j                   Y d }	~	d }	~	ww xY wd S )Nz$Error: start requires a process namerf  r   rg  r{  r   rl   r   r[  )r0   r   r   r   rw   r   r   rc   
help_startstartAllProcessesr  r   r   r   r  r   startProcessGroupr   r   r   rB  r   startProcessr   faultStringr9   rQ   r  r   resultsr  rl   rl  rm  r   r   s              r$   do_startz DefaultControllerPlugin.do_start  s	   x!! 	F		X,,..
 	HOOBCCC"5"BDHOOFE>> 2244G! k k 1 1& 9 9:::99&:JFMLijjjjk k  > >+9$+?+?(
L'"",">">z"J"J&- w wF HOOD,=,=f,E,EFFF HEEfXFVX^XeXuvvvvw %? " " ";&-*@@@$?*$LE HOOE2222E2RDH//2E2MDH/! 0////	">!+!8!8!>!>  -ZFF(<==== %? r r r+,;*6+512!@ !@ (9(9%(@(@AAAAA%/SYS`Spqqqqqqqqr'> >s3   'A7FH .A'HH $I((K07A.K++K0c                     | j                             d           | j                             d           | j                             d           | j                             d           d S )Nzstart <name>		Start a processz/start <gname>:*		Start all processes in a groupz6start <name> <name>	Start multiple processes or groupszstart all		Start all processesrJ  r@   s    r$   r  z"DefaultControllerPlugin.help_start,  se    9:::KLLLE	G 	G 	G:;;;;;r#   	signalledc                    t          |d         |d                   }|d         }|d         }d}|t          j        j        k    r||dfz  S |t          j        j        k    r||dfz  S |t          j        j        k    r||dfz  S |t          j        j        k    r|d	|S |t          j        j        k    r|S t          d
|d|          )Nr   rl   r   r[  r9  rz  zbad signal nameznot running: r|  r}  )	r   r   r   rB  
BAD_SIGNALr!   r   rA  r  )r9   r  successrl   r  fault_stringrG  s          r$   _signalresultz%DefaultControllerPlugin._signalresult3  s    VG_fVn==hm,#6=)))t%6777V]---t%6777V]...t]333V]***#ttWW--V])))jDDD$$GHHHr#   c                 0    |                      |d          S )Nstopped)r  )r  )r9   r  s     r$   _stopresultz#DefaultControllerPlugin._stopresultE  s    !!&)!<<<r#   c                    | j                                         sd S |                                }| j                                         }|sF| j                             d           t
          j        | j         _        |                                  d S d|v rx|	                                }|D ]_}| j                             | 
                    |                     | j                             |d         t          j        j                   `d S |D ]}t          |          \  }}|	 |                    |          }|D ]_}| j                             | 
                    |                     | j                             |d         t          j        j                   `# t"          j        $ r[}	t
          j        | j         _        |	j        t          j        j        k    r d|z  }
| j                             |
           n Y d }	~	d }	~	ww xY w	 |                    |           t-          ||          }| j                             d|z             B# t"          j        $ ry}	|	j        |||	j        d}
| j                             | 
                    |
                     | j                             |
d         t          j        j                   Y d }	~	d }	~	ww xY wd S )Nz#Error: stop requires a process namerf  r   rg  z%s: stoppedr  )r0   r   r   r   rw   r   r   rc   	help_stopstopAllProcessesr  r   r   r   r!   r   stopProcessGroupr   r   r   rB  stopProcessr   r  r  s              r$   do_stopzDefaultControllerPlugin.do_stopH  s   x!! 	F		X,,..
 	HOOABBB"5"=DHNNFE>> 1133G! g g 0 0 8 899999&:JFMLeffffg g  > >+9$+?+?(
L'"","="=j"I"I&- s sF HOOD,<,<V,D,DEEE HEEfXFVX^XeXqrrrrs %? " " ".A.I+;&-*@@@$?*$LE HOOE2222! 32222	">"..t444  -ZFF(<==== %? n n n+,;)5*4/0}!> !> (8(8(?(?@@@AA%/SYS`Slmmmmmmmmn'> >s3   'A7FH	.AHH	IK A.KKc                     | j                             d           | j                             d           | j                             d           | j                             d           d S )Nzstop <name>		Stop a processz-stop <gname>:*		Stop all processes in a groupz4stop <name> <name>	Stop multiple processes or groupszstop all		Stop all processesrJ  r@   s    r$   r  z!DefaultControllerPlugin.help_stopy  s\    7888IJJJOPPP899999r#   c                    | j                                         sd S |                                }t          |          dk     rF| j                             d           |                                  t          j        | j         _        d S |d         }|dd          }| j         	                                }d|v ri|
                    |          }|D ]O}| j                             |                     |                     | j                             |d                    Pd S |D ]}t          |          \  }	}
|
	 |                    |	|          }|D ]O}| j                             |                     |                     | j                             |d                    P# t          j        $ r[}|j        t$          j        j        k    r6d|	z  }| j                             |           t          j        | j         _        n Y d }~d }~ww xY w	 |                    ||           t-          |	|
          }| j                             d|z             4# t          j        $ ri}|j        |
|	|j        d	}| j                             |                     |                     | j                             |d                    Y d }~d }~ww xY wd S )
Nr   z7Error: signal requires a signal name and a process namer   r   rf  r   rg  z%s: signalledr  )r0   r   r   r   rw   help_signalr   r   rc   r   signalAllProcessesr  r   r   signalProcessGroupr   r   r   r   r   rB  signalProcessr   r  )r9   rQ   r   sigr  r   r  r  rl   rl  rm  r   r   s                r$   	do_signalz!DefaultControllerPlugin.do_signal  s   x!! 	Fyy{{t99q==HOOIK K K"5"=DHF1gQRRX,,..
E>> 33C88G! L L 2 26 : :;;;99&:JKKKKL L  @ @+9$+?+?(
L'"","?"?&# # '. X XF HOOD,>,>v,F,FGGG HEEfXFVWWWWX %? " " ";&-*@@@$?*$LE HOOE2222E2MDH//! 0////	"@"00s;;;  -ZFF$(>???? %? S S S+,;)5*4/0}!> !> (:(:5(A(ABBBAA%/RRRRRRRRS)@ @s3   ;A(F$$H3AH		HIK&AK

Kc                     | j                             d           | j                             d           | j                             d           | j                             d           d S )Nz-signal <signal name> <name>		Signal a processz?signal <signal name> <gname>:*		Signal all processes in a groupzFsignal <signal name> <name> <name>	Signal multiple processes or groupsz.signal <signal name> all		Signal all processesrJ  r@   s    r$   r  z#DefaultControllerPlugin.help_signal  s\    IJJJ[\\\abbbJKKKKKr#   c                 H   | j                                         sd S |                                }|sF| j                             d           t          j        | j         _        |                                  d S |                     |           | 	                    |           d S )Nz&Error: restart requires a process name)
r0   r   r   rw   r   r   rc   help_restartr  r  )r9   rQ   r  s      r$   
do_restartz"DefaultControllerPlugin.do_restart  s    x!! 	F		 	HOODEEE"5"=DHFScr#   c                 
   | j                             d           | j                             d           | j                             d           | j                             d           | j                             d           d S )Nz!restart <name>		Restart a processz2restart <gname>:*	Restart all processes in a groupz:restart <name> <name>	Restart multiple processes or groupsz"restart all		Restart all processeszLNote: restart does not reread config files. For that, see reread and update.rJ  r@   s    r$   r  z$DefaultControllerPlugin.help_restart  s    =>>>MNNN  	 	 	>??? 2 	3 	3 	3 	3 	3r#   c                 (   |rF| j                             d           t          j        | j         _        |                                  d S | j         j        j        r7t          d          }|	                                
                    d          }nd}|r|| j                                         }	 |                                 | j                             d           d S # t          j        $ rW}|j        t           j        j        k    r| j                             d           nt          j        | j         _         Y d }~d S d }~wt&          j        $ r}t          j        | j         _        |j        d         t,          j        k    r/d}| j                             || j         j        j        z             nK|j        d         t,          j        k    r/d	}| j                             || j         j        j        z             n Y d }~d S Y d }~d S d }~ww xY wd S )
Nz$Error: shutdown accepts no argumentsz5Really shut the remote supervisord process down y/N? yr   z	Shut downERROR: already shutting downr   z1ERROR: %s refused connection (already shut down?)z+ERROR: %s no such file (already shut down?))r0   rw   r   r   rc   help_shutdownr4   r   r   r$  rh   r   shutdownr   r   r   r   r   SHUTDOWN_STATEr   r   r   r   r   rC   r   )r9   rQ   yesnoreallyr   r   ro  s          r$   do_shutdownz#DefaultControllerPlugin.do_shutdown  s     	HOOBCCC"5"=DH   F8' 	 + , ,E[[]]--c22FFF 	-0022J-##%%%$ ,,,,,# ?   ;&-">>>HOO$BCCCC*=*EDH' DCCCCC < 	 	 	&9&A#6!9 222MCHOOC$(*:*D$DEEEEVAY%,..GCHOOC$(*:*D$DEEEE FEEEEE FEEEEE		- 	-s&   0C   H/AEHB+H

Hc                 :    | j                             d           d S )Nz+shutdown 	Shut the remote supervisord down.rJ  r@   s    r$   r  z%DefaultControllerPlugin.help_shutdown  s    FGGGGGr#   c                    |rF| j                             d           t          j        | j         _        |                                  d S | j         j        j        r7t          d          }|	                                
                    d          }nd}|r| j                                         }	 |                                 | j                             d           d S # t          j        $ rW}t          j        | j         _        |j        t           j        j        k    r| j                             d           n Y d }~d S d }~ww xY wd S )Nz"Error: reload accepts no argumentsz3Really restart the remote supervisord process y/N? r  r   zRestarted supervisordr  )r0   rw   r   r   rc   help_reloadr4   r   r   r$  rh   r   r   r   r   r   r   r   r  )r9   rQ   r  r  r   r   s         r$   	do_reloadz!DefaultControllerPlugin.do_reload  sT    	HOO@AAA"5"=DHF8' 	 & ' 'E[[]]--c22FFF 	90022J	9""$$$  788888 ?   &9&A#;&-">>>HOO$BCCCC DCCCCC		9 	9s   /C E.AE  Ec                 :    | j                             d           d S )Nz(reload 		Restart the remote supervisord.rJ  r@   s    r$   r  z#DefaultControllerPlugin.help_reload  s    DEEEEEr#   c                    |\  }}}i }|df|df|dffD ]F\  }}|                     t          t          ||gt          |          z                                 G|rat	          |                                          }|                                 |D ]'}	| j                            |	d||	                    (d S | j                            d           d S )N	availablechangeddisappearedr  zNo config updates to processes)	r   dictzipr   r  keysr  r0   rw   )
r9   added_changed_dropped_tupleaddedr  dropped
changedictnr   r  rl   s
             r$   _formatChangesz&DefaultControllerPlugin._formatChanges  s   "=w
[)y)}-/ 	: 	:DAq d3q1#A,#7#7889999 	>**++EJJLLL E EDDD*T2B2B CDDDDE E HOO<=====r#   c                     t          |d         |d                   }d|i}|d         rd|d<   nd|d<   |d         rd|d<   nd|d<   |d	         d
|d         |d<   d}||z  S )Nr   rl   inusezin useavail	autostartautomanual
group_priorz   process_priopriorityz4%(name)-32s %(inuse)-9s %(autostart)-9s %(priority)sr
   )r9   
configinforl   	formattedrG  s        r$   _formatConfigInfoz)DefaultControllerPlugin._formatConfigInfo(  s    Z0*V2DEEd$	g 	)!)Ig!(Igk" 	.%+Ik""%-Ik"+5l+C+C+C+5n+E+E!G	* J)##r#   c                 (   |rF| j                             d           t          j        | j         _        |                                  d S | j                                         }	 |                                }|D ]/}| j                             |                     |                     0d S # t          j
        $ rW}t          j        | j         _        |j        t          j        j        k    r| j                             d           n Y d }~d S d }~ww xY w)Nz!Error: avail accepts no argumentsERROR: supervisor shutting down)r0   rw   r   r   rc   
help_availr   getAllConfigInfor  r   r   r   r   r   r  )r9   rQ   r   r  pinfor   s         r$   do_availz DefaultControllerPlugin.do_avail9  s    	HOO?@@@"5"=DHOOFX,,..

	?#4466J $ ? ? 6 6u = =>>>>? ?  	 	 	"5"=DH{fm::: ABBBB CBBBBB	s   #B+ +D:ADDc                 :    | j                             d           d S )Nz(avail			Display all configured processesrJ  r@   s    r$   r  z"DefaultControllerPlugin.help_availM  s    EFFFFFr#   c                    |rF| j                             d           t          j        | j         _        |                                  d S | j                                         }	 |                                }|                     |d                    d S # t          j
        $ r}t          j        | j         _        |j        t          j        j        k    r| j                             d           n>|j        t          j        j        k    r#| j                             d|j        z             n Y d }~d S Y d }~d S d }~ww xY w)Nz"Error: reread accepts no argumentsr   r  z	ERROR: %s)r0   rw   r   r   rc   help_rereadr   reloadConfigr  r   r   r   r   r   r  CANT_REREADr  )r9   rQ   r   r  r   s        r$   	do_rereadz!DefaultControllerPlugin.do_rereadP  s@    	HOO@AAA"5"=DHFX,,..
	+,,..F q	*****  	 	 	"5"=DH{fm::: ABBBB 999am ;<<<<	 CBBBBB<<<<<<	s   #B D=#B	D88D=c                 :    | j                             d           d S )NzDreread 			Reload the daemon's configuration files without add/removerJ  r@   s    r$   r  z#DefaultControllerPlugin.help_rereade  s    abbbbbr#   c                    |                                 }| j                                        }|D ]7}	 |                    |           | j                            d|z             7# t
          j        $ r}|j        t          j	        j
        k    r1| j                            d           t          j        | j        _        n|j        t          j	        j        k    r| j                            d           ne|j        t          j	        j        k    r4| j                            d|z             t          j        | j        _        nt          j        | j        _         Y d }~1d }~ww xY wd S )Nz%s: added process groupzERROR: shutting downz#ERROR: process group already active ERROR: no such process/group: %s)r   r0   r   addProcessGrouprw   r   r   r   r   r   r  r   r   rc   ALREADY_ADDEDrB  r9   rQ   r  r   rl   r   s         r$   do_addzDefaultControllerPlugin.do_addh  sM   		X,,..
 	B 	BDB**4000  9D @AAAA ?   ;&-">>>HOO$:;;;*=*EDH''[FM$???HOO$IJJJJ[FM$:::HOO$F$MNNN*=*EDH''*=*EDH'	B 	Bs   A''E&6C%E!!E&c                 :    | j                             d           d S )NzBadd <name> [...]	Activates any updates in config for process/grouprJ  r@   s    r$   help_addz DefaultControllerPlugin.help_add~  s)     , 	- 	- 	- 	- 	-r#   c                    |                                 }| j                                        }|D ]}	 |                    |           | j                            d|z             6# t
          j        $ r}t          j        | j        _	        |j
        t          j        j        k    r| j                            d|z             n9|j
        t          j        j        k    r| j                            d|z             n Y d }~d }~ww xY wd S )Nz%s: removed process groupz&ERROR: process/group still running: %sr  )r   r0   r   removeProcessGrouprw   r   r   r   r   rc   r   r   r   STILL_RUNNINGrB  r  s         r$   	do_removez!DefaultControllerPlugin.do_remove  s   		X,,..
 	D 	DDD--d333  ;d BCCCC ?   &9&A#;&-"===HOO$L(,%- . . . .[FM$:::HOO$F$MNNNN	D 	Ds   A&&D5BDDc                 :    | j                             d           d S )Nz<remove <name> [...]	Removes process/group from active configrJ  r@   s    r$   help_removez#DefaultControllerPlugin.help_remove  s)     ( 	) 	) 	) 	) 	)r#   c                 (     fd} j                                         }	 |                                }nh# t          j        $ rV}t
          j         j         _        |j        t          j
        j        k    r  j                             d           Y d }~d S  d }~ww xY w|d         \  }}}t          |                                          }	d|	v rt                      }	|	rt                      }
|                                D ]}|
                    |d                    |
                    |           |	D ]9}||
vr3 j                             d|z             t
          j         j         _        :|D ]}|	r||	vr	|                    |          } ||d           d |D             }|r6 j                             |d	d
           t
          j         j         _        n|                    |            ||d           |D ]`}|	r||	vr	|                    |            ||d           |                    |           |                    |            ||d           a|D ]*}|	r||	vr	|                    |            ||d           +d S )Nc                 F    j                             | d|           d S )Nr  rJ  )rl   r   r9   s     r$   logz.DefaultControllerPlugin.do_update.<locals>.log  s(    HOOgg677777r#   r  r   rf  r   zERROR: no such group: %sr  c                 H    g | ]}|d          t           j        j        k    | S )r   )r   r   rA  )r   ress     r$   r   z5DefaultControllerPlugin.do_update.<locals>.<listcomp>  s5     ? ? ?SH)=== ===r#   r  zhas problems; not removingzremoved process groupzupdated process groupzadded process group)r0   r   r  r   r   r   r   rc   r   r   r   r  rw   setr   r   r   r   r  r  r  )r9   rQ   r  r   r  r   r  r  removedvalid_gnamesr   r   gnamer  failss   `              r$   	do_updatez!DefaultControllerPlugin.do_update  s4   	8 	8 	8 	8 	8 X,,..
	,,..FF 	 	 	"5"=DH{fm::: >???	 #))w399;;'' L  55L  	FUUF"4466 * *

4=)))) MM%   % F F&&HOO$>$FGGG*=*EDH' 	0 	0E \ 9 9 11%88GCy!!!? ?G ? ? ?E EEE3O3O PQQQ&9&A#))%000C.//// 	0 	0E \ 9 9''...Cy!!!))%000&&u---C.//// 	. 	.E \ 9 9&&u---C,----		. 	.s   6 BA
BBBc                     | j                             d           | j                             d           | j                             d           d S )NzVupdate			Reload config and add/remove as necessary, and will restart affected programszYupdate all		Reload config and add/remove as necessary, and will restart affected programsz+update <gname> [...]	Update specific groupsrJ  r@   s    r$   help_updatez#DefaultControllerPlugin.help_update  sG    stttuvvvFGGGGGr#   c                    t          |d         |d                   }|d         }d}|t          j        j        k    r||dfz  S |t          j        j        k    r||dfz  S |t          j        j        k    rd|z  S t          d|d	|          )
Nr   rl   r   r9  rz  failed%s: clearedr|  r}  )r   r   r   rB  rA  r   r  r  s        r$   _clearresultz$DefaultControllerPlugin._clearresult  s    VG_fVn==h#6=)))t%6777V])))tX...V]*** 4''jDDD$$GHHHr#   c                    | j                                         sd S |                                }|sF| j                             d           t          j        | j         _        |                                  d S | j                                         }d|v rh|	                                }|D ]O}| j                             | 
                    |                     | j                             |d                    Pd S |D ]}t          |          \  }}	 |                    |           t          ||          }| j                             d|z             X# t          j        $ rh}	|	j        |||	j        d}
| j                             | 
                    |
                     | j                             |
d                    Y d }	~	d }	~	ww xY wd S )Nz$Error: clear requires a process namerf  r   r   r  )r0   r   r   rw   r   r   rc   
help_clearr   clearAllProcessLogsr  r   r   clearProcessLogsr   r   r   r   r  r  s              r$   do_clearz DefaultControllerPlugin.do_clear  s   x!! 	F		 	HOOBCCC"5"=DHOOFX,,..
E>> 4466G! L L 1 1& 9 9:::99&:JKKKKL L  : :+9$+?+?(
L://555 )\BBDHOOMD$89999 ! O O O'({%1&0,-M; ;E HOOD$5$5e$<$<===H==eHoNNNNNNNNO	: :s   EG&AG		Gc                     | j                             d           | j                             d           | j                             d           d S )Nz)clear <name>		Clear a process' log files.z5clear <name> <name>	Clear multiple process' log filesz'clear all		Clear all process' log filesrJ  r@   s    r$   r  z"DefaultControllerPlugin.help_clear  sP    EFFFD	F 	F 	FCDDDDDr#   c                 J   |                                 }t          j        |          }|d         dvr2| j                            d           t          j        | j        _        d S || j        j        _        | j        j        }| 	                    d           || j        _        d S )Nr   )unixhttpz%ERROR: url must be http:// or unix://r{   )
r   r   r0   rw   r   r   rc   r4   rC   rp  )r9   rQ   urlpartsold_exitstatuss        r$   do_openzDefaultControllerPlugin.do_open  s    iikk!#&&8+++HOOCDDD"5"=DHF%(",r,r#   c                 n    | j                             d           | j                             d           d S )Nz3open <url>	Connect to a remote supervisord process.z3		(for UNIX domain socket, use unix:///socket/path)rJ  r@   s    r$   	help_openz!DefaultControllerPlugin.help_open$  s2    NOOOOPPPPPr#   c                 V   |rF| j                             d           t          j        | j         _        |                                  d S | j                                         sd S | j                                         }| j                             |                                           d S )Nz#Error: version accepts no arguments)	r0   rw   r   r   rc   help_versionr   r   getSupervisorVersion)r9   rQ   r   s      r$   
do_versionz"DefaultControllerPlugin.do_version(  s     	HOOABBB"5"=DHFx!! 	FX,,..

7799:::::r#   c                 :    | j                             d           d S )Nz<version			Show the version of the remote supervisord processrJ  r@   s    r$   r  z$DefaultControllerPlugin.help_version4  s)    	 	 	 	 	r#   c                 j   | j                                         sd S |                                }|sF| j                             d           t          j        | j         _        |                                  d S t          |          dk    r2| j                             d           t          j        | j         _        d S |d         }| j         	                                }	 |
                    |          }n# t          j        $ r}|j        t          j        j        k    r1| j                             d           t          j        | j         _        n*| j                             dt#          |          z              Y d }~d S d }~ww xY w|d         t$          j        j        k    r2| j                             d           t          j        | j         _        d S | j                             d	           d }	 t+          || j                   }|                                 	 t/                      dz   }	 |                    ||           n# t          j        $ r}|j        t          j        j        k    r| j                             d           n*| j                             dt#          |          z              | j                             d           |                                 Y d }~d S d }~ww xY w|
                    |          }|d         t$          j        j        k    rJ| j                             d           | j                             d           |                                 d S O# t6          t8          f$ r7 | j                             d           |r|                                 Y d S Y d S w xY w)NzERROR: no process name suppliedr   z&ERROR: too many process names suppliedr   z ERROR: bad process name suppliedzERROR: r   zERROR: process not runningr-  Tr   zProcess got killedzExiting foreground)r0   r   r   rw   r   r   rc   help_fgr   r   ru  r   r   r   r   r   rB  r_  r   ProcessStatesRUNNINGr)   r?   r   sendProcessStdinr!   rW   r   EOFError)	r9   rQ   r  rl   r   r   r   rs   inps	            r$   do_fgzDefaultControllerPlugin.do_fg9  sg   x!! 	F		 	HOO=>>>"5"=DHLLNNNFu::>>HOODEEE"5"=DHFQxX,,..
	,,T22DD 	 	 	{fm444 BCCC&9&A##	CFF 2333FFFFF	 =F0888HOO8999"5"=DHF6777	tx((AGGIIIkkD(	//c::::    {fm&???(<====	CFF(:;;;HOO$8999FFHHHFFFFF "0066=F$8$@@@HOO$8999HOO$8999FFHHHF%& "8, 	 	 	HOO0111   	s^   C5 5FA5E??F1;M* -I M* K+BK& M* &K++A;M* (M* *AN21N2c                 n    | j                             d           | j                             d           d S )Nz4fg <process>	Connect to a process in foreground modez		Ctrl-C to exitrJ  )r9   r   s     r$   r  zDefaultControllerPlugin.help_fg{  s2    OPPP,-----r#   )r  r;   )7r   r   r   rl   r2   r0  rH  r<  rO  rM  rR  rT  do_exitrW  rd  rp  rr  rv  rx  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r"   r#   r$   r+  r+    sU       DH  6Q( Q( Q(f  1$ 1$ 1$f  $ $ $< < < G< < <" " ")H )H )HVC C CN N N6& & &I I I*/> /> />b< < <I I I I$= = =/> /> />b: : :4@ 4@ 4@lL L L  3 3 3#- #- #-JH H H9 9 94F F F> > > $ $ $"? ? ?(G G G+ + +*c c cB B B,- - -D D D&) ) )B. B. B.HH H H

I 
I 
I!: !: !:FE E E- - -Q Q Q
; 
; 
;  
@ @ @D. . . . . .r#   r+  c                 |   |t                      }|                    | t                     t          |          }|j        rF|                    d                    |j                             t          j        |j	                   |j
        r,|                    | |           t          j        d           d S d S )N)r  r   r   )r	   realizerX   rZ   r   r   joinrG   exitrc   r   r   )r   r4   cs      r$   mainr%    s    //OODgO&&&7A| 	',''((( 	tW%%% r#   __main__)NN)*rX   rd   r   r   r   rG   r+   supervisor.compatr   r   r   r   r   supervisor.medusar   rD   supervisor.optionsr	   r   r   r   r   r   r   r   r&   r   r  r  r!   r   r,   r)   re   rZ   r  r  r&  r)  r+  r%  r   r"   r#   r$   <module>r*     s   , 


    



     ' ' ' ' ' ' & & & & & & % % % % % % ' ' ' ' ' ' ' ' ' ' ' ' 5 5 5 5 5 5 , , , , , , , , , , , , - - - - - -             " " " " " "               }0}9}02 5 5 5 5 5y 5 5 5n@ @ @ @ @ @ @ @B  3E 3E 3E 3E 3E 3E 3E 3EjJ J J> > >{. {. {. {. {.2 {. {. {.|    zDFFFFF r#   