a
    Df	=                     @   s$  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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 ddlmZ ddl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$m%Z%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/ ddl0m1Z1 ddl2m3Z3 ddl4m4Z4 i Z5g Z6G dd dej7Z8G dd dej9Z:G dd dej;Z<G dd de&Z=e%dg dZ>e'ddZ?e%dg d dZ@e'd!dZAe: ZBe<eBZCe; ZDeDEejF e-GeD e-GeC e8 ZHeDIeH eCIeH eJd"ZKeDLeK e=d#d$d%ZMeDNeM d&d' ZOeMPe@d( eMPeeOeAd)d* eMPe>d+ eMPeeOe?d,d* d-d. ZQe$d/dZReRSeQ eMjTd0d1d2d3d4id5\ZUZVd6d7d8d9d:d;d<ZWdUd=d>ZXd?d@ ZYdAdB ZZdCdD Z[dEdF Z\dGdH Z]dIdJ Z^dVdKdLZ_dWdMdNZ`dOdP ZadQdR ZbdSdT ZcdS )X    N)partial)	HoverTool)ColumnDataSourcefigure   )configpanel_extension)bind)	AccordionColumnFlexBoxRowTabs)HTMLBokeh)FastListTemplate)ButtonMultiSelect	Tabulator	TextInput)Trend   )LOG_SESSION_CREATEDLOG_SESSION_DESTROYEDLOG_SESSION_LAUNCHINGpanel_logger)push_notebook)profiling_tabs)
set_curdoc)statec                   @   s   e Zd Zdd ZdS )	LogFilterc                 C   s@   d|j vrdS |jd }|tv r$dS |tjvr<|gtj t_dS )NSession Tr   F)msgargslog_sessionssession_filteroptions)selfrecordZ
session_id r)   [/nfs/NAS7/SABIOD/METHODE/ermites/ermites_venv/lib/python3.9/site-packages/panel/io/admin.pyfilter+   s    


zLogFilter.filterN)__name__
__module____qualname__r+   r)   r)   r)   r*   r    )   s   r    c                   @   s   e Zd Ze ZdS )DataN)r,   r-   r.   paramListdatar)   r)   r)   r*   r/   6   s   r/   c                       s$   e Zd Z fddZdd Z  ZS )LogDataHandlerc                    s   t    || _d S N)super__init___data)r'   r2   	__class__r)   r*   r6   =   s    
zLogDataHandler.__init__c                 C   s.   d|j vrd S | jj| | jjd d S )Nr!   r2   )r"   r7   r2   appendr0   trigger)r'   r(   r)   r)   r*   emitA   s    
zLogDataHandler.emit)r,   r-   r.   r6   r<   __classcell__r)   r)   r8   r*   r3   ;   s   r3   c                       sN   e Zd Zddddddgddd	d
Z fddZedddZdd Z  ZS )_LogTabulatorZmidnightZfit_data_stretchFdatetimeZdsc)fielddirTlocal   )themelayoutZ
show_indexZsortersdisabledZ
paginationZ	page_sizec                    s0   |   |d< i | j|}t jf i | d S )Nvalue)_create_frame_update_defaultsr5   r6   )r'   paramsr8   r)   r*   r6   T   s    z_LogTabulator.__init__Nc                 C   s.   g d}| d u rt j|dS t j| |dS d S )N)r?   levelappsessionmessagecolumns)index)pd	DataFrameZSeries)r2   rP   r)   r)   r*   rH   Y   s    z_LogTabulator._create_framec           	      C   s   z|  d}|d  d|d  }|d d d }|d }t|d }d|dd  }| |||||g}| j|d	d
 W n ty   Y n0 d S )N r   r   r            F)follow)stripsplitintjoinrH   stream	Exception)	r'   logsr?   rK   rL   rM   rN   dfr)   r)   r*   writea   s    z_LogTabulator.write)N)	r,   r-   r.   rI   r6   staticmethodrH   rc   r=   r)   r)   r8   r*   r>   H   s   

r>   zFilter by session)namer&   zFilter by message)re   zFilter by level)DEBUGINFOWARNINGERRORzFilter by appz1%(asctime)s %(levelname)s: %(name)s - %(message)sstretch_bothi  )sizing_modeZ
min_heightc                 C   s&   |r
| j r| S | | | j|  S r4   )emptystrcontainscopy)rb   patterncolumnr)   r)   r*   _textinput_filter   s    
rr   rK   rL   )rp   rq   rM   rN   c                  G   s   g t _dt_g t_dt_d S )N )level_filterrG   
app_filterr%   message_filter)eventsr)   r)   r*   _clear_log_filters   s    rx   zClear filterszEnter filename for logfilezlog.csv)re   rG   re   zDownload logfile)Ztext_kwargsZbutton_kwargsZMediumSeaGreenZredZOrangeZ
DodgerBlueZVioletZwhite)initializing	destroyed	rendering
processingperiodicloggingc                    s  g t tdddtg g g g g g g g g d	ddj_jddd	d
ddddd	 dj_t	g ddddd d fdd	t
jjD ]$}z| W q ty   Y q0 qfdd}t
jj|drfdd}| t  S )Nr?   rj   )y_rangeZx_axis_typerk   )	x0x1y0y1r"   rM   color
line_colortype)r2   ZSessionsr   r   r   r   r   r   gffffff?r   )	leftrighttopZbottomsourcer   Z
fill_coloralphaZlegend_fieldZtop_left))ZStartz
@x0{%F %T})ZEndz
@x1{%F %T})Sessionz@session)Messagez@msg)z@x0z@x1)Ztooltips
formattersFc           
   
      s  t | jd }|vr | d| jv r|  }d}zjd |dd}W n tyf   Y d S 0 || j	d fg|t
| fg||fg||ddfgd	}| nP| jtkrjd t| }d
}|| j	d fg|t
| fg||fg|d| dfgd	}| nd| jv r~d}|  }jd |dd}|| j	d fg|t
| fg||fgd}| n| jdr.z*jd d| d}jd | }W n ty   | j	d }Y n0 d}|g| j	d g|dfg|dfg|g|  ddgt
| gdg|gd	}| n|  }d}	|d| rZd}t
|}	n>|t| rzd}t
|}	nd|v rd}t
|}	nd}| j	d g| j	d g|dfg|dfg|g|gt
| g|	g|gd	}jjkrtj_| |rt  d S )Nr   zfinished processing eventsr|   r"   zfinished processingZreceived  	processed)r   r   r   r"   ry   r!   z initializingz$finished executing periodic callbackr}   zfinished executingZ	executing)r   r   r   renderedr   r{   g      пg      ?Zblack)	r   r   r   r   rM   r"   r   r   r   zSession %s loggedr~   rz   zexecuting periodic callback)rm   r#   r:   r"   
getMessager2   rQ   replacer_   createdEVENT_TYPESpatchr   r   endswith
ValueErrorr^   
startswithgetr   r   Zfactorslistr   )
newnbZsidr"   etyperQ   r   r   eventr   )bk_panecdspsessionsr)   r*   
update_cds   s    






z get_timeline.<locals>.update_cdsc                    s0   | j d } r  t| n|dd d S )NrU   T)r   )r   Zadd_next_tick_callbackr   )r   r   )docr   r)   r*   schedule_cds_update&  s    
z)get_timeline.<locals>.schedule_cds_updater2   c                    s   t jj  d S r4   )log_data_handlerr7   r0   unwatchZsession_contextwatcherr)   r*   _unwatch_data/  s    z#get_timeline.<locals>._unwatch_data)F)r   r   r   ZyaxisZ
axis_labelZquadZlegendlocationZ	add_toolsr   r   r7   r2   r_   r0   watchon_session_destroyedr   )r   r(   r   r   r)   )r   r   r   r   r   r   r   r*   get_timeline   s@    




X
r   c               
   C   sF   ddl m}  tdtjdd  d|  dtj dtj d	d	d	d
dS )Nr   __version__zZ
    <h4>
    Panel Server running on following versions:
    </h4>
    <code>
    Python |z</br>
    Panel: z</br>
    Bokeh: z</br>
    Param: z</br>
    </code>,  )r      )widthheightmargin)Zpanelr   r   sysversionr[   bokehr0   r   r)   r)   r*   get_version_info6  s    	r   c                  C   s@   dd l } t tv r"tt  }n| t  tt < }|S )Nr   )psutilosgetpid	PROCESSESProcess)r   processr)   r)   r*   get_processC  s
    r   c                   C   s,   t jt t  jd d fgddgdS )Ni   timememoryrO   )rR   rS   r   r   Zmemory_infoZrssr)   r)   r)   r*   get_memK  s    r   c                   C   s"   t jt t  fgddgdS )Nr   cpurO   )rR   rS   r   r   Zcpu_percentr)   r)   r)   r*   get_cpuN  s    r   c               	      sd   t t dddddddt t ddddddd  fd	d
} tj| ddd}d|_|   fS )Nr   r   stepzMemory Usage (MB)r   r2   plot_xplot_yZ	plot_typere   r   r   r   zCPU Usage (%)c                      s    t    t  d S r4   )r^   r   r   r)   r   r   r)   r*   update_statsZ  s    z&get_process_info.<locals>.update_statsr   F)Zperiodstart)r   r   r   r   Zadd_periodic_callbackr`   r   )r   Zstats_cbr)   r   r*   get_process_infoQ  s    

r   c            	         s8  g g g   } }}t jd }t| D ]\}d d u }tfdd| D d }d d urz|d d   |s| d d   | rt| nd	}|rt|nd	}|d ||d ||f q&|sd
}d	}d	}tj	
   t fdd| D }| ||d ||f tj|g ddS )Nr   endedc                    s8   g | ]0}|d   d  k r|d r0|d  d  krdqS launchedr   r   r)   .0ra   )rM   r)   r*   
<listcomp>g  s   z$get_session_data.<locals>.<listcomp>r   r   startedr   r   rU   c                    s0   g | ](}|d   k r|d r(|d  krdqS r   r)   r   )nowr)   r*   r   x  s   )r   livetotalrenderdurationrO   )r   session_info	enumeratevaluessumr:   npmeandtr?   r   	timestamprR   rS   )	Z	durationsZrendersr   r   iZis_liver   r   r   r)   )r   rM   r*   get_session_datab  s4    
r   c              	      s   t  }t|ddg dddddddt|ddg ddddddd t|dd	g dd	dd
dddt|ddg ddddddd fdd}tj|d| rfdd}| |  fS )Nr   r   r   zTotal Sessionsr   r   r   zActive Sessionsr   zAvg. Time to Render (s)r   zAvg. Session Duration (s)c                    s.   t  } fD ]}||j|jg |_qd S r4   )r   r   r   r2   )r   rb   Ztrend)activer   r   r   r)   r*   update_session_info  s    z-get_session_info.<locals>.update_session_infor   c                    s   t j  d S r4   )r   r0   r   r   r   r)   r*   _unwatch_session_info  s    z/get_session_info.<locals>._unwatch_session_info)r   r   r   r0   r   r   )r   rb   r   r   r)   )r   r   r   r   r   r*   get_session_info  s.    
r   c                 C   sd   t t| ddd}t }zdd l}W n  tyF   || | Y S 0 |g t | |S d S )Nr   stretch_widthr   rk   )r   r   r   r   r_   r:   extendr   )r   rE   infor   r)   r)   r*   get_overview  s    

r   c                   C   sD   t jd ttdttttt	tt
ttddfg ddddt ddS )	NrG   zFilters & Downloadr   )rk   z#444444z#333333)r   Zactive_header_backgroundZheader_backgroundrk   rj   )log_terminalr0   r;   r   r
   r   rt   ru   r%   rv   download_filenamedownload_buttonreset_filterr)   r)   r)   r*   log_component  s.    r   c                    s   t dd tt   fdd} | tddd}tdt fd	t fd
dd}t	j
rv|dttdd f |dttd dfdt fg |dd t	jD  |j| |S )NZ	tabulatorZterminalc                    s   t t  d S r4   )r$   removeidr   r   r)   r*   _remove_log_session  s    z+admin_template.<locals>._remove_log_sessionzAdmin PanelZdark)titlerD   ZOverviewZTimeliner   rj   r   zLaunch Profilingz^\/.*zUser ProfilingLogsc                 S   s   g | ]\}}|| fqS r)   r)   )r   re   Zpluginr)   r)   r*   r     s   z"admin_template.<locals>.<listcomp>)	extensionr$   r:   r   r   r   r   r   r   r   Zprofilerr   r   r   r   Zadmin_pluginsmain)r   r   templatetabsr)   r   r*   admin_template  s0    




r   c                 C   s>   t | " t| }||  W d    n1 s00    Y  | S r4   )r   r   Z
server_doc)r   r   r)   r)   r*   admin_panel  s    
(r   )N)N)N)dr?   r   r~   r   r   r   	functoolsr   r   numpyr   ZpandasrR   r0   Zbokeh.modelsr   Zbokeh.plottingr   r   r   r   r   dependsr	   rE   r
   r   r   r   r   Zpaner   r   r   r   Zwidgetsr   r   r   r   Zwidgets.indicatorsr   r   r   r   r   Znotebookr   Zprofiler   serverr   r   r   r$   Filterr    ZParameterizedr/   StreamHandlerr3   r>   r%   rv   rt   ru   r2   r   Zlog_handlersetLevelZadmin_log_level
addHandlerZ
log_filter	addFilter	Formatter	formattersetFormatterr   	setStreamrr   Z
add_filterrx   r   Zon_clickZdownload_menur   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r)   r)   r)   r*   <module>   s   +











	
 

