如何用Rust获取本机CPU、内存在Web网页中显示?

目录

一、需求描述

二、具体操作步骤

三、知识点

1、systemstat

2、Actix 


一、需求描述

需求:

1、需要使用Rust进行后端开发获取本机CPU和内存信息;

2、使用WEB框架发布API;

3、然后使用HTML/CSS/JavaScript进行前端开发,显示结果;

以下是一个简单的示例,展示了如何获取系统信息并使用Actix-Web提供API,然后在前端使用JavaScript来实时刷新数据。

二、具体操作步骤

修改Cargo.toml,添加用到的依赖

[dependencies]
systemstat = "0.2.3"
actix-web = "3.3.2"

PS E:\RustroverProjects> cargo add systemstat
    Updating crates.io index
      Adding systemstat v0.2.3 to dependencies                                                                                                                                     
             Features:
             - serde
             - the_serde
    Updating crates.io index

PS E:\RustroverProjects> cargo add actix-web 
    Blocking waiting for file lock on package cache
    Updating crates.io index
      Adding actix-web v3.3.2 to dependencies                                                                                                                                      
             Features:
             + compress
             - open-ssl
             - openssl
             - rust-tls
             - rustls
             - secure-cookies 
             - secure-cookies
 

 代码如下:

use std::thread;
use std::time::Duration;
use systemstat::{System, Platform, saturating_sub_bytes};
use actix_web::{get, web, App, HttpResponse, HttpServer, Responder};async fn sys_info() -> String {let sys = System::new();let mut cpu_info = String::new();let mut memory_info = String::new();match sys.cpu_load_aggregate() {Ok(cpu)=> {println!("\nMeasuring CPU load...");thread::sleep(Duration::from_secs(1));let cpu = cpu.done().unwrap();println!("\nCPU load: {}% user, {}% nice, {}% system, {}% intr, {}% idle ",cpu.user * 100.0, cpu.nice * 100.0, cpu.system * 100.0, cpu.interrupt * 100.0, cpu.idle * 100.0);cpu_info = format!("\nCPU load: {}% user, {}% nice, {}% system, {}% intr, {}% idle ",cpu.user * 100.0, cpu.nice * 100.0, cpu.system * 100.0, cpu.interrupt * 100.0, cpu.idle * 100.0);},Err(x) => println!("\nCPU load: error: {}", x)}match sys.memory() {Ok(mem) => {println!("\nMemory: {} used / {} ({} bytes) total ({:?})", saturating_sub_bytes(mem.total, mem.free), mem.total, mem.total.as_u64(), mem.platform_memory);memory_info = format!("\nMemory: {} used / {} ({} bytes) total ({:?})", saturating_sub_bytes(mem.total, mem.free), mem.total, mem.total.as_u64(), mem.platform_memory);},Err(x) => println!("\nMemory: error: {}", x)}format!("CPU: {}\nMemory: {}", cpu_info,memory_info)
}#[get("/")]
async fn hello() -> impl Responder {HttpResponse::Ok().body("Hello world!")
}#[actix_web::main]
async fn main() -> std::io::Result<()> {HttpServer::new(|| {App::new().service(hello).route("/api", web::get().to(sys_info))}).bind(("127.0.0.1", 8080))?.run().await
}

运行结果如下:  

三、知识点

1、systemstat

This library provides a way to access system information such as CPU load, mounted filesystems, network interfaces, etc.

该库提供了一种访问系统信息的方法,如CPU负载、已安装的文件系统、网络接口等。

systemstat - RustThis library provides a way to access system information such as CPU load, mounted filesystems, network interfaces, etc.icon-default.png?t=N7T8https://docs.rs/systemstat/latest/systemstat/index.html

2、Actix 

Actix Web lets you quickly and confidently develop web services in Rust and this guide will get you going in no time.

Actix Web可以让您快速而自信地在Rust中开发Web服务,本指南将很快让您上手。

Getting Started | ActixInstalling Rusticon-default.png?t=N7T8https://actix.rs/docs/getting-started

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/12273.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL表的增删查改【基础部分】

数据表的操作 新增 普通插入 insert into 表名 values(值,值...)注意&#xff1a; 此处的值要和表中的列相匹配 使用’‘单引号或者”“双引号来表示字符串 mysql> insert into student values(123,zhangsan); Query OK, 1 row affected (0.02 sec)指定列插入 insert …

2024年3月 电子学会 青少年等级考试机器人理论真题五级

202403 青少年等级考试机器人理论真题五级 第 1 题 下图程序运行后&#xff0c;串口监视器显示的结果是&#xff1f;&#xff08; &#xff09; A&#xff1a;0 B&#xff1a;1 C&#xff1a;3 D&#xff1a;4 第 2 题 下列选项中&#xff0c;关于74HC595移位寄存器芯片的…

微信小程序开发【Coffee Shopping】(1)

1.环境准备 微信开发者工具&#xff1a;https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html 前端常用网站集合&#xff1a;http://www.wwp666.cn/ 微信小程序开发文档&#xff1a;https://developers.weixin.qq.com/miniprogram/dev/framework/quicksta…

数据结构之二叉树详解[1]

在前面我们介绍了堆和二叉树的基本概念后&#xff0c;本篇文章将带领大家深入学习链式二叉树。 1.预备知识 2.二叉树结点的创建 3.二叉树的遍历 3.1前序遍历 3.2中序遍历 3.3 后序遍历 4.统计二叉树的结点个数 5.二叉树叶子结点的个数 6.二叉树第k层的结点个数 7.总结 …

鸿蒙ArkUI开发:常用布局【相对布局】

相对布局&#xff08;RelativeContainer&#xff09; 相对布局可以让子元素指定兄弟元素或父容器作为锚点&#xff0c;基于锚点做位置布局必须为RelativeContainer及其子元素设置ID&#xff0c;用于指定锚点信息。未设置ID的子元素不会显示RelativeContainer ID为“__containe…

增程SUV价格即将崩盘?买车一定要再等等!

文 | AUTO芯球 作者 | 雷歌​ 真是“离谱”啊&#xff0c;车圈真是逗比欢乐多&#xff0c; 我这两天看一个博主连续40多小时开车直播&#xff0c;充电口、油箱盖全部封死&#xff0c;全程视频直播没断过&#xff0c; 就为了测试这两天刚上市的星际元ET续航有多远。 另一个…

NSSCTF Web方向的例题和相关知识点(二)

[SWPUCTF 2021 新生赛]Do_you_know_http 解题&#xff1a; 点击打开环境&#xff0c;是 提示说请使用wLLm浏览器访问 我们可以更改浏览器信息&#xff0c;在burp重放器中发包后发现是302重定向&#xff0c;但是提示说success成功&#xff0c;说明 我们修改是成功的&#xff…

HTML特殊字符

特殊字符 有特殊含义的字符成为字符实体 对于有特殊含义的字符,需要通过转移字符来表示 <span> <br><a href"http://www.atguigu.com">我 爱 前端</a> <br>&amp;amp; 效果

Element-UI 快速入门指南

文章目录 一、安装 Element-UI1.1 使用 npm 安装1.2 使用 yarn 安装 二、引入 Element-UI三、使用 Element-UI 组件3.1 按钮组件3.2 输入框组件3.3 表单组件3.4 表格组件3.5 弹框组件 四、自定义主题4.1 安装主题工具4.2 初始化变量文件4.3 编译主题 五、总结 &#x1f389;欢迎…

刷题之最长连续序列

哈希表 class Solution { public:int longestConsecutive(vector<int>& nums) {//set记录并且去重nums中的数unordered_set<int>set;for(int i0;i<nums.size();i){set.insert(nums[i]);}int result0;//遍历所有数for(auto iset.begin();i!set.end();i){//如…

服务的war包已经丢在tomcat中但是还是没法访问,如何排查?

问题出现的现象是我已经将 XWiki 的 WAR 包放置在 Tomcat 的 webapps目录下但仍然无法访问&#xff0c;反思之后可以从下面以下几个方面来诊断和解决问题&#xff1a; 1. 确认 Tomcat 正在运行 首先&#xff0c;确保 Tomcat 服务正在正常运行。可以使用以下命令检查 Tomcat 的…

鉴源论坛·观通丨轨交软件测试技术详述

作者 | 刘艳青 上海控安安全测评部测试经理 版块 | 鉴源论坛 观通 社群 | 添加微信号“TICPShanghai”加入“上海控安51fusa安全社区” 01 集成测试技术要求 1.1 总体要求 对软件集成测试进行静态测试应先于动态测试&#xff1b; 集成过程是动态进行的&#xff0c;在测…

CVHub | CVPR 2024 | 英伟达发布新一代视觉基础模型: AM-RADIO = CLIP + DINOv2 + SAM

本文来源公众号“CVHub”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;CVPR 2024 | 英伟达发布新一代视觉基础模型: AM-RADIO CLIP DINOv2 SAM 标题&#xff1a;《AM-RADIO: Agglomerative Vision Foundation Model Reduce Al…

vscode 之 output 输出中文乱码,终端输出中文正常

# 1. 背景 因为没钱买正版的软件&#xff0c;所以转战 vscode 编译器。 在编译 python 文件时&#xff0c;发现直接右键 runner code&#xff0c;输出中文乱码。 但是在 teiminal 终端 执行py test.py 时&#xff0c;输出正常&#xff0c;中文正常。 output 输出中文样式(中文…

Go微服务: Prometheus性能监控与Grafana平台的搭建

Prometheus 概述 promethues 是一套开源的监控&报警&时间序列数据库的组合基本原理是通过http协议周期性抓取被监控组件的状态适合Docker、Kubernetes环境的监控系统 Promethues 整体架构 一、抓取数据的两种方式 1 &#xff09;Short-lived jobs 短暂的任务 不会提…

RedisTemplate操作Redis详解之连接Redis及自定义序列化

连接到Redis 使用Redis和Spring时的首要任务之一是通过IoC容器连接到Redis。为此&#xff0c;需要java连接器&#xff08;或绑定&#xff09;。无论选择哪种库&#xff0c;你都只需要使用一组Spring Data Redis API&#xff08;在所有连接器中行为一致&#xff09;&#xff1a;…

面对.halo勒索病毒,如何有效防范与应对?

导言&#xff1a; 随着网络技术的不断发展&#xff0c;网络安全问题也日益凸显。其中&#xff0c;勒索病毒作为一种极具破坏性的网络攻击手段&#xff0c;近年来在全球范围内频发。其中&#xff0c;.halo勒索病毒作为勒索病毒家族中的一员&#xff0c;其危害性和传播性不容忽视…

StNet: Local and Global Spatial-Temporal Modeling for Action Recognition 论文阅读

StNet: Local and Global Spatial-Temporal Modeling for Action Recognition 论文阅读 Abstract1 Introduction2 Related Work3 Proposed Approach4 Experiments5 Conclusion 文章信息&#xff1a; 原文链接&#xff1a;https://ojs.aaai.org/index.php/AAAI/article/view/4…

二叉树专题(有关二叉树的相关学习)

二叉树 1.数概念及结构 1.1树的结构 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因 为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。 有一个特殊的结…

ollama离线部署llama3(window系统)

首先介绍下ollama是什么&#xff1f;Ollama是一个开源的大型语言模型服务工具&#xff0c;旨在为用户提供本地化的运行环境&#xff0c;满足个性化的需求。具体来说&#xff0c;Ollama是一个功能强大的开源框架&#xff0c;可以简化在Docker容器中部署和管理大型语言模型&a…