diff --git a/README.md b/README.md new file mode 100644 index 0000000..76d677b --- /dev/null +++ b/README.md @@ -0,0 +1,65 @@ +# 简介 +用于在**终端**同时查看**多个**服务器上的显卡状态。 +对`显卡型号、温度、显存占用、显卡利用率`进行可视化,并根据显存占用、显卡利用率来显示为空闲或者占用。 + +该程序本质上就是通过ssh登录服务器,然后通过`nvidia-smi`命令获取到显卡的信息,然后将所有服务器的信息汇总可视化。所以需要设置密码或者密钥,但是该程序**不会做任何的记录或者上传这些敏感信息**,具体逻辑可以查看源码。并且因为是使用`nvidia-smi`获取的数据,所以如果没有正确安装驱动或者不是N卡的话可能无法获取显卡信息。 +## 效果 +1. 表格形式可视化(实时) +![](pics/demo1.png) +2. 直接输出 +![](pics/demo2.png) +# 使用说明 +## 步骤 +1. 安装所需的python库 +```bash +pip install paramiko socket -i https://pypi.tuna.tsinghua.edu.cn/simple +``` +2. 配置服务器信息 +复制`serverList_examlpe.json`并改名为`serverList.json`,参考实例填写需要监控的服务器信息,格式如下。 +```json +[ + { + "title": "233", + "ip": "10.1.16.233", + "port": 22, + "username": "lxb", + "password": "abcdefg" + }, + { + "title": "76", + "ip": "10.1.16.76", + "port": 22, + "username": "lxb", + "key_filename": "/home/.ssh/id_rsa" + } +] +``` +代表的信息为: +- title : 标题,显示在终端中 +- ip : 服务器的ip +- port : 连接的端口(如果直接连服务器的话一般是22,如果是连接内部的容器或者是网上租的其他服务器一般要改为对应的端口) +- username : 用于登录的用户名 +- password : 用户的登陆密码(密码、密钥选其一即可) +- key_filename : 用户私钥的本地路径(密码、密钥选其一即可) +3. 在终端运行`check.py`文件即可。 +```bash +python check.py +``` +## 说明 +- 代码跑起来之后,终端会输出`->`,此时可以输入命令,回车执行。输入help回车可以查看帮助。 +- 输入`check`可以查询一次所有服务器的信息。 +- 输入`list`可以查看所有服务器的配置信息。 +- 输入`cell-width`或`cw`可以查询当前的单元格大小(table模式的单元格),带上参数`-`为重置为默认值,如`cw -`。带上4个整数为修改单元格大小,如`cw 12,23,4,5`。 +- 输入`clear`或者`cls`可以清空屏幕。 +- 输入`exit`退出程序。 +- 输入`realtime`或者`rt`实时查看显卡信息(开启实时查看之后只能`ctrl+C`退出程序),并且`realtime`还有参数可以指定。 + - `-h`、`--help`,查看帮助。 + - `-n `,更新时间,单位为秒,默认为2。例`-n 1`。 + - `-e `,指定title的服务器本次过滤掉不显示,输入多个时用`,`分割。例`-e 529,174`。 + - `-t`、`--table`,使用表格的形式绘制,不设置该参数时为直接输出的形式。 + - `--f2`,使用第二种刷新方式(),默认不开启。该选项的背景是,在windows的CMD中清屏操作有时候会导致终端闪烁(实测Ubuntu的不闪),所以就有了第二种刷新方式,通过直接覆盖的方式避免了闪烁。但是第二种刷新方式会窗口大小变化后造成其他的渲染问题。可根据需求选择,一般来说直接默认不开启就可以了。 + - 例如此时用表格形式,每秒更新,本次不显示529,174title的服务,用第一种刷新方式,为`rt -t -n 1 -e 529,174`。 +- 当某个服务器的ssh连接断开时(或者没连上或者发生什么错误),该服务器对应的显卡不显示,变为显示对应的错误信息以供排查。并且会隔一段时间自动重连,同时显示已经重连的次数。 +- 如果本次刷新时,发现某个服务器并没有获取到最新的数据,则会在title的下面显示一个红色的`X`,下次再更新到新的数据则会取消。如果还是没有更新就会识别为断开连接。 +- 可以在`check.py`中查找`get_bar`函数,可以找到`res.extend(['█'] * used_len) # █ ▒ ▶ ▀ ■ ━`这行代码,替换里面的字符就可以替换表格形式绘制时候的slider样式。 +- 同样的搜索`table_icon`,可以修改表格形式绘制时表格的样式,内置了`table_icon1`、`table_icon2`、`table_icon3`三种,可以自行替换。 \ No newline at end of file diff --git a/check.py b/check.py index e0b3444..e424664 100644 --- a/check.py +++ b/check.py @@ -184,7 +184,7 @@ def get_bar(bar_ratio, max_len, color=False): assert 0 <= bar_ratio <= 1 res = [] used_len = int(bar_ratio * max_len) - res.extend(['▒'] * used_len) # █ ▒ ▶ ▀ ■ ━ + res.extend(['█'] * used_len) # █ ▒ ▶ ▀ ■ ━ res.extend([' '] * (max_len-used_len)) if color: diff --git a/pics/demo1.png b/pics/demo1.png new file mode 100644 index 0000000..549a747 Binary files /dev/null and b/pics/demo1.png differ diff --git a/pics/demo2.png b/pics/demo2.png new file mode 100644 index 0000000..1cb5484 Binary files /dev/null and b/pics/demo2.png differ diff --git a/serverList_examlpe.json b/serverList_examlpe.json index 2153265..248a7dd 100644 --- a/serverList_examlpe.json +++ b/serverList_examlpe.json @@ -4,7 +4,7 @@ "ip": "10.1.16.233", "port": 22, "username": "lxb", - "key_filename": "/home/.ssh/id_rsa" + "password": "abcdefg" }, { "title": "76",