
    0Fie6                        d dl m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Zd dl	m
Z
 d dlZd dlmZmZ d dlmZ d dlmZ d dlmZmZ d d	lmZ  G d
 de          ZdS )    )annotationsN)suppress)
HTTPServer)get_address_hostget_tcp_server_addresses)Server)RoutingApplication)DequeHandlerclean_dashboard_addressget_versionsc                  V    e Zd ZdZddZd Zd Zed             ZddZ	ddZ
	 ddZdS )
ServerNodez?
    Base class for server nodes in a distributed cluster.
    Nc                "    t          |          S )N)packagesr   )selfr   s     0lib/python3.11/site-packages/distributed/node.pyversionszServerNode.versions   s    X....    c           	        |dk    rd}| j                                         D ]a\  }}d }t          |t                    r|\  }}nd}t          |t                    r|                    d          }t          |t          t          f          r[t          |          dk    r|d         t          |d                   }}n*t          |          dk    r|dc\  }}nt          |          t          |t                    r|\  }}ni }	  || fd| j
        i|}|                    ||n||f           || j        |<   # t          $ r;}t          j        d| d	| d
dz   t	          |          z   d           Y d }~[d }~ww xY wd S )Nz0.0.0.0 r   :      io_loopz
Could not launch service 'z
' on port z. zGot the following message:

   )
stacklevel)service_specsitems
isinstancetuplestrsplitlistlenint
ValueErrorlooplistenservices	Exceptionwarningswarn)	r   default_listen_ipkv	listen_ipportkwargsservicees	            r   start_serviceszServerNode.start_services"   s   	)) "&,,.. #	 #	DAqI!U## 44$$$ 'zz#$.. +t99>>'+AwDGtIIYY!^^(,a%KY$T***!U## 	66!D>>$)>v>>"+"7YY=NPTU   $+a     H1HHHHH67!ff  !	        ;#	 #	s   5D==
F0E==Fc                   t          | d          rG| j        j        D ]:}t          |d          r(t          |j                  r|                                 ;| j                                        D ]}|                                 d S )Nhttp_applicationstop)hasattrr8   applicationscallabler9   r*   values)r   applicationr4   s      r   stop_serviceszServerNode.stop_servicesK   s    4+,, 	'#4A ' ';// 'H[=M4N4N '$$&&&}++-- 	 	GLLNNNN	 	r   c                H    d | j                                         D             S )Nc                $    i | ]\  }}||j         S  r2   ).0r/   r0   s      r   
<dictcomp>z,ServerNode.service_ports.<locals>.<dictcomp>U   s     <<<da16<<<r   )r*   r   )r   s    r   service_portszServerNode.service_portsS   s$    <<dm&9&9&;&;<<<<r   loggerlogging.LoggerreturnNonec                p   t          t          j                            d                    | _        | j                            t          j        t          j                            d                               |                    | j                   t          j
        | |j        | j                   d S )Nzdistributed.admin.log-length)nzdistributed.admin.log-format)r
   daskconfigget_deque_handlersetFormatterlogging	Formatter
addHandlerweakreffinalizeremoveHandler)r   rG   s     r   _setup_loggingzServerNode._setup_loggingW   s    *koo<==
 
 
 	((dkoo.LMMNN	
 	
 	
 	$-...v3T5HIIIIIr   r   Fc                ^   | j         }g }t          t          |j                            D ]\  }}|r||k    s|j        |k     r nh|r6|                    |j        |j        |                    |          f           R|                    |j        |                    |          f           |S )a/  
        Fetch log entries for this node

        Parameters
        ----------
        start : float, optional
            A time (in seconds) to begin filtering log entries from
        n : int, optional
            Maximum number of log entries to return from filtered results
        timestamps : bool, default False
            Do we want log entries to include the time they were generated?

        Returns
        -------
        List of tuples containing the log level, message, and (optional) timestamp for each filtered entry, newest first
        )rP   	enumeratereverseddequecreatedappend	levelnameformat)r   startrL   
timestampsdeque_handlerLcountmsgs           r   get_logszServerNode.get_logsa   s    " +#H]-@$A$ABB 	E 	EJE3 UaZZ3;#6#6 E#+s}m6J6J36O6OPQQQQ#-)=)=c)B)BCDDDDr   c           
        t          |          | _        t          j                            d          }t          j                            d          }t          j                            d          }|r<t          j        |t
          j        j                  }|	                    ||           t          | j        |          | _        t          |p|          }|D ]}	|	d         k| j        }
t          |
t          t           f          r|
d	         }
|
r>t#          t$                    5  t'          |
          |	d<   ddd           n# 1 swxY w Y   d
}d}	 	 |s | j        j        di |	 n' | j        j        di t+          j        |	dd	i           n# t.          $ r d}|dz
  }|dk     r Y nw xY w]t1          | j                  }|d	         \  | j        _        | j        _        | j        | j        d<   t9          d |D             d |D                       D ],\  }}||k    r!|d	k    rt;          j        d| d| d           -dS )z0This creates an HTTP Server running on this nodez'distributed.scheduler.dashboard.tls.keyz(distributed.scheduler.dashboard.tls.certz+distributed.scheduler.dashboard.tls.ca-file)cafilepurpose)keyfile)ssl_optionsaddressNr   Fr   Tr2   r   	dashboardc                    g | ]
}|d          S rC   rB   )rD   as     r   
<listcomp>z0ServerNode.start_http_server.<locals>.<listcomp>   s    ///1QvY///r   c                    g | ]
}|d          S )r   rB   )rD   bs     r   rq   z0ServerNode.start_http_server.<locals>.<listcomp>   s    1P1P1P1!A$1P1P1Pr   zPort z` is already in use.
Perhaps you already have a cluster running?
Hosting the HTTP server on port z insteadrB   )r	   r8   rM   rN   rO   sslcreate_default_contextPurposeCLIENT_AUTHload_cert_chainr   http_serverr   _start_addressr    r$   r!   r   r'   r   r)   tlzmerger+   r   rm   r2   r*   zipr,   r-   )r   routesdashboard_addressdefault_portrl   tls_keytls_certtls_ca_filehttp_addresseshttp_addressrm   change_portretries_leftbound_addressesexpectedactuals                   r   start_http_serverzServerNode.start_http_server~   s(   
 !36 : : +//"KLL;??#MNNkoo&STT 	C4"CK,C  K ''''BBB%d&;UUU01B1RlSS* 	 	LI&.-ge}55 )%ajG L!*-- L L2B72K2KY/L L L L L L L L L L L L L L L  KL
& X/(/??,????/(/WW#)L6ST+2V2VWWW    "&K#/!#3L#a'' ('  343CDD ;J!:L7 $"2"7%)%5k" !$/////1P1P1P1P1P!
 !
 	 	Hf 6!!hllHH H H7=H H H  		 	s$   )EE	E	<FF10F1)N)rG   rH   rI   rJ   )r   NF)r   N)__name__
__module____qualname____doc__r   r6   r?   propertyrF   rX   rg   r   rB   r   r   r   r      s         / / / /' ' 'R   = = X=J J J J   < FJ< < < < < <r   r   )
__future__r   rR   rt   r,   rU   
contextlibr   r{   tornado.httpserverr   rM   distributed.commr   r   distributed.corer   distributed.http.routingr	   distributed.utilsr
   r   distributed.versionsr   r   rB   r   r   <module>r      s   " " " " " "  



         



 ) ) ) ) ) )  G G G G G G G G # # # # # # 7 7 7 7 7 7 C C C C C C C C - - - - - -e e e e e e e e e er   