ÿØÿà JFIF    ÿÛ „  ( %"1!%)+...383,7(-.+  -+++--++++---+-+-----+---------------+---+-++7-----ÿÀ  ß â" ÿÄ     ÿÄ H    !1AQaq"‘¡2B±ÁÑð#R“Ò Tbr‚²á3csƒ’ÂñDS¢³$CÿÄ   ÿÄ %  !1AQa"23‘ÿÚ   ? ôÿ ¨pŸªáÿ —åYõõ\?àÒü©ŠÄï¨pŸªáÿ —åYõõ\?àÓü©ŠÄá 0Ÿªáÿ Ÿå[úƒ ú®ði~TÁbqÐ8OÕpÿ ƒOò¤Oè`–RÂáœá™êi€ßÉ< FtŸI“öÌ8úDf´°å}“¾œ6  öFá°y¥jñÇh†ˆ¢ã/ÃÐ:ªcÈ "Y¡ðÑl>ÿ ”ÏËte:qž\oäŠe÷󲍷˜HT4&ÿ ÓÐü6ö®¿øþßèô Ÿ•7Ñi’•j|“ñì>b…þS?*Óôÿ ÓÐü*h¥£ír¶ü UãS炟[AÐaè[ûª•õ&õj?†Éö+EzP—WeÒírJFt ‘BŒ†Ï‡%#tE Øz ¥OÛ«!1›üä±Í™%ºÍãö]°î(–:@<‹ŒÊö×òÆt¦ãº+‡¦%ÌÁ²h´OƒJŒtMÜ>ÀÜÊw3Y´•牋4ǍýʏTì>œú=Íwhyë,¾Ôò×õ¿ßÊa»«þˆѪQ|%6ž™A õ%:øj<>É—ÿ Å_ˆCbõ¥š±ý¯Ýƒï…¶|RëócÍf溪“t.СøTÿ *Ä¿-{†çàczůŽ_–^XþŒ±miB[X±d 1,é”zEù»& î9gœf™9Ð'.;—™i}!ôšåîqêÛ٤ёý£½ÆA–àôe"A$˝Úsäÿ ÷Û #°xŸëí(l »ý3—¥5m! rt`†0~'j2(]S¦¦kv,ÚÇ l¦øJA£Šƒ J3E8ÙiŽ:cÉžúeZ°€¯\®kÖ(79«Ž:¯X”¾³Š&¡* ….‰Ž(ÜíŸ2¥ª‡×Hi²TF¤ò[¨íÈRëÉ䢍mgÑ.Ÿ<öäS0í„ǹÁU´f#Vß;Õ–…P@3ío<ä-±»Ž.L|kªÀê›fÂ6@»eu‚|ÓaÞÆŸ…¨ááå>åŠ?cKü6ùTÍÆ”†sĤÚ;H2RÚ†õ\Ö·Ÿn'¾ ñ#ºI¤Å´%çÁ­‚â7›‹qT3Iï¨ÖÚ5I7Ë!ÅOóŸ¶øÝñØôת¦$Tcö‘[«Ö³šÒ';Aþ ¸èíg A2Z"i¸vdÄ÷.iõ®§)¿]¤À†–‡É&ä{V¶iŽ”.Ó×Õÿ û?h¬Mt–íª[ÿ Ñÿ ÌV(í}=ibÔ¡›¥¢±b Lô¥‡piη_Z<‡z§èŒ)iÖwiÇ 2hÙ3·=’d÷8éŽ1¦¸c¤µ€7›7Ø ð\á)} ¹fËí›pAÃL%âc2 í§æQz¿;T8sæ°qø)QFMð‰XŒÂ±N¢aF¨…8¯!U  Z©RÊ ÖPVÄÀÍin™Ì-GˆªÅËŠ›•zË}º±ŽÍFò¹}Uw×#ä5B¤{î}Ð<ÙD é©¤&‡ïDbàÁôMÁ." ¤‡ú*õ'VŽ|¼´Úgllº¼klz[Æüï÷Aób‡Eÿ dÑ»Xx9ÃÜ£ÁT/`¼¸vI±Ýµ·Ë‚“G³þ*Ÿû´r|*}<¨îºœ @¦mÄ’M¹”.œ«Y–|6ÏU¤jç¥ÕÞqO ˜kDÆÁ¨5ÿ š;ÐЦ¦€GÙk \ –Þ=â¼=SͧµªS°ÚÍpÜãQűÀõ¬?ÃÁ1Ñ•õZà?hóœ€ L¦l{Y*K˜Ù›zc˜–ˆâ ø+¾ ­-Ök¥%ùEÜA'}ˆ><ÊIè“bpÍ/qÞâvoX€w,\úªò6Z[XdÒæ­@Ö—€$òJí#é>'°Ú ôª˜<)4ryÙ£|óAÅn5žêŸyÒäMÝ2{"}‰–¤l÷ûWX\l¾Á¸góÉOÔ /óñB¤f¸çñ[.P˜ZsÊË*ßT܈§QN¢’¡¨§V¼(Üù*eÕ“”5T¨‹Âê¥FŒã½Dü[8'Ò¥a…Ú¶k7a *•›¼'Ò·\8¨ª\@\õ¢¦íq+DÙrmÎ…_ªæ»ŠÓœ¡¯’Ré9MÅ×D™lælffc+ŒÑ,ý™ÿ ¯þǤ=Å’Á7µ÷ÚÛ/“Ü€ñýã¼àí¾ÕÑ+ƒ,uµMâÀÄbm:ÒÎPæ{˜Gz[ƒ¯«® KHà`ߨŠéí¯P8Aq.C‰ à€kòpj´kN¶qô€…Õ,ÜNŠª-­{Zö’æû44‰sŽè‰îVíRœÕm" 6?³D9¡ÇTíÅꋇ`4«¸ÝÁô ï’ýorqКÇZ«x4Žâéþuïf¹µö[P ,Q£éaX±`PÉÍZ ¸äYúg üAx ’6Lê‚xÝÓ*äQ  Ï’¨hÍ =²,6ï#rÃ<¯–£»ƒ‹,–ê•€ aÛsñ'%Æ"®ÛüìBᝠHÚ3ß°©$“XnœÖ’î2ËTeûìxîß ¦å¿çÉ ðK§þ{‘t‚Ϋ¬jéîZ[ ”š7L¥4VÚCE×]m¤Øy”ä4-dz£œ§¸x.*ãÊÊ b÷•h:©‡¦s`BTÁRû¾g⻩‹jø sF¢àJøFl‘È•Xᓁà~*j¯ +(ÚÕ6-£¯÷GŠØy‚<Ç’.F‹Hœw(+)ÜÜâÈzÄäT§FߘãÏ;DmVœ3Àu@mÚüXÝü•3B¨òÌÁÛ<·ÃÜ z,Ì@õÅ·d2]ü8s÷IôÞ¯^Ç9¢u„~ëAŸï4«M? K]­ÅàPl@s_ p:°¬ZR”´›JC[CS.h‹ƒïËœ«Æ]–÷ó‚wR×k7X‰k›‘´ù¦=¡«‰¨¨Â')—71ó’c‡Ðúµ `é.{§p¹ój\Ž{1h{o±Ý=áUÊïGÖŒõ–-BÄm+AZX¶¡ ïHðæ¥JmÙ;…䡟ˆ¦ ° äšiÉg«$üMk5¤L“’çÊvïâï ,=f“"íἊ5ô¬x6{ɏžID0e¸vçmi'︧ºð9$ò¹÷*£’9ÿ ²TÔ…×>JV¥}Œ}$p[bÔ®*[jzS*8 ”·T›Í–ñUîƒwo$áè=LT™ç—~ô·¤ÈÚ$榍q‰„+´kFm)ž‹©i–ËqÞŠ‰à¶ü( ‚•§ •°ò·‡#5ª•µÊ﯅¡X¨šÁ*F#TXJÊ ušJVÍ&=iÄs1‚3•'fý§5Ñ<=[íÞ­ PÚ;ѱÌ_~Ä££8rÞ ²w;’hDT°>ÈG¬8Á²ÚzŽ®ò®qZcqJêäÞ-ö[ܘbň±çb“ж31²n×iƒðÕ;1¶þÉ ªX‰,ßqÏ$>•î íZ¥Z 1{ç൵+ƒÕµ¥°T$§K]á»Ûï*·¤tMI’ÂZbŽÕiÒ˜}bÓ0£ª5›¨ [5Ž^ÝœWøÂÝh° ¢OWun£¤5 a2Z.G2³YL]jåtì”ä ÁÓ‘%"©<Ôúʰsº UZvä‡ÄiÆÒM .÷V·™ø#kèýiíÌ–ª)µT[)BˆõÑ xB¾B€ÖT¨.¥~ð@VĶr#¸ü*åZNDŽH;âi ],©£öØpù(šºãö¼T.uCê•4@ÿ GÕÛ)Cx›®0ø#:ÏðFÒbR\(€€Ä®fã4Þ‰Fä¯HXƒÅ,†öEÑÔÜ]Öv²?tLÃvBY£ú6Êu5ÅAQ³1‘’¬x–HŒÐ‡ ^ ¸KwJôÖŽ5×CÚ¨vÜ«/B0$×k°=ðbÇ(Ï)w±A†Á† 11Í=èQšµ626ŒÜ/`G«µ<}—-Ö7KEHÈÉðóȤmݱû±·ø«Snmá=“䫚mݱŸ¡¶~ó·“äUóJæúòB|E LêŽy´jDÔ$G¢þÐñ7óR8ýÒ…Ç› WVe#·Ÿ p·Fx~•ݤF÷0Èÿ K¯æS<6’¡WШ; ´ÿ ¥Êø\Òuî†åÝ–VNœkÒ7oòX¨Á­Ø÷FÎÑä±g÷ÿ M~Çî=p,X´ ÝÌÚÅ‹’ÃjÖ.ØöÏñ qïQ¤ÓZE†° =6·]܈ s¸>v•Ž^Ý\wq9r‰Î\¸¡kURÒ$­*‹Nq?Þª*!sŠÆ:TU_u±T+øX¡ ®¹¡,ÄâÃBTsÜ$Ø›4m椴zÜK]’’›Pƒ @€#â˜`é¹=I‡fiV•Ôî“nRm+µFPOhÍ0B£ €+¬5c v•:P'ÒyÎ ‰V~‚Ó†ÖuókDoh$å\*ö%Ю=£«…aȼ½÷Û.-½VŒŠ¼'lyî±1¬3ó#ÞE¿ÔS¤gV£m›=§\û"—WU¤ÚǼÿ ÂnÁGŒÃ ‚õN D³õNÚíŒÕ;HôyÄÈ©P¹Ä{:?R‘Ô¨âF÷ø£bÅó® JS|‚R÷ivýáâ€Æé¡è³´IئÑT!§˜•ت‚¬â@q€wnïCWÄ@JU€ê¯m6]Ï:£âx'+ÒðXvÓ¦Úm=–´7œ $ì“B£~p%ÕŸUþ« N@¼üï~w˜ñø5®—'Ôe»¤5ã//€ž~‰Tþ›Å7•#¤× Íö pÄ$ùeåì*«ÓŠEØWEÈsßg ¦ûvžSsLpºÊW–âµEWöˬH; ™!CYõZ ÃÄf æ#1W. \uWâ\,\Çf j’<qTbên›Î[vxx£ë 'ö¨1›˜ÀM¼Pÿ H)ƒêêŒA7s,|F“ 꺸k³9Ìö*ç®;Ö!Ö$Eiž•¹ÒÚ†ýóéÝû¾ÕS®ó$’NÝäŸz¤5r¦ãÄÃD÷Üø!°ø‡Ô&@m™Ì^Ãä­d q5Lnÿ N;.6½·N|#ä"1Nƒx“ã<3('&ñßt  ~ªu”1Tb㫨9ê–›–bìd$ߣ=#ÕãÒmU¯eí$EFù5ýYô櫨æì™Ç—±ssM]·á¿0ÕåJRÓªîiƒ+O58ÖñªŠÒx" \µâá¨i’¤i —Ö ” M+M¤ë9‚‰A¦°Qõ¾ßøK~¼Ã‘g…Ö´~÷Ï[3GUœÒ½#…kàÔ®Ò”‰³·dWV‰IP‰Ú8u¹”E ÖqLj¾êÕCBš{A^Âß;–¨`¯¬ìö ˼ ×tìø.tƐm*n¨y4o&Àx¥n¦×î‡aupáÛj8¿m›è¶ã!o½;ß0y^ý×^EÑ¿ÒjzŒ­)vÚÑnÄL …^ªô× ‡—‚3k Îý­hï]içå–îÏ*÷ñþ»Ô CÒjøjÍznˆ´ ¹#b'Fô‹ ‰v¥'’à'T´ƒHýÍ%M‰ ƒ&ÆÇŒï1 ‘ –Þ ‰i¬s žR-Ÿ kЬá¬7:þ 0ŒÅÒÕ/aÙ¬ÃÝ#Úøœ ©aiVc‰. ¹¦ãµ” ›Yg¦›ÆÎýº°f³7ƒhá·¸­}&D9¡ÂsÉÙÞèŠõØàC™¨ñbFC|´Ü(ŸƒÚÒ-%»'a Ì¿)ËÇn¿úÿ ÞŽX…4ÊÅH^ôΑí@ù¹Eh¶“L8Çjù ¼ÎåVªóR©Ï5uà V4lZß®=€xÖŸ–ÑÈ ÷”¨°¾__yM1tÉ?uÆþIkÄgæ@þ[¢†°XÃJ£j·:nkÅ¢u ‘}âGzö­/IµèЬ¼48q¦F°ŽR¼=ûì{´¯RýicS ÕÛ íNtÍÙï£,w4rêì®»~x(©Uñ§#Ñ&œÕ¤>ÎåÍÓ9’Ö{9eV­[Öjâ²ãu]˜å2›qÑšÕJç0€sÄ|Êëè0튔bÁ>“{×_F`Ø©ºê:µä,v¤ðfc1±"«ÔÍän1#=· Âøv~H½ÐßA¾¿Ü€Óš]Õ; I¾÷ç‚Qi†î¹9ywÔKG˜áñ zQY—§ÃÕZ07§X‚ Áh;ÁM)iÌCH-¯T‘ë|A0{Ò½LÚ–TâÖkÜ’dÀ“rmm»”جPF³ÖcbE§T€ÒxKºû’Ó®7±²(\4ŽÃ¸Uu@j™yĵ;³µ!Á¢b.W¤=mõ´êµK k ¸K^ÜÛ#p*Ü14qkZç5ïë †°5Ï%ÍÛ<Õ¤×Ô¥ê†C Õ´¼ú$ƒÖ“”]Ù¬qÞÚ[4©ý!ûÏ—Áb쳐XµA¬â~`›Çr¸8ìùÝ䫦<>ä÷«?xs´ÇÑ /á;¹øüÊÈÙà{"@Žïzâ¬[âß‚ U_<ÇŸ½4èN˜ú61®qŠu ¦þF£»äJ_ˆÙÎ~ ÞAã–݄ϗrŠD;xTž‘ô`É«…suãO`?³à™ô Lý#Íc5öoæØ‚y´´÷«ZR§<&JÇ+éâô´€i!Àˆ0æAoàðLèÖ-2ŸõW.’t^–(KÁmHµV@xÜÇy®Ñø­â^:Ú3w· 7½¹°ñ¸â¹®:',«Mœ—n­Á+Ãbš LÈ‘ÄnRÓÅœ%¦²‰¨ùQ:¤f‚ "PÕtô¸…cæl…&˜Ú˜Ôkv‹ž+vŠ,=¢v­6—Xy*¥t£«<™:“aîϲ=¦6rO]XI¿Œ÷¤zÚ­›¶ 6÷”w\d ü~v®ˆÌk«^m<ÿ ¢‰Õ\)ùºŽ;… lîÙÅEŠ®cѾ@vnMÏ,¼“ñ•ŽBxðÃzãÇç%3ˆ"}Ù•Åî> BÉú;Ò]V+P˜F_´ßé> Øše|ï‡ÄOmFæÇ ãqÞ$/xÐx­z`ï9"œÜij‚!7.\Td…9M‡•iŽ‹¾‘50ÞŽn¥ß4ÉôO ¹*í^QêËÜÇÌ8=ާs‰'ÂëÙ«á%Pú[O †ÅP¯Vsް.‰,kc¶ ¬A9n˜XÎ-ÞšN["¹QÕ‰ƒMýÁߺXJæÍaLj¾×Ãmã¾ãÚ uñÒþåQô¦¥ /ÄUx:‚ÍÜ’ Đ©ØÝ3V¨‰ÕnÐ6ó*óúK­«…c ¯U òhsý­jóÔj#,ímŒRµ«lbïUTŒÑ8†Ä0œÏr`ð¡¬É Ї ë"À² ™ 6¥ f¶ ¢ÚoܱԷ-<Àî)†a¶ž'Ú»¨TXqØæ¶÷YÄHy˜9ÈIW­YÀuMFë ºÏ’AqÌ4·/Ú †ô'i$øä­=Ä Ý|öK×40è|È6p‘0§)o¥ctî§H+CA-“ xØ|ÐXАç l8íºð3Ø:³¤¬KX¯UÿÙ  rŽYc@scdZddlZddlZddlZddlZddlZddlZddlZddlZddl m Z ddl m Z ddl mZddl mZddlmZddlmZdd lmZd ejfd YZd ejfd YZdZdfdYZdefdYZeedZedkr_endS(ssupervisorctl -- control applications run by supervisord from the cmd line. Usage: %s [options] [action [arguments]] Options: -c/--configuration FILENAME -- configuration file path (default /etc/supervisord.conf) -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. iN(t asyncore_25(t ClientOptions(t make_namespec(tsplit_namespec(txmlrpc(tstates(t http_clienttfgthreadcBsMeZdZdZdZdZdZdZdZdZ RS(s 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 cCstjj|t|_||_||_tj|_ tj |j |jj j |jj j |_tj |j |jj j |jj j |_dS(N(t threadingtThreadt__init__tFalsetkilledtprogramtctlRtListenertlistenert HTTPHandlertoptionstusernametpasswordtoutput_handlert error_handler(tselfR R((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyR 1s       cCs,|j|_|j|_tjj|dS(N(trunt_fgthread__run_backupt_fgthread__runRR tstart(R((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyR>s  cCsT|jj|jjjd|j|jj|jjjd|jtjdS(Ns/logtail/%s/stdouts/logtail/%s/stderr( RtgetRRt serverurlR Rtasyncoretloop(R((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyRDs cCs*tj|j|j|j|_dS(N(tsystsettracet globaltraceRR(R((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyt__runKs cCs|dkr|jSdSdS(Ntcall(t localtracetNone(Rtframetwhytarg((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyR"Qs cCs+|jr$|dkr$tq$n|jS(Ntline(R t SystemExitR%(RR'R(R)((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyR%Ws  cCs'|jj|jjt|_dS(N(RtcloseRtTrueR (R((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pytkill]s  ( t__name__t __module__t__doc__R RRRR"R%R.(((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyR+s     t ControllercBseZddddZdZdZdZdZdZdZ ddZ d Z dd Z d Z d Zd ZdZdZdZdZdZRS(ttabc Cs||_|jjd|_g|j_dg|_d|_tjj||||x|jj D]\}}}|||}xOt |D]A} | j drt t || r|jj| dqqW|jjj|||_qcWdS(Ns> thelptdo_i(RtprompttpluginstvocabR&t_complete_infotcmdtCmdR tplugin_factoriestdirt startswithtcallabletgetattrtappendtname( RRt completekeytstdintstdoutRBtfactorytkwargstpluginta((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyR ds    $cCsdS(N((R((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyt emptylinetscsyddlj}|jdd}|jdd}|jdd}j|jryjjWntk rnXfd}ddl}|j|nWnt k rnXy|j j d|j Wnt k r|jdnXdS(Nit:tt*t-cs,yjjWntk r'nXdS(N(twrite_history_filet history_filetIOError((Rtreadline(s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pytsaves tstatus(RRtget_completer_delimstreplacetset_completer_delimsRPtread_history_fileRQtatexittregistert ImportErrortcmdqueueRAtcmdlooptKeyboardInterrupttoutput(RtargsRtdelimsRSRY((RRRs</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyt exec_cmdloopxs.         cCs|}|jd}|jd}|jj||j|\}}}|s\|jS|d kru|j|Sd |_||_ |dkr|j|S|j |}|d kr|j|Syy||SWnt j k r}|j dkry|jjrf|jdtd}tjdd} |jd||j_| |j_|j|S|jjdqnX||Wntk rnqtk rtj\\} } }} } }d | | | |f}|j||jjstjd qnXd S( s Override the onecmd method to: - catch and print all exceptions - allow for composite commands in interactive mode (foo; bar) - call 'do_foo' on plugins rather than ourself t;iRLisServer requires authentications Username:R6s Password:s error: %s, %s: file: %s line: %siN(tsplittpopR\textendt parselineRJR&tdefaultR9tlastcmdt _get_do_funct xmlrpclibt ProtocolErrorterrcodeRt interactiveR_t raw_inputtgetpassRRtonecmdtusageR+t ExceptionRtcompact_tracebackR texit(RR*toriglinetlinesR:R)tdo_functeRRtfiletfuntttvttbinfoterror((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyRqsP                  !  cCsbd|}t||d}|s^x9|jjD](}t||d}|dk r/Pq/q/Wn|S(NR5(R@R&RR7(RR:t func_nametfuncRH((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyRjs   cCsH|dk rDt|tr-|jd}n|jj|dndS(Nsutf-8s (R&t isinstancetunicodetencodeREtwrite(Rtstuff((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyR_s cCs |jdS(Nt supervisor(tget_server_proxy(R((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pytget_supervisorscCs0|jj}|dkr|St||SdS(N(RtgetServerProxyR&R@(Rt namespacetproxy((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyRs cCsyY|j}|j}ddlm}||jkrX|jd|j|ftSWntjk r}|j t j j kr|jdtSn{t jk r}|jdtjkr|jd|jjtS|jdtjkr|jd|jjtSnXtS(Ni(t rpcinterfacessSorry, this version of supervisorctl expects to talk to a server with API version %s, but the remote version is %s.sSorry, 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).is%s refused connections%s no such file(Rt getVersionRRt API_VERSIONR_R RktFaultt faultCodeRtFaultstUNKNOWN_METHODtsocketRR`terrnot ECONNREFUSEDRRtENOENTR-(RRtapiRRyR(((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pytupchecks0  c Cs |dkr'ddl}|j}n|jdd}g}|js^|j|}n|j}|d}t|dkr|jd r|j|}nZ|dkr|j|}n<|dkr|j|}n|dkr|j |}nt||kr||SdS(saCompleter 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.iNRciit R4taddtremovetupdatetcleartfgtpidtrestarttsignalRRTtstopttail(RRR( RRRRRRRTRR( R&RRtget_line_bufferRdtstript_complete_actionstlentendswitht_complete_groupst_complete_processes( RttexttstateR*RRtphrasetmatchestwordstaction((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pytcompletes(     "   cCs-g|jD]}|j|r |d^q S(s5Build a completion list of action names matching textR(R8R>(RRRI((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyR)scCskg}x8|jD]*}|d|kr|j|dqqWg|D]}|j|rH|d^qHS(s4Build a completion list of group names matching texttgroupR(t_get_complete_infoRAR>(RRtgroupstinfotg((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyR-s cCsg}x|jD]}d|ks9|d|dkr|jd|d|dfd|d|kr|jd|dqq|j|dqWg|D]}|j|r|d^qS(s6Build a completion list of process names matching textRKRBRs%s:%ss%s:*R(RRAR>(RRt processesRtp((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyR5s cCs.|jdkr'|jj|_n|jS(sGet 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(R9R&RtgetAllProcessInfo(R((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyRAscCsG|jdkr|jn$x!|jjD]}|j|q,WdS(NR4(Rt help_helpRR7tdo_help(RR)RH((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyRIs cCs|jd|jddS(Ns'help Print a list of available actionss%help Print help for (R_(R((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyRPs cCs|jddS(NRLi(R_(RR)((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pytdo_EOFTs cCs|jddS(Ns(To quit, type ^D or use the quit command(R_(R((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pythelp_EOFXsN(R/R0R&R RJRbRqRjR_RRRRRRRRRRRR(((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyR2bs&   4     $      cCsag}|jg}xH|r\|jd}|jrI|t|j}n|t|}qW|S(Ni(t __class__Ret __bases__tlistR=(tinsttnamestclassestaclass((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyt get_names[s   tControllerPluginBasecBs5eZdZdZdZeeZdZRS(tunnamedcCs ||_dS(N(R(Rt controller((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyR hscCs d|jS(Ns %s commands (type help ):(RB(R((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyt _doc_headerksc Cs|ryt|d|}Wnwtk ry4t|d|j}|r`|jj|dSWntk rtnX|jj|jj|fdSX|n$t|}g}g}i}x/|D]'}|d dkrd||d Press Ctrl-C to exit <==RL(RR_RRRRR&RRRRRRRR^R,(RtpathRRRthandler((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyt_tailfs   c Cs|jjsdS|j}t|dkrO|jjd|jdSt|dkr|jjd|jdSd}|djdr|jd}nt|dkr|d}d}n[|r|d}|dj }|dkr*|jjd |dSn|jjd dSd }|dk r|d}|d kr[d}qyt |}Wq|jjd|dSXn|jj }|dkr|j d||fSy?|dkr|j || d} n|j|| d} Wntjk r} d} | jtjjkrK|jj| |dfq| jtjjkr}|jj| |dfq| jtjjkr|jj| |dfqnX|jj| dS(NisError: too few argumentsisError: too many argumentsiRNiREtstderrsError: bad channel %rs!Error: tail requires process namei@tfsError: bad argument %ss/logtail/%s/%ss%s: ERROR (%s)s no log filesunknown error reading logsno such process name(RRE(RRRdRR_t help_tailR&R>RetlowertintRRtreadProcessStdoutLogtreadProcessStderrLogRkRRRRtNO_FILEtFAILEDtBAD_NAME( RR)R`tmodifierRBtchanneltbytestwhatRR_Ryttemplate((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pytdo_tailsp               cCs|jjddS(Nstail [-f] [stdout|stderr] (default stdout) Ex: tail -f Continuous tail of named process stdout Ctrl-C to exit. tail -100 last 100 *bytes* of process stdout tail stderr last 1600 *bytes* of process stderr(RR_(R((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyRs c Cs|jjsdS|j}t|dkrO|jjd|jdSt|dkr|djdr|dd}|dkrd}|j|Syt|}Wn |jjd|ddSX|}q|jjd|ddSnd}|jj }y|j | d}Wnwt j k r}d } |j tjjkro|jj| d q|j tjjkr|jj| dqnX|jj|dS(NisError: too many argumentsiRNRs /mainlogtailsError: bad argument %si@s%s: ERROR (%s)t supervisords no log filesunknown error reading log(Rs no log file(Rsunknown error reading log(RRRdRR_t help_maintailR>RRRtreadLogRkRRRRRR( RR)R`RRRRR_RyR((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyt do_maintail sD       cCs|jjddS(Nsmaintail -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 (RR_(R((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyR:s cCstjddS(Ni(R Ru(RR)((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pytdo_quitBscCs|jjddS(Nsquit Exit the supervisor shell.(RR_(R((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyt help_quitEscCs|jjddS(Nsexit Exit the supervisor shell.(RR_(R((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyt help_exitJscCsgd}}xat|D]S\}}|jt|d|dt|||krt||}qqWdt|dd}xUt|D]G\}}|i||d6|dd 6|d d 6}|jj|qWdS( NiRRBs %(namespec)-iss%(state)-10s%(desc)stnamespect statenameRt descriptiontdesc(t enumerateRARRtstrRR_(Rt process_infost namespecstmaxlentiRRR*((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyt_show_statusesMs  c Cs4|jjsdS|jj}|j}|j}| sMd|krV|}ng}x|D]}t}t|\}} x_|D]W} | d|k} | dk r| o| d| k} n| rt}|j | qqW|rc| dkrd|} n d|} |jj | qcqcW|j |dS(NtallRRBs%s: ERROR (no such group)s%s: ERROR (no such process)( RRRRRdR-RR&R RAR_R( RR)Rt all_infosRtmatching_infosRBtbad_namet group_namet process_nameRtmatchedtmsg((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyt do_status[s0         cCsD|jjd|jjd|jjd|jjddS(Ns.status Get status for a single processs8status :* Get status for all processes in a groups<status Get status for multiple named processess$status Get all process status info(RR_(R((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyt help_status}scCs#|jj}|jjs"dS|j}|sY|j}|jjt|nd|krx|jD] }|jjt|dqrWnx|D]{}y|j|}WnEt j k r}|j t j jkr|jjd|qqX|jjt|dqWdS(NRRsNo such process %s(RRRRdtgetPIDR_RRtgetProcessInfoRkRRRRR(RR)RRRRRBRy((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pytdo_pids$   ! cCs4|jjd|jjd|jjddS(Ns!pid Get the PID of supervisord.s:pid Get the PID of a single child process by name.s;pid all Get the PID of every child process, one per line.(RR_(R((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pythelp_pidscCst|d|d}|d}d}|tjjkrG||dfS|tjjkrg||dfS|tjjkr||dfS|tjjkr||dfS|tjjkr||d fS|tjjkr||d fS|tjj krd |St d ||fdS( NRRBRTs%s: ERROR (%s)sno such processs no such filesfile is not executablesalready starteds spawn errorsabnormal terminations %s: startedsUnknown result code %s for %s( RRRRRtNOT_EXECUTABLEtALREADY_STARTEDt SPAWN_ERRORtABNORMAL_TERMINATIONtSUCCESSt ValueError(RtresultRBtcodeR((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyt _startresults$ c Cs|jjsdS|j}|jj}|sR|jjd|jdSd|kr|j}x|D]%}|j|}|jj|qqWnSxP|D]H}t|\}}|dkr\yC|j |}x-|D]%}|j|}|jj|qWWqt j k rX} | j tjjkrRd|} |jj| qYqXqy|j|}WnWt j k r} |ji| j d6|d6|d6| jd6} |jj| qXt||}|jjd|qWdS( Ns$Error: start requires a process nameRs%s: ERROR (no such group)RTRBRRs %s: started(RRRdRR_t help_starttstartAllProcessesRRR&tstartProcessGroupRkRRRRRt startProcesst faultStringR( RR)RRtresultsRRBRRRyR((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pytdo_startsH          cCsD|jjd|jjd|jjd|jjddS(Nsstart Start a processs/start :* Start all processes in a groups6start Start multiple processes or groupssstart all Start all processes(RR_(R((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyRs  t signalledcCst|d|d}|d}|d}d}|tjjkrQ||dfS|tjjkrq||dfS|tjjkr||dfS|tjjkrd ||fS|tjjkr|Std ||fdS( NRRBRTRs%s: ERROR (%s)sno such processsbad signal names not runnings%s: %ssUnknown result code %s for %s( RRRRt BAD_SIGNALt NOT_RUNNINGRRR(RRtsuccessRBRt fault_stringR((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyt _signalresults  cCs|j|ddS(NRtstopped(R(RR((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyt _stopresultsc Cs|jjsdS|j}|jj}|sR|jjd|jdSd|kr|j}x|D]%}|j|}|jj|qqWnSxP|D]H}t|\}}|dkr\yC|j |}x-|D]%}|j|}|jj|qWWqt j k rX} | j tjjkrRd|} |jj| qYqXqy|j|}WnWt j k r} |ji| j d6|d6|d6| jd6} |jj| qXt||}|jjd|qWdS( Ns#Error: stop requires a process nameRs%s: ERROR (no such group)RTRBRRs %s: stopped(RRRdRR_t help_stoptstopAllProcessesR!RR&tstopProcessGroupRkRRRRRt stopProcessRR( RR)RRRRRBRRRyR((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pytdo_stopsH          cCsD|jjd|jjd|jjd|jjddS(Nsstop Stop a processs-stop :* Stop all processes in a groups4stop Stop multiple processes or groupssstop all Stop all processes(RR_(R((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyR"0sc Cs|jjsdS|j}t|dkrO|jjd|jdS|d}|d}|jj}d|kr|j|}x|D]%}|j|}|jj|qWnWxT|D]L}t |\} } | dkryF|j | |}x-|D]%}|j|}|jj|qWWqt j k r~} | jtjjkrxd| } |jj| qqXqy|j||WnWt j k r} |ji| jd6| d6| d 6| jd 6} |jj| qXt| | }|jjd |qWdS( Nis7Error: signal requires a signal name and a process nameiiRs%s: ERROR (no such group)RTRBRRs %s: signalled(RRRdRR_t help_signalRtsignalAllProcessesRRR&tsignalProcessGroupRkRRRRRt signalProcessRR( RR)R`tsigRRRRRBRRRyR((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyt do_signal6sP             cCsD|jjd|jjd|jjd|jjddS(Ns-signal Signal a processs?signal :* Signal all processes in a groupsFsignal Signal multiple processes or groupss.signal all Signal all processes(RR_(R((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyR'iscCsa|jjsdS|j}|sC|jjd|jdS|j||j|dS(Ns&Error: restart requires a process name(RRRdR_t help_restartR&R(RR)R((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyt do_restartos   cCsT|jjd|jjd|jjd|jjd|jjddS(Ns!restart Restart a processs2restart :* Restart all processes in a groups:restart Restart multiple processes or groupss"restart all Restart all processessLNote: restart does not reread config files. For that, see reread and update.(RR_(R((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyR-}s cCsG|jjjr3td}|jjd}nd}|rC|jj}y|jWntj k r}|j t j j kr|jjdq@qCtjk r/}|jdtjkrd}|jj||jjjq@|jdtjkr)d}|jj||jjjq@qCX|jjdndS( Ns5Really shut the remote supervisord process down y/N? tyisERROR: already shutting downis1ERROR: %s refused connection (already shut down?)s+ERROR: %s no such file (already shut down?)s Shut down(RRRnRoRR>RtshutdownRkRRRRtSHUTDOWN_STATER_RRR`RRRR(RR)tyesnotreallyRRyR((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyt do_shutdowns*   cCs|jjddS(Ns+shutdown Shut the remote supervisord down.(RR_(R((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyt help_shutdownscCs|jjjr3td}|jjd}nd}|r|jj}y|jWnAtj k r}|j t j j kr|jjdqqX|jjdndS(Ns3Really restart the remote supervisord process y/N? R/isERROR: already shutting downsRestarted supervisord(RRRnRoRR>RRRkRRRRR1R_(RR)R2R3RRy((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyt do_reloads cCs|jjddS(Ns(reload Restart the remote supervisord.(RR_(R((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyt help_reloadsc Cs|\}}}i}xX|df|df|dfgD]5\}}|jtt||gt|q7W|r|j}|jx?|D]$} |jjd| || fqWn|jjddS(Nt availabletchangedt disappeareds%s: %ssNo config updates to processes(RtdicttzipRtkeysRRR_( Rt.1taddedR9tdroppedt changedicttnR|RRB((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyt_formatChangess   -   %cCst|d|d}i|d6}|dr;d|d [...] Activates any updates in config for process/group(RR_(R((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pythelp_addscCs|j}|jj}x|D]}y|j|Wnqtjk r}|jtjj krz|jj d|q|jtjj kr|jj d|qq"X|jj d|q"WdS(Ns&ERROR: process/group still running: %ss ERROR: no such process/group: %ss%s: removed process group( RdRRtremoveProcessGroupRkRRRRt STILL_RUNNINGR_R(RR)RRRBRy((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyt do_removes     cCs|jjddS(Ns<remove [...] Removes process/group from active config(RR_(R((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyt help_remove(scsfd}jj}y|j}WnBtjk rr}|jtjjkrljj ddSnX|d\}}}t |j } d| krt } n| r+t } x%|j D]} | j | dqW| j|x4| D])} | | krjj d| qqWnx|D]} | rP| | krPq2n|j| } || dg| D]"}|dtjjkrs|^qs}|r|| d q2n|j| || d q2Wxi|D]a} | r| | krqn|j| } || d|j| |j| || d qWx@|D]8} | rc| | krcqEn|j| || d qEWdS( Ncsjjd||fdS(Ns%s: %s(RR_(RBtmessage(R(s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pytlog-ssERROR: already shutting downiRRsERROR: no such group: %sR RTshas problems; not removingsremoved process groupsupdated process groupsadded process group(RRRSRkRRRRR1R_tsetRdRRRR$RR[RW(RR)R`RRRyR?R9tremovedt valid_gnamesRRtgnameRtrestfails((Rs</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyt do_update,s\         "        cCs4|jjd|jjd|jjddS(Ns2update Reload config and add/remove as necessarys5update all Reload config and add/remove as necessarys+update [...] Update specific groups(RR_(R((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyt help_updatemscCst|d|d}|d}d}|tjjkrG||dfS|tjjkrg||dfS|tjjkrd|Std||fdS( NRRBRTs%s: ERROR (%s)sno such processtfaileds %s: clearedsUnknown result code %s for %s(RRRRRRR(RRRBRR((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyt _clearresultrs c CsT|jjsdS|j}|sC|jjd|jdS|jj}d|kr|j}x|D]%}|j|}|jj|qqWnx|D]}t|\}}y|j |}WnWt j k r(} |ji| j d6|d6|d6| j d6} |jj| qXt||}|jjd|qWdS(Ns$Error: clear requires a process nameRRTRBRRs %s: cleared(RRRdR_t help_clearRtclearAllProcessLogsRjRtclearProcessLogsRkRRRR( RR)RRRRRBRRRyR((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pytdo_clear~s2      cCs4|jjd|jjd|jjddS(Ns)clear Clear a process' log files.s5clear Clear multiple process' log filess'clear all Clear all process' log files(RR_(R((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyRks cCs_|j}tj|}|ddkr?|jjddS||jj_|jddS(Nitunixthttps%ERROR: url must be http:// or unix://RL(RoRp(RturlparseRR_RRR(RR)turltparts((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pytdo_opens cCs$|jjd|jjddS(Ns3open Connect to a remote supervisord process.s3 (for UNIX domain socket, use unix:///socket/path)(RR_(R((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyt help_openscCs<|jjsdS|jj}|jj|jdS(N(RRRR_tgetSupervisorVersion(RR)R((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyt do_versionscCs|jjddS(Ns<version Show the version of the remote supervisord process(RR_(R((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyt help_versions cCsP|jjsdS|s7|jjd|jdS|j}t|dkri|jjddS|d}|jj}y|j|}WnVtj k r}|j t j j kr|jjddS|jjt|dSX|dtjjks|jjddSyt||j}|jxtrtd}y|j||WnYtj k r}|j t j jkr|jjd |jjd |jdSnX|j|}|dtjjks:|jjd |jjd |jdSq:q:WWn1ttfk rK|j|jjd nXdS( NsError: no process name suppliedis&Error: too many process names suppliedis Error: bad process name suppliedRsError: process not runnings sProcess got killedsExiting foreground(RRR_thelp_fgRdRRRRkRRRRRRRt ProcessStatestRUNNINGRRR-RotsendProcessStdinRR.R^tEOFError(RR`R RRRRItinp((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pytdo_fgs^          cCs$|jjd|jjddS(Ns4fg Connect to a process in foreground modesPress Ctrl+C to exit foreground(RR_(RR`((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyRysN(7R/R0RBR&RRRRRRRRtdo_exitRRRRRR RRRRR!R&R"R,R'R.R-R4R5R6R7RCRNRQRRRURVRYRZR]R^RgRhRjRnRkRtRuRwRxRRy(((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyRsh  L /      "     .    .  3                A  !     6cCs||dkrt}n|j|dtt|}|jr\|jdj|jn|jrx|j ||ndS(NRR( R&RtrealizeR1R2R`RqtjoinRnRb(R`Rtc((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pytmains     t__main__(R1R:R RpRkRRRqRtsupervisor.medusaRRtsupervisor.optionsRRRRRRRR RR;R2RRRR&RR/(((s</usr/lib/python2.7/dist-packages/supervisor/supervisorctl.pyts4        7 5a