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