page / bt-source /panel /class /abnormal.py
GGSheng's picture
feat: deploy Gemma 4 to hf space
a757bd3 verified
#!/usr/bin/python
# coding: utf-8
# | Author: 1249648969@qq.com
# +--------------------------------------------------------------------
# | 服务异常监控 |
# +--------------------------------------------------------------------
import sys, os
import time, hashlib, sys, os, json, requests, re, public, random, string, requests,system,panelPlugin,ajax
import psutil
import gevent
import gevent.pool
class abnormal():
__system=None
__plugin=None
__ajax=None
def __init__(self):
if not self.__system:
self.__system=system.system()
if not self.__plugin:
self.__plugin=panelPlugin.panelPlugin()
if not self.__ajax:
self.__ajax=ajax.ajax()
# Mysql 服务是否启动
def mysql_server(self, get):
if os.path.exists('/www/server/mysql'):
get.sName = 'mysql'
mysql = self.__plugin.get_soft_find(get)
if mysql['status']:
return True
else:
return False
else:
return True
# 取占用最大cpu的进程
def test_mysql_cpu(self,i):
self.count=0
try:
pp = psutil.Process(i)
if pp.name()=='mysqld':
self.count+=(float(pp.cpu_percent(interval=0.1)))
except:
pass
return self.count
def mysql_cpu(self,get):
pool = gevent.pool.Pool(50)
threads = []
for i in psutil.pids():
threads.append(pool.spawn(self.test_mysql_cpu,i))
gevent.joinall(threads)
cpu_count=psutil.cpu_count()
return int(self.count)/cpu_count
#mysql 上限次数 (连接数)
def mysql_count(self,get):
ret = public.M('config').field('mysql_root').select()
password = ret[0]['mysql_root']
sql = ''' mysql -uroot -p''' + password + ''' -e "select User,Host from mysql.user where host='%'" '''
result = public.ExecShell(sql)
if re.search('Too many connections', result[1]):
return True
else:
return False
def return_php(self):
ret = []
if not os.path.exists('/www/server/php'): return ret
for i in os.listdir('/www/server/php'):
php_list=public.get_php_versions()
if not i in php_list:continue
if os.path.isdir('/www/server/php/' + i):
ret.append(i)
return ret
#php 服务是否启动
def php_server(self,get):
ret=[]
php_count=self.return_php()
if len(php_count)>=1:
for i in php_count:
get.sName = 'php-%s.%s'%(i[0],i[1])
mysql = self.__plugin.get_soft_find(get)
if not mysql:
php={}
php['version']=i
php['status']=False
ret.append(php)
else:
php = {}
php['version'] = i
php['status'] = mysql['status']
ret.append(php)
else:
return ret
else:
return ret
#php 链接异常
def php_conn_max(self,get):
ret=[]
php_count=self.return_php()
if len(php_count)>=1:
for i in php_count:
get.sName = i
try:
result = public.HttpGet('http://127.0.0.1/phpfpm_' + i + '_status?json')
tmp = json.loads(result)
php={}
php['version']=i
php['children']=tmp['max children reached']
php['start_time'] = tmp['start time']
ret.append(php)
except:
php={}
php['version']=i
php['children']='ERROR'
ret.append(php)
else:
return ret
else:
return ret
# 取占用最大cpu的进程
def test_php_cpu(self,i):
self.count2=0
try:
pp = psutil.Process(i)
if pp.name()=='php-fpm':
self.count2+=(float(pp.cpu_percent(interval=0.1)))
except:
pass
return self.count2
# PHP CPU 开销
def php_cpu(self,get):
pool = gevent.pool.Pool(50)
threads = []
for i in psutil.pids():
threads.append(pool.spawn(self.test_php_cpu, i))
gevent.joinall(threads)
cpu_count = psutil.cpu_count()
return int(self.count2) / cpu_count
# CPU 大于95%
def CPU(self,get):
cpu=self.__system.GetCpuInfo()
return cpu
# 内存
def Memory(self,get):
meory=self.__system.GetMemInfo()
meory="%.2f" % (float(meory['memRealUsed'])/ float(meory['memTotal'])*100)
return meory
#磁盘
def disk(self,get):
disk=cpu=self.__system.GetDiskInfo()
ret=[]
for i in disk:
if int(i['size'][-1].replace('%',''))>=1:
ret.append(i)
return ret
#存在非root 用户管理员的存在
def not_root_user(self,get):
cmd='''cat /etc/passwd | awk -F: '($3 == 0) { print $1 }'|grep -v '^root$' '''
ret=public.ExecShell(cmd)
if len(ret[0]):
return True
else:
return False
# 入口位置
def start(self,get):
ret={}
#mysql 是否启动
mysql_server=self.mysql_server(get)
ret['mysql_server']=mysql_server
#MYsql 占用CPU (总的CPU)
mysql_cpu=self.mysql_cpu(get)
ret['mysql_cpu'] = mysql_cpu
#mysql 上限连接
mysql_count=self.mysql_count(get)
ret['mysql_count'] = mysql_count
#PHP 是否启动
php_server=self.php_server(get)
ret['php_server'] = php_server
#PHP 异常 and 和取上限
php_conn_max=self.php_conn_max(get)
ret['php_conn_max'] = php_conn_max
#PHP CPU
php_cpu=self.php_cpu(get)
ret['php_cpu'] = php_cpu
#CPU 总量
CPU=self.CPU(get)
ret['CPU'] = CPU
#内存总量
Memory=self.Memory(get)
ret['Memory'] = Memory
#硬盘信息
disk=self.disk(get)
ret['disk'] = disk
# 存在非root 用户管理员的存在
not_root_user=self.not_root_user(get)
ret['not_root_user'] = not_root_user
return ret