Redirect to pubsub node and some bug fixes #8
							
								
								
									
										2
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										2
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							| @ -1182,7 +1182,7 @@ dependencies = [ | ||||
| [[package]] | ||||
| name = "detee-shared" | ||||
| version = "0.1.0" | ||||
| source = "git+ssh://git@gitea.detee.cloud/testnet/proto.git?branch=surreal_brain#fb38352e1b47837b14f32d8df5ae7f6b17202aae" | ||||
| source = "git+ssh://git@gitea.detee.cloud/testnet/proto.git?branch=surreal_brain_app#0b195b4589e4ec689af7ddca27dc051716ecee78" | ||||
| dependencies = [ | ||||
|  "bincode", | ||||
|  "prost", | ||||
|  | ||||
| @ -34,7 +34,7 @@ tokio-retry = "0.3.0" | ||||
| detee-sgx = { git = "ssh://git@gitea.detee.cloud/testnet/detee-sgx.git", branch = "hratls", features=["hratls", "qvl"] } | ||||
| shadow-rs = { version = "1.1.1", features = ["metadata"] } | ||||
| 
 | ||||
| detee-shared = { git = "ssh://git@gitea.detee.cloud/testnet/proto.git", branch = "surreal_brain" } | ||||
| detee-shared = { git = "ssh://git@gitea.detee.cloud/testnet/proto.git", branch = "surreal_brain_app" } | ||||
| # detee-shared = { path = "../detee-shared" } | ||||
| 
 | ||||
| [build-dependencies] | ||||
|  | ||||
| @ -127,9 +127,9 @@ fn clap_cmd() -> Command { | ||||
|                     .arg( | ||||
|                         Arg::new("disk") | ||||
|                         .long("disk") | ||||
|                         .default_value("1000") | ||||
|                         .value_parser(clap::value_parser!(u32).range(300..8000)) | ||||
|                         .help("disk size in MB") | ||||
|                         .default_value("2") | ||||
|                         .value_parser(clap::value_parser!(u32).range(1..100)) | ||||
|                         .help("disk size in GB") | ||||
|                     ) | ||||
|                     .arg( | ||||
|                         Arg::new("port") | ||||
|  | ||||
| @ -80,9 +80,9 @@ fn handle_deploy( | ||||
|         // TODO: maybe add launch config on deploy command with --launch-config flag
 | ||||
|         (AppDeployConfig::from_path(file_path).unwrap(), None) | ||||
|     } else { | ||||
|         let vcpu = *deploy_match.get_one::<u32>("vcpus").unwrap(); | ||||
|         let vcpus = *deploy_match.get_one::<u32>("vcpus").unwrap(); | ||||
|         let memory_mb = *deploy_match.get_one::<u32>("memory").unwrap(); | ||||
|         let disk_mb = *deploy_match.get_one::<u32>("disk").unwrap(); | ||||
|         let disk_size_gb = *deploy_match.get_one::<u32>("disk").unwrap(); | ||||
|         let port = | ||||
|             deploy_match.get_many::<u32>("port").unwrap_or_default().cloned().collect::<Vec<_>>(); | ||||
|         let package_name = deploy_match.get_one::<String>("package").unwrap().clone(); | ||||
| @ -98,7 +98,7 @@ fn handle_deploy( | ||||
| 
 | ||||
|         let private_package = false; | ||||
| 
 | ||||
|         let resource = Resource { vcpu, memory_mb, disk_mb, port }; | ||||
|         let resource = Resource { vcpus, memory_mb, disk_size_gb, port }; | ||||
|         let node_pubkey = match block_on(get_app_node(resource.clone(), location.into())) { | ||||
|             Ok(node) => node.node_pubkey, | ||||
|             Err(e) => { | ||||
|  | ||||
| @ -48,7 +48,7 @@ impl crate::HumanOutput for AppContract { | ||||
|             .mapped_ports | ||||
|             .clone() | ||||
|             .iter() | ||||
|             .map(|p| format!("({},{})", p.host_port, p.app_port)) | ||||
|             .map(|p| format!("({},{})", p.host_port, p.guest_port)) | ||||
|             .collect::<Vec<_>>() | ||||
|             .join(", "); | ||||
|         println!( | ||||
| @ -57,8 +57,8 @@ impl crate::HumanOutput for AppContract { | ||||
|         ); | ||||
|         println!("The app has mapped ports by the node are: {mapped_ports}"); | ||||
|         println!( | ||||
|             "The App has {} vCPUS, {}MB of memory and a disk of {} MB.", | ||||
|             app_resource.vcpu, app_resource.memory_mb, app_resource.disk_mb | ||||
|             "The App has {} vCPUS, {}MB of memory and a disk of {} GB.", | ||||
|             app_resource.vcpus, app_resource.memory_mb, app_resource.disk_size_gb | ||||
|         ); | ||||
|         println!("You have locked {} nanoLP in the contract, that get collected at a rate of {} nanoLP per minute.", | ||||
|             self.locked_nano, self.nano_per_minute); | ||||
| @ -75,9 +75,9 @@ pub async fn new_app(app_deploy_config: AppDeployConfig) -> Result<NewAppRes> { | ||||
|     let mut req: NewAppReq = app_deploy_config.clone().into(); | ||||
| 
 | ||||
|     let locked_nano = calculate_nanolp_for_app( | ||||
|         resource.vcpu, | ||||
|         resource.vcpus, | ||||
|         resource.memory_mb, | ||||
|         resource.disk_mb, | ||||
|         resource.disk_size_gb, | ||||
|         app_deploy_config.hours, | ||||
|         req.price_per_unit, | ||||
|     ); | ||||
| @ -87,7 +87,8 @@ pub async fn new_app(app_deploy_config: AppDeployConfig) -> Result<NewAppRes> { | ||||
|     req.admin_pubkey = Config::get_detee_wallet()?; | ||||
|     req.hratls_pubkey = Config::get_hratls_pubkey_hex()?; | ||||
| 
 | ||||
|     let res = client().await?.deploy_app(sign_request(req)?).await?; | ||||
|     let res = client().await?.new_app(sign_request(req)?).await?; | ||||
| 
 | ||||
|     Ok(res.into_inner()) | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -41,11 +41,11 @@ pub struct AppContract { | ||||
|     pub uuid: String, | ||||
|     pub name: String, | ||||
|     #[tabled(rename = "Cores")] | ||||
|     pub vcpu: u32, | ||||
|     pub vcpus: u32, | ||||
|     #[tabled(rename = "Mem (MB)")] | ||||
|     pub memory_mb: u32, | ||||
|     #[tabled(rename = "Disk (MB)")] | ||||
|     pub disk_mb: u32, | ||||
|     #[tabled(rename = "Disk (GB)")] | ||||
|     pub disk_size_gb: u32, | ||||
|     #[tabled(rename = "LP/h")] | ||||
|     pub cost_h: String, | ||||
|     #[tabled(rename = "time left", display_with = "display_mins")] | ||||
| @ -137,22 +137,22 @@ impl From<AppContractPB> for AppContract { | ||||
|             } | ||||
|         }; | ||||
| 
 | ||||
|         let AppResource { vcpu, memory_mb, disk_mb, .. } = | ||||
|         let AppResource { vcpus, memory_mb, disk_size_gb, .. } = | ||||
|             brain_app_contract.resource.unwrap_or_default(); | ||||
| 
 | ||||
|         let exposed_host_ports = brain_app_contract | ||||
|             .mapped_ports | ||||
|             .iter() | ||||
|             .map(|port| (port.host_port, port.app_port)) | ||||
|             .map(|port| (port.host_port, port.guest_port)) | ||||
|             .collect::<Vec<_>>(); | ||||
| 
 | ||||
|         Self { | ||||
|             location, | ||||
|             uuid: brain_app_contract.uuid, | ||||
|             name: brain_app_contract.app_name, | ||||
|             vcpu, | ||||
|             vcpus, | ||||
|             memory_mb, | ||||
|             disk_mb, | ||||
|             disk_size_gb, | ||||
|             cost_h: format!( | ||||
|                 "{:.4}", | ||||
|                 (brain_app_contract.nano_per_minute * 60) as f64 / 1_000_000_000.0 | ||||
| @ -181,7 +181,6 @@ pub async fn get_one_contract(uuid: &str) -> Result<AppContractPB, Error> { | ||||
| 
 | ||||
| #[derive(Debug, Serialize, Deserialize)] | ||||
| pub struct AppDeployResponse { | ||||
|     pub status: String, | ||||
|     pub uuid: String, | ||||
|     pub name: String, | ||||
|     pub node_ip: String, | ||||
| @ -198,14 +197,13 @@ impl crate::HumanOutput for AppDeployResponse { | ||||
| impl From<(NewAppRes, String)> for AppDeployResponse { | ||||
|     fn from((value, name): (NewAppRes, String)) -> Self { | ||||
|         Self { | ||||
|             status: value.status, | ||||
|             uuid: value.uuid, | ||||
|             name, | ||||
|             node_ip: value.ip_address, | ||||
|             hratls_port: value | ||||
|                 .mapped_ports | ||||
|                 .iter() | ||||
|                 .find(|port| port.app_port == HRATLS_APP_PORT) | ||||
|                 .find(|port| port.guest_port == HRATLS_APP_PORT) | ||||
|                 .map(|port| port.host_port) | ||||
|                 .unwrap_or(HRATLS_APP_PORT), | ||||
|             error: value.error, | ||||
| @ -230,14 +228,15 @@ pub async fn get_app_node( | ||||
|     location: snp::deploy::Location, | ||||
| ) -> Result<AppNodeListResp, grpc_brain::Error> { | ||||
|     let app_node_filter = AppNodeFilters { | ||||
|         vcpus: resource.vcpu, | ||||
|         vcpus: resource.vcpus, | ||||
|         memory_mb: resource.memory_mb, | ||||
|         storage_mb: resource.disk_mb, | ||||
|         storage_gb: resource.disk_size_gb, | ||||
|         country: location.country.clone().unwrap_or_default(), | ||||
|         region: location.region.clone().unwrap_or_default(), | ||||
|         city: location.city.clone().unwrap_or_default(), | ||||
|         ip: location.node_ip.clone().unwrap_or_default(), | ||||
|         node_pubkey: String::new(), | ||||
|         free_ports: (resource.port.len() + 1) as u32, | ||||
|     }; | ||||
|     get_one_app_node(app_node_filter).await | ||||
| } | ||||
|  | ||||
| @ -48,7 +48,7 @@ pub async fn hratls_url_and_mr_enclave_from_app_id( | ||||
|     let dtpm_port = app_contract | ||||
|         .mapped_ports | ||||
|         .iter() | ||||
|         .find(|port| port.app_port == HRATLS_APP_PORT) | ||||
|         .find(|port| port.guest_port == HRATLS_APP_PORT) | ||||
|         .ok_or(crate::sgx::grpc_dtpm::Error::Dtpm("Could not find DTMP port".to_string()))? | ||||
|         .host_port; | ||||
| 
 | ||||
| @ -71,13 +71,13 @@ pub async fn fetch_config(package_name: &str) -> Result<DtpmConfig, Error> { | ||||
| pub fn calculate_nanolp_for_app( | ||||
|     vcpus: u32, | ||||
|     memory_mb: u32, | ||||
|     disk_size_mb: u32, | ||||
|     disk_size_gb: u32, | ||||
|     hours: u64, | ||||
|     node_price: u64, | ||||
| ) -> u64 { | ||||
|     // this calculation needs to match the calculation of the network
 | ||||
|     let total_units = | ||||
|         (vcpus as f64 * 5f64) + (memory_mb as f64 / 200f64) + (disk_size_mb as f64 / 10000f64); | ||||
|         (vcpus as f64 * 5f64) + (memory_mb as f64 / 200f64) + (disk_size_gb as f64 / 10f64); | ||||
|     let locked_nano = (hours as f64 * 60f64 * total_units * node_price as f64) as u64; | ||||
|     eprintln!( | ||||
|             "Node price: {}/unit/minute. Total Units for hardware requested: {:.4}. Locking {} LP (offering the App for {} hours).", | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user