B
    t\                 @   s  d dl m 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m	Z	m
Z
 ejeZdd	 e	e
e jgD ZG d
d dejZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG d d! d!eZG d"d# d#eZd$efd%efd&efd'efd(efd)efd*efd+efd,efd-efd.efd/efgZd0d1 ZdS )2    )datetimeN)escape)gen)web   )
log_errorsformat_bytesformat_timec             C   s   i | ]}||j qS  )__name__).0funcr
   r
   ?lib/python3.7/site-packages/distributed/bokeh/scheduler_html.py
<dictcomp>   s    r   c               @   s   e Zd ZdddZdd ZdS )RequestHandlerNc             C   s   || _ |pi | _d S )N)serverextra)selfr   r   r
   r
   r   
initialize   s    zRequestHandler.initializec             C   s   t jtdS )NZ	templates)ospathjoindirname)r   r
   r
   r   get_template_path   s    z RequestHandler.get_template_path)NN)r   
__module____qualname__r   r   r
   r
   r
   r   r      s   
r   c               @   s   e Zd Zdd ZdS )Workersc          	   C   s>   t  . | jdd| jdt| jjt| j W d Q R X d S )Nworkers.htmlr   )title	scheduler)r   )r   renderr   toolzmerge__dict__nsr   )r   r
   r
   r   get   s
    zWorkers.getN)r   r   r   r%   r
   r
   r
   r   r      s   r   c               @   s   e Zd Zdd ZdS )Workerc          	   C   sJ   t |}t 0 | jdd| |dt| jjt| j	 W d Q R X d S )Nworker.htmlzWorker: )r   r&   )r'   )
r   url_unescaper   r    r!   r"   r   r#   r$   r   )r   workerr
   r
   r   r%   #   s
    
z
Worker.getN)r   r   r   r%   r
   r
   r
   r   r&   "   s   r&   c               @   s   e Zd Zdd ZdS )Taskc          	   C   sN   t |}t 4 | jdd| || jdt| jjt| j	 W d Q R X d S )N	task.htmlzTask: )r   r*   r   )r+   )
r   r(   r   r    r   r!   r"   r#   r$   r   )r   Ztaskr
   r
   r   r%   ,   s    
zTask.getN)r   r   r   r%   r
   r
   r
   r   r*   +   s   r*   c               @   s   e Zd Zdd ZdS )Logsc          	   C   s8   t  ( | j }| jdd|d| j W d Q R X d S )N	logs.htmlr,   )r   logs)r-   )r   r   Zget_logsr    r   )r   r.   r
   r
   r   r%   7   s    
zLogs.getN)r   r   r   r%   r
   r
   r
   r   r,   6   s   r,   c               @   s   e Zd Zejdd ZdS )
WorkerLogsc          	   c   sV   t  F t|}| jj|gdV }|| }| jdd| |d| j W d Q R X d S )N)workers	logs.htmlzLogs: )r   r.   )r1   )r   r   r(   r   Zget_worker_logsr    r   )r   r)   r.   r
   r
   r   r%   >   s    
zWorkerLogs.getN)r   r   r   r   	coroutiner%   r
   r
   r
   r   r/   =   s   r/   c               @   s   e Zd Zejdd ZdS )WorkerCallStacksc          	   c   sX   t  H t|}| jj| }| jj|dV }| jdd| |d| j W d Q R X d S )N)keyscall-stack.htmlzCall Stacks: )r   
call_stack)r5   )r   r   r(   r   
processingget_call_stackr    r   )r   r)   r4   r6   r
   r
   r   r%   I   s    
zWorkerCallStacks.getN)r   r   r   r   r2   r%   r
   r
   r
   r   r3   H   s   r3   c               @   s   e Zd Zejdd ZdS )TaskCallStackc          	   c   s^   t  N t|}| jj|gdV }|s4| d n| jdd| |d| j W d Q R X d S )N)r4   zG<p>Task not actively running. It may be finished or not yet started</p>call-stack.htmlzCall Stack: )r   r6   )r:   )r   r   r(   r   r8   writer    r   )r   keyr6   r
   r
   r   r%   T   s    
zTaskCallStack.getN)r   r   r   r   r2   r%   r
   r
   r
   r   r9   S   s   r9   c               @   s   e Zd Zdd ZdS )
CountsJSONc             C   s  | j }d}d}d}d}d}d}d}d}	xT|j D ]F}
|
jd k	rJ|d7 }n|
jdkr\|d7 }|
jrj|d7 }|
jr2|	d7 }	q2W xB|j D ]4}||j7 }|t	|j
7 }||j7 }|t	|j7 }qW |t	|j||t	|jt	|j|||t	|jt	|jt	|j||	t	|jd}| | d S )Nr      released)bytesclientsZcoreserredZhostsidlememoryr7   r?   	saturatedtasks
unrunnablewaitingwaiting_datar0   )r   rF   valuesZexception_blamestateZ
waiting_onwaitersr0   ncoreslenZhas_whatnbytesr7   rA   Z	host_inforC   rE   rG   r;   )r   r   rB   rO   rM   rD   r7   r?   rH   rI   ZtsZwsZresponser
   r
   r   r%   b   sN    




zCountsJSON.getN)r   r   r   r%   r
   r
   r
   r   r=   a   s   r=   c               @   s   e Zd Zdd ZdS )IdentityJSONc             C   s   |  | j  d S )N)r;   r   Zidentity)r   r
   r
   r   r%      s    zIdentityJSON.getN)r   r   r   r%   r
   r
   r
   r   rP      s   rP   c               @   s   e Zd Zdd ZdS )	IndexJSONc          	   C   s<   t  , dd tD }| jd|dd| j W d Q R X d S )Nc             S   s   g | ]\}}| d r|qS )z.json)endswith)r   url_r
   r
   r   
<listcomp>   s    z!IndexJSON.get.<locals>.<listcomp>json-index.htmlzIndex of JSON routes)routesr   )rV   )r   rW   r    r   )r   rr
   r
   r   r%      s    zIndexJSON.getN)r   r   r   r%   r
   r
   r
   r   rQ      s   rQ   c               @   s   e Zd Zdd ZdS )IndividualPlotsc             C   s*   | j jd }dd |jD }| | d S )NZbokehc             S   s>   i | ]6}| d dr|ds||d dd qS )/zindividual-z.json- )lstrip
startswithrR   stripreplacer   )r   Zurir
   r
   r   r      s   z'IndividualPlots.get.<locals>.<dictcomp>)r   ZservicesZappsr;   )r   Zbokeh_serverresultr
   r
   r   r%      s    
zIndividualPlots.getN)r   r   r   r%   r
   r
   r
   r   rY      s   rY   c                   s$   e Zd Z fddZdd Z  ZS )PrometheusHandlerc                sL   dd l }|| _ tt| j|| | j jdddd| _| j jdddd| _d S )Nr   Zworkers_totalzTotal number of workers.r   )	namespaceZclients_totalzTotal number of clients.)prometheus_clientsuperrb   __init__ZGauger0   rA   )r   argskwargsrd   )	__class__r
   r   rf      s    
zPrometheusHandler.__init__c             C   s<   | j t| jj  | jt| jj | | j  d S )N)r0   setrN   r   rA   r;   rd   Zgenerate_latest)r   r
   r
   r   r%      s    zPrometheusHandler.get)r   r   r   rf   r%   __classcell__r
   r
   )ri   r   rb      s   rb   zinfo/main/workers.htmlzinfo/worker/(.*).htmlzinfo/task/(.*).htmlzinfo/main/logs.htmlzinfo/call-stacks/(.*).htmlzinfo/call-stack/(.*).htmlzinfo/logs/(.*).htmlzjson/counts.jsonzjson/identity.jsonzjson/index.htmlzindividual-plots.jsonZmetricsc                s    fddt D S )Nc                s   g | ]\}}||d  ifqS )r   r
   )r   rS   cls)r   r
   r   rU      s    z get_handlers.<locals>.<listcomp>)rW   )r   r
   )r   r   get_handlers   s    rm   )r   r   r!   Ztornador   r   r   Zutilsr   r   r	   r   r   __file__Zfromtimestampr$   r   r   r&   r*   r,   r/   r3   r9   r=   rP   rQ   rY   rb   rW   rm   r
   r
   r
   r   <module>   sD   			/

