Files
my_one_web/api/status.py
小白 f1e4185c8f feat: 实现 OpenClaw Mission Control 仪表盘框架
- 创建 API Blueprint 模块结构
- 实现系统状态 API (CPU/内存/磁盘/进程)
- 实现服务状态 API
- 创建仪表盘页面模板
- 添加仪表盘 CSS 样式
- 添加仪表盘 JavaScript 交互
- 登录后自动跳转到仪表盘
2026-03-12 20:42:12 +08:00

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
})