Simple Linux Panel
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mdserver-web/web/utils/system/monitor.py

96 lines
2.7 KiB

6 months ago
# 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
6 months ago
import threading
from .main import getMemUsed
6 months ago
import core.mw as mw
6 months ago
import core.db as db
6 months ago
6 months ago
# 监控系统数据入库
6 months ago
class monitor:
6 months ago
_dbfile = mw.getPanelDataDir() + '/system.db'
_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)
6 months ago
6 months ago