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]]
|
[[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",
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
#[derive(Debug, Serialize, Deserialize)]
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||||
pub struct HostConfig {
|
pub struct HostConfig {
|
||||||
pub brain_url: String,
|
pub brain_url: String,
|
||||||
pub host_ip_address: String,
|
pub host_ip_address: String,
|
||||||
@ -9,13 +9,21 @@ pub struct HostConfig {
|
|||||||
pub max_cores_per_app: u32,
|
pub max_cores_per_app: u32,
|
||||||
pub max_vcpu_reservation: u32,
|
pub max_vcpu_reservation: u32,
|
||||||
pub max_mem_reservation_mb: 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
|
// price per unit per minute
|
||||||
pub price: u64,
|
pub price: u64,
|
||||||
|
|
||||||
|
#[serde(default = "default_reserved_no_of_port")]
|
||||||
|
pub reserved_no_of_port: u32,
|
||||||
|
|
||||||
pub delete_archive: bool,
|
pub delete_archive: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn default_reserved_no_of_port() -> u32 {
|
||||||
|
16
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
impl Default for HostConfig {
|
impl Default for HostConfig {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
@ -51,6 +59,7 @@ impl HostConfig {
|
|||||||
pub fn load_from_disk(path: &str) -> Result<Self> {
|
pub fn load_from_disk(path: &str) -> Result<Self> {
|
||||||
let content = std::fs::read_to_string(path)?;
|
let content = std::fs::read_to_string(path)?;
|
||||||
let config: Self = serde_yml::from_str(&content)?;
|
let config: Self = serde_yml::from_str(&content)?;
|
||||||
|
// TODO: validate all the resource are available in node
|
||||||
|
|
||||||
Ok(config)
|
Ok(config)
|
||||||
}
|
}
|
||||||
|
@ -17,7 +17,7 @@ use crate::global::APP_CONFIG_DIR;
|
|||||||
use crate::global::APP_NAME_PREFIX;
|
use crate::global::APP_NAME_PREFIX;
|
||||||
use crate::global::USED_RESOURCES_PATH;
|
use crate::global::USED_RESOURCES_PATH;
|
||||||
|
|
||||||
#[derive(Debug, Default, Deserialize, Serialize)]
|
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
|
||||||
pub struct HostResources {
|
pub struct HostResources {
|
||||||
pub existing_apps: HashSet<String>,
|
pub existing_apps: HashSet<String>,
|
||||||
pub reserved_vcpus: u32,
|
pub reserved_vcpus: u32,
|
||||||
|
31
src/main.rs
31
src/main.rs
@ -9,11 +9,13 @@ use anyhow::Result;
|
|||||||
use data::App;
|
use data::App;
|
||||||
use detee_shared::sgx::pb::brain::brain_message_app;
|
use detee_shared::sgx::pb::brain::brain_message_app;
|
||||||
use detee_shared::sgx::pb::brain::AppContract;
|
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::BrainMessageApp;
|
||||||
use detee_shared::sgx::pb::brain::DaemonMessageApp;
|
use detee_shared::sgx::pb::brain::DaemonMessageApp;
|
||||||
use detee_shared::sgx::pb::brain::MappedPort;
|
use detee_shared::sgx::pb::brain::MappedPort;
|
||||||
use detee_shared::sgx::pb::brain::NewAppRes;
|
use detee_shared::sgx::pb::brain::NewAppRes;
|
||||||
use detee_shared::sgx::types::brain::AppDeployConfig;
|
use detee_shared::sgx::types::brain::AppDeployConfig;
|
||||||
|
use global::PUBLIC_KEY;
|
||||||
use log::info;
|
use log::info;
|
||||||
use log::warn;
|
use log::warn;
|
||||||
use std::collections::HashSet;
|
use std::collections::HashSet;
|
||||||
@ -82,6 +84,8 @@ impl AppHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async fn run(mut self) {
|
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 {
|
while let Some(brain_msg) = self.receiver.recv().await {
|
||||||
match brain_msg.msg {
|
match brain_msg.msg {
|
||||||
Some(brain_message_app::Msg::NewAppReq(msg)) => {
|
Some(brain_message_app::Msg::NewAppReq(msg)) => {
|
||||||
@ -150,8 +154,31 @@ impl AppHandler {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn send_node_resources(&self) {
|
async fn send_node_resources(&mut self) {
|
||||||
// TODO: send host resources to brain
|
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