Skip to content

Commit e4dbc8c

Browse files
feat: support tracking
1 parent 25ad7d1 commit e4dbc8c

File tree

4 files changed

+103
-2
lines changed

4 files changed

+103
-2
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ nexusPublishing {
107107
dependencies {
108108
implementation group: 'com.launchdarkly', name: 'launchdarkly-java-server-sdk', version: '[7.1.0, 8.0.0)'
109109

110-
implementation 'dev.openfeature:sdk:[1.7.0,2.0.0)'
110+
implementation 'dev.openfeature:sdk:[1.14.0,2.0.0)'
111111

112112
// Use JUnit test framework
113113
testImplementation(platform('org.junit:junit-bom:5.10.0'))

src/main/java/com/launchdarkly/openfeature/serverprovider/Provider.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,32 @@ public void shutdown() {
222222
}
223223
}
224224

225+
@Override
226+
public void track(String eventName, EvaluationContext ctx, TrackingEventDetails details) {
227+
if(ctx == null) {
228+
logger.info("LaunchDarkly track methods require an EvaluationContext to work");
229+
return;
230+
}
231+
232+
if(details != null) {
233+
Double metricValue = null;
234+
if (details.getValue().isPresent()) {
235+
metricValue = (Double)details.getValue().get();
236+
}
237+
LDValue data = valueConverter.toLdValue(new Value(details));
238+
239+
if (metricValue != null) {
240+
client.trackMetric(eventName, evaluationContextConverter.toLdContext(ctx), data, metricValue);
241+
} else if (!data.isNull() && data.size() > 0) {
242+
client.trackData(eventName, evaluationContextConverter.toLdContext(ctx), data);
243+
} else {
244+
client.track(eventName, evaluationContextConverter.toLdContext(ctx));
245+
}
246+
} else {
247+
client.track(eventName, evaluationContextConverter.toLdContext(ctx));
248+
}
249+
}
250+
225251
/**
226252
* Get the LaunchDarkly client associated with this provider.
227253
* <p>

src/main/java/com/launchdarkly/openfeature/serverprovider/Version.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@ abstract class Version {
44
private Version() {}
55

66
// This constant is updated automatically by our Gradle script during a release, if the project version has changed
7-
static final String SDK_VERSION = "0.2.0";
7+
static final String SDK_VERSION = "1.0.1";
88
}

src/test/java/com/launchdarkly/openfeature/serverprovider/ProviderTest.java

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,4 +126,79 @@ public void itCanDoAValueEvaluation() {
126126
assertEquals("84", detailed.getVariant());
127127
assertEquals("TARGETING_MATCH", detailed.getReason());
128128
}
129+
130+
@Test
131+
public void itCanTrackNoTrackingEventDetails() {
132+
EvaluationContext evaluationContext = new ImmutableContext("user-key");
133+
EvaluationContextConverter evaluationContextConverter = new EvaluationContextConverter(null);
134+
135+
OpenFeatureAPI.getInstance().setProvider(ldProvider);
136+
137+
OpenFeatureAPI
138+
.getInstance()
139+
.getClient().track("metric-key", evaluationContext);
140+
141+
verify(mockedLdClient).track(
142+
"metric-key",
143+
evaluationContextConverter.toLdContext(evaluationContext));
144+
}
145+
146+
@Test
147+
public void itCanTrackEmptyTrackingEventDetails() {
148+
EvaluationContext evaluationContext = new ImmutableContext("user-key");
149+
EvaluationContextConverter evaluationContextConverter = new EvaluationContextConverter(null);
150+
151+
TrackingEventDetails trackingEventDetails = new MutableTrackingEventDetails(null);
152+
153+
OpenFeatureAPI.getInstance().setProvider(ldProvider);
154+
155+
OpenFeatureAPI
156+
.getInstance()
157+
.getClient().track("metric-key", evaluationContext, trackingEventDetails);
158+
159+
verify(mockedLdClient).track(
160+
"metric-key",
161+
evaluationContextConverter.toLdContext(evaluationContext));
162+
}
163+
164+
@Test
165+
public void itCanTrackTrackingEventDetailsWithNoValue() {
166+
EvaluationContext evaluationContext = new ImmutableContext("user-key");
167+
EvaluationContextConverter evaluationContextConverter = new EvaluationContextConverter(null);
168+
ValueConverter valueConverter = new ValueConverter(null);
169+
170+
TrackingEventDetails trackingEventDetails = new MutableTrackingEventDetails(null).add("currency", "USD");
171+
172+
OpenFeatureAPI.getInstance().setProvider(ldProvider);
173+
174+
OpenFeatureAPI
175+
.getInstance()
176+
.getClient().track("metric-key", evaluationContext, trackingEventDetails);
177+
178+
verify(mockedLdClient).trackData(
179+
"metric-key",
180+
evaluationContextConverter.toLdContext(evaluationContext),
181+
valueConverter.toLdValue(new Value(trackingEventDetails)));
182+
}
183+
184+
@Test
185+
public void itCanTrackFullTrackingEventDetails() {
186+
EvaluationContext evaluationContext = new ImmutableContext("user-key");
187+
EvaluationContextConverter evaluationContextConverter = new EvaluationContextConverter(null);
188+
ValueConverter valueConverter = new ValueConverter(null);
189+
190+
TrackingEventDetails trackingEventDetails = new MutableTrackingEventDetails(99.77).add("currency", "USD");
191+
192+
OpenFeatureAPI.getInstance().setProvider(ldProvider);
193+
194+
OpenFeatureAPI
195+
.getInstance()
196+
.getClient().track("metric-key", evaluationContext, trackingEventDetails);
197+
198+
verify(mockedLdClient).trackMetric(
199+
"metric-key",
200+
evaluationContextConverter.toLdContext(evaluationContext),
201+
valueConverter.toLdValue(new Value(trackingEventDetails)),
202+
99.77);
203+
}
129204
}

0 commit comments

Comments
 (0)