ó
    …dJjgW  ã                  ó&  • % S SK Jr  S SKJr  S SKJrJr  S SKJrJ	r	J
r
  S SKJrJrJrJrJrJr  S SKJrJrJr  S SKJrJrJrJr  S SKJrJrJr  S S	KJ r   S S
K!J"r"J#r#  S SK$J%r%  S SK&J'r'J(r(J)r)J*r*J+r+J,r,  S SK-J.r.J/r/J0r0J1r1  S SK2J3r3  S SK4J5r5  S SK6J7r7J8r8  S SK9J:r:  S SK;J<r<  S SK=J>r>  \>" S5      r?0 S\_S\_S\_S\	_S\
_S\_S\_S\_S\_S\_S\_S \_S!\_S"\_S#\_S$\_S%\_0 S&\_S'\_S(\_S)\_S*\ _S+\"_S,\#_S-\%_S.\'_S/\(_S0\)_S1\*_S2\+_S3\,_S4\._S5\/_S6\0_E\1\3\5S7.Er@S S8KArAS S8KBrBS S8KCrCS S8KDrDS S8KErES S9KFJFrF  S S:KGJHrH  \BR’                  " 5       rJS8qKS;\LS<'   SFS= jrMSGS> jrNSHS? jrOSIS@ jrPSJSA jrQ " SB SC5      rR\ER¦                  SKSD j5       rTSJSE jrUg8)Lé    )Úannotations)ÚAny)Úhandle_cron_createÚhandle_cron_delete)Úhandle_sftp_createÚhandle_sftp_deleteÚhandle_sftp_reset_password)Úhandle_database_createÚhandle_database_dropÚhandle_database_user_createÚhandle_database_user_deleteÚ#handle_database_user_reset_passwordÚ"handle_database_user_update_grants)Úhandle_nginx_config_readÚhandle_nginx_config_writeÚhandle_nginx_service_reload)Úhandle_service_startÚhandle_service_stopÚhandle_service_restartÚhandle_service_status)Úhandle_ssl_generateÚhandle_ssl_renewÚhandle_ssl_delete)Úhandle_pipeline_run)Úhandle_site_createÚhandle_site_delete)Úhandle_log_read)Úhandle_file_listÚhandle_file_readÚhandle_file_writeÚhandle_file_deleteÚhandle_file_renameÚhandle_file_create)Úhandle_backup_createÚhandle_backup_deleteÚhandle_backup_listÚhandle_backup_restore)Úhandle_agent_update)Úhandle_server_reboot)Ú	ApiClientÚApiError)ÚConfig)Úload_agent_token)Ú
get_loggerÚrunnerzcron_job.createzcron_job.deletezsftp_user.createzsftp_user.deletezsftp_user.reset_passwordzdatabase.createzdatabase.dropzdatabase_user.createzdatabase_user.deletezdatabase_user.reset_passwordzdatabase_user.update_grantsznginx.config.readznginx.config.writeznginx.service.reloadzservice.startzservice.stopzservice.statuszservice.restartzssl.generatez	ssl.renewz
ssl.deleteúpipeline.runúsite.createúsite.deletezlog.readz	file.listz	file.readz
file.writezfile.deletezfile.renamezfile.createzbackup.createzbackup.deletezbackup.list)zbackup.restoreúagent.updateúserver.rebootN)Údatetime)ÚPathzCommandWorkerManager | NoneÚ_worker_managerc                ó¦   • U S-  nUR                  5       (       d  0 $  [        R                  " UR                  SS95      $ ! [         a    0 s $ f = f)Núcommand_states.jsonúutf-8©Úencoding)Úis_fileÚjsonÚloadsÚ	read_textÚ	Exception)Úvar_dirÚpaths     Ú8D:\Programs\laragon\www\wolf\agent\src\command_runner.pyÚload_command_statesrE   n   sP   € ØÐ*Ñ*€DØ�<‰<�>‰>Øˆ	ðÜ�zŠz˜$Ÿ.™.°'˜.Ð:Ó;Ð;øÜó ØŠ	ðús   ž"A ÁAÁAc                ó$  • U S-  n UR                   R                  SSS9  UR                  UR                  S-   5      n[	        USSS9 n[
        R                  " XSS	9  UR                  5         [        R                  " UR                  5       5        S S S 5        UR                  U5        [        R                  S
:w  ag   [        R                  " [        UR                   5      [        R                  5      n [        R                  " U5        [        R                  " U5        g g ! , (       d  f       N›= f! [        R                  " U5        f = f! [         a     g f = f! [         a   n[         R#                  SU5         S nAg S nAff = f)Nr9   T)ÚparentsÚexist_okz.tmpÚwr:   r;   é   )ÚindentÚntz$failed to persist command states: %s)ÚparentÚmkdirÚ	with_nameÚnameÚopenr>   ÚdumpÚflushÚosÚfsyncÚfilenoÚreplaceÚstrÚO_RDONLYÚcloserA   ÚlogÚwarning)rB   ÚstatesrC   ÚtmpÚfÚdir_fdÚexcs          rD   Úsave_command_statesrb   x   s&  € ØÐ*Ñ*€DðAØ�‰×Ñ $°ÐÑ6Ø�n‰n˜TŸY™Y¨Ñ/Ó0ˆÜ�#�s WÒ-°Ü�IŠI�f¨Ò*Ø�G‰GŒIÜ�HŠH�Q—X‘X“ZÔ ÷ .ð 	�‰�DÔÜ�7‰7�d‹?ðÜŸš¤ T§[¡[Ó!1´2·;±;Ó?�ð%Ü—H’H˜VÔ$ä—H’H˜VÕ$ð ÷ .Õ-ûô —H’H˜VÕ$ûÜó Ùðûäó AÜ�‰Ð:¸C×@Ñ@ûðAúsg   ‡AE% Á
A
D)Â-E% Ã8E Ã;D: ÄE Ä)
D7Ä3E% Ä:EÅE Å
E"ÅE% Å!E"Å"E% Å%
FÅ/F
Æ
Fc                óD  ^• [            [        U 5      mUT;  a  0 TU'   TU   R                  U5        [        T5      S:”  a:  [	        TR                  5       U4S jS9nUS S  H  nTR                  US 5        M     [        U T5        S S S 5        g ! , (       d  f       g = f)Néd   c                ó.   >• TU    R                  SS5      $ )NÚ
updated_atÚ )Úget)Úkr]   s    €rD   Ú<lambda>Ú&update_command_state.<locals>.<lambda>—   s   ø€ ¸fÀQ¹i¿m¹mÈLÐZ\Ô>]ó    )Úkeyiœÿÿÿ)Ú_state_lockrE   ÚupdateÚlenÚsortedÚkeysÚpoprb   )rB   Ú
command_idÚchangesÚsorted_keysri   r]   s        @rD   Úupdate_command_staterw   �   s‡   ø€ Þ	Ü$ WÓ-ˆØ˜VÓ#Ø!#ˆF�:ÑØˆzÑ×!Ñ! 'Ô*äˆv‹;˜ÓÜ  §¡£Ô4]Ñ^ˆKØ   $Ó'�Ø—
‘
˜1˜dÖ#ñ (ä˜G VÔ,÷ 
�Žús   ˆB BÂ
Bc                 ó  • SS K n  [        R                  R                  S5      (       a|  [	        SSSS9 nU Ha  nUR                  S5      (       d  M  UR                  5       R                  5       n[        U5      S:¼  d  MJ  [        US   5      s  sS S S 5        $    S S S 5        O  [        R                  R                  S	5      (       as  [	        S	SSS9 nUR                  5       R                  5       nU(       a8  [        UR                  5       S   5      nU R                  5       U-
  sS S S 5        $  S S S 5        g  g ! , (       d  f       N¨= f! [         a     N·f = f! , (       d  f       g = f! [         a     g f = f)
Nr   z
/proc/statÚrr:   r;   zbtime rJ   é   z/proc/uptime)ÚtimerT   rC   ÚexistsrQ   Ú
startswithÚstripÚsplitrp   ÚfloatrA   Úreadline)r{   r_   ÚlineÚpartsÚuptime_secondss        rD   Úget_system_boot_timer…   �   sB  € Ûð	Ü�7‰7�>‰>˜,×'Ñ'Ü�l C°'Ò:¸aÛ�DØ—‘ x×0Ó0Ø $§
¡
£× 2Ñ 2Ó 4˜Ü˜u›:¨�?Ü#(¨¨q©£?Ñ2÷ ;Ñ:Ù÷ ;Ð:ð (ðÜ�7‰7�>‰>˜.×)Ñ)Ü�n c°GÒ<ÀØ—z‘z“|×)Ñ)Ó+�ÞÜ%*¨4¯:©:«<¸©?Ó%;�NØŸ9™9›;¨Ñ7÷	 =Ñ<à÷ =ð ð *ð ÷) ;Õ:ûô ó Ùðú÷ =Ô<ð ûô ó Øàðús}   †/E µEÁ+EÂEÂ	E ÂEÂE Â(/E3 ÃAE"Ä+	E3 Ä6E3 Å
EÅE ÅE Å
EÅEÅ"
E0Å,E3 Å0E3 Å3
F Å?F c                ó:  • [        U 5      nU(       d  g  U R                  n[        U5      n/ nUR	                  5        H-  u  pgUR                  S5      S;   d  M  UR                  U5        M/     U(       d  g [        R                  S[        U5      5        U GHâ  nUR                  U5      =(       d    0 nUR                  S5      nUS:X  Ga1  UR                  S5      n	[        5       n
SnU	b  U
b
  X©S-   :”  a  S	nU(       a~  [        R                  S
U5        [        UUS[        R                  " 5       R                  5       S9   UR                  [!        U5      SS	SS.S.U5        [        R                  SU5        Mè  [        R%                  SXiU
5        [        UUS[        R                  " 5       R                  5       S9   UR                  [!        U5      SSS0S.U5        [        R                  SU5        GMg  [        R                  SU5        [        UUS[        R                  " 5       R                  5       S9   UR                  [!        U5      SSS0S.U5        [        R                  SU5        GMå     g ! [         a     g f = f! ["         a"  n[        R%                  SXl5         S nAGM  S nAff = f! ["         a"  n[        R%                  SXl5         S nAGMN  S nAff = f! ["         a"  n[        R%                  SXl5         S nAGM}  S nAff = f)NÚstatus©ÚpendingÚrunningz*found %d interrupted command(s) to recoverÚcommand_typer4   Úpre_reboot_boot_timeFgš™™™™™¹?TzPrecovering reboot command id=%s, system boot time verified. marking as succeededÚsuccess©r‡   rf   Ú	succeededzServer rebooted successfully)r�   Úmessage©r‡   Úresultz0posted recovery success result for command id=%sz4failed to post recovery result for command id=%s: %szbrecovering reboot command id=%s failed validation: pre_boot=%s, current_boot=%s. marking as failedÚfailedÚerrorz8Server did not reboot or boot time could not be verifiedz0posted recovery failure result for command id=%sz+recovering command id=%s, marking as failedz(Agent restarted during command execution)r-   rB   ÚAttributeErrorrE   Úitemsrh   Úappendr[   Úinforp   r…   rw   r5   ÚutcnowÚ	isoformatÚpost_command_resultÚintrA   r\   )ÚconfigÚ
api_clientÚtokenrB   r]   Úinterrupted_idsÚcmd_idr˜   Úcmd_typeÚpre_bootÚcurrent_bootÚis_real_rebootra   s                rD   Úrecover_interrupted_commandsr¦   ¹   së  € Ü˜VÓ$€EÞØðØ—.‘.ˆô ! Ó)€FØ€OØŸ™ž‰ˆØ�8‰8�HÓÐ!7Õ7Ø×"Ñ" 6Ö*ñ 'ö Øä‡H�HÐ9¼3¸Ó;OÔPÜ!ˆØ�z‰z˜&Ó!×' RˆØ—8‘8˜NÓ+ˆà�Ô&Ø—x‘xÐ 6Ó7ˆHÜ/Ó1ˆLà"ˆNØÑ#¨Ñ(@Ø¨S¡.Ó0Ø%)�NæÜ—‘ÐkÐmsÔtÜ$ØØØ$Ü'ŸšÓ0×:Ñ:Ó<ò	ðeØ×2Ñ2Ü˜F›à&1Ø26ÐCaÑ&bñð ôô —H‘HÐOÐQWÖXô —‘ð  Að  CIð  Uaô  bÜ$ØØØ#Ü'ŸšÓ0×:Ñ:Ó<ò	ðeØ×2Ñ2Ü˜F›à&.Ø'.Ð0jÐ&kñð ôô —H‘HÐOÐQW×Xô �H‰HÐBÀFÔKÜ ØØØÜ#Ÿ?š?Ó,×6Ñ6Ó8ò	ðaØ×.Ñ.Ü˜“Kà"*Ø#*Ð,VÐ"Wñð ôô —‘ÐKÈV×TòM "øô ó ÙðûôV !ó eÜ—K‘KÐ VÐX^×dÓdûðeûô( !ó eÜ—K‘KÐ VÐX^×dÓdûðeûô( ó aÜ—‘ÐRÐTZ×`Ó`ûðaúsY   •J  Å8JÇ7J?É7K.Ê 
JÊJÊ
J<ÊJ7Ê7J<Ê?
K+Ë	K&Ë&K+Ë.
LË8LÌLc                  óP   • \ rS rSrS
S jrSS jrSS jrSS jrSS jrSS jr	Sr
g	)ÚCommandWorkerManageri  c                óþ  • Xl         X l        SS KnSUR                  ;   =(       d    SUR                  ;   nU(       a  SOSn[        R
                  R                  S5      S:X  a  Sn[        [        R
                  R                  SU5      5      U l        [        R                  " S	S
9U l	        / U l        [        R                  " 5       U l        [        R                  " 5       U l        SU l        [%        5       U l        g )Nr   ÚpytestÚunittestÚ0Ú3ÚWOLFPANEL_TEST_ASYNCÚ1Ú!WOLFPANEL_MAX_CONCURRENT_COMMANDSiè  )ÚmaxsizeF)r�   rž   ÚsysÚmodulesrT   Úenvironrh   rœ   Úmax_workersÚqueueÚQueueÚworkersÚ	threadingÚLockÚlockÚEventÚshutdown_eventÚupdatingÚsetÚactive_commands)Úselfr�   rž   r²   Úis_testÚdefault_workerss         rD   Ú__init__ÚCommandWorkerManager.__init__  s²   € ØŒØ$ŒãØ˜cŸk™kÑ)×F¨Z¸3¿;¹;Ñ-FˆÞ!(™#¨cˆÜ�:‰:�>‰>Ð0Ó1°SÓ8Ø!ˆOÜœrŸz™zŸ~™~Ð.QÐSbÓcÓdˆÔÜ—[’[¨Ñ.ˆŒ
ØˆŒÜ—N’NÓ$ˆŒ	Ü'ŸošoÓ/ˆÔØˆŒÜ"›uˆÕrl   c                ód  • U R                   S:X  a  g U R                     U R                   Vs/ sH  oR                  5       (       d  M  UPM     snU l        U R                   [	        U R                  5      -
  nUS::  a
   S S S 5        g [
        R                  SU5        [        U5       Hf  n[	        U R                  5      n[        R                  " U R                  SU 3SS9nUR                  5         U R                  R                  U5        Mh     S S S 5        g s  snf ! , (       d  f       g = f)Nr   z"starting %d command worker threadszWolfCommandWorker-T©ÚtargetrP   Údaemon)rµ   r»   r¸   Úis_aliverp   r[   r˜   Úranger¹   ÚThreadÚ_worker_loopÚstartr—   )rÁ   ÚtÚneededÚiÚidxs        rD   Ústart_workersÚ"CommandWorkerManager.start_workers(  sæ   € Ø×Ñ˜qÓ ØØ�Y‹YØ'+§|¢|ÓD¡| !·z±z·|ŸA¡|ÑDˆDŒLØ×%Ñ%¬¨D¯L©LÓ(9Ñ9ˆFØ˜‹{Ø÷	 ˆYô
 �H‰HÐ9¸6ÔBÜ˜6–]�Ü˜$Ÿ,™,Ó'�Ü×$Ò$Ø×,Ñ,Ø-¨c¨UÐ3Øñ�ð
 —‘”	Ø—‘×#Ñ# AÖ&ñ #÷ ˆYùÚD÷ �Yús)   žD!­DÁDÁ1D!ÂBD!ÄD!Ä!
D/c                óœ  • U R                   S:X  a   [        S5      nU R                  X5        g [	        UR                  S5      5      nU R                  R                  5       (       a  [        R                  SU5        g  [        U R                  R                  USUR                  S5      [        R                  " 5       R                  5       S	9   U R                  R#                  US
S9  g ! [         a     " S S5      nU" 5       n Níf = f! [          a     NIf = f! [        R$                   a    [        R                  SU5         g f = f)Nr   Úworkerc                  ó&   • \ rS rSrS rS rS rSrg)Ú1CommandWorkerManager.enqueue.<locals>.DummyLoggeriA  c                ó   • g ©N© ©rÁ   ÚmsgÚargss      rD   r˜   Ú6CommandWorkerManager.enqueue.<locals>.DummyLogger.infoB  s   € °rl   c                ó   • g rÚ   rÛ   rÜ   s      rD   r”   Ú7CommandWorkerManager.enqueue.<locals>.DummyLogger.errorC  s   € °rl   c                ó   • g rÚ   rÛ   rÜ   s      rD   r\   Ú9CommandWorkerManager.enqueue.<locals>.DummyLogger.warningD  s   € °4rl   rÛ   N©Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r˜   r”   r\   Ú__static_attributes__rÛ   rl   rD   ÚDummyLoggerrØ   A  s   † Ú4Ú5Ý7rl   rê   Úidz-command queue is full, skipping command id=%sr‰   r‹   )r‡   r‹   rf   F)Úblock)rµ   r.   rA   Ú_execute_commandrX   rh   r¶   Úfullr[   r\   rw   r�   rB   r5   r™   rš   r•   ÚputÚFull)rÁ   ÚcommandÚ
worker_logrê   r¡   s        rD   ÚenqueueÚCommandWorkerManager.enqueue;  s  € Ø×Ñ˜qÓ ð+Ü'¨Ó1�
ð ×!Ñ! 'Ô6Øä�W—[‘[ Ó&Ó'ˆØ�:‰:�?‰?×ÑÜ�K‰KÐGÈÔPØð		Ü Ø—‘×#Ñ#ØØ Ø$Ÿ[™[¨Ó8Ü#Ÿ?š?Ó,×6Ñ6Ó8òð	QØ�J‰J�N‰N˜7¨%ˆNÒ0øô3 ó +÷8ñ 8ñ )›]’
ð+ûô, ó 	Ùð	ûô �z‰zó 	QÜ�K‰KÐGÈÖPð	Qús6   ’C- Â AD ÃD Ã-DÄ
DÄ
DÄDÄ*EÅ
Ec                óü   •  [         R                  S5        U R                  R	                  5         U R
                   H  nUR                  SS9  M     U R
                  R                  5         g ! [         a     Ncf = f)Nzshutting down command workersç      ð?©Útimeout)r[   r˜   rA   r½   r¿   r¸   ÚjoinÚclear)rÁ   rÏ   s     rD   ÚshutdownÚCommandWorkerManager.shutdown]  sh   € ð	Ü�H‰HÐ4Ô5ð 	×Ñ×ÑÔ!Ø—”ˆAØ�F‰F˜3ˆFÓñ à�‰×ÑÕøô ó 	Ùð	ús   ‚A. Á.
A;Á:A;c                ó¬  •  [        S5      nSS KnU R                  R	                  5       (       dŒ  U R
                  (       a  UR                  S5        MC   U R                  R                  SS9n U R                  XA5        U R                  R                  5         U R                  R	                  5       (       d  M‹  g g ! [         a     " S S5      nU" 5       n NÍf = f! [        R                   a     Mä  f = f! [         a1  n UR                  SU5         S nAN›! [         a      S nAN«f = fS nAff = f! U R                  R                  5         f = f)	NrÖ   c                  ó&   • \ rS rSrS rS rS rSrg)Ú6CommandWorkerManager._worker_loop.<locals>.DummyLoggeril  c                ó   • g rÚ   rÛ   rÜ   s      rD   r˜   Ú;CommandWorkerManager._worker_loop.<locals>.DummyLogger.infom  s   € ¨Drl   c                ó   • g rÚ   rÛ   rÜ   s      rD   r”   Ú<CommandWorkerManager._worker_loop.<locals>.DummyLogger.errorn  s   € ¨Trl   c                ó   • g rÚ   rÛ   rÜ   s      rD   r\   Ú>CommandWorkerManager._worker_loop.<locals>.DummyLogger.warningo  s   € ¨trl   rÛ   Nrä   rÛ   rl   rD   rê   rÿ   l  s   † Ú0Ú1Ý3rl   rê   r   g      à?rö   r÷   zUnhandled worker error: %s)r.   rA   r{   r½   Úis_setr¾   Úsleepr¶   rh   ÚEmptyrí   r”   Ú	task_done)rÁ   rò   rê   r{   rñ   Úes         rD   rÍ   Ú!CommandWorkerManager._worker_loopg  s  € ð	'Ü# HÓ-ˆJó 	Ø×%Ñ%×,Ñ,×.Ñ.Ø�}�}Ø—
‘
˜3”ÙðØŸ*™*Ÿ.™.°˜.Ð5�ð'Ø×%Ñ% gÔ:ð —
‘
×$Ñ$Ô&ð# ×%Ñ%×,Ñ,×.Õ.øô ó 	'÷4ñ 4ñ %›ŠJð	'ûô —;‘;ó Úðûô
 ó ðØ×$Ñ$Ð%AÀ1×EÑEøÜ ó Ýðþðûð —
‘
×$Ñ$Õ&úsk   ‚B= ÁC Á/C9 Â=CÃCÃC6Ã5C6Ã9
D4ÄDÄD7 Ä
D,Ä%D/Ä&D7 Ä+D,Ä,D/Ä/D4Ä4D7 Ä7Ec                óÞ
  ^ ^^^^• [        UR                  S5      5      nT R                     T R                  R	                  U5        S S S 5         UR                  S5      mUR                  S5      =(       d    0 m[        T R                  5      n UR                  SUT5         S[        R                  " 5       R                  5       S.nTS:X  a3  [        R                  " 5       R                  5       US'   [        5       US	'   [        T R                  R                  U40 UD6   T R                   R#                  [%        U5      S
S0U5        TS:X  a  [)        T5      mUTS'   [*        R                  T5      mT(       d   UR-                  ST5        SnSST 30nGOˆ0 mUUUUU 4S jn	[.        R0                  " U	SU 3SS9n
U
R3                  5         [%        TR                  SS5      5      nU
R5                  US9  U
R7                  5       (       aÊ   UR-                  SX;5         SS KnU
R:                  (       a„  UR<                  R?                  URA                  U
R:                  5      URC                  [D        5      5      nUS:”  a5  UR<                  R?                  URA                  U
R:                  5      S 5        OU
R:                  (       a   SnSSU S30nOJST;   a  SnSS [        TS   5       30nO.TR                  S!0 5      nUR                  S"S5      SL a  S#nOSnUn T R                   R#                  [%        U5      XxS$.U5         UR                  S%X75        US#:X  a  S"OSn [        T R                  R                  UU[        R                  " 5       R                  5       S9  T R                     T R                  RG                  U5        S S S 5        g ! , (       d  f       GNŸ= f! [         a     GNZf = f! [         a     GNêf = f! [         a3  n UR'                  SX65         S nAGNè! [         a      S nAGNùf = fS nAff = f! [         a     GNÍf = f! [         a     GNLf = f! [         a3  n UR'                  SU5         S nAGNÇ! [         a      S nAGNØf = fS nAff = f! [         a     GN`f = f! [         a3  n UR-                  S&X65         S nAGN‡! [         a      S nAGN˜f = fS nAff = f! [         a     GNef = f! , (       d  f       g = f! T R                     T R                  RG                  U5        S S S 5        f ! , (       d  f       f = f= f)'Nrë   r‹   Úpayloadz processing command id=%s type=%srŠ   rŽ   r4   Ú
started_atrŒ   r‡   z3failed to post running status for command id=%s: %sr3   Újob_idzunsupported command type: %sr“   r”   zUnsupported command type: c                 ó¤   >•  TS;   a  T" TTR                   TR                  5      n OT" T5      n U TS'   g ! [         a  nUTS'    S nAg S nAff = f)N)r0   r1   r2   r3   r’   Ú	exception)r�   rž   rA   )Úresra   r¢   Úhandlerr  Úresult_containerrÁ   s     €€€€€rD   Úrun_handlerÚ:CommandWorkerManager._execute_command.<locals>.run_handlerÂ  sW   ø€ ð<Ø#Ð'eÓeÙ")¨'°4·;±;ÀÇÁÓ"P™Cá")¨'Ó"2˜CØ58Ð(¨Ò2øÜ$ó <Ø8;Ð(¨Ö5ûð<ús   ƒ26 ¶
AÁ A
Á
AzCommandHandler-TrÇ   rø   iX  r÷   z(command id=%s timed out after %s secondsr   rz   z1failed to raise exception in timed out thread: %sz"Command execution timed out after z secondsr  zHandler exception: r’   r�   r�   r‘   z)posted command result for id=%s status=%sz+failed to post command result for id=%s: %s)$rX   rh   r»   rÀ   Úaddr-   r�   r˜   rA   r5   r™   rš   r…   rw   rB   r•   rž   r›   rœ   r\   ÚdictÚHANDLERSr”   r¹   rÌ   rÎ   rù   rÊ   ÚctypesÚidentÚ	pythonapiÚPyThreadState_SetAsyncExcÚc_longÚ	py_objectÚ
SystemExitÚdiscard)rÁ   rñ   rò   r¡   rŸ   Ústate_changesra   Ú
status_strÚpayload_resultr  Úhandler_threadrø   r  r  ÚexÚlocal_statusr¢   r  r  r  s   `               @@@@rD   rí   Ú%CommandWorkerManager._execute_command†  s
  ü€ Ü�W—[‘[ Ó&Ó'ˆØ�Y‹YØ× Ñ ×$Ñ$ VÔ,÷ ðN	5Ø—{‘{ >Ó2ˆHØ—k‘k )Ó,×2°ˆGÜ$ T§[¡[Ó1ˆEðØ—‘Ð BÀFÈHÔUðà'Ü"*§/¢/Ó"3×"=Ñ"=Ó"?ñ!�ð ˜Ó.Ü2:·/²/Ó2C×2MÑ2MÓ2O�M ,Ñ/Ü<PÓ<R�MÐ"8Ñ9ä$Ø—K‘K×'Ñ'Øñð $òð
Ø—‘×3Ñ3Ü˜“KØ˜yÐ)Øôð ˜>Ó)Ü˜w›-�Ø$*�˜Ñ!ô —l‘l 8Ó,ˆGÞðØ×$Ñ$Ð%CÀXÔNð &�
Ø")Ð-GÈÀzÐ+RÐ!S’à#%Ð ÷<ñ <ô "+×!1Ò!1Ø&Ø*¨6¨(Ð3Øñ"�ð
 ×$Ñ$Ô&ä˜gŸk™k¨)°SÓ9Ó:�Ø×#Ñ#¨GÐ#Ñ4à!×*Ñ*×,Ñ,ðØ"×(Ñ(Ð)SÐU[Ôeð!Û%Ø)×/×/Ø"(×"2Ñ"2×"LÑ"LØ &§¡¨n×.BÑ.BÓ CØ &× 0Ñ 0´Ó <ó#˜Cð  # Q›wØ &× 0Ñ 0× JÑ JÈ6Ï=É=ÐYg×YmÑYmÓKnÐptÔ uøØ+×1×1Ø ð "*�JØ&-Ð1SÐT[ÐS\Ð\dÐ/eÐ%f‘Nà"Ð&6Ó6Ø%-˜
Ø*1Ð5HÌÐM]Ð^iÑMjÓIkÐHlÐ3mÐ)n™à.×2Ñ2°8¸RÓ@˜ØŸ7™7 9¨dÓ3°tÒ;Ø)4™Jà)1˜JØ),˜ðØ—‘×3Ñ3Ü˜“KØ)ÑDØôð
Ø—O‘OÐ$OÐQWÔdð )3°kÓ(A™9ÀxˆLðÜ$Ø—K‘K×'Ñ'ØØ'Ü'ŸšÓ0×:Ñ:Ó<ò	ð —“Ø×$Ñ$×,Ñ,¨VÔ4÷ �÷_ ŽYûô ó Úðûô" "ó Úðûô ó ðØ×&Ñ&Ð'\Ð^d×jÒjøÜ ó Þðþðûô !ó Úðûô< %ó Úðûô %ó !ð!Ø&×.Ñ.Ð/bÐdf×gÒgøÜ(ó !Þ ð!þð!ûô: !ó Úðûäó ðØ×$Ñ$Ð%RÐTZ×`Ò`øÜ ó Þðþðûô "ó Úðú÷ •û�—“Ø×$Ñ$×,Ñ,¨VÔ4÷ —–ýså  ¬O ÁA T) ÂO2 Â&B P Ä'(P Å2T) ÆQ ÆA?T) ÈQ% È'BQ6 Ê?T) Ë Q6 ËAT) Ì((S ÍR6 Í#
T) Í.AT Î;TÏ 
O/Ï2
P Ï<T) Ï?P Ð T) Ð
PÐT) ÐPÐT) Ð
QÐP7Ð1T) Ð7
Q	ÑQÑT) ÑQ	Ñ	QÑQÑT) Ñ
Q"ÑT) Ñ!Q"Ñ"T) Ñ%
Q3Ñ/T) Ñ2Q3Ñ3T) Ñ6
R3ÒRÒT) Ò
R+Ò#R.Ò$T) Ò*R+Ò+R.Ò.R3Ò3T) Ò6
SÓ S ÓT) ÓSÓS Ó
TÓS*Ó$T) Ó*
S<Ó4S?Ó5T) Ó;S<Ó<S?Ó?TÔT) Ô
TÔT) ÔTÔT) Ô
T&Ô)U,Ô6UÕ	U,Õ
U)Õ%U,)	rÀ   rž   r�   r»   rµ   r¶   r½   r¾   r¸   N©r�   r,   rž   r*   ÚreturnÚNone©r*  r+  )rñ   údict[str, Any]r*  r+  )rå   ræ   rç   rè   rÄ   rÓ   ró   rû   rÍ   rí   ré   rÛ   rl   rD   r¨   r¨     s#   † ô%ô"'ô& QôDô'÷>R5rl   r¨   c                 ó<   • [         b  [         R                  5         g g rÚ   )r7   rû   rÛ   rl   rD   Úshutdown_workersr/    s   € ô Ñ"Ü× Ñ Õ"ð #rl   c                óä  • U R                   S:X  a  [        R                  S5        g[        U 5      nU R                  (       a  U(       d  [        R                  S5        g[        c,   [        X5        [        X5      q[        R                  5         OµU [        l        U[        l        SSKnSUR                  ;   =(       d    SUR                  ;   nU(       a  S	OS
n[         R"                  R%                  S5      S:X  a  S
n['        [         R"                  R%                  SU5      5      [        l        [        R                  5          UR+                  U5      nU(       d  g[        R/                  S[1        U5      5        U HÏ  n UR%                  S5      n	UR%                  S5      n
U	(       a  U
(       d  [        R                  SU5        ML  [3        U	5      n[4           [7        U R8                  5      nX¼;   a:  XË   R%                  S5      nUS;   a!  [        R/                  SX½5         SSS5        M²  SSS5        [        R;                  U5        MÑ     g! [         a!  n[        R                  SU5         SnAGN
SnAff = f! [,         a   n[        R                  SU5         SnAgSnAff = f! , (       d  f       Nƒ= f! [         a"  n[        R                  SU5         SnAGMg  SnAff = f)zQFetch pending commands from Central API and dispatch them to worker manager.
    Úrevokedz)Command runner skipped: Agent is revoked.Nz+Command runner skipped: Unregistered agent.z*failed to recover interrupted commands: %sr   rª   r«   r¬   r­   r®   r¯   r°   z$failed to fetch pending commands: %szfetched %d pending command(s)rë   r‹   zskipped malformed command: %sr‡   rˆ   z%command id=%s is already %s, skippingzfailed to queue command: %s)r‡   r[   r\   r-   Ú	server_idÚdebugr7   r¦   rA   r”   r¨   rÓ   r�   rž   r²   r³   rT   r´   rh   rœ   rµ   Úget_pending_commandsr+   r˜   rp   rX   rn   rE   rB   ró   )r�   rž   rŸ   ra   r²   rÂ   rÃ   Úcommandsrñ   rt   r‹   Ú
cmd_id_strr]   Úcurrent_statuss                 rD   Úprocess_commandsr8  "  s?  € ð ‡}�}˜	Ó!Ü�‰Ð?Ô@Øä˜VÓ$€EØ××¦Ü�	‰	Ð?Ô@Øô Ñð	IÜ(¨Ô<ô /¨vÓBˆÜ×%Ñ%Õ'à!'ŒÔØ%/ŒÔ"ÛØ˜cŸk™kÑ)×F¨Z¸3¿;¹;Ñ-FˆÞ!(™#¨cˆÜ�:‰:�>‰>Ð0Ó1°SÓ8Ø!ˆOÜ&)¬"¯*©*¯.©.Ð9\Ð^mÓ*nÓ&oŒÔ#Ü×%Ñ%Ô'ðØ×2Ñ2°5Ó9ˆö
 Øä‡H�HÐ,¬c°(«mÔ<ãˆð	:Ø Ÿ™ TÓ*ˆJØ"Ÿ;™; ~Ó6ˆLÞ¦\Ü—‘Ð;¸WÔEÙô ˜Z›ˆJÞÜ,¨V¯^©^Ó<�ØÓ'Ø%+Ñ%7×%;Ñ%;¸HÓ%E�NØ%Ð)?Ó?ÜŸ™Ð!HÈ*ÔeØ ÷ —‘ô ×#Ñ# GÖ,ò% øô5 ó 	IÜ�I‰IÐBÀC×HÒHûð	Iûô" ó Ü�‰Ð:¸CÔ@Üûðú÷& •ûô ó 	:Ü�I‰IÐ3°S×9Ó9ûð	:úsn   Á(I Å	J ÆAKÇKÇ AJ2È+KÈ5KÉ
JÉ!I=É=JÊ
J/ÊJ*Ê*J/Ê2
K 	Ê<KË
K/ËK*Ë*K/)rB   r6   r*  r-  )rB   r6   r]   r-  r*  r+  )rB   r6   rt   rX   ru   r   r*  r+  )r*  zfloat | Noner)  r,  )VÚ
__future__r   Útypingr   Úactions.cronr   r   Úactions.sftpr   r   r	   Úactions.databaser
   r   r   r   r   r   Úactions.nginxr   r   r   Úactions.servicer   r   r   r   Úactions.sslr   r   r   Úactions.pipeliner   Úactions.siter   r   Úactions.logsr   Úactions.file_managerr   r   r    r!   r"   r#   Úactions.backupr$   r%   r&   r'   Úactions.agentr(   Úactions.powerr)   rž   r*   r+   r�   r,   Úidentityr-   Úloggerr.   r[   r  r¶   r¹   rT   r>   Úatexitr5   Úpathlibr6   rº   rn   r7   Ú__annotations__rE   rb   rw   r…   r¦   r¨   Úregisterr/  r8  rÛ   rl   rD   Ú<module>rN     sÃ  ðÞ "å ç ?ß [Ñ [÷÷ ÷ñ ÷
ó ÷ñ õ
 1ß ?Ý (÷÷ ÷ó õ .Ý .ß *Ý Ý %Ý á�Ó€ð&ØÐ)ð&àÐ)ð&ð Ð*ð&ð Ð*ð	&ð
 Ð :ð&ð Ð-ð&ð Ð)ð&ð Ð7ð&ð Ð7ð&ð #Ð$Gð&ð "Ð#Eð&ð Ð1ð&ð Ð3ð&ð Ð7ð&ð Ð)ð&ð  Ð'ð!&ð" Ð+ñ#&ð$ Ð-ð%&ð& Ð'ð'&ð( Ð!ð)&ð* Ð#ð+&ð, Ð'ð-&ð. Ð%ð/&ð0 Ð%ð1&ð2 �ð3&ð4 Ð!ð5&ð6 Ð!ð7&ð8 Ð#ð9&ð: Ð%ð;&ð< Ð%ð=&ð> Ð%ð?&ð@ Ð)ðA&ðB Ð)ðC&ðD Ð%ñE&ðF ,Ø'Ø)òK&€óR Û Û 	Û Û Ý Ý à�nŠnÓ€Ø/3€Ð,Ó 3ôôAô.-ôô8Za÷zB5ñ B5ðJ ‡�ó#ó ð#õ>:rl   