mirror of https://github.com/midoks/mdserver-web
parent
8803d3ee03
commit
31571a60e3
@ -0,0 +1,41 @@ |
||||
# coding:utf-8 |
||||
|
||||
# --------------------------------------------------------------------------------- |
||||
# MW-Linux面板 |
||||
# --------------------------------------------------------------------------------- |
||||
# copyright (c) 2018-∞(https://github.com/midoks/mdserver-web) All rights reserved. |
||||
# --------------------------------------------------------------------------------- |
||||
# Author: midoks <midoks@163.com> |
||||
# --------------------------------------------------------------------------------- |
||||
|
||||
from admin.model import db, Firewall |
||||
|
||||
import core.mw as mw |
||||
|
||||
|
||||
|
||||
def addFirewall(port, |
||||
protocol: str | None = 'tcp', |
||||
ps: str | None = '备注' |
||||
) -> bool: |
||||
''' |
||||
设置配置的值 |
||||
:port -> str 端口 (必填) |
||||
:protocol -> str 协议 (可选|tcp,udp,tcp/udp) |
||||
:ps -> str 备注 (可选) |
||||
''' |
||||
now_time = mw.formatDate() |
||||
add_data = Firewall( |
||||
port=port, |
||||
protocol=protocol, |
||||
add_time=now_time, |
||||
update_time=now_time) |
||||
db.session.add(add_data) |
||||
db.session.commit() |
||||
return True |
||||
|
||||
|
||||
def getFirewallCountByPort(port): |
||||
return Firewall.query.filter(Tasks.port==port).count() |
||||
|
||||
|
@ -0,0 +1,158 @@ |
||||
# coding:utf-8 |
||||
|
||||
# --------------------------------------------------------------------------------- |
||||
# MW-Linux面板 |
||||
# --------------------------------------------------------------------------------- |
||||
# copyright (c) 2018-∞(https://github.com/midoks/mdserver-web) All rights reserved. |
||||
# --------------------------------------------------------------------------------- |
||||
# Author: midoks <midoks@163.com> |
||||
# --------------------------------------------------------------------------------- |
||||
|
||||
|
||||
from flask import Blueprint, render_template |
||||
from flask import request |
||||
|
||||
from admin.user_login_check import panel_login_required |
||||
import admin.model.option as option |
||||
|
||||
import core.mw as mw |
||||
import utils.system as sys |
||||
|
||||
|
||||
blueprint = Blueprint('system', __name__, url_prefix='/system', template_folder='../../templates') |
||||
|
||||
# 获取系统的统计信息 |
||||
@blueprint.route('/system_total', endpoint='system_total') |
||||
@panel_login_required |
||||
def system_total(): |
||||
data = sys.getMemInfo() |
||||
cpu = sys.getCpuInfo(interval=1) |
||||
data['cpuNum'] = cpu[1] |
||||
data['cpuRealUsed'] = cpu[0] |
||||
data['time'] = sys.getBootTime() |
||||
data['system'] = sys.getSystemVersion() |
||||
data['version'] = '0.0.1' |
||||
return data |
||||
|
||||
# 获取系统的网络流量信息 |
||||
@blueprint.route('/network', endpoint='network') |
||||
@panel_login_required |
||||
def network(): |
||||
stat = {} |
||||
stat['cpu'] = sys.getCpuInfo() |
||||
stat['load'] = sys.getLoadAverage() |
||||
stat['mem'] = sys.getMemInfo() |
||||
stat['iostat'] = sys.stats().disk() |
||||
stat['network'] = sys.stats().network() |
||||
return stat |
||||
|
||||
# 获取系统的磁盘信息 |
||||
@blueprint.route('/disk_info', endpoint='disk_info') |
||||
@panel_login_required |
||||
def disk_info(): |
||||
data = sys.getDiskInfo() |
||||
return data |
||||
|
||||
# 获取系统的负载统计信息 |
||||
@blueprint.route('/get_load_average', endpoint='get_load_average', methods=['GET']) |
||||
@panel_login_required |
||||
def get_load_average(): |
||||
start = request.args.get('start', '') |
||||
end = request.args.get('end', '') |
||||
return sys.getLoadAverageByDB(start, end) |
||||
|
||||
# 获取系统的磁盘IO统计信息 |
||||
@blueprint.route('/get_disk_io', endpoint='get_disk_io', methods=['GET']) |
||||
@panel_login_required |
||||
def get_disk_io(): |
||||
start = request.args.get('start', '') |
||||
end = request.args.get('end', '') |
||||
return sys.getDiskIoByDB(start, end) |
||||
|
||||
# 获取系统的CPU/IO统计信息 |
||||
@blueprint.route('/get_cpu_io', endpoint='get_cpu_io', methods=['GET']) |
||||
@panel_login_required |
||||
def get_cpu_io(): |
||||
start = request.args.get('start', '') |
||||
end = request.args.get('end', '') |
||||
return sys.getCpuIoByDB(start, end) |
||||
|
||||
# 获取系统网络IO统计信息 |
||||
@blueprint.route('/get_network_io', endpoint='get_network_io', methods=['GET']) |
||||
@panel_login_required |
||||
def get_network_io(): |
||||
start = request.args.get('start', '') |
||||
end = request.args.get('end', '') |
||||
return sys.getNetworkIoByDB(start, end) |
||||
|
||||
# 重启面板 |
||||
@blueprint.route('/restart', endpoint='restart', methods=['POST']) |
||||
@panel_login_required |
||||
def restart(): |
||||
mw.restartMw() |
||||
return mw.returnData(True, '面板已重启!') |
||||
|
||||
# 重启面板 |
||||
@blueprint.route('/restart_server', endpoint='restart_server', methods=['POST']) |
||||
@panel_login_required |
||||
def restart_server(): |
||||
mw.restartMw() |
||||
return mw.returnData(True, '面板已重启!') |
||||
|
||||
|
||||
|
||||
# 设置 |
||||
@blueprint.route('/set_control', endpoint='set_control', methods=['POST']) |
||||
@panel_login_required |
||||
def set_control(): |
||||
stype = request.form.get('type', '') |
||||
day = request.form.get('day', '') |
||||
|
||||
if stype == '0': |
||||
option.setOption('monitor_status', 'close', type='monitor') |
||||
return mw.returnData(True, "设置成功!") |
||||
elif stype == '1': |
||||
_day = int(day) |
||||
if _day < 1: |
||||
return mw.returnData(False, "设置失败!") |
||||
option.setOption('monitor_day', day, type='monitor') |
||||
return mw.returnData(True, "设置成功!") |
||||
elif stype == '2': |
||||
option.setOption('monitor_only_netio', 'close', type='monitor') |
||||
return mw.returnData(True, "设置成功!") |
||||
elif stype == '3': |
||||
option.setOption('monitor_only_netio', 'open', type='monitor') |
||||
return mw.returnData(True, "设置成功!") |
||||
elif stype == 'del': |
||||
if not mw.isRestart(): |
||||
return mw.returnData(False, '请等待所有安装任务完成再执行') |
||||
os.remove("data/system.db") |
||||
|
||||
sql = db.Sql().dbfile('system') |
||||
csql = mw.readFile('data/sql/system.sql') |
||||
csql_list = csql.split(';') |
||||
for index in range(len(csql_list)): |
||||
sql.execute(csql_list[index], ()) |
||||
return mw.returnData(True, "监控服务已关闭") |
||||
else: |
||||
monitor_status = option.getOption('monitor_status', default='open', type='monitor') |
||||
monitor_day = option.getOption('monitor_day', default='30', type='monitor') |
||||
monitor_only_netio = option.getOption('monitor_only_netio', default='open', type='monitor') |
||||
data = {} |
||||
data['day'] = monitor_day |
||||
if monitor_status == 'open': |
||||
data['status'] = True |
||||
else: |
||||
data['status'] = False |
||||
if monitor_only_netio == 'open': |
||||
data['stat_all_status'] = True |
||||
else: |
||||
data['stat_all_status'] = False |
||||
|
||||
return data |
||||
|
||||
return mw.returnData(False, "异常!") |
||||
|
||||
|
||||
|
||||
|
@ -0,0 +1,34 @@ |
||||
# coding:utf-8 |
||||
|
||||
# --------------------------------------------------------------------------------- |
||||
# MW-Linux面板 |
||||
# --------------------------------------------------------------------------------- |
||||
# copyright (c) 2018-∞(https://github.com/midoks/mdserver-web) All rights reserved. |
||||
# --------------------------------------------------------------------------------- |
||||
# Author: midoks <midoks@163.com> |
||||
# --------------------------------------------------------------------------------- |
||||
|
||||
|
||||
from flask import Blueprint, render_template |
||||
from flask import request |
||||
|
||||
from admin.user_login_check import panel_login_required |
||||
|
||||
from admin import model |
||||
|
||||
import core.mw as mw |
||||
import utils.system as sys |
||||
|
||||
from .system import blueprint |
||||
|
||||
# 升级检测 |
||||
@blueprint.route('/update_server', endpoint='update_server') |
||||
@panel_login_required |
||||
def update_server(): |
||||
panel_type = request.args.get('type', 'check') |
||||
version = request.args.get('version', '') |
||||
|
||||
return mw.returnData(False, '已经是最新,无需更新!') |
||||
|
||||
|
||||
|
@ -0,0 +1,153 @@ |
||||
# coding:utf-8 |
||||
|
||||
# --------------------------------------------------------------------------------- |
||||
# MW-Linux面板 |
||||
# --------------------------------------------------------------------------------- |
||||
# copyright (c) 2018-∞(https://github.com/midoks/mdserver-web) All rights reserved. |
||||
# --------------------------------------------------------------------------------- |
||||
# Author: midoks <midoks@163.com> |
||||
# --------------------------------------------------------------------------------- |
||||
|
||||
import os |
||||
import sys |
||||
import re |
||||
import time |
||||
import math |
||||
import psutil |
||||
|
||||
|
||||
import core.mw as mw |
||||
|
||||
def getDiskInfo(): |
||||
# 取磁盘分区信息 |
||||
temp = mw.execShell("df -h -P|grep '/'|grep -v tmpfs | grep -v devfs")[0] |
||||
tempInodes = mw.execShell("df -i -P|grep '/'|grep -v tmpfs | grep -v devfs")[0] |
||||
temp1 = temp.split('\n') |
||||
tempInodes1 = tempInodes.split('\n') |
||||
diskInfo = [] |
||||
n = 0 |
||||
cuts = ['/mnt/cdrom', '/boot', '/boot/efi', '/dev', |
||||
'/dev/shm', '/zroot', '/run/lock', '/run', '/run/shm', '/run/user'] |
||||
for tmp in temp1: |
||||
n += 1 |
||||
inodes = tempInodes1[n - 1].split() |
||||
disk = tmp.split() |
||||
if len(disk) < 5: |
||||
continue |
||||
if disk[1].find('M') != -1: |
||||
continue |
||||
if disk[1].find('K') != -1: |
||||
continue |
||||
if len(disk[5].split('/')) > 4: |
||||
continue |
||||
if disk[5] in cuts: |
||||
continue |
||||
arr = {} |
||||
arr['path'] = disk[5] |
||||
tmp1 = [disk[1], disk[2], disk[3], disk[4]] |
||||
arr['size'] = tmp1 |
||||
arr['inodes'] = [inodes[1], inodes[2], inodes[3], inodes[4]] |
||||
diskInfo.append(arr) |
||||
return diskInfo |
||||
|
||||
|
||||
def getLoadAverage(): |
||||
c = os.getloadavg() |
||||
data = {} |
||||
data['one'] = round(float(c[0]), 2) |
||||
data['five'] = round(float(c[1]), 2) |
||||
data['fifteen'] = round(float(c[2]), 2) |
||||
data['max'] = psutil.cpu_count() * 2 |
||||
data['limit'] = data['max'] |
||||
data['safe'] = data['max'] * 0.75 |
||||
return data |
||||
|
||||
def getSystemVersion(): |
||||
# 取操作系统版本 |
||||
current_os = mw.getOs() |
||||
# sys_temper = self.getSystemDeviceTemperature() |
||||
# print(sys_temper) |
||||
# mac |
||||
if current_os == 'darwin': |
||||
data = mw.execShell('sw_vers')[0] |
||||
data_list = data.strip().split("\n") |
||||
mac_version = '' |
||||
for x in data_list: |
||||
xlist = x.split("\t") |
||||
mac_version += xlist[len(xlist)-1] + ' ' |
||||
|
||||
arch_ver = mw.execShell("arch") |
||||
return mac_version + " (" + arch_ver[0].strip() + ")" |
||||
|
||||
# freebsd |
||||
if current_os.startswith('freebsd'): |
||||
version = mw.execShell( |
||||
"cat /etc/*-release | grep PRETTY_NAME | awk -F = '{print $2}' | awk -F '\"' '{print $2}'") |
||||
arch_ver = mw.execShell( |
||||
"sysctl -a | egrep -i 'hw.machine_arch' | awk -F ':' '{print $2}'") |
||||
return version[0].strip() + " (" + arch_ver[0].strip() + ")" |
||||
|
||||
redhat_series = '/etc/redhat-release' |
||||
if os.path.exists(redhat_series): |
||||
version = mw.readFile('/etc/redhat-release') |
||||
version = version.replace('release ', '').strip() |
||||
|
||||
arch_ver = mw.execShell("arch") |
||||
return version + " (" + arch_ver[0].strip() + ")" |
||||
|
||||
os_series = '/etc/os-release' |
||||
if os.path.exists(os_series): |
||||
version = mw.execShell( |
||||
"cat /etc/*-release | grep PRETTY_NAME | awk -F = '{print $2}' | awk -F '\"' '{print $2}'") |
||||
|
||||
arch_ver = mw.execShell("arch") |
||||
return version[0].strip() + " (" + arch_ver[0].strip() + ")" |
||||
|
||||
def getBootTime(): |
||||
# 取系统启动时间 |
||||
uptime = mw.readFile('/proc/uptime') |
||||
if uptime == False: |
||||
start_time = psutil.boot_time() |
||||
run_time = time.time() - start_time |
||||
else: |
||||
run_time = uptime.split()[0] |
||||
tStr = float(run_time) |
||||
min = tStr / 60 |
||||
hours = min / 60 |
||||
days = math.floor(hours / 24) |
||||
hours = math.floor(hours - (days * 24)) |
||||
min = math.floor(min - (days * 60 * 24) - (hours * 60)) |
||||
return mw.getInfo('已不间断运行: {1}天{2}小时{3}分钟', (str(int(days)), str(int(hours)), str(int(min)))) |
||||
|
||||
def getCpuInfo(interval=1): |
||||
# 取CPU信息 |
||||
cpuCount = psutil.cpu_count() |
||||
cpuLogicalNum = psutil.cpu_count(logical=False) |
||||
used = psutil.cpu_percent(interval=interval) |
||||
cpuLogicalNum = 0 |
||||
if os.path.exists('/proc/cpuinfo'): |
||||
c_tmp = mw.readFile('/proc/cpuinfo') |
||||
d_tmp = re.findall("physical id.+", c_tmp) |
||||
cpuLogicalNum = len(set(d_tmp)) |
||||
|
||||
used_all = psutil.cpu_percent(percpu=True) |
||||
cpu_name = mw.getCpuType() + " * {}".format(cpuLogicalNum) |
||||
return used, cpuCount, used_all, cpu_name, cpuCount, cpuLogicalNum |
||||
|
||||
def getMemInfo(): |
||||
# 取内存信息 |
||||
mem = psutil.virtual_memory() |
||||
if sys.platform == 'darwin': |
||||
memInfo = {'memTotal': mem.total} |
||||
memInfo['memRealUsed'] = memInfo['memTotal'] * (mem.percent / 100) |
||||
else: |
||||
memInfo = { |
||||
'memTotal': mem.total, |
||||
'memFree': mem.free, |
||||
'memBuffers': mem.buffers, |
||||
'memCached': mem.cached |
||||
} |
||||
memInfo['memRealUsed'] = memInfo['memTotal'] - memInfo['memFree'] - memInfo['memBuffers'] - memInfo['memCached'] |
||||
return memInfo |
||||
|
||||
|
@ -0,0 +1,21 @@ |
||||
# coding:utf-8 |
||||
|
||||
# --------------------------------------------------------------------------------- |
||||
# MW-Linux面板 |
||||
# --------------------------------------------------------------------------------- |
||||
# copyright (c) 2018-∞(https://github.com/midoks/mdserver-web) All rights reserved. |
||||
# --------------------------------------------------------------------------------- |
||||
# Author: midoks <midoks@163.com> |
||||
# --------------------------------------------------------------------------------- |
||||
|
||||
import os |
||||
import sys |
||||
import re |
||||
import time |
||||
import math |
||||
import psutil |
||||
|
||||
import core.mw as mw |
||||
|
||||
|
||||
|
@ -0,0 +1,103 @@ |
||||
# coding:utf-8 |
||||
|
||||
# --------------------------------------------------------------------------------- |
||||
# MW-Linux面板 |
||||
# --------------------------------------------------------------------------------- |
||||
# copyright (c) 2018-∞(https://github.com/midoks/mdserver-web) All rights reserved. |
||||
# --------------------------------------------------------------------------------- |
||||
# Author: midoks <midoks@163.com> |
||||
# --------------------------------------------------------------------------------- |
||||
|
||||
import os |
||||
import sys |
||||
import re |
||||
import time |
||||
import math |
||||
import psutil |
||||
|
||||
|
||||
import core.mw as mw |
||||
|
||||
# -------------------------------------------- 数据查询相关 -------------------------------------------- |
||||
# 格式化addtime列 |
||||
def toAddtime(data, tomem=False): |
||||
import time |
||||
if tomem: |
||||
import psutil |
||||
mPre = (psutil.virtual_memory().total / 1024 / 1024) / 100 |
||||
length = len(data) |
||||
he = 1 |
||||
if length > 100: |
||||
he = 1 |
||||
if length > 1000: |
||||
he = 3 |
||||
if length > 10000: |
||||
he = 15 |
||||
if he == 1: |
||||
for i in range(length): |
||||
data[i]['addtime'] = time.strftime( |
||||
'%m/%d %H:%M', time.localtime(float(data[i]['addtime']))) |
||||
if tomem and data[i]['mem'] > 100: |
||||
data[i]['mem'] = data[i]['mem'] / mPre |
||||
|
||||
return data |
||||
else: |
||||
count = 0 |
||||
tmp = [] |
||||
for value in data: |
||||
if count < he: |
||||
count += 1 |
||||
continue |
||||
value['addtime'] = time.strftime( |
||||
'%m/%d %H:%M', time.localtime(float(value['addtime']))) |
||||
if tomem and value['mem'] > 100: |
||||
value['mem'] = value['mem'] / mPre |
||||
tmp.append(value) |
||||
count = 0 |
||||
return tmp |
||||
|
||||
# 格式化addtime列 |
||||
def toUseAddtime(data): |
||||
dlen = len(data) |
||||
for i in range(dlen): |
||||
data[i]['addtime'] = time.strftime('%m/%d %H:%M', time.localtime(float(data[i]['addtime']))) |
||||
return data |
||||
|
||||
def getLoadAverageByDB(start, end): |
||||
# 获取系统的负载统计信息 |
||||
data = mw.M('load_average').dbPos(mw.getPanelDataDir(),'system')\ |
||||
.where("addtime>=? AND addtime<=?", (start, end,))\ |
||||
.field('pro,one,five,fifteen,addtime')\ |
||||
.order('id asc').select() |
||||
data = toUseAddtime(data) |
||||
return data |
||||
|
||||
def getDiskIoByDB(start, end): |
||||
# 获取系统的磁盘IO统计信息 |
||||
data = mw.M('diskio').dbPos(mw.getPanelDataDir(),'system')\ |
||||
.where("addtime>=? AND addtime<=?", (start, end))\ |
||||
.field('read_count,write_count,read_bytes,write_bytes,read_time,write_time,addtime')\ |
||||
.order('id asc').select() |
||||
data = toUseAddtime(data) |
||||
return data |
||||
|
||||
def getCpuIoByDB(start, end): |
||||
# 获取系统的CPU/IO统计信息 |
||||
data = mw.M('cpuio').dbPos(mw.getPanelDataDir(),'system')\ |
||||
.where("addtime>=? AND addtime<=?",(start, end))\ |
||||
.field('pro,mem,addtime')\ |
||||
.order('id asc').select() |
||||
data = toUseAddtime(data) |
||||
return data |
||||
|
||||
def getNetworkIoByDB(start, end): |
||||
# 获取系统网络IO统计信息 |
||||
# id, |
||||
data = mw.M('network').dbPos(mw.getPanelDataDir(),'system')\ |
||||
.where("addtime>=? AND addtime<=?", (start, end))\ |
||||
.field('up,down,total_up,total_down,down_packets,up_packets,addtime')\ |
||||
.order('id asc').select() |
||||
data = toUseAddtime(data) |
||||
return data |
||||
|
||||
# -------------------------------------------- 数据查询相关 -------------------------------------------- |
@ -0,0 +1,161 @@ |
||||
# coding:utf-8 |
||||
|
||||
# --------------------------------------------------------------------------------- |
||||
# MW-Linux面板 |
||||
# --------------------------------------------------------------------------------- |
||||
# copyright (c) 2018-∞(https://github.com/midoks/mdserver-web) All rights reserved. |
||||
# --------------------------------------------------------------------------------- |
||||
# Author: midoks <midoks@163.com> |
||||
# --------------------------------------------------------------------------------- |
||||
|
||||
import os |
||||
import sys |
||||
import re |
||||
import time |
||||
import math |
||||
import psutil |
||||
|
||||
import core.mw as mw |
||||
|
||||
class stats: |
||||
cache = {} |
||||
|
||||
# 磁盘统计 |
||||
def disk(self): |
||||
iokey = 'disk_stat' |
||||
diskInfo = {} |
||||
diskInfo['ALL'] = {} |
||||
diskInfo['ALL']['read_count'] = 0 |
||||
diskInfo['ALL']['write_count'] = 0 |
||||
diskInfo['ALL']['read_bytes'] = 0 |
||||
diskInfo['ALL']['write_bytes'] = 0 |
||||
diskInfo['ALL']['read_time'] = 0 |
||||
diskInfo['ALL']['write_time'] = 0 |
||||
diskInfo['ALL']['read_merged_count'] = 0 |
||||
diskInfo['ALL']['write_merged_count'] = 0 |
||||
|
||||
try: |
||||
diskio = None |
||||
if iokey in self.cache: |
||||
diskio = self.cache[iokey] |
||||
|
||||
mtime = int(time.time()) |
||||
if not diskio: |
||||
diskio = {} |
||||
diskio['info'] = None |
||||
diskio['time'] = mtime |
||||
|
||||
diskio_cache = diskio['info'] |
||||
stime = mtime - diskio['time'] |
||||
if not stime: stime = 1 |
||||
|
||||
diskio_group = psutil.disk_io_counters(perdisk=True) |
||||
if not diskio_cache: |
||||
diskio_cache = diskio_group |
||||
|
||||
for disk_name in diskio_group.keys(): |
||||
diskInfo[disk_name] = {} |
||||
# print('disk_name',disk_name) |
||||
# print(diskio_group[disk_name].write_time , diskio_cache[disk_name].write_time) |
||||
# print(diskio_group[disk_name].write_count , diskio_cache[disk_name].write_count) |
||||
|
||||
diskInfo[disk_name]['read_count'] = int((diskio_group[disk_name].read_count - diskio_cache[disk_name].read_count) / stime) |
||||
diskInfo[disk_name]['write_count'] = int((diskio_group[disk_name].write_count - diskio_cache[disk_name].write_count) / stime) |
||||
diskInfo[disk_name]['read_bytes'] = int((diskio_group[disk_name].read_bytes - diskio_cache[disk_name].read_bytes) / stime) |
||||
diskInfo[disk_name]['write_bytes'] = int((diskio_group[disk_name].write_bytes - diskio_cache[disk_name].write_bytes) / stime) |
||||
diskInfo[disk_name]['read_time'] = int((diskio_group[disk_name].read_time - diskio_cache[disk_name].read_time) / stime) |
||||
diskInfo[disk_name]['write_time'] = int((diskio_group[disk_name].write_time - diskio_cache[disk_name].write_time) / stime) |
||||
|
||||
if 'read_merged_count' in diskio_group[disk_name] and 'read_merged_count' in diskio_cache[disk_name]: |
||||
diskInfo[disk_name]['read_merged_count'] = int((diskio_group[disk_name].read_merged_count - diskio_cache[disk_name].read_merged_count) / stime) |
||||
if 'write_merged_count' in diskio_group[disk_name] and 'write_merged_count' in diskio_cache[disk_name]: |
||||
diskInfo[disk_name]['write_merged_count'] = int((diskio_group[disk_name].write_merged_count - diskio_cache[disk_name].write_merged_count) / stime) |
||||
|
||||
diskInfo['ALL']['read_count'] += diskInfo[disk_name]['read_count'] |
||||
diskInfo['ALL']['write_count'] += diskInfo[disk_name]['write_count'] |
||||
diskInfo['ALL']['read_bytes'] += diskInfo[disk_name]['read_bytes'] |
||||
diskInfo['ALL']['write_bytes'] += diskInfo[disk_name]['write_bytes'] |
||||
if diskInfo['ALL']['read_time'] < diskInfo[disk_name]['read_time']: |
||||
diskInfo['ALL']['read_time'] = diskInfo[disk_name]['read_time'] |
||||
if diskInfo['ALL']['write_time'] < diskInfo[disk_name]['write_time']: |
||||
diskInfo['ALL']['write_time'] = diskInfo[disk_name]['write_time'] |
||||
|
||||
if 'read_merged_count' in diskInfo[disk_name] and 'read_merged_count' in diskInfo[disk_name]: |
||||
diskInfo['ALL']['read_merged_count'] += diskInfo[disk_name]['read_merged_count'] |
||||
if 'write_merged_count' in diskInfo[disk_name] and 'write_merged_count' in diskInfo[disk_name]: |
||||
diskInfo['ALL']['write_merged_count'] += diskInfo[disk_name]['write_merged_count'] |
||||
|
||||
self.cache[iokey] = {'info':diskio_group,'time':mtime} |
||||
except Exception as e: |
||||
pass |
||||
|
||||
return diskInfo |
||||
|
||||
# 网络统计 |
||||
def network(self): |
||||
netInfo = {} |
||||
|
||||
netInfo['ALL'] = {} |
||||
netInfo['ALL']['up'] = 0 |
||||
netInfo['ALL']['down'] = 0 |
||||
netInfo['ALL']['upTotal'] = 0 |
||||
netInfo['ALL']['downTotal'] = 0 |
||||
netInfo['ALL']['upPackets'] = 0 |
||||
netInfo['ALL']['downPackets'] = 0 |
||||
|
||||
mtime = time.time() |
||||
iokey = 'net_stat' |
||||
netio = None |
||||
if iokey in self.cache: |
||||
netio = self.cache[iokey] |
||||
|
||||
if not netio: |
||||
netio = {} |
||||
netio['info'] = None |
||||
netio['all_io'] = None |
||||
netio['time'] = mtime |
||||
|
||||
stime = mtime - netio['time'] |
||||
if not stime: stime = 1 |
||||
|
||||
# print("new:",stime) |
||||
netio_group = psutil.net_io_counters(pernic=True).keys() |
||||
|
||||
netio_cache = netio['info'] |
||||
allio_cache = netio['all_io'] |
||||
if not netio_cache: |
||||
netio_cache = {} |
||||
|
||||
netio_group_t = {} |
||||
for name in netio_group: |
||||
netInfo[name] = {} |
||||
|
||||
io_data = psutil.net_io_counters(pernic=True).get(name) |
||||
if not name in netio_cache: |
||||
netio_cache[name] = io_data |
||||
|
||||
netio_group_t[name] = io_data |
||||
|
||||
netInfo[name]['up'] = round(float((io_data[0] - netio_cache[name][0]) / stime), 2) |
||||
netInfo[name]['down'] = round(float((io_data[1] - netio_cache[name][1])/ stime), 2) |
||||
|
||||
netInfo[name]['upTotal'] = io_data[0] |
||||
netInfo[name]['downTotal'] = io_data[1] |
||||
netInfo[name]['upPackets'] = io_data[2] |
||||
netInfo[name]['downPackets'] = io_data[3] |
||||
|
||||
all_io = psutil.net_io_counters()[:4] |
||||
if not allio_cache: |
||||
allio_cache = all_io |
||||
|
||||
netInfo['ALL']['up'] = round(float((all_io[0] - allio_cache[0]) /stime), 2) |
||||
netInfo['ALL']['down'] = round(float((all_io[1] - allio_cache[1]) /stime), 2) |
||||
netInfo['ALL']['upTotal'] = all_io[0] |
||||
netInfo['ALL']['downTotal'] = all_io[1] |
||||
netInfo['ALL']['upPackets'] = all_io[2] |
||||
netInfo['ALL']['downPackets'] = all_io[3] |
||||
|
||||
self.cache[iokey] = {'info':netio_group_t,'all_io':all_io,'time':mtime} |
||||
return netInfo |
||||
|
||||
|
Loading…
Reference in new issue