add server_info cpus net_info api

Signed-off-by: mujunxiang <1948535941@qq.com>
This commit is contained in:
mujunxiang
2024-11-25 17:26:34 +08:00
parent 7029524504
commit 5cc138e23d
10 changed files with 243 additions and 7 deletions
Generated
+92 -1
View File
@@ -541,6 +541,26 @@ dependencies = [
"rand_core", "rand_core",
] ]
[[package]]
name = "darwin-libproc"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9fb90051930c9a0f09e585762152048e23ac74d20c10590ef7cf01c0343c3046"
dependencies = [
"darwin-libproc-sys",
"libc",
"memchr",
]
[[package]]
name = "darwin-libproc-sys"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "57cebb5bde66eecdd30ddc4b9cd208238b15db4982ccc72db59d699ea10867c1"
dependencies = [
"libc",
]
[[package]] [[package]]
name = "deranged" name = "deranged"
version = "0.3.11" version = "0.3.11"
@@ -551,6 +571,17 @@ dependencies = [
"serde", "serde",
] ]
[[package]]
name = "derive_more"
version = "0.99.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]] [[package]]
name = "digest" name = "digest"
version = "0.10.7" version = "0.10.7"
@@ -626,7 +657,7 @@ dependencies = [
"lock", "lock",
"md-5", "md-5",
"netif", "netif",
"nix", "nix 0.29.0",
"num", "num",
"num_cpus", "num_cpus",
"openssl", "openssl",
@@ -1410,6 +1441,23 @@ dependencies = [
"hashbrown 0.12.3", "hashbrown 0.12.3",
] ]
[[package]]
name = "mach2"
version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "19b955cdeb2a02b9117f121ce63aa52d08ade45de53e48fe6a38b39c10f6f709"
dependencies = [
"libc",
]
[[package]]
name = "madmin"
version = "0.0.1"
dependencies = [
"psutil",
"serde",
]
[[package]] [[package]]
name = "matchers" name = "matchers"
version = "0.1.0" version = "0.1.0"
@@ -1496,6 +1544,17 @@ dependencies = [
"winapi", "winapi",
] ]
[[package]]
name = "nix"
version = "0.24.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069"
dependencies = [
"bitflags 1.3.2",
"cfg-if",
"libc",
]
[[package]] [[package]]
name = "nix" name = "nix"
version = "0.29.0" version = "0.29.0"
@@ -1815,6 +1874,12 @@ version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2"
[[package]]
name = "platforms"
version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e8d0eef3571242013a0d5dc84861c3ae4a652e56e12adf8bdc26ff5f8cb34c94"
[[package]] [[package]]
name = "powerfmt" name = "powerfmt"
version = "0.2.0" version = "0.2.0"
@@ -1937,6 +2002,25 @@ dependencies = [
"tower 0.5.1", "tower 0.5.1",
] ]
[[package]]
name = "psutil"
version = "3.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5e617cc9058daa5e1fe5a0d23ed745773a5ee354111dad1ec0235b0cc16b6730"
dependencies = [
"cfg-if",
"darwin-libproc",
"derive_more",
"glob",
"mach2",
"nix 0.24.3",
"num_cpus",
"once_cell",
"platforms",
"thiserror",
"unescape",
]
[[package]] [[package]]
name = "quick-xml" name = "quick-xml"
version = "0.37.0" version = "0.37.0"
@@ -2146,6 +2230,7 @@ dependencies = [
"lazy_static", "lazy_static",
"lock", "lock",
"log", "log",
"madmin",
"matchit 0.8.5", "matchit 0.8.5",
"mime", "mime",
"netif", "netif",
@@ -2902,6 +2987,12 @@ dependencies = [
"tz-rs", "tz-rs",
] ]
[[package]]
name = "unescape"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ccb97dac3243214f8d8507998906ca3e2e0b900bf9bf4870477f125b82e68f6e"
[[package]] [[package]]
name = "unicode-ident" name = "unicode-ident"
version = "1.0.13" version = "1.0.13"
+2
View File
@@ -1,6 +1,7 @@
[workspace] [workspace]
resolver = "2" resolver = "2"
members = [ members = [
"madmin",
"rustfs", "rustfs",
"ecstore", "ecstore",
"e2e_test", "e2e_test",
@@ -20,6 +21,7 @@ rust-version = "1.75"
version = "0.0.1" version = "0.0.1"
[workspace.dependencies] [workspace.dependencies]
madmin = { path = "./madmin" }
async-trait = "0.1.83" async-trait = "0.1.83"
backon = "1.2.0" backon = "1.2.0"
bytes = "1.8.0" bytes = "1.8.0"
+11
View File
@@ -0,0 +1,11 @@
[package]
name = "madmin"
edition.workspace = true
license.workspace = true
repository.workspace = true
rust-version.workspace = true
version.workspace = true
[dependencies]
psutil = "3.3.0"
serde.workspace = true
+51
View File
@@ -0,0 +1,51 @@
use serde::{Deserialize, Serialize};
#[derive(Debug, Default, Serialize, Deserialize)]
pub struct NodeCommon {
pub addr: String,
pub error: String,
}
#[derive(Debug, Default, Serialize, Deserialize)]
pub struct Cpu {
vendor_id: String,
family: String,
model: String,
stepping: i32,
physical_id: String,
model_name: String,
mhz: f64,
cache_size: i32,
flags: Vec<String>,
microcode: String,
cores: u64,
}
#[derive(Debug, Default, Serialize, Deserialize)]
pub struct CpuFreqStats {
name: String,
cpuinfo_current_frequency: Option<u64>,
cpuinfo_minimum_frequency: Option<u64>,
cpuinfo_maximum_frequency: Option<u64>,
cpuinfo_transition_latency: Option<u64>,
scaling_current_frequency: Option<u64>,
scaling_minimum_frequency: Option<u64>,
scaling_maximum_frequency: Option<u64>,
available_governors: String,
driver: String,
governor: String,
related_cpus: String,
set_speed: String,
}
#[derive(Debug, Default, Serialize, Deserialize)]
pub struct Cpus {
node_common: NodeCommon,
cpus: Vec<Cpu>,
cpu_freq_stats: Vec<CpuFreqStats>,
}
pub fn get_cpus() -> Cpus {
// todo
Cpus::default()
}
+2
View File
@@ -0,0 +1,2 @@
pub mod health;
pub mod net;
+13
View File
@@ -0,0 +1,13 @@
use serde::{Deserialize, Serialize};
use crate::health::NodeCommon;
pub mod net_linux;
#[derive(Debug, Default, Serialize, Deserialize)]
pub struct NetInfo {
node_common: NodeCommon,
interface: String,
driver: String,
firmware_version: String,
}
+9
View File
@@ -0,0 +1,9 @@
use super::NetInfo;
pub fn get_net_info(addr: &str, iface: &str) -> NetInfo {
let mut ni = NetInfo::default();
ni.node_common.addr = addr.to_string();
ni.interface = iface.to_string();
ni
}
+1
View File
@@ -9,6 +9,7 @@ rust-version.workspace = true
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies] [dependencies]
madmin.workspace = true
log.workspace = true log.workspace = true
async-trait.workspace = true async-trait.workspace = true
bytes.workspace = true bytes.workspace = true
+15 -1
View File
@@ -16,6 +16,7 @@ use ecstore::{
use futures::{Stream, StreamExt}; use futures::{Stream, StreamExt};
use lock::{lock_args::LockArgs, Locker, GLOBAL_LOCAL_SERVER}; use lock::{lock_args::LockArgs, Locker, GLOBAL_LOCAL_SERVER};
use madmin::health::get_cpus;
use protos::{ use protos::{
models::{PingBody, PingBodyBuilder}, models::{PingBody, PingBodyBuilder},
proto_gen::node_service::{node_service_server::NodeService as Node, *}, proto_gen::node_service::{node_service_server::NodeService as Node, *},
@@ -1551,7 +1552,20 @@ impl Node for NodeService {
} }
async fn get_cpus(&self, _request: Request<GetCpusRequest>) -> Result<Response<GetCpusResponse>, Status> { async fn get_cpus(&self, _request: Request<GetCpusRequest>) -> Result<Response<GetCpusResponse>, Status> {
todo!() let info = get_cpus();
let mut buf = Vec::new();
if let Err(err) = info.serialize(&mut Serializer::new(&mut buf)) {
return Ok(tonic::Response::new(GetCpusResponse {
success: false,
cpus: vec![],
error_info: Some(err.to_string()),
}));
}
Ok(tonic::Response::new(GetCpusResponse {
success: true,
cpus: buf,
error_info: None,
}))
} }
async fn get_net_info(&self, _request: Request<GetNetInfoRequest>) -> Result<Response<GetNetInfoResponse>, Status> { async fn get_net_info(&self, _request: Request<GetNetInfoRequest>) -> Result<Response<GetNetInfoResponse>, Status> {
+47 -5
View File
@@ -2,7 +2,11 @@ use std::io::Cursor;
use common::error::{Error, Result}; use common::error::{Error, Result};
use ecstore::{admin_server_info::ServerProperties, store_api::StorageInfo}; use ecstore::{admin_server_info::ServerProperties, store_api::StorageInfo};
use protos::{node_service_time_out_client, proto_gen::node_service::LocalStorageInfoRequest}; use madmin::health::Cpus;
use protos::{
node_service_time_out_client,
proto_gen::node_service::{GetCpusRequest, LocalStorageInfoRequest, ServerInfoRequest},
};
use rmp_serde::Deserializer; use rmp_serde::Deserializer;
use serde::Deserialize; use serde::Deserialize;
use tonic::Request; use tonic::Request;
@@ -33,15 +37,53 @@ impl PeerRestClient {
} }
return Err(Error::msg("")); return Err(Error::msg(""));
} }
let info = response.storage_info; let data = response.storage_info;
let mut buf = Deserializer::new(Cursor::new(info)); let mut buf = Deserializer::new(Cursor::new(data));
let storage_info: StorageInfo = Deserialize::deserialize(&mut buf).unwrap(); let storage_info: StorageInfo = Deserialize::deserialize(&mut buf).unwrap();
Ok(storage_info) Ok(storage_info)
} }
pub async fn server_info(&self) -> Request<ServerProperties> { pub async fn server_info(&self) -> Result<ServerProperties> {
todo!() let mut client = node_service_time_out_client(&self.addr)
.await
.map_err(|err| Error::msg(err.to_string()))?;
let request = Request::new(ServerInfoRequest { metrics: true });
let response = client.server_info(request).await?.into_inner();
if !response.success {
if let Some(msg) = response.error_info {
return Err(Error::msg(msg));
}
return Err(Error::msg(""));
}
let data = response.server_properties;
let mut buf = Deserializer::new(Cursor::new(data));
let storage_properties: ServerProperties = Deserialize::deserialize(&mut buf).unwrap();
Ok(storage_properties)
}
pub async fn get_cpus(&self) -> Result<Cpus> {
let mut client = node_service_time_out_client(&self.addr)
.await
.map_err(|err| Error::msg(err.to_string()))?;
let request = Request::new(GetCpusRequest {});
let response = client.get_cpus(request).await?.into_inner();
if !response.success {
if let Some(msg) = response.error_info {
return Err(Error::msg(msg));
}
return Err(Error::msg(""));
}
let data = response.cpus;
let mut buf = Deserializer::new(Cursor::new(data));
let cpus: Cpus = Deserialize::deserialize(&mut buf).unwrap();
Ok(cpus)
} }
} }