pull/632/head
Mr Chen 6 months ago
parent fa64dfb89b
commit 18e59ef377
  1. 24
      web/core/db.py
  2. 4
      web/core/mw.py
  3. 2
      web/utils/system/__init__.py
  4. 17
      web/utils/system/main.py
  5. 72
      web/utils/system/monitor.py

@ -12,11 +12,18 @@
# sqlite3操作 # sqlite3操作
# --------------------------------------------------------------------------------- # ---------------------------------------------------------------------------------
import sqlite3
import os import os
import sys import sys
import sqlite3
import core.mw as mw
def getPanelDir():
return os.path.dirname(os.getcwd())
def getTracebackInfo():
import traceback
return traceback.format_exc()
class Sql(): class Sql():
#------------------------------ #------------------------------
@ -33,7 +40,7 @@ class Sql():
__OPT_PARAM = () # where值 __OPT_PARAM = () # where值
def __init__(self): def __init__(self):
self.__DB_FILE = '../data/default.db' self.__DB_FILE = getPanelDir()+'/data/panel.db'
def __getConn(self): def __getConn(self):
# 取数据库对象 # 取数据库对象
@ -42,7 +49,7 @@ class Sql():
self.__DB_CONN = sqlite3.connect(self.__DB_FILE) self.__DB_CONN = sqlite3.connect(self.__DB_FILE)
self.__DB_CONN.text_factory = str self.__DB_CONN.text_factory = str
except Exception as ex: except Exception as ex:
# print(mw.getTracebackInfo()) print(getTracebackInfo())
return "error: " + str(ex) return "error: " + str(ex)
def changeTextFactoryToBytes(self): def changeTextFactoryToBytes(self):
@ -51,14 +58,12 @@ class Sql():
def autoTextFactory(self): def autoTextFactory(self):
if sys.version_info[0] == 3: if sys.version_info[0] == 3:
self.__DB_CONN.text_factory = lambda x: str( self.__DB_CONN.text_factory = lambda x: str(x, encoding="utf-8", errors='ignore')
x, encoding="utf-8", errors='ignore')
else: else:
self.__DB_CONN.text_factory = lambda x: unicode( self.__DB_CONN.text_factory = lambda x: unicode(x, "utf-8", "ignore")
x, "utf-8", "ignore")
def dbfile(self, name): def dbfile(self, name):
self.__DB_FILE = 'data/' + name + '.db' self.__DB_FILE = getPanelDir()+'/data/' + name + '.db'
return self return self
def dbPos(self, path, name, suffix_name = 'db'): def dbPos(self, path, name, suffix_name = 'db'):
@ -192,7 +197,6 @@ class Sql():
def getField(self, keyName): def getField(self, keyName):
# 取回指定字段 # 取回指定字段
result = self.field(keyName).select() result = self.field(keyName).select()
# print(result)
if len(result) == 1: if len(result) == 1:
return result[0][keyName] return result[0][keyName]
return result return result

@ -584,9 +584,11 @@ def writeDbLog(stype, msg, args=(), uid=1):
return False return False
def M(table): def M(table=''):
import core.db as db import core.db as db
sql = db.Sql() sql = db.Sql()
if table == '':
return sql
return sql.table(table) return sql.table(table)

@ -11,4 +11,4 @@
from .main import * from .main import *
from .query import * from .query import *
from .stats import * from .stats import *
from .monitor import * from .monitor import monitor

@ -150,4 +150,21 @@ def getMemInfo():
memInfo['memRealUsed'] = memInfo['memTotal'] - memInfo['memFree'] - memInfo['memBuffers'] - memInfo['memCached'] memInfo['memRealUsed'] = memInfo['memTotal'] - memInfo['memFree'] - memInfo['memBuffers'] - memInfo['memCached']
return memInfo return memInfo
def getMemUsed():
# 取内存使用率
try:
import psutil
mem = psutil.virtual_memory()
if mw.getOs() == 'darwin':
return mem.percent
memInfo = {'memTotal': mem.total / 1024 / 1024, 'memFree': mem.free / 1024 / 1024,
'memBuffers': mem.buffers / 1024 / 1024, 'memCached': mem.cached / 1024 / 1024}
tmp = memInfo['memTotal'] - memInfo['memFree'] - \
memInfo['memBuffers'] - memInfo['memCached']
tmp1 = memInfo['memTotal'] / 100
return (tmp / tmp1)
except Exception as ex:
return 1

@ -14,14 +14,82 @@ import re
import time import time
import math import math
import psutil import psutil
import threading
from .main import getMemUsed
import core.mw as mw import core.mw as mw
import core.db as db
# 监控系统数据入库
class monitor: class monitor:
def initDBFile(): _dbfile = mw.getPanelDataDir() + '/system.db'
pass _diskinfo = None
def __init__(self):
pass
# lock
_instance_lock = threading.Lock()
@classmethod
def instance(cls, *args, **kwargs):
if not hasattr(monitor, "_instance"):
with monitor._instance_lock:
if not hasattr(monitor, "_instance"):
monitor._instance = monitor(*args, **kwargs)
return monitor._instance
def initDBFile(self):
if os.path.exists(self._dbfile):
return True
sql_file = mw.getPanelDataDir() + '/sql/system.sql'
sql = db.Sql().dbPos(mw.getPanelDataDir(),'system')
csql = mw.readFile(sql_file)
csql_list = csql.split(';')
for index in range(len(csql_list)):
sql.execute(csql_list[index], ())
return True
# 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 getDiskInfo(self):
if self._diskinfo is None:
self._diskinfo = psutil.disk_io_counters()
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 = {}
# 取当前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)

Loading…
Cancel
Save