Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
supervisor / __pycache__ / supervisorctl.cpython-38.pyc
Size: Mime:
U

B]–Õã@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©r r ú'./build/lib/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!Z__run`szfgthread.__runcCs|dkr|jSdSdS)NZcall)Ú
localtrace©r3ÚframeZwhyÚargr r r!r@fszfgthread.globaltracecCs|jr|dkrtƒ‚|jS)NÚline)r(Ú
SystemExitrArBr r r!rAlszfgthread.localtracecCs|j ¡|j ¡d|_dS)NT)r1Úcloser2r(r9r r r!Úkillrs

z
fgthread.killN)rrrÚ__doc__r'r8r5r7r@rArHr r r r!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	 
||||¡|jjD]d\}}}||f|Ž}t|ƒD]0}	|	 
d¡rjtt||	ƒƒrj|j |	dd…¡qj|jj |¡||_qLdS)Nz> ÚhelpÚdo_r)r.ÚpromptÚpluginsÚvocabÚ_complete_inforrÚ
exitstatusÚcmdÚCmdr'Zplugin_factoriesÚdirÚ
startswithÚcallableÚgetattrÚappendÚname)
r3r.ZcompletekeyÚstdinÚstdoutrZÚfactoryÚkwargsÚpluginÚar r r!r'yszController.__init__cCsdSr4r r9r r r!Ú	emptylineŠszController.emptylinecCs| d|¡tj|_dS)Nz*** Unknown syntax: %s)ÚoutputrrrR)r3rEr r r!ÚdefaultŽszController.defaultcsàzŽddl‰ˆ ¡}| dd¡}| dd¡}| dd¡}ˆ |¡ˆjrŒzˆ ˆj¡Wntk
rjYnX‡‡fdd„}ddl}| |¡Wnt	k
r¢YnXz|j
 d¡| ¡Wnt
k
rÚ| d¡YnXdS)	Nrú:ÚÚ*ú-cs*zˆ ˆj¡Wntk
r$YnXdSr4)Úwrite_history_fileÚhistory_fileÚIOErrorr ©r.Úreadliner r!Úsave¡sz%Controller.exec_cmdloop.<locals>.saveÚstatus)rlZget_completer_delimsÚreplaceZset_completer_delimsriÚread_history_filerjÚatexitÚregisterÚImportErrorZcmdqueuerYZcmdloopÚKeyboardInterruptrb)r3Úargsr.Zdelimsrmrqr rkr!Úexec_cmdloop’s.

zController.exec_cmdloopcCs0||tjjfkrn|tkr$tj|_ntj|_dSr4)rÚFaultsrÚDEAD_PROGRAM_FAULTSrrrRr)r3Z	faultcodeZignored_faultcoder r r!Ú set_exitstatus_from_xmlrpc_fault²s

z+Controller.set_exitstatus_from_xmlrpc_faultc
Csz| |¡\}}}|s| ¡S|dkr.| |¡Sd|_||_|dkrL| |¡S| |¡}|dkrh| |¡Sz¾z||ƒWWStjk
r}z‚|jdkr|j	j
rì| d¡tdƒ}t
j
dd}| d¡||j	_||j	_| |¡WY¢&WS| d¡tj|_n
tj|_‚W5d}~XYnX||ƒWnNtk
rtt ¡\\}}	}}
}}d|
|||f}
| |
¡tj|_YnXdS)	zŒ Override the onecmd method to:
          - catch and print all exceptions
          - call 'do_foo' on plugins rather than ourself
        Nrei‘zServer requires authenticationz	Username:z	Password:)rNz error: %s, %s: file: %s line: %s)Z	parselinerarcrQZlastcmdÚ_get_do_funcrZ
ProtocolErrorZerrcoder.ÚinteractiverbrÚgetpassr/r0ÚonecmdrrrRÚ	Exceptionr<Zcompact_traceback)r3rErSrDZdo_funcÚer/r0ÚfileZfunÚtÚvZtbinfoÚerrorr r r!r}ºsF








zController.onecmdcCsBd|}t||dƒ}|s>|jjD]}t||dƒ}|dk	r q>q |S)NrM)rXr.rO)r3rSZ	func_nameÚfuncr_r r r!rzçszController._get_do_funccCs(t|tƒr| d¡}|j |d¡dS)Nzutf-8Ú
)Ú
isinstancerÚencoder\Úwrite)r3Úmessager r r!rbñs

zController.outputcCs
| d¡S)NÚ
supervisor)Úget_server_proxyr9r r r!Úget_supervisoröszController.get_supervisorcCs$|j ¡}|dkr|St||ƒSdSr4)r.ZgetServerProxyrX)r3Ú	namespaceÚproxyr r r!r‹ùs
zController.get_server_proxyc
CsBzL| ¡}| ¡}ddlm}||jkrJ| d|j|f¡tj|_WdSWnðt	j
k
r¤}z8|jtj
jkrŠ| d¡tj|_WY¢dStj|_‚W5d}~XYnštjk
r<}zx|jdtjkrì| d|jj¡tj|_WY¢HdS|jdtjkr"| d|jj¡tj|_WY¢dStj|_‚W5d}~XYnXdS)	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_VERSIONrbrrrRrÚFaultÚ	faultCoderrwZUNKNOWN_METHODrrÚsocketrƒruÚerrnoÚECONNREFUSEDr.r;rÚENOENTr)r3rŠZapirrr r r!ÚupchecksB
þÿ
ÿ


zController.upcheckcCs´|dkrddl}| ¡}g}| ¡s0| |¡}nl| ¡}|d}t|ƒdkrb| d¡sb| |¡}n:|dkrv| |¡}n&|dkrŠ| |¡}n|dkrœ| |¡}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ú rL)ÚaddÚremoveÚupdate)	ÚclearZfgÚpidÚrestartÚsignalr8rnÚstopÚtail)	rlZget_line_bufferÚstripÚ_complete_actionsÚsplitÚlenÚendswithÚ_complete_groupsÚ_complete_processes)r3ÚtextÚstaterErlZmatchesZwordsÚactionr r r!Úcomplete%s$
zController.completecs‡fdd„|jDƒS)z5Build a completion list of action names matching textcsg|]}| ˆ¡r|d‘qS©r—©rV)Ú.0r`©r¨r r!Ú
<listcomp>Hs
z0Controller._complete_actions.<locals>.<listcomp>)rP)r3r¨r r¯r!r¢FszController._complete_actionscs>g}| ¡D]}|d|kr| |d¡q‡fdd„|DƒS)z4Build a completion list of group names matching textÚgroupcsg|]}| ˆ¡r|d‘qSr¬r­)r®Úgr¯r r!r°Ps
z/Controller._complete_groups.<locals>.<listcomp>©Ú_get_complete_inforY)r3r¨ÚgroupsÚinfor r¯r!r¦Js
zController._complete_groupscsˆg}| ¡D]h}dˆks(|d|dkrf| d|d|df¡d|d|krt| d|d¡q| |d¡q‡fdd„|DƒS)z6Build a completion list of process names matching textrdrZr±ú%s:%sz%s:*csg|]}| ˆ¡r|d‘qSr¬r­)r®Úpr¯r r!r°\s
z2Controller._complete_processes.<locals>.<listcomp>r³)r3r¨Z	processesr¶r r¯r!r§RszController._complete_processescCs|jdkr| ¡ ¡|_|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)rQrŒÚgetAllProcessInfor9r r r!r´^s
zController._get_complete_infocCs2| ¡dkr| ¡n|jjD]}| |¡qdS)NrL)r¡Ú	help_helpr.rOÚdo_help)r3rDr_r r r!r»fs
zController.do_helpcCs| d¡| d¡dS)Nz'help		Print a list of available actionsz%help <action>	Print help for <action>©rbr9r r r!rºms
zController.help_helpcCs| d¡dS)Nrerr¼©r3rDr r r!Údo_EOFqs
zController.do_EOFcCs| d¡dS)Nz(To quit, type ^D or use the quit commandr¼r9r r r!Úhelp_EOFuszController.help_EOF)rKNN)N)N)N)rrrr'rarcrvryr}rzrbrŒr‹r–r«r¢r¦r§r´r»rºr¾r¿r r r r!rJws,ÿ
 
-

%
!rJcCs@g}|jg}|r<| d¡}|jr.|t|jƒ}|t|ƒ}q|S)Nr)Ú	__class__ÚpopÚ	__bases__ÚlistrU)ÚinstÚnamesÚclassesZaclassr r r!Ú	get_namesxs
rÇc@s0eZdZdZdd„Zdd„ZeeƒZdd„ZdS)	ÚControllerPluginBaseZunnamedcCs
||_dSr4)r*)r3Z
controllerr r r!r'…szControllerPluginBase.__init__cCs
d|jS)Nz %s commands (type help <topic>):)rZr9r r r!Ú_doc_headerˆsz ControllerPluginBase._doc_headercCsr|rŽzt|d|ƒ}Wnntk
r„z,t|d|ƒj}|rP|j |¡WYdSWntk
rfYnX|j |jj|f¡YdSX|ƒnàt|ƒ}g}g}i}|D]$}|dd…dkr¦d||dd…<q¦| ¡d}	|D]p}|dd…dkrÜ||	krüqÜ|}	|dd…}
|
|kr(| |
¡||
=qÜt||ƒjrB| |
¡qÜ| |
¡qÜ|j d¡|j 	|j
|dd¡dS)	NZhelp_rMrrrerééP)rXÚAttributeErrorrIr*rbZnohelprÇÚsortrYZprint_topicsÚ
doc_header)r3rDr„ÚdocrÅZcmds_docZ
cmds_undocrLrZZprevnamerSr r r!r»ŒsJ


zControllerPluginBase.do_helpN)	rrrrZr'rÉÚpropertyrÎr»r r r r!rȂs
rÈcCs(ttjddƒ ¡}| d¡r dStjjS)NÚencodingreÚutf)rXr>r\ÚlowerrVrÑ)Úencr r r!Ú
not_all_langs·srÕcCstƒ}|r| d|¡dS)NzWarning: sys.stdout.encoding is set to %s, so Unicode output may fail. Check your LANG and PYTHONIOENCODING environment settings.)rÕrb)r*Zproblematic_encr r r!Úcheck_encoding»s
þrÖ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ÚDefaultControllerPluginrcNcCs¨t|jƒ|j d¡|jjj}|jjj}d}zF|jdkrDt ¡}n|j}t 	|||¡}| 
|jjj|¡t 
¡Wn.tk
r¢|r| ¡|j d¡YdSXdS)Nú==> Press Ctrl-C to exit <==re)rÖr*rbr.r/r0r,rr+r-r:r;r<r=rtrG)r3Úpathr/r0Zhandlerr,r r r!Ú_tailfÅs"




zDefaultControllerPlugin._tailfc
Cs||j ¡sdS| ¡}t|ƒdkrD|j d¡tj|j_| ¡dSt|ƒdkrr|j d¡tj|j_| ¡dSd}|d 	d¡rŽ| 
d¡}t|ƒdkr¨|d}d}nZ|rè|d}|d ¡}|d	kræ|j d
|¡tj|j_dSn|j d¡tj|j_dSd}|dk	rb|dd…}|d
kr,d}n6zt|ƒ}Wn(|j d|¡tj|j_YdSX|j 
¡}|dkrˆ| d||f¡St|jƒz0|dkr°| ||d¡}	n| ||d¡}	Wn¨tjk
rj}
z†tj|j_d}|
jtjjkr|j ||df¡nN|
jtjjkr2|j ||df¡n(|
jtjjkrX|j ||df¡n‚W5d}
~
XYnX|j |	¡dS)NrzError: too few argumentsrúError: too many argumentsrrgéÿÿÿÿr\)Ústderrr\zError: 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¤rbrrrRÚ	help_tailrVrÁrÓÚintrŒrÚrÖZreadProcessStdoutLogZreadProcessStderrLogrrr‘rrwÚNO_FILEÚFAILEDÚBAD_NAME)r3rDruZmodifierrZZchannelÚbytesÚwhatrŠrbrÚtemplater r r!Údo_tailàsŠ












ÿÿ

ÿ

ÿ
zDefaultControllerPlugin.do_tailcCs|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*rbr9r r r!rä3sÿz!DefaultControllerPlugin.help_tailc

Cs”|j ¡sdS| ¡}t|ƒdkrD|j d¡tj|j_| ¡dSt|ƒdkrè|d 	d¡rÄ|ddd…}|dkr„d}| 
|¡Szt|ƒ}Wn,|j d|d¡tj|j_YdSX|}qì|j d|d¡tj|j_dSnd}|j ¡}z| 
|d¡}Wnztjk
r‚}zXtj|j_d	}	|jtjjkrN|j |	d
¡n$|jtjjkrp|j |	d¡n‚W5d}~XYnX|j |¡dS)NrrÛrrgrßz/mainlogtailràrÞrá)Úsupervisordrâ)rîrã)r*r–r£r¤rbrrrRÚ
help_maintailrVrÚrårŒZreadLogrrr‘rrwrærç)
r3rDrurêrÙrérŠrbrrër r r!Údo_maintail=sJ






z#DefaultControllerPlugin.do_maintailcCs|j d¡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ír9r r r!rïpsÿz%DefaultControllerPlugin.help_maintailcCs|j |¡Sr4)r*r¾r½r r r!Údo_quitxszDefaultControllerPlugin.do_quitcCs|j d¡dS)Nzquit	Exit the supervisor shell.rír9r r r!Ú	help_quit{sz!DefaultControllerPlugin.help_quitcCs|j d¡dS)Nzexit	Exit the supervisor shell.rír9r r r!Ú	help_exit€sz!DefaultControllerPlugin.help_exitcCs¢gd}}t|ƒD]<\}}| t|d|dƒ¡t||ƒ|krt||ƒ}qdt|dƒd}t|ƒD]0\}}||||d|dd	œ}|j |¡qldS)
Nér±rZz%(namespec)-rzs%(state)-10s%(desc)sZ	statenameÚdescription)Znamespecr©Zdesc)Ú	enumeraterYr
r¤Ústrr*rb)r3Z
process_infosZ	namespecsÚmaxlenÚir¶rërEr r r!Ú_show_statusesƒs
þz&DefaultControllerPlugin._show_statusesc
Cs
|j ¡stj|j_dS|j ¡}| ¡}t|ƒ ¡}|rBd|krH|}n’g}|D]ˆ}d}t	|ƒ\}}	|D]:}
|
d|k}|	dk	r|oŽ|
d|	k}|rhd}| 
|
¡qh|rP|	dkrºd|}nd|}|j |¡tj|j_qP| |¡|D]}
|
dt
jkrètj|j_qèdS)	NÚallTr±rZFú%s: ERROR (no such group)z%s: ERROR (no such process)r©)r*r–r"r#rRrŒr¹rr£rrYrbrúr
ZSTOPPED_STATESr)
r3rDrŠZ	all_infosrÅZmatching_infosrZZbad_nameÚ
group_nameÚprocess_namer¶ZmatchedÚmsgr r r!Ú	do_status‘s:




z!DefaultControllerPlugin.do_statuscCs4|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 ¡sdS| ¡}|s>| ¡}|j t|ƒ¡nÀd|krj| ¡D]}|j t|dƒ¡qNn”|D]Ž}z| |¡}WnPt	j
k
rÐ}z0tj|j_
|jtjjkr¾|j d|¡n‚W5d}~XYqnX|d}|j t|ƒ¡|dkrntj|j_
qndS)NrûrœzNo such process %sr)r*rŒr–r£ZgetPIDrbr÷r¹ÚgetProcessInforrrrrRr‘rrwrèr)r3rDrŠrÅrœr¶rZrr r r!Údo_pidÄs,


zDefaultControllerPlugin.do_pidcCs(|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}|tjjkr6||dfS|tjjkrN||dfS|tjjkrf||dfS|tjjkr~||dfS|tjjkr–||d	fS|tjjkr®||d
fS|tjj	krÂd|St
d||fƒ‚dS)
Nr±rZrnráúno such processzno such filezfile is not executablezalready startedzspawn errorzabnormal terminationú%s: startedúUnknown result code %s for %s)r
rrwrèræZNOT_EXECUTABLEÚALREADY_STARTEDÚSPAWN_ERRORÚABNORMAL_TERMINATIONrÚ
ValueError©r3ÚresultrZÚcoderër r r!Ú_startresultæs$z$DefaultControllerPlugin._startresultcCsâ|j ¡sdS| ¡}|j ¡}|sF|j d¡tj|j_| ¡dSd|krŒ| 	¡}|D],}|j | 
|¡¡|j |dtj
j¡qZnR|D]J}t|ƒ\}}|dkrRz@| |¡}|D],}|j | 
|¡¡|j |dtj
j¡q¼Wnbtjk
rN}	z@|	jtj
jkr2d|}
|j |
¡tj|j_ntj|j_‚W5d}	~	XYnXqz| |¡}Wn`tjk
rÀ}	z>|	j|||	jdœ}
|j | 
|
¡¡|j |
dtj
j¡W5d}	~	XYqXt||ƒ}|j d|¡qdS)Nz$Error: start requires a process namerûrnrü©rnrZr±rõr)r*r–r£rŒrbrrrRÚ
help_startZstartAllProcessesrryrrwrrZstartProcessGrouprrr‘rèrZstartProcessÚfaultStringr
©r3rDrÅrŠÚresultsr
rZrýrþrrƒr r r!Údo_startûsR






ý(
z DefaultControllerPlugin.do_startcCs4|j d¡|j d¡|j d¡|j d¡dS)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!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±rZrnrõrárzbad signal nameznot runningú%s: %sr)	r
rrwrèZ
BAD_SIGNALrrrçr)r3r
ÚsuccessrZrZfault_stringrër r r!Ú
_signalresult3sz%DefaultControllerPlugin._signalresultcCs|j|ddS)NÚstopped)r)r)r3r
r r r!Ú_stopresultEsz#DefaultControllerPlugin._stopresultcCsØ|j ¡sdS| ¡}|j ¡}|sF|j d¡tj|j_| ¡dSd|krŒ| 	¡}|D],}|j | 
|¡¡|j |dtj
j¡qZnH|D]@}t|ƒ\}}|dkrHz@| |¡}|D],}|j | 
|¡¡|j |dtj
j¡q¼WnXtjk
rD}	z6tj|j_|	jtj
jkr2d|}
|j |
¡n‚W5d}	~	XYnXqz| |¡Wn`tjk
r¶}	z>|	j|||	jdœ}
|j | 
|
¡¡|j |
dtj
j¡W5d}	~	XYqXt||ƒ}|j d|¡qdS)Nz#Error: stop requires a process namerûrnrürz%s: stopped)r*r–r£rŒrbrrrRÚ	help_stopZstopAllProcessesrryrrwrrÚstopProcessGrouprrr‘rèZstopProcessrr
rr r r!Údo_stopHsP






ý(
zDefaultControllerPlugin.do_stopcCs4|j d¡|j d¡|j d¡|j d¡dS)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!rysz!DefaultControllerPlugin.help_stopc
Csè|j ¡sdS| ¡}t|ƒdkrD|j d¡| ¡tj|j_dS|d}|dd…}|j 	¡}d|kr¤| 
|¡}|D]&}|j | |¡¡|j |d¡qxn@|D]8}t
|ƒ\}	}
|
dkr\z<| |	|¡}|D]&}|j | |¡¡|j |d¡qÖWnXtjk
rX}z6|jtjjkrFd|	}|j |¡tj|j_n‚W5d}~XYnXq¨z| ||¡WnZtjk
rÆ}z8|j|
|	|jdœ}|j | |¡¡|j |d¡W5d}~XYq¨Xt|	|
ƒ}|j d	|¡q¨dS)
Nrz7Error: signal requires a signal name and a process namerrrûrnrürz
%s: signalled)r*r–r£r¤rbÚhelp_signalrrrRrŒZsignalAllProcessesrryrZsignalProcessGrouprrr‘rrwrèZ
signalProcessrr
)
r3rDruZsigrÅrŠrr
rZrýrþrrƒr r r!Ú	do_signals^
ÿ




ÿý"
z!DefaultControllerPlugin.do_signalcCs4|j d¡|j d¡|j d¡|j d¡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 processesrír9r r r!rµsz#DefaultControllerPlugin.help_signalcCsT|j ¡sdS| ¡}|s<|j d¡tj|j_| ¡dS| |¡| 	|¡dS)Nz&Error: restart requires a process name)
r*r–r£rbrrrRÚhelp_restartrr)r3rDrÅ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!r!Ês
z$DefaultControllerPlugin.help_restartc
Cs*|jjjr"tdƒ}| ¡ d¡}nd}|r&|j ¡}z| ¡WnÖtj	k
rŽ}z,|j
tjj
krr|j d¡ntj|j_‚W5d}~XYn˜tjk
r}zjtj|j_|jdtjkrØd}|j ||jjj¡n0|jdtjkrd}|j ||jjj¡n‚W5d}~XYnX|j d¡dS)	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ÓrVrŒZshutdownrrr‘rrwÚSHUTDOWN_STATErbrrrRr’rƒrur“r”r;r•)r3rDÚyesnoÚreallyrŠrrÿr r r!Údo_shutdownÓs.



z#DefaultControllerPlugin.do_shutdowncCs|j d¡dS)Nz+shutdown 	Shut the remote supervisord down.rír9r r r!Ú
help_shutdownòsz%DefaultControllerPlugin.help_shutdownc
CsÄ|r&|j d¡tj|j_| ¡dS|jjjrHtdƒ}| 	¡ 
d¡}nd}|rÀ|j ¡}z| ¡WnLt
jk
r²}z,tj|j_|jtjjkr |j d¡n‚W5d}~XYnX|j d¡dS)Nz"Error: reload accepts no argumentsz3Really restart the remote supervisord process y/N? r#rr$zRestarted supervisord)r*rbrrrRÚhelp_reloadr.r{rrÓrVrŒrrrr‘rrwr%)r3rDr&r'rŠrr r r!Ú	do_reloadõs&



z!DefaultControllerPlugin.do_reloadcCs|j d¡dS)Nz(reload 		Restart the remote supervisord.rír9r r r!r*sz#DefaultControllerPlugin.help_reloadc
	Cs˜|\}}}i}|df|df|dffD]&\}}| tt||gt|ƒƒƒ¡q$|rˆt| ¡ƒ}| ¡|D]}	|j d|	||	f¡qhn|j d¡dS)NZ	availableÚchangedZdisappearedrzNo config updates to processes)	ršÚdictÚzipr¤rÃÚkeysrÍr*rb)
r3Zadded_changed_dropped_tupleÚaddedr,ZdroppedZ
changedictÚnrrÅrZr r r!Ú_formatChangess
þ z&DefaultControllerPlugin._formatChangescCsrt|d|dƒ}d|i}|dr,d|d<nd|d<|drFd|d<nd|d<d	|d
|df|d<d
}||S)Nr±rZZinusezin useZavailZ	autostartÚautoZmanualr·Z
group_prioZprocess_prioZpriorityz4%(name)-32s %(inuse)-9s %(autostart)-9s %(priority)sr	)r3Ú
configinforZZ	formattedrër r r!Ú_formatConfigInfo"s

ÿ
z)DefaultControllerPlugin._formatConfigInfoc
Csª|r&|j d¡tj|j_| ¡dS|j ¡}z| ¡}WnLtj	k
rˆ}z,tj|j_|j
tjj
krv|j d¡n‚W5d}~XYnX|D]}|j | |¡¡qŽdS)Nz!Error: avail accepts no argumentsúERROR: supervisor shutting down)r*rbrrrRÚ
help_availrŒZgetAllConfigInforrr‘rrwr%r5)r3rDrŠr4rZpinfor r r!Údo_avail3s


z DefaultControllerPlugin.do_availcCs|j d¡dS)Nz(avail			Display all configured processesrír9r r r!r7Gsz"DefaultControllerPlugin.help_availc
Cs¾|r&|j d¡tj|j_| ¡dS|j ¡}z| ¡}Wnntj	k
rª}zNtj|j_|j
tjj
krv|j d¡n$|j
tjjkr˜|j d|j¡n‚W5d}~XYnX| |d¡dS)Nz"Error: reread accepts no argumentsr6z	ERROR: %sr)r*rbrrrRÚhelp_rereadrŒÚreloadConfigrrr‘rrwr%ZCANT_REREADrr2)r3rDrŠr
rr r r!Ú	do_rereadJs 


z!DefaultControllerPlugin.do_rereadcCs|j d¡dS)NzDreread 			Reload the daemon's configuration files without add/removerír9r r r!r9_sz#DefaultControllerPlugin.help_rereadcCsÜ| ¡}|j ¡}|D]À}z| |¡Wnœtjk
rÄ}z||jtjj	krb|j 
d¡tj|j_
nR|jtjjkr~|j 
d¡n6|jtjjkr¨|j 
d|¡tj|j_
ntj|j_
‚W5d}~XYqX|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rwr%rbrrrRZ
ALREADY_ADDEDrè©r3rDrÅrŠrZrr r r!Údo_addbs"

zDefaultControllerPlugin.do_addcCs|j d¡dS)NzBadd <name> [...]	Activates any updates in config for process/grouprír9r r r!Úhelp_addxsz DefaultControllerPlugin.help_addcCs°| ¡}|j ¡}|D]”}z| |¡Wnptjk
r˜}zPtj|j_|j	t
jjkrf|j 
d|¡n"|j	t
jjkr†|j 
d|¡n‚W5d}~XYqX|j 
d|¡qdS)Nz&ERROR: process/group still running: %sr<z%s: removed process group)r£r*rŒÚremoveProcessGrouprrrrrRr‘rrwZ
STILL_RUNNINGrbrèr>r r r!Ú	do_remove|s

ÿz!DefaultControllerPlugin.do_removecCs|j d¡dS)Nz<remove <name> [...]	Removes process/group from active configrír9r r r!Úhelp_removesz#DefaultControllerPlugin.help_removec
s‡fdd„}ˆj ¡}z| ¡}WnTtjk
rv}z4tjˆj_|jt	j
jkrdˆj d¡WY¢
dS‚W5d}~XYnX|d\}}}t
| ¡ƒ}	d|	kr t
ƒ}	|	rüt
ƒ}
| ¡D]}|
 |d¡q²|
 |¡|	D]&}||
krԈj d|¡tjˆj_qÔ|D]x}|	r||	krq| |¡}
||dƒd	d
„|
Dƒ}|rbˆj d|df¡tjˆj_q| |¡||d
ƒq|D]L}|	r–||	kr–q~| |¡||dƒ| |¡| |¡||dƒq~|D].}|	rè||	krèqÐ| |¡||dƒqÐdS)Ncsˆj d||f¡dS)Nrrí)rZr‰r9r r!Úlog”sz.DefaultControllerPlugin.do_update.<locals>.logr$rrûr±zERROR: no such group: %srcSs g|]}|dtjjkr|‘qS)rn)rrwrç)r®Úresr r r!r°¾sÿz5DefaultControllerPlugin.do_update.<locals>.<listcomp>rzhas problems; not removingzremoved process groupzupdated process groupzadded process group)r*rŒr:rrrrrRr‘rrwr%rbÚsetr£r¹r˜ršrrAr=)r3rDrDrŠr
rr0r,ZremovedZvalid_gnamesrµr¶ZgnamerZfailsr r9r!Ú	do_update“s`












z!DefaultControllerPlugin.do_updatecCs(|j d¡|j d¡|j d¡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 groupsrír9r r r!Úhelp_update×sz#DefaultControllerPlugin.help_updatecCsvt|d|dƒ}|d}d}|tjjkr6||dfS|tjjkrN||dfS|tjjkrbd|Std||fƒ‚dS)	Nr±rZrnrárZfailedú%s: clearedr)r
rrwrèrçrrrr r r!Ú_clearresultÜsz$DefaultControllerPlugin._clearresultcCs |j ¡sdS| ¡}|s<|j d¡tj|j_| ¡dS|j ¡}d|kr„| 	¡}|D]&}|j | 
|¡¡|j |d¡qZn˜|D]’}t|ƒ\}}z| 
|¡WnXtjk
rþ}	z8|	j|||	jdœ}
|j | 
|
¡¡|j |
d¡W5d}	~	XYqˆXt||ƒ}|j d|¡qˆdS)Nz$Error: clear requires a process namerûrnrrI)r*r–r£rbrrrRÚ
help_clearrŒZclearAllProcessLogsrJryrZclearProcessLogsrrr‘rr
rr r r!Údo_clearès8


ý"
z DefaultControllerPlugin.do_clearcCs(|j d¡|j d¡|j d¡dS)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!rKs
ÿz"DefaultControllerPlugin.help_clearcCs`| ¡}t |¡}|ddkr8|j d¡tj|j_dS||jj_|jj}| 	d¡||j_dS)Nr)ZunixZhttpz%ERROR: url must be http:// or unix://re)
r¡rr*rbrrrRr.r;r)r3rDZurlÚpartsZold_exitstatusr r r!Údo_opens



zDefaultControllerPlugin.do_opencCs|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_opensz!DefaultControllerPlugin.help_opencCsR|r&|j d¡tj|j_| ¡dS|j ¡s4dS|j ¡}|j | ¡¡dS)Nz#Error: version accepts no arguments)	r*rbrrrRÚhelp_versionr–rŒZgetSupervisorVersion)r3rDrŠr r r!Ú
do_version"s


z"DefaultControllerPlugin.do_versioncCs|j d¡dS)Nz<version			Show the version of the remote supervisord processrír9r r r!rP.sÿz$DefaultControllerPlugin.help_versionc	
CsL|j ¡sdS| ¡}|s<|j d¡tj|j_| ¡dSt|ƒdkrb|j d¡tj|j_dS|d}|j 	¡}z| 
|¡}Wndtjk
ræ}zD|j
tjjkr¼|j d¡tj|j_n|j dt|ƒ¡WY¢dSd}~XYnX|dtjjkr|j d¡tj|j_dS|j d	¡d}zît||jƒ}| ¡tƒd
}z| ||¡Wnttjk
rÈ}zR|j
tjjkrˆ|j d¡n|j dt|ƒ¡|j d¡| ¡WY¢WdSd}~XYnX| 
|¡}|dtjjkr:|j d¡|j d¡| ¡WdSq:Wn4ttfk
rF|j d¡|rB| ¡YnXdS)
NzERROR: no process name suppliedrz&ERROR: too many process names suppliedrz ERROR: bad process name suppliedzERROR: r©zERROR: process not runningrØr…zProcess got killedzExiting foreground)r*r–r£rbrrrRÚhelp_fgr¤rŒrrrr‘rrwrèr÷r
Z
ProcessStatesZRUNNINGr$r8rZsendProcessStdinrrHrtÚEOFError)	r3rDrÅrZrŠr¶rr`Zinpr r r!Údo_fg3sf






zDefaultControllerPlugin.do_fgcCs|j d¡|j d¡dS)Nz4fg <process>	Connect to a process in foreground modez		Ctrl-C to exitrí)r3rur r r!rRuszDefaultControllerPlugin.help_fg)r)N)7rrrrZr,rÚrìrärðrïrñròZdo_exitrórúrrrrrrrrrrrr rr"r!r(r)r+r*r2r5r8r7r;r9r?r@rBrCrGrHrJrLrKrNrOrQrPrTrRr r r r!r×ÂshS
3+1
16	D#
Br×cCsh|dkrtƒ}|j|tdt|ƒ}|jrH| d |j¡¡t |j	¡|j
rd| ||¡t d¡dS)N)rÏr—r)rZrealizerIrJrur}Újoinr>ÚexitrRr{rv)rur.Úcr r r!ÚmainzsrXÚ__main__)NN)*rIrSr“r|r’r>r%Zsupervisor.compatrrrrrZsupervisor.medusarr<Zsupervisor.optionsrr
rrŠrr
rrr"rwr	r
rrxr&r$rTrJrÇrÈrÕrÖr×rXrr r r r!Ú<module>sV	þ7
5?