diff --git a/Cargo.lock b/Cargo.lock index 38610fa..df14429 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3643,6 +3643,7 @@ dependencies = [ "dioxus", "js-sys", "lucide-dioxus", + "serde", "wasm-bindgen", "web-sys", ] diff --git a/Cargo.toml b/Cargo.toml index e84e32b..294f2bb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,6 +12,7 @@ js-sys = "0.3.77" lucide-dioxus = { version = "2.15.0", features = ["all-icons"] } wasm-bindgen = "0.2.100" web-sys = "0.3.77" +serde = { version = "1.0.61", features = ["derive"]} [features] default = ["web"] diff --git a/src/backend/mod.rs b/src/backend/mod.rs index 27715ab..98fa3d8 100644 --- a/src/backend/mod.rs +++ b/src/backend/mod.rs @@ -1,6 +1,50 @@ use dioxus::prelude::*; +use crate::components::server::Server; + #[server] pub async fn log_in(username: String, password: String) -> Result { Ok(format!("{username}@{password}")) } + +#[server] +pub async fn get_servers() -> Result, ServerFnError> { + Ok(vec![ + Server { + name: "Main Server".to_string(), + status: crate::components::server::Status::Online, + ip: "10.0.0.5".to_string(), + cpu: 95, + memory: 60, + storage: 43, + network: 88, + }, + Server { + name: "Cache Node".to_string(), + status: crate::components::server::Status::Warning, + ip: "192.168.1.12".to_string(), + cpu: 47, + memory: 72, + storage: 81, + network: 34, + }, + Server { + name: "Database".to_string(), + status: crate::components::server::Status::Offline, + ip: "172.16.254.3".to_string(), + cpu: 12, + memory: 90, + storage: 22, + network: 10, + }, + Server { + name: "Backup Node".to_string(), + status: crate::components::server::Status::Maintenance, + ip: "192.168.100.22".to_string(), + cpu: 83, + memory: 41, + storage: 96, + network: 70, + }, + ]) +} diff --git a/src/components/server.rs b/src/components/server.rs index 56e8a07..748e9ca 100644 --- a/src/components/server.rs +++ b/src/components/server.rs @@ -3,7 +3,7 @@ use dioxus::prelude::*; const SERVER_CSS: Asset = asset!("/assets/styles/server.css"); -#[derive(Debug, Clone, PartialEq, Eq)] +#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)] pub enum Status { Online, Offline, @@ -11,7 +11,7 @@ pub enum Status { Maintenance, } -#[derive(Debug, Clone, PartialEq, Eq)] +#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)] pub struct Server { pub name: String, pub status: Status, diff --git a/src/dashboard.rs b/src/dashboard.rs index f43cb33..fbbc73d 100644 --- a/src/dashboard.rs +++ b/src/dashboard.rs @@ -1,9 +1,8 @@ use dioxus::prelude::*; -use crate::components::{ - server::{Server, ServerComponent}, - sidebar::SideBar, - LineChart, ProgressBar, +use crate::{ + backend, + components::{server::ServerComponent, sidebar::SideBar, LineChart, ProgressBar}, }; use lucide_dioxus; @@ -11,6 +10,14 @@ const DASHBOARD_CSS: Asset = asset!("/assets/styles/dashboard.css"); #[component] pub fn Dashboard() -> Element { + let servers = use_resource(move || async move { + if let Ok(v) = backend::get_servers().await { + v + } else { + Vec::new() + } + }); + rsx! { document::Link { rel: "stylesheet", href: DASHBOARD_CSS } @@ -104,45 +111,11 @@ pub fn Dashboard() -> Element { } div { class: "server-container", - ServerComponent { server: Server { - name: "Main Server".to_string(), - status: crate::components::server::Status::Online, - ip: "10.0.0.5".to_string(), - cpu: 95, - memory: 60, - storage: 43, - network: 88, - } } - - ServerComponent { server: Server { - name: "Cache Node".to_string(), - status: crate::components::server::Status::Warning, - ip: "192.168.1.12".to_string(), - cpu: 47, - memory: 72, - storage: 81, - network: 34, - } } - - ServerComponent { server: Server { - name: "Database".to_string(), - status: crate::components::server::Status::Offline, - ip: "172.16.254.3".to_string(), - cpu: 12, - memory: 90, - storage: 22, - network: 10, - } } - - ServerComponent { server: Server { - name: "Backup Node".to_string(), - status: crate::components::server::Status::Maintenance, - ip: "192.168.100.22".to_string(), - cpu: 83, - memory: 41, - storage: 96, - network: 70, - } } + if let Some(ss) = servers.read().clone() { + for s in ss { + ServerComponent { server: s } + } + } } } }