U
    /eA<                  	   @  s:  d dl mZ d dlZd dlZd dlZd dlmZ d dlmZm	Z	 d dl
mZmZmZmZmZmZmZ d dlmZmZ d dlmZ d dlmZ d d	lmZ d d
lmZmZ d dlmZm Z  d dl!m"Z"m#Z# d dl$m%Z% d dl&m'Z'm(Z(m)Z)m*Z* d dl+m,Z,m-Z-m.Z. d dl/m0Z0 d dl1m2Z2 e3e4Z5eeej67ej68e9dddddZ:eej67ej68e9dddZ;ddddgiZ<ddddZ=G d d! d!e'Z>G d"d# d#e'Z?G d$d% d%e'Z@G d&d' d'e'ZAG d(d) d)e'ZBe=d*dd+d,d- ZCe=d.dd+d/d0 ZDe=d1d2d+d3d4 ZEe=d5dd+d6d7 ZFe=d8dd+d9d: ZGdS );    )annotationsN)without_property_validation)columnrow)ColumnDataSourceDataRange1d	HoverToolNumeralTickFormatterPanTool	ResetToolWheelZoomTool)	DataTableTableColumn)RdBu)figure)Theme)EnvironmentFileSystemLoader)mergepartition_all)format_bytesformat_time)add_periodic_callback)DashboardComponentProfileServerProfileTimePlotSystemMonitor)_DATATABLE_STYLESHEETS_KWARGS	transposeupdate)time
log_errorsz..httpZ	templates)loaderz
theme.yaml)filenameZpagesstatussystemprofilezsimple.html)templatec                  s    fdd}|S )Nc                   s    t dd fdd}|S )N   )Zunroll_stackc                   sB   |_ t|_ d k	r$ |jd< |j| t|_| ||S )Nactive_page)titleenvZget_templater)   template_variablesr   BOKEH_THEMEZtheme)argextradoc)r+   fr)   r,    K/tmp/pip-unpacked-wheel-g426oqom/distributed/dashboard/components/worker.pywrapper6   s    
z0standard_doc.<locals>.decorator.<locals>.wrapperr!   )r3   r6   r+   r)   r,   )r3   r5   	decorator5   s    	zstandard_doc.<locals>.decoratorr4   )r,   r+   r)   r8   r4   r7   r5   standard_doc4   s    r9   c                   @  s(   e Zd ZdZdd Zeedd ZdS )
StateTablezCurrently running tasksc                   sh   || _ ddddddg}tdd |D | _d	d |D  tf | j fd
d|D ddt}|| _d S )NStored	ExecutingReadyWaitingConnectionsServingc                 S  s   i | ]
}|g qS r4   r4   .0namer4   r4   r5   
<dictcomp>L   s      z'StateTable.__init__.<locals>.<dictcomp>c                 S  s   i | ]}|t ||d qS ))fieldr,   )r   rA   r4   r4   r5   rD   N   s      c                   s   g | ]} | qS r4   r4   )rB   ncolumnsr4   r5   
<listcomp>R   s     z'StateTable.__init__.<locals>.<listcomp>F   )sourcerH   height)workerr   rK   r   r   root)selfrM   namestabler4   rG   r5   __init__H   s    zStateTable.__init__c                 C  sd   | j }t|jgd|jj|jjf gt|jjgt|jjg|jjgt|j	gd}t
| j| d S )Nz%d / %d)r;   r<   r=   r>   r?   r@   )rM   lendatastateexecuting_countnthreadsreadyZwaitingtransfer_incoming_count_commsr   rK   )rO   wdr4   r4   r5   r   X   s    

zStateTable.updateN)__name__
__module____qualname____doc__rR   r   r"   r   r4   r4   r4   r5   r:   E   s
   r:   c                   @  s*   e Zd ZedddZeedd ZdS )CommunicatingStream,  c           	   
   K  s   || _ ddddddddd	d
g
}tdd |D | _tdd |D | _tdd}tdd}tf dd|||dd|}|j| jddddddd |j| jddddddd tddd}||t	 t
ddtdd || _d| _d| _t | _d S )Nstartstopmiddledurationwhoyhoveralpha	bandwidthtotalc                 S  s   i | ]
}|g qS r4   r4   rA   r4   r4   r5   rD   x   s      z0CommunicatingStream.__init__.<locals>.<dictcomp>c                 S  s   i | ]
}|g qS r4   r4   rA   r4   r4   r5   rD   y   s      r   )range_paddingzPeer Communicationsdatetime )r,   x_axis_typex_rangey_rangerL   toolsg?red)rK   xrh   widthrL   colorrj   bluefollow_mousez@hoverZpoint_policyZtooltipsrv   Z
dimensions)rM   r   transfer_incomingtransfer_outgoingr   r   rectr   	add_toolsr   r
   r   rN   "last_transfer_incoming_count_total"last_transfer_outgoing_count_totaldictrg   )	rO   rM   rL   kwargsrP   rq   rr   figri   r4   r4   r5   rR   h   sn    


	
zCommunicatingStream.__init__c              
     s  | j j| j j| j }fddtd|d D | j j| _| j j | j jj| j } fddtd|d D  | j jj| _ | j	g| j
gfD ]P\}}|D ]}d|kr|d= |d= |d |d pd	 }tt|d
 dd}||d< z| j|d  |d< W n< tk
r8   t| j| j|d < | j|d  |d< Y nX dt|d t|d t|d |d  |d< dD ]}|| d ||< qpq|rt|}t|jd rt|d |jd d d kr|j| q|j|dd qd S )Nc                   s   g | ]} |    qS r4   copyrB   i)transfer_outgoing_logr4   r5   rI      s    z.CommunicatingStream.update.<locals>.<listcomp>   c                   s   g | ]} |    qS r4   r   r   )transfer_incoming_logr4   r5   rI      s    
compressedkeysrl   rf         ?g    eͽA333333?rj   rg   rh   z{} / {} = {}/sri   )re   rf   rc   rd     rd   rc   '  )rollover)rM   r   Ztransfer_outgoing_count_totalr   ranger   rU   Ztransfer_incoming_count_totalr   r|   r}   maxminrg   KeyErrorrS   formatr   r   r   rT   r   stream)rO   rF   ZmsgsrK   msgrk   Zbwkr4   )r   r   r5   r      sd    



zCommunicatingStream.updateN)rb   )r]   r^   r_   r"   rR   r   r   r4   r4   r4   r5   ra   g   s
   @ra   c                   @  s$   e Zd Zdd Zeedd ZdS )CommunicatingTimeSeriesc              	   K  s   || _ tg g g d| _tdddd}tf ddd|jjd	 gd
d|d|}|j| jdddd |j| jdddd |t	 t
ddtdd || _d S )N)ru   inoutend N  r   followZfollow_intervalrm   zCommunication Historyrn   皙r      ro   r,   rp   rr   rL   rs   rq   ru   r   rt   )rK   ru   rh   rw   r   rx   rv   r{   )rM   r   rK   r   r   rU   Ztransfer_incoming_count_limitliner   r   r
   r   rN   rO   rM   r   rq   r   r4   r4   r5   rR      s*    	  z CommunicatingTimeSeries.__init__c                 C  s4   | j t d gt| jjg| jjjgdd d S )Nr   )ru   r   r   r   )rK   r   r    rS   rM   rZ   rU   rY   rO   r4   r4   r5   r     s    

zCommunicatingTimeSeries.updateNr]   r^   r_   rR   r   r"   r   r4   r4   r4   r5   r      s   r   c                   @  s$   e Zd Zdd Zeedd ZdS )ExecutingTimeSeriesc              	   K  s   || _ tg g d| _tdddd}tf ddd|jjd	 gd
d|d|}|j| jddd |t	 t
ddtdd || _d S )Nru   rh   r   r   r   r   zExecuting Historyrn   r   g?r   ro   r   ru   rh   )rK   ru   rh   rv   r{   )rM   r   rK   r   r   rU   rW   r   r   r   r
   r   rN   r   r4   r4   r5   rR     s(    	  zExecutingTimeSeries.__init__c                 C  s(   | j t d g| jjjgdd d S )Nr   r   )rK   r   r    rM   rU   rV   r   r4   r4   r5   r   )  s     zExecutingTimeSeries.updateNr   r4   r4   r4   r5   r     s   r   c                   @  s>   e Zd ZdddZedd Zedd Zeedd	 Zd
S )Countersstretch_bothc                   s   || _ i | _i | _i | _i | _| _| j jrD| j jD ]}| | q4| j jD ]}| 	| qLt
| j| j  fddt D  t dkrt d| _n$tfddtd D di| _d S )	Nc                   s   g | ]} | qS r4   r4   )rB   r   )figuresr4   r5   rI   A  s     z%Counters.__init__.<locals>.<listcomp>   sizing_modec                 3  s   | ]}t |d  iV  qdS )r   N)r   )rB   pairr   r4   r5   	<genexpr>G  s   z$Counters.__init__.<locals>.<genexpr>r*   r   )servercounter_figurescounter_sourcesdigest_figuresdigest_sourcesr   digestsadd_digest_figurecountersadd_counter_figurer   sortedrS   r   rN   r   )rO   r   r   r   rC   r4   )r   r   r5   rR   2  s,    
zCounters.__init__c              
   C  s   t | jj| j}dd t|D }i }|dr:d|d< tf |dd| jd|}d	|j_	d	|j
_	|d
sx|drtdd|jd _t|D ]@}dd||  |  }|j|| dd|tt|d |  d qtjd |j_|| j|< || j|< |S )Nc                 S  s   i | ]}|t g g d qS )r   r   r   r4   r4   r5   rD   Q  s      z.Counters.add_digest_figure.<locals>.<dictcomp>rf   rn   rp   ro   r   )r,   rs   rL   r   Frk   bytesz0.0b)r   r   r   ru   rh      )rK   ru   rh   rj   rw      )rS   r   r   	intervalsr   endswithr   r   Zyaxisvisibleygridr	   xaxis	formatterr   r   r   mathpimajor_label_orientationr   r   )rO   rC   rF   sourcesr   r   r   rj   r4   r4   r5   r   N  s<    
   

zCounters.add_digest_figurec                 C  s   t | jj| j}dd t|D }t|dd| jtdd | jj| jd D d}d	|j	_
t|D ]d}d
d| |  }|j|| dd|ddtt|d |  d tddd}|| tjd |j_qd|| j|< || j|< |S )Nc              	   S  s    i | ]}|t g g g g d qS )ru   rh   y-centercountsr   r   r4   r4   r5   rD   q  s    z/Counters.add_counter_figure.<locals>.<dictcomp>ro   r   c                 s  s   | ]}t |V  qd S )NstrrB   ru   r4   r4   r5   r   {  s     z.Counters.add_counter_figure.<locals>.<genexpr>r   )r,   rs   rL   r   rq   Fr   g?ru   r   rh   r   r   )rK   ru   rh   rv   rL   rj   rw   ry   z@x : @countsrz   r   )rS   r   r   r   r   r   r   r   
componentsr   r   r~   r   r   r   r   r   r   r   r   r   r   )rO   rC   rF   r   r   r   rv   ri   r4   r4   r5   r   n  s:    	


zCounters.add_counter_figurec           
        s  | j  D ]\}}| jj| }i  t|jD ]X\}   r, d\}}|dd  }|drh|d9 }| j	| | j
||d q,d|| f |j_q
| j D ]\}}| jj| }i  t|jD ]\}  rVt }|jd |j|   fdd	|D }fd
d	|D }dd	 |D }	dd	 |D }|||	|d | j| | j
  d|| f |j_dd	 |D |j_qqd S )Nd   r   rf   r   r   z%s: %dr   c                   s   g | ]} | qS r4   r4   r   )r\   r4   r5   rI     s     z#Counters.update.<locals>.<listcomp>c                   s   g | ]} | qS r4   r4   )rB   c)factorr4   r5   rI     s     c                 S  s   g | ]}|d  qS )r*   r4   )rB   rh   r4   r4   r5   rI     s     c                 S  s   g | ]}t |qS r4   r   r   r4   r4   r5   rI     s     r   c                 S  s   g | ]}t |qS r4   r   r   r4   r4   r5   rI     s     )r   itemsr   r   	enumerater   sizeZ	histogramr   r   rT   r   r,   textr   r   r   r   r   rq   Zfactors)
rO   rC   r   digestr   Zysxscounterr   Z	y_centersr4   )r\   r   r5   r     s4    
zCounters.updateN)r   )	r]   r^   r_   rR   r"   r   r   r   r   r4   r4   r4   r5   r   1  s   


#r   zDask Worker Internal Monitor)r+   c              	   C  s   t | }t| dd}t| dd}t| dd}|jj}||j_||j_t||d t||d t||d t||d |t|j|j|j|jdd d S )Nscale_widthr      )	r:   r   r   ra   rN   rq   r   add_rootr   )rM   r1   r2   Z
statetableZexecuting_tsZcommunicating_tsZcommunicating_streamZxrr4   r4   r5   
status_doc  s(    r   zDask Worker Monitorc                 C  s(   t | dd}t||d ||j d S )Nr   r     )r   r   r   rN   )rM   r1   r2   Zsysmonr4   r4   r5   systemmonitor_doc  s    r   zDask Work Countersr   c                 C  s(   t | dd}t||d ||j d S )Nr   r   r   )r   r   r   rN   )r   r1   r2   r   r4   r4   r5   counters_doc  s    r   zDask Worker Profilec                 C  s&   t | d|d}||j |  d S Nr   )r   r2   )r   r   rN   trigger_updater   r1   r2   r(   r4   r4   r5   profile_doc  s    r   zDask: Profile of Event Loopc                 C  s&   t | d|d}||j |  d S r   )r   r   rN   r   r   r4   r4   r5   profile_server_doc  s    r   )H
__future__r   loggingr   osZbokeh.core.propertiesr   Zbokeh.layoutsr   r   Zbokeh.modelsr   r   r   r	   r
   r   r   Zbokeh.models.widgetsr   r   Zbokeh.palettesr   Zbokeh.plottingr   Zbokeh.themesr   Zjinja2r   r   Ztlzr   r   Z
dask.utilsr   r   Z distributed.dashboard.componentsr   Z'distributed.dashboard.components.sharedr   r   r   r   Zdistributed.dashboard.utilsr   r   r   Zdistributed.metricsr    Zdistributed.utilsr"   	getLoggerr]   loggerpathjoindirname__file__r-   r/   r.   r9   r:   ra   r   r   r   r   r   r   r   r   r4   r4   r4   r5   <module>   s\   $	
" &  








