90 lines
2.7 KiB
Python
90 lines
2.7 KiB
Python
import datetime
|
|
import logging
|
|
import sys
|
|
import time
|
|
|
|
import psutil
|
|
|
|
from ..monitor.models import Server, Monitor, SysFiles
|
|
from ..op_drf.response import SuccessResponse
|
|
from ..system.models import ConfigSettings
|
|
from ..utils.decorators import BaseCeleryApp
|
|
|
|
logger = logging.getLogger(__name__)
|
|
from platform import platform
|
|
|
|
|
|
def getIP():
|
|
"""获取ipv4地址"""
|
|
dic = psutil.net_if_addrs()
|
|
ipv4_list = []
|
|
for adapter in dic:
|
|
snicList = dic[adapter]
|
|
for snic in snicList:
|
|
if snic.family.name == 'AF_INET':
|
|
ipv4 = snic.address
|
|
if ipv4 != '127.0.0.1':
|
|
ipv4_list.append(ipv4)
|
|
if len(ipv4_list) >= 1:
|
|
return ipv4_list[0]
|
|
else:
|
|
return None
|
|
|
|
|
|
@BaseCeleryApp(name='apps.vadmin.monitor.tasks.get_monitor_info')
|
|
def get_monitor_info():
|
|
"""
|
|
定时获取系统监控信息
|
|
:return:
|
|
"""
|
|
# 获取服务器
|
|
ip = getIP()
|
|
if not ip:
|
|
logger.error("无法获取到IP")
|
|
return
|
|
server_obj, create = Server.objects.get_or_create(ip=ip)
|
|
if create:
|
|
server_obj.name = ip
|
|
terse = ('terse' in sys.argv or '--terse' in sys.argv)
|
|
aliased = (not 'nonaliased' in sys.argv and not '--nonaliased' in sys.argv)
|
|
server_obj.os = platform(aliased, terse)
|
|
server_obj.save()
|
|
|
|
# 获取CPU和内存信息
|
|
mem = psutil.virtual_memory()
|
|
monitor_obj = Monitor()
|
|
monitor_obj.cpu_num = psutil.cpu_count()
|
|
monitor_obj.cpu_sys = float(psutil.cpu_percent(0.1))
|
|
monitor_obj.mem_num = int(mem.total / 1024)
|
|
monitor_obj.mem_sys = int(mem.used / 1024)
|
|
monitor_obj.seconds = time.strftime("%d天 %H 小时 %M 分 %S 秒", time.gmtime(int(time.time()) - int(psutil.boot_time())))
|
|
monitor_obj.server = server_obj
|
|
monitor_obj.save()
|
|
|
|
# 保存磁盘信息
|
|
for ele in psutil.disk_partitions():
|
|
disk = psutil.disk_usage('/')
|
|
|
|
sys_files_obj = SysFiles()
|
|
sys_files_obj.dir_name = ele.mountpoint
|
|
sys_files_obj.sys_type_name = ele.opts
|
|
sys_files_obj.type_name = ele.fstype
|
|
sys_files_obj.total = disk.total
|
|
sys_files_obj.disk_sys = disk.used
|
|
sys_files_obj.monitor = monitor_obj
|
|
sys_files_obj.save()
|
|
|
|
return SuccessResponse(msg="")
|
|
|
|
|
|
@BaseCeleryApp(name='apps.vadmin.monitor.tasks.clean_surplus_monitor_info')
|
|
def clean_surplus_monitor_info():
|
|
"""
|
|
定时清理多余 系统监控信息
|
|
:return:
|
|
"""
|
|
config_settings_obj = ConfigSettings.objects.filter(configKey='sys.monitor.info.save_days').first()
|
|
Monitor.objects.filter(
|
|
update_datetime__lt=datetime.timedelta(days=int(config_settings_obj.configValue or 30))).delete()
|
|
logger.info(f"成功清空{config_settings_obj.configValue}天前数据")
|