1.3. Hardware Ressourcen
Die CPU Auslastung wird über die Rust Bibliothek
sysinfo ausgelesen.
Die Auswertung erfolgt über die System
Klasse der Bibliothek, welche alle Systemressourcen
läd und ausgeben kann.
Über extracts
wird der Status des Systems über mehrere Anfragen hin persistiert.
Die CPU Auslastung wird dann in der asynchronen Funktion get_cpus
ausgelesen.
Hierbei wird der Systemstatus der Arc Mutex
entnommen und die Mutex
gelocked.
Der Systemstatus wird durch die Funktion sysinfo::System::refresh_cpu()
erneuert und das
Systemobjekt angepasst.
Anschließend kann das Systemobjekt zum Auslesen der Prozessorlast verwendet werden.
Der erzeugte Vektor
an Gleitkommazahlen wird anschließend in das JSON Format umgeformt.
Zuletzt wird die JSON Response als HTTP Response an den Client zurückgegeben.
Hier ist ein Ausschnitt aus dem Quellcode zu sehen, der diesen Ablauf implementiert:
use sysinfo::{CpuExt, System, SystemExt, Cpu};
use axum::{
Json, extract::State,
Router,
routing::get,
response::IntoResponse,
};
use std::sync::{Arc, Mutex, MutexGuard};
#[derive(Clone)]
struct AppState {
system: Arc<Mutex<System>>
}
#[tokio::main]
async fn main() {
let app: Router = Router::new()
// --snip--
.route("/rest/cpu", get(get_cpus)) // Route "/rest/cpu" endpoint to get_cpus()
.with_state(AppState {
system: Arc::new(Mutex::new(System::new_all())) // Use AppState
});
// --snip--
}
// --snip--
async fn get_cpus(State(state): State<AppState>) -> impl IntoResponse {
let mut system: MutexGuard<System> = state.system.lock().unwrap();
system.refresh_cpu();
let v: Vec<_> = system.cpus().iter().map(|cpu: &Cpu| cpu.cpu_usage()).collect();
Json(v)
}
Bemerkung
Die Beschaffung des Arbeitsspeicher Status funktioniert auf die selbe Art und Weise, weshalb dies hier nicht extra aufgelistet wird.