pull/632/head
Mr Chen 6 months ago
parent 18e59ef377
commit d7b7c572b0
  1. 22
      panel_task.py
  2. 3
      web/static/app/control.js
  3. 133
      web/utils/system/monitor.py
  4. 2
      web/utils/system/query.py

@ -346,12 +346,10 @@ def systemTask():
# LoadAverage # LoadAverage
load_average = sm.getLoadAverage() load_average = sm.getLoadAverage()
lpro = round( lpro = round((load_average['one'] / load_average['max']) * 100, 2)
(load_average['one'] / load_average['max']) * 100, 2)
if lpro > 100: if lpro > 100:
lpro = 100 lpro = 100
sql.table('load_average').add('pro,one,five,fifteen,addtime', (lpro, load_average[ sql.table('load_average').add('pro,one,five,fifteen,addtime', (lpro, load_average['one'], load_average['five'], load_average['fifteen'], addtime))
'one'], load_average['five'], load_average['fifteen'], addtime))
lpro = None lpro = None
load_average = None load_average = None
@ -381,6 +379,20 @@ def systemTask():
time.sleep(30) time.sleep(30)
systemTask() 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 --------------------------------------------- # # -------------------------------------- PHP监控 start --------------------------------------------- #
# 502错误检查线程 # 502错误检查线程
@ -584,7 +596,7 @@ def setDaemon(t):
def run(): def run():
# # 系统监控 # # 系统监控
sysTask = threading.Thread(target=systemTask) sysTask = threading.Thread(target=systemTask2)
sysTask = setDaemon(sysTask) sysTask = setDaemon(sysTask)
sysTask.start() sysTask.start()

@ -490,7 +490,8 @@ function network(b,e){
option = { option = {
tooltip: { tooltip: {
trigger: 'axis', trigger: 'axis',
axisPointer: { type: 'cross' } axisPointer: { type: 'cross' },
formatter:"时间:{b0}<br />{a0}: {c0} Kb/s<br />{a1}: {c1} Kb/s",
}, },
legend: { legend: {
data:[lan.index.net_up,lan.index.net_down] data:[lan.index.net_up,lan.index.net_down]

@ -29,6 +29,7 @@ class monitor:
_dbfile = mw.getPanelDataDir() + '/system.db' _dbfile = mw.getPanelDataDir() + '/system.db'
_diskinfo = None _diskinfo = None
_netinfo = None
def __init__(self): def __init__(self):
pass pass
@ -55,41 +56,131 @@ class monitor:
sql.execute(csql_list[index], ()) sql.execute(csql_list[index], ())
return True 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): # def safeRun(self):
# self.initDBFile() # self.initDBFile()
# monitor_day =mw.M('option').field('name').where('name=?',('monitor_day',)).getField('value') # monitor_day =mw.M('option').field('name').where('name=?',('monitor_day',)).getField('value')
# print(monitor_day) # print(monitor_day)
# print("monitor data", mw.formatDate()) # 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): def getDiskInfo(self):
now_diskinfo = psutil.disk_io_counters()
if self._diskinfo is None: 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): def run(self):
self.initDBFile() self.initDBFile()
monitor_day = mw.M('option').field('name').where('name=?',('monitor_day',)).getField('value') monitor_day = self.getMonitorDay()
print(monitor_day)
print("monitor data", mw.formatDate())
now_info = {} info = {}
# 取当前CPU Io # 取当前CPU Io
now_info['used'] = psutil.cpu_percent(interval=1) info['used'] = psutil.cpu_percent(interval=1)
now_info['mem'] = getMemUsed() info['mem'] = getMemUsed()
network_io = psutil.net_io_counters()[:4] netio = self.getNetIoInfo()
diskio = psutil.disk_io_counters() diskio = self.getDiskInfo()
print(network_io) addtime = int(time.time())
print(now_info) deltime = addtime - (monitor_day * 86400)
print(diskio)
# if tmp['used'] > 80: # CPU/内存数据入库
# panel_title = mw.getConfig('title') cpu_mem_data = (info['used'], info['mem'], addtime)
# ip = mw.getHostAddr() cmd_objm = mw.M('cpuio').dbPos(mw.getPanelDataDir(),'system')
# now_time = mw.getDateFromNow() cmd_objm.add('pro,mem,addtime', cpu_mem_data)
# msg = now_time + '|节点[' + panel_title + ':' + ip + \ cmd_objm.where("addtime<?", (deltime,)).delete()
# ']处于高负载[' + str(tmp['used']) + '],请排查原因!'
# mw.notifyMessage(msg, '面板监控', 600) # 网络数据入库
netio_data = (netio['up'] / 5, netio['down'] / 5, netio['upTotal'], netio['downTotal'], netio['downPackets'], netio['upPackets'], addtime)
network_objm = mw.M('network').dbPos(mw.getPanelDataDir(),'system')
network_objm.add('up,down,total_up,total_down,down_packets,up_packets,addtime', netio_data)
network_objm.where("addtime<?", (deltime,)).delete()
# 磁盘数据入库
disk_data = (diskio['read_count'], diskio['write_count'], diskio['read_bytes'], diskio['write_bytes'], diskio['read_time'], diskio['write_time'], addtime)
disk_objm = mw.M('diskio').dbPos(mw.getPanelDataDir(),'system')
disk_objm.add('read_count,write_count,read_bytes,write_bytes,read_time,write_time,addtime', disk_data)
disk_objm.where("addtime<?", (deltime,)).delete()
# 负载数据入库
load_data = self.getLoadAverage()
lpro = round((load_data['one'] / load_data['max']) * 100, 2)
if lpro > 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<?", (deltime,)).delete()
return True

@ -60,7 +60,7 @@ def toAddtime(data, tomem=False):
def toUseAddtime(data): def toUseAddtime(data):
dlen = len(data) dlen = len(data)
for i in range(dlen): for i in range(dlen):
data[i]['addtime'] = time.strftime('%m/%d %H:%M', time.localtime(float(data[i]['addtime']))) data[i]['addtime'] = time.strftime('%m/%d %H:%M:%S', time.localtime(float(data[i]['addtime'])))
return data return data
def getLoadAverageByDB(start, end): def getLoadAverageByDB(start, end):

Loading…
Cancel
Save