From a304e9a6fa33ce30a1540a0d9a07a3387299d862 Mon Sep 17 00:00:00 2001 From: Raphael Date: Tue, 24 Feb 2026 12:08:44 +0100 Subject: [PATCH 1/6] feat: added impl of SagittariusRuntimeUsageClient --- src/sagittarius/mod.rs | 1 + src/sagittarius/runtime_usage_client_impl.rs | 56 ++++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 src/sagittarius/runtime_usage_client_impl.rs diff --git a/src/sagittarius/mod.rs b/src/sagittarius/mod.rs index 33405d3..64a2360 100644 --- a/src/sagittarius/mod.rs +++ b/src/sagittarius/mod.rs @@ -4,4 +4,5 @@ pub mod flow_service_client_impl; pub mod flow_type_service_client_impl; pub mod retry; pub mod runtime_function_service_client_impl; +pub mod runtime_usage_client_impl; pub mod test_execution_client_impl; diff --git a/src/sagittarius/runtime_usage_client_impl.rs b/src/sagittarius/runtime_usage_client_impl.rs new file mode 100644 index 0000000..5246cea --- /dev/null +++ b/src/sagittarius/runtime_usage_client_impl.rs @@ -0,0 +1,56 @@ +use std::sync::Arc; + +use tokio::sync::Mutex; +use tonic::{Extensions, Request, transport::Channel}; +use tucana::sagittarius::runtime_usage_service_client::RuntimeUsageServiceClient as SagittariusRuntimeUsageServiceClient; + +use crate::authorization::authorization::get_authorization_metadata; + +pub struct SagittariusRuntimeUsageClient { + client: SagittariusRuntimeUsageServiceClient, + token: String, +} + +impl SagittariusRuntimeUsageClient { + pub fn new(channel: Channel, token: String) -> Self { + let client = SagittariusRuntimeUsageServiceClient::new(channel); + Self { client, token } + } + + pub fn new_arc(channel: Channel, token: String) -> Arc> { + Arc::new(Mutex::new(Self::new(channel, token))) + } + + pub async fn update_runtime_usage( + &mut self, + runtime_usage_request: tucana::aquila::RuntimeUsageRequest, + ) -> tucana::aquila::RuntimeUsageResponse { + let request = Request::from_parts( + get_authorization_metadata(&self.token), + Extensions::new(), + tucana::sagittarius::RuntimeUsageRequest { + runtime_usage: runtime_usage_request.runtime_usage, + }, + ); + + let response = match self.client.update(request).await { + Ok(response) => { + log::info!("Successfully transferred Runtime Usages.",); + response.into_inner() + } + Err(err) => { + log::error!("Failed to update Runtime Usage: {:?}", err); + return tucana::aquila::RuntimeUsageResponse { success: false }; + } + }; + + match response.success { + true => log::info!("Sagittarius successfully updated RuntimeUsage."), + false => log::error!("Sagittarius didn't update RuntimeUsage."), + }; + + tucana::aquila::RuntimeUsageResponse { + success: response.success, + } + } +} From 9de94d63e8a0fe8be0bb9931f856e26ae6b8292f Mon Sep 17 00:00:00 2001 From: Raphael Date: Tue, 24 Feb 2026 12:08:59 +0100 Subject: [PATCH 2/6] feat: added implementation of RuntimeUsageServer --- src/server/mod.rs | 32 ++++++++++++++-- .../runtime_usage_service_server_impl.rs | 37 +++++++++++++++++++ 2 files changed, 65 insertions(+), 4 deletions(-) create mode 100644 src/server/runtime_usage_service_server_impl.rs diff --git a/src/server/mod.rs b/src/server/mod.rs index 2ba7f85..42496ab 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -4,7 +4,9 @@ use crate::{ data_type_service_client_impl::SagittariusDataTypeServiceClient, flow_type_service_client_impl::SagittariusFlowTypeServiceClient, runtime_function_service_client_impl::SagittariusRuntimeFunctionServiceClient, + runtime_usage_client_impl::SagittariusRuntimeUsageClient, }, + server::runtime_usage_service_server_impl::AquilaRuntimeUsageServiceServer, }; use data_type_service_server_impl::AquilaDataTypeServiceServer; use flow_type_service_server_impl::AquilaFlowTypeServiceServer; @@ -16,15 +18,20 @@ use tonic::{ Request, Status, transport::{Channel, Server}, }; -use tucana::aquila::{ - data_type_service_server::DataTypeServiceServer, - flow_type_service_server::FlowTypeServiceServer, - runtime_function_definition_service_server::RuntimeFunctionDefinitionServiceServer, +use tucana::{ + aquila::{ + data_type_service_server::DataTypeServiceServer, + flow_type_service_server::FlowTypeServiceServer, + runtime_function_definition_service_server::RuntimeFunctionDefinitionServiceServer, + runtime_usage_service_server::RuntimeUsageServiceServer, + }, + sagittarius::runtime_usage_service_client::RuntimeUsageServiceClient, }; mod data_type_service_server_impl; mod flow_type_service_server_impl; mod runtime_function_service_server_impl; +mod runtime_usage_service_server_impl; pub struct AquilaGRPCServer { token: String, @@ -75,10 +82,19 @@ impl AquilaGRPCServer { info!("RuntimeFunctionService started"); + let runtime_usage_service = Arc::new(Mutex::new(SagittariusRuntimeUsageClient::new( + self.channel.clone(), + self.token.clone(), + ))); + + info!("RuntimeUsageService started"); + let data_type_server = AquilaDataTypeServiceServer::new(data_type_service.clone()); let flow_type_server = AquilaFlowTypeServiceServer::new(flow_type_service.clone()); let runtime_function_server = AquilaRuntimeFunctionServiceServer::new(runtime_function_service.clone()); + let runtime_usage_server = + AquilaRuntimeUsageServiceServer::new(runtime_usage_service.clone()); info!("Starting gRPC Server..."); @@ -118,6 +134,10 @@ impl AquilaGRPCServer { runtime_function_server, intercept.clone(), )) + .add_service(RuntimeUsageServiceServer::with_interceptor( + runtime_usage_server, + intercept.clone(), + )) .serve(self.address) .await } else { @@ -134,6 +154,10 @@ impl AquilaGRPCServer { runtime_function_server, intercept.clone(), )) + .add_service(RuntimeUsageServiceServer::with_interceptor( + runtime_usage_server, + intercept.clone(), + )) .serve(self.address) .await } diff --git a/src/server/runtime_usage_service_server_impl.rs b/src/server/runtime_usage_service_server_impl.rs new file mode 100644 index 0000000..d1c4854 --- /dev/null +++ b/src/server/runtime_usage_service_server_impl.rs @@ -0,0 +1,37 @@ +use std::sync::Arc; + +use tokio::sync::Mutex; +use tucana::aquila::runtime_usage_service_server::RuntimeUsageService; + +use crate::sagittarius::runtime_usage_client_impl::SagittariusRuntimeUsageClient; + +pub struct AquilaRuntimeUsageServiceServer { + client: Arc>, +} + +impl AquilaRuntimeUsageServiceServer { + pub fn new(client: Arc>) -> Self { + Self { client } + } +} + +#[tonic::async_trait] +impl RuntimeUsageService for AquilaRuntimeUsageServiceServer { + async fn update( + &self, + request: tonic::Request, + ) -> Result, tonic::Status> { + let runtime_function_definition_update_request = request.into_inner(); + + log::debug!("Received RuntimeUsageRequest",); + + let mut client = self.client.lock().await; + let response = client + .update_runtime_usage(runtime_function_definition_update_request) + .await; + + Ok(tonic::Response::new(tucana::aquila::RuntimeUsageResponse { + success: response.success, + })) + } +} From f81a2350da3539af4916e345844808dae3d88e46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Raphael=20G=C3=B6tz?= <52959657+raphael-goetz@users.noreply.github.com> Date: Tue, 24 Feb 2026 14:17:13 +0100 Subject: [PATCH 3/6] Update src/server/mod.rs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Signed-off-by: Raphael Götz <52959657+raphael-goetz@users.noreply.github.com> --- src/server/mod.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/server/mod.rs b/src/server/mod.rs index 42496ab..8c428f9 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -25,7 +25,6 @@ use tucana::{ runtime_function_definition_service_server::RuntimeFunctionDefinitionServiceServer, runtime_usage_service_server::RuntimeUsageServiceServer, }, - sagittarius::runtime_usage_service_client::RuntimeUsageServiceClient, }; mod data_type_service_server_impl; From f1c27fb8faf62172f71ac6cba8c7f81d8a3eab32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Raphael=20G=C3=B6tz?= <52959657+raphael-goetz@users.noreply.github.com> Date: Tue, 24 Feb 2026 14:17:38 +0100 Subject: [PATCH 4/6] Update src/server/runtime_usage_service_server_impl.rs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Signed-off-by: Raphael Götz <52959657+raphael-goetz@users.noreply.github.com> --- src/server/runtime_usage_service_server_impl.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server/runtime_usage_service_server_impl.rs b/src/server/runtime_usage_service_server_impl.rs index d1c4854..a9422ac 100644 --- a/src/server/runtime_usage_service_server_impl.rs +++ b/src/server/runtime_usage_service_server_impl.rs @@ -21,13 +21,13 @@ impl RuntimeUsageService for AquilaRuntimeUsageServiceServer { &self, request: tonic::Request, ) -> Result, tonic::Status> { - let runtime_function_definition_update_request = request.into_inner(); + let runtime_usage_request = request.into_inner(); log::debug!("Received RuntimeUsageRequest",); let mut client = self.client.lock().await; let response = client - .update_runtime_usage(runtime_function_definition_update_request) + .update_runtime_usage(runtime_usage_request) .await; Ok(tonic::Response::new(tucana::aquila::RuntimeUsageResponse { From b92f9a213a9cbe8c6d580eeb7b4ed04a0e5c022a Mon Sep 17 00:00:00 2001 From: Raphael Date: Thu, 26 Feb 2026 13:34:23 +0100 Subject: [PATCH 5/6] fix: correct input path --- src/server/mod.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/server/mod.rs b/src/server/mod.rs index 3534779..7420633 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -1,15 +1,14 @@ use crate::{ configuration::{Config, state::AppReadiness}, + sagittarius::runtime_status_service_client_impl::SagittariusRuntimeStatusServiceClient, sagittarius::{ data_type_service_client_impl::SagittariusDataTypeServiceClient, flow_type_service_client_impl::SagittariusFlowTypeServiceClient, runtime_function_service_client_impl::SagittariusRuntimeFunctionServiceClient, runtime_usage_client_impl::SagittariusRuntimeUsageClient, }, - server::runtime_usage_service_server_impl::AquilaRuntimeUsageServiceServer, - runtime_status_service_client_impl::SagittariusRuntimeStatusServiceClient, - }, server::runtime_status_service_server_impl::AquilaRuntimeStatusServiceServer, + server::runtime_usage_service_server_impl::AquilaRuntimeUsageServiceServer, }; use data_type_service_server_impl::AquilaDataTypeServiceServer; use flow_type_service_server_impl::AquilaFlowTypeServiceServer; From 282db011c5d9169951652c79f5ccb6ad0d9ddd80 Mon Sep 17 00:00:00 2001 From: Raphael Date: Thu, 26 Feb 2026 13:39:19 +0100 Subject: [PATCH 6/6] fix: missing delimiter --- src/server/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/mod.rs b/src/server/mod.rs index 35fe149..a36c9c1 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -4,7 +4,7 @@ use crate::{ data_type_service_client_impl::SagittariusDataTypeServiceClient, flow_type_service_client_impl::SagittariusFlowTypeServiceClient, runtime_function_service_client_impl::SagittariusRuntimeFunctionServiceClient, - runtime_status_service_client_impl::SagittariusRuntimeStatusServiceClient + runtime_status_service_client_impl::SagittariusRuntimeStatusServiceClient, runtime_usage_client_impl::SagittariusRuntimeUsageClient, }, server::runtime_status_service_server_impl::AquilaRuntimeStatusServiceServer,