From d7b7c572b0226cdd57a469f44bb835a8ed671ca0 Mon Sep 17 00:00:00 2001 From: Mr Chen Date: Sun, 3 Nov 2024 00:59:26 +0800 Subject: [PATCH] update --- panel_task.py | 22 ++++-- web/static/app/control.js | 3 +- web/utils/system/monitor.py | 135 ++++++++++++++++++++++++++++++------ web/utils/system/query.py | 2 +- 4 files changed, 133 insertions(+), 29 deletions(-) diff --git a/panel_task.py b/panel_task.py index 8382b29bb..84d39bd4f 100755 --- a/panel_task.py +++ b/panel_task.py @@ -346,12 +346,10 @@ def systemTask(): # LoadAverage load_average = sm.getLoadAverage() - lpro = round( - (load_average['one'] / load_average['max']) * 100, 2) + lpro = round((load_average['one'] / load_average['max']) * 100, 2) if lpro > 100: lpro = 100 - sql.table('load_average').add('pro,one,five,fifteen,addtime', (lpro, load_average[ - 'one'], load_average['five'], load_average['fifteen'], addtime)) + sql.table('load_average').add('pro,one,five,fifteen,addtime', (lpro, load_average['one'], load_average['five'], load_average['fifteen'], addtime)) lpro = None load_average = None @@ -381,6 +379,20 @@ def systemTask(): time.sleep(30) systemTask() +def systemTask2(): + # 系统监控任务 + try: + from utils.system import monitor + while True: + monitor.instance().run() + time.sleep(5) + except Exception as ex: + print(str(ex)) + mw.writeFile('logs/sys_interrupt.pl', str(ex)) + restartMw() + time.sleep(30) + systemTask2() + # -------------------------------------- PHP监控 start --------------------------------------------- # # 502错误检查线程 @@ -584,7 +596,7 @@ def setDaemon(t): def run(): # # 系统监控 - sysTask = threading.Thread(target=systemTask) + sysTask = threading.Thread(target=systemTask2) sysTask = setDaemon(sysTask) sysTask.start() diff --git a/web/static/app/control.js b/web/static/app/control.js index 4b68cd96b..9ee2e8807 100755 --- a/web/static/app/control.js +++ b/web/static/app/control.js @@ -490,7 +490,8 @@ function network(b,e){ option = { tooltip: { trigger: 'axis', - axisPointer: { type: 'cross' } + axisPointer: { type: 'cross' }, + formatter:"时间:{b0}
{a0}: {c0} Kb/s
{a1}: {c1} Kb/s", }, legend: { data:[lan.index.net_up,lan.index.net_down] diff --git a/web/utils/system/monitor.py b/web/utils/system/monitor.py index 45dd57912..ea5ba96c8 100644 --- a/web/utils/system/monitor.py +++ b/web/utils/system/monitor.py @@ -29,6 +29,7 @@ class monitor: _dbfile = mw.getPanelDataDir() + '/system.db' _diskinfo = None + _netinfo = None def __init__(self): pass @@ -55,41 +56,131 @@ class monitor: sql.execute(csql_list[index], ()) return True + def getMonitorDay(self): + monitor_day = mw.M('option').field('name').where('name=?',('monitor_day',)).getField('value') + return int(monitor_day) + + def isOnlyNetIoStats(self): + monitor_only_netio = mw.M('option').field('name').where('name=?',('monitor_only_netio',)).getField('value') + if monitor_only_netio == 'open': + return True + return False + # def safeRun(self): # self.initDBFile() # monitor_day =mw.M('option').field('name').where('name=?',('monitor_day',)).getField('value') # print(monitor_day) # print("monitor data", mw.formatDate()) + def psutilNetIoCounters(self): + ''' + 统计网卡流量 + ''' + if self.isOnlyNetIoStats(): + local_lo = (0, 0, 0, 0) + ioName = psutil.net_io_counters(pernic=True).keys() + for x in ioName: + + if x.find("lo") > -1: + local_lo = psutil.net_io_counters( + pernic=True).get(x)[:4] + + all_io = psutil.net_io_counters()[:4] + result_io = tuple([all_io[i] - local_lo[i] + for i in range(0, len(all_io))]) + + # print(local_lo) + # print(all_io) + # print(result_io) + return result_io + return psutil.net_io_counters()[:4] def getDiskInfo(self): + now_diskinfo = psutil.disk_io_counters() if self._diskinfo is None: - self._diskinfo = psutil.disk_io_counters() + self._diskinfo = now_diskinfo + + info = {} + info['read_count'] = now_diskinfo.read_count - self._diskinfo.read_count + info['write_count'] = now_diskinfo.write_count - self._diskinfo.write_count + info['read_bytes'] = now_diskinfo.read_bytes - self._diskinfo.read_bytes + info['write_bytes'] = now_diskinfo.write_bytes - self._diskinfo.write_bytes + info['read_time'] = now_diskinfo.read_time - self._diskinfo.read_time + info['write_time'] = now_diskinfo.write_time - self._diskinfo.write_time + + self._diskinfo = now_diskinfo + return info + + def getNetIoInfo(self): + # 取当前网络Io + net_io = self.psutilNetIoCounters() + if not self._netinfo: + self._netinfo = net_io + info = {} + info['upTotal'] = net_io[0] + info['downTotal'] = net_io[1] + info['up'] = round(float((net_io[0] - self._netinfo[0]) / 1024), 2) + info['down'] = round(float((net_io[1] - self._netinfo[1]) / 1024), 2) + info['downPackets'] = net_io[3] + info['upPackets'] = net_io[2] + + self._netinfo = net_io + return info + + def getLoadAverage(self): + 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 run(self): self.initDBFile() - monitor_day = mw.M('option').field('name').where('name=?',('monitor_day',)).getField('value') - print(monitor_day) - print("monitor data", mw.formatDate()) - - now_info = {} + monitor_day = self.getMonitorDay() + + info = {} # 取当前CPU Io - now_info['used'] = psutil.cpu_percent(interval=1) - now_info['mem'] = getMemUsed() - - network_io = psutil.net_io_counters()[:4] - diskio = psutil.disk_io_counters() - - print(network_io) - print(now_info) - print(diskio) - # if tmp['used'] > 80: - # panel_title = mw.getConfig('title') - # ip = mw.getHostAddr() - # now_time = mw.getDateFromNow() - # msg = now_time + '|节点[' + panel_title + ':' + ip + \ - # ']处于高负载[' + str(tmp['used']) + '],请排查原因!' - # mw.notifyMessage(msg, '面板监控', 600) + info['used'] = psutil.cpu_percent(interval=1) + info['mem'] = getMemUsed() + + netio = self.getNetIoInfo() + diskio = self.getDiskInfo() + + addtime = int(time.time()) + deltime = addtime - (monitor_day * 86400) + + # CPU/内存数据入库 + cpu_mem_data = (info['used'], info['mem'], addtime) + cmd_objm = mw.M('cpuio').dbPos(mw.getPanelDataDir(),'system') + cmd_objm.add('pro,mem,addtime', cpu_mem_data) + cmd_objm.where("addtime 100: + lpro = 100 + load_objm = mw.M('load_average').dbPos(mw.getPanelDataDir(),'system') + load_objm.add('pro,one,five,fifteen,addtime', (lpro, load_data['one'], load_data['five'], load_data['fifteen'], addtime)) + load_objm.where("addtime