B
    F.\                 @   s   d dl mZmZmZ d dlmZ d dlZddlmZ ddl	m
Z
 ddlmZmZmZ dd	lmZ eeZG d
d de
ZdddZdd ZddddedZddddddZddddddZdS )    )print_functiondivisionabsolute_import)dequeN   )color_of)SchedulerPlugin   )	key_splitformat_timeparse_timedelta)timec               @   s2   e Zd ZdddZdd ZdddZdd
dZdS )TaskStreamPlugin順 c             C   s&   t |d| _|| _||  d| _d S )N)maxlenr   )r   buffer	schedulerZ
add_pluginindex)selfr   r    r   Blib/python3.7/site-packages/distributed/diagnostics/task_stream.py__init__   s    
zTaskStreamPlugin.__init__c             O   sN   |dkrJ|| j jkrd S ||d< |dks0|dkrJ| j| |  jd7  _d S )NZ
processingkeyZmemoryZerredr   )r   Ztasksr   appendr   )r   r   startZfinishargskwargsr   r   r   
transition   s    zTaskStreamPlugin.transitionNc                s    fdd t |tr&t t| }|d k	r@ |dtj}t |trXt t| }|d k	rr |dtj}|d k	r|d kr|d krtj}|| }n2|d kr|d k	r|| }n|d k	r|d kr|| }|d krtj}|d krd}td|}t|tj}fddt||D S )Nc                s\   ||kr|S || d }t dd j| d D }|| k rL | |d |S  | ||S d S )Nr	   c             s   s   | ]\}}}|V  qd S )Nr   ).0_r   stopr   r   r   	<genexpr>%   s    z;TaskStreamPlugin.collect.<locals>.bisect.<locals>.<genexpr>
startstopsr   )maxr   )targetleftrightZmidvalue)bisectr   r   r   r(       s    z(TaskStreamPlugin.collect.<locals>.bisectr   c                s   g | ]} j | qS r   )r   )r   i)r   r   r   
<listcomp>G   s    z,TaskStreamPlugin.collect.<locals>.<listcomp>)	
isinstancestrr   r   lenr   r#   minrange)r   r   r    countr   )r(   r   r   collect   s0    






zTaskStreamPlugin.collectr   c       	      C   sp   g }| j t| j }|d kr&t| j}x:t|p0d| |r@|| n|D ]}| j| }|| qFW t|||dS )Nr   )workersstart_boundary)r   r-   r   r/   r   
rectangles)	r   ZistartZistopr2   r3   msgsZdiffr)   msgr   r   r   r4   I   s    
$
zTaskStreamPlugin.rectangles)r   )NNN)NNr   )__name__
__module____qualname__r   r   r1   r4   r   r   r   r   r      s   
	
*r   c             C   s  |d kri }g }g }g }g }g }g }g }	g }
g }g }xT| D ]J}|d }t |}|dg }yd|d |d f }W n* tk
r   w<tjd|dd d	}Y nX ||krt|d
 ||< x|D ]\}}}||k rqt| }t|tk	r||}|	|| d
 d  |	d||   |	t
||  |	| |	t| |  |	| |		t|  |
	|d  |	| |	||  qW q<W |||||||	|
||d
S )Nr   r"   z%s-%dworkerZthreadz%Message contained bad information: %sT)exc_info r	   i  )
r   ZdurationZduration_textr   namecolorZalphar:   worker_thready)r
   get	ExceptionloggerZwarningr-   colorstyper,   r   r   prefixalphas)r5   r2   r3   ZL_startZ
L_durationZL_duration_textZL_keyZL_nameZL_colorZL_alphaZL_workerZL_worker_threadZL_yr6   r   r=   r"   r?   actionr   r    r>   r   r   r   r4   U   sf    



r4   c             C   s(   | d dkr t | d }t|S dS d S )NZstatusZOKr   Zblack)r
   r   )r6   splitr   r   r   color_of_message   s    rJ   ZredZorangeZgray)transferz
disk-writez	disk-readdeserializecomputeg?)rK   rM   rL   z
disk-writez	disk-readz	transfer-zdisk-write-z
disk-read-zdeserialize-r<   )Nr   )Z
__future__r   r   r   collectionsr   ZloggingZprogress_streamr   Zpluginr   Zutilsr
   r   r   Zmetricsr   Z	getLoggerr7   rC   r   r4   rJ   rD   rG   rF   r   r   r   r   <module>   s2   
F
<