updater #1
| @ -40,6 +40,23 @@ message NewVMRequest { | |||||||
|   string dtrfs_sha = 14; |   string dtrfs_sha = 14; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | message UpdateVMRequest { | ||||||
|  |   string uuid = 1; | ||||||
|  |   uint32 disk_size_gb = 2; | ||||||
|  |   uint32 vcpus = 3; | ||||||
|  |   uint32 memory_mb = 4; | ||||||
|  |   string kernel_url = 5; | ||||||
|  |   string kernel_sha = 6; | ||||||
|  |   string dtrfs_url = 7; | ||||||
|  |   string dtrfs_sha = 8; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | message UpdateVMResp { | ||||||
|  |   string uuid = 1; | ||||||
|  |   string timestamp = 2; | ||||||
|  |   string error = 3; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| message VMContract { | message VMContract { | ||||||
|   string uuid = 1; |   string uuid = 1; | ||||||
|   string hostname = 2; |   string hostname = 2; | ||||||
| @ -79,6 +96,7 @@ service BrainDaemonService { | |||||||
|   rpc SendVMConfirmations (stream NewVMConfirmation) returns (Empty); |   rpc SendVMConfirmations (stream NewVMConfirmation) returns (Empty); | ||||||
|   rpc DeletedVMUpdates (NodePubkey) returns (stream DeletedVMUpdate); |   rpc DeletedVMUpdates (NodePubkey) returns (stream DeletedVMUpdate); | ||||||
|   rpc ListVMContracts (ListVMContractsReq) returns (stream VMContract); |   rpc ListVMContracts (ListVMContractsReq) returns (stream VMContract); | ||||||
|  |   rpc UpdateVMs (NodePubkey) returns (stream UpdateVMRequest); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| message NodeFilters { | message NodeFilters { | ||||||
| @ -105,5 +123,5 @@ service BrainCliService { | |||||||
|   rpc ListVMContracts (ListVMContractsReq) returns (stream VMContract); |   rpc ListVMContracts (ListVMContractsReq) returns (stream VMContract); | ||||||
|   rpc ListNodes (NodeFilters) returns (stream NodeListResp); |   rpc ListNodes (NodeFilters) returns (stream NodeListResp); | ||||||
|   rpc DeleteVM (DeletedVMUpdate) returns (Empty); |   rpc DeleteVM (DeletedVMUpdate) returns (Empty); | ||||||
|  |   rpc UpdateVM (UpdateVMRequest) returns (UpdateVMResp); | ||||||
| } | } | ||||||
| 
 |  | ||||||
|  | |||||||
| @ -6,7 +6,7 @@ pub mod brain { | |||||||
| use anyhow::Result; | use anyhow::Result; | ||||||
| use brain::{ | use brain::{ | ||||||
|     brain_cli_service_client::BrainCliServiceClient, DeletedVmUpdate, ListVmContractsReq, |     brain_cli_service_client::BrainCliServiceClient, DeletedVmUpdate, ListVmContractsReq, | ||||||
|     NewVmRequest, NodeFilters, NodeListResp, VmContract, |     NewVmRequest, NodeFilters, NodeListResp, VmContract, UpdateVmRequest, UpdateVmResp, | ||||||
| }; | }; | ||||||
| use lazy_static::lazy_static; | use lazy_static::lazy_static; | ||||||
| use log::{debug, info, warn}; | use log::{debug, info, warn}; | ||||||
| @ -135,6 +135,24 @@ async fn delete_vm(mut client: BrainCliServiceClient<Channel>, uuid: &str) -> Re | |||||||
|     Ok(()) |     Ok(()) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | async fn update_vm(mut client: BrainCliServiceClient<Channel>, uuid: &str) -> Result<UpdateVmResp> { | ||||||
|  |     info!("Updatind VM {uuid}"); | ||||||
|  |     let req = UpdateVmRequest { | ||||||
|  |         uuid: String::new(), | ||||||
|  |         vcpus: 4, | ||||||
|  |         memory_mb: 4096, | ||||||
|  |         disk_size_gb: 40, | ||||||
|  |         kernel_url: "thisIsMyNewURL".to_string(), | ||||||
|  |         kernel_sha: "thisIsMyNewSha".to_string(), | ||||||
|  |         dtrfs_url: "thisIsMyNewURL".to_string(), | ||||||
|  |         dtrfs_sha: "thisIsMyNewSha".to_string(), | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     let result = client.update_vm(req).await; | ||||||
|  | 
 | ||||||
|  |     result.map(|msg| msg.into_inner()).map_err(|e| anyhow::Error::new(e)) | ||||||
|  | } | ||||||
|  | 
 | ||||||
| #[tokio::main] | #[tokio::main] | ||||||
| async fn main() -> Result<()> { | async fn main() -> Result<()> { | ||||||
|     env_logger::builder() |     env_logger::builder() | ||||||
| @ -154,6 +172,13 @@ async fn main() -> Result<()> { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     let contracts = list_contracts(client.clone()).await?; | ||||||
|  |     for contract in contracts { | ||||||
|  |         if let Err(e) = update_vm(client.clone(), &contract.uuid).await { | ||||||
|  |             log::error!("Received error when updating VM {}: {e:?}", &contract.uuid); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     if std::env::var("DELETE_VMS").is_err() { |     if std::env::var("DELETE_VMS").is_err() { | ||||||
|         return Ok(()); |         return Ok(()); | ||||||
|     } |     } | ||||||
|  | |||||||
							
								
								
									
										162
									
								
								daemon-mock/Cargo.lock
									
									
									
										generated
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										162
									
								
								daemon-mock/Cargo.lock
									
									
									
										generated
									
									
									
								
							| @ -26,6 +26,21 @@ dependencies = [ | |||||||
|  "memchr", |  "memchr", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "android-tzdata" | ||||||
|  | version = "0.1.1" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "android_system_properties" | ||||||
|  | version = "0.1.5" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" | ||||||
|  | dependencies = [ | ||||||
|  |  "libc", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "anstream" | name = "anstream" | ||||||
| version = "0.6.18" | version = "0.6.18" | ||||||
| @ -200,6 +215,12 @@ version = "2.6.0" | |||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" | checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "bumpalo" | ||||||
|  | version = "3.16.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "byteorder" | name = "byteorder" | ||||||
| version = "1.5.0" | version = "1.5.0" | ||||||
| @ -212,23 +233,53 @@ version = "1.9.0" | |||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" | checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "cc" | ||||||
|  | version = "1.2.5" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "c31a0499c1dc64f458ad13872de75c0eb7e3fdb0e67964610c914b034fc5956e" | ||||||
|  | dependencies = [ | ||||||
|  |  "shlex", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "cfg-if" | name = "cfg-if" | ||||||
| version = "1.0.0" | version = "1.0.0" | ||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "chrono" | ||||||
|  | version = "0.4.39" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" | ||||||
|  | dependencies = [ | ||||||
|  |  "android-tzdata", | ||||||
|  |  "iana-time-zone", | ||||||
|  |  "js-sys", | ||||||
|  |  "num-traits", | ||||||
|  |  "wasm-bindgen", | ||||||
|  |  "windows-targets", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "colorchoice" | name = "colorchoice" | ||||||
| version = "1.0.3" | version = "1.0.3" | ||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" | checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "core-foundation-sys" | ||||||
|  | version = "0.8.7" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "daemon-mock" | name = "daemon-mock" | ||||||
| version = "0.1.0" | version = "0.1.0" | ||||||
| dependencies = [ | dependencies = [ | ||||||
|  "anyhow", |  "anyhow", | ||||||
|  |  "chrono", | ||||||
|  "env_logger", |  "env_logger", | ||||||
|  "lazy_static", |  "lazy_static", | ||||||
|  "log", |  "log", | ||||||
| @ -502,6 +553,29 @@ dependencies = [ | |||||||
|  "tracing", |  "tracing", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "iana-time-zone" | ||||||
|  | version = "0.1.61" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" | ||||||
|  | dependencies = [ | ||||||
|  |  "android_system_properties", | ||||||
|  |  "core-foundation-sys", | ||||||
|  |  "iana-time-zone-haiku", | ||||||
|  |  "js-sys", | ||||||
|  |  "wasm-bindgen", | ||||||
|  |  "windows-core", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "iana-time-zone-haiku" | ||||||
|  | version = "0.1.2" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" | ||||||
|  | dependencies = [ | ||||||
|  |  "cc", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "indexmap" | name = "indexmap" | ||||||
| version = "1.9.3" | version = "1.9.3" | ||||||
| @ -543,6 +617,16 @@ version = "1.0.14" | |||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" | checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "js-sys" | ||||||
|  | version = "0.3.76" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7" | ||||||
|  | dependencies = [ | ||||||
|  |  "once_cell", | ||||||
|  |  "wasm-bindgen", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "lazy_static" | name = "lazy_static" | ||||||
| version = "1.5.0" | version = "1.5.0" | ||||||
| @ -611,6 +695,15 @@ version = "0.10.0" | |||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "defc4c55412d89136f966bbb339008b474350e5e6e78d2714439c386b3137a03" | checksum = "defc4c55412d89136f966bbb339008b474350e5e6e78d2714439c386b3137a03" | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "num-traits" | ||||||
|  | version = "0.2.19" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" | ||||||
|  | dependencies = [ | ||||||
|  |  "autocfg", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "object" | name = "object" | ||||||
| version = "0.36.7" | version = "0.36.7" | ||||||
| @ -867,6 +960,12 @@ dependencies = [ | |||||||
|  "syn", |  "syn", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "shlex" | ||||||
|  | version = "1.3.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "slab" | name = "slab" | ||||||
| version = "0.4.9" | version = "0.4.9" | ||||||
| @ -1127,6 +1226,69 @@ version = "0.11.0+wasi-snapshot-preview1" | |||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "wasm-bindgen" | ||||||
|  | version = "0.2.99" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" | ||||||
|  | dependencies = [ | ||||||
|  |  "cfg-if", | ||||||
|  |  "once_cell", | ||||||
|  |  "wasm-bindgen-macro", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "wasm-bindgen-backend" | ||||||
|  | version = "0.2.99" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" | ||||||
|  | dependencies = [ | ||||||
|  |  "bumpalo", | ||||||
|  |  "log", | ||||||
|  |  "proc-macro2", | ||||||
|  |  "quote", | ||||||
|  |  "syn", | ||||||
|  |  "wasm-bindgen-shared", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "wasm-bindgen-macro" | ||||||
|  | version = "0.2.99" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" | ||||||
|  | dependencies = [ | ||||||
|  |  "quote", | ||||||
|  |  "wasm-bindgen-macro-support", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "wasm-bindgen-macro-support" | ||||||
|  | version = "0.2.99" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" | ||||||
|  | dependencies = [ | ||||||
|  |  "proc-macro2", | ||||||
|  |  "quote", | ||||||
|  |  "syn", | ||||||
|  |  "wasm-bindgen-backend", | ||||||
|  |  "wasm-bindgen-shared", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "wasm-bindgen-shared" | ||||||
|  | version = "0.2.99" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "windows-core" | ||||||
|  | version = "0.52.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" | ||||||
|  | dependencies = [ | ||||||
|  |  "windows-targets", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "windows-sys" | name = "windows-sys" | ||||||
| version = "0.52.0" | version = "0.52.0" | ||||||
|  | |||||||
| @ -5,6 +5,7 @@ edition = "2021" | |||||||
| 
 | 
 | ||||||
| [dependencies] | [dependencies] | ||||||
| anyhow = "1.0.94" | anyhow = "1.0.94" | ||||||
|  | chrono = "0.4.39" | ||||||
| env_logger = "0.11.6" | env_logger = "0.11.6" | ||||||
| lazy_static = "1.5.0" | lazy_static = "1.5.0" | ||||||
| log = "0.4.22" | log = "0.4.22" | ||||||
|  | |||||||
| @ -40,6 +40,23 @@ message NewVMRequest { | |||||||
|   string dtrfs_sha = 14; |   string dtrfs_sha = 14; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | message UpdateVMRequest { | ||||||
|  |   string uuid = 1; | ||||||
|  |   uint32 disk_size_gb = 2; | ||||||
|  |   uint32 vcpus = 3; | ||||||
|  |   uint32 memory_mb = 4; | ||||||
|  |   string kernel_url = 5; | ||||||
|  |   string kernel_sha = 6; | ||||||
|  |   string dtrfs_url = 7; | ||||||
|  |   string dtrfs_sha = 8; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | message UpdateVMResp { | ||||||
|  |   string uuid = 1; | ||||||
|  |   string timestamp = 2; | ||||||
|  |   string error = 3; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| message VMContract { | message VMContract { | ||||||
|   string uuid = 1; |   string uuid = 1; | ||||||
|   string hostname = 2; |   string hostname = 2; | ||||||
| @ -79,6 +96,7 @@ service BrainDaemonService { | |||||||
|   rpc SendVMConfirmations (stream NewVMConfirmation) returns (Empty); |   rpc SendVMConfirmations (stream NewVMConfirmation) returns (Empty); | ||||||
|   rpc DeletedVMUpdates (NodePubkey) returns (stream DeletedVMUpdate); |   rpc DeletedVMUpdates (NodePubkey) returns (stream DeletedVMUpdate); | ||||||
|   rpc ListVMContracts (ListVMContractsReq) returns (stream VMContract); |   rpc ListVMContracts (ListVMContractsReq) returns (stream VMContract); | ||||||
|  |   rpc UpdateVMs (NodePubkey) returns (stream UpdateVMRequest); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| message NodeFilters { | message NodeFilters { | ||||||
| @ -105,5 +123,5 @@ service BrainCliService { | |||||||
|   rpc ListVMContracts (ListVMContractsReq) returns (stream VMContract); |   rpc ListVMContracts (ListVMContractsReq) returns (stream VMContract); | ||||||
|   rpc ListNodes (NodeFilters) returns (stream NodeListResp); |   rpc ListNodes (NodeFilters) returns (stream NodeListResp); | ||||||
|   rpc DeleteVM (DeletedVMUpdate) returns (Empty); |   rpc DeleteVM (DeletedVMUpdate) returns (Empty); | ||||||
|  |   rpc UpdateVM (UpdateVMRequest) returns (UpdateVMResp); | ||||||
| } | } | ||||||
| 
 |  | ||||||
|  | |||||||
| @ -6,7 +6,7 @@ pub mod brain { | |||||||
| use anyhow::Result; | use anyhow::Result; | ||||||
| use brain::{ | use brain::{ | ||||||
|     brain_daemon_service_client::BrainDaemonServiceClient, DeletedVmUpdate, NewVmConfirmation, |     brain_daemon_service_client::BrainDaemonServiceClient, DeletedVmUpdate, NewVmConfirmation, | ||||||
|     NewVmRequest, NodePubkey, RegisterNodeRequest, |     NewVmRequest, NodePubkey, RegisterNodeRequest, UpdateVmRequest, UpdateVmResp | ||||||
| }; | }; | ||||||
| use lazy_static::lazy_static; | use lazy_static::lazy_static; | ||||||
| use log::{debug, error, info, warn}; | use log::{debug, error, info, warn}; | ||||||
| @ -16,6 +16,7 @@ use tokio::{sync::mpsc::Receiver, sync::mpsc::Sender, task::JoinSet}; | |||||||
| use tokio_stream::wrappers::ReceiverStream; | use tokio_stream::wrappers::ReceiverStream; | ||||||
| use tokio_stream::StreamExt; | use tokio_stream::StreamExt; | ||||||
| use tonic::transport::Channel; | use tonic::transport::Channel; | ||||||
|  | use chrono; | ||||||
| 
 | 
 | ||||||
| lazy_static! { | lazy_static! { | ||||||
|     static ref SECURE_PUBLIC_KEY: String = generate_random_string(); |     static ref SECURE_PUBLIC_KEY: String = generate_random_string(); | ||||||
| @ -115,6 +116,48 @@ async fn listen_for_deleted_vms( | |||||||
|     Ok(()) |     Ok(()) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | async fn listen_for_update_vm_reqs( | ||||||
|  |     mut client: BrainDaemonServiceClient<Channel>, | ||||||
|  |     tx: Sender<UpdateVmRequest>, | ||||||
|  | ) -> Result<()> { | ||||||
|  |     debug!("starting listen_for_update_vm_reqs"); | ||||||
|  |     let node_pubkey = SECURE_PUBLIC_KEY.clone(); | ||||||
|  |     let mut grpc_stream = client | ||||||
|  |         .update_v_ms(NodePubkey { node_pubkey }) | ||||||
|  |         .await? | ||||||
|  |         .into_inner(); 
 | ||||||
|  |     while let Some(stream_update) = grpc_stream.next().await { | ||||||
|  |         match stream_update { | ||||||
|  |             Ok(req) => { | ||||||
|  |                 info!("Received update vm request: {req:?}"); | ||||||
|  |                 let _ = tx.send(req).await; | ||||||
|  |             } | ||||||
|  |             Err(e) => { | ||||||
|  |                 warn!("Brain disconnected from listen_for_update_vm_reqs: {e}"); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     debug!("listen_for_update_vm_reqs is about to exit"); | ||||||
|  |     Ok(()) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | async fn handle_update_vm_requests( | ||||||
|  |     mut req: Receiver<UpdateVmRequest>, | ||||||
|  |     resp: Sender<UpdateVmResp>, | ||||||
|  | ) { | ||||||
|  |     info!("Started to handle update vm requests."); | ||||||
|  |     while let Some(update_vm) = req.recv().await { | ||||||
|  |         let response = UpdateVmResp { | ||||||
|  |             uuid: update_vm.uuid.clone(), | ||||||
|  |             timestamp: chrono::Utc::now().to_rfc3339(), | ||||||
|  |             error: String::new(), | ||||||
|  |         }; | ||||||
|  |         info!("Sending UpdateVmResp: {response:?}"); | ||||||
|  |         let _ = resp.send(response).await; | ||||||
|  |     } | ||||||
|  |     warn!("update vm request handler is ending"); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| async fn handle_vm_requests(mut req: Receiver<NewVmRequest>, resp: Sender<NewVmConfirmation>) { | async fn handle_vm_requests(mut req: Receiver<NewVmRequest>, resp: Sender<NewVmConfirmation>) { | ||||||
|     info!("Started to handle vm requests. 1 out of 5 requests will return error."); |     info!("Started to handle vm requests. 1 out of 5 requests will return error."); | ||||||
|     let mut i = 0; |     let mut i = 0; | ||||||
| @ -178,6 +221,15 @@ async fn connect_and_run() -> Result<()> { | |||||||
|         handle_vm_requests(newvm_rx, confirm_tx).await; |         handle_vm_requests(newvm_rx, confirm_tx).await; | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
|  |     let updatevm_client = client.clone(); | ||||||
|  |     let (update_tx, update_rx) = tokio::sync::mpsc::channel(6); | ||||||
|  |     streaming_tasks.spawn(listen_for_update_vm_reqs(updatevm_client, update_tx)); | ||||||
|  | 
 | ||||||
|  |     let (update_resp_tx, _) = tokio::sync::mpsc::channel(6); | ||||||
|  |     tokio::spawn(async move { | ||||||
|  |         handle_update_vm_requests(update_rx, update_resp_tx).await; | ||||||
|  |     }); | ||||||
|  | 
 | ||||||
|     let deletevms_client = client.clone(); |     let deletevms_client = client.clone(); | ||||||
|     let (tx, _deletevm_rx) = tokio::sync::mpsc::channel(6); |     let (tx, _deletevm_rx) = tokio::sync::mpsc::channel(6); | ||||||
|     streaming_tasks.spawn(listen_for_deleted_vms(deletevms_client, tx)); |     streaming_tasks.spawn(listen_for_deleted_vms(deletevms_client, tx)); | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user