#!/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 })