|
|
@ -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()) |
|
|
|
info = {} |
|
|
|
|
|
|
|
|
|
|
|
now_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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|