Browse Source

增加网速的查看

master
lxbhahaha 10 months ago
parent
commit
7280ca69d3
  1. 12
      README.md
  2. 25
      app.py
  3. 18
      index.html

12
README.md

@ -0,0 +1,12 @@
# 1. 简介
TODO
# 2. 安装
## 2.1. 运行环境
TODO
## 2.2. 服务器环境
因为本质上是通过ssh连接服务器,然后通过命令来获取相应的信息,有的命令可能服务器系统上不自带需要另外安装,否则无法获取到对应的数据。
- **ifstat**,用于获取网络数据的工具,可通过apt安装。并且需要在服务器上运行一下命令,查看哪个网卡才是主要的,写到配置文件里去。
- **nvidia驱动**,需要安装N卡的驱动,通过`nvidia-smi`来获取显卡信息。
## 2.3. 网页部署
TODO

25
app.py

@ -124,6 +124,23 @@ def get_memory_info(client, timeout, info_list:list=None):
info_list.append(f'memory: {e}') info_list.append(f'memory: {e}')
return None return None
def get_network_info(client, timeout, interface_name, info_list:list=None):
try:
if interface_name is None:
return None
stdin, stdout, stderr = client.exec_command(f'ifstat -i {interface_name} 0.1 1', timeout=timeout)
output = stdout.read().decode().split('\n')[2]
data = output.split()
result = {
"in": float(data[0]),
"out": float(data[1])
}
return result
except Exception as e:
if info_list is not None:
info_list.append(f'network: {e}')
return None
# 持续获取一个服务器的信息 # 持续获取一个服务器的信息
def keep_check_one(server: dict, shared_data_list: dict, server_title: str, interval: float, re_connect_time: float=5): def keep_check_one(server: dict, shared_data_list: dict, server_title: str, interval: float, re_connect_time: float=5):
# 处理一下需要检查的存储空间路径 # 处理一下需要检查的存储空间路径
@ -156,12 +173,15 @@ def keep_check_one(server: dict, shared_data_list: dict, server_title: str, inte
storage_info = get_storage_info(client, interval*3, server['storage_list'], info_list=error_info_list) storage_info = get_storage_info(client, interval*3, server['storage_list'], info_list=error_info_list)
# 内存信息 # 内存信息
memory_info = get_memory_info(client, interval*3, info_list=error_info_list) memory_info = get_memory_info(client, interval*3, info_list=error_info_list)
# 网络信息
network_info = get_network_info(client, interval*3, server.get('network_interface_name', None), info_list=error_info_list)
# 记录信息 # 记录信息
with data_list_lock: with data_list_lock:
shared_data_list[server_title]['gpu_info_list'] = gpu_info shared_data_list[server_title]['gpu_info_list'] = gpu_info
shared_data_list[server_title]['storage_info_list'] = storage_info shared_data_list[server_title]['storage_info_list'] = storage_info
shared_data_list[server_title]['memory_info'] = memory_info shared_data_list[server_title]['memory_info'] = memory_info
shared_data_list[server_title]['network_info'] = network_info
shared_data_list[server_title]['updated'] = True shared_data_list[server_title]['updated'] = True
shared_data_list[server_title]['maxGPU'] = len(gpu_info) shared_data_list[server_title]['maxGPU'] = len(gpu_info)
if len(error_info_list) > 0: if len(error_info_list) > 0:
@ -217,6 +237,11 @@ def filter_data(title_list: list):
memory_info = data_dict[title].get('memory_info', None) memory_info = data_dict[title].get('memory_info', None)
if memory_info is not None: if memory_info is not None:
server_data[title]['memory_info'] = memory_info server_data[title]['memory_info'] = memory_info
# 网络
network_info = data_dict[title].get('network_info', None)
if network_info is not None:
server_data[title]['network_info'] = network_info
result['time'] = datetime.now().strftime('%Y-%m-%d %H:%M:%S') result['time'] = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
result['server_data'] = server_data result['server_data'] = server_data
return result return result

18
index.html

@ -107,6 +107,22 @@
let updateFlag = serverData[key].updated ? '' : ' - Not updated -'; let updateFlag = serverData[key].updated ? '' : ' - Not updated -';
serverName.textContent = key + updateFlag; serverName.textContent = key + updateFlag;
serverCard.appendChild(serverName); serverCard.appendChild(serverName);
// 网速
if ('network_info' in serverData[key]){
let networkInfo = document.createElement('div');
networkInfo.classList.add('network-info');
let inNum = serverData[key].network_info.in;
let outNum = serverData[key].network_info.out;
networkInfo.innerHTML += "<strong> 网络 : </strong> in: " + inNum.toFixed(1) + " KB/s, out: " + outNum.toFixed(1) + " KB/s";
serverCard.appendChild(networkInfo);
// 分割线
add_bar(serverCard);
}
// 内存 // 内存
if ('memory_info' in serverData[key]){ if ('memory_info' in serverData[key]){
let memoryInfo = document.createElement('div'); let memoryInfo = document.createElement('div');
@ -175,6 +191,8 @@
serverCard.appendChild(gpuInfo); serverCard.appendChild(gpuInfo);
}); });
} }
// 错误信息
if ('err_info' in serverData[key]) if ('err_info' in serverData[key])
{ {
// 分割线 // 分割线

Loading…
Cancel
Save