import nonebot import psutil from dash import Dash, Input, Output, dcc, html from starlette.middleware.wsgi import WSGIMiddleware from liteyuki.utils.language import Language from liteyuki.utils.tools import convert_size app = nonebot.get_app() def get_system_info(): cpu_percent = psutil.cpu_percent() memory_info = psutil.virtual_memory() memory_percent = memory_info.percent return { "cpu_percent" : cpu_percent, "memory_percent": memory_percent } @app.get("/system_info") async def system_info(): return get_system_info() lang = Language() dash_app = Dash(__name__) dash_app.layout = dash_app.layout = html.Div(children=[ html.H1(children=lang.get("main.monitor.title"), style={ 'textAlign': 'center' }), dcc.Graph(id='live-update-graph'), dcc.Interval( id='interval-component', interval=1 * 1000, # in milliseconds n_intervals=0 ) ]) @dash_app.callback(Output('live-update-graph', 'figure'), [Input('interval-component', 'n_intervals')]) def update_graph_live(n): lang = Language() system_inf = get_system_info() dash_app.layout = html.Div(children=[ html.H1(children=lang.get("main.monitor.title"), style={ 'textAlign': 'center' }), dcc.Graph(id='live-update-graph'), dcc.Interval( id='interval-component', interval=2 * 1000, # in milliseconds n_intervals=0 ) ]) mem = psutil.virtual_memory() cpu_f = psutil.cpu_freq() figure = { 'data' : [ { 'x' : [f"{cpu_f.current / 1000:.2f}GHz {psutil.cpu_count(logical=False)}c{psutil.cpu_count()}t"], 'y' : [system_inf['cpu_percent']], 'type': 'bar', 'name': f"{lang.get('main.monitor.cpu')} {lang.get('main.monitor.usage')}" }, { 'x' : [f"{convert_size(mem.used, add_unit=False)}/{convert_size(mem.total)}({mem.used / mem.total * 100:.2f}%)"], 'y' : [system_inf['memory_percent']], 'type': 'bar', 'name': f"{lang.get('main.monitor.memory')} {lang.get('main.monitor.usage')}" }, ], 'layout': { 'title': lang.get('main.monitor.description'), # 'xaxis': { # 'range': [0, 10] # }, # 设置x轴的范围 'yaxis': { 'range': [0, 100] }, # 设置y轴的范围 } } return figure app.mount("/", WSGIMiddleware(dash_app.server))