????

Your IP : 18.191.150.152


Current Path : /usr/lib/python3.6/site-packages/glances/outputs/__pycache__/
Upload File :
Current File : //usr/lib/python3.6/site-packages/glances/outputs/__pycache__/glances_curses.cpython-36.opt-1.pyc

3

Eo�c��
@s4dZddlmZddlZddlmZmZmZmZm	Z	ddl
mZmZddl
mZddlmZddlmZmZdd	lmZdd
lmZy ddlZddlZddlmZWn6ek
r�ejd�er�ejd
�ejd�YnXGdd�de�Z Gdd�de �Z!Gdd�de �Z"Gdd�dee�Z#Gdd�dee�Z$dS)zCurses interface class.�)�unicode_literalsN)�	nativestr�u�
itervalues�enable�disable)�MACOS�WINDOWS)�logger)�glances_events)�glances_processes�sort_processes_key_list)�unicode_message)�Timer)�TextboxzACurses module not found. Glances cannot start in standalone mode.zCFor Windows you can try installing windows-curses with pip install.�c)@s�eZdZdZddiddiddiddiddiddidd	id
diddidd
iddid
diddiddiddiddiddiddiddid
diddiddiddiddid
diddiddiddid
d idd!idd"idd#idd$idd%idd&id
d'idd(id
d)idd*idd+id,�(ZeZd-d.dd/d0d1d2gZd3Zd4d5d6d7d8d9d:d;d<d=d>d?gZ	d@Z
dAZdBdCdDdEdFgZd�dHdI�Z
dJdK�ZdLdM�ZdNdO�ZdPdQ�ZdRdS�ZdTdU�ZdVdW�Zd�dYdZ�Zd[d\�Zd]d^�Zd_d`�Zdadb�Zdcdd�Zdedf�Zdgdh�Zdidj�Zdkdl�Zd�dmdn�Zdodp�Z d�drds�Z!dtdu�Z"d�dvdw�Z#dxdy�Z$dzd{�Z%d|d}�Z&d~d�Z'd�d��Z(d�d��Z)d�d��Z*d�d�d��Z+d�d�d��Z,d�d��Z-d�d�d��Z.d�d�d��Z/d�d�d��Z0d�d�d��Z1d�d��Z2dGS)��_GlancesCursesz�This class manages the curses display (and key pressed).

    Note: It is a private class, use GlancesCursesClient or GlancesCursesBrowser.
    �switchZdisable_irixZpercpu�disable_left_sidebar�disable_quicklookZmeangpuZtheme_whiteZprocess_short_name�sort_key�autoZdisable_ampsZbyteZdiskio_iopsZcpu_percentZ
disable_cloudZdisable_diskioZdisable_dockerZ
fs_free_space�generate_graphZdisable_gpu�help_tagZio_countersZ
disable_ipZprogramsZdisable_connectionsZ
disable_alertZmemory_percent�reset_minmax_tagZdisable_networkZdisable_now�nameZ
disable_portsZ
enable_irqZ
disable_smartZdisable_raidZdisable_sensorsZ	sparklineZ	cpu_timesZnetwork_sumZusernameZ
network_cumulZdisable_wifi)(�0�1�2�3�6�9�/�a�A�b�B�c�C�d�D�F�g�G�h�i�I�j�K�l�m�M�n�N�p�P�Q�r�R�s�S�t�Tr�U�W�	quicklook�cpu�gpu�mem�memswap�load�DZnetworkZconnectionsZwifiZportsZdiskioZfsZirqZfoldersZraidZsmartZsensorsZnow��"�docker�processcount�amps�processlist�alertNcCs�||_||_d|_d|_d|_d|_tj�|_|jsHt	j
d�tjd�ddi|_
|j|�|j�|j�|jjd	d	�|_d
|_d
|_d
|_d
|_d
|j_d	|j_|jjd�|jjd�d|_|j�dS)N�P���z Cannot init the curses library.
rr�blackrF���)�config�argsZterm_wZterm_h�space_between_column�space_between_line�cursesZinitscrZscreenr
�critical�sys�exit�theme�load_config�_init_cursor�_init_colorsZsubwin�term_window�edit_filter�increase_nice_process�decrease_nice_process�kill_processr�cursor_position�keypadZnodelay�
pressedkey�
_init_history)�selfrWrX�rm�$/usr/lib/python3.6/glances_curses.py�__init__�s2




z_GlancesCurses.__init__cCsL|dk	rH|jd�rHtjd�|jdddd�|jd<tjdj|jd��dS)	z3Load the outputs section of the configuration file.NZoutputsz2Read the outputs section in the configuration fileZcurse_themerU)�defaultrz!Theme for the curse interface: {})Zhas_sectionr
�debugZ	get_valuer_�format)rlrWrmrmrnr`�s
z_GlancesCurses.load_configcCst|jd|�p|jd|kS)z/Return True if the theme *name* should be used.Ztheme_r)�getattrrXr_)rlrrmrmrn�is_theme�sz_GlancesCurses.is_themecCs
d|_dS)zInit the history option.FN)Zreset_history_tag)rlrmrmrnrk�sz_GlancesCurses._init_historycCs2ttd�rtj�ttd�r$tj�|jd�dS)z
Init cursors.�noecho�cbreakrN)�hasattrr[rurv�
set_cursor)rlrmrmrnra�s


z_GlancesCurses._init_cursorc%Cs�y:ttd�r&tj�tjdjtj��ttd�r8tj�Wn2tk
rl}ztj	dj|��WYdd}~XnX|j
jr�d}d|j
_ntj
}||_|tjB|_||_tj��r,|jd�r�tjd	tjd�ntjd	tjd�|j
j�r$tjd
tjd�tjdtjd�tjdtjd�tjd
tjd�nHtjd
tjtj�tjdtjtj�tjdtjtj�tjd
tjtj�tjdtjd�tjdtjd�tjdtjd�tjd	�|_tjd�|B|_tjd
�|_tjd
�|_tjd�|B|_ tjd
�|B|_!tjd
�|B|_"tjd�|_#tjd�|B|_$tjd
�|B|_%tjd�|B|_&||_'||_(tj)dk�r�tjtj*tj+g}x|t,dd�D]n}ytj|d||d�WnLtk
�r�|jd��r�tj|dtjd�ntj|dtjd �YnX�qpWtjd�|_tjd�|_tjd�|B|_%tjd�|B|_'tjd�|B|_(n\tj-|_tj-|_||_||_tj|_ ||_!tj.|_"tj-|_#tj|_$||_%tj.|_&||_'||_(|jtj|tj|B|j#|j#|B|j'|j|j#|j#tjB|j#|j|j|j$|j%|j&|j|j |j!|j"tj/|j(d�|_0dS)!zInit the Curses color layout.�start_colorz*Curses interface compatible with {} colors�use_default_colorsz&Error initializing terminal color ({})NrTZwhiterrTrS������	�
�)ZDEFAULTZ	UNDERLINEZBOLDZSORTZOK�MAX�FILTER�TITLEZPROCESSZPROCESS_SELECTEDZSTATUSZNICEZCPU_TIMEZCAREFULZWARNINGZCRITICALZOK_LOGZCAREFUL_LOGZWARNING_LOGZCRITICAL_LOGZPASSWORDZSELECTEDrVrVrVrVrVrVrVrVrVrVrVrV)1rwr[ryr
rqrrZCOLORSrz�	Exception�warningrXZdisable_boldZ
disable_bg�A_BOLDZtitle_colorZA_UNDERLINEZtitle_underline_colorZ
help_colorZ
has_colorsrtZ	init_pairZCOLOR_BLACKZCOLOR_WHITEZ	COLOR_REDZCOLOR_GREENZ
COLOR_BLUEZ
COLOR_MAGENTAZ
color_pairZno_colorZ
default_colorZ
nice_colorZcpu_time_colorZifCAREFUL_colorZifWARNING_colorZifCRITICAL_colorZdefault_color2ZifCAREFUL_color2ZifWARNING_color2ZifCRITICAL_color2Zfilter_colorZselected_colorZCOLOR_PAIRSZ
COLOR_CYANZCOLOR_YELLOW�rangeZA_NORMALZ	A_REVERSEZ	A_PROTECT�colors_list)rl�er�r�r/rmrmrnrb�s�

"



 
z_GlancesCurses._init_colorscCs2ttd�r.ytj|�Wntk
r,YnXdS)zpConfigure the curse cursor appearance.

        0: invisible
        1: visible
        2: very visible
        �curs_setN)rwr[r�r�)rl�valuermrmrnrxMs

z_GlancesCurses.set_cursorcCs|j�}|S)N)Zgetch)rlZwindow�retrmrmrn�get_keyZsz_GlancesCurses.get_keyFcCs�|j|j�|_|jd krd!Stjdj|j���xL|jD�]@}|jt|�koXd|j|k�r:dj|j|dj	d�dd��}|j|dj
d�r�t|j|j|d�r�t
|j|�nt|j|�nv|j|dj
d��rt|j|j|d��rt|j|�nt
|j|�n,t|j|j|dt|j|j|d��|jt|�kr8d|j|kr8tj|j|d|j|ddk�q8W|jtd	�k�r�|j|_�n0|jtd
�k�r�|jj|j_|jj�r�|j�n|j��n�|jtd�k�r|jj|j_|jj�r|j�n|j��n�|jtd�k�r4|j��n�|jtd
�k�rr|jj|j_|jj�sftj�ntj��nZ|jtd�k�r�dt_�n@|jtd�k�r�|jj|j_|jj|j_�n|jtd�k�r�|j|_�n�|jtd�k�r�|j |_ �n�|jtd�k�r|j!|_!�n�|jtd�k�r2t"j#��n�|jtd�k�rRt"j#dd��nz|jtd�k�r�|jj$|j_$|jj$�r�tj�ntj
��n<|jt%j&k�r�|j'�dt(|j)�}tj|j)|d��n|jt%j*k�r|j'�dt(|j)�}tj|j)|d�n�|jt%j+k�s|jdk�r<|jj,dk�r�|jj,d8_,n�|jt%j-k�sV|jdk�rx|jj,tj.k�r�|jj,d7_,nT|jtd�k�s�|jtd�k�r�|�r�tj/d�ntj/dj|j��n|jt%j0k�r�|jS)"NrzKeypressed (code: {})r�_�disable_�enable_rr�
�4�5r!r��E�f�+�-�k�w�xT)r\�zF�Ar�B��qz-Stop Glances client and return to the browserzStop Glances (keypressed: {})rVrV)1r�rcrjr
rqrr�_hotkeys�ord�join�split�
startswithrsrXrr�setattrrZset_sort_keyrd�full_quicklook�enable_fullquicklook�disable_fullquicklook�disable_top�
enable_toprb�enable_process_extendedZdisable_extendedZenable_extended�process_filterZ
disable_fsZdisable_foldersrerfrgrZcleanZdisable_processr[ZKEY_LEFT�
loop_position�len�
_sort_loopZ	KEY_RIGHT�KEY_UPrh�KEY_DOWNZprocesses_count�info�KEY_F5)rl�return_to_browserZhotkeyZoptionZ	next_sortrmrmrnZ__catch_key_s�
"$








 z_GlancesCurses.__catch_keycCs*x$t|j�D]\}}|tjkr|SqWdS)z#Return the current sort in the loopr)�	enumerater�rr)rlr/�vrmrmrnr��s
z_GlancesCurses.loop_positioncCs$xd
D]}t|jd|d�qWd	S)zDisable the top panelrCrDrErFrGrHr�TN)rCrDrErFrGrH)r�rX)rlr8rmrmrnr��s
z_GlancesCurses.disable_topcCs$xd
D]}t|jd|d�qWd	S)zEnable the top panelrCrDrErFrGrHr�FN)rCrDrErFrGrH)r�rX)rlr8rmrmrnr��s
z_GlancesCurses.enable_topcCs$xd	D]}t|jd|d�qWdS)
zDisable the full quicklook moderCrDrErFrGr�FN)rCrDrErFrG)r�rX)rlr8rmrmrnr��s
z$_GlancesCurses.disable_fullquicklookcCs,d|j_xd	D]}t|jd|d�qWdS)
zDisable the full quicklook modeFrDrErFrGr�TN)rDrErFrG)rXrr�)rlr8rmrmrnr��s
z#_GlancesCurses.enable_fullquicklookcCs^ttd�rtj�ttd�r$tj�ttd�rRytjd�Wntk
rPYnXtj�dS)zShutdown the curses window.�echo�nocbreakr�rN)rwr[r�r�r�r�Zendwin)rlrmrmrn�end�s


z_GlancesCurses.endcCs|j�|j�dS)z;Init the line and column position for the curses interface.N)�	init_line�init_column)rlrmrmrn�init_line_columnsz_GlancesCurses.init_line_columncCsd|_d|_dS)z0Init the line position for the curses interface.rN)�line�	next_line)rlrmrmrnr�
sz_GlancesCurses.init_linecCsd|_d|_dS)z2Init the column position for the curses interface.rN)�column�next_column)rlrmrmrnr�sz_GlancesCurses.init_columncCs|j|_dS)z!New line in the curses interface.N)r�r�)rlZ	separatorrmrmrn�new_linesz_GlancesCurses.new_linecCs|j|_dS)z#New column in the curses interface.N)r�r�)rlrmrmrn�
new_columnsz_GlancesCurses.new_columnr�cCsd|jjsdS|j�|jd8_|jj�d|j}|jj|j|jtd|j�|||j	|�dS)z+New separator line in the curses interface.NrZMEDIUM_LINE)
rXZenable_separatorr�r�rc�getmaxyxr��addnstrrr�)rlZcolorZ
line_widthrmrmrn�separator_linesz_GlancesCurses.separator_linecCs~i}xt|jdd�D]d}|dks|dkr(qd}||jkr\t|j|jj�dd�}t|j|�}|j|�j	|j
|d�||<qW|S)	aReturn a dict of dict with all the stats display.
        # TODO: Drop extra parameter

        :param stats: Global stats dict
        :param layer: ~ cs_status
            "None": standalone or server mode
            "Connected": Client is connected to a Glances server
            "SNMP": Client is connected to a SNMP server
            "Disconnected": Client is disconnected from the server

        :returns: dict of dict
            * key: plugin name
            * value: dict returned by the get_stats_display Plugin method
        F)rrCrONr�i)rX�	max_width)ZgetPluginsList�
_left_sidebar�max�_left_sidebar_min_widthrcr��min�_left_sidebar_max_width�
get_plugin�get_stats_displayrX)rl�stats�layerr�r8Zplugin_max_widthrmrmrnZ__get_stat_display+s
z!_GlancesCurses.__get_stat_displayc
Cs�|j�||j_|j||d�}|jj�ddd|kr:dn|j|d�d|krTdn|j|d�d|krndn|j|d�d|kr�dn|j|d�}y|jjr�|d8}Wntk
r�YnX|dkr�d}t	j
d	ks�t	j
|kr�tjd
j
|��|t	_
|jd�j|jd�|d<|jj�r8|j|jd
�j|jd��dS|j|�|j�|j||�|j�|j�|j|�|j|�|j�r�|d	k�r�|jd#dt	jd�}|t	_n|j�r�|d	k	�r�|jd�d|_|j�r�|d	k�r�|j|jd�j�|jj�d|_|j �r*|d	k�r*|j!|jd�j�|jj�d|_ |j"�r`|d	k�r`|j#|jd�j�|jj�n|j"�r||d	k	�r||jd�d|_"|jj$�r�|jdj
|jj%��dS)$a�Display stats on the screen.

        :param stats: Stats database to display
        :param cs_status:
            "None": standalone or server mode
            "Connected": Client is connected to a Glances server
            "SNMP": Client is connected to a SNMP server
            "Disconnected": Client is disconnected from the server

        :return: True if the stats have been displayed else False if the help have been displayed
        )r�rr�rLrMrNrPr{Nz'Set number of displayed processes to {}rO)rX�helpFzProcess filter pattern: 

z
Examples:
z
- .*python.*
z
- /usr/lib.*
z- name:.*nautilus.*
z- cmdline:.*glances.*
z- username:nicolargo
z- username:^root        �input)�
popup_type�input_valuez0Process filter only available in standalone modez/Kill process only available for local processeszGenerate graph in {}Tz$Process filter pattern: 

Examples:
z1Process filter pattern: 

Examples:
- .*python.*
z>Process filter pattern: 

Examples:
- .*python.*
- /usr/lib.*
zRProcess filter pattern: 

Examples:
- .*python.*
- /usr/lib.*
- name:.*nautilus.*
zhProcess filter pattern: 

Examples:
- .*python.*
- /usr/lib.*
- name:.*nautilus.*
- cmdline:.*glances.*
z}Process filter pattern: 

Examples:
- .*python.*
- /usr/lib.*
- name:.*nautilus.*
- cmdline:.*glances.*
- username:nicolargo
z�Process filter pattern: 

Examples:
- .*python.*
- /usr/lib.*
- name:.*nautilus.*
- cmdline:.*glances.*
- username:nicolargo
- username:^root        )&r�rX�	cs_status� _GlancesCurses__get_stat_displayrcr��get_stats_display_heightr��AttributeErrorrZ
max_processesr
rqrrr�r�r�display_plugin�_GlancesCurses__display_headerr��_GlancesCurses__display_topr��_GlancesCurses__display_left�_GlancesCurses__display_rightrd�
display_popupZprocess_filter_inputr�re�
nice_increaseZget_rawrhrf�
nice_decreaserg�killrZexport_graph_path)rlr�r�Z_GlancesCurses__stat_displayZmax_processes_displayedZ
new_filterrmrmrn�displayMs`

z







z_GlancesCurses.displaycCstj|d�dS)N�pid)rr�)rl�processrmrmrnr��sz_GlancesCurses.nice_increasecCstj|d�dS)Nr�)rr�)rlr�rmrmrnr��sz_GlancesCurses.nice_decreasecCs�tjdj|��d|kr"|d}n
|dg}|jdj|ddjtt|���dd�}|j�jd	�r�xb|D]Z}yt	j
|�}Wn4tk
r�}ztjd
j||��WYdd}~XqfXtj
dj||��qfWdS)
z�Kill a process, or a list of process if the process has a childrens field.

        :param process
        :return: None
        zSelected process to kill: {}Z	childrensr�z4Kill process: {} (pid: {}) ?

Confirm ([y]es/[n]o): rz, �yesno)r��yzCan not kill process {} ({})Nz9Kill signal has been sent to process {} (return code: {}))r
rqrrr�r��map�str�lowerr�rr�r��errorr�)rlr�Zpid_to_killZconfirmr�Zret_killr�rmrmrnr��s 


$z_GlancesCurses.killcCs�|j�d|_d}x&dD]}||kr||j||�7}qW|j|d|jj�d|kd�d|_d|kr�|j�|j|d|jj�ddkd�|j�|j|d|j|d	�dkd
�|j�|j|d	�dkr�|j�|j|d	�dS)
zqDisplay the firsts lines (header) in the Curses interface.

        system + ip + uptime
        (cloud)
        rr�system�ip�uptime)�display_optionalrS�dZcloud)�	add_spaceN)r�r�r�)r�rY�get_stats_display_widthr�rcr�r�r�)rl�stat_displayZl_uptimer/rmrmrnZ__display_header�s$
  z_GlancesCurses.__display_headerc
s��j��j�dgi�d<i}x8�jD].}t�jd|�rN�j�j|d��nd||<q(Wtt|��}t��fdd��jD��}�jj	�sp�jj
r��jj�d|d|�j
}n,t�jj�d|d|�j
�jd	�}y|jd�j|�jd
��d<Wn2tk
�r0}ztjd|�WYdd}~Xn$X�j�d�|d<tt|��d}d�_
�j�d��j�i}	x�jD]}d
|	|<�q|W|dk�rFtdt�jj�d||d���_
x�dD]|}�j
dk�r�d|	|<t�jd|��r�j�|d
d�nd||<tt|��d}tdt�jj�d||d���_
�q�Wnd�_
xP�jD]F}|dk�rf�qT|�k�r��j�||	|d�|dk�rT�j��qTWd�_
�j�_dS)zwDisplay the second line in the Curses interface.

        <QUICKLOOK> + CPU|PERCPU + <GPU> + MEM + SWAP + LOAD
        �msgdictrCr�rcs0g|](}t�jd|�st�|dgk��qS)r�r�)rsrX�int)�.0r8)rlr�rmrn�
<listcomp>'sz0_GlancesCurses.__display_top.<locals>.<listcomp>rrr|)r�rXz#Quicklook plugin not available (%s)NTrFrDrSF)�without_option)r�rH)rFrD)r�r��_toprwrXr��get�sumrrr�rcr�rYr��_quicklook_max_widthr�r�r�r
rqr�r�r�r�r��
saved_line)
rlr�r�Z
plugin_widthsr8Zstats_widthZstats_numberZquicklook_widthr�Zplugin_display_optionalrm)rlr�rnZ
__display_topsb.

 
&
$,


z_GlancesCurses.__display_topcCsf|j�|jjrdSxL|jD]B}t|jd|�s@t|jd|�r||kr|j�|j||�qWdS)z1Display the left sidebar in the Curses interface.Nr�r�)r�rXrr�rwr�r�)rlr�r8rmrmrnZ__display_leftis(z_GlancesCurses.__display_leftc	Cs�|jj�d|jkrdS|j|_|j�x�|jD]�}t|jd|�sTt|jd|�r0||kr0||krfq0|j	�|dkr�|j
|d|jj�ddkt|jj�d|j|d�d	d
�q0|j
||�q0WdS)zwDisplay the right sidebar in the Curses interface.

        docker + processcount + amps + processlist + alert
        rNr�r�rO�frrPrT)r��display_additional�max_y)
rcr�r�r�r�r��_right_sidebarrwrXr�r�rr�)rlr�r8rmrmrnZ__display_rightus (&z_GlancesCurses.__display_rightrSr��cCsr|jd�}|dkr6tt|td��d}|dkr6||7}|dkrJt|�d}|jj�d}	|jj�d}
||	ksv||
krzdSt|	|d	�}t|
|d	�}tj||||�}
|
j�x,t	|�D] \}}|
j
d	|d	|t|��q�W|d
k�r|
j�|j|d�dS|dk�r�|
j
d|d	d	t|��}|j|jd
�|dk	�rT|j
dd|t|��|
j�|j�|jd	�|jjd�t|dd�}|j�|jd�|j�dk�r�tjd|j��|j�dd�Stjd�dSn�|dk�rn|
j
dd	t|�dt|�d	�}|j|jd
�|j
dddd�|
j�|j�|jd	�|jjd�t|dd�}|j�|jd�|j�SdS)a*
        Display a centered popup.

         popup_type: ='info'
         Just an information popup, no user interaction
         Display a centered popup with the given message during duration seconds
         If size_x and size_y: set the popup size
         else set it automatically
         Return True if the popup could be displayed

        popup_type='input'
         Display a centered popup with the given message and a input field
         If size_x and size_y: set the popup size
         else set it automatically
         Return the input string or None if the field is empty

        popup_type='yesno'
         Display a centered popup with the given message
         If size_x and size_y: set the popup size
         else set it automatically
         Return True (yes) or False (no)
        r�N)�keyr{r�rrFrTr�i�Tr�)Zinsert_mode�z$User enters the following string: %szUser centers an empty stringr�rV)r�r�r�rcr�r�r[ZnewwinZborderr�r�Zrefresh�waitZderwinZattronr�rxri�GlancesTextboxZeditZgatherr
rq�GlancesTextboxYesNo)rl�messageZsize_xZsize_y�durationr�Z
input_sizer�Z
sentence_list�screen_x�screen_yZpos_xZpos_yZpopupr�r4Zsub_popZtextboxrmrmrnr��sd







 

z_GlancesCurses.display_popupT�rcCs�|dks|ds|dr dS|jj�d}|jj�d}|ddkrX||j|�}n|j}|ddkrz||j|�}	n|j}	|}
|
}|	}�x4|dD�]&}
y |
d	jd
�r�|d7}|}
w�WnYnX|
dkr�q�|
dr�|
t|
d	�|kr�q�|dk�s|d|k�s||k�rP|�r.|
d�r.q�|�rB|
d
�rBq�y*|jj||
|
d	||
|j	|
d�Wnt
k
�r�Yq�Xy|
tt|
d	��7}
Wntk
�r�YnX|
|kr�|
}q�Wt
|j||j�|_t
|j||j�|_|j|7_dS)aFDisplay the plugin_stats on the screen.

        :param plugin_stats:
        :param display_optional: display the optional stats if True
        :param display_additional: display additional stats if True
        :param max_y: do not display line > max_y
        :param add_space: add x space (line) after the plugin
        Nr�r�rrZalign�rightZbottom�msgr�Z
splittable�optionalZ
additionalZ
decoration)rcr�r�r�r�r�r�r�r�r�r�r�UnicodeDecodeErrorr�r�rYr�rZ)rlZplugin_statsr�rrr�rrZ	display_xZ	display_yr�Zx_maxr�r4rmrmrnr��sb"z_GlancesCurses.display_plugincCs|jj�dS)z Erase the content of the screen.N)rc�clear)rlrmrmrn�eraseVsz_GlancesCurses.erasecCs|j�|j||d�dS)aClear and update the screen.

        :param stats: Stats database to display
        :param cs_status:
            "None": standalone or server mode
            "Connected": Client is connected to the server
            "Disconnected": Client is disconnected from the server
        )r�N)rr�)rlr�r�rmrmrn�flushZs	z_GlancesCurses.flushcCs�|j||d�|dkr$tjd�d}d}t|�}|jjd�x�|j�r�|r�|j|d�}|td�kpp|td	�k}|t	j
kr�|S|t	jd
t	jdfkr�|j
�|r�|jjr�|jj|j_d}|S|r>|dkr>|j||d�|jt|j�d
�d�q>W|S)aUpdate the screen.

        :param stats: Stats database to display
        :param duration: duration of the loop
        :param cs_status:
            "None": standalone or server mode
            "Connected": Client is connected to the server
            "Disconnected": Client is disconnected from the server
        :param return_to_browser:
            True: Do not exist, return to the browser list
            False: Exit and return to the shell

        :return: True if exit key has been pressed else False
        )r�rz0Update and export time higher than refresh_time.g�������?Fr�)r�r�r�r�r�ri�)�delayrV)rr
r�rrcZtimeoutZfinished�_GlancesCurses__catch_keyr�r[r�r�r��resetrXrrr�r�)rlr�r
r�r�Z	isexitkeyZ	countdownrjrmrmrn�updatefs,

z_GlancesCurses.updater�cCstjd�dS)zWait delay in msr�N)r[Znapms)rlrrmrmrnr�sz_GlancesCurses.waitcCs�y^|r2ttdjdd�|dD��jd�td��}n*ttdjdd�|dD��jd�td��}Wn0tk
r�}ztjdj|��d	Sd
}~XnX|Sd
S)z1Return the width of the formatted curses message.rcSs4g|],}|ds,ttt|d��jdd��nd�qS)rr�ascii�replacer)rr�encode)r�r/rmrmrnr��sz:_GlancesCurses.get_stats_display_width.<locals>.<listcomp>r�r�)rcSs(g|] }ttt|d��jdd���qS)rrr)rrr)r�r/rmrmrnr��sz(ERROR: Can not compute plugin width ({})rN)r�r�r�r�r�r
rqrr)rl�	curse_msgr�r'r�rmrmrnr��s&z&_GlancesCurses.get_stats_display_widthcCsZydd�|dD�jd�}Wn0tk
rL}ztjdj|��dSd}~Xn
X|dSdS)	z{Return the height of the formatted curses message.

        The height is defined by the number of '
' (new line).
        cSsg|]}|d�qS)rrm)r�r/rmrmrnr��sz;_GlancesCurses.get_stats_display_height.<locals>.<listcomp>r�r�z)ERROR: Can not compute plugin height ({})rNr)�countr�r
rqrr)rlrr'r�rmrmrnr��sz'_GlancesCurses.get_stats_display_height)NN)F)F)r�)N)NNrSr�rN)TTr
r)N)rSNF)r�)F)3�__name__�
__module__�__qualname__�__doc__r�r
r�r�r�r�r�r�rror`rtrkrarbrxr�rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrr�r�rmrmrmrnr#s�
;	w

}


"
Y!
a
_

9

 rc@seZdZdZdS)�GlancesCursesStandalonez'Class for the Glances curse standalone.N)rrr r!rmrmrmrnr"�sr"c@seZdZdZdS)�GlancesCursesClientz#Class for the Glances curse client.N)rrr r!rmrmrmrnr#�sr#cs(eZdZ�fdd�Z�fdd�Z�ZS)rcstt|�j||�dS)N)�superrro)rlrX�kwargs)�	__class__rmrnro�szGlancesTextbox.__init__cs(|dkrdS|dkrdStt|�j|�S)Nr�r�r)r$r�
do_command)rl�ch)r&rmrnr(�s
zGlancesTextbox.do_command)rrr ror(�
__classcell__rmrm)r&rnr�srcs(eZdZ�fdd�Z�fdd�Z�ZS)rcstt|�j||�dS)N)r$rro)rlrXr%)r&rmrnro�szGlancesTextboxYesNo.__init__cstt|�j|�S)N)r$rr()rlr))r&rmrnr(�szGlancesTextboxYesNo.do_command)rrr ror(r*rmrm)r&rnr�sr)%r!Z
__future__rr]Zglances.compatrrrrrZglances.globalsrr	Zglances.loggerr
Zglances.eventsrZglances.processesrr
Zglances.outputs.glances_unicoderZ
glances.timerrr[Zcurses.panelZcurses.textpadr�ImportErrorr\r^�objectrr"r#rrrmrmrmrn�<module>
s@

7