fix(route): 系统负载、网络速度接口

test
jshixiong 1 year ago
parent ff9cdf1b1b
commit e71cb72faf

@ -3,14 +3,8 @@ from flask import Flask
def create_app():
app = Flask(__name__)
from .io import io_bp
from .cpu import cpu_bp
from .memory import memory_bp
from .processes import processes_bp
from .route.route import route_bp
app.register_blueprint(io_bp)
app.register_blueprint(cpu_bp)
app.register_blueprint(memory_bp)
app.register_blueprint(processes_bp)
app.register_blueprint(route_bp)
return app

@ -1,14 +0,0 @@
from flask import Blueprint, jsonify
import psutil
cpu_bp = Blueprint('cpu', __name__)
@cpu_bp.route('/cpu', methods=['GET'])
def get_cpu():
cpu_times = psutil.cpu_times_percent(interval=1, percpu=False)
return jsonify({
'user': cpu_times.user,
'system': cpu_times.system,
'idle': cpu_times.idle,
'iowait': cpu_times.iowait,
})

@ -0,0 +1,6 @@
import psutil
def get_cpu_percent():
cpu_percent = psutil.cpu_percent(interval=1)
print(f'CPU usage: {cpu_percent}%')
return cpu_percent

@ -1,14 +0,0 @@
from flask import Blueprint, jsonify
import psutil
io_bp = Blueprint('io', __name__)
@io_bp.route('/io', methods=['GET'])
def get_io():
io_counters = psutil.disk_io_counters()
return jsonify({
'read_count': io_counters.read_count,
'write_count': io_counters.write_count,
'read_bytes': io_counters.read_bytes,
'write_bytes': io_counters.write_bytes,
})

@ -0,0 +1,6 @@
import psutil
def get_io_percent():
disk_usage = psutil.disk_usage('/')
print(f'Disk usage: {disk_usage.percent}%')
return disk_usage.percent

@ -1,15 +0,0 @@
from flask import Blueprint, jsonify
import psutil
memory_bp = Blueprint('memory', __name__)
@memory_bp.route('/memory', methods=['GET'])
def get_memory():
virtual_memory = psutil.virtual_memory()
return jsonify({
'total': virtual_memory.total,
'available': virtual_memory.available,
'percent': virtual_memory.percent,
'used': virtual_memory.used,
'free': virtual_memory.free,
})

@ -0,0 +1,6 @@
import psutil
def get_memory_percent():
virtual_memory = psutil.virtual_memory()
print(f'Memory usage: {virtual_memory.percent}%')
return virtual_memory.percent

@ -0,0 +1,74 @@
import psutil
import threading
import time
import os
from datetime import datetime, timedelta
from collections import deque
log_file_path = '/data/ww/py_sys_monitor/net_speed'
def ensure_log_file_exists():
if not os.path.exists(log_file_path):
os.makedirs(os.path.dirname(log_file_path), exist_ok=True)
with open(log_file_path, 'w') as f:
now = datetime.now()
for i in range(12):
past_time = (now - timedelta(hours=i)).replace(minute=0, second=0, microsecond=0).strftime('%Y-%m-%d %H:%M:%S')
f.write(f"{past_time},0,0\n")
ensure_log_file_exists()
def convert_to_mbps(bytes_per_second):
return bytes_per_second * 8 / (1024 * 1024) # Convert to Megabits per second (Mbps)
def log_network_speed():
while True:
net_io_start = psutil.net_io_counters()
time.sleep(3600) # Sleep for 1 hour
net_io_end = psutil.net_io_counters()
bytes_sent_per_second = (net_io_end.bytes_sent - net_io_start.bytes_sent) / 3600
bytes_recv_per_second = (net_io_end.bytes_recv - net_io_start.bytes_recv) / 3600
upload_speed_mbps = convert_to_mbps(bytes_sent_per_second)
download_speed_mbps = convert_to_mbps(bytes_recv_per_second)
# Get the current time and round down to the nearest hour
now = datetime.now()
current_time = now.replace(minute=0, second=0, microsecond=0).strftime('%Y-%m-%d %H:%M:%S')
with open(log_file_path, 'a') as f:
f.write(f"{current_time},{upload_speed_mbps},{download_speed_mbps}\n")
def get_last_12_hours_speed():
speeds = []
now = datetime.now()
# Generate the last 12 hours' timestamps
timestamps = [(now - timedelta(hours=i)).replace(minute=0, second=0, microsecond=0).strftime('%Y-%m-%d %H:%M:%S') for i in range(12)]
timestamp_speed_map = {timestamp: {'upload_speed_mbps': 0, 'download_speed_mbps': 0} for timestamp in timestamps}
with open(log_file_path, 'r') as f:
lines = deque(f, maxlen=12) # Read only the last 12 lines
for line in lines:
timestamp, upload_speed, download_speed = line.strip().split(',')
if timestamp in timestamp_speed_map:
timestamp_speed_map[timestamp] = {
'upload_speed_mbps': float(upload_speed),
'download_speed_mbps': float(download_speed)
}
for timestamp in timestamps:
speeds.append({
'timestamp': timestamp,
'upload_speed_mbps': timestamp_speed_map[timestamp]['upload_speed_mbps'],
'download_speed_mbps': timestamp_speed_map[timestamp]['download_speed_mbps']
})
return speeds
# Start the thread to log network speed
thread = threading.Thread(target=log_network_speed)
thread.daemon = True
thread.start()

@ -1,11 +0,0 @@
from flask import Blueprint, jsonify
import psutil
processes_bp = Blueprint('processes', __name__)
@processes_bp.route('/processes', methods=['GET'])
def get_processes():
processes = []
for proc in psutil.process_iter(['pid', 'name', 'username']):
processes.append(proc.info)
return jsonify(processes)

@ -0,0 +1,7 @@
import psutil
def get_processes():
processes = []
for proc in psutil.process_iter(['pid', 'name', 'username']):
processes.append(proc.info)
return processes

@ -0,0 +1,25 @@
from flask import Blueprint, jsonify
import app.cpu_usage as cpu_usage
import app.io_usage as io_usage
import app.memory_usage as memory_usage
import app.network as network_usage
route_bp = Blueprint('route', __name__)
# 资源使用情况
@route_bp.route('/sys/resource', methods=['GET'])
def get_resource():
cpu_percent = cpu_usage.get_cpu_percent()
io_percent = io_usage.get_io_percent()
memory_percent = memory_usage.get_memory_percent()
return jsonify({
'cpu_percent': cpu_percent,
'io_percent': io_percent,
'memory_percent': memory_percent,
})
# 获取过去12小时网络传输速度
@route_bp.route('/sys/network_speed', methods=['GET'])
def get_network():
return jsonify(network_usage.get_last_12_hours_speed())
Loading…
Cancel
Save