Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
蜕变的菜鸟
glances
提交
25f531e3
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,体验更适合开发者的 AI 搜索 >>
提交
25f531e3
编写于
10月 15, 2015
作者:
A
Alessio Sergi
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Use the new compat module
上级
4639fffc
变更
36
隐藏空白更改
内联
并排
Showing
36 changed file
with
97 addition
and
170 deletion
+97
-170
glances/core/glances_client.py
glances/core/glances_client.py
+1
-5
glances/core/glances_client_browser.py
glances/core/glances_client_browser.py
+1
-5
glances/core/glances_config.py
glances/core/glances_config.py
+5
-11
glances/core/glances_globals.py
glances/core/glances_globals.py
+0
-3
glances/core/glances_logging.py
glances/core/glances_logging.py
+2
-6
glances/core/glances_logs.py
glances/core/glances_logs.py
+1
-0
glances/core/glances_monitor_list.py
glances/core/glances_monitor_list.py
+3
-2
glances/core/glances_password.py
glances/core/glances_password.py
+3
-7
glances/core/glances_processes.py
glances/core/glances_processes.py
+7
-6
glances/core/glances_server.py
glances/core/glances_server.py
+1
-6
glances/core/glances_staticlist.py
glances/core/glances_staticlist.py
+1
-0
glances/core/glances_stats.py
glances/core/glances_stats.py
+2
-6
glances/exports/glances_csv.py
glances/exports/glances_csv.py
+5
-7
glances/exports/glances_export.py
glances/exports/glances_export.py
+3
-6
glances/exports/glances_history.py
glances/exports/glances_history.py
+3
-2
glances/exports/glances_influxdb.py
glances/exports/glances_influxdb.py
+1
-4
glances/exports/glances_opentsdb.py
glances/exports/glances_opentsdb.py
+2
-5
glances/exports/glances_rabbitmq.py
glances/exports/glances_rabbitmq.py
+2
-5
glances/exports/glances_statsd.py
glances/exports/glances_statsd.py
+2
-5
glances/outputs/glances_bottle.py
glances/outputs/glances_bottle.py
+1
-0
glances/outputs/glances_colorconsole.py
glances/outputs/glances_colorconsole.py
+1
-5
glances/outputs/glances_curses.py
glances/outputs/glances_curses.py
+6
-8
glances/plugins/glances_cpu.py
glances/plugins/glances_cpu.py
+2
-1
glances/plugins/glances_docker.py
glances/plugins/glances_docker.py
+3
-2
glances/plugins/glances_hddtemp.py
glances/plugins/glances_hddtemp.py
+4
-4
glances/plugins/glances_ip.py
glances/plugins/glances_ip.py
+2
-1
glances/plugins/glances_load.py
glances/plugins/glances_load.py
+2
-5
glances/plugins/glances_mem.py
glances/plugins/glances_mem.py
+2
-1
glances/plugins/glances_memswap.py
glances/plugins/glances_memswap.py
+2
-1
glances/plugins/glances_monitor.py
glances/plugins/glances_monitor.py
+3
-10
glances/plugins/glances_plugin.py
glances/plugins/glances_plugin.py
+14
-20
glances/plugins/glances_processlist.py
glances/plugins/glances_processlist.py
+2
-4
glances/plugins/glances_raid.py
glances/plugins/glances_raid.py
+3
-2
glances/plugins/glances_system.py
glances/plugins/glances_system.py
+3
-5
unitest-restful.py
unitest-restful.py
+1
-5
unitest-xmlrpc.py
unitest-xmlrpc.py
+1
-5
未找到文件。
glances/core/glances_client.py
浏览文件 @
25f531e3
...
...
@@ -23,13 +23,9 @@
import
json
import
socket
import
sys
try
:
from
xmlrpc.client
import
Transport
,
ServerProxy
,
ProtocolError
,
Fault
except
ImportError
:
# Python 2
from
xmlrpclib
import
Transport
,
ServerProxy
,
ProtocolError
,
Fault
# Import Glances libs
from
glances.core.compat
import
Fault
,
ProtocolError
,
ServerProxy
,
Transport
from
glances.core.glances_globals
import
version
from
glances.core.glances_logging
import
logger
from
glances.core.glances_stats
import
GlancesStatsClient
...
...
glances/core/glances_client_browser.py
浏览文件 @
25f531e3
...
...
@@ -22,13 +22,9 @@
# Import system libs
import
json
import
socket
try
:
from
xmlrpc.client
import
ServerProxy
,
Fault
,
ProtocolError
except
ImportError
:
# Python 2
from
xmlrpclib
import
ServerProxy
,
Fault
,
ProtocolError
# Import Glances libs
from
glances.core.compat
import
Fault
,
ProtocolError
,
ServerProxy
from
glances.core.glances_autodiscover
import
GlancesAutoDiscoverServer
from
glances.core.glances_client
import
GlancesClient
,
GlancesClientTransport
from
glances.core.glances_logging
import
logger
...
...
glances/core/glances_config.py
浏览文件 @
25f531e3
...
...
@@ -22,20 +22,15 @@
# Import system libs
import
os
import
sys
try
:
from
configparser
import
ConfigParser
from
configparser
import
NoOptionError
except
ImportError
:
# Python 2
from
ConfigParser
import
SafeConfigParser
as
ConfigParser
from
ConfigParser
import
NoOptionError
from
io
import
open
# Import Glances lib
from
glances.core.compat
import
ConfigParser
,
NoOptionError
from
glances.core.glances_globals
import
(
appname
,
is_bsd
,
is_linux
,
is_mac
,
is_py3
,
is_windows
,
sys_prefix
)
...
...
@@ -107,10 +102,9 @@ class Config(object):
for
config_file
in
self
.
config_file_paths
():
if
os
.
path
.
exists
(
config_file
):
try
:
if
is_py3
:
self
.
parser
.
read
(
config_file
,
encoding
=
'utf-8'
)
else
:
self
.
parser
.
read
(
config_file
)
with
open
(
config_file
,
encoding
=
'utf-8'
)
as
f
:
self
.
parser
.
read_file
(
f
)
self
.
parser
.
read
(
f
)
logger
.
info
(
"Read configuration file '{0}'"
.
format
(
config_file
))
except
UnicodeDecodeError
as
err
:
logger
.
error
(
"Cannot decode configuration file '{0}': {1}"
.
format
(
config_file
,
err
))
...
...
glances/core/glances_globals.py
浏览文件 @
25f531e3
...
...
@@ -27,9 +27,6 @@ appname = 'glances'
version
=
__import__
(
'glances'
).
__version__
psutil_version
=
__import__
(
'glances'
).
__psutil_version
# PY3?
is_py3
=
sys
.
version_info
>=
(
3
,
3
)
# Operating system flag
# Note: Somes libs depends of OS
is_bsd
=
sys
.
platform
.
find
(
'bsd'
)
!=
-
1
...
...
glances/core/glances_logging.py
浏览文件 @
25f531e3
...
...
@@ -20,15 +20,11 @@
"""Custom logging class."""
import
logging
try
:
# Python 2.6
from
logutils.dictconfig
import
dictConfig
except
ImportError
:
# Python >= 2.7
from
logging.config
import
dictConfig
import
os
import
tempfile
from
glances.core.compat
import
dictConfig
# Define the logging configuration
LOGGING_CFG
=
{
'version'
:
1
,
...
...
glances/core/glances_logs.py
浏览文件 @
25f531e3
...
...
@@ -24,6 +24,7 @@ import time
from
datetime
import
datetime
# Import Glances libs
from
glances.core.compat
import
range
from
glances.core.glances_processes
import
glances_processes
...
...
glances/core/glances_monitor_list.py
浏览文件 @
25f531e3
...
...
@@ -24,6 +24,7 @@ import re
import
subprocess
# Import Glances lib
from
glances.core.compat
import
range
,
u
from
glances.core.glances_logging
import
logger
from
glances.core.glances_processes
import
glances_processes
...
...
@@ -125,7 +126,7 @@ class MonitorList(object):
return
self
.
__monitor_list
# Iter upon the monitored list
for
i
in
range
(
0
,
len
(
self
.
get
())):
for
i
in
range
(
len
(
self
.
get
())):
# Search monitored processes by a regular expression
processlist
=
glances_processes
.
getalllist
()
monitoredlist
=
[
p
for
p
in
processlist
if
re
.
search
(
self
.
regex
(
i
),
p
[
'cmdline'
])
is
not
None
]
...
...
@@ -141,7 +142,7 @@ class MonitorList(object):
except
Exception
:
self
.
__monitor_list
[
i
][
'result'
]
=
'Cannot execute command'
# Only save the first line
self
.
__monitor_list
[
i
][
'result'
]
=
self
.
__monitor_list
[
i
][
'result'
].
decode
(
'utf-8'
).
split
(
'
\n
'
)[
0
]
self
.
__monitor_list
[
i
][
'result'
]
=
u
(
self
.
__monitor_list
[
i
][
'result'
]
).
split
(
'
\n
'
)[
0
]
if
self
.
command
(
i
)
is
None
or
self
.
__monitor_list
[
i
][
'result'
]
==
''
:
# If there is no command specified in the conf file
...
...
glances/core/glances_password.py
浏览文件 @
25f531e3
...
...
@@ -25,17 +25,13 @@ import hashlib
import
os
import
sys
import
uuid
from
io
import
open
# Import Glances lib
from
glances.core.compat
import
b
,
input
from
glances.core.glances_globals
import
appname
,
is_bsd
,
is_linux
,
is_mac
,
is_windows
from
glances.core.glances_logging
import
logger
# Trick: bind raw_input to input in Python 2
try
:
input
=
raw_input
except
NameError
:
pass
class
GlancesPassword
(
object
):
...
...
@@ -69,7 +65,7 @@ class GlancesPassword(object):
def
sha256_hash
(
self
,
plain_password
):
"""Return the SHA-256 of the given password."""
return
hashlib
.
sha256
(
plain_password
.
encode
(
'utf-8'
)).
hexdigest
()
return
hashlib
.
sha256
(
b
(
plain_password
)).
hexdigest
()
def
get_hash
(
self
,
salt
,
plain_password
):
"""Return the hashed password, salt + SHA-256."""
...
...
glances/core/glances_processes.py
浏览文件 @
25f531e3
...
...
@@ -23,6 +23,7 @@ import os
import
re
# Import Glances lib
from
glances.core.compat
import
iteritems
,
itervalues
from
glances.core.glances_globals
import
is_bsd
,
is_linux
,
is_mac
,
is_windows
from
glances.core.glances_logging
import
logger
from
glances.core.glances_timer
import
Timer
,
getTimeSinceLastUpdate
...
...
@@ -188,7 +189,7 @@ class ProcessTreeNode(object):
nodes_to_add_last
=
collections
.
deque
()
# first pass: add nodes whose parent are in the tree
for
process
,
stats
in
process_dict
.
items
(
):
for
process
,
stats
in
iteritems
(
process_dict
):
new_node
=
ProcessTreeNode
(
process
,
stats
,
sort_key
,
sort_reverse
)
try
:
parent_process
=
process
.
parent
()
...
...
@@ -661,21 +662,21 @@ class GlancesProcesses(object):
# Sort the internal dict and cut the top N (Return a list of tuple)
# tuple=key (proc), dict (returned by __get_process_stats)
try
:
processiter
=
sorted
(
processdict
.
items
(
),
processiter
=
sorted
(
iteritems
(
processdict
),
key
=
lambda
x
:
x
[
1
][
self
.
sort_key
],
reverse
=
self
.
sort_reverse
)
except
(
KeyError
,
TypeError
)
as
e
:
logger
.
error
(
"Cannot sort process list by {0}: {1}"
.
format
(
self
.
sort_key
,
e
))
logger
.
error
(
"%s"
%
str
(
processdict
.
items
(
)[
0
]))
logger
.
error
(
"%s"
%
str
(
iteritems
(
processdict
)[
0
]))
# Fallback to all process (issue #423)
processloop
=
processdict
.
items
(
)
processloop
=
iteritems
(
processdict
)
first
=
False
else
:
processloop
=
processiter
[
0
:
self
.
max_processes
]
first
=
True
else
:
# Get all processes stats
processloop
=
processdict
.
items
(
)
processloop
=
iteritems
(
processdict
)
first
=
False
for
i
in
processloop
:
...
...
@@ -699,7 +700,7 @@ class GlancesProcesses(object):
first
=
False
# Build the all processes list used by the monitored list
self
.
allprocesslist
=
processdict
.
values
(
)
self
.
allprocesslist
=
itervalues
(
processdict
)
# Clean internals caches if timeout is reached
if
self
.
cache_timer
.
finished
():
...
...
glances/core/glances_server.py
浏览文件 @
25f531e3
...
...
@@ -24,14 +24,9 @@ import json
import
socket
import
sys
from
base64
import
b64decode
try
:
from
xmlrpc.server
import
SimpleXMLRPCRequestHandler
from
xmlrpc.server
import
SimpleXMLRPCServer
except
ImportError
:
# Python 2
from
SimpleXMLRPCServer
import
SimpleXMLRPCRequestHandler
from
SimpleXMLRPCServer
import
SimpleXMLRPCServer
# Import Glances libs
from
glances.core.compat
import
SimpleXMLRPCRequestHandler
,
SimpleXMLRPCServer
from
glances.core.glances_autodiscover
import
GlancesAutoDiscoverClient
from
glances.core.glances_globals
import
version
from
glances.core.glances_logging
import
logger
...
...
glances/core/glances_staticlist.py
浏览文件 @
25f531e3
...
...
@@ -23,6 +23,7 @@
from
socket
import
gaierror
,
gethostbyname
# Import Glances libs
from
glances.core.compat
import
range
from
glances.core.glances_logging
import
logger
...
...
glances/core/glances_stats.py
浏览文件 @
25f531e3
...
...
@@ -25,6 +25,7 @@ import re
import
sys
import
threading
from
glances.core.compat
import
iteritems
from
glances.core.glances_globals
import
exports_path
,
plugins_path
,
sys_path
from
glances.core.glances_logging
import
logger
...
...
@@ -377,12 +378,7 @@ class GlancesStatsClientSNMP(GlancesStats):
return
short_system_name
# Find the short name in the oid_to_short_os_name dict
try
:
iteritems
=
oid_to_short_system_name
.
iteritems
()
except
AttributeError
:
# Correct issue #386
iteritems
=
oid_to_short_system_name
.
items
()
for
r
,
v
in
iteritems
:
for
r
,
v
in
iteritems
(
oid_to_short_system_name
):
if
re
.
search
(
r
,
oid_system_name
):
short_system_name
=
v
break
...
...
glances/exports/glances_csv.py
浏览文件 @
25f531e3
...
...
@@ -25,7 +25,7 @@ import sys
import
time
# Import Glances lib
from
glances.core.
glances_globals
import
is_py3
from
glances.core.
compat
import
PY3
,
iterkeys
,
itervalues
from
glances.core.glances_logging
import
logger
from
glances.exports.glances_export
import
GlancesExport
...
...
@@ -43,7 +43,7 @@ class Export(GlancesExport):
# Set the CSV output file
try
:
if
is_py
3
:
if
PY
3
:
self
.
csv_file
=
open
(
self
.
csv_filename
,
'w'
,
newline
=
''
)
else
:
self
.
csv_file
=
open
(
self
.
csv_filename
,
'wb'
)
...
...
@@ -83,17 +83,15 @@ class Export(GlancesExport):
csv_header
+=
(
'{0}_{1}_{2}'
.
format
(
plugin
,
self
.
get_item_key
(
stat
),
item
)
for
item
in
stat
)
# Others lines: stats
fieldvalues
=
stat
.
values
()
csv_data
+=
fieldvalues
csv_data
+=
itervalues
(
stat
)
elif
isinstance
(
all_stats
[
i
],
dict
):
# First line: header
if
self
.
first_line
:
fieldnames
=
all_stats
[
i
].
keys
(
)
fieldnames
=
iterkeys
(
all_stats
[
i
]
)
csv_header
+=
(
'{0}_{1}'
.
format
(
plugin
,
fieldname
)
for
fieldname
in
fieldnames
)
# Others lines: stats
fieldvalues
=
all_stats
[
i
].
values
()
csv_data
+=
fieldvalues
csv_data
+=
itervalues
(
all_stats
[
i
])
# Export to CSV
if
self
.
first_line
:
...
...
glances/exports/glances_export.py
浏览文件 @
25f531e3
...
...
@@ -27,6 +27,7 @@ I am your father...
# None...
# Import Glances lib
from
glances.core.compat
import
iteritems
,
iterkeys
from
glances.core.glances_logging
import
logger
...
...
@@ -131,16 +132,12 @@ class GlancesExport(object):
if
isinstance
(
stats
,
dict
):
# Stats is a dict
# Is there a key ?
if
'key'
in
list
(
stats
.
keys
()
):
if
'key'
in
iterkeys
(
stats
):
pre_key
=
'{0}.'
.
format
(
stats
[
stats
[
'key'
]])
else
:
pre_key
=
''
# Walk through the dict
try
:
iteritems
=
stats
.
iteritems
()
except
AttributeError
:
iteritems
=
stats
.
items
()
for
key
,
value
in
iteritems
:
for
key
,
value
in
iteritems
(
stats
):
if
isinstance
(
value
,
list
):
try
:
value
=
value
[
0
]
...
...
glances/exports/glances_history.py
浏览文件 @
25f531e3
...
...
@@ -23,6 +23,7 @@
import
os
# Import Glances lib
from
glances.core.compat
import
iterkeys
from
glances.core.glances_logging
import
logger
# Import specific lib
...
...
@@ -108,7 +109,7 @@ class GlancesHistory(object):
handles
=
[]
labels
=
[]
for
i
in
stats
.
get_plugin
(
p
).
get_items_history_list
():
if
i
[
'name'
]
in
h
.
keys
(
):
if
i
[
'name'
]
in
iterkeys
(
h
):
# The key exist
# Add the curves in the current chart
logger
.
debug
(
"Generate graph: %s %s"
%
(
p
,
i
[
'name'
]))
...
...
@@ -132,7 +133,7 @@ class GlancesHistory(object):
# Find if anothers key ends with the key
# Ex: key='tx' => 'ethernet_tx'
# Add one curve per chart
stats_history_filtered
=
[
key
for
key
in
h
.
keys
(
)
if
key
.
endswith
(
'_'
+
i
[
'name'
])]
stats_history_filtered
=
[
key
for
key
in
iterkeys
(
h
)
if
key
.
endswith
(
'_'
+
i
[
'name'
])]
stats_history_filtered
.
sort
()
logger
.
debug
(
"Generate graphs: %s %s"
%
(
p
,
stats_history_filtered
))
...
...
glances/exports/glances_influxdb.py
浏览文件 @
25f531e3
...
...
@@ -21,12 +21,9 @@
# Import sys libs
import
sys
try
:
from
configparser
import
NoOptionError
,
NoSectionError
except
ImportError
:
# Python 2
from
ConfigParser
import
NoOptionError
,
NoSectionError
# Import Glances lib
from
glances.core.compat
import
NoOptionError
,
NoSectionError
from
glances.core.glances_logging
import
logger
from
glances.exports.glances_export
import
GlancesExport
...
...
glances/exports/glances_opentsdb.py
浏览文件 @
25f531e3
...
...
@@ -22,12 +22,9 @@
# Import sys libs
import
sys
from
numbers
import
Number
try
:
from
configparser
import
NoOptionError
,
NoSectionError
except
ImportError
:
# Python 2
from
ConfigParser
import
NoOptionError
,
NoSectionError
# Import Glances lib
from
glances.core.compat
import
NoOptionError
,
NoSectionError
,
range
from
glances.core.glances_logging
import
logger
from
glances.exports.glances_export
import
GlancesExport
...
...
@@ -106,7 +103,7 @@ class Export(GlancesExport):
def
export
(
self
,
name
,
columns
,
points
):
"""Export the stats to the Statsd server."""
for
i
in
range
(
0
,
len
(
columns
)):
for
i
in
range
(
len
(
columns
)):
if
not
isinstance
(
points
[
i
],
Number
):
continue
stat_name
=
'{0}.{1}.{2}'
.
format
(
self
.
prefix
,
name
,
columns
[
i
])
...
...
glances/exports/glances_rabbitmq.py
浏览文件 @
25f531e3
...
...
@@ -26,11 +26,8 @@ import sys
from
numbers
import
Number
# Import Glances lib
from
glances.core.compat
import
NoOptionError
,
NoSectionError
,
range
from
glances.core.glances_logging
import
logger
try
:
from
configparser
import
NoOptionError
,
NoSectionError
except
ImportError
:
# Python 2
from
ConfigParser
import
NoOptionError
,
NoSectionError
from
glances.exports.glances_export
import
GlancesExport
# Import pika for RabbitMQ
...
...
@@ -100,7 +97,7 @@ class Export(GlancesExport):
"""Write the points in RabbitMQ."""
data
=
(
'hostname='
+
self
.
hostname
+
', name='
+
name
+
', dateinfo='
+
datetime
.
datetime
.
utcnow
().
isoformat
())
for
i
in
range
(
0
,
len
(
columns
)):
for
i
in
range
(
len
(
columns
)):
if
not
isinstance
(
points
[
i
],
Number
):
continue
else
:
...
...
glances/exports/glances_statsd.py
浏览文件 @
25f531e3
...
...
@@ -22,12 +22,9 @@
# Import sys libs
import
sys
from
numbers
import
Number
try
:
from
configparser
import
NoOptionError
,
NoSectionError
except
ImportError
:
# Python 2
from
ConfigParser
import
NoOptionError
,
NoSectionError
# Import Glances lib
from
glances.core.compat
import
NoOptionError
,
NoSectionError
,
range
from
glances.core.glances_logging
import
logger
from
glances.exports.glances_export
import
GlancesExport
...
...
@@ -91,7 +88,7 @@ class Export(GlancesExport):
def
export
(
self
,
name
,
columns
,
points
):
"""Export the stats to the Statsd server."""
for
i
in
range
(
0
,
len
(
columns
)):
for
i
in
range
(
len
(
columns
)):
if
not
isinstance
(
points
[
i
],
Number
):
continue
stat_name
=
'{0}.{1}'
.
format
(
name
,
columns
[
i
])
...
...
glances/outputs/glances_bottle.py
浏览文件 @
25f531e3
...
...
@@ -23,6 +23,7 @@ import json
import
os
import
sys
import
tempfile
from
io
import
open
from
glances.core.glances_logging
import
logger
...
...
glances/outputs/glances_colorconsole.py
浏览文件 @
25f531e3
...
...
@@ -23,6 +23,7 @@ import time
import
msvcrt
from
glances.core.compat
import
queue
from
glances.core.glances_logging
import
logger
try
:
...
...
@@ -32,11 +33,6 @@ except ImportError:
logger
.
critical
(
"Colorconsole module not found. Glances cannot start in standalone mode."
)
sys
.
exit
(
1
)
try
:
import
queue
except
ImportError
:
# Python 2
import
Queue
as
queue
class
ListenGetch
(
threading
.
Thread
):
...
...
glances/outputs/glances_curses.py
浏览文件 @
25f531e3
...
...
@@ -24,6 +24,7 @@ import re
import
sys
# Import Glances lib
from
glances.core.compat
import
u
from
glances.core.glances_globals
import
is_mac
,
is_windows
from
glances.core.glances_logging
import
logger
from
glances.core.glances_logs
import
glances_logs
...
...
@@ -883,14 +884,11 @@ class _GlancesCurses(object):
pass
else
:
# New column
try
:
# Python 2: we need to decode to get real screen size because utf-8 special tree chars
# occupy several bytes
offset
=
len
(
m
[
'msg'
].
decode
(
"utf-8"
,
"replace"
))
except
AttributeError
:
# Python 3: strings are strings and bytes are bytes, all is
# good
offset
=
len
(
m
[
'msg'
])
# Python 2: we need to decode to get real screen size because
# UTF-8 special tree chars occupy several bytes.
# Python 3: strings are strings and bytes are bytes, all is
# good.
offset
=
len
(
u
(
m
[
'msg'
]))
x
+=
offset
if
x
>
x_max
:
x_max
=
x
...
...
glances/plugins/glances_cpu.py
浏览文件 @
25f531e3
...
...
@@ -19,6 +19,7 @@
"""CPU plugin."""
from
glances.core.compat
import
iterkeys
from
glances.core.glances_cpu_percent
import
cpu_percent
from
glances.plugins.glances_plugin
import
GlancesPlugin
...
...
@@ -127,7 +128,7 @@ class Plugin(GlancesPlugin):
return
self
.
stats
# Convert SNMP stats to float
for
key
in
list
(
self
.
stats
.
keys
()
):
for
key
in
iterkeys
(
self
.
stats
):
self
.
stats
[
key
]
=
float
(
self
.
stats
[
key
])
self
.
stats
[
'total'
]
=
100
-
self
.
stats
[
'idle'
]
...
...
glances/plugins/glances_docker.py
浏览文件 @
25f531e3
...
...
@@ -25,6 +25,7 @@ import threading
import
time
# Import Glances libs
from
glances.core.compat
import
iterkeys
,
itervalues
from
glances.core.glances_logging
import
logger
from
glances.core.glances_timer
import
getTimeSinceLastUpdate
from
glances.plugins.glances_plugin
import
GlancesPlugin
...
...
@@ -69,7 +70,7 @@ class Plugin(GlancesPlugin):
def
exit
(
self
):
"""Overwrite the exit method to close threads"""
logger
.
debug
(
"Stop the Docker plugin"
)
for
t
in
self
.
thread_list
.
values
(
):
for
t
in
itervalues
(
self
.
thread_list
):
t
.
stop
()
def
get_key
(
self
):
...
...
@@ -206,7 +207,7 @@ class Plugin(GlancesPlugin):
t
.
start
()
# Stop threads for non-existing containers
nonexisting_containers
=
list
(
set
(
self
.
thread_list
.
keys
())
-
set
([
c
[
'Id'
]
for
c
in
self
.
stats
[
'containers'
]])
)
nonexisting_containers
=
set
(
iterkeys
(
self
.
thread_list
))
-
set
([
c
[
'Id'
]
for
c
in
self
.
stats
[
'containers'
]]
)
for
container_id
in
nonexisting_containers
:
# Stop the thread
logger
.
debug
(
"{0} plugin - Stop thread for old container {1}"
.
format
(
self
.
plugin_name
,
container_id
[:
12
]))
...
...
glances/plugins/glances_hddtemp.py
浏览文件 @
25f531e3
...
...
@@ -24,6 +24,7 @@ import os
import
socket
# Import Glances libs
from
glances.core.compat
import
nativestr
,
range
from
glances.core.glances_logging
import
logger
from
glances.plugins.glances_plugin
import
GlancesPlugin
...
...
@@ -116,10 +117,9 @@ class GlancesGrabHDDTemp(object):
for
item
in
range
(
devices
):
offset
=
item
*
5
hddtemp_current
=
{}
device
=
fields
[
offset
+
1
].
decode
(
'utf-8'
)
device
=
os
.
path
.
basename
(
device
)
temperature
=
float
(
fields
[
offset
+
3
].
decode
(
'utf-8'
))
unit
=
fields
[
offset
+
4
].
decode
(
'utf-8'
)
device
=
os
.
path
.
basename
(
nativestr
(
fields
[
offset
+
1
]))
temperature
=
float
(
fields
[
offset
+
3
])
unit
=
nativestr
(
fields
[
offset
+
4
])
hddtemp_current
[
'label'
]
=
device
hddtemp_current
[
'value'
]
=
temperature
hddtemp_current
[
'unit'
]
=
unit
...
...
glances/plugins/glances_ip.py
浏览文件 @
25f531e3
...
...
@@ -20,6 +20,7 @@
"""IP plugin."""
# Import Glances libs
from
glances.core.compat
import
iterkeys
from
glances.core.glances_globals
import
is_freebsd
from
glances.core.glances_logging
import
logger
from
glances.plugins.glances_plugin
import
GlancesPlugin
...
...
@@ -97,7 +98,7 @@ class Plugin(GlancesPlugin):
# Add specifics informations
# Optional
for
key
in
self
.
stats
.
keys
(
):
for
key
in
iterkeys
(
self
.
stats
):
self
.
views
[
key
][
'optional'
]
=
True
def
msg_curse
(
self
,
args
=
None
):
...
...
glances/plugins/glances_load.py
浏览文件 @
25f531e3
...
...
@@ -23,6 +23,7 @@
import
os
# Import Glances libs
from
glances.core.compat
import
iteritems
from
glances.plugins.glances_core
import
Plugin
as
CorePlugin
from
glances.plugins.glances_plugin
import
GlancesPlugin
...
...
@@ -99,11 +100,7 @@ class Plugin(GlancesPlugin):
# Python 3 return a dict like:
# {'min1': "b'0.08'", 'min5': "b'0.12'", 'min15': "b'0.15'"}
try
:
iteritems
=
self
.
stats
.
iteritems
()
except
AttributeError
:
iteritems
=
self
.
stats
.
items
()
for
k
,
v
in
iteritems
:
for
k
,
v
in
iteritems
(
self
.
stats
):
self
.
stats
[
k
]
=
float
(
v
)
self
.
stats
[
'cpucore'
]
=
self
.
nb_log_core
...
...
glances/plugins/glances_mem.py
浏览文件 @
25f531e3
...
...
@@ -19,6 +19,7 @@
"""Virtual memory plugin."""
from
glances.core.compat
import
iterkeys
from
glances.plugins.glances_plugin
import
GlancesPlugin
import
psutil
...
...
@@ -139,7 +140,7 @@ class Plugin(GlancesPlugin):
self
.
reset
()
return
self
.
stats
for
key
in
list
(
self
.
stats
.
keys
()
):
for
key
in
iterkeys
(
self
.
stats
):
if
self
.
stats
[
key
]
!=
''
:
self
.
stats
[
key
]
=
float
(
self
.
stats
[
key
])
*
1024
...
...
glances/plugins/glances_memswap.py
浏览文件 @
25f531e3
...
...
@@ -19,6 +19,7 @@
"""Swap memory plugin."""
from
glances.core.compat
import
iterkeys
from
glances.plugins.glances_plugin
import
GlancesPlugin
import
psutil
...
...
@@ -116,7 +117,7 @@ class Plugin(GlancesPlugin):
self
.
reset
()
return
self
.
stats
for
key
in
list
(
self
.
stats
.
keys
()
):
for
key
in
iterkeys
(
self
.
stats
):
if
self
.
stats
[
key
]
!=
''
:
self
.
stats
[
key
]
=
float
(
self
.
stats
[
key
])
*
1024
...
...
glances/plugins/glances_monitor.py
浏览文件 @
25f531e3
...
...
@@ -19,9 +19,8 @@
"""Monitor plugin."""
from
__future__
import
unicode_literals
# Import Glances lib
from
glances.core.compat
import
u
from
glances.core.glances_monitor_list
import
MonitorList
as
glancesMonitorList
from
glances.plugins.glances_plugin
import
GlancesPlugin
...
...
@@ -100,14 +99,8 @@ class Plugin(GlancesPlugin):
ret
.
append
(
self
.
curse_add_line
(
msg
))
msg
=
'{0:13} '
.
format
(
'RUNNING'
if
m
[
'count'
]
>=
1
else
'NOT RUNNING'
)
ret
.
append
(
self
.
curse_add_line
(
msg
))
# Decode to UTF8 (only for Python 3)
try
:
msg
=
m
[
'result'
].
decode
(
'utf-8'
)
if
m
[
'count'
]
>=
1
else
''
except
(
UnicodeError
,
AttributeError
):
try
:
msg
=
m
[
'result'
]
if
m
[
'count'
]
>=
1
else
''
except
UnicodeError
:
msg
=
m
[
'result'
].
encode
(
'utf-8'
)
if
m
[
'count'
]
>=
1
else
''
# Decode to UTF-8 (for Python 2)
msg
=
u
(
m
[
'result'
])
if
m
[
'count'
]
>=
1
else
''
ret
.
append
(
self
.
curse_add_line
(
msg
,
optional
=
True
,
splittable
=
True
))
ret
.
append
(
self
.
curse_new_line
())
...
...
glances/plugins/glances_plugin.py
浏览文件 @
25f531e3
...
...
@@ -29,8 +29,8 @@ from datetime import datetime
from
operator
import
itemgetter
# Import Glances lib
from
glances.core.compat
import
iterkeys
,
itervalues
,
map
from
glances.core.glances_actions
import
GlancesActions
from
glances.core.glances_globals
import
is_py3
from
glances.core.glances_logging
import
logger
from
glances.core.glances_logs
import
glances_logs
...
...
@@ -187,15 +187,15 @@ class GlancesPlugin(object):
ret
=
{}
if
bulk
:
# Bulk request
snmpresult
=
clientsnmp
.
getbulk_by_oid
(
0
,
10
,
*
snmp_oid
.
values
(
))
snmpresult
=
clientsnmp
.
getbulk_by_oid
(
0
,
10
,
itervalues
(
*
snmp_oid
))
if
len
(
snmp_oid
)
==
1
:
# Bulk command for only one OID
# Note: key is the item indexed but the OID result
for
item
in
snmpresult
:
if
ite
m
.
keys
()[
0
].
startswith
(
snmp_oid
.
values
(
)[
0
]):
ret
[
snmp_oid
.
keys
()[
0
]
+
item
.
keys
(
)
[
0
].
split
(
snmp_oid
.
values
()[
0
])[
1
]]
=
item
.
values
(
)[
0
]
if
ite
rkeys
(
item
)[
0
].
startswith
(
itervalues
(
snmp_oid
)[
0
]):
ret
[
iterkeys
(
snmp_oid
)[
0
]
+
iterkeys
(
item
)
[
0
].
split
(
itervalues
(
snmp_oid
)[
0
])[
1
]]
=
itervalues
(
item
)[
0
]
else
:
# Build the internal dict with the SNMP result
# Note: key is the first item in the snmp_oid
...
...
@@ -203,7 +203,7 @@ class GlancesPlugin(object):
for
item
in
snmpresult
:
item_stats
=
{}
item_key
=
None
for
key
in
list
(
snmp_oid
.
keys
()
):
for
key
in
iterkeys
(
snmp_oid
):
oid
=
snmp_oid
[
key
]
+
'.'
+
str
(
index
)
if
oid
in
item
:
if
item_key
is
None
:
...
...
@@ -215,10 +215,10 @@ class GlancesPlugin(object):
index
+=
1
else
:
# Simple get request
snmpresult
=
clientsnmp
.
get_by_oid
(
*
snmp_oid
.
values
(
))
snmpresult
=
clientsnmp
.
get_by_oid
(
itervalues
(
*
snmp_oid
))
# Build the internal dict with the SNMP result
for
key
in
list
(
snmp_oid
.
keys
()
):
for
key
in
iterkeys
(
snmp_oid
):
ret
[
key
]
=
snmpresult
[
snmp_oid
[
key
]]
return
ret
...
...
@@ -293,7 +293,7 @@ class GlancesPlugin(object):
# Stats are stored in a list of dict (ex: NETWORK, FS...)
for
i
in
self
.
get_raw
():
ret
[
i
[
self
.
get_key
()]]
=
{}
for
key
in
i
.
keys
(
):
for
key
in
i
terkeys
(
i
):
value
=
{
'decoration'
:
'DEFAULT'
,
'optional'
:
False
,
'additional'
:
False
,
...
...
@@ -301,7 +301,7 @@ class GlancesPlugin(object):
ret
[
i
[
self
.
get_key
()]][
key
]
=
value
elif
isinstance
(
self
.
get_raw
(),
dict
)
and
self
.
get_raw
()
is
not
None
:
# Stats are stored in a dict (ex: CPU, LOAD...)
for
key
in
self
.
get_raw
().
keys
(
):
for
key
in
iterkeys
(
self
.
get_raw
()
):
value
=
{
'decoration'
:
'DEFAULT'
,
'optional'
:
False
,
'additional'
:
False
,
...
...
@@ -652,16 +652,10 @@ class GlancesPlugin(object):
"""Log (DEBUG) the result of the function fct."""
def
wrapper
(
*
args
,
**
kw
):
ret
=
fct
(
*
args
,
**
kw
)
if
is_py3
:
logger
.
debug
(
"%s %s %s return %s"
%
(
args
[
0
].
__class__
.
__name__
,
args
[
0
].
__class__
.
__module__
[
len
(
'glances_'
):],
fct
.
__name__
,
ret
))
else
:
logger
.
debug
(
"%s %s %s return %s"
%
(
args
[
0
].
__class__
.
__name__
,
args
[
0
].
__class__
.
__module__
[
len
(
'glances_'
):],
fct
.
func_name
,
ret
))
logger
.
debug
(
"%s %s %s return %s"
%
(
args
[
0
].
__class__
.
__name__
,
args
[
0
].
__class__
.
__module__
[
len
(
'glances_'
):],
fct
.
__name__
,
ret
))
return
ret
return
wrapper
...
...
glances/plugins/glances_processlist.py
浏览文件 @
25f531e3
...
...
@@ -25,6 +25,7 @@ import os
from
datetime
import
timedelta
# Import Glances libs
from
glances.core.compat
import
iteritems
from
glances.core.glances_logging
import
logger
from
glances.plugins.glances_core
import
Plugin
as
CorePlugin
from
glances.core.glances_globals
import
is_windows
...
...
@@ -34,9 +35,6 @@ from glances.plugins.glances_plugin import GlancesPlugin
def
convert_timedelta
(
delta
):
"""Convert timedelta to human-readable time."""
# Python 2.7+:
# total_seconds = delta.total_seconds()
# hours = total_seconds // 3600
days
,
total_seconds
=
delta
.
days
,
delta
.
seconds
hours
=
days
*
24
+
total_seconds
//
3600
minutes
=
(
total_seconds
%
3600
)
//
60
...
...
@@ -334,7 +332,7 @@ class Plugin(GlancesPlugin):
if
'memory_info_ex'
in
p
and
p
[
'memory_info_ex'
]
is
not
None
:
ret
.
append
(
self
.
curse_new_line
())
msg
=
xpad
+
'Memory info: '
for
k
,
v
in
p
[
'memory_info_ex'
].
_asdict
().
items
(
):
for
k
,
v
in
iteritems
(
p
[
'memory_info_ex'
].
_asdict
()
):
# Ignore rss and vms (already displayed)
if
k
not
in
[
'rss'
,
'vms'
]
and
v
is
not
None
:
msg
+=
k
+
' '
+
self
.
auto_unit
(
v
,
low_precision
=
False
)
+
' '
...
...
glances/plugins/glances_raid.py
浏览文件 @
25f531e3
...
...
@@ -20,6 +20,7 @@
"""RAID plugin."""
# Import Glances libs
from
glances.core.compat
import
iterkeys
from
glances.core.glances_logging
import
logger
from
glances.plugins.glances_plugin
import
GlancesPlugin
...
...
@@ -94,7 +95,7 @@ class Plugin(GlancesPlugin):
msg
=
'{0:>6}'
.
format
(
'Avail'
)
ret
.
append
(
self
.
curse_add_line
(
msg
))
# Data
arrays
=
self
.
stats
.
keys
(
)
arrays
=
iterkeys
(
self
.
stats
)
arrays
.
sort
()
for
array
in
arrays
:
# New line
...
...
@@ -114,7 +115,7 @@ class Plugin(GlancesPlugin):
ret
.
append
(
self
.
curse_new_line
())
msg
=
'└─ Status {0}'
.
format
(
self
.
stats
[
array
][
'status'
])
ret
.
append
(
self
.
curse_add_line
(
msg
,
status
))
components
=
self
.
stats
[
array
][
'components'
].
keys
(
)
components
=
iterkeys
(
self
.
stats
[
array
][
'components'
]
)
components
.
sort
()
for
i
,
component
in
enumerate
(
components
):
if
i
==
len
(
components
)
-
1
:
...
...
glances/plugins/glances_system.py
浏览文件 @
25f531e3
...
...
@@ -23,8 +23,10 @@
import
os
import
platform
import
re
from
io
import
open
# Import Glances libs
from
glances.core.compat
import
iteritems
from
glances.plugins.glances_plugin
import
GlancesPlugin
# SNMP OID
...
...
@@ -148,11 +150,7 @@ class Plugin(GlancesPlugin):
self
.
stats
[
'os_name'
]
=
self
.
stats
[
'system_name'
]
# Windows OS tips
if
self
.
short_system_name
==
'windows'
:
try
:
iteritems
=
snmp_to_human
[
'windows'
].
iteritems
()
except
AttributeError
:
iteritems
=
snmp_to_human
[
'windows'
].
items
()
for
r
,
v
in
iteritems
:
for
r
,
v
in
iteritems
(
snmp_to_human
[
'windows'
]):
if
re
.
search
(
r
,
self
.
stats
[
'system_name'
]):
self
.
stats
[
'os_name'
]
=
v
break
...
...
unitest-restful.py
浏览文件 @
25f531e3
...
...
@@ -25,15 +25,11 @@ import subprocess
import
time
import
unittest
from
glances.core.compat
import
text_type
from
glances.core.glances_globals
import
version
import
requests
try
:
text_type
=
str
except
NameError
:
text_type
=
unicode
SERVER_PORT
=
61234
URL
=
"http://localhost:%s/api/2"
%
SERVER_PORT
pid
=
None
...
...
unitest-xmlrpc.py
浏览文件 @
25f531e3
...
...
@@ -25,12 +25,8 @@ import shlex
import
subprocess
import
time
import
unittest
try
:
from
xmlrpc.client
import
ServerProxy
except
ImportError
:
# Python 2
from
xmlrpclib
import
ServerProxy
from
glances.core.compat
import
ServerProxy
from
glances.core.glances_globals
import
version
SERVER_PORT
=
61234
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录