Node resources

enhance AppNode resource handling
This commit is contained in:
Noor 2025-02-21 10:45:29 +00:00
parent 467a4f04b9
commit 127d399670
Signed by: noormohammedb
GPG Key ID: E424C39E19EFD7DF
3 changed files with 37 additions and 16 deletions

2
Cargo.lock generated

@ -418,7 +418,7 @@ dependencies = [
[[package]] [[package]]
name = "detee-shared" name = "detee-shared"
version = "0.1.0" version = "0.1.0"
source = "git+ssh://git@gitea.detee.cloud/noormohammedb/detee-shared?branch=stable_01#54abe74d42946b238c2ce44bb33f55778490b13d" source = "git+ssh://git@gitea.detee.cloud/noormohammedb/detee-shared?branch=stable_01#a6baa4059d2836b88d52cd56216993e92e83ecbc"
dependencies = [ dependencies = [
"base64", "base64",
"prost", "prost",

@ -9,6 +9,7 @@ use tokio::sync::mpsc::Sender;
use tokio::sync::oneshot::Sender as OneshotSender; use tokio::sync::oneshot::Sender as OneshotSender;
use detee_shared::sgx::pb::brain::AppContract as AppContractPB; use detee_shared::sgx::pb::brain::AppContract as AppContractPB;
use detee_shared::sgx::pb::brain::AppNodeResources;
use detee_shared::sgx::pb::brain::AppResource as AppResourcePB; use detee_shared::sgx::pb::brain::AppResource as AppResourcePB;
use detee_shared::sgx::pb::brain::BrainMessageApp; use detee_shared::sgx::pb::brain::BrainMessageApp;
use detee_shared::sgx::pb::brain::MappedPort; use detee_shared::sgx::pb::brain::MappedPort;
@ -161,7 +162,7 @@ pub struct AppContract {
impl From<AppContract> for AppContractPB { impl From<AppContract> for AppContractPB {
fn from(value: AppContract) -> Self { fn from(value: AppContract) -> Self {
let exposed_ports = value let mapped_ports = value
.mapped_ports .mapped_ports
.clone() .clone()
.into_iter() .into_iter()
@ -179,7 +180,7 @@ impl From<AppContract> for AppContractPB {
package_url: value.package_url, package_url: value.package_url,
admin_pubkey: value.admin_pubkey, admin_pubkey: value.admin_pubkey,
node_pubkey: value.node_pubkey, node_pubkey: value.node_pubkey,
exposed_ports, mapped_ports,
public_ipv4: value.host_ipv4, public_ipv4: value.host_ipv4,
resource, resource,
created_at: value.created_at.to_rfc3339(), created_at: value.created_at.to_rfc3339(),
@ -202,8 +203,8 @@ pub struct AppNode {
pub ip: String, pub ip: String,
pub avail_mem_mb: u32, pub avail_mem_mb: u32,
pub avail_vcpus: u32, pub avail_vcpus: u32,
pub avail_storage_gbs: u32, pub avail_storage_mb: u32,
pub avail_ports: u32, pub avail_no_of_port: u32,
pub max_ports_per_app: u32, pub max_ports_per_app: u32,
// nanotokens per unit per minute // nanotokens per unit per minute
pub price: u64, pub price: u64,
@ -837,6 +838,30 @@ impl BrainData {
.collect() .collect()
} }
pub fn submit_app_node_resources(&self, node_resource: AppNodeResources) {
debug!("{:#?}", &node_resource);
let mut nodes = self.app_nodes.write().unwrap();
for n in nodes.iter_mut() {
if n.node_pubkey == node_resource.node_pubkey {
debug!(
"Found node {}. Updating resources to {:?}",
n.node_pubkey, node_resource
);
n.avail_vcpus = node_resource.avail_vcpus;
n.avail_mem_mb = node_resource.avail_memory_mb;
n.avail_storage_mb = node_resource.avail_storage_mb;
n.max_ports_per_app = node_resource.max_ports_per_app;
n.avail_no_of_port = node_resource.avail_no_of_port;
return;
}
}
debug!(
"VM Node {} not found when trying to update resources.",
node_resource.node_pubkey
);
debug!("VM Node list:\n{:?}", nodes);
}
pub async fn send_new_container_req(&self, mut req: NewAppReq, tx: OneshotSender<NewAppRes>) { pub async fn send_new_container_req(&self, mut req: NewAppReq, tx: OneshotSender<NewAppRes>) {
req.uuid = uuid::Uuid::new_v4().to_string(); req.uuid = uuid::Uuid::new_v4().to_string();

@ -433,7 +433,7 @@ impl BrainAppDaemon for BrainAppDaemonMock {
) -> Result<tonic::Response<Self::RegisterAppNodeStream>, Status> { ) -> Result<tonic::Response<Self::RegisterAppNodeStream>, Status> {
let req_data = check_sig_from_req(req)?; let req_data = check_sig_from_req(req)?;
log::info!( log::info!(
"registering app node_key : {}, owner_key: {}", "registering app node_key : {}, operator_key: {}",
&req_data.node_pubkey, &req_data.node_pubkey,
&req_data.operator_pubkey &req_data.operator_pubkey
); );
@ -525,19 +525,15 @@ impl BrainAppDaemon for BrainAppDaemonMock {
Ok(msg) => match msg.msg { Ok(msg) => match msg.msg {
Some(detee_shared::sgx::pb::brain::daemon_message_app::Msg::Auth( Some(detee_shared::sgx::pb::brain::daemon_message_app::Msg::Auth(
daemon_auth, daemon_auth,
)) => { )) => pubkey = daemon_auth.pubkey,
pubkey = daemon_auth.pubkey;
}
Some(detee_shared::sgx::pb::brain::daemon_message_app::Msg::NewAppRes( Some(detee_shared::sgx::pb::brain::daemon_message_app::Msg::NewAppRes(
new_app_res, new_app_res,
)) => { )) => self.data.send_new_container_resp(new_app_res).await,
self.data.send_new_container_resp(new_app_res).await;
}
Some( Some(
detee_shared::sgx::pb::brain::daemon_message_app::Msg::AppNodeResources(_), detee_shared::sgx::pb::brain::daemon_message_app::Msg::AppNodeResources(
) => { node_resource,
todo!("AppNodeResources not implemented yet"); ),
} ) => self.data.submit_app_node_resources(node_resource),
_ => { _ => {
dbg!("None"); dbg!("None");
} }