o
    va'                     @   s   d 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 ddd	d
dd	ddd	ddd	dZddddZdddddddddgZG dd de	ZdS )zLoad plugin.    N)	iteritems)Plugin)GlancesPlugin)loggerzrAverage sum of the number of processes waiting in the run-queue plus the number currently executing over 1 minute.float)descriptionZunitzsAverage sum of the number of processes waiting in the run-queue plus the number currently executing over 5 minutes.ztAverage sum of the number of processes waiting in the run-queue plus the number currently executing over 15 minutes.zTotal number of CPU core.Znumbermin1min5min15cpucorez1.3.6.1.4.1.2021.10.1.3.1z1.3.6.1.4.1.2021.10.1.3.2z1.3.6.1.4.1.2021.10.1.3.3)r	   r
   r   r	   z1 minute load)namer   r
   z5 minutes loadr   z15 minutes loadc                       sT   e Zd ZdZd fdd	Zdd Zejejdd Z	 fd	d
Z
dddZ  ZS )r   z.Glances load plugin.

    stats is a dict
    Nc              
      sx   t t| j||ttd d| _zt| jd d | _	W dS  t
y; } ztd| d| _	W Y d}~dS d}~ww )zInit the plugin.)argsconfigitems_history_listfields_descriptionT)r   logz>Error: Can not retrieve the CPU core number (set it to 1) ({})   N)superr   __init__r   r   Zdisplay_curse
CorePluginr   updatenb_log_core	Exceptionr   Zwarningformat)selfr   r   e	__class__ >/usr/lib/python3/dist-packages/glances/plugins/glances_load.pyr   H   s   zPlugin.__init__c              	   C   sB   zt  W S  ty   Y nw zt W S  ttfy    Y dS w )z<Get load average. On both Linux and Windows thanks to PsUtilN)psutil
getloadavgAttributeErrorosOSErrorr   r   r   r    _getloadavgY   s   

zPlugin._getloadavgc                 C   s   |   }| jdkr%|  }|du r|   }n:|d |d |d | jd}n+| jdkrP| jtd}|d	 d
kr<|   }|S t|D ]
\}}t|||< q@| j|d< || _| jS )zUpdate load stats.ZlocalNr   r      r   Zsnmp)snmp_oidr	    r   )	Zget_init_valueZinput_methodr'   r   Zget_stats_snmpr)   r   r   stats)r   r+   loadkvr   r   r    r   d   s(   



zPlugin.updatec                    sz   t t|   z+| j| jd d| jd  d| jd d< | j| jd d| jd  d| jd d< W dS  ty<   Y dS w )zUpdate stats views.r   d   r   )Zmaximum
decorationr
   N)r   r   update_viewsZget_alert_logr+   ZviewsZ	get_alertKeyErrorr&   r   r   r    r1      s   zPlugin.update_viewsc              
   C   sJ  g }| j r| j i ks|  r|S d|jr| jdkrdnd}|| |d d| j v rF| j d dkrFdt| j d }|| | dD ]Z}||   d	d
|}|| | |jrw| jdkrw| j d| | j d }n| j d| }d|}|dkr|| | qH|| || j	d|dd qH|S )z2Return the dict to display in the curse interface.z{:6}r   zLOAD%ZLOADZTITLEr   z	{:3}-core)15Z15z{:8}z{} min:zmin{}r/   z{:>6.2f}r3   r0   )keyoption)
r+   Zis_disabledr   Zdisable_irixr   appendZcurse_add_lineintZcurse_new_lineZ	get_views)r   r   Z	max_widthretmsgZ	load_timeZ	load_statr   r   r    	msg_curse   s0   
zPlugin.msg_curse)NN)__name__
__module____qualname____doc__r   r'   r   Z_check_decoratorZ_log_result_decoratorr   r1   r;   __classcell__r   r   r   r    r   B   s    &r   )r?   r$   r!   Zglances.compatr   Zglances.plugins.glances_corer   r   Zglances.plugins.glances_pluginr   Zglances.loggerr   r   r)   r   r   r   r   r    <module>   sF   