From 91a27460c7410f965b46f01921a37776b5a4637f Mon Sep 17 00:00:00 2001 From: Matthew Keeler Date: Wed, 12 Mar 2025 09:44:12 -0400 Subject: [PATCH] feat: Inline context for custom and migration op events --- contract-tests/service.rb | 2 +- lib/ldclient-rb/events.rb | 4 ++-- lib/ldclient-rb/impl/migrations/tracker.rb | 12 ++++++------ spec/events_spec.rb | 22 +++++++++++++++------- 4 files changed, 24 insertions(+), 16 deletions(-) diff --git a/contract-tests/service.rb b/contract-tests/service.rb index 077f0db0..dcea5a8a 100644 --- a/contract-tests/service.rb +++ b/contract-tests/service.rb @@ -40,7 +40,7 @@ 'event-sampling', 'context-comparison', 'polling-gzip', - 'inline-context', + 'inline-context-all', 'anonymous-redaction', 'evaluation-hooks', 'omit-anonymous-contexts', diff --git a/lib/ldclient-rb/events.rb b/lib/ldclient-rb/events.rb index bb787fbe..9ed44de1 100644 --- a/lib/ldclient-rb/events.rb +++ b/lib/ldclient-rb/events.rb @@ -508,7 +508,7 @@ def make_output_events(events, summary) out = { kind: MIGRATION_OP_KIND, creationDate: event.timestamp, - contextKeys: event.context.keys, + context: @context_filter.filter_redact_anonymous(event.context), operation: event.operation.to_s, evaluation: { key: event.key, @@ -577,7 +577,7 @@ def make_output_events(events, summary) key: event.key, } out[:data] = event.data unless event.data.nil? - out[:contextKeys] = event.context.keys + out[:context] = @context_filter.filter_redact_anonymous(event.context) out[:metricValue] = event.metric_value unless event.metric_value.nil? out diff --git a/lib/ldclient-rb/impl/migrations/tracker.rb b/lib/ldclient-rb/impl/migrations/tracker.rb index 546f4552..761d5ed2 100644 --- a/lib/ldclient-rb/impl/migrations/tracker.rb +++ b/lib/ldclient-rb/impl/migrations/tracker.rb @@ -9,12 +9,12 @@ class OpTracker include LaunchDarkly::Interfaces::Migrations::OpTracker # - # @param logger [Logger] logger - # @param key [string] key - # @param flag [LaunchDarkly::Impl::Model::FeatureFlag] flag - # @param context [LaunchDarkly::LDContext] context - # @param detail [LaunchDarkly::EvaluationDetail] detail - # @param default_stage [Symbol] default_stage + # @param logger [Logger] + # @param key [string] + # @param flag [LaunchDarkly::Impl::Model::FeatureFlag] + # @param context [LaunchDarkly::LDContext] + # @param detail [LaunchDarkly::EvaluationDetail] + # @param default_stage [Symbol] # def initialize(logger, key, flag, context, detail, default_stage) @logger = logger diff --git a/spec/events_spec.rb b/spec/events_spec.rb index dd10f07c..d5c50661 100644 --- a/spec/events_spec.rb +++ b/spec/events_spec.rb @@ -391,7 +391,7 @@ module LaunchDarkly output = flush_and_get_events(ep, sender) expect(output).to contain_exactly( eq(index_event(default_config, context)), - eq(custom_event(context, 'eventkey', { thing: 'stuff' }, 1.5)) + eq(custom_event(default_config, context, 'eventkey', { thing: 'stuff' }, 1.5)) ) end end @@ -404,7 +404,7 @@ module LaunchDarkly output = flush_and_get_events(ep, sender) expect(output).to contain_exactly( eq(index_event(config, context)), - eq(custom_event(context, 'eventkey', nil, nil)) + eq(custom_event(config, context, 'eventkey', nil, nil)) ) end end @@ -476,7 +476,7 @@ module LaunchDarkly output = flush_and_get_events(ep, sender) expect(output).to contain_exactly( - eq(migration_op_event(flag, context, 0, true, LaunchDarkly::Migrations::STAGE_OFF, reason, starting_timestamp+1)) + eq(migration_op_event(default_config, flag, context, 0, true, LaunchDarkly::Migrations::STAGE_OFF, reason, starting_timestamp+1)) ) end end @@ -786,6 +786,7 @@ def feature_event(config, flag, context, variation, value, timestamp = starting_ end # + # @param config [Config] # @param flag [LaunchDarkly::Impl::Models::FeatureFlag] # @param context [LDContext] # @param variation [Integer] @@ -795,12 +796,15 @@ def feature_event(config, flag, context, variation, value, timestamp = starting_ # @param timestamp [Integer] # @return [Hash] # - def migration_op_event(flag, context, variation, value, default, reason, timestamp = starting_timestamp) + def migration_op_event(config, flag, context, variation, value, default, reason, timestamp = starting_timestamp) + context_filter = Impl::ContextFilter.new(config.all_attributes_private, config.private_attributes) + redacted_context = context_filter.filter_redact_anonymous(context) + out = { kind: 'migration_op', operation: 'read', creationDate: timestamp, - contextKeys: context.keys, + context: redacted_context, evaluation: { default: default.to_s, key: flag.key, @@ -836,17 +840,21 @@ def debug_event(config, flag, context, variation, value, timestamp = starting_ti end # + # @param config [Config] # @param context [LDContext] # @param key [String] # @param data [any] # @param metric_value [any] # @return [Hash] # - def custom_event(context, key, data, metric_value) + def custom_event(config, context, key, data, metric_value) + context_filter = Impl::ContextFilter.new(config.all_attributes_private, config.private_attributes) + redacted_context = context_filter.filter_redact_anonymous(context) + out = { kind: "custom", creationDate: starting_timestamp, - contextKeys: context.keys, + context: redacted_context, key: key, } out[:data] = data unless data.nil?