Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
蜕变的菜鸟
glances
提交
a0f24a3b
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 搜索 >>
提交
a0f24a3b
编写于
4月 19, 2021
作者:
N
nicolargo
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'issue1847' into develop
上级
b8dade99
49029112
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
146 addition
and
3 deletion
+146
-3
glances/__init__.py
glances/__init__.py
+6
-1
glances/main.py
glances/main.py
+2
-0
glances/outputs/glances_stdout_issue.py
glances/outputs/glances_stdout_issue.py
+123
-0
glances/standalone.py
glances/standalone.py
+15
-2
未找到文件。
glances/__init__.py
浏览文件 @
a0f24a3b
...
...
@@ -111,7 +111,12 @@ def start(config, args):
# Start the main loop
logger
.
debug
(
"Glances started in {} seconds"
.
format
(
start_duration
.
get
()))
mode
.
serve_forever
()
if
args
.
stdout_issue
:
# Serve once for issue/test mode
mode
.
serve_issue
()
else
:
# Serve forever
mode
.
serve_forever
()
# Shutdown
mode
.
end
()
...
...
glances/main.py
浏览文件 @
a0f24a3b
...
...
@@ -234,6 +234,8 @@ Examples of use:
dest
=
'stdout'
,
help
=
'display stats to stdout, one stat per line (comma separated list of plugins/plugins.attribute)'
)
parser
.
add_argument
(
'--stdout-csv'
,
default
=
None
,
dest
=
'stdout_csv'
,
help
=
'display stats to stdout, csv format (comma separated list of plugins/plugins.attribute)'
)
parser
.
add_argument
(
'--issue'
,
default
=
None
,
action
=
'store_true'
,
dest
=
'stdout_issue'
,
help
=
'test all plugins and exit (please copy/paste the output if you open an issue)'
)
if
not
WINDOWS
:
parser
.
add_argument
(
'--hide-kernel-threads'
,
action
=
'store_true'
,
default
=
False
,
dest
=
'no_kernel_threads'
,
help
=
'hide kernel threads in process list (not available on Windows)'
)
...
...
glances/outputs/glances_stdout_issue.py
0 → 100644
浏览文件 @
a0f24a3b
# -*- coding: utf-8 -*-
#
# This file is part of Glances.
#
# Copyright (C) 2021 Nicolargo <nicolas@nicolargo.com>
#
# Glances is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Glances is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# 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/>.
"""Issue interface class."""
import
time
import
sys
import
shutil
from
glances.logger
import
logger
from
glances.compat
import
printandflush
from
glances.timer
import
Counter
from
glances
import
__version__
,
psutil_version
try
:
TERMINAL_WIDTH
=
shutil
.
get_terminal_size
(
fallback
=
(
79
,
24
)).
columns
except
:
TERMINAL_WIDTH
=
79
class
colors
:
RED
=
'
\033
[91m'
GREEN
=
'
\033
[92m'
ORANGE
=
'
\033
[93m'
BLUE
=
'
\033
[94m'
NO
=
'
\033
[0m'
def
disable
(
self
):
self
.
RED
=
''
self
.
GREEN
=
''
self
.
BLUE
=
''
self
.
ORANGE
=
''
self
.
NO
=
''
class
GlancesStdoutIssue
(
object
):
"""
This class manages the Issue display.
"""
def
__init__
(
self
,
config
=
None
,
args
=
None
):
# Init
self
.
config
=
config
self
.
args
=
args
def
end
(
self
):
pass
def
print_version
(
self
):
msg
=
'Glances version {} with PsUtil {}'
.
format
(
colors
.
BLUE
+
__version__
+
colors
.
NO
,
colors
.
BLUE
+
psutil_version
+
colors
.
NO
)
sys
.
stdout
.
write
(
'='
*
len
(
msg
)
+
'
\n
'
)
sys
.
stdout
.
write
(
msg
)
sys
.
stdout
.
write
(
colors
.
NO
+
'
\n
'
)
sys
.
stdout
.
write
(
'='
*
len
(
msg
)
+
'
\n
'
)
sys
.
stdout
.
flush
()
def
print_issue
(
self
,
plugin
,
result
,
message
):
sys
.
stdout
.
write
(
'{}{}{}'
.
format
(
colors
.
BLUE
+
plugin
,
result
,
message
))
sys
.
stdout
.
write
(
colors
.
NO
+
'
\n
'
)
sys
.
stdout
.
flush
()
def
update
(
self
,
stats
,
duration
=
3
):
"""Display issue
"""
self
.
print_version
()
for
plugin
in
sorted
(
stats
.
_plugins
):
if
stats
.
_plugins
[
plugin
].
is_disable
():
# If current plugin is disable
# then continue to next plugin
result
=
colors
.
ORANGE
+
'[N/A]'
.
rjust
(
19
-
len
(
plugin
))
message
=
colors
.
NO
self
.
print_issue
(
plugin
,
result
,
message
)
continue
# Start the counter
counter
=
Counter
()
counter
.
reset
()
stat
=
None
stat_error
=
None
try
:
# Update the stats
stats
.
_plugins
[
plugin
].
update
()
# Get the stats
stat
=
stats
.
get_plugin
(
plugin
).
get_export
()
except
Exception
as
e
:
stat_error
=
e
if
stat_error
is
None
:
result
=
(
colors
.
GREEN
+
'[OK] '
+
colors
.
BLUE
+
' {:.4f}s '
.
format
(
counter
.
get
())).
rjust
(
40
-
len
(
plugin
))
message
=
colors
.
NO
+
str
(
stat
)[
0
:
TERMINAL_WIDTH
-
40
]
else
:
result
=
(
colors
.
RED
+
'[ERROR]'
+
colors
.
BLUE
+
' {:.4f}s '
.
format
(
counter
.
get
())).
rjust
(
40
-
len
(
plugin
))
message
=
colors
.
NO
+
str
(
stat_error
)[
0
:
TERMINAL_WIDTH
-
40
]
self
.
print_issue
(
plugin
,
result
,
message
)
# Return True to exit directly (no refresh)
return
True
glances/standalone.py
浏览文件 @
a0f24a3b
...
...
@@ -29,6 +29,7 @@ from glances.stats import GlancesStats
from
glances.outputs.glances_curses
import
GlancesCursesStandalone
from
glances.outputs.glances_stdout
import
GlancesStdout
from
glances.outputs.glances_stdout_csv
import
GlancesStdoutCsv
from
glances.outputs.glances_stdout_issue
import
GlancesStdoutIssue
from
glances.outdated
import
Outdated
from
glances.timer
import
Counter
...
...
@@ -82,6 +83,10 @@ class GlancesStandalone(object):
logger
.
info
(
"Quiet mode is ON, nothing will be displayed"
)
# In quiet mode, nothing is displayed
glances_processes
.
max_processes
=
0
elif
args
.
stdout_issue
:
logger
.
info
(
"Issue mode is ON"
)
# Init screen
self
.
screen
=
GlancesStdoutIssue
(
config
=
config
,
args
=
args
)
elif
args
.
stdout
:
logger
.
info
(
"Stdout mode is ON, following stats will be displayed: {}"
.
format
(
args
.
stdout
))
# Init screen
...
...
@@ -111,7 +116,15 @@ class GlancesStandalone(object):
print
(
"Exporters list: {}"
.
format
(
', '
.
join
(
sorted
(
self
.
stats
.
getExportsList
(
enable
=
False
)))))
def
__serve_forever
(
self
):
def
serve_issue
(
self
):
"""Special mode for the --issue option
Update is done in the sceen.update function
"""
ret
=
not
self
.
screen
.
update
(
self
.
stats
)
self
.
end
()
return
ret
def
__serve_once
(
self
):
"""Main loop for the CLI.
return True if we should continue (no exit key has been pressed)
...
...
@@ -151,7 +164,7 @@ class GlancesStandalone(object):
"""Wrapper to the serve_forever function."""
loop
=
True
while
loop
:
loop
=
self
.
__serve_
forever
()
loop
=
self
.
__serve_
once
()
self
.
end
()
def
end
(
self
):
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录