Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
蜕变的菜鸟
glances
提交
00386aa1
G
glances
项目概览
蜕变的菜鸟
/
glances
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
glances
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
00386aa1
编写于
10月 15, 2017
作者:
N
nicolargo
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Docstings of plugins are now PEP 257 compliant
上级
1114e128
变更
31
隐藏空白更改
内联
并排
Showing
31 changed file
with
136 addition
and
155 deletion
+136
-155
glances/plugins/glances_alert.py
glances/plugins/glances_alert.py
+5
-4
glances/plugins/glances_amps.py
glances/plugins/glances_amps.py
+0
-1
glances/plugins/glances_batpercent.py
glances/plugins/glances_batpercent.py
+0
-2
glances/plugins/glances_cloud.py
glances/plugins/glances_cloud.py
+9
-9
glances/plugins/glances_core.py
glances/plugins/glances_core.py
+0
-1
glances/plugins/glances_cpu.py
glances/plugins/glances_cpu.py
+0
-2
glances/plugins/glances_diskio.py
glances/plugins/glances_diskio.py
+0
-1
glances/plugins/glances_docker.py
glances/plugins/glances_docker.py
+15
-13
glances/plugins/glances_folders.py
glances/plugins/glances_folders.py
+1
-3
glances/plugins/glances_fs.py
glances/plugins/glances_fs.py
+0
-1
glances/plugins/glances_gpu.py
glances/plugins/glances_gpu.py
+12
-13
glances/plugins/glances_hddtemp.py
glances/plugins/glances_hddtemp.py
+0
-2
glances/plugins/glances_help.py
glances/plugins/glances_help.py
+2
-1
glances/plugins/glances_ip.py
glances/plugins/glances_ip.py
+4
-4
glances/plugins/glances_irq.py
glances/plugins/glances_irq.py
+10
-19
glances/plugins/glances_load.py
glances/plugins/glances_load.py
+0
-1
glances/plugins/glances_mem.py
glances/plugins/glances_mem.py
+0
-1
glances/plugins/glances_memswap.py
glances/plugins/glances_memswap.py
+0
-1
glances/plugins/glances_network.py
glances/plugins/glances_network.py
+0
-1
glances/plugins/glances_now.py
glances/plugins/glances_now.py
+2
-1
glances/plugins/glances_percpu.py
glances/plugins/glances_percpu.py
+0
-1
glances/plugins/glances_plugin.py
glances/plugins/glances_plugin.py
+44
-30
glances/plugins/glances_ports.py
glances/plugins/glances_ports.py
+14
-17
glances/plugins/glances_processcount.py
glances/plugins/glances_processcount.py
+0
-1
glances/plugins/glances_processlist.py
glances/plugins/glances_processlist.py
+10
-15
glances/plugins/glances_psutilversion.py
glances/plugins/glances_psutilversion.py
+2
-0
glances/plugins/glances_quicklook.py
glances/plugins/glances_quicklook.py
+2
-3
glances/plugins/glances_raid.py
glances/plugins/glances_raid.py
+0
-1
glances/plugins/glances_sensors.py
glances/plugins/glances_sensors.py
+2
-3
glances/plugins/glances_uptime.py
glances/plugins/glances_uptime.py
+0
-1
glances/plugins/glances_wifi.py
glances/plugins/glances_wifi.py
+2
-2
未找到文件。
glances/plugins/glances_alert.py
浏览文件 @
00386aa1
...
...
@@ -23,7 +23,7 @@ from datetime import datetime
from
glances.logs
import
glances_logs
from
glances.thresholds
import
glances_thresholds
from
glances.logger
import
logger
#
from glances.logger import logger
from
glances.plugins.glances_plugin
import
GlancesPlugin
# Static decision tree for the global alert message
...
...
@@ -61,8 +61,10 @@ tree = [{'msg': 'No warning or critical alert detected',
def
global_message
():
"""Parse the decision tree and return the message
corresponding to the current threasholds values"""
"""Parse the decision tree and return the message.
Note: message corresponding to the current threasholds values
"""
# Compute the weight for each item in the tree
current_thresholds
=
glances_thresholds
.
get
()
for
i
in
tree
:
...
...
@@ -76,7 +78,6 @@ def global_message():
class
Plugin
(
GlancesPlugin
):
"""Glances alert plugin.
Only for display.
...
...
glances/plugins/glances_amps.py
浏览文件 @
00386aa1
...
...
@@ -25,7 +25,6 @@ from glances.plugins.glances_plugin import GlancesPlugin
class
Plugin
(
GlancesPlugin
):
"""Glances AMPs plugin."""
def
__init__
(
self
,
args
=
None
,
config
=
None
):
...
...
glances/plugins/glances_batpercent.py
浏览文件 @
00386aa1
...
...
@@ -42,7 +42,6 @@ except AttributeError:
class
Plugin
(
GlancesPlugin
):
"""Glances battery capacity plugin.
stats is a list
...
...
@@ -87,7 +86,6 @@ class Plugin(GlancesPlugin):
class
GlancesGrabBat
(
object
):
"""Get batteries stats using the batinfo library."""
def
__init__
(
self
):
...
...
glances/plugins/glances_cloud.py
浏览文件 @
00386aa1
...
...
@@ -38,7 +38,6 @@ from glances.logger import logger
class
Plugin
(
GlancesPlugin
):
"""Glances' cloud plugin.
The goal of this plugin is to retreive additional information
...
...
@@ -70,7 +69,7 @@ class Plugin(GlancesPlugin):
self
.
stats
=
{}
def
exit
(
self
):
"""Overwrite the exit method to close threads"""
"""Overwrite the exit method to close threads
.
"""
self
.
aws_ec2
.
stop
()
# Call the father class
super
(
Plugin
,
self
).
exit
()
...
...
@@ -137,7 +136,7 @@ class ThreadAwsEc2Grabber(threading.Thread):
'region'
:
'placement/availability-zone'
}
def
__init__
(
self
):
"""Init the class"""
"""Init the class
.
"""
logger
.
debug
(
"cloud plugin - Create thread for AWS EC2"
)
super
(
ThreadAwsEc2Grabber
,
self
).
__init__
()
# Event needed to stop properly the thread
...
...
@@ -146,9 +145,10 @@ class ThreadAwsEc2Grabber(threading.Thread):
self
.
_stats
=
{}
def
run
(
self
):
"""Function called to grab stats.
Infinite loop, should be stopped by calling the stop() method"""
"""Grab plugin's stats.
Infinite loop, should be stopped by calling the stop() method
"""
if
not
cloud_tag
:
logger
.
debug
(
"cloud plugin - Requests lib is not installed"
)
self
.
stop
()
...
...
@@ -170,19 +170,19 @@ class ThreadAwsEc2Grabber(threading.Thread):
@
property
def
stats
(
self
):
"""Stats getter"""
"""Stats getter
.
"""
return
self
.
_stats
@
stats
.
setter
def
stats
(
self
,
value
):
"""Stats setter"""
"""Stats setter
.
"""
self
.
_stats
=
value
def
stop
(
self
,
timeout
=
None
):
"""Stop the thread"""
"""Stop the thread
.
"""
logger
.
debug
(
"cloud plugin - Close thread for AWS EC2"
)
self
.
_stopper
.
set
()
def
stopped
(
self
):
"""Return True is the thread is stopped"""
"""Return True is the thread is stopped
.
"""
return
self
.
_stopper
.
isSet
()
glances/plugins/glances_core.py
浏览文件 @
00386aa1
...
...
@@ -25,7 +25,6 @@ import psutil
class
Plugin
(
GlancesPlugin
):
"""Glances CPU core plugin.
Get stats about CPU core number.
...
...
glances/plugins/glances_cpu.py
浏览文件 @
00386aa1
...
...
@@ -57,7 +57,6 @@ items_history_list = [{'name': 'user',
class
Plugin
(
GlancesPlugin
):
"""Glances CPU plugin.
'stats' is a dictionary that contains the system-wide CPU utilization as a
...
...
@@ -88,7 +87,6 @@ class Plugin(GlancesPlugin):
@
GlancesPlugin
.
_log_result_decorator
def
update
(
self
):
"""Update CPU stats using the input method."""
# Reset stats
self
.
reset
()
...
...
glances/plugins/glances_diskio.py
浏览文件 @
00386aa1
...
...
@@ -41,7 +41,6 @@ items_history_list = [{'name': 'read_bytes',
class
Plugin
(
GlancesPlugin
):
"""Glances disks I/O plugin.
stats is a list
...
...
glances/plugins/glances_docker.py
浏览文件 @
00386aa1
...
...
@@ -40,7 +40,6 @@ else:
class
Plugin
(
GlancesPlugin
):
"""Glances Docker plugin.
stats is a dict: {'version': {...}, 'containers': [{}, {}]}
...
...
@@ -68,7 +67,7 @@ class Plugin(GlancesPlugin):
self
.
reset
()
def
exit
(
self
):
"""Overwrite the exit method to close threads"""
"""Overwrite the exit method to close threads
.
"""
for
t
in
itervalues
(
self
.
thread_list
):
t
.
stop
()
# Call the father class
...
...
@@ -105,7 +104,7 @@ class Plugin(GlancesPlugin):
self
.
stats
=
{}
def
_all_tag
(
self
):
"""Return the all tag of the Glances/Docker configuration file
"""Return the all tag of the Glances/Docker configuration file
.
# By default, Glances only display running containers
# Set the following key to True to display all containers
...
...
@@ -121,7 +120,6 @@ class Plugin(GlancesPlugin):
@
GlancesPlugin
.
_log_result_decorator
def
update
(
self
):
"""Update Docker stats using the input method."""
# Reset stats
self
.
reset
()
...
...
@@ -410,8 +408,10 @@ class Plugin(GlancesPlugin):
return
os
.
sysconf
(
os
.
sysconf_names
[
'SC_CLK_TCK'
])
def
get_stats_action
(
self
):
"""Return stats for the action
Docker will return self.stats['containers']"""
"""Return stats for the action.
Docker will return self.stats['containers']
"""
return
self
.
stats
[
'containers'
]
def
update_views
(
self
):
...
...
@@ -587,7 +587,8 @@ class ThreadDockerGrabber(threading.Thread):
"""
def
__init__
(
self
,
container
):
"""Init the class:
"""Init the class.
container: instance of Docker-py Container
"""
super
(
ThreadDockerGrabber
,
self
).
__init__
()
...
...
@@ -601,9 +602,10 @@ class ThreadDockerGrabber(threading.Thread):
logger
.
debug
(
"docker plugin - Create thread for container {}"
.
format
(
self
.
_container
.
name
))
def
run
(
self
):
"""Function called to grab stats.
Infinite loop, should be stopped by calling the stop() method"""
"""Grab the stats.
Infinite loop, should be stopped by calling the stop() method
"""
for
i
in
self
.
_stats_stream
:
self
.
_stats
=
i
time
.
sleep
(
0.1
)
...
...
@@ -612,19 +614,19 @@ class ThreadDockerGrabber(threading.Thread):
@
property
def
stats
(
self
):
"""Stats getter"""
"""Stats getter
.
"""
return
self
.
_stats
@
stats
.
setter
def
stats
(
self
,
value
):
"""Stats setter"""
"""Stats setter
.
"""
self
.
_stats
=
value
def
stop
(
self
,
timeout
=
None
):
"""Stop the thread"""
"""Stop the thread
.
"""
logger
.
debug
(
"docker plugin - Close thread for container {}"
.
format
(
self
.
_container
.
name
))
self
.
_stopper
.
set
()
def
stopped
(
self
):
"""Return True is the thread is stopped"""
"""Return True is the thread is stopped
.
"""
return
self
.
_stopper
.
isSet
()
glances/plugins/glances_folders.py
浏览文件 @
00386aa1
...
...
@@ -26,7 +26,6 @@ from glances.plugins.glances_plugin import GlancesPlugin
class
Plugin
(
GlancesPlugin
):
"""Glances folder plugin."""
def
__init__
(
self
,
args
=
None
):
...
...
@@ -76,8 +75,7 @@ class Plugin(GlancesPlugin):
return
self
.
stats
def
get_alert
(
self
,
stat
):
"""Manage limits of the folder list"""
"""Manage limits of the folder list."""
if
not
isinstance
(
stat
[
'size'
],
numbers
.
Number
):
return
'DEFAULT'
else
:
...
...
glances/plugins/glances_fs.py
浏览文件 @
00386aa1
...
...
@@ -66,7 +66,6 @@ items_history_list = [{'name': 'percent',
class
Plugin
(
GlancesPlugin
):
"""Glances file system plugin.
stats is a list
...
...
glances/plugins/glances_gpu.py
浏览文件 @
00386aa1
...
...
@@ -17,7 +17,7 @@
# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
"""GPU plugin (limited to NVIDIA chipsets)"""
"""GPU plugin (limited to NVIDIA chipsets)
.
"""
from
glances.compat
import
nativestr
from
glances.logger
import
logger
...
...
@@ -34,14 +34,13 @@ else:
class
Plugin
(
GlancesPlugin
):
"""Glances GPU plugin (limited to NVIDIA chipsets).
stats is a list of dictionaries with one entry per GPU
"""
def
__init__
(
self
,
args
=
None
):
"""Init the plugin"""
"""Init the plugin
.
"""
super
(
Plugin
,
self
).
__init__
(
args
=
args
)
# Init the NVidia API
...
...
@@ -58,7 +57,7 @@ class Plugin(GlancesPlugin):
self
.
stats
=
[]
def
init_nvidia
(
self
):
"""Init the NVIDIA API"""
"""Init the NVIDIA API
.
"""
if
not
gpu_nvidia_tag
:
self
.
nvml_ready
=
False
...
...
@@ -79,8 +78,7 @@ class Plugin(GlancesPlugin):
@
GlancesPlugin
.
_check_decorator
@
GlancesPlugin
.
_log_result_decorator
def
update
(
self
):
"""Update the GPU stats"""
"""Update the GPU stats."""
self
.
reset
()
# !!! JUST FOR TEST
...
...
@@ -212,7 +210,7 @@ class Plugin(GlancesPlugin):
return
ret
def
get_device_stats
(
self
):
"""Get GPU stats"""
"""Get GPU stats
.
"""
stats
=
[]
for
index
,
device_handle
in
enumerate
(
self
.
device_handles
):
...
...
@@ -232,7 +230,7 @@ class Plugin(GlancesPlugin):
return
stats
def
exit
(
self
):
"""Overwrite the exit method to close the GPU API"""
"""Overwrite the exit method to close the GPU API
.
"""
if
self
.
nvml_ready
:
try
:
pynvml
.
nvmlShutdown
()
...
...
@@ -244,14 +242,15 @@ class Plugin(GlancesPlugin):
def
get_device_handles
():
"""
Returns a list of NVML device handles, one per device. Can throw NVMLError.
"""Get a list of NVML device handles, one per device.
Can throw NVMLError.
"""
return
[
pynvml
.
nvmlDeviceGetHandleByIndex
(
i
)
for
i
in
range
(
pynvml
.
nvmlDeviceGetCount
())]
def
get_device_name
(
device_handle
):
"""Get GPU device name"""
"""Get GPU device name
.
"""
try
:
return
nativestr
(
pynvml
.
nvmlDeviceGetName
(
device_handle
))
except
pynvml
.
NVMlError
:
...
...
@@ -259,7 +258,7 @@ def get_device_name(device_handle):
def
get_mem
(
device_handle
):
"""Get GPU device memory consumption in percent"""
"""Get GPU device memory consumption in percent
.
"""
try
:
memory_info
=
pynvml
.
nvmlDeviceGetMemoryInfo
(
device_handle
)
return
memory_info
.
used
*
100.0
/
memory_info
.
total
...
...
@@ -268,7 +267,7 @@ def get_mem(device_handle):
def
get_proc
(
device_handle
):
"""Get GPU device CPU consumption in percent"""
"""Get GPU device CPU consumption in percent
.
"""
try
:
return
pynvml
.
nvmlDeviceGetUtilizationRates
(
device_handle
).
gpu
except
pynvml
.
NVMLError
:
...
...
glances/plugins/glances_hddtemp.py
浏览文件 @
00386aa1
...
...
@@ -28,7 +28,6 @@ from glances.plugins.glances_plugin import GlancesPlugin
class
Plugin
(
GlancesPlugin
):
"""Glances HDD temperature sensors plugin.
stats is a list
...
...
@@ -72,7 +71,6 @@ class Plugin(GlancesPlugin):
class
GlancesGrabHDDTemp
(
object
):
"""Get hddtemp stats using a socket connection."""
def
__init__
(
self
,
host
=
'127.0.0.1'
,
port
=
7634
,
args
=
None
):
...
...
glances/plugins/glances_help.py
浏览文件 @
00386aa1
...
...
@@ -28,7 +28,6 @@ from glances.plugins.glances_plugin import GlancesPlugin
class
Plugin
(
GlancesPlugin
):
"""Glances help plugin."""
def
__init__
(
self
,
args
=
None
,
config
=
None
):
...
...
@@ -54,6 +53,7 @@ class Plugin(GlancesPlugin):
pass
def
generate_view_data
(
self
):
"""Generate the views."""
self
.
view_data
[
'version'
]
=
'{} {}'
.
format
(
'Glances'
,
__version__
)
self
.
view_data
[
'psutil_version'
]
=
' with PSutil {}'
.
format
(
psutil_version
)
...
...
@@ -103,6 +103,7 @@ class Plugin(GlancesPlugin):
self
.
view_data
[
'edit_pattern_filter'
]
=
'ENTER: Edit the process filter pattern'
def
get_view_data
(
self
,
args
=
None
):
"""Return the view."""
return
self
.
view_data
def
msg_curse
(
self
,
args
=
None
):
...
...
glances/plugins/glances_ip.py
浏览文件 @
00386aa1
...
...
@@ -52,7 +52,6 @@ urls = [('http://ip.42.pl/raw', False, None),
class
Plugin
(
GlancesPlugin
):
"""Glances IP Plugin.
stats is a dict
...
...
@@ -159,13 +158,14 @@ class Plugin(GlancesPlugin):
class
PublicIpAddress
(
object
):
"""Get public IP address from online services"""
"""Get public IP address from online services
.
"""
def
__init__
(
self
,
timeout
=
2
):
"""Init the class."""
self
.
timeout
=
timeout
def
get
(
self
):
"""Get the first public IP address returned by one of the online services"""
"""Get the first public IP address returned by one of the online services
.
"""
q
=
queue
.
Queue
()
for
u
,
j
,
k
in
urls
:
...
...
@@ -182,7 +182,7 @@ class PublicIpAddress(object):
return
ip
def
_get_ip_public
(
self
,
queue_target
,
url
,
json
=
False
,
key
=
None
):
"""Request the url service and put the result in the queue_target"""
"""Request the url service and put the result in the queue_target
.
"""
try
:
response
=
urlopen
(
url
,
timeout
=
self
.
timeout
).
read
().
decode
(
'utf-8'
)
except
Exception
as
e
:
...
...
glances/plugins/glances_irq.py
浏览文件 @
00386aa1
...
...
@@ -28,7 +28,6 @@ from glances.plugins.glances_plugin import GlancesPlugin
class
Plugin
(
GlancesPlugin
):
"""Glances IRQ plugin.
stats is a list
...
...
@@ -56,8 +55,7 @@ class Plugin(GlancesPlugin):
@
GlancesPlugin
.
_check_decorator
@
GlancesPlugin
.
_log_result_decorator
def
update
(
self
):
"""Update the IRQ stats"""
"""Update the IRQ stats."""
# Reset the list
self
.
reset
()
...
...
@@ -117,27 +115,25 @@ class Plugin(GlancesPlugin):
class
GlancesIRQ
(
object
):
"""
This class manages the IRQ file
"""
"""This class manages the IRQ file."""
IRQ_FILE
=
'/proc/interrupts'
def
__init__
(
self
):
"""
Init the class
"""
Init the class.
The stat are stored in a internal list of dict
"""
self
.
lasts
=
{}
self
.
reset
()
def
reset
(
self
):
"""Reset the stats"""
"""Reset the stats
.
"""
self
.
stats
=
[]
self
.
cpu_number
=
0
def
get
(
self
):
"""Return the current IRQ stats"""
"""Return the current IRQ stats
.
"""
return
self
.
__update
()
def
get_key
(
self
):
...
...
@@ -145,7 +141,7 @@ class GlancesIRQ(object):
return
'irq_line'
def
__header
(
self
,
line
):
"""
The header contain the number of CPU
"""
Build the header (contain the number of CPU).
CPU0 CPU1 CPU2 CPU3
0: 21 0 0 0 IO-APIC 2-edge timer
...
...
@@ -154,8 +150,7 @@ class GlancesIRQ(object):
return
self
.
cpu_number
def
__humanname
(
self
,
line
):
"""Get a line and
Return the IRQ name, alias or number (choose the best for human)
"""Return the IRQ name, alias or number (choose the best for human).
IRQ line samples:
1: 44487 341 44 72 IO-APIC 1-edge i8042
...
...
@@ -169,8 +164,7 @@ class GlancesIRQ(object):
return
irq_line
def
__sum
(
self
,
line
):
"""Get a line and
Return the IRQ sum number
"""Return the IRQ sum number.
IRQ line samples:
1: 44487 341 44 72 IO-APIC 1-edge i8042
...
...
@@ -186,10 +180,7 @@ class GlancesIRQ(object):
return
ret
def
__update
(
self
):
"""
Load the IRQ file and update the internal dict
"""
"""Load the IRQ file and update the internal dict."""
self
.
reset
()
if
not
os
.
path
.
exists
(
self
.
IRQ_FILE
):
...
...
glances/plugins/glances_load.py
浏览文件 @
00386aa1
...
...
@@ -48,7 +48,6 @@ items_history_list = [{'name': 'min1',
class
Plugin
(
GlancesPlugin
):
"""Glances load plugin.
stats is a dict
...
...
glances/plugins/glances_mem.py
浏览文件 @
00386aa1
...
...
@@ -56,7 +56,6 @@ items_history_list = [{'name': 'percent',
class
Plugin
(
GlancesPlugin
):
"""Glances' memory plugin.
stats is a dict
...
...
glances/plugins/glances_memswap.py
浏览文件 @
00386aa1
...
...
@@ -44,7 +44,6 @@ items_history_list = [{'name': 'percent',
class
Plugin
(
GlancesPlugin
):
"""Glances swap memory plugin.
stats is a dict
...
...
glances/plugins/glances_network.py
浏览文件 @
00386aa1
...
...
@@ -48,7 +48,6 @@ items_history_list = [{'name': 'rx',
class
Plugin
(
GlancesPlugin
):
"""Glances network plugin.
stats is a list
...
...
glances/plugins/glances_now.py
浏览文件 @
00386aa1
...
...
@@ -17,13 +17,14 @@
# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
"""Now (current date) plugin."""
from
datetime
import
datetime
from
glances.plugins.glances_plugin
import
GlancesPlugin
class
Plugin
(
GlancesPlugin
):
"""Plugin to get the current date/time.
stats is (string)
...
...
glances/plugins/glances_percpu.py
浏览文件 @
00386aa1
...
...
@@ -24,7 +24,6 @@ from glances.plugins.glances_plugin import GlancesPlugin
class
Plugin
(
GlancesPlugin
):
"""Glances per-CPU plugin.
'stats' is a list of dictionaries that contain the utilization percentages
...
...
glances/plugins/glances_plugin.py
浏览文件 @
00386aa1
...
...
@@ -36,7 +36,6 @@ from glances.thresholds import glances_thresholds
class
GlancesPlugin
(
object
):
"""Main class for Glances plugin."""
def
__init__
(
self
,
args
=
None
,
items_history_list
=
None
):
...
...
@@ -61,7 +60,6 @@ class GlancesPlugin(object):
:args: args parameters
:items_history_list: list of items to store in the history
"""
# Plugin name (= module name without glances_)
self
.
plugin_name
=
self
.
__class__
.
__module__
[
len
(
'glances_'
):]
# logger.debug("Init plugin %s" % self.plugin_name)
...
...
@@ -103,11 +101,13 @@ class GlancesPlugin(object):
def
reset
(
self
):
"""Reset the stats.
This method should be overwrited by childs' classes"""
This method should be overwrited by childs' classes.
"""
self
.
stats
=
None
def
exit
(
self
):
"""
Method to be called when Glances exit
"""
"""
Just log an event when Glances exit.
"""
logger
.
debug
(
"Stop the {} plugin"
.
format
(
self
.
plugin_name
))
def
get_key
(
self
):
...
...
@@ -115,7 +115,7 @@ class GlancesPlugin(object):
return
None
def
is_enable
(
self
):
"""Return true if plugin is enabled"""
"""Return true if plugin is enabled
.
"""
try
:
d
=
getattr
(
self
.
args
,
'disable_'
+
self
.
plugin_name
)
except
AttributeError
:
...
...
@@ -124,12 +124,14 @@ class GlancesPlugin(object):
return
d
is
False
def
is_disable
(
self
):
"""Return true if plugin is disabled"""
"""Return true if plugin is disabled
.
"""
return
not
self
.
is_enable
()
def
_json_dumps
(
self
,
d
):
"""Return the object 'd' in a JSON format
Manage the issue #815 for Windows OS"""
"""Return the object 'd' in a JSON format.
Manage the issue #815 for Windows OS
"""
try
:
return
json
.
dumps
(
d
)
except
UnicodeDecodeError
:
...
...
@@ -185,11 +187,13 @@ class GlancesPlugin(object):
return
self
.
items_history_list
def
get_raw_history
(
self
,
item
=
None
,
nb
=
0
):
"""Return
"""Return the history (RAW format).
- the stats history (dict of list) if item is None
- the stats history for the given item (list) instead
- None if item did not exist in the history
Limit to lasts nb items (all if nb=0)"""
Limit to lasts nb items (all if nb=0)
"""
s
=
self
.
stats_history
.
get
(
nb
=
nb
)
if
item
is
None
:
return
s
...
...
@@ -200,11 +204,13 @@ class GlancesPlugin(object):
return
None
def
get_json_history
(
self
,
item
=
None
,
nb
=
0
):
"""Return:
"""Return the history (JSON format).
- the stats history (dict of list) if item is None
- the stats history for the given item (list) instead
- None if item did not exist in the history
Limit to lasts nb items (all if nb=0)"""
Limit to lasts nb items (all if nb=0)
"""
s
=
self
.
stats_history
.
get_json
(
nb
=
nb
)
if
item
is
None
:
return
s
...
...
@@ -216,12 +222,16 @@ class GlancesPlugin(object):
def
get_export_history
(
self
,
item
=
None
):
"""Return the stats history object to export.
See get_raw_history for a full description"""
See get_raw_history for a full description
"""
return
self
.
get_raw_history
(
item
=
item
)
def
get_stats_history
(
self
,
item
=
None
,
nb
=
0
):
"""Return the stats history as a JSON object (dict or None).
Limit to lasts nb items (all if nb=0)"""
"""Return the stats history (JSON format).
Limit to lasts nb items (all if nb=0)
"""
s
=
self
.
get_json_history
(
nb
=
nb
)
if
item
is
None
:
...
...
@@ -245,7 +255,8 @@ class GlancesPlugin(object):
return
None
def
get_trend
(
self
,
item
,
nb
=
6
):
"""Get the trend regarding to the last nb values
"""Get the trend regarding to the last nb values.
The trend is the diff between the mean of the last nb values
and the current one.
"""
...
...
@@ -391,7 +402,7 @@ class GlancesPlugin(object):
return
None
def
update_views
(
self
):
"""
Default builder fo
the stats views.
"""
Update
the stats views.
The V of MVC
A dict of dict with the needed information to display the stats.
...
...
@@ -458,12 +469,11 @@ class GlancesPlugin(object):
return
'DEFAULT'
def
get_json_views
(
self
,
item
=
None
,
key
=
None
,
option
=
None
):
"""Return
views in JSON
"""
"""Return
the views (in JSON).
"""
return
self
.
_json_dumps
(
self
.
get_views
(
item
,
key
,
option
))
def
load_limits
(
self
,
config
):
"""Load limits from the configuration file, if it exists."""
# By default set the history length to 3 points per second during one day
self
.
_limits
[
'history_size'
]
=
28800
...
...
@@ -499,10 +509,12 @@ class GlancesPlugin(object):
self
.
_limits
=
input_limits
def
get_stats_action
(
self
):
"""Return stats for the action
"""Return stats for the action.
By default return all the stats.
Can be overwrite by plugins implementation.
For example, Docker will return self.stats['containers']"""
For example, Docker will return self.stats['containers']
"""
return
self
.
stats
def
get_alert
(
self
,
...
...
@@ -589,7 +601,7 @@ class GlancesPlugin(object):
def
manage_threshold
(
self
,
stat_name
,
trigger
):
"""Manage the threshold for the current stat"""
"""Manage the threshold for the current stat
.
"""
glances_thresholds
.
add
(
stat_name
,
trigger
)
# logger.info(glances_thresholds.get())
...
...
@@ -598,7 +610,7 @@ class GlancesPlugin(object):
trigger
,
header
,
action_key
):
"""Manage the action for the current stat"""
"""Manage the action for the current stat
.
"""
# Here is a command line for the current trigger ?
try
:
command
,
repeat
=
self
.
get_limit_action
(
trigger
,
stat_name
=
stat_name
)
...
...
@@ -661,8 +673,10 @@ class GlancesPlugin(object):
def
get_limit_action
(
self
,
criticity
,
stat_name
=
""
):
"""Return the tuple (action, repeat) for the alert.
- action is a command line
- repeat is a bool"""
- repeat is a bool
"""
# Get the action for stat + header
# Exemple: network_wlan0_rx_careful_action
# Action key available ?
...
...
@@ -714,8 +728,8 @@ class GlancesPlugin(object):
return
[]
def
is_hide
(
self
,
value
,
header
=
""
):
"""
Return True if the value is in the hide configuration list.
"""
Return True if the value is in the hide configuration list.
The hide configuration list is defined in the glances.conf file.
It is a comma separed list of regexp.
Example for diskio:
...
...
@@ -818,8 +832,6 @@ class GlancesPlugin(object):
"""Make a nice human-readable string out of number.
Number of decimal places increases as quantity approaches 1.
examples:
CASE: 613421788 RESULT: 585M low_precision: 585M
CASE: 5307033647 RESULT: 4.94G low_precision: 4.9G
CASE: 44968414685 RESULT: 41.9G low_precision: 41.9G
...
...
@@ -866,8 +878,10 @@ class GlancesPlugin(object):
return
'{!s}'
.
format
(
number
)
def
trend_msg
(
self
,
trend
,
significant
=
1
):
"""Return the trend message
Do not take into account if trend < significant"""
"""Return the trend message.
Do not take into account if trend < significant
"""
ret
=
'-'
if
trend
is
None
:
ret
=
' '
...
...
glances/plugins/glances_ports.py
浏览文件 @
00386aa1
...
...
@@ -42,7 +42,6 @@ from glances.plugins.glances_plugin import GlancesPlugin
class
Plugin
(
GlancesPlugin
):
"""Glances ports scanner plugin."""
def
__init__
(
self
,
args
=
None
,
config
=
None
):
...
...
@@ -64,7 +63,7 @@ class Plugin(GlancesPlugin):
self
.
_thread
=
None
def
exit
(
self
):
"""Overwrite the exit method to close threads"""
"""Overwrite the exit method to close threads
.
"""
if
self
.
_thread
is
not
None
:
self
.
_thread
.
stop
()
# Call the father class
...
...
@@ -77,7 +76,6 @@ class Plugin(GlancesPlugin):
@
GlancesPlugin
.
_log_result_decorator
def
update
(
self
):
"""Update the ports list."""
if
self
.
input_method
==
'local'
:
# Only refresh:
# * if there is not other scanning thread
...
...
@@ -103,7 +101,6 @@ class Plugin(GlancesPlugin):
def
get_ports_alert
(
self
,
port
,
header
=
""
,
log
=
False
):
"""Return the alert status relative to the port scan return value."""
if
port
[
'status'
]
is
None
:
return
'CAREFUL'
elif
port
[
'status'
]
==
0
:
...
...
@@ -117,7 +114,6 @@ class Plugin(GlancesPlugin):
def
get_web_alert
(
self
,
web
,
header
=
""
,
log
=
False
):
"""Return the alert status relative to the web/url scan return value."""
if
web
[
'status'
]
is
None
:
return
'CAREFUL'
elif
web
[
'status'
]
not
in
[
200
,
301
,
302
]:
...
...
@@ -186,7 +182,7 @@ class ThreadScanner(threading.Thread):
"""
def
__init__
(
self
,
stats
):
"""Init the class"""
"""Init the class
.
"""
logger
.
debug
(
"ports plugin - Create thread for scan list {}"
.
format
(
stats
))
super
(
ThreadScanner
,
self
).
__init__
()
# Event needed to stop properly the thread
...
...
@@ -197,9 +193,10 @@ class ThreadScanner(threading.Thread):
self
.
plugin_name
=
"ports"
def
run
(
self
):
"""Function called to grab stats.
Infinite loop, should be stopped by calling the stop() method"""
"""Grab the stats.
Infinite loop, should be stopped by calling the stop() method.
"""
for
p
in
self
.
_stats
:
# End of the thread has been asked
if
self
.
stopped
():
...
...
@@ -216,25 +213,25 @@ class ThreadScanner(threading.Thread):
@
property
def
stats
(
self
):
"""Stats getter"""
"""Stats getter
.
"""
return
self
.
_stats
@
stats
.
setter
def
stats
(
self
,
value
):
"""Stats setter"""
"""Stats setter
.
"""
self
.
_stats
=
value
def
stop
(
self
,
timeout
=
None
):
"""Stop the thread"""
"""Stop the thread
.
"""
logger
.
debug
(
"ports plugin - Close thread for scan list {}"
.
format
(
self
.
_stats
))
self
.
_stopper
.
set
()
def
stopped
(
self
):
"""Return True is the thread is stopped"""
"""Return True is the thread is stopped
.
"""
return
self
.
_stopper
.
isSet
()
def
_web_scan
(
self
,
web
):
"""Scan the Web/URL (dict) and update the status key"""
"""Scan the Web/URL (dict) and update the status key
.
"""
try
:
req
=
requests
.
head
(
web
[
'url'
],
allow_redirects
=
True
,
...
...
@@ -249,14 +246,14 @@ class ThreadScanner(threading.Thread):
return
web
def
_port_scan
(
self
,
port
):
"""Scan the port structure (dict) and update the status key"""
"""Scan the port structure (dict) and update the status key
.
"""
if
int
(
port
[
'port'
])
==
0
:
return
self
.
_port_scan_icmp
(
port
)
else
:
return
self
.
_port_scan_tcp
(
port
)
def
_resolv_name
(
self
,
hostname
):
"""Convert hostname to IP address"""
"""Convert hostname to IP address
.
"""
ip
=
hostname
try
:
ip
=
socket
.
gethostbyname
(
hostname
)
...
...
@@ -265,7 +262,7 @@ class ThreadScanner(threading.Thread):
return
ip
def
_port_scan_icmp
(
self
,
port
):
"""Scan the (ICMP) port structure (dict) and update the status key"""
"""Scan the (ICMP) port structure (dict) and update the status key
.
"""
ret
=
None
# Create the ping command
...
...
@@ -305,7 +302,7 @@ class ThreadScanner(threading.Thread):
return
ret
def
_port_scan_tcp
(
self
,
port
):
"""Scan the (TCP) port structure (dict) and update the status key"""
"""Scan the (TCP) port structure (dict) and update the status key
.
"""
ret
=
None
# Create and configure the scanning socket
...
...
glances/plugins/glances_processcount.py
浏览文件 @
00386aa1
...
...
@@ -27,7 +27,6 @@ from glances.plugins.glances_plugin import GlancesPlugin
class
Plugin
(
GlancesPlugin
):
"""Glances process count plugin.
stats is a list
...
...
glances/plugins/glances_processlist.py
浏览文件 @
00386aa1
...
...
@@ -57,7 +57,6 @@ def split_cmdline(cmdline):
class
Plugin
(
GlancesPlugin
):
"""Glances' processes plugin.
stats is a list
...
...
@@ -202,6 +201,7 @@ class Plugin(GlancesPlugin):
def
get_process_curses_data
(
self
,
p
,
first
,
args
):
"""Get curses data to display for a process.
- p is the process to display
- first is a tag=True if the process is the first on the list
"""
...
...
@@ -466,9 +466,7 @@ class Plugin(GlancesPlugin):
return
ret
def
__msg_curse_header
(
self
,
ret
,
process_sort_key
,
args
=
None
):
"""
Build the header and add it to the ret dict
"""
"""Build the header and add it to the ret dict."""
sort_style
=
'SORT'
if
args
.
disable_irix
and
0
<
self
.
nb_log_core
<
10
:
...
...
@@ -503,7 +501,8 @@ class Plugin(GlancesPlugin):
def
__msg_curse_sum
(
self
,
ret
,
sep_char
=
'_'
,
mmm
=
None
,
args
=
None
):
"""
Build the sum message (only when filter is on) and add it to the ret dict
Build the sum message (only when filter is on) and add it to the ret dict.
* ret: list of string where the message is added
* sep_char: define the line separation char
* mmm: display min, max, mean or current (if mmm=None)
...
...
@@ -586,24 +585,20 @@ class Plugin(GlancesPlugin):
ret
.
append
(
self
.
curse_add_line
(
msg
,
optional
=
True
))
def
__mmm_deco
(
self
,
mmm
):
"""
Return the decoration string for the current mmm status
"""
"""Return the decoration string for the current mmm status."""
if
mmm
is
not
None
:
return
'DEFAULT'
else
:
return
'FILTER'
def
__mmm_reset
(
self
):
"""
Reset the MMM stats
"""
"""Reset the MMM stats."""
self
.
mmm_min
=
{}
self
.
mmm_max
=
{}
def
__sum_stats
(
self
,
key
,
indice
=
None
,
mmm
=
None
):
"""
Return the sum of the stats value for the given key
"""
Return the sum of the stats value for the given key.
* indice: If indice is set, get the p[key][indice]
* mmm: display min, max, mean or current (if mmm=None)
"""
...
...
@@ -647,13 +642,13 @@ class Plugin(GlancesPlugin):
return
ret
def
__sort_stats
(
self
,
sortedby
=
None
):
"""Return the stats (dict) sorted by (sortedby)"""
"""Return the stats (dict) sorted by (sortedby)
.
"""
return
sort_stats
(
self
.
stats
,
sortedby
,
tree
=
glances_processes
.
is_tree_enabled
(),
reverse
=
glances_processes
.
sort_reverse
)
def
__max_pid_size
(
self
):
"""Return the maximum PID size in number of char"""
"""Return the maximum PID size in number of char
.
"""
if
self
.
pid_max
is
not
None
:
return
len
(
str
(
self
.
pid_max
))
else
:
...
...
glances/plugins/glances_psutilversion.py
浏览文件 @
00386aa1
...
...
@@ -17,6 +17,8 @@
# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
"""PsUtil plugin."""
from
glances
import
psutil_version_info
from
glances.plugins.glances_plugin
import
GlancesPlugin
...
...
glances/plugins/glances_quicklook.py
浏览文件 @
00386aa1
...
...
@@ -37,7 +37,6 @@ else:
class
Plugin
(
GlancesPlugin
):
"""Glances quicklook plugin.
'stats' is a dictionary.
...
...
@@ -143,7 +142,7 @@ class Plugin(GlancesPlugin):
return
ret
def
_msg_create_line
(
self
,
msg
,
bar
,
key
):
"""Create a new line to the Quickview"""
"""Create a new line to the Quickview
.
"""
ret
=
[]
ret
.
append
(
self
.
curse_add_line
(
msg
))
...
...
@@ -155,5 +154,5 @@ class Plugin(GlancesPlugin):
return
ret
def
_hz_to_ghz
(
self
,
hz
):
"""Convert Hz to Ghz"""
"""Convert Hz to Ghz
.
"""
return
hz
/
1000000000.0
glances/plugins/glances_raid.py
浏览文件 @
00386aa1
...
...
@@ -31,7 +31,6 @@ except ImportError:
class
Plugin
(
GlancesPlugin
):
"""Glances RAID plugin.
stats is a dict (see pymdstat documentation)
...
...
glances/plugins/glances_sensors.py
浏览文件 @
00386aa1
...
...
@@ -37,7 +37,6 @@ def to_fahrenheit(celsius):
class
Plugin
(
GlancesPlugin
):
"""Glances sensors plugin.
The stats list includes both sensors and hard disks stats, if any.
...
...
@@ -218,7 +217,6 @@ class Plugin(GlancesPlugin):
class
GlancesGrabSensors
(
object
):
"""Get sensors stats."""
def
__init__
(
self
):
...
...
@@ -282,7 +280,8 @@ class GlancesGrabSensors(object):
type: SENSOR_TEMP_UNIT or SENSOR_FAN_UNIT
output: a list"""
output: a list
"""
ret
=
[]
if
type
==
SENSOR_TEMP_UNIT
and
self
.
init_temp
:
input_list
=
self
.
stemps
...
...
glances/plugins/glances_uptime.py
浏览文件 @
00386aa1
...
...
@@ -30,7 +30,6 @@ snmp_oid = {'_uptime': '1.3.6.1.2.1.1.3.0'}
class
Plugin
(
GlancesPlugin
):
"""Glances uptime plugin.
stats is date (string)
...
...
glances/plugins/glances_wifi.py
浏览文件 @
00386aa1
...
...
@@ -38,8 +38,8 @@ else:
class
Plugin
(
GlancesPlugin
):
"""Glances Wifi plugin.
Get stats of the current Wifi hotspots.
"""
...
...
@@ -130,11 +130,11 @@ class Plugin(GlancesPlugin):
def
get_alert
(
self
,
value
):
"""Overwrite the default get_alert method.
Alert is on signal quality where lower is better...
:returns: string -- Signal alert
"""
ret
=
'OK'
try
:
if
value
<=
self
.
get_limit
(
'critical'
,
stat_name
=
self
.
plugin_name
):
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录