Add system information
This commit is contained in:
parent
2fefdb97be
commit
9407d8f0a8
@ -7,6 +7,7 @@ use std::io::ErrorKind;
|
|||||||
|
|
||||||
pub mod auth_controller;
|
pub mod auth_controller;
|
||||||
pub mod server_controller;
|
pub mod server_controller;
|
||||||
|
pub mod sys_info_controller;
|
||||||
pub mod vm_controller;
|
pub mod vm_controller;
|
||||||
|
|
||||||
/// Custom error to ease controller writing
|
/// Custom error to ease controller writing
|
||||||
|
22
remote_backend/src/controllers/sys_info_controller.rs
Normal file
22
remote_backend/src/controllers/sys_info_controller.rs
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
use crate::controllers::HttpResult;
|
||||||
|
use crate::virtweb_client;
|
||||||
|
use actix_web::HttpResponse;
|
||||||
|
|
||||||
|
#[derive(serde::Serialize)]
|
||||||
|
struct SysInfoStatus {
|
||||||
|
allowed: bool,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Check if system info can be retrieved
|
||||||
|
pub async fn config() -> HttpResult {
|
||||||
|
let info = virtweb_client::get_token_info().await?;
|
||||||
|
|
||||||
|
Ok(HttpResponse::Ok().json(SysInfoStatus {
|
||||||
|
allowed: info.can_retrieve_system_info(),
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Get current system status
|
||||||
|
pub async fn status() -> HttpResult {
|
||||||
|
Ok(HttpResponse::Ok().json(virtweb_client::get_server_info().await?))
|
||||||
|
}
|
@ -11,7 +11,9 @@ use actix_web::{web, App, HttpServer};
|
|||||||
use light_openid::basic_state_manager::BasicStateManager;
|
use light_openid::basic_state_manager::BasicStateManager;
|
||||||
use remote_backend::app_config::AppConfig;
|
use remote_backend::app_config::AppConfig;
|
||||||
use remote_backend::constants;
|
use remote_backend::constants;
|
||||||
use remote_backend::controllers::{auth_controller, server_controller, vm_controller};
|
use remote_backend::controllers::{
|
||||||
|
auth_controller, server_controller, sys_info_controller, vm_controller,
|
||||||
|
};
|
||||||
use remote_backend::middlewares::auth_middleware::AuthChecker;
|
use remote_backend::middlewares::auth_middleware::AuthChecker;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
|
|
||||||
@ -97,6 +99,14 @@ async fn main() -> std::io::Result<()> {
|
|||||||
"/api/vm/{uid}/screenshot",
|
"/api/vm/{uid}/screenshot",
|
||||||
web::get().to(vm_controller::screenshot),
|
web::get().to(vm_controller::screenshot),
|
||||||
)
|
)
|
||||||
|
.route(
|
||||||
|
"/api/sysinfo/config",
|
||||||
|
web::get().to(sys_info_controller::config),
|
||||||
|
)
|
||||||
|
.route(
|
||||||
|
"/api/sysinfo/status",
|
||||||
|
web::get().to(sys_info_controller::status),
|
||||||
|
)
|
||||||
})
|
})
|
||||||
.bind(&AppConfig::get().listen_address)?
|
.bind(&AppConfig::get().listen_address)?
|
||||||
.run()
|
.run()
|
||||||
|
@ -84,6 +84,19 @@ pub struct VMState {
|
|||||||
pub state: String,
|
pub state: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(serde::Deserialize, serde::Serialize, Debug)]
|
||||||
|
pub struct SystemSystemInfo {
|
||||||
|
physical_core_count: usize,
|
||||||
|
uptime: usize,
|
||||||
|
used_memory: usize,
|
||||||
|
available_memory: usize,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(serde::Deserialize, serde::Serialize, Debug)]
|
||||||
|
pub struct SystemInfo {
|
||||||
|
system: SystemSystemInfo,
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(serde::Deserialize, Debug)]
|
#[derive(serde::Deserialize, Debug)]
|
||||||
pub struct TokenRight {
|
pub struct TokenRight {
|
||||||
verb: String,
|
verb: String,
|
||||||
@ -134,6 +147,11 @@ impl TokenInfo {
|
|||||||
.map(|r| VMUuid::from_str(r.path.rsplit_once('/').unwrap().1).unwrap())
|
.map(|r| VMUuid::from_str(r.path.rsplit_once('/').unwrap().1).unwrap())
|
||||||
.collect::<Vec<_>>()
|
.collect::<Vec<_>>()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Check if system info can be retrived
|
||||||
|
pub fn can_retrieve_system_info(&self) -> bool {
|
||||||
|
self.is_route_allowed("GET", "/api/server/info")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Perform a request on the API
|
/// Perform a request on the API
|
||||||
@ -224,7 +242,7 @@ pub async fn vm_resume(id: VMUuid) -> anyhow::Result<()> {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Resume a vm
|
/// Grab a screenshot of the VM
|
||||||
pub async fn vm_screenshot(id: VMUuid) -> anyhow::Result<Vec<u8>> {
|
pub async fn vm_screenshot(id: VMUuid) -> anyhow::Result<Vec<u8>> {
|
||||||
Ok(request(id.route_screenshot())
|
Ok(request(id.route_screenshot())
|
||||||
.await?
|
.await?
|
||||||
@ -232,3 +250,8 @@ pub async fn vm_screenshot(id: VMUuid) -> anyhow::Result<Vec<u8>> {
|
|||||||
.await?
|
.await?
|
||||||
.to_vec())
|
.to_vec())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Get current server information
|
||||||
|
pub async fn get_server_info() -> anyhow::Result<SystemInfo> {
|
||||||
|
json_request("/api/server/info").await
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user