mirror of
				https://github.com/LiteyukiStudio/LiteyukiBot.git
				synced 2025-10-31 05:36:24 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			92 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			92 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 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(interval=0.1)
 | |
|     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))
 |