integrating new proto structure
This commit is contained in:
parent
23777d8a54
commit
afaa478f46
2
Cargo.lock
generated
2
Cargo.lock
generated
@ -290,7 +290,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#7c9f66a7394c06ad8af0934e34b113f9c965bc98"
|
source = "git+ssh://git@gitea.detee.cloud/noormohammedb/detee-shared#42443b816299afb0da6493b35165f8ce7558d717"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"base64",
|
"base64",
|
||||||
"prost",
|
"prost",
|
||||||
|
10
src/data.rs
10
src/data.rs
@ -1,6 +1,6 @@
|
|||||||
use anyhow::{anyhow, Result};
|
use anyhow::{anyhow, Result};
|
||||||
use detee_shared::types::shared::Container as ContainerConfig;
|
use detee_shared::types::brain::AppDeployConfig;
|
||||||
use detee_shared::types::shared::Resource as ResourceConfig;
|
use detee_shared::types::brain::Resource as ResourceConfig;
|
||||||
|
|
||||||
use crate::container::delete_enclave;
|
use crate::container::delete_enclave;
|
||||||
use crate::container::deploy_enclave;
|
use crate::container::deploy_enclave;
|
||||||
@ -24,10 +24,10 @@ pub struct Container {
|
|||||||
impl DaemonState {
|
impl DaemonState {
|
||||||
pub async fn create_new_container(
|
pub async fn create_new_container(
|
||||||
&mut self,
|
&mut self,
|
||||||
req_data: ContainerConfig,
|
req_data: AppDeployConfig,
|
||||||
unarchive_dir: String,
|
unarchive_dir: String,
|
||||||
) -> Result<Vec<(u16, u16)>> {
|
) -> Result<Vec<(u16, u16)>> {
|
||||||
let publishing_ports = req_data.resource.clone().unwrap().port;
|
let publishing_ports = req_data.resource.clone().port;
|
||||||
let uuid = req_data.uuid;
|
let uuid = req_data.uuid;
|
||||||
let container_name = format!("dtpm-{uuid}");
|
let container_name = format!("dtpm-{uuid}");
|
||||||
let mapped_ports =
|
let mapped_ports =
|
||||||
@ -39,7 +39,7 @@ impl DaemonState {
|
|||||||
package_path: unarchive_dir,
|
package_path: unarchive_dir,
|
||||||
status: "running".to_string(),
|
status: "running".to_string(),
|
||||||
admin: req_data.admin_pubkey,
|
admin: req_data.admin_pubkey,
|
||||||
container_resource: req_data.resource.unwrap(),
|
container_resource: req_data.resource,
|
||||||
mapped_ports: mapped_ports.clone(),
|
mapped_ports: mapped_ports.clone(),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
43
src/grpc.rs
43
src/grpc.rs
@ -1,13 +1,13 @@
|
|||||||
|
use detee_shared::pb::brain::brain_app_daemon_client::BrainAppDaemonClient;
|
||||||
|
use detee_shared::pb::brain::{
|
||||||
|
AppContract, BrainMessageApp, DaemonMessageApp, Pubkey, RegisterAppNodeReq,
|
||||||
|
};
|
||||||
|
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use detee_shared::pb::daemon::brain_sgx_daemon_client::BrainSgxDaemonClient;
|
|
||||||
use detee_shared::pb::daemon::daemon_message::Msg;
|
|
||||||
use detee_shared::pb::daemon::{BrainMessage, DaemonMessage};
|
|
||||||
use detee_shared::pb::shared::ContainerContracts;
|
|
||||||
use detee_shared::pb::shared::{Pubkey, RegisterNodeReq};
|
|
||||||
use tokio::sync::mpsc::Receiver;
|
use tokio::sync::mpsc::Receiver;
|
||||||
use tokio::sync::mpsc::Sender;
|
use tokio::sync::mpsc::Sender;
|
||||||
use tokio::task::JoinSet;
|
use tokio::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;
|
||||||
|
|
||||||
@ -16,17 +16,17 @@ use crate::{ADMIN_PUBKEY, NODE_PUBKEY};
|
|||||||
|
|
||||||
pub struct ConnectionData {
|
pub struct ConnectionData {
|
||||||
pub brain_url: String,
|
pub brain_url: String,
|
||||||
pub brain_msg_tx: Sender<BrainMessage>,
|
pub brain_msg_tx: Sender<BrainMessageApp>,
|
||||||
pub daemon_msg_rx: Receiver<DaemonMessage>,
|
pub daemon_msg_rx: Receiver<DaemonMessageApp>,
|
||||||
pub daemon_msg_tx: Sender<DaemonMessage>,
|
pub daemon_msg_tx: Sender<DaemonMessageApp>,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn register_node(config: &crate::Config) -> Result<Vec<ContainerContracts>> {
|
pub async fn register_node(config: &crate::Config) -> Result<Vec<AppContract>> {
|
||||||
let mut client = BrainSgxDaemonClient::connect(config.brain_url.clone()).await?;
|
let mut client = BrainAppDaemonClient::connect(config.brain_url.clone()).await?;
|
||||||
|
|
||||||
log::debug!("registering node with brain");
|
log::debug!("registering node with brain");
|
||||||
|
|
||||||
let req = RegisterNodeReq {
|
let req = RegisterAppNodeReq {
|
||||||
node_pubkey: NODE_PUBKEY.to_string(),
|
node_pubkey: NODE_PUBKEY.to_string(),
|
||||||
owner_pubkey: ADMIN_PUBKEY.to_string(),
|
owner_pubkey: ADMIN_PUBKEY.to_string(),
|
||||||
main_ip: IP_INFO.ip.clone(),
|
main_ip: IP_INFO.ip.clone(),
|
||||||
@ -57,16 +57,16 @@ pub async fn register_node(config: &crate::Config) -> Result<Vec<ContainerContra
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn connect_and_run(conn_data: ConnectionData) -> Result<()> {
|
pub async fn connect_and_run(conn_data: ConnectionData) -> Result<()> {
|
||||||
let client = BrainSgxDaemonClient::connect(conn_data.brain_url).await?;
|
let client = BrainAppDaemonClient::connect(conn_data.brain_url).await?;
|
||||||
|
|
||||||
let mut streaming_tasks = JoinSet::new();
|
let mut streaming_tasks = JoinSet::new();
|
||||||
|
|
||||||
streaming_tasks.spawn(receive_messages(client.clone(), conn_data.brain_msg_tx));
|
streaming_tasks.spawn(receive_messages(client.clone(), conn_data.brain_msg_tx));
|
||||||
streaming_tasks.spawn(send_messages(
|
// streaming_tasks.spawn(send_messages(
|
||||||
client.clone(),
|
// client.clone(),
|
||||||
conn_data.daemon_msg_rx,
|
// conn_data.daemon_msg_rx,
|
||||||
conn_data.daemon_msg_tx,
|
// conn_data.daemon_msg_tx,
|
||||||
));
|
// ));
|
||||||
|
|
||||||
let task_output = streaming_tasks.join_next().await;
|
let task_output = streaming_tasks.join_next().await;
|
||||||
println!("exiting: {task_output:?}");
|
println!("exiting: {task_output:?}");
|
||||||
@ -74,8 +74,8 @@ pub async fn connect_and_run(conn_data: ConnectionData) -> Result<()> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn receive_messages(
|
pub async fn receive_messages(
|
||||||
mut client: BrainSgxDaemonClient<Channel>,
|
mut client: BrainAppDaemonClient<Channel>,
|
||||||
tx: Sender<BrainMessage>,
|
tx: Sender<BrainMessageApp>,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
let pubkey = NODE_PUBKEY.to_string();
|
let pubkey = NODE_PUBKEY.to_string();
|
||||||
|
|
||||||
@ -97,6 +97,7 @@ pub async fn receive_messages(
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
pub async fn send_messages(
|
pub async fn send_messages(
|
||||||
mut client: BrainSgxDaemonClient<Channel>,
|
mut client: BrainSgxDaemonClient<Channel>,
|
||||||
rx: Receiver<DaemonMessage>,
|
rx: Receiver<DaemonMessage>,
|
||||||
@ -113,3 +114,5 @@ pub async fn send_messages(
|
|||||||
log::debug!("daemon_messages is about to exit");
|
log::debug!("daemon_messages is about to exit");
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
*/
|
||||||
|
47
src/main.rs
47
src/main.rs
@ -6,15 +6,15 @@ pub mod utils;
|
|||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
|
|
||||||
pub use data::DaemonState;
|
pub use data::DaemonState;
|
||||||
use detee_shared::pb::daemon::brain_message;
|
use detee_shared::pb::brain::brain_message_app;
|
||||||
use detee_shared::pb::daemon::daemon_message;
|
use detee_shared::pb::brain::daemon_message_app;
|
||||||
use detee_shared::pb::daemon::BrainMessage;
|
use detee_shared::pb::brain::AppContract;
|
||||||
use detee_shared::pb::daemon::DaemonMessage;
|
use detee_shared::pb::brain::BrainMessageApp;
|
||||||
use detee_shared::pb::daemon::NewContainerRes;
|
use detee_shared::pb::brain::DaemonMessageApp;
|
||||||
use detee_shared::pb::shared::ContainerContracts;
|
use detee_shared::pb::brain::MappedPort;
|
||||||
|
use detee_shared::pb::brain::NewAppRes;
|
||||||
|
|
||||||
use detee_shared::pb::shared::MappedPort;
|
use detee_shared::types::brain::AppDeployConfig;
|
||||||
use detee_shared::types::shared::Container as ContainerConfig;
|
|
||||||
|
|
||||||
use tokio::sync::mpsc::Receiver;
|
use tokio::sync::mpsc::Receiver;
|
||||||
use tokio::sync::mpsc::Sender;
|
use tokio::sync::mpsc::Sender;
|
||||||
@ -44,14 +44,14 @@ impl Default for Config {
|
|||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct ContainerHandler {
|
pub struct ContainerHandler {
|
||||||
pub receiver: Receiver<BrainMessage>,
|
pub receiver: Receiver<BrainMessageApp>,
|
||||||
pub sender: Sender<DaemonMessage>,
|
pub sender: Sender<DaemonMessageApp>,
|
||||||
pub config: Config,
|
pub config: Config,
|
||||||
pub data: DaemonState,
|
pub data: DaemonState,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ContainerHandler {
|
impl ContainerHandler {
|
||||||
pub fn new(receiver: Receiver<BrainMessage>, sender: Sender<DaemonMessage>) -> Self {
|
pub fn new(receiver: Receiver<BrainMessageApp>, sender: Sender<DaemonMessageApp>) -> Self {
|
||||||
Self {
|
Self {
|
||||||
receiver,
|
receiver,
|
||||||
sender,
|
sender,
|
||||||
@ -60,17 +60,17 @@ impl ContainerHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn handle_contracts(&mut self, contracts: Vec<ContainerContracts>) {
|
fn handle_contracts(&mut self, contracts: Vec<AppContract>) {
|
||||||
dbg!(&contracts);
|
dbg!(&contracts);
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn run(mut self) {
|
async fn run(mut self) {
|
||||||
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::Msg::NewContainerReq(msg)) => {
|
Some(brain_message_app::Msg::NewAppReq(msg)) => {
|
||||||
self.handle_new_container_req(msg.into()).await;
|
self.handle_new_container_req(msg.into()).await;
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
Some(brain_message::Msg::DeleteContainer(msg)) => {
|
Some(brain_message::Msg::DeleteContainer(msg)) => {
|
||||||
let container_id = msg.uuid.unwrap_or_default();
|
let container_id = msg.uuid.unwrap_or_default();
|
||||||
self.handle_del_container_req(container_id).await;
|
self.handle_del_container_req(container_id).await;
|
||||||
@ -79,15 +79,20 @@ impl ContainerHandler {
|
|||||||
Some(brain_message::Msg::ListContainer(msg)) => {
|
Some(brain_message::Msg::ListContainer(msg)) => {
|
||||||
dbg!(&msg);
|
dbg!(&msg);
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
None => {
|
None => {
|
||||||
log::error!("Brain disconnected");
|
log::error!("Brain disconnected");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_ => {
|
||||||
|
todo!("wip")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn handle_new_container_req(&mut self, new_container_req: ContainerConfig) {
|
async fn handle_new_container_req(&mut self, new_container_req: AppDeployConfig) {
|
||||||
let container_uuid = new_container_req.uuid.clone();
|
let container_uuid = new_container_req.uuid.clone();
|
||||||
|
|
||||||
let unarchive_dir = match handle_package(
|
let unarchive_dir = match handle_package(
|
||||||
@ -98,8 +103,8 @@ impl ContainerHandler {
|
|||||||
{
|
{
|
||||||
Ok(unarchive_dir) => unarchive_dir,
|
Ok(unarchive_dir) => unarchive_dir,
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
let res = DaemonMessage {
|
let res = DaemonMessageApp {
|
||||||
msg: Some(daemon_message::Msg::NewContainerResp(NewContainerRes {
|
msg: Some(daemon_message_app::Msg::NewAppResp(NewAppRes {
|
||||||
uuid: new_container_req.uuid,
|
uuid: new_container_req.uuid,
|
||||||
status: "failed".to_string(),
|
status: "failed".to_string(),
|
||||||
error: e.to_string(),
|
error: e.to_string(),
|
||||||
@ -120,8 +125,8 @@ impl ContainerHandler {
|
|||||||
{
|
{
|
||||||
Ok(mapped_ports) => mapped_ports.into_iter().map(MappedPort::from).collect(),
|
Ok(mapped_ports) => mapped_ports.into_iter().map(MappedPort::from).collect(),
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
let res = DaemonMessage {
|
let res = DaemonMessageApp {
|
||||||
msg: Some(daemon_message::Msg::NewContainerResp(NewContainerRes {
|
msg: Some(daemon_message_app::Msg::NewAppResp(NewAppRes {
|
||||||
uuid: container_uuid,
|
uuid: container_uuid,
|
||||||
status: "failed".to_string(),
|
status: "failed".to_string(),
|
||||||
error: e.to_string(),
|
error: e.to_string(),
|
||||||
@ -135,8 +140,8 @@ impl ContainerHandler {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
let res = DaemonMessage {
|
let res = DaemonMessageApp {
|
||||||
msg: Some(daemon_message::Msg::NewContainerResp(NewContainerRes {
|
msg: Some(daemon_message_app::Msg::NewAppResp(NewAppRes {
|
||||||
uuid: container_uuid,
|
uuid: container_uuid,
|
||||||
status: "Success".to_string(),
|
status: "Success".to_string(),
|
||||||
error: "".to_string(),
|
error: "".to_string(),
|
||||||
|
Loading…
Reference in New Issue
Block a user