
    0Fie<                        d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZ d dlmZ  ej        e          Z G d	 d
          Zd Z	 ddZ	 	 	 ddZ G d d          ZdS )    )annotationsN)Queue)Thread)sleep)merge)gen)timec                  .    e Zd ZdZdZdZdZdZdZdZ	dZ
d	S )
bcolorsz[95mz[94mz[92mz[93mz[91mz[0mz[1mz[4mN)__name__
__module____qualname__HEADEROKBLUEOKGREENWARNINGFAILENDCBOLD	UNDERLINE     :lib/python3.11/site-packages/distributed/deploy/old_ssh.pyr   r      s6        FFGGDDDIIIr   r   c           
     "    dd l }ddlm ddlm}m} |                                }|                    |                                           d}	 	 t          j
        d                              t          j                   |                     d          d          d          d	         dd
d
           nA# ||f$ r4}t          dt          j        z   d                     d          d          d                   z   t          j        z              t          t          j        dz   t'          |          z   t          j        z              t)          j                     |dz  }|dk    r@t          dt          j        z   dz   t          j        z              t-          j        d           t          dt          j        z   d| dz   t          j        z              t1          d           Y d }~nd }~ww xY wt          d                     d          d                              |                    d d         z   dz   d          \  }j                            d            fd fd fd }|                                }	 d!                                         rHt1          d"           |	                                  |            rn d!                                         Ht?                      }
t?                      |
d#z   k     rD                     d$            |            rn$t1          d"           t?                      |
d#z   k     D!                                 |!                                 d S )%Nr   )PipeTimeout)PasswordRequiredExceptionSSHExceptionTparamikoaddressssh_usernamessh_portssh_private_key   )hostnameusernameportkey_filenamecompresstimeoutbanner_timeoutz[ dask ssh ] : zDSSH connection error when connecting to {addr}:{port} to run '{cmd}'cmd)addrr&   r+   z,               SSH reported this exception:       z/SSH connection failed after 3 retries. Exiting.z               zRetrying... (attempt z/3)z[ {label} ] : {cmd}label)r/   r+   z$SHELL -i -c '')get_pty皙?c                    	                                  } t          |           dk    r|                                 } t                              d|            d                             d                    d         |                                                       } t          |           dk    dS dS # t          j        f$ r Y dS w xY w)z<
        Read stdout stream, time out if necessary.
        r   zstdout from ssh channel: %soutput_queuez[ {label} ] : {output}r/   )r/   outputN)	readlinelenrstriploggerdebugputformatsocketr)   )liner   cmd_dictstdouts    r   read_from_stdoutz#async_ssh.<locals>.read_from_stdout|   s    	??$$Dd))a--{{}}:DAAA(,,,33&w/ 4    
 (( d))a------ V^, 	 	 	DD	s   B3B: :CCc                    	                                  } t          |           dk    r|                                 } t                              d|            d                             d                    d                   t          j        z   | z   t          j	        z                                               } t          |           dk    dS dS # t          j        f$ r Y dS w xY w)z<
        Read stderr stream, time out if necessary.
        r   zstderr from ssh channel: %sr4   [ {label} ] : r/   r/   N)r6   r7   r8   r9   r:   r;   r<   r   r   r   r=   r)   )r>   r   r?   stderrs    r   read_from_stderrz#async_ssh.<locals>.read_from_stderr   s    	??$$Dd))a--{{}}:DAAA(,,$++(72C+DDl# l#   (( d))a------ V^, 	 	 	DD	s   CC C+*C+c                 H                                                                rx                                } d                             d                    d                   t          j        z   dz   t          |           z   t          j        z              dS dS )zp
        Communicate a little bit, without blocking too long.
        Return True if the command ended.
        r4   rC   r/   rD   z'remote process exited with exit status TN)exit_status_readyrecv_exit_statusr;   r<   r   r   strr   )exit_statuschannelr?   rF   rA   s    r   communicatezasync_ssh.<locals>.communicate   s    
 	 $$&& 		!2244K^$(( ''hw.?'@@,;< k""# ,	   4		 		r   input_queueg      ?g      @   )"r   paramiko.buffered_piper   paramiko.ssh_exceptionr   r   	SSHClientset_missing_host_key_policyAutoAddPolicylogging	getLoggersetLevelWARNconnectprintr   r   r<   r   rJ   	traceback	print_excos_exitr   exec_commandrL   
settimeoutget_transportemptysend_ignorer	   sendclose)r?   r   r   r   sshretriesestdinrM   	transportstartr   rL   rF   rA   rE   r@   s   `          @@@@@@r   	async_sshrl   "   sR   OOO222222NNNNNNNN




C##H$:$:$<$<===G?>	j))227<@@@KK!),!.1j)%&78!     78 .	 .	 .	!,!!'!),!*-  "( " " ,
 
 
 @Aa&& ,   !!!
 qLG!||%l#GH l#    !,6'6667 ,   !HHHHHHHH].	#?P 


&
&Xg->HUO
&
T
TUUU,,8E?*S0$ -  E66
 nGs      $      &       , !!##I =
!
'
'
)
) c


;== 	 =
!
'
'
)
)  FFE
&&53;

W;== 	c


	 &&53;

 MMOOOIIKKKKKs   A%C   G<D*G77G<c           
        d                     |pt          j        |          }| #d|  d| }|d                     |||           z  }t          j         d| d| t          j         }t                      }	t                      }
|||||	|
|||d		}t          t          |g
          }d|_	        |
                                 t          |d|i          S )Nz8{python} -m distributed.cli.dask_scheduler --port {port})pythonr&   	mkdir -p  && z,&> {logdir}/dask_scheduler_{addr}:{port}.log)r,   r&   logdirz
scheduler :)	r+   r/   r   r&   rN   r4   r    r!   r"   targetargsTthread)r<   sys
executabler   r   r   r   r   rl   daemonrk   r   )rq   r,   r&   r    r!   r"   remote_pythonr+   r/   rN   r4   r?   rv   s                r   start_schedulerr{      s    E
K
K.T L  C
 +&++c++=DDD E 
 
 	
 |BBtBBdBGLBBE ''K77L"$$*
 
H 9H:666FFM
LLNNNHf-...r   distributed.cli.dask_workerc                   d|dk    rdndz   }|	s|dz  }|
r|dz  }|r|dz  }|r|dz  }|                     |pt          j        |||||||
||	
  
        }||d
                     |          z  }| "d|  d| }|d                     ||           z  }d| }t                      }t                      }||||||||d}t	          t
          |g          }d|_        |                                 t          |d|i          S )NzX{python} -m {remote_dask_worker} {scheduler_addr}:{scheduler_port} --nthreads {nthreads}r-   z --nworkers {n_workers} z --host {worker_addr}z --memory-limit {memory_limit}z --worker-port {worker_port}z --nanny-port {nanny_port})
rn   remote_dask_workerscheduler_addrscheduler_portworker_addrnthreads	n_workersmemory_limitworker_port
nanny_portz$ --local-directory {local_directory})local_directoryro   rp   z%&> {logdir}/dask_scheduler_{addr}.log)r,   rq   zworker )r+   r/   r   rN   r4   r    r!   r"   rs   Trv   )	r<   rw   rx   r   r   rl   ry   rk   r   )rq   r   r   r   r   r   r    r!   r"   nohostr   r   r   rz   r   r   r+   r/   rN   r4   r?   rv   s                         r   start_workerr      s   &	 @IQ#<#<TV	X   '&& 0// .-- ,++
**.-%%!   C "5<<+ = 
 
 	

 +&++c++6==V > 
 
 	
 $k##E ''K77L"$$*	 	H 9H:666FFM
LLNNNHf-...r   c                      e Zd Z	 	 	 	 	 	 	 	 	 	 	 	 	 ddZej        d             Zed             Zej	        d	             Zed
             Z
d Zd Zd Zd Zd ZdS )
SSHClusterr   N   Fr|   c           	        || _         || _        || _        |                    dd           }|r7t	          dd                    |                                                     ||t          d          |t          j	        dt                     |}n|d}|| _        || _        || _        || _        |	| _        || _        || _        || _        || _        || _        || _        dd l}|
t.          j                            |
d|j                                                            d	          z             }
t7          t8          j        d
                    |
          z   t8          j        z              |
| _         g | _!        tE          |
||||||          | _#        g | _$        |D ]}| %                    |           d S )Nnprocsz.__init__() got an unexpected keyword argument z, z=Both nprocs and n_workers were specified. Use n_workers only.zZThe nprocs argument will be removed in a future release. It has been renamed to n_workers.r-   r   z	dask-ssh_z%Y-%m-%d_%H:%M:%SzaOutput will be redirected to logfiles stored locally on individual worker nodes under "{logdir}".)rq   )&r   r   r   pop	TypeErrorjoinkeys
ValueErrorwarningswarnFutureWarningr   r    r!   r"   r   rz   r   r   r   r   r   datetimer]   pathnowstrftimerZ   r   r   r<   r   rq   threadsr{   	schedulerworkers
add_worker)selfr   r   worker_addrsr   r   r    r!   r"   r   rq   rz   r   r   r   r   r   kwargsr   r   r,   s                        r   __init__zSSHCluster.__init__Q  s    ( -, Hd++ 	[6;;==AYAY[[   )"7O   M(  
 III"( .*(&$"4. 	W\\h/3355>>?RSSS F  #NNTf! OU O O ,	     )
 
   	" 	"DOOD!!!!	" 	"r   c                    d S Nr   r   s    r   _startzSSHCluster._start  s    r   c                D    t          j        dt                     | j        S Nz[The nprocs attribute will be removed in a future release. It has been renamed to n_workers.r   r   r   r   r   s    r   r   zSSHCluster.nprocs  s(    $	
 	
 	

 ~r   c                H    t          j        dt                     || _        d S r   r   )r   values     r   r   zSSHCluster.nprocs  s+    $	
 	
 	

 r   c                $    d| j         | j        fz  S )Nz%s:%d)r   r   r   s    r   scheduler_addresszSSHCluster.scheduler_address  s    $-t/BCCCr   c                (   | j         g| j        z   }	 	 |D ]]}|d                                         sAt          |d                                                    |d                                         A^t          d           p# t          $ r Y d S w xY w)NTr4   r2   )r   r   rb   rZ   getr   KeyboardInterruptr   all_processesprocesss      r   monitor_remote_processesz#SSHCluster.monitor_remote_processes  s    (4<7	, = =G%n5;;== =gn599;;<<< &n5;;== =
 c


 ! 	 	 	DD	s   A1B 
BBc                   | j                             t          | j        | j        | j        || j        | j        | j        | j	        | j
        | j        | j        | j        | j        | j        | j        | j                             d S r   )r   appendr   rq   r   r   r   r   r    r!   r"   r   r   r   r   rz   r   r   )r   r   s     r   r   zSSHCluster.add_worker  s    ##!$! "'$! 	
 	
 	
 	
 	
r   c                    | j         g| j        z   }|D ]7}|d                             d           |d                                          8d S )NrN   shutdownrv   )r   r   r;   r   r   s      r   r   zSSHCluster.shutdown  s_    (4<7$ 	% 	%GM"&&z222H""$$$$	% 	%r   c                    | S r   r   r   s    r   	__enter__zSSHCluster.__enter__  s    r   c                .    |                                   d S r   )r   )r   exc_type	exc_valuer[   s       r   __exit__zSSHCluster.__exit__  s    r   )r   NNr   NFNNNNNr|   N)r   r   r   r   r   	coroutiner   propertyr   setterr   r   r   r   r   r   r   r   r   r   r   P  s        8#\" \" \" \"| 	]  ]   X ]  ] D D XD  &
 
 
,% % %      r   r   r   )Nr|   N)
__future__r   rU   r]   r=   rw   r[   r   queuer   	threadingr   r	   r   tlzr   tornador   distributed.metricsrV   r   r9   r   rl   r{   r   r   r   r   r   <module>r      s   " " " " " "  				  



                                    $ $ $ $ $ $		8	$	$
       k k k^ PT'/ '/ '/ '/p 4!S/ S/ S/ S/lm m m m m m m m m mr   