105 lines
2.7 KiB
Python
105 lines
2.7 KiB
Python
|
|
#!/usr/bin/env python3
|
|||
|
|
# -*- coding: utf-8 -*-
|
|||
|
|
"""
|
|||
|
|
系统状态 API
|
|||
|
|
作者:小白 🐶
|
|||
|
|
"""
|
|||
|
|
|
|||
|
|
import subprocess
|
|||
|
|
import psutil
|
|||
|
|
from flask import jsonify
|
|||
|
|
from . import api
|
|||
|
|
|
|||
|
|
@api.route('/status')
|
|||
|
|
def get_status():
|
|||
|
|
"""获取系统状态"""
|
|||
|
|
try:
|
|||
|
|
# CPU 使用率
|
|||
|
|
cpu_percent = psutil.cpu_percent(interval=1)
|
|||
|
|
|
|||
|
|
# 内存使用
|
|||
|
|
memory = psutil.virtual_memory()
|
|||
|
|
memory_percent = memory.percent
|
|||
|
|
memory_used = round(memory.used / (1024**3), 2)
|
|||
|
|
memory_total = round(memory.total / (1024**3), 2)
|
|||
|
|
|
|||
|
|
# 磁盘使用
|
|||
|
|
disk = psutil.disk_usage('/')
|
|||
|
|
disk_percent = disk.percent
|
|||
|
|
disk_used = round(disk.used / (1024**3), 2)
|
|||
|
|
disk_total = round(disk.total / (1024**3), 2)
|
|||
|
|
|
|||
|
|
# 系统运行时间
|
|||
|
|
uptime_seconds = psutil.boot_time()
|
|||
|
|
|
|||
|
|
# 进程数
|
|||
|
|
process_count = len(psutil.pids())
|
|||
|
|
|
|||
|
|
return jsonify({
|
|||
|
|
'success': True,
|
|||
|
|
'data': {
|
|||
|
|
'cpu': {
|
|||
|
|
'percent': cpu_percent
|
|||
|
|
},
|
|||
|
|
'memory': {
|
|||
|
|
'percent': memory_percent,
|
|||
|
|
'used': memory_used,
|
|||
|
|
'total': memory_total,
|
|||
|
|
'unit': 'GB'
|
|||
|
|
},
|
|||
|
|
'disk': {
|
|||
|
|
'percent': disk_percent,
|
|||
|
|
'used': disk_used,
|
|||
|
|
'total': disk_total,
|
|||
|
|
'unit': 'GB'
|
|||
|
|
},
|
|||
|
|
'process_count': process_count,
|
|||
|
|
'uptime': uptime_seconds
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
except Exception as e:
|
|||
|
|
return jsonify({
|
|||
|
|
'success': False,
|
|||
|
|
'error': str(e)
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
@api.route('/status/services')
|
|||
|
|
def get_services():
|
|||
|
|
"""获取服务状态"""
|
|||
|
|
services = []
|
|||
|
|
|
|||
|
|
# 检查各服务状态
|
|||
|
|
service_list = [
|
|||
|
|
('Flask', 5000),
|
|||
|
|
('思源笔记', 6806),
|
|||
|
|
('Gitea', 3000),
|
|||
|
|
('NocoDB', 8080),
|
|||
|
|
('Memory Viewer', 18798)
|
|||
|
|
]
|
|||
|
|
|
|||
|
|
for name, port in service_list:
|
|||
|
|
try:
|
|||
|
|
result = subprocess.run(
|
|||
|
|
['ss', '-tln'],
|
|||
|
|
capture_output=True,
|
|||
|
|
text=True,
|
|||
|
|
timeout=5
|
|||
|
|
)
|
|||
|
|
is_running = f':{port}' in result.stdout
|
|||
|
|
services.append({
|
|||
|
|
'name': name,
|
|||
|
|
'port': port,
|
|||
|
|
'status': 'running' if is_running else 'stopped'
|
|||
|
|
})
|
|||
|
|
except:
|
|||
|
|
services.append({
|
|||
|
|
'name': name,
|
|||
|
|
'port': port,
|
|||
|
|
'status': 'unknown'
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
return jsonify({
|
|||
|
|
'success': True,
|
|||
|
|
'data': services
|
|||
|
|
})
|