Skip to content

Commit d9a7843

Browse files
authored
Merge pull request #322 from splitio/sdk-events-metadata
updated metadata with Sdk event type
2 parents a6df6cf + f781b25 commit d9a7843

19 files changed

Lines changed: 76 additions & 179 deletions

src/Splitio/Constants/Constants.cs

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -61,11 +61,4 @@ public static class ApiVersions
6161
public static string Spec1_1 => "1.1";
6262
public static string LatestFlagsSpec => "1.3";
6363
}
64-
65-
public static class EventMetadataKeys
66-
{
67-
public static string Flags => "flags";
68-
public static string Segments => "segments";
69-
public static string RuleBasedSegments => "ruleBasedSegments";
70-
}
7164
}

src/Splitio/Domain/EventMetadata.cs

Lines changed: 7 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -6,44 +6,17 @@ namespace Splitio.Domain
66
{
77
public class EventMetadata
88
{
9-
private readonly Dictionary<string, object> _data;
9+
private List<string> _names;
10+
private SdkEventType _type;
1011

11-
public EventMetadata(Dictionary<string, object> data)
12+
public EventMetadata(SdkEventType type, List<string> names)
1213
{
13-
_data = Santize(data);
14+
_type = type;
15+
_names = names;
1416
}
1517

16-
public Dictionary<string, object> GetData() { return _data; }
17-
18-
public List<string> GetKeys() { return _data.Keys.ToList(); }
19-
20-
public List<object> GetValues() { return _data.Values.ToList(); }
21-
22-
public bool ContainKey(string key)
23-
{
24-
return _data.ContainsKey(key);
25-
}
26-
27-
private static Dictionary<string, object> Santize(Dictionary<string, object> data)
28-
{
29-
Dictionary<string, object> santizedData = new Dictionary<string, object>();
30-
foreach (var item in data.Where(x => ValueIsValid(x.Value)))
31-
{
32-
santizedData.Add(item.Key, item.Value);
33-
}
34-
35-
return santizedData;
36-
}
37-
38-
private static bool ValueIsValid(object value)
39-
{
40-
if (!(value is null) && (PropertiesValidator.IsNumeric(value) || (value is bool) || (value is string) || (value is List<string>)))
41-
{
42-
return true;
43-
}
44-
45-
return false;
46-
}
18+
public List<string> GetNames() { return _names; }
4719

20+
public SdkEventType GetEventType() { return _type; }
4821
}
4922
}

src/Splitio/Domain/SdkEventType.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+

2+
namespace Splitio.Domain
3+
{
4+
public enum SdkEventType
5+
{
6+
SegmentsUpdate,
7+
FlagsUpdate
8+
}
9+
}

src/Splitio/Services/Cache/Classes/InMemoryReadinessGatesCache.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
using Splitio.Domain;
22
using Splitio.Services.Cache.Interfaces;
33
using Splitio.Services.Common;
4-
using System.Collections.Generic;
54
using System.Threading;
65

76
namespace Splitio.Services.Client.Classes
@@ -30,8 +29,7 @@ public bool WaitUntilReady(int milliseconds)
3029
public void SetReady()
3130
{
3231
_sdkReady.Signal();
33-
_eventsManager.NotifyInternalEvent(SdkInternalEvent.SdkReady,
34-
new EventMetadata(new Dictionary<string, object>()));
32+
_eventsManager.NotifyInternalEvent(SdkInternalEvent.SdkReady, null);
3533
}
3634

3735
public void SetDestroy()

src/Splitio/Services/Cache/Classes/InMemoryRuleBasedSegmentCache.cs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
using Splitio.Constants;
2-
using Splitio.Domain;
1+
using Splitio.Domain;
32
using Splitio.Services.Cache.Interfaces;
43
using Splitio.Services.Common;
54
using System.Collections.Concurrent;
@@ -50,22 +49,19 @@ public long GetChangeNumber()
5049
// Producer
5150
public void Update(List<RuleBasedSegment> toAdd, List<string> toRemove, long till)
5251
{
53-
List<string> toNotify = new List<string>();
5452
foreach (var rbSegment in toAdd)
5553
{
5654
_cache.AddOrUpdate(rbSegment.Name, rbSegment, (key, oldValue) => rbSegment);
57-
toNotify.Add(rbSegment.Name);
5855
}
5956

6057
foreach (var name in toRemove)
6158
{
6259
_cache.TryRemove(name, out var _);
63-
toNotify.Add(name);
6460
}
6561

6662
SetChangeNumber(till);
6763
_eventsManager.NotifyInternalEvent(SdkInternalEvent.RuleBasedSegmentsUpdated,
68-
new EventMetadata(new Dictionary<string, object> { { EventMetadataKeys.RuleBasedSegments, toNotify } }));
64+
new EventMetadata(SdkEventType.SegmentsUpdate, new List<string>()));
6965
}
7066

7167
public void SetChangeNumber(long changeNumber)

src/Splitio/Services/Cache/Classes/InMemorySegmentCache.cs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
using Splitio.Constants;
2-
using Splitio.Domain;
1+
using Splitio.Domain;
32
using Splitio.Services.Cache.Interfaces;
43
using Splitio.Services.Common;
54
using Splitio.Services.Logger;
@@ -36,7 +35,7 @@ public void AddToSegment(string segmentName, List<string> segmentKeys)
3635

3736
segment.AddKeys(segmentKeys);
3837
_eventsManager.NotifyInternalEvent(SdkInternalEvent.SegmentsUpdated,
39-
new EventMetadata(new Dictionary<string, object> { { EventMetadataKeys.Segments, segmentName } }));
38+
new EventMetadata(SdkEventType.SegmentsUpdate, new List<string>()));
4039
}
4140

4241
public void RemoveFromSegment(string segmentName, List<string> segmentKeys)
@@ -45,7 +44,7 @@ public void RemoveFromSegment(string segmentName, List<string> segmentKeys)
4544
{
4645
segment.RemoveKeys(segmentKeys);
4746
_eventsManager.NotifyInternalEvent(SdkInternalEvent.SegmentsUpdated,
48-
new EventMetadata(new Dictionary<string, object> { { EventMetadataKeys.Segments, segmentName } }));
47+
new EventMetadata(SdkEventType.SegmentsUpdate, new List<string>()));
4948
}
5049
}
5150

src/Splitio/Services/Cache/Classes/InMemorySplitCache.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
using System.Linq;
99
using System.Threading.Tasks;
1010
using Splitio.Services.Common;
11-
using Splitio.Constants;
1211

1312
namespace Splitio.Services.Cache.Classes
1413
{
@@ -80,7 +79,7 @@ public void Update(List<ParsedSplit> toAdd, List<string> toRemove, long till)
8079

8180
SetChangeNumber(till);
8281
_eventsManager.NotifyInternalEvent(SdkInternalEvent.FlagsUpdated,
83-
new EventMetadata(new Dictionary<string, object> { { EventMetadataKeys.Flags, eventsFlags } }));
82+
new EventMetadata(SdkEventType.FlagsUpdate, eventsFlags));
8483
}
8584

8685
public void SetChangeNumber(long changeNumber)
@@ -153,7 +152,7 @@ public void Kill(long changeNumber, string splitName, string defaultTreatment)
153152

154153
_featureFlags.AddOrUpdate(featureFlag.name, featureFlag, (key, oldValue) => featureFlag);
155154
_eventsManager.NotifyInternalEvent(SdkInternalEvent.FlagKilledNotification,
156-
new EventMetadata(new Dictionary<string, object> { { EventMetadataKeys.Flags, new List<string> { { featureFlag.name } } } }));
155+
new EventMetadata(SdkEventType.FlagsUpdate, new List<string> { { featureFlag.name } }));
157156

158157
}
159158

src/Splitio/Services/Client/Classes/SplitClient.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ public event EventHandler<EventMetadata> SdkReady
7373
SdkReadyEvent = (EventHandler<EventMetadata>)Delegate.Combine(SdkReadyEvent, value);
7474
if (_eventsManager.EventAlreadyTriggered(SdkEvent.SdkReady))
7575
{
76-
SdkReadyEvent.Invoke(this, new EventMetadata(new Dictionary<string, object>()));
76+
SdkReadyEvent.Invoke(this, null);
7777
}
7878
}
7979

src/Splitio/Services/Shared/Classes/SelfRefreshingBlockUntilReadyService.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,7 @@ public void BlockUntilReady(int blockMilisecondsUntilReady)
3636

3737
if (!_statusManager.WaitUntilReady(blockMilisecondsUntilReady))
3838
{
39-
_eventsManager.NotifyInternalEvent(SdkInternalEvent.SdkTimedOut,
40-
new EventMetadata(new Dictionary<string, object>()));
39+
_eventsManager.NotifyInternalEvent(SdkInternalEvent.SdkTimedOut, null);
4140
_telemetryInitProducer.RecordBURTimeout();
4241
throw new TimeoutException($"SDK was not ready in {blockMilisecondsUntilReady} milliseconds");
4342
}

tests/Splitio-tests/Unit Tests/Cache/InMemory/RuleBasedSegmentCacheTests.cs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -162,19 +162,15 @@ public void Update_ShouldNotifyEvent()
162162
SdkUpdate += sdkUpdate_callback;
163163
_eventsManager.Register(SdkEvent.SdkUpdate, TriggerSdkUpdate);
164164
_eventsManager.Register(SdkEvent.SdkReady, TriggerSdkReady);
165-
_eventsManager.NotifyInternalEvent(SdkInternalEvent.SdkReady, new EventMetadata(new Dictionary<string, object>()));
165+
_eventsManager.NotifyInternalEvent(SdkInternalEvent.SdkReady, null);
166166

167167
// Act
168168
SdkUpdateFlag = false;
169169
_segmentCache.Update(new List<RuleBasedSegment> { segmentToAdd, segmentToRemove }, new List<string> { segmentToRemove.Name }, till);
170170

171171
// Assert
172172
Assert.IsTrue(SdkUpdateFlag);
173-
Assert.IsTrue(eMetadata.ContainKey(Splitio.Constants.EventMetadataKeys.RuleBasedSegments));
174-
List<string> rbsegments = (List<string>)eMetadata.GetData()[Splitio.Constants.EventMetadataKeys.RuleBasedSegments];
175-
Assert.IsTrue(rbsegments.Count == 3);
176-
Assert.IsTrue(rbsegments.Contains("segment-to-add"));
177-
Assert.IsTrue(rbsegments.Contains("segment-to-remove"));
173+
Assert.AreEqual(SdkEventType.SegmentsUpdate, eMetadata.GetEventType());
178174
}
179175

180176
private void sdkUpdate_callback(object sender, EventMetadata metadata)

0 commit comments

Comments
 (0)