From 5d321f81d7793cd667703fe35ad6172730124e2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20Arg=C3=A9rus?= Date: Thu, 15 Feb 2024 23:10:45 +0100 Subject: [PATCH] Disable sdv.databroker.v1 by default - Disable sdv.databroker.v1 by default. It can be enabled by supplying a flag at startup. - Change databroker-cli to use kuksa.val.v1 by default. --- kuksa_databroker/databroker-cli/src/cli.rs | 10 +++-- .../databroker-cli/src/kuksa_cli.rs | 8 ++-- kuksa_databroker/databroker-cli/src/main.rs | 8 ++-- .../databroker-cli/src/sdv_cli.rs | 8 ++-- .../databroker/src/grpc/server.rs | 45 ++++++++++++++----- kuksa_databroker/databroker/src/main.rs | 14 ++++++ .../databroker/tests/world/mod.rs | 1 + 7 files changed, 66 insertions(+), 28 deletions(-) diff --git a/kuksa_databroker/databroker-cli/src/cli.rs b/kuksa_databroker/databroker-cli/src/cli.rs index fc26fc45..812656f5 100644 --- a/kuksa_databroker/databroker-cli/src/cli.rs +++ b/kuksa_databroker/databroker-cli/src/cli.rs @@ -52,8 +52,8 @@ pub struct Cli { ca_cert: Option, #[arg(value_enum)] - #[clap(long, short = 'p', value_enum, default_value = "sdv-databroker-v1")] - protocol: CliAPI, + #[clap(long, short = 'p', value_enum, default_value_t = Protocol::KuksaValV1)] + protocol: Protocol, // Sub command #[clap(subcommand)] @@ -77,7 +77,7 @@ impl Cli { self.server.clone() } - pub fn get_protocol(&mut self) -> CliAPI { + pub fn get_protocol(&mut self) -> Protocol { self.protocol } } @@ -93,8 +93,10 @@ pub enum Commands { } #[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, ValueEnum)] -pub enum CliAPI { +pub enum Protocol { + #[clap(name = "kuksa.val.v1")] KuksaValV1 = 1, + #[clap(name = "sdv.databroker.v1")] SdvDatabrokerV1 = 2, } diff --git a/kuksa_databroker/databroker-cli/src/kuksa_cli.rs b/kuksa_databroker/databroker-cli/src/kuksa_cli.rs index a3987f06..a52fff50 100644 --- a/kuksa_databroker/databroker-cli/src/kuksa_cli.rs +++ b/kuksa_databroker/databroker-cli/src/kuksa_cli.rs @@ -42,7 +42,7 @@ const CLI_COMMANDS: &[(&str, &str, &str)] = &[ "", "Subscribe to signals with QUERY, if you use kuksa feature comma separated list", ), - ("feed", " ", "Publish signal value"), + ("publish", " ", "Publish signal value"), ( "metadata", "[PATTERN]", @@ -369,7 +369,7 @@ pub async fn kuksa_main(_cli: Cli) -> Result<(), Box> { format!("{} is not an actuator.", path), )?; cli::print_info( - "If you want to provide the signal value, use `feed`.", + "If you want to act as a provider and publish a value, use `publish`.", )?; continue; } @@ -402,7 +402,7 @@ pub async fn kuksa_main(_cli: Cli) -> Result<(), Box> { } } } - "feed" => { + "publish" => { interface.add_history_unique(line.clone()); let (path, value) = cli::split_first_word(args); @@ -902,7 +902,7 @@ impl Completer for CliCompleter { Some(compls) } // Complete command parameters - Some("set") | Some("feed") => { + Some("set") | Some("publish") => { if words.count() == 0 { self.complete_entry_path(word) } else { diff --git a/kuksa_databroker/databroker-cli/src/main.rs b/kuksa_databroker/databroker-cli/src/main.rs index 2ac1a83f..e0280ddc 100644 --- a/kuksa_databroker/databroker-cli/src/main.rs +++ b/kuksa_databroker/databroker-cli/src/main.rs @@ -12,7 +12,7 @@ ********************************************************************************/ use clap::Parser; -use cli::CliAPI; +use cli::Protocol; pub mod cli; mod kuksa_cli; @@ -21,19 +21,19 @@ mod sdv_cli; #[tokio::main] async fn main() { let mut cli = cli::Cli::parse(); - if cli.get_protocol() == CliAPI::SdvDatabrokerV1 { + if cli.get_protocol() == Protocol::SdvDatabrokerV1 { let err = sdv_cli::sdv_main(cli.clone()).await; match err { Ok(_) => (), Err(e) => eprintln!("Error: {}", e), } - } else if cli.get_protocol() == CliAPI::KuksaValV1 { + } else if cli.get_protocol() == Protocol::KuksaValV1 { let err = kuksa_cli::kuksa_main(cli.clone()).await; match err { Ok(_) => (), Err(e) => eprintln!("Error: {}", e), } } else { - println!("Choose one protocol of either kuksa-val-v1 or sdv-databroker-v1") + println!("Choose one protocol of either kuksa.val.v1 or sdv.databroker.v1") } } diff --git a/kuksa_databroker/databroker-cli/src/sdv_cli.rs b/kuksa_databroker/databroker-cli/src/sdv_cli.rs index 179a0556..08ae0438 100644 --- a/kuksa_databroker/databroker-cli/src/sdv_cli.rs +++ b/kuksa_databroker/databroker-cli/src/sdv_cli.rs @@ -42,7 +42,7 @@ const CLI_COMMANDS: &[(&str, &str, &str)] = &[ "", "Subscribe to signals with QUERY, if you use kuksa feature comma separated list", ), - ("feed", " ", "Publish signal value"), + ("publish", " ", "Publish signal value"), ( "metadata", "[PATTERN]", @@ -352,7 +352,7 @@ pub async fn sdv_main(_cli: Cli) -> Result<(), Box> { format!("{} is not an actuator.", metadata.name), )?; cli::print_info( - "If you want to provide the signal value, use `feed`.", + "If you want to act as a provider and publish a value, use `publish`.", )?; continue; } @@ -404,7 +404,7 @@ pub async fn sdv_main(_cli: Cli) -> Result<(), Box> { } } } - "feed" => { + "publish" => { interface.add_history_unique(line.clone()); let (path, value) = cli::split_first_word(args); @@ -916,7 +916,7 @@ impl Completer for CliCompleter { Some(compls) } // Complete command parameters - Some("set") | Some("feed") => { + Some("set") | Some("publish") => { if words.count() == 0 { self.complete_entry_path(word) } else { diff --git a/kuksa_databroker/databroker/src/grpc/server.rs b/kuksa_databroker/databroker/src/grpc/server.rs index f163956e..8a3d1266 100644 --- a/kuksa_databroker/databroker/src/grpc/server.rs +++ b/kuksa_databroker/databroker/src/grpc/server.rs @@ -34,6 +34,12 @@ pub enum ServerTLS { Enabled { tls_config: ServerTlsConfig }, } +#[derive(PartialEq)] +pub enum Api { + KuksaValV1, + SdvDatabrokerV1, +} + impl tonic::service::Interceptor for Authorization { fn call( &mut self, @@ -93,6 +99,7 @@ pub async fn serve( addr: impl Into, broker: broker::DataBroker, #[cfg(feature = "tls")] server_tls: ServerTLS, + apis: &[Api], authorization: Authorization, signal: F, ) -> Result<(), Box> @@ -106,6 +113,7 @@ where broker, #[cfg(feature = "tls")] server_tls, + apis, authorization, signal, ) @@ -116,6 +124,7 @@ pub async fn serve_with_incoming_shutdown( listener: TcpListener, broker: broker::DataBroker, #[cfg(feature = "tls")] server_tls: ServerTLS, + apis: &[Api], authorization: Authorization, signal: F, ) -> Result<(), Box> @@ -128,7 +137,7 @@ where } let incoming = TcpListenerStream::new(listener); - let mut builder = Server::builder() + let mut server = Server::builder() .http2_keepalive_interval(Some(Duration::from_secs(10))) .http2_keepalive_timeout(Some(Duration::from_secs(20))); @@ -136,7 +145,7 @@ where match server_tls { ServerTLS::Enabled { tls_config } => { info!("Using TLS"); - builder = builder.tls_config(tls_config)?; + server = server.tls_config(tls_config)?; } ServerTLS::Disabled => { info!("TLS is not enabled") @@ -147,23 +156,35 @@ where info!("Authorization is not enabled."); } - builder - .add_service( + let kuksa_val_v1 = { + if apis.contains(&Api::KuksaValV1) { + Some(kuksa::val::v1::val_server::ValServer::with_interceptor( + broker.clone(), + authorization.clone(), + )) + } else { + None + } + }; + + let mut router = server.add_optional_service(kuksa_val_v1); + + if apis.contains(&Api::SdvDatabrokerV1) { + router = router.add_optional_service(Some( sdv::databroker::v1::broker_server::BrokerServer::with_interceptor( broker.clone(), authorization.clone(), ), - ) - .add_service( + )); + router = router.add_optional_service(Some( sdv::databroker::v1::collector_server::CollectorServer::with_interceptor( broker.clone(), - authorization.clone(), + authorization, ), - ) - .add_service(kuksa::val::v1::val_server::ValServer::with_interceptor( - broker.clone(), - authorization, - )) + )); + } + + router .serve_with_incoming_shutdown(incoming, shutdown(broker, signal)) .await?; diff --git a/kuksa_databroker/databroker/src/main.rs b/kuksa_databroker/databroker/src/main.rs index 5bf8c9f5..0fd769be 100644 --- a/kuksa_databroker/databroker/src/main.rs +++ b/kuksa_databroker/databroker/src/main.rs @@ -244,6 +244,13 @@ async fn main() -> Result<(), Box> { .long("disable-authorization") .help("Disable authorization") .action(ArgAction::SetTrue), + ) + .arg( + Arg::new("enable-databroker-v1") + .display_order(30) + .long("enable-databroker-v1") + .help("Enable sdv.databroker.v1 (GRPC) service") + .action(ArgAction::SetTrue), ); #[cfg(feature = "tls")] @@ -437,11 +444,18 @@ async fn main() -> Result<(), Box> { } } + let mut apis = vec![grpc::server::Api::KuksaValV1]; + + if args.get_flag("enable-databroker-v1") { + apis.push(grpc::server::Api::SdvDatabrokerV1); + } + grpc::server::serve( addr, broker, #[cfg(feature = "tls")] tls_config, + &apis, authorization, shutdown_handler(), ) diff --git a/kuksa_databroker/databroker/tests/world/mod.rs b/kuksa_databroker/databroker/tests/world/mod.rs index 798a142f..ed8ebec6 100644 --- a/kuksa_databroker/databroker/tests/world/mod.rs +++ b/kuksa_databroker/databroker/tests/world/mod.rs @@ -232,6 +232,7 @@ impl DataBrokerWorld { data_broker, #[cfg(feature = "tls")] CERTS.server_tls_config(), + &[grpc::server::Api::KuksaValV1], _authorization, poll_fn(|cx| { let mut state = owned_state