I need help

This commit is contained in:
Ramil_Algayev 2024-12-26 23:18:47 +04:00
parent b7c2211d32
commit 9aea6ee55f
3 changed files with 55 additions and 32 deletions

@ -12,15 +12,17 @@ message RegisterNodeReq {
string node_pubkey = 1; string node_pubkey = 1;
string owner_pubkey = 2; string owner_pubkey = 2;
string ip = 3; string ip = 3;
string country = 4; }
string city = 5;
uint32 avail_ports = 6; message NodeRes {
uint32 avail_ipv4 = 7; string node_pubkey = 1;
uint32 avail_ipv6 = 8; uint32 avail_ports = 2;
uint32 avail_vcpus = 9; uint32 avail_ipv4 = 3;
uint32 avail_memory_mb = 10; uint32 avail_ipv6 = 4;
uint32 avail_storage_gb = 11; uint32 avail_vcpus = 5;
uint32 max_ports_per_vm = 12; uint32 avail_memory_mb = 6;
uint32 avail_storage_gb = 7;
uint32 max_ports_per_vm = 8;
} }
message NewVMReq { message NewVMReq {
@ -93,6 +95,7 @@ message DeleteVMReq {
service BrainDaemonService { service BrainDaemonService {
rpc RegisterNode (RegisterNodeReq) returns (Empty); rpc RegisterNode (RegisterNodeReq) returns (Empty);
rpc NodeResUpdate (stream NodeRes) returns (Empty);
rpc GetNewVMReqs (NodePubkey) returns (stream NewVMReq); rpc GetNewVMReqs (NodePubkey) returns (stream NewVMReq);
rpc SendNewVMResp (stream NewVMResp) returns (Empty); rpc SendNewVMResp (stream NewVMResp) returns (Empty);
rpc GetDeleteVMReq (NodePubkey) returns (stream DeleteVMReq); rpc GetDeleteVMReq (NodePubkey) returns (stream DeleteVMReq);
@ -101,7 +104,6 @@ service BrainDaemonService {
rpc SendUpdateVMResp (stream UpdateVMResp) returns (Empty); rpc SendUpdateVMResp (stream UpdateVMResp) returns (Empty);
} }
message NodeFilters { message NodeFilters {
uint32 free_ports = 1; uint32 free_ports = 1;
bool offers_ipv4 = 2; bool offers_ipv4 = 2;

@ -12,15 +12,17 @@ message RegisterNodeReq {
string node_pubkey = 1; string node_pubkey = 1;
string owner_pubkey = 2; string owner_pubkey = 2;
string ip = 3; string ip = 3;
string country = 4; }
string city = 5;
uint32 avail_ports = 6; message NodeRes {
uint32 avail_ipv4 = 7; string node_pubkey = 1;
uint32 avail_ipv6 = 8; uint32 avail_ports = 2;
uint32 avail_vcpus = 9; uint32 avail_ipv4 = 3;
uint32 avail_memory_mb = 10; uint32 avail_ipv6 = 4;
uint32 avail_storage_gb = 11; uint32 avail_vcpus = 5;
uint32 max_ports_per_vm = 12; uint32 avail_memory_mb = 6;
uint32 avail_storage_gb = 7;
uint32 max_ports_per_vm = 8;
} }
message NewVMReq { message NewVMReq {
@ -93,6 +95,7 @@ message DeleteVMReq {
service BrainDaemonService { service BrainDaemonService {
rpc RegisterNode (RegisterNodeReq) returns (Empty); rpc RegisterNode (RegisterNodeReq) returns (Empty);
rpc NodeResUpdate (stream NodeRes) returns (Empty);
rpc GetNewVMReqs (NodePubkey) returns (stream NewVMReq); rpc GetNewVMReqs (NodePubkey) returns (stream NewVMReq);
rpc SendNewVMResp (stream NewVMResp) returns (Empty); rpc SendNewVMResp (stream NewVMResp) returns (Empty);
rpc GetDeleteVMReq (NodePubkey) returns (stream DeleteVMReq); rpc GetDeleteVMReq (NodePubkey) returns (stream DeleteVMReq);
@ -101,7 +104,6 @@ service BrainDaemonService {
rpc SendUpdateVMResp (stream UpdateVMResp) returns (Empty); rpc SendUpdateVMResp (stream UpdateVMResp) returns (Empty);
} }
message NodeFilters { message NodeFilters {
uint32 free_ports = 1; uint32 free_ports = 1;
bool offers_ipv4 = 2; bool offers_ipv4 = 2;
@ -128,3 +130,4 @@ service BrainCliService {
rpc DeleteVM (DeleteVMReq) returns (Empty); rpc DeleteVM (DeleteVMReq) returns (Empty);
rpc UpdateVM (UpdateVMReq) returns (UpdateVMResp); rpc UpdateVM (UpdateVMReq) returns (UpdateVMResp);
} }

@ -6,7 +6,7 @@ pub mod brain {
use anyhow::Result; use anyhow::Result;
use brain::{ use brain::{
brain_daemon_service_client::BrainDaemonServiceClient, DeleteVmReq, NewVmResp, brain_daemon_service_client::BrainDaemonServiceClient, DeleteVmReq, NewVmResp,
NewVmReq, NodePubkey, RegisterNodeReq, UpdateVmReq, UpdateVmResp, NewVmReq, NodePubkey, RegisterNodeReq, UpdateVmReq, UpdateVmResp, NodeRes,
}; };
use lazy_static::lazy_static; use lazy_static::lazy_static;
use log::{debug, error, info, warn}; use log::{debug, error, info, warn};
@ -71,8 +71,23 @@ async fn register_node(mut client: BrainDaemonServiceClient<Channel>) {
node_pubkey: SECURE_PUBLIC_KEY.clone(), node_pubkey: SECURE_PUBLIC_KEY.clone(),
owner_pubkey: "IamTheOwnerOf".to_string() + &SECURE_PUBLIC_KEY, owner_pubkey: "IamTheOwnerOf".to_string() + &SECURE_PUBLIC_KEY,
ip: "10.0.10.1".to_string(), ip: "10.0.10.1".to_string(),
country: "Cyrodiil".to_string(), };
city: "Bruma".to_string(), match client.register_node(req).await {
Ok(_) => info!(
"Registered as 10.0.10.1 {}",
SECURE_PUBLIC_KEY.clone()
),
Err(e) => error!("Could not register node data: {e:?}"),
};
}
async fn update_node_res(
mut _client: BrainDaemonServiceClient<Channel>,
tx: Sender<NodeRes>,
) -> Result<()> {
debug!("Starting node registration...");
let req = NodeRes {
node_pubkey: SECURE_PUBLIC_KEY.clone(),
avail_ports: 10000, avail_ports: 10000,
avail_ipv4: 10, avail_ipv4: 10,
avail_ipv6: 100_000, avail_ipv6: 100_000,
@ -81,13 +96,13 @@ async fn register_node(mut client: BrainDaemonServiceClient<Channel>) {
avail_storage_gb: 700, avail_storage_gb: 700,
max_ports_per_vm: 5, max_ports_per_vm: 5,
}; };
match client.register_node(req).await {
Ok(_) => info!( if let Err(e) = tx.send(req).await {
"Registered as 10.0.10.1 from Bruma/Cyrodiil with ID {}", error!("Failed to send NodeRes: {e}");
SECURE_PUBLIC_KEY.clone() } else {
), info!("NodeRes sent successfully");
Err(e) => error!("Could not register node data: {e:?}"), }
}; Ok(())
} }
async fn listen_for_deleted_vms( async fn listen_for_deleted_vms(
@ -217,6 +232,10 @@ async fn connect_and_run() -> Result<()> {
let mut streaming_tasks = JoinSet::new(); let mut streaming_tasks = JoinSet::new();
register_node(client.clone()).await; register_node(client.clone()).await;
let update_node_res_client = client.clone();
let (node_tx, _node_rx) = tokio::sync::mpsc::channel(6);
streaming_tasks.spawn(update_node_res(update_node_res_client, node_tx));
let newvm_client = client.clone(); let newvm_client = client.clone();
let (tx, newvm_rx) = tokio::sync::mpsc::channel(6); let (tx, newvm_rx) = tokio::sync::mpsc::channel(6);
@ -242,13 +261,12 @@ async fn connect_and_run() -> Result<()> {
handle_update_vm_requests(updatevm_rx, resp_tx).await; handle_update_vm_requests(updatevm_rx, 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));
let task_output = streaming_tasks.join_next().await; let task_output = streaming_tasks.join_next().await;
warn!("One stream exited: {task_output:?}"); warn!("One stream exited: {task_output:?} {streaming_tasks:?}");
Ok(()) Ok(())
} }