如何用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.pswp.cn/diannao/12273.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/12273.shtml
英文地址,請注明出處:http://en.pswp.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續航有多遠。 另一個…

Docker 創建網絡

問題&#xff1a; 1.需要將多個容器添加到同一個網絡. 2.docker-compose.yaml 如果不指定&#xff0c;默認會重新創建一個網卡. 創建網卡 docker network create -d bridge mynet ##-d 指定模式&#xff08;默認橋接&#xff09;查看自定義網絡信息 docker inspect mynet…

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;在測…

圖紙加密軟件是如何實現共享服務器圖紙防泄密?Cad圖紙防泄密廣州廠家

現在企業網絡數據安全的問題已經在社會的發展過程中引起了關注&#xff0c;尤其對研發制造類企業而言&#xff0c;企業設計圖紙的防泄密問題是這些企業在日后工作管理中的重中之重。在當今的互聯網發展形勢下&#xff0c;廣州的制造類設計企業為不讓單位圖紙泄露&#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 輸出中文樣式(中文…

java相等忽略音調

來自百度,親測可用 java相等忽略音調 在Java中&#xff0c;如果你想比較兩個字符串而忽略它們的音調符號&#xff0c;你可以使用java.text.Collator類來進行區域敏感的字符串比較。Collator類提供了根據特定區域的規則進行字符串比較的能力&#xff0c;可以設置忽略音調的選項…

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;其危害性和傳播性不容忽視…