Update HostConfig and HostResources structs; add resource handling in AppHandler
This commit is contained in:
parent
de6b5cb633
commit
ec64852762
2
Cargo.lock
generated
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,
|
||||
|
31
src/main.rs
31
src/main.rs
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user