HEX
Server: LiteSpeed
System: Linux s1049.use1.mysecurecloudhost.com 4.18.0-477.27.2.lve.el8.x86_64 #1 SMP Wed Oct 11 12:32:56 UTC 2023 x86_64
User: xedaptot (3356)
PHP: 8.3.31
Disabled: NONE
Upload Files
File: //lib/python3.6/site-packages/supervisor/__pycache__/supervisorctl.cpython-36.pyc
3

�k�`���@sndZddlZddlZddlZddlZddlZddlZddlmZddlm	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#k�rje(�dS)%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�rr�#/usr/lib/python3.6/supervisorctl.pyr/src@seZdZdZdZdS)�LSBStatusExitStatusesrrN)rrrr�UNKNOWNrrrr 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
    cCshtjj|�d|_||_||_tj�|_tj	|j|jj
j|jj
j�|_
tj	|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)rrr r&Fs
zfgthread.__init__cCs |j|_|j|_tjj|�dS)N)�run�_fgthread__run_backup�_fgthread__runr$r%�start)r2rrr r6Sszfgthread.startcCs@|jj|jjjd|j�|jj|jjjd|j�tj�dS)Nz/logtail/%s/stdoutz/logtail/%s/stderr)	r0�getr)r-�	serverurlr(r1�asyncore�loop)r2rrr r3Ys
zfgthread.runcCs tj|j�|j�|j|_dS)N)�sys�settrace�globaltracer4r3)r2rrr Z__run`szfgthread.__runcCs|dkr|jSdSdS)NZcall)�
localtrace)r2�frame�why�argrrr r=fszfgthread.globaltracecCs|jr|dkrt��|jS)N�line)r'�
SystemExitr>)r2r?r@rArrr r>lszfgthread.localtracecCs|jj�|jj�d|_dS)NT)r0�closer1r')r2rrr �killrs

z
fgthread.killN)rrr�__doc__r&r6r3r5r=r>rErrrr r#@s
r#c@s�eZdZd+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	j
||||�xt|jjD]h\}}}||f|�}x<t|�D]0}	|	j
d�rntt||	��rn|jj|	dd��qnW|jjj|�||_qNWdS)Nz> �help�do_r)r-�prompt�plugins�vocab�_complete_inforr�
exitstatus�cmd�Cmdr&Zplugin_factories�dir�
startswith�callable�getattr�append�name)
r2r-Zcompletekey�stdin�stdoutrW�factory�kwargs�plugin�arrr r&yszController.__init__cCsdS)Nr)r2rrr �	emptyline�szController.emptylinecCs|jd|�tj|_dS)Nz*** Unknown syntax: %s)�outputrrrO)r2rBrrr �default�szController.defaultcs�y�ddl��j�}|jdd�}|jdd�}|jdd�}�j|��jr�y�j�j�Wntk
rjYnX��fdd�}ddl}|j|�Wnt	k
r�YnXy|j
jd�|j�Wnt
k
r�|jd�YnXdS)	Nr�:��*�-cs*y�j�j�Wntk
r$YnXdS)N)�write_history_file�history_file�IOErrorr)r-�readlinerr �save�sz%Controller.exec_cmdloop.<locals>.save�status)rhZget_completer_delims�replaceZset_completer_delimsrf�read_history_filerg�atexit�register�ImportErrorZcmdqueuerVZcmdloop�KeyboardInterruptr_)r2�argsr-Zdelimsrirmr)r-rhr �exec_cmdloop�s.

zController.exec_cmdloopcCs0||tjjfkrn|tkr$tj|_ntj|_dS)N)r�Faultsr�DEAD_PROGRAM_FAULTSrrrOr)r2Z	faultcodeZignored_faultcoderrr � set_exitstatus_from_xmlrpc_fault�s

z+Controller.set_exitstatus_from_xmlrpc_faultcCsj|j|�\}}}|s|j�S|dkr.|j|�Sd|_||_|dkrL|j|�S|j|�}|dkrh|j|�Sy�y||�Stjk
�r
}zx|jdkr�|j	j
r�|jd�td�}t
j
dd�}|jd�||j	_||j	_|j|�S|jd�tj|_n
tj|_�WYdd}~XnX||�WnNtk
�rdtj�\\}}	}}
}}d|
|||f}
|j|
�tj|_YnXdS)	z� Override the onecmd method to:
          - catch and print all exceptions
          - call 'do_foo' on plugins rather than ourself
        Nrbi�zServer requires authenticationz	Username:z	Password:)rKz error: %s, %s: file: %s line: %s)Z	parseliner^r`rNZlastcmd�_get_do_funcrZ
ProtocolErrorZerrcoder-�interactiver_r�getpassr.r/�onecmdrrrO�	Exceptionr9Zcompact_traceback)r2rBrPrAZdo_func�er.r/�fileZfun�t�vZtbinfo�errorrrr ry�sF










zController.onecmdcCsDd|}t||d�}|s@x&|jjD]}t||d�}|dk	r"Pq"W|S)NrJ)rUr-rL)r2rPZ	func_name�funcr\rrr rv�szController._get_do_funccCs(t|t�r|jd�}|jj|d�dS)Nzutf-8�
)�
isinstancer�encoderY�write)r2�messagerrr r_�s

zController.outputcCs
|jd�S)N�
supervisor)�get_server_proxy)r2rrr �get_supervisor�szController.get_supervisorcCs$|jj�}|dkr|St||�SdS)N)r-ZgetServerProxyrU)r2�	namespace�proxyrrr r��s
zController.get_server_proxycCs.yJ|j�}|j�}ddlm}||jkrH|jd|j|f�tj|_dSWn�t	j
k
r�}z4|jtj
jkr�|jd�tj|_dStj|_�WYdd}~Xn�tjk
�r(}zn|jdtjkr�|jd|jj�tj|_dS|jdtjk�r|jd|jj�tj|_dStj|_�WYdd}~XnXdS)	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�Z
getVersionr�r�ZAPI_VERSIONr_rrrOr�Fault�	faultCoderrsZUNKNOWN_METHODrr�socketrrq�errno�ECONNREFUSEDr-r8r�ENOENTr)r2r�Zapir�r{rrr �upchecks<
zController.upcheckc
Cs�|dkrddl}|j�}g}|j�s0|j|�}nn|j�}|d}t|�dkrd|jd�rd|j|�}n:|dkrx|j|�}n&|dkr�|j|�}n|dkr�|j|�}t|�|kr�||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� rI�add�remove�update�clear�fg�pid�restart�signalr6rj�stop�tail)r�r�r�)	r�r�r�r�r�r6rjr�r�)	rhZget_line_buffer�strip�_complete_actions�split�len�endswith�_complete_groups�_complete_processes)r2�text�staterBrhZmatchesZwords�actionrrr �complete%s&
zController.completecs�fdd�|jD�S)z5Build a completion list of action names matching textcsg|]}|j��r|d�qS)r�)rS)�.0r])r�rr �
<listcomp>Hsz0Controller._complete_actions.<locals>.<listcomp>)rM)r2r�r)r�r r�FszController._complete_actionscsBg}x*|j�D]}|d|kr|j|d�qW�fdd�|D�S)z4Build a completion list of group names matching text�groupcsg|]}|j��r|d�qS)r�)rS)r��g)r�rr r�Psz/Controller._complete_groups.<locals>.<listcomp>)�_get_complete_inforV)r2r��groups�infor)r�r r�Js
zController._complete_groupscs�g}xt|j�D]h}d�ks*|d|dkrh|jd|d|df�d|d|krv|jd|d�q|j|d�qW�fdd�|D�S)z6Build a completion list of process names matching textrarWr�z%s:%sz%s:*csg|]}|j��r|d�qS)r�)rS)r��p)r�rr r�\sz2Controller._complete_processes.<locals>.<listcomp>)r�rV)r2r�Z	processesr�r)r�r r�RszController._complete_processescCs|jdkr|j�j�|_|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)rNr��getAllProcessInfo)r2rrr r�^s
zController._get_complete_infocCs6|j�dkr|j�nx|jjD]}|j|�q WdS)NrI)r��	help_helpr-rL�do_help)r2rAr\rrr r�fs
zController.do_helpcCs|jd�|jd�dS)Nz'help		Print a list of available actionsz%help <action>	Print help for <action>)r_)r2rrr r�ms
zController.help_helpcCs|jd�dS)Nrbr)r_)r2rArrr �do_EOFqs
zController.do_EOFcCs|jd�dS)Nz(To quit, type ^D or use the quit command)r_)r2rrr �help_EOFuszController.help_EOF)rHNN)N)N)N)rrrr&r^r`rrruryrvr_r�r�r�r�r�r�r�r�r�r�r�r�rrrr rGws*
 
-

%
!rGcCsDg}|jg}x2|r>|jd�}|jr0|t|j�}|t|�}qW|S)Nr)�	__class__�pop�	__bases__�listrR)Zinst�names�classesZaclassrrr �	get_namesxs
r�c@s0eZdZdZdd�Zdd�Zee�Zdd�ZdS)	�ControllerPluginBaseZunnamedcCs
||_dS)N)r))r2Z
controllerrrr r&�szControllerPluginBase.__init__cCs
d|jS)Nz %s commands (type help <topic>):)rW)r2rrr �_doc_header�sz ControllerPluginBase._doc_headercCst|r�yt|d|�}Wnhtk
r~y(t|d|�j}|rL|jj|�dSWntk
rbYnX|jj|jj|f�dSX|�n�t|�}g}g}i}x,|D]$}|dd�dkr�d||dd�<q�W|j�d}	xx|D]p}|dd�dkr�||	k�r�q�|}	|dd�}
|
|k�r(|j|
�||
=q�t||�j�rB|j|
�q�|j|
�q�W|jjd�|jj	|j
|dd�dS)	NZhelp_rJrrrbr��P)rU�AttributeErrorrFr)r_Znohelpr��sortrVZprint_topics�
doc_header)r2rAr��docr�Zcmds_docZ
cmds_undocrIrWZprevnamerPrrr r��sJ




zControllerPluginBase.do_helpN)	rrrrWr&r��propertyr�r�rrrr r��s
r�cCs,ttjdd�pd}|j�jd�r$dStjjS)N�encodingrb�utf)rUr;rY�lowerrSr�)�encrrr �
not_all_langs�sr�cCst�}|r|jd|�dS)Nz�Warning: sys.stdout.encoding is set to %s, so Unicode output may fail. Check your LANG and PYTHONIOENCODING environment settings.)r�r_)r)Zproblematic_encrrr �check_encoding�sr�c@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�DefaultControllerPluginr`NcCs�t|j�|jjd�|jjj}|jjj}d}yF|jdkrDtj�}n|j}tj	|||�}|j
|jjj|�tj
�Wn,tk
r�|r�|j�|jjd�dSXdS)Nz==> Press Ctrl-C to exit <==rb)r�r)r_r-r.r/r+r
r*r,r7r8r9r:rprD)r2�pathr.r/Zhandlerr+rrr �_tailf�s"




zDefaultControllerPlugin._tailfcCsx|jj�sdS|j�}t|�dkrD|jjd�tj|j_|j�dSt|�dkrr|jjd�tj|j_|j�dSd}|dj	d�r�|j
d�}t|�dkr�|d}d}nZ|r�|d}|dj�}|dkr�|jjd	|�tj|j_dSn|jjd
�tj|j_dSd}|dk	�r^|dd�}|dk�r,d}n2yt|�}Wn$|jjd
|�tj|j_dS|jj
�}|dk�r�|jd||f�St|j�y0|dk�r�|j||d�}	n|j||d�}	Wn�tjk
�rf}
z�tj|j_d}|
jtjjk�r|jj||df�nN|
jtjjk�r.|jj||df�n(|
jtjjk�rT|jj||df�n�WYdd}
~
XnX|jj|	�dS)NrzError: too few argumentsrzError: too many argumentsrrdrY�stderrzError: bad channel %rz!Error: tail requires process namei@�fzError: bad argument %sz/logtail/%s/%sz%s: ERROR (%s)zno log filezunknown error reading logzno such process name���r�)r�rY)r)r�r�r�r_rrrO�	help_tailrSr�r��intr�r�r�ZreadProcessStdoutLogZreadProcessStderrLogrr�r�rrs�NO_FILE�FAILED�BAD_NAME)r2rArqZmodifierrWZchannel�bytes�whatr�r_r{�templaterrr �do_tail�s~















zDefaultControllerPlugin.do_tailcCs|jjd�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)r_)r2rrr r�3sz!DefaultControllerPlugin.help_tailc
Cs�|jj�sdS|j�}t|�dkrD|jjd�tj|j_|j�dSt|�dkr�|dj	d�r�|ddd�}|dkr�d}|j
|�Syt|�}Wn(|jjd|d�tj|j_dS|}q�|jjd|d�tj|j_dSnd}|jj�}y|j
|d�}Wnztjk
�r~}zZtj|j_d	}	|jtjjk�rJ|jj|	d
�n$|jtjjk�rl|jj|	d�n�WYdd}~XnX|jj|�dS)NrzError: too many argumentsrrdr�z/mainlogtailzError: bad argument %si@z%s: ERROR (%s)�supervisord�no log file�unknown error reading log)r�r�)r�r�)r)r�r�r�r_rrrO�
help_maintailrSr�r�r�ZreadLogrr�r�rrsr�r�)
r2rArqr�r�r�r�r_r{r�rrr �do_maintail=sL







z#DefaultControllerPlugin.do_maintailcCs|jjd�dS)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)r_)r2rrr r�psz%DefaultControllerPlugin.help_maintailcCs|jj|�S)N)r)r�)r2rArrr �do_quitxszDefaultControllerPlugin.do_quitcCs|jjd�dS)Nzquit	Exit the supervisor shell.)r)r_)r2rrr �	help_quit{sz!DefaultControllerPlugin.help_quitcCs|jjd�dS)Nzexit	Exit the supervisor shell.)r)r_)r2rrr �	help_exit�sz!DefaultControllerPlugin.help_exitcCs�gd}}xHt|�D]<\}}|jt|d|d��t||�|krt||�}qWdt|d�d}x<t|�D]0\}}||||d|dd	�}|jj|�qrWdS)
N�r�rWz%(namespec)-rzs%(state)-10s%(desc)sZ	statename�description)Znamespecr�Zdesc)�	enumeraterVr	r��strr)r_)r2Z
process_infosZ	namespecs�maxlen�ir�r�rBrrr �_show_statuses�s
z&DefaultControllerPlugin._show_statusesc
Cs|jj�stj|j_dS|jj�}|j�}t|�j�}|sDd|krJ|}n�g}x�|D]�}d}t	|�\}}	xB|D]:}
|
d|k}|	dk	r�|o�|
d|	k}|rnd}|j
|
�qnW|rT|	dkr�d|}nd|}|jj|�tj|j_qTW|j|�x$|D]}
|
dt
jkr�tj|j_q�WdS)	N�allTr�rWFz%s: ERROR (no such group)z%s: ERROR (no such process)r�)r)r�r!r"rOr�r�rr�r
rVr_r�rZSTOPPED_STATESr)
r2rAr�Z	all_infosr�Zmatching_infosrWZbad_name�
group_name�process_namer�Zmatched�msgrrr �	do_status�s:







z!DefaultControllerPlugin.do_statuscCs4|jjd�|jjd�|jjd�|jjd�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 info)r)r_)r2rrr �help_status�sz#DefaultControllerPlugin.help_statuscCs
|jj�}|jj�sdS|j�}|s>|j�}|jjt|��n�d|krnx�|j�D]}|jjt|d��qPWn�x�|D]�}y|j|�}WnPt	j
k
r�}z2tj|j_
|jtjjkr�|jjd|�n�WYdd}~XqtX|d}|jjt|��|dkrttj|j_
qtWdS)Nr�r�zNo such process %sr)r)r�r�r�ZgetPIDr_r�r��getProcessInforr�rrrOr�rrsr�r)r2rAr�r�r�r�rWr{rrr �do_pid�s,



zDefaultControllerPlugin.do_pidcCs(|jjd�|jjd�|jjd�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)r_)r2rrr �help_pid�sz DefaultControllerPlugin.help_pidcCs�t|d|d�}|d}d}|tjjkr6||dfS|tjjkrN||dfS|tjjkrf||dfS|tjjkr~||dfS|tjjkr�||d	fS|tjjkr�||d
fS|tjj	kr�d|St
d||f��dS)
Nr�rWrjz%s: ERROR (%s)zno such processzno such filezfile is not executablezalready startedzspawn errorzabnormal terminationz%s: startedzUnknown result code %s for %s)r	rrsr�r�ZNOT_EXECUTABLE�ALREADY_STARTED�SPAWN_ERROR�ABNORMAL_TERMINATIONr�
ValueError)r2�resultrW�coder�rrr �_startresult�s$z$DefaultControllerPlugin._startresultcCs�|jj�sdS|j�}|jj�}|sF|jjd�tj|j_|j�dSd|kr�|j	�}x4|D],}|jj|j
|��|jj|dtj
j�q\W�n\�xX|D�]N}t|�\}}|dk�r^yD|j|�}x4|D],}|jj|j
|��|jj|dtj
j�q�WWnbtjk
�rZ}	zB|	jtj
jk�r>d|}
|jj|
�tj|j_ntj|j_�WYdd}	~	XnXq�y|j|�}Wn`tjk
�r�}	z@|	j|||	jd�}
|jj|j
|
��|jj|
dtj
j�WYdd}	~	Xq�Xt||�}|jjd|�q�WdS)Nz$Error: start requires a process namer�rjz%s: ERROR (no such group))rjrWr�r�z%s: started)r)r�r�r�r_rrrO�
help_startZstartAllProcessesr�rurrsr�r
ZstartProcessGrouprr�r�r�rZstartProcess�faultStringr	)r2rAr�r��resultsr�rWr�r�r{rrrr �do_start�sP








(
z DefaultControllerPlugin.do_startcCs4|jjd�|jjd�|jjd�|jjd�dS)Nzstart <name>		Start a processz/start <gname>:*		Start all processes in a groupz6start <name> <name>	Start multiple processes or groupszstart all		Start all processes)r)r_)r2rrr r�,s
z"DefaultControllerPlugin.help_start�	signalledcCs�t|d|d�}|d}|d}d}|tjjkr>||dfS|tjjkrV||dfS|tjjkrn||dfS|tjjkr�d	||fS|tjjkr�|Std
||f��dS)Nr�rWrjr�z%s: ERROR (%s)zno such processzbad signal nameznot runningz%s: %szUnknown result code %s for %s)	r	rrsr�Z
BAD_SIGNALrrr�r�)r2r��successrWr�Zfault_stringr�rrr �
_signalresult3sz%DefaultControllerPlugin._signalresultcCs|j|dd�S)N�stopped)r�)r)r2r�rrr �_stopresultEsz#DefaultControllerPlugin._stopresultcCs�|jj�sdS|j�}|jj�}|sF|jjd�tj|j_|j�dSd|kr�|j	�}x4|D],}|jj|j
|��|jj|dtj
j�q\W�nR�xN|D�]D}t|�\}}|dk�rTyD|j|�}x4|D],}|jj|j
|��|jj|dtj
j�q�WWnXtjk
�rP}	z8tj|j_|	jtj
jk�r>d|}
|jj|
�n�WYdd}	~	XnXq�y|j|�Wn`tjk
�r�}	z@|	j|||	jd�}
|jj|j
|
��|jj|
dtj
j�WYdd}	~	Xq�Xt||�}|jjd|�q�WdS)Nz#Error: stop requires a process namer�rjz%s: ERROR (no such group))rjrWr�r�z%s: stopped)r)r�r�r�r_rrrO�	help_stopZstopAllProcessesrrurrsrr
�stopProcessGrouprr�r�r�ZstopProcessr�r	)r2rAr�r�r�r�rWr�r�r{rrrr �do_stopHsN








(
zDefaultControllerPlugin.do_stopcCs4|jjd�|jjd�|jjd�|jjd�dS)Nzstop <name>		Stop a processz-stop <gname>:*		Stop all processes in a groupz4stop <name> <name>	Stop multiple processes or groupszstop all		Stop all processes)r)r_)r2rrr rysz!DefaultControllerPlugin.help_stopc
Cs�|jj�sdS|j�}t|�dkrD|jjd�|j�tj|j_dS|d}|dd�}|jj	�}d|kr�|j
|�}x.|D]&}|jj|j|��|jj|d�qzW�nJ�xF|D�]<}t
|�\}	}
|
dk�rhy@|j|	|�}x.|D]&}|jj|j|��|jj|d�q�WWnXtjk
�rd}z8|jtjjk�rRd|	}|jj|�tj|j_n�WYdd}~XnXq�y|j||�WnZtjk
�r�}z:|j|
|	|jd�}|jj|j|��|jj|d�WYdd}~Xq�Xt|	|
�}|jjd	|�q�WdS)
Nrz7Error: signal requires a signal name and a process namerrr�rjz%s: ERROR (no such group))rjrWr�r�z
%s: signalled)r)r�r�r�r_�help_signalrrrOr�ZsignalAllProcessesrrur
ZsignalProcessGrouprr�r�rrsr�Z
signalProcessr�r	)
r2rArqZsigr�r�r�r�rWr�r�r{rrrr �	do_signalsV







"
z!DefaultControllerPlugin.do_signalcCs4|jjd�|jjd�|jjd�|jjd�dS)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 processes)r)r_)r2rrr r�sz#DefaultControllerPlugin.help_signalcCsT|jj�sdS|j�}|s<|jjd�tj|j_|j�dS|j|�|j	|�dS)Nz&Error: restart requires a process name)
r)r�r�r_rrrO�help_restartrr�)r2rAr�rrr �
do_restart�s


z"DefaultControllerPlugin.do_restartcCs@|jjd�|jjd�|jjd�|jjd�|jjd�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)r_)r2rrr r�s
z$DefaultControllerPlugin.help_restartcCs*|jjjr"td�}|j�jd�}nd}|�r&|jj�}y|j�Wn�tj	k
r�}z.|j
tjj
krr|jjd�ntj|j_�WYdd}~Xn�tjk
�r}zltj|j_|jdtjkr�d}|jj||jjj�n0|jdtjk�rd}|jj||jjj�n�WYdd}~XnX|jjd�dS)	Nz5Really shut the remote supervisord process down y/N? �yrzERROR: already shutting downrz1ERROR: %s refused connection (already shut down?)z+ERROR: %s no such file (already shut down?)z	Shut down)r)r-rwrr�rSr�Zshutdownrr�r�rrs�SHUTDOWN_STATEr_rrrOr�rrqr�r�r8r�)r2rA�yesno�reallyr�r{r�rrr �do_shutdown�s.



z#DefaultControllerPlugin.do_shutdowncCs|jjd�dS)Nz+shutdown 	Shut the remote supervisord down.)r)r_)r2rrr �
help_shutdown�sz%DefaultControllerPlugin.help_shutdowncCs�|r&|jjd�tj|j_|j�dS|jjjrHtd�}|j	�j
d�}nd}|r�|jj�}y|j�WnLt
jk
r�}z.tj|j_|jtjjkr�|jjd�n�WYdd}~XnX|jjd�dS)Nz"Error: reload accepts no argumentsz3Really restart the remote supervisord process y/N? r
rzERROR: already shutting downzRestarted supervisord)r)r_rrrO�help_reloadr-rwrr�rSr�r�rr�r�rrsr)r2rArr
r�r{rrr �	do_reload�s&



z!DefaultControllerPlugin.do_reloadcCs|jjd�dS)Nz(reload 		Restart the remote supervisord.)r)r_)r2rrr rsz#DefaultControllerPlugin.help_reloadc
Cs�|\}}}i}x@|df|df|dfgD]&\}}|jtt||gt|����q&W|r�t|j��}|j�x2|D]}	|jjd|	||	f�qnWn|jjd�dS)NZ	available�changedZdisappearedz%s: %szNo config updates to processes)	r��dict�zipr�r��keysr�r)r_)
r2Zadded_changed_dropped_tuple�addedrZdroppedZ
changedict�nr}r�rWrrr �_formatChangess
"
z&DefaultControllerPlugin._formatChangescCsrt|d|d�}d|i}|dr,d|d<nd|d<|drFd|d<nd|d<d	|d
|df|d<d
}||S)Nr�rWZinusezin useZavailZ	autostart�autoZmanualz%s:%sZ
group_prioZprocess_prioZpriorityz4%(name)-32s %(inuse)-9s %(autostart)-9s %(priority)s)r	)r2�
configinforWZ	formattedr�rrr �_formatConfigInfo"s

z)DefaultControllerPlugin._formatConfigInfocCs�|r&|jjd�tj|j_|j�dS|jj�}y|j�}WnLtj	k
r�}z.tj|j_|j
tjj
krv|jjd�n�WYdd}~Xn"Xx|D]}|jj|j|��q�WdS)Nz!Error: avail accepts no argumentszERROR: supervisor shutting down)r)r_rrrO�
help_availr�ZgetAllConfigInforr�r�rrsrr)r2rAr�rr{Zpinforrr �do_avail3s



z DefaultControllerPlugin.do_availcCs|jjd�dS)Nz(avail			Display all configured processes)r)r_)r2rrr rGsz"DefaultControllerPlugin.help_availcCs�|r&|jjd�tj|j_|j�dS|jj�}y|j�}Wnntj	k
r�}zPtj|j_|j
tjj
krv|jjd�n$|j
tjjkr�|jjd|j�n�WYdd}~XnX|j|d�dS)Nz"Error: reread accepts no argumentszERROR: supervisor shutting downz	ERROR: %sr)r)r_rrrO�help_rereadr��reloadConfigrr�r�rrsrZCANT_REREADr�r)r2rAr�r�r{rrr �	do_rereadJs 


z!DefaultControllerPlugin.do_rereadcCs|jjd�dS)NzDreread 			Reload the daemon's configuration files without add/remove)r)r_)r2rrr r_sz#DefaultControllerPlugin.help_rereadcCs�|j�}|jj�}x�|D]�}y|j|�Wn�tjk
r�}z~|jtjj	krd|jj
d�tj|j_
nR|jtjjkr�|jj
d�n6|jtjjkr�|jj
d|�tj|j_
ntj|j_
�WYdd}~XqX|jj
d|�qWdS)NzERROR: shutting downz#ERROR: process group already activez ERROR: no such process/group: %sz%s: added process group)r�r)r��addProcessGrouprr�r�rrsrr_rrrOZ
ALREADY_ADDEDr�)r2rAr�r�rWr{rrr �do_addbs"


zDefaultControllerPlugin.do_addcCs|jjd�dS)NzBadd <name> [...]	Activates any updates in config for process/group)r)r_)r2rrr �help_addxsz DefaultControllerPlugin.help_addcCs�|j�}|jj�}x�|D]�}y|j|�Wnptjk
r�}zRtj|j_|j	t
jjkrh|jj
d|�n"|j	t
jjkr�|jj
d|�n�WYdd}~XqX|jj
d|�qWdS)Nz&ERROR: process/group still running: %sz ERROR: no such process/group: %sz%s: removed process group)r�r)r��removeProcessGrouprr�rrrOr�rrsZ
STILL_RUNNINGr_r�)r2rAr�r�rWr{rrr �	do_remove|s



z!DefaultControllerPlugin.do_removecCs|jjd�dS)Nz<remove <name> [...]	Removes process/group from active config)r)r_)r2rrr �help_remove�sz#DefaultControllerPlugin.help_removecs�fdd�}�jj�}y|j�}WnNtjk
rp}z0tj�j_|jt	j
jkr^�jjd�dS�WYdd}~XnX|d\}}}t
|j��}	d|	kr�t
�}	|	�rt
�}
x|j�D]}|
j|d�q�W|
j|�x.|	D]&}||
krֈjjd|�tj�j_q�Wx�|D]x}|	�r||	k�r�q|j|�}
||d�d	d
�|
D�}|�rh�jjd|df�tj�j_�q|j|�||d
��qWxT|D]L}|	�r�||	k�r��q�|j|�||d�|j|�|j|�||d��q�Wx6|D].}|	�r�||	k�r��q�|j|�||d��q�WdS)Ncs�jjd||f�dS)Nz%s: %s)r)r_)rWr�)r2rr �log�sz.DefaultControllerPlugin.do_update.<locals>.logzERROR: already shutting downrr�r�zERROR: no such group: %srcSs g|]}|dtjjkr|�qS)rj)rrsr�)r��resrrr r��sz5DefaultControllerPlugin.do_update.<locals>.<listcomp>z%s: %szhas problems; not removingzremoved process groupzupdated process groupzadded process group)r)r�rrr�rrrOr�rrsrr_�setr�r�r�r�rr$r!)r2rAr'r�r�r{rrZremovedZvalid_gnamesr�r�Zgnamer�Zfailsr)r2r �	do_update�s`















z!DefaultControllerPlugin.do_updatecCs(|jjd�|jjd�|jjd�dS)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 groups)r)r_)r2rrr �help_update�sz#DefaultControllerPlugin.help_updatecCsvt|d|d�}|d}d}|tjjkr6||dfS|tjjkrN||dfS|tjjkrbd|Std||f��dS)	Nr�rWrjz%s: ERROR (%s)zno such processZfailedz%s: clearedzUnknown result code %s for %s)r	rrsr�r�rr�)r2r�rWr�r�rrr �_clearresult�sz$DefaultControllerPlugin._clearresultcCs*|jj�sdS|j�}|s<|jjd�tj|j_|j�dS|jj�}d|kr�|j	�}x�|D]&}|jj|j
|��|jj|d�q\Wn�x�|D]�}t|�\}}y|j
|�WnZtjk
�r}	z:|	j|||	jd�}
|jj|j
|
��|jj|
d�WYdd}	~	Xq�Xt||�}|jjd|�q�WdS)Nz$Error: clear requires a process namer�rj)rjrWr�r�z%s: cleared)r)r�r�r_rrrO�
help_clearr�ZclearAllProcessLogsr,rur
ZclearProcessLogsrr�r�r�r	)r2rAr�r�r�r�rWr�r�r{rrrr �do_clear�s6





"
z DefaultControllerPlugin.do_clearcCs(|jjd�|jjd�|jjd�dS)Nz)clear <name>		Clear a process' log files.z5clear <name> <name>	Clear multiple process' log filesz'clear all		Clear all process' log files)r)r_)r2rrr r-sz"DefaultControllerPlugin.help_clearcCs`|j�}tj|�}|ddkr8|jjd�tj|j_dS||jj_|jj}|j	d�||j_dS)Nr�unix�httpz%ERROR: url must be http:// or unix://rb)r/r0)
r�rr)r_rrrOr-r8r�)r2rAZurl�partsZold_exitstatusrrr �do_opens



zDefaultControllerPlugin.do_opencCs|jjd�|jjd�dS)Nz3open <url>	Connect to a remote supervisord process.z3		(for UNIX domain socket, use unix:///socket/path))r)r_)r2rrr �	help_opensz!DefaultControllerPlugin.help_opencCsR|r&|jjd�tj|j_|j�dS|jj�s4dS|jj�}|jj|j��dS)Nz#Error: version accepts no arguments)	r)r_rrrO�help_versionr�r�ZgetSupervisorVersion)r2rAr�rrr �
do_version"s


z"DefaultControllerPlugin.do_versioncCs|jjd�dS)Nz<version			Show the version of the remote supervisord process)r)r_)r2rrr r4.sz$DefaultControllerPlugin.help_versionc	$Cs<|jj�sdS|j�}|s<|jjd�tj|j_|j�dSt|�dkrb|jjd�tj|j_dS|d}|jj	�}y|j
|�}Wn\tjk
r�}z>|j
tjjkr�|jjd�tj|j_n|jjdt|��dSd}~XnX|dtjjk�r|jjd�tj|j_dS|jjd	�d}y�t||j�}|j�x�t�d
}y|j||�Wnjtjk
�r�}zJ|j
tjjk�r�|jjd�n|jjdt|��|jjd�|j�dSd}~XnX|j
|�}|dtjjk�r4|jjd�|jjd�|j�dS�q4WWn4ttfk
�r6|jjd�|�r2|j�YnXdS)
NzERROR: no process name suppliedrz&ERROR: too many process names suppliedrz ERROR: bad process name suppliedzERROR: r�zERROR: process not runningz==> Press Ctrl-C to exit <==r�zProcess got killedzExiting foreground)r)r�r�r_rrrO�help_fgr�r�r�rr�r�rrsr�r�rZ
ProcessStatesZRUNNINGr#r6rZsendProcessStdinrrErp�EOFError)	r2rAr�rWr�r�r{r]Zinprrr �do_fg3sh






zDefaultControllerPlugin.do_fgcCs|jjd�|jjd�dS)Nz4fg <process>	Connect to a process in foreground modez		Ctrl-C to exit)r)r_)r2rqrrr r6uszDefaultControllerPlugin.help_fg)r�)N)7rrrrWr+r�r�r�r�r�r�r�Zdo_exitr�r�r�r�r�r�r�r�r�rrrrrrr	rrrrrrrrrr rr"r#r%r&r*r+r,r.r-r2r3r5r4r8r6rrrr r��shS
3+1
16	D#
Br�cCsh|dkrt�}|j|td�t|�}|jrH|jdj|j��tj|j	�|j
rd|j||�tjd�dS)N)r�r�r)rZrealizerFrGrqry�joinr;�exitrOrwrr)rqr-�crrr �mainzsr<�__main__)NN)*rFrPr�rxr�r;r$Zsupervisor.compatrrrrrZsupervisor.medusarr9Zsupervisor.optionsrr	r
r�rrr
rr!rsr�r�rrtr%r#rQrGr�r�r�r�r�r<rrrrr �<module>sT	
7
5?