diff --git a/Cargo.lock b/Cargo.lock index ebd16c2bc1..18ff5e79c3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1567,6 +1567,7 @@ version = "0.0.1" dependencies = [ "anyhow", "base64 0.22.1", + "datadog-ffe", "datadog-live-debugger", "datadog-remote-config", "futures", diff --git a/datadog-remote-config/Cargo.toml b/datadog-remote-config/Cargo.toml index 085fb46f2e..182702363e 100644 --- a/datadog-remote-config/Cargo.toml +++ b/datadog-remote-config/Cargo.toml @@ -23,6 +23,7 @@ client = [ "tracing" ] live-debugger = ["datadog-live-debugger"] +ffe = ["datadog-ffe"] test = ["hyper/server", "hyper-util"] [dependencies] @@ -30,6 +31,7 @@ anyhow = { version = "1.0" } libdd-common = { path = "../libdd-common"} libdd-trace-protobuf = { path = "../libdd-trace-protobuf", optional = true } datadog-live-debugger = { path = "../datadog-live-debugger", optional = true } +datadog-ffe = { path = "../datadog-ffe", optional = true } hyper = { workspace = true, optional = true } http-body-util = {version = "0.1", optional = true } http = { version = "1.0", optional = true } diff --git a/datadog-remote-config/src/lib.rs b/datadog-remote-config/src/lib.rs index 8f2e30119a..f47c4a4b1d 100644 --- a/datadog-remote-config/src/lib.rs +++ b/datadog-remote-config/src/lib.rs @@ -81,4 +81,5 @@ pub enum RemoteConfigCapabilities { ApmTracingEnableLiveDebugging = 41, AsmDdMulticonfig = 42, AsmTraceTaggingRules = 43, + FfeFlagConfigurationRules = 46, } diff --git a/datadog-remote-config/src/parse.rs b/datadog-remote-config/src/parse.rs index 859df1a19a..6ba43167ed 100644 --- a/datadog-remote-config/src/parse.rs +++ b/datadog-remote-config/src/parse.rs @@ -7,6 +7,8 @@ use crate::{ }, RemoteConfigPath, RemoteConfigProduct, RemoteConfigSource, }; +#[cfg(feature = "ffe")] +use datadog_ffe::rules_based::UniversalFlagConfig; #[cfg(feature = "live-debugger")] use datadog_live_debugger::LiveDebuggingData; @@ -17,6 +19,8 @@ pub enum RemoteConfigData { LiveDebugger(LiveDebuggingData), TracerFlareConfig(AgentConfigFile), TracerFlareTask(AgentTaskFile), + #[cfg(feature = "ffe")] + FfeFlags(UniversalFlagConfig), Ignored(RemoteConfigProduct), } @@ -40,6 +44,10 @@ impl RemoteConfigData { let parsed = datadog_live_debugger::parse_json(&String::from_utf8_lossy(data))?; RemoteConfigData::LiveDebugger(parsed) } + #[cfg(feature = "ffe")] + RemoteConfigProduct::FfeFlags => { + RemoteConfigData::FfeFlags(UniversalFlagConfig::from_json(data.to_vec())?) + } _ => RemoteConfigData::Ignored(product), }) } @@ -53,6 +61,8 @@ impl From<&RemoteConfigData> for RemoteConfigProduct { RemoteConfigData::LiveDebugger(_) => RemoteConfigProduct::LiveDebugger, RemoteConfigData::TracerFlareConfig(_) => RemoteConfigProduct::AgentConfig, RemoteConfigData::TracerFlareTask(_) => RemoteConfigProduct::AgentTask, + #[cfg(feature = "ffe")] + RemoteConfigData::FfeFlags(_) => RemoteConfigProduct::FfeFlags, RemoteConfigData::Ignored(product) => *product, } } diff --git a/datadog-remote-config/src/path.rs b/datadog-remote-config/src/path.rs index 74bb80a8c1..35bcae8f29 100644 --- a/datadog-remote-config/src/path.rs +++ b/datadog-remote-config/src/path.rs @@ -23,6 +23,7 @@ pub enum RemoteConfigProduct { AsmData, AsmDD, AsmFeatures, + FfeFlags, #[cfg(feature = "live-debugger")] LiveDebugger, } @@ -37,6 +38,7 @@ impl Display for RemoteConfigProduct { RemoteConfigProduct::AsmData => "ASM_DATA", RemoteConfigProduct::AsmDD => "ASM_DD", RemoteConfigProduct::AsmFeatures => "ASM_FEATURES", + RemoteConfigProduct::FfeFlags => "FFE_FLAGS", #[cfg(feature = "live-debugger")] RemoteConfigProduct::LiveDebugger => "LIVE_DEBUGGING", }; @@ -87,6 +89,7 @@ impl RemoteConfigPath { "ASM_DATA" => RemoteConfigProduct::AsmData, "ASM_DD" => RemoteConfigProduct::AsmDD, "ASM_FEATURES" => RemoteConfigProduct::AsmFeatures, + "FFE_FLAGS" => RemoteConfigProduct::FfeFlags, #[cfg(feature = "live-debugger")] "LIVE_DEBUGGING" => RemoteConfigProduct::LiveDebugger, product => anyhow::bail!("Unknown product {}", product),