GOOD SHELL MAS BOY
Server: Apache/2.4.52 (Ubuntu)
System: Linux vmi1836763.contaboserver.net 5.15.0-130-generic #140-Ubuntu SMP Wed Dec 18 17:59:53 UTC 2024 x86_64
User: www-data (33)
PHP: 8.4.10
Disabled: NONE
Upload Files
File: //lib/python3/dist-packages/supervisor/__pycache__/supervisorctl.cpython-310.pyc
o

�X[_���@spdZddlZddlZddlZddlZddlZddlZddlmZddlm	Z	ddlm
Z
ddlmZddlmZddl
mZdd	lmZdd
lmZddlmZddlmZdd
lmZddlmZGdd�d�ZGdd�d�ZejjejjejjfZGdd�dej�Z Gdd�dej!�Z"dd�Z#Gdd�d�Z$dd�Z%dd�Z&Gdd �d e$�Z'd$d!d"�Z(e)d#kr�e(�dSdS)%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@s(eZdZdZdZdZdZdZdZdZ	dS)	�LSBInitExitStatusesr������N)
�__name__�
__module__�__qualname__�SUCCESS�GENERIC�INVALID_ARGS�UNIMPLEMENTED_FEATURE�INSUFFICIENT_PRIVILEGES�
NOT_INSTALLED�NOT_RUNNING�r r �:/usr/lib/python3/dist-packages/supervisor/supervisorctl.pyr/src@seZdZdZdZdS)�LSBStatusExitStatusesrrN)rrrr�UNKNOWNr r r r!r"8sr"c@sHeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dS)�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
    cCshtj�|�d|_||_||_t��|_t�	|j|jj
j|jj
j�|_
t�	|j|jj
j|jj
j�|_dS)NF)�	threading�Thread�__init__�killed�program�ctlr�Listener�listener�HTTPHandler�options�username�password�output_handler�
error_handler)�selfr)r*r r r!r'Fs
�
�zfgthread.__init__cCs |j|_|j|_tj�|�dS�N)�run�_fgthread__run_backup�_fgthread__runr%r&�start�r3r r r!r8Sszfgthread.startcCs@|j�|jjjd|j�|j�|jjjd|j�t��dS)Nz/logtail/%s/stdoutz/logtail/%s/stderr)	r1�getr*r.�	serverurlr)r2�asyncore�loopr9r r r!r5Ys��zfgthread.runcCs t�|j�|��|j|_dSr4)�sys�settrace�globaltracer6r5r9r r r!�__run`szfgthread.__runcCs|dkr|jSdS)N�call)�
localtrace�r3�frame�why�argr r r!r@fszfgthread.globaltracecCs|jr
|dkr
t��|jS)N�line)r(�
SystemExitrCrDr r r!rClszfgthread.localtracecCs|j��|j��d|_dS)NT)r1�closer2r(r9r r r!�killrs


z
fgthread.killN)rrr�__doc__r'r8r5r7r@rCrKr r r r!r$@s
r$c@s�eZdZ		d+dd�Zdd�Zdd�Zd	d
�Zd,dd�Zd
d�Zdd�Z	dd�Z
dd�Zd,dd�Zdd�Z
d,dd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�ZdS)-�
Controller�tabNc
Cs�||_|jjd|_g|j_dg|_d|_tj|_tj	�
||||�|jjD]4\}}}||fi|��}t|�D]}	|	�
d�rOtt||	��rO|j�|	dd��q7|jj�|�||_q&dS)Nz> �help�do_r)r.�prompt�plugins�vocab�_complete_inforr�
exitstatus�cmd�Cmdr'�plugin_factories�dir�
startswith�callable�getattr�append�name)
r3r.�completekey�stdin�stdoutr^�factory�kwargs�plugin�ar r r!r'ys ��zController.__init__cCsdSr4r r9r r r!�	emptyline�szController.emptylinecCs|�d|�tj|_dS)Nz*** Unknown syntax: %s)�outputrrrU)r3rHr r r!�default�szController.defaultcs�zFddl����}|�dd�}|�dd�}|�dd�}��|��jrEz���j�Wn	ty4Ynw��fdd�}ddl}|�|�Wn	t	yOYnwz
|j
�d�|��WdSt
yl|�d�YdSw)	Nr�:��*�-cs(z	���j�WdStyYdSwr4)�write_history_file�history_file�IOErrorr �r.�readliner r!�save�s
�z%Controller.exec_cmdloop.<locals>.save�status)rq�get_completer_delims�replace�set_completer_delimsrn�read_history_filero�atexit�register�ImportError�cmdqueuer]�cmdloop�KeyboardInterruptrg)r3�argsr.�delimsrrrxr rpr!�exec_cmdloop�s6
�
��
�zController.exec_cmdloopcCs4||tjjfvr
dS|tvrtj|_dStj|_dSr4)r�Faultsr�DEAD_PROGRAM_FAULTSrrrUr)r3�	faultcode�ignored_faultcoder r r!� set_exitstatus_from_xmlrpc_fault�s
z+Controller.set_exitstatus_from_xmlrpc_faultc
Csx|�|�\}}}|s|��S|dur|�|�Sd|_||_|dkr&|�|�S|�|�}|dur4|�|�Szaz||�WWStjy�}zF|jdkr|j	j
ru|�d�td�}t
j
dd�}|�d�||j	_||j	_|�|�WYd}~WS|�d�tj|_ntj|_�WYd}~nd}~ww||�WdSty�t��\\}}	}}
}}d|
|||f}
|�|
�tj|_YdSw)	z� Override the onecmd method to:
          - catch and print all exceptions
          - call 'do_foo' on plugins rather than ourself
        Nrji�zServer requires authenticationz	Username:z	Password:)rQz error: %s, %s: file: %s line: %s)�	parselinerfrhrT�lastcmd�_get_do_funcr�
ProtocolError�errcoder.�interactivergr�getpassr/r0�onecmdrrrU�	Exceptionr<�compact_traceback)r3rHrVrG�do_func�er/r0�file�fun�t�v�tbinfo�errorr r r!r��sN








���
�zController.onecmdcCsDd|}t||d�}|s |jjD]}t||d�}|dur|Sq|S)NrP)r\r.rR)r3rV�	func_name�funcrdr r r!r��s�zController._get_do_funccCs(t|t�r
|�d�}|j�|d�dS)Nzutf-8�
)�
isinstancer�encodera�write)r3�messager r r!rg�s

zController.outputcCs
|�d�S)N�
supervisor)�get_server_proxyr9r r r!�get_supervisor��
zController.get_supervisorcCs |j��}|dur|St||�Sr4)r.�getServerProxyr\)r3�	namespace�proxyr r r!r��s

zController.get_server_proxyc
Cs4z'|��}|��}ddlm}||jkr%|�d|j|f�tj|_WdSWdSt	j
yP}z|jtj
jkrG|�d�tj|_WYd}~dStj|_�d}~wtjy�}z=|jdtjkrt|�d|jj�tj|_WYd}~dS|jdtjkr�|�d|jj�tj|_WYd}~dStj|_�d}~ww)	Nr)�rpcinterfacezsSorry, this version of supervisorctl expects to talk to a server with API version %s, but the remote version is %s.Fz�Sorry, 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_VERSIONrgrrrUr�Fault�	faultCoderr��UNKNOWN_METHODrr�socketr�r~�errno�ECONNREFUSEDr.r;r�ENOENTr)r3r��apir�r�r r r!�upchecksJ
��������zController.upcheckcCs�|durddl}|��}g}|��s|�|�}n6|��}|d}t|�dkr1|�d�s1|�|�}n|dvr;|�|�}n|dvrE|�|�}n	|dvrN|�|�}t|�|krX||SdS)aaCompleter 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.Nrr� rO)�add�remove�update)	�clear�fg�pid�restart�signalr8rs�stop�tail)	rq�get_line_buffer�strip�_complete_actions�split�len�endswith�_complete_groups�_complete_processes)r3�text�staterHrq�matches�words�actionr r r!�complete%s&
�zController.completecs�fdd�|jD�S)z5Build a completion list of action names matching textc�g|]}|���r|d�qS�r��rZ)�.0re�r�r r!�
<listcomp>H�z0Controller._complete_actions.<locals>.<listcomp>)rS)r3r�r r�r!r�FszController._complete_actionscs>g}|��D]}|d|vr|�|d�q�fdd�|D�S)z4Build a completion list of group names matching text�groupcr�r�r�)r��gr�r r!r�Pr�z/Controller._complete_groups.<locals>.<listcomp>��_get_complete_infor])r3r��groups�infor r�r!r�Js�zController._complete_groupscs�g}|��D]4}d�vs|d|dkr3|�d|d|df�d|d|vr2|�d|d�q|�|d�q�fdd�|D�S)z6Build a completion list of process names matching textrir^r��%s:%sz%s:*cr�r�r�)r��pr�r r!r�\r�z2Controller._complete_processes.<locals>.<listcomp>r�)r3r��	processesr�r r�r!r�Rs�zController._complete_processescCs|jdur|����|_|jS)z�Get 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.N)rTr��getAllProcessInfor9r r r!r�^s
zController._get_complete_infocCs4|��dkr|��dS|jjD]}|�|�qdS)NrO)r��	help_helpr.rR�do_help)r3rGrdr r r!r�fs
�zController.do_helpcCs|�d�|�d�dS)Nz'help		Print a list of available actionsz%help <action>	Print help for <action>�rgr9r r r!r�ms
zController.help_helpcCs|�d�dS)Nrjrr��r3rGr r r!�do_EOFqs
zController.do_EOFcCs|�d�dS)Nz(To quit, type ^D or use the quit commandr�r9r r r!�help_EOFu�zController.help_EOF)rNNNr4)rrrr'rfrhr�r�r�r�rgr�r�r�r�r�r�r�r�r�r�r�r�r r r r!rMws.
�
 -


%!rMcCsBg}|jg}|r|�d�}|jr|t|j�}|t|�}|s|S)Nr)�	__class__�pop�	__bases__�listrY)�inst�names�classes�aclassr r r!�	get_namesxs
�r�c@s0eZdZdZdd�Zdd�Zee�Zdd�ZdS)	�ControllerPluginBase�unnamedcCs
||_dSr4)r*)r3�
controllerr r r!r'�r�zControllerPluginBase.__init__cCs
d|jS)Nz %s commands (type help <topic>):)r^r9r r r!�_doc_header�r�z ControllerPluginBase._doc_headercCsj|rFz	t|d|�}Wn5ty@zt|d|�j}|r'|j�|�WYdSWn	ty1Ynw|j�|jj|f�YdSw|�dSt|�}g}g}i}|D]}|dd�dkrdd||dd�<qR|��d}	|D]5}|dd�dkr�||	kr|qm|}	|dd�}
|
|vr�|�|
�||
=qmt||�jr�|�|
�qm|�|
�qm|j�d�|j�	|j
|dd�dS)	N�help_rPrrrjr��P)r\�AttributeErrorrLr*rg�nohelpr��sortr]�print_topics�
doc_header)r3rGr��docr��cmds_doc�
cmds_undocrOr^�prevnamerVr r r!r��sT���

�

�zControllerPluginBase.do_helpN)	rrrr^r'r��propertyr�r�r r r r!r��sr�cCs,ttjdd�pd}|���d�rdStjjS)N�encodingrj�utf)r\r>ra�lowerrZr�)�encr r r!�
not_all_langs�srcCs t�}|r|�d|�dSdS)Nz�Warning: sys.stdout.encoding is set to %s, so Unicode output may fail. Check your LANG and PYTHONIOENCODING environment settings.)rrg)r*�problematic_encr r r!�check_encoding�s
��rc@s�eZdZdZdZdd�Zdd�Zdd�Zd	d
�Zdd�Z	d
d�Z
dd�Ze
Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zdfd$d%�Zd&d'�Zd(d)�Zd*d+�Zd,d-�Zd.d/�Zd0d1�Zd2d3�Zd4d5�Zd6d7�Zd8d9�Z d:d;�Z!d<d=�Z"d>d?�Z#d@dA�Z$dBdC�Z%dDdE�Z&dFdG�Z'dHdI�Z(dJdK�Z)dLdM�Z*dNdO�Z+dPdQ�Z,dRdS�Z-dTdU�Z.dVdW�Z/dXdY�Z0dZd[�Z1d\d]�Z2d^d_�Z3d`da�Z4dbdc�Z5dgddde�Z6dS)h�DefaultControllerPluginrhNcCs�t|j�|j�d�|jjj}|jjj}d}z$|jdur"t��}n|j}t�	|||�}|�
|jjj|�t�
�WdStyQ|rH|��|j�d�YdSw)N�==> Press Ctrl-C to exit <==rj)rr*rgr.r/r0r,rr+r-r:r;r<r=r}rJ)r3�pathr/r0�handlerr,r r r!�_tailf�s$




�zDefaultControllerPlugin._tailfc
Cs�|j��sdS|��}t|�dkr"|j�d�tj|j_|��dSt|�dkr9|j�d�tj|j_|��dSd}|d�	d�rG|�
d�}t|�dkrT|d}d}n-|rt|d}|d��}|d	vrs|j�d
|�tj|j_dSn
|j�d�tj|j_dSd}|dur�|dd�}|d
kr�d}nzt|�}Wn|j�d|�tj|j_YdS|j�
�}|dur�|�d||f�St|j�z|dkr�|�||d�}	n|�||d�}	Wnctj�y?}
zUtj|j_d}|
jtjjkr�|j�||df�n'|
jtjjk�r|j�||df�n|
jtjjk�r%|j�||df�n�WYd}
~
dSWYd}
~
dSWYd}
~
dSd}
~
ww|j�|	�dS)NrzError: too few argumentsr�Error: too many argumentsrrl���ra)�stderrrazError: bad channel %rz!Error: tail requires process name�@�f�Error: bad argument %sz/logtail/%s/%s�%s: ERROR (%s)�no log file�unknown error reading logzno such process name)r*r�r�r�rgrrrU�	help_tailrZr�r��intr�rr�readProcessStdoutLog�readProcessStderrLogrr�r�rr��NO_FILE�FAILED�BAD_NAME)r3rGr~�modifierr^�channel�bytes�whatr�rgr��templater r r!�do_tail�s�




�



���


�

����zDefaultControllerPlugin.do_tailcC�|j�d�dS)Nz�tail [-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�r*rgr9r r r!r3��z!DefaultControllerPlugin.help_tailc

Cs�|j��sdS|��}t|�dkr"|j�d�tj|j_|��dSt|�dkrr|d�	d�ra|ddd�}|dkrBd}|�
|�Szt|�}Wn|j�d|d�tj|j_YdS|}n|j�d|d�tj|j_dSd}|j��}z	|�
|d�}WnCtjy�}z6tj|j_d	}	|jtjjkr�|j�|	d
�n|jtjjkr�|j�|	d�n�WYd}~dSWYd}~dSd}~ww|j�|�dS)Nrr	rrlr
z/mainlogtailrrr)�supervisordr)r"r)r*r�r�r�rgrrrU�
help_maintailrZrrr��readLogrr�r�rr�rr)
r3rGr~rrrr�rgr�rr r r!�do_maintail=sR






���z#DefaultControllerPlugin.do_maintailcCr)Nz�maintail -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
r r9r r r!r#pr!z%DefaultControllerPlugin.help_maintailcCs|j�|�Sr4)r*r�r�r r r!�do_quitxszDefaultControllerPlugin.do_quitcCr)Nzquit	Exit the supervisor shell.r r9r r r!�	help_quit{�z!DefaultControllerPlugin.help_quitcCr)Nzexit	Exit the supervisor shell.r r9r r r!�	help_exit�r(z!DefaultControllerPlugin.help_exitcCs�gd}}t|�D]\}}|�t|d|d��t||�|kr't||�}q	dt|d�d}t|�D]\}}||||d|dd	�}|j�|�q6dS)
N�r�r^z%(namespec)-rzs%(state)-10s%(desc)s�	statename�description)�namespecr��desc)�	enumerater]r
r��strr*rg)r3�
process_infos�	namespecs�maxlen�ir�rrHr r r!�_show_statuses�s
���z&DefaultControllerPlugin._show_statusesc
Cs
|j��stj|j_dS|j��}|��}t|���}|r!d|vr$|}nIg}|D]D}d}t	|�\}}	|D]}
|
d|k}|	durH|oG|
d|	k}|rQd}|�
|
�q4|rl|	dur]d|}nd|}|j�|�tj|j_q(|�|�|D]}
|
dt
jvr�tj|j_qtdS)	N�allTr�r^F�%s: ERROR (no such group)z%s: ERROR (no such process)r�)r*r�r"r#rUr�r�rr�rr]rgr5r
�STOPPED_STATESr)
r3rGr��	all_infosr��matching_infosr^�bad_name�
group_name�process_namer��matched�msgr r r!�	do_status�sB



�

�

��z!DefaultControllerPlugin.do_statuscC�4|j�d�|j�d�|j�d�|j�d�dS)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 infor r9r r r!�help_status�sz#DefaultControllerPlugin.help_statuscCs|j��}|j��sdS|��}|s |��}|j�t|��dSd|vr7|��D]}|j�t|d��q(dS|D]H}z|�|�}Wn)t	j
yk}ztj|j_
|jtjjkr`|j�d|�n�WYd}~q9d}~ww|d}|j�t|��|dkr�tj|j_
q9dS)Nr6r�zNo such process %sr)r*r�r�r��getPIDrgr0r��getProcessInforr�rrrUr�rr�rr)r3rGr�r�r�r�r^r�r r r!�do_pid�s8

�
���
��zDefaultControllerPlugin.do_pidcC�(|j�d�|j�d�|j�d�dS)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.r r9r r r!�help_pid�sz DefaultControllerPlugin.help_pidcCs�t|d|d�}|d}d}|tjjkr||dfS|tjjkr'||dfS|tjjkr3||dfS|tjjkr?||dfS|tjjkrK||d	fS|tjjkrW||d
fS|tjj	krad|St
d||f��)
Nr�r^rsr�no such processzno such filezfile is not executablezalready startedzspawn errorzabnormal termination�%s: started�Unknown result code %s for %s)r
rr�rr�NOT_EXECUTABLE�ALREADY_STARTED�SPAWN_ERROR�ABNORMAL_TERMINATIONr�
ValueError�r3�resultr^�coderr r r!�_startresult�s$z$DefaultControllerPlugin._startresultcCs�|j��sdS|��}|j��}|s#|j�d�tj|j_|��dSd|vrF|�	�}|D]}|j�|�
|��|j�|dtj
j�q-dS|D]�}t|�\}}|dur�z |�|�}|D]}|j�|�
|��|j�|dtj
j�q\WqHtjy�}	z#|	jtj
jkr�d|}
|j�|
�tj|j_ntj|j_�WYd}	~	qHd}	~	wwz|�|�}Wn0tjy�}	z#|	j|||	jd�}
|j�|�
|
��|j�|
dtj
j�WYd}	~	qHd}	~	wwt||�}|j�d|�qHdS)Nz$Error: start requires a process namer6rsr7�rsr^r�r,rI)r*r�r�r�rgrrrU�
help_start�startAllProcessesrSr�rr�rLr�startProcessGrouprr�r�rr�startProcess�faultStringr
�r3rGr�r��resultsrQr^r<r=r�r�r r r!�do_start�sb


�
�
���	�"��
�z DefaultControllerPlugin.do_startcCrA)Nzstart <name>		Start a processz/start <gname>:*		Start all processes in a groupz6start <name> <name>	Start multiple processes or groupszstart all		Start all processesr r9r r r!rU,s�z"DefaultControllerPlugin.help_start�	signalledcCs�t|d|d�}|d}|d}d}|tjjkr||dfS|tjjkr+||dfS|tjjkr7||dfS|tjjkrCd	||fS|tjjkrK|Std
||f��)Nr�r^rsr,rrHzbad signal nameznot running�%s: %srJ)	r
rr�r�
BAD_SIGNALrrrrO)r3rQ�successr^rR�fault_stringrr r r!�
_signalresult3sz%DefaultControllerPlugin._signalresultcCs|j|dd�S)N�stopped)r`)rb)r3rQr r r!�_stopresultEr�z#DefaultControllerPlugin._stopresultcCs�|j��sdS|��}|j��}|s#|j�d�tj|j_|��dSd|vrF|�	�}|D]}|j�|�
|��|j�|dtj
j�q-dS|D]�}t|�\}}|dur�z |�|�}|D]}|j�|�
|��|j�|dtj
j�q\WqHtjy�}	ztj|j_|	jtj
jkr�d|}
|j�|
�n�WYd}	~	qHd}	~	wwz|�|�Wn0tjy�}	z#|	j|||	jd�}
|j�|�
|
��|j�|
dtj
j�WYd}	~	qHd}	~	wwt||�}|j�d|�qHdS)Nz#Error: stop requires a process namer6rsr7rTz%s: stopped)r*r�r�r�rgrrrU�	help_stop�stopAllProcessesrdr�rr�rr�stopProcessGrouprr�r�r�stopProcessrYr
rZr r r!�do_stopHs`


�
�
����"��
�zDefaultControllerPlugin.do_stopcCrA)Nzstop <name>		Stop a processz-stop <gname>:*		Stop all processes in a groupz4stop <name> <name>	Stop multiple processes or groupszstop all		Stop all processesr r9r r r!rey�z!DefaultControllerPlugin.help_stopc
Cs�|j��sdS|��}t|�dkr"|j�d�|��tj|j_dS|d}|dd�}|j�	�}d|vrR|�
|�}|D]}|j�|�|��|j�|d�q<dS|D]�}t
|�\}	}
|
dur�z|�|	|�}|D]}|j�|�|��|j�|d�qiWqTtjy�}z|jtjjkr�d|	}|j�|�tj|j_n�WYd}~qTd}~wwz|�||�Wn-tjy�}z |j|
|	|jd�}|j�|�|��|j�|d�WYd}~qTd}~wwt|	|
�}|j�d	|�qTdS)
Nrz7Error: signal requires a signal name and a process namerrr6rsr7rTz
%s: signalled)r*r�r�r�rg�help_signalrrrUr��signalAllProcessesrbr�r�signalProcessGrouprr�r�rr�r�
signalProcessrYr
)
r3rGr~�sigr�r�r[rQr^r<r=r�r�r r r!�	do_signalsl
�


���������
�z!DefaultControllerPlugin.do_signalcCrA)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 processesr r9r r r!rk�rjz#DefaultControllerPlugin.help_signalcCsT|j��sdS|��}|s|j�d�tj|j_|��dS|�|�|�	|�dS)Nz&Error: restart requires a process name)
r*r�r�rgrrrU�help_restartrir\)r3rGr�r r r!�
do_restart�s


z"DefaultControllerPlugin.do_restartcCs@|j�d�|j�d�|j�d�|j�d�|j�d�dS)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.r r9r r r!rq�s
z$DefaultControllerPlugin.help_restartc
Cs>|jjjrtd�}|���d�}nd}|r�|j��}z|��Wnttj	yH}z|j
tjj
kr7|j�d�ntj|j_�WYd}~dSd}~wtjy�}z@tj|j_|jdtjkrkd}|j�||jjj�n|jdtjkr�d}|j�||jjj�n�WYd}~dSWYd}~dSd}~ww|j�d�dSdS)	Nz5Really shut the remote supervisord process down y/N? �yr�ERROR: already shutting downrz1ERROR: %s refused connection (already shut down?)z+ERROR: %s no such file (already shut down?)z	Shut down)r*r.r�rr�rZr��shutdownrr�r�rr��SHUTDOWN_STATErgrrrUr�r�r~r�r�r;r�)r3rG�yesno�reallyr�r�r?r r r!�do_shutdown�s<


��
����z#DefaultControllerPlugin.do_shutdowncCr)Nz+shutdown 	Shut the remote supervisord down.r r9r r r!�
help_shutdown�r(z%DefaultControllerPlugin.help_shutdownc
Cs�|r|j�d�tj|j_|��dS|jjjr$td�}|�	��
d�}nd}|rd|j��}z|��Wn(t
jy[}ztj|j_|jtjjkrO|j�d�n�WYd}~dSd}~ww|j�d�dSdS)Nz"Error: reload accepts no argumentsz3Really restart the remote supervisord process y/N? rsrrtzRestarted supervisord)r*rgrrrU�help_reloadr.r�rr�rZr�r�rr�r�rr�rv)r3rGrwrxr�r�r r r!�	do_reload�s.



����z!DefaultControllerPlugin.do_reloadcCr)Nz(reload 		Restart the remote supervisord.r r9r r r!r{r(z#DefaultControllerPlugin.help_reloadc
	Cs�|\}}}i}|df|df|dffD]\}}|�tt||gt|����q|rEt|���}|��|D]}	|j�d|	||	f�q4dS|j�d�dS)N�	available�changed�disappearedr^zNo config updates to processes)	r��dict�zipr�r��keysr�r*rg)
r3�added_changed_dropped_tuple�addedr~�dropped�
changedict�nr�r�r^r r r!�_formatChangess
� �z&DefaultControllerPlugin._formatChangescCsrt|d|d�}d|i}|drd|d<nd|d<|dr#d|d<nd|d<d	|d
|df|d<d
}||S)Nr�r^�inusezin use�avail�	autostart�auto�manualr��
group_prio�process_prio�priorityz4%(name)-32s %(inuse)-9s %(autostart)-9s %(priority)sr	)r3�
configinfor^�	formattedrr r r!�_formatConfigInfo"s


�z)DefaultControllerPlugin._formatConfigInfoc
Cs�|r|j�d�tj|j_|��dS|j��}z|��}Wn(tj	yF}ztj|j_|j
tjj
kr:|j�d�n�WYd}~dSd}~ww|D]}|j�|�|��qIdS)Nz!Error: avail accepts no arguments�ERROR: supervisor shutting down)r*rgrrrU�
help_availr��getAllConfigInforr�r�rr�rvr�)r3rGr�r�r��pinfor r r!�do_avail3s&


����z DefaultControllerPlugin.do_availcCr)Nz(avail			Display all configured processesr r9r r r!r�Gr(z"DefaultControllerPlugin.help_availc
Cs�|r|j�d�tj|j_|��dS|j��}z|��}Wn@tj	y^}z3tj|j_|j
tjj
kr:|j�d�n|j
tjjkrK|j�d|j�n�WYd}~dSWYd}~dSd}~ww|�|d�dS)Nz"Error: reread accepts no argumentsr�z	ERROR: %sr)r*rgrrrU�help_rereadr��reloadConfigrr�r�rr�rv�CANT_REREADrYr�)r3rGr�rQr�r r r!�	do_rereadJs(


���	z!DefaultControllerPlugin.do_rereadcCr)NzDreread 			Reload the daemon's configuration files without add/remover r9r r r!r�_r(z#DefaultControllerPlugin.help_rereadcCs�|��}|j��}|D]a}z|�|�WnOtjyc}zB|jtjj	kr0|j�
d�tj|j_
n)|jtjjkr>|j�
d�n|jtjjkrS|j�
d|�tj|j_
ntj|j_
�WYd}~qd}~ww|j�
d|�qdS)NzERROR: shutting downz#ERROR: process group already active� ERROR: no such process/group: %sz%s: added process group)r�r*r��addProcessGrouprr�r�rr�rvrgrrrU�
ALREADY_ADDEDr�r3rGr�r�r^r�r r r!�do_addbs(

��
�zDefaultControllerPlugin.do_addcCr)NzBadd <name> [...]	Activates any updates in config for process/groupr r9r r r!�help_addxr(z DefaultControllerPlugin.help_addcCs�|��}|j��}|D]K}z|�|�Wn9tjyM}z,tj|j_|j	t
jjkr2|j�
d|�n|j	t
jjkrB|j�
d|�n�WYd}~qd}~ww|j�
d|�qdS)Nz&ERROR: process/group still running: %sr�z%s: removed process group)r�r*r��removeProcessGrouprr�rrrUr�rr��
STILL_RUNNINGrgrr�r r r!�	do_remove|s$

���
�z!DefaultControllerPlugin.do_removecCr)Nz<remove <name> [...]	Removes process/group from active configr r9r r r!�help_remove�r(z#DefaultControllerPlugin.help_removec
s��fdd�}�j��}z|��}Wn'tjy8}ztj�j_|jt	j
jkr3�j�d�WYd}~dS�d}~ww|d\}}}t
|���}	d|	vrMt
�}	|	r{t
�}
|��D]	}|
�|d�qV|
�|�|	D]}||
vrz�j�d|�tj�j_qg|D]6}|	r�||	vr�q}|�|�}
||d�d	d
�|
D�}|r��j�d|df�tj�j_q}|�|�||d
�q}|D]"}|	r�||	vr�q�|�|�||d�|�|�|�|�||d�q�|D]}|	r�||	vr�q�|�|�||d�q�dS)Ncs�j�d||f�dS)Nr^r )r^r�r9r r!�log�sz.DefaultControllerPlugin.do_update.<locals>.logrtrr6r�zERROR: no such group: %srccSs g|]}|dtjjkr|�qS)rs)rr�r)r��resr r r!r��s�z5DefaultControllerPlugin.do_update.<locals>.<listcomp>r^zhas problems; not removingzremoved process groupzupdated process groupzadded process group)r*r�r�rr�rrrUr�rr�rvrg�setr�r�r�r�rgr�r�)r3rGr�r�rQr�r�r~�removed�valid_gnamesr�r��gnamer[�failsr r9r!�	do_update�sh

��

�








�z!DefaultControllerPlugin.do_updatecCrF)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 groupsr r9r r r!�help_update�sz#DefaultControllerPlugin.help_updatecCsrt|d|d�}|d}d}|tjjkr||dfS|tjjkr'||dfS|tjjkr1d|Std||f��)	Nr�r^rsrrH�failed�%s: clearedrJ)r
rr�rrrrOrPr r r!�_clearresult�sz$DefaultControllerPlugin._clearresultcCs$|j��sdS|��}|s|j�d�tj|j_|��dS|j��}d|vrC|�	�}|D]}|j�|�
|��|j�|d�q-dS|D]J}t|�\}}z|�
|�Wn-tjy�}	z |	j|||	jd�}
|j�|�
|
��|j�|
d�WYd}	~	qEd}	~	wwt||�}|j�d|�qEdS)Nz$Error: clear requires a process namer6rsrTr�)r*r�r�rgrrrU�
help_clearr��clearAllProcessLogsr�r�r�clearProcessLogsrr�r�rYr
rZr r r!�do_clear�s@


����
�z DefaultControllerPlugin.do_clearcCrF)Nz)clear <name>		Clear a process' log files.z5clear <name> <name>	Clear multiple process' log filesz'clear all		Clear all process' log filesr r9r r r!r�s
�z"DefaultControllerPlugin.help_clearcCs`|��}t�|�}|ddvr|j�d�tj|j_dS||jj_|jj}|�	d�||j_dS)Nr)�unix�httpz%ERROR: url must be http:// or unix://rj)
r�rr*rgrrrUr.r;r@)r3rG�url�parts�old_exitstatusr r r!�do_opens



zDefaultControllerPlugin.do_opencC�|j�d�|j�d�dS)Nz3open <url>	Connect to a remote supervisord process.z3		(for UNIX domain socket, use unix:///socket/path)r r9r r r!�	help_open�z!DefaultControllerPlugin.help_opencCsR|r|j�d�tj|j_|��dS|j��sdS|j��}|j�|���dS)Nz#Error: version accepts no arguments)	r*rgrrrU�help_versionr�r��getSupervisorVersion)r3rGr�r r r!�
do_version"s


z"DefaultControllerPlugin.do_versioncCr)Nz<version			Show the version of the remote supervisord processr r9r r r!r�.r!z$DefaultControllerPlugin.help_versionc	
Cs@|j��sdS|��}|s|j�d�tj|j_|��dSt|�dkr1|j�d�tj|j_dS|d}|j�	�}z|�
|�}Wn1tjyr}z$|j
tjjkr]|j�d�tj|j_n
|j�dt|��WYd}~dSd}~ww|dtjjkr�|j�d�tj|j_dS|j�d	�d}zrt||j�}|��	t�d}z|�||�Wn7tjy�}z*|j
tjjkr�|j�d�n
|j�dt|��|j�d
�|��WYd}~WdSd}~ww|�
|�}|dtjjk�r|j�d�|j�d
�|��WdSq�ttf�y|j�d
�|�r|��YdSYdSw)NzERROR: no process name suppliedrz&ERROR: too many process names suppliedrz ERROR: bad process name suppliedzERROR: r�zERROR: process not runningrTr�zProcess got killedzExiting foreground)r*r�r�rgrrrU�help_fgr�r�rDrr�r�rr�rr0r
�
ProcessStates�RUNNINGr$r8r�sendProcessStdinrrKr}�EOFError)	r3rGr�r^r�r�r�re�inpr r r!�do_fg3sv



��

��
	���zDefaultControllerPlugin.do_fgcCr�)Nz4fg <process>	Connect to a process in foreground modez		Ctrl-C to exitr )r3r~r r r!r�ur�zDefaultControllerPlugin.help_fg)r]r4)7rrrr^r,rrrr%r#r&r'�do_exitr)r5r@rBrErGrSr\rUrbrdrirerprkrrrqryrzr|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�sjS
3+1
16	D#
BrcCsl|durt�}|j|td�t|�}|jr$|�d�|j��t�|j	�|j
r4|�||�t�d�dSdS)N)r�r�r)r�realizerLrMr~r��joinr>�exitrUr�r�)r~r.�cr r r!�mainzs�r��__main__)NN)*rLrVr�r�r�r>r%�supervisor.compatrrrrr�supervisor.medusarr<�supervisor.optionsrr
rr�rr
rrr"r�rMrNrr�r&r$rWrMr�r�rrrr�rr r r r!�<module>sZ	�7
5
?
�