Update HostConfig and HostResources structs; add resource handling in AppHandler

This commit is contained in:
Noor 2025-02-21 10:46:57 +00:00
parent de6b5cb633
commit ec64852762
Signed by: noormohammedb
GPG Key ID: E424C39E19EFD7DF
4 changed files with 42 additions and 6 deletions

2
Cargo.lock generated

@ -410,7 +410,7 @@ dependencies = [
[[package]]
name = "detee-shared"
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 = [
"base64",
"prost",

@ -1,7 +1,7 @@
use anyhow::Result;
use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize)]
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct HostConfig {
pub brain_url: String,
pub host_ip_address: String,
@ -9,13 +9,21 @@ pub struct HostConfig {
pub max_cores_per_app: u32,
pub max_vcpu_reservation: u32,
pub max_mem_reservation_mb: u32,
pub max_ports_per_app: u16,
pub max_disk_reservation_mb: u32,
pub max_ports_per_app: u32,
// price per unit per minute
pub price: u64,
#[serde(default = "default_reserved_no_of_port")]
pub reserved_no_of_port: u32,
pub delete_archive: bool,
}
fn default_reserved_no_of_port() -> u32 {
16
}
/*
impl Default for HostConfig {
fn default() -> Self {
@ -51,6 +59,7 @@ impl HostConfig {
pub fn load_from_disk(path: &str) -> Result<Self> {
let content = std::fs::read_to_string(path)?;
let config: Self = serde_yml::from_str(&content)?;
// TODO: validate all the resource are available in node
Ok(config)
}

@ -17,7 +17,7 @@ use crate::global::APP_CONFIG_DIR;
use crate::global::APP_NAME_PREFIX;
use crate::global::USED_RESOURCES_PATH;
#[derive(Debug, Default, Deserialize, Serialize)]
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct HostResources {
pub existing_apps: HashSet<String>,
pub reserved_vcpus: u32,

@ -9,11 +9,13 @@ use anyhow::Result;
use data::App;
use detee_shared::sgx::pb::brain::brain_message_app;
use detee_shared::sgx::pb::brain::AppContract;
use detee_shared::sgx::pb::brain::AppNodeResources;
use detee_shared::sgx::pb::brain::BrainMessageApp;
use detee_shared::sgx::pb::brain::DaemonMessageApp;
use detee_shared::sgx::pb::brain::MappedPort;
use detee_shared::sgx::pb::brain::NewAppRes;
use detee_shared::sgx::types::brain::AppDeployConfig;
use global::PUBLIC_KEY;
use log::info;
use log::warn;
use std::collections::HashSet;
@ -82,6 +84,8 @@ impl AppHandler {
}
async fn run(mut self) {
sleep(Duration::from_millis(500)).await;
self.send_node_resources().await;
while let Some(brain_msg) = self.receiver.recv().await {
match brain_msg.msg {
Some(brain_message_app::Msg::NewAppReq(msg)) => {
@ -150,8 +154,31 @@ impl AppHandler {
Ok(())
}
async fn send_node_resources(&self) {
// TODO: send host resources to brain
async fn send_node_resources(&mut self) {
let host_config = self.host_config.clone();
let host_resource = self.host_resource.clone();
let node_pubkey = PUBLIC_KEY.to_string();
let avail_no_of_port = 65535
- (1024
+ host_config.reserved_no_of_port
+ host_resource.reserved_host_ports.len() as u32);
let avail_vcpus = host_config.max_vcpu_reservation - host_resource.reserved_vcpus;
let avail_memory_mb = host_config.max_mem_reservation_mb - host_resource.reserved_memory_mb;
let avail_storage_mb = host_config.max_disk_reservation_mb - host_resource.reserved_disk_mb;
let max_ports_per_app = host_config.max_ports_per_app;
let resource_update = AppNodeResources {
node_pubkey,
avail_no_of_port,
avail_vcpus,
avail_memory_mb,
avail_storage_mb,
max_ports_per_app,
};
log::debug!("sending node resources on brain: {resource_update:?}");
let _ = self.sender.send(resource_update.into()).await;
}
}