diff --git a/Split/Localhost/LocalhostSynchronizer.swift b/Split/Localhost/LocalhostSynchronizer.swift index 0081bf272..714a65281 100644 --- a/Split/Localhost/LocalhostSynchronizer.swift +++ b/Split/Localhost/LocalhostSynchronizer.swift @@ -44,7 +44,7 @@ class LocalhostSynchronizer: FeatureFlagsSynchronizer { func notifyKilled() { } - func notifyUpdated() { + func notifyUpdated(flagsList: [String]) { } func pause() { @@ -74,7 +74,9 @@ class LocalhostSynchronizer: FeatureFlagsSynchronizer { // Update will remove all records before insert new ones _ = self.featureFlagsStorage.update(splitChange: change) - self.eventsManager.notifyInternalEvent(.splitsUpdated) + // Notify event + let metadata = EventMetadata(type: .FLAGS_UPDATED, data: featureFlags.values.description) + self.eventsManager.notifyInternalEvent(.splitsUpdated, metadata: metadata) } } } diff --git a/Split/Network/Streaming/SyncUpdateWorker.swift b/Split/Network/Streaming/SyncUpdateWorker.swift index 5aede0758..112724640 100644 --- a/Split/Network/Streaming/SyncUpdateWorker.swift +++ b/Split/Network/Streaming/SyncUpdateWorker.swift @@ -143,8 +143,12 @@ class SplitsUpdateWorker: UpdateWorker { Logger.v("Split update received: \(change)") - if self.splitsStorage.update(splitChange: self.splitChangeProcessor.process(change)) { - self.synchronizer.notifyFeatureFlagsUpdated() + let processedFlags = self.splitChangeProcessor.process(change) + + if self.splitsStorage.update(splitChange: processedFlags) { + var updatedFlags: [String] = processedFlags.activeSplits.compactMap(\.name) + updatedFlags += processedFlags.archivedSplits.compactMap(\.name) + self.synchronizer.notifyFeatureFlagsUpdated(flagsList: updatedFlags) } self.telemetryProducer?.recordUpdatesFromSse(type: .splits) @@ -161,9 +165,9 @@ class SplitsUpdateWorker: UpdateWorker { previousChangeNumber: Int64, changeNumber: Int64) -> Bool { do { - let rbs = try self.ruleBasedSegmentsPayloadDecoder.decode( + let rbs = try ruleBasedSegmentsPayloadDecoder.decode( payload: payload, - compressionUtil: self.decomProvider.decompressor(for: compressionType)) + compressionUtil: decomProvider.decompressor(for: compressionType)) let change = RuleBasedSegmentChange(segments: [rbs], since: previousChangeNumber, @@ -173,13 +177,13 @@ class SplitsUpdateWorker: UpdateWorker { let processedChange = ruleBasedSegmentsChangeProcessor.process(change) - if self.ruleBasedSegmentsStorage.update(toAdd: processedChange.toAdd, + if ruleBasedSegmentsStorage.update(toAdd: processedChange.toAdd, toRemove: processedChange.toRemove, changeNumber: processedChange.changeNumber) { - self.synchronizer.notifyFeatureFlagsUpdated() + synchronizer.notifyFeatureFlagsUpdated(flagsList: []) //TODO: Notify segments updated (new notification method?) } - self.telemetryProducer?.recordUpdatesFromSse(type: .splits) + telemetryProducer?.recordUpdatesFromSse(type: .splits) return true } catch { Logger.e("Error decoding rule based segments payload from notification: \(error)") diff --git a/Split/Network/Sync/FeatureFlagsSynchronizer.swift b/Split/Network/Sync/FeatureFlagsSynchronizer.swift index 5434c865a..314dc9ade 100644 --- a/Split/Network/Sync/FeatureFlagsSynchronizer.swift +++ b/Split/Network/Sync/FeatureFlagsSynchronizer.swift @@ -15,7 +15,7 @@ protocol FeatureFlagsSynchronizer { func startPeriodicSync() func stopPeriodicSync() func notifyKilled() - func notifyUpdated() + func notifyUpdated(flagsList: [String]) func pause() func resume() func destroy() @@ -148,8 +148,9 @@ class DefaultFeatureFlagsSynchronizer: FeatureFlagsSynchronizer { splitEventsManager.notifyInternalEvent(.splitKilledNotification) } - func notifyUpdated() { - splitEventsManager.notifyInternalEvent(.splitsUpdated) + func notifyUpdated(flagsList: [String]) { + let eventMetadata = EventMetadata(type: .FLAGS_UPDATED, data: flagsList.description) + splitEventsManager.notifyInternalEvent(.splitsUpdated, metadata: eventMetadata) } func pause() { diff --git a/Split/Network/Sync/Synchronizer.swift b/Split/Network/Sync/Synchronizer.swift index d3155a193..ec789a033 100644 --- a/Split/Network/Sync/Synchronizer.swift +++ b/Split/Network/Sync/Synchronizer.swift @@ -30,7 +30,7 @@ protocol Synchronizer: ImpressionLogger { func startRecordingTelemetry() func stopRecordingTelemetry() func pushEvent(event: EventDTO) - func notifyFeatureFlagsUpdated() + func notifyFeatureFlagsUpdated(flagsList: [String]) func notifySegmentsUpdated(forKey key: String) func notifyLargeSegmentsUpdated(forKey key: String) func notifySplitKilled() @@ -207,8 +207,8 @@ class DefaultSynchronizer: Synchronizer { } } - func notifyFeatureFlagsUpdated() { - featureFlagsSynchronizer.notifyUpdated() + func notifyFeatureFlagsUpdated(flagsList: [String]) { + featureFlagsSynchronizer.notifyUpdated(flagsList: flagsList) } func notifySegmentsUpdated(forKey key: String) { diff --git a/SplitTests/Fake/Streaming/FeatureFlagsSynchronizerStub.swift b/SplitTests/Fake/Streaming/FeatureFlagsSynchronizerStub.swift index 8e01f5f8e..7059a1815 100644 --- a/SplitTests/Fake/Streaming/FeatureFlagsSynchronizerStub.swift +++ b/SplitTests/Fake/Streaming/FeatureFlagsSynchronizerStub.swift @@ -40,8 +40,10 @@ class FeatureFlagsSynchronizerStub: FeatureFlagsSynchronizer { } var notifyUpdatedCalled = false - func notifyUpdated() { + var updatedFlagsList = [String]() + func notifyUpdated(flagsList: [String]) { notifyUpdatedCalled = true + updatedFlagsList = flagsList } var pauseCalled = false diff --git a/SplitTests/Fake/Streaming/SynchronizerSpy.swift b/SplitTests/Fake/Streaming/SynchronizerSpy.swift index fb6e59353..859b79ddc 100644 --- a/SplitTests/Fake/Streaming/SynchronizerSpy.swift +++ b/SplitTests/Fake/Streaming/SynchronizerSpy.swift @@ -206,8 +206,10 @@ class SynchronizerSpy: Synchronizer { } var notifyFeatureFlagsUpdatedCalled = false - func notifyFeatureFlagsUpdated() { + var updatedFlagsList = [String]() + func notifyFeatureFlagsUpdated(flagsList: [String]) { notifyFeatureFlagsUpdatedCalled = true + updatedFlagsList = flagsList } func notifySplitKilled() { diff --git a/SplitTests/Fake/Streaming/SynchronizerStub.swift b/SplitTests/Fake/Streaming/SynchronizerStub.swift index 4bcdba666..d4c96f1f6 100644 --- a/SplitTests/Fake/Streaming/SynchronizerStub.swift +++ b/SplitTests/Fake/Streaming/SynchronizerStub.swift @@ -237,8 +237,10 @@ class SynchronizerStub: Synchronizer { } var notifyFeatureFlagsUpdatedCalled = true - func notifyFeatureFlagsUpdated() { + var updatedFlagsList = [String]() + func notifyFeatureFlagsUpdated(flagsList: [String]) { notifyFeatureFlagsUpdatedCalled = true + updatedFlagsList = flagsList } func notifySplitKilled() {