Skip to content

Commit 19aea91

Browse files
authored
feat: get all flags/segments as json string (#26)
1 parent 1fc00c7 commit 19aea91

File tree

5 files changed

+46
-10
lines changed

5 files changed

+46
-10
lines changed

README.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,14 @@ JAVA Server Side SDK is based on Java SE 8 and is available on Maven Central. Yo
3131
<dependency>
3232
<groupId>co.featbit</groupId>
3333
<artifactId>featbit-java-sdk</artifactId>
34-
<version>1.4.4</version>
34+
<version>1.4.5</version>
3535
</dependency>
3636
</dependencies>
3737
```
3838

3939
- Install the SDK using Gradle
4040
```
41-
implementation 'co.featbit:featbit-java-sdk:1.4.4'
41+
implementation 'co.featbit:featbit-java-sdk:1.4.5'
4242
```
4343

4444
### Prerequisite
@@ -286,6 +286,10 @@ Collection<String> flagKeys = states.getFlagKeys();
286286
// flag evaluations
287287
EvalDetail<String> detail = states.getStringDetail("flag key", user, "Not Found");
288288
String value = states.getString("flag key", user, "Not Found");
289+
290+
// get all flags/segments as json string
291+
String json = client.getAllDataAsJson();
292+
289293
```
290294

291295
> If evaluation called before Java SDK client initialized, you set the wrong flag key/user for the evaluation or the related feature flag

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>co.featbit</groupId>
88
<artifactId>featbit-java-sdk</artifactId>
9-
<version>1.4.4</version>
9+
<version>1.4.5</version>
1010

1111
<name>featbit/featbit-java-sdk</name>
1212

src/main/java/co/featbit/server/DataModel.java

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import co.featbit.server.exterior.DataStorageTypes;
55
import com.google.common.annotations.VisibleForTesting;
66
import com.google.common.collect.ImmutableMap;
7-
import com.google.gson.annotations.Expose;
87
import com.google.gson.annotations.JsonAdapter;
98
import com.google.gson.reflect.TypeToken;
109
import org.apache.commons.lang3.StringUtils;
@@ -168,9 +167,7 @@ Map<DataStorageTypes.Category, Map<String, DataStorageTypes.Item>> toStorageType
168167
static class Segment implements DataStorageTypes.Item, JsonHelper.AfterJsonParseDeserializable {
169168
private final String id;
170169
private final Boolean isArchived;
171-
@Expose(serialize = false)
172170
final Date updatedAt;
173-
@Expose(deserialize = false)
174171
private Long timestamp;
175172
private final List<String> included;
176173
private final List<String> excluded;
@@ -247,9 +244,7 @@ public int compareTo(@NotNull DataStorageTypes.Item o) {
247244
@JsonAdapter(JsonHelper.AfterJsonParseDeserializableTypeAdapterFactory.class)
248245
static class FeatureFlag implements DataStorageTypes.Item, JsonHelper.AfterJsonParseDeserializable {
249246
final String id;
250-
@Expose(serialize = false)
251247
final Date updatedAt;
252-
@Expose(deserialize = false)
253248
private Long timestamp;
254249
private final boolean isArchived;
255250
private final boolean exptIncludeAllTargets;
@@ -262,8 +257,7 @@ static class FeatureFlag implements DataStorageTypes.Item, JsonHelper.AfterJsonP
262257
private final List<TargetRule> rules;
263258
private final Fallthrough fallthrough;
264259
private final String disabledVariationId;
265-
@Expose(serialize = false, deserialize = false)
266-
private Map<String, Variation> variationMap;
260+
private transient Map<String, Variation> variationMap;
267261

268262
FeatureFlag(String id, Date updatedAt, boolean isArchived, boolean exptIncludeAllTargets, boolean isEnabled, String name, String key, String variationType, List<Variation> variations, List<TargetUser> targetUsers, List<TargetRule> rules, Fallthrough fallthrough, String disabledVariationId) {
269263
this.id = id;
@@ -536,5 +530,22 @@ public String getDispatchKey() {
536530
}
537531
}
538532

533+
static class DataExposer {
534+
private final List<FeatureFlag> featureFlags;
535+
private final List<Segment> segments;
536+
537+
public DataExposer(List<FeatureFlag> featureFlags, List<Segment> segments) {
538+
this.featureFlags = featureFlags;
539+
this.segments = segments;
540+
}
541+
542+
public List<FeatureFlag> getFeatureFlags() {
543+
return featureFlags;
544+
}
545+
546+
public List<Segment> getSegments() {
547+
return segments;
548+
}
549+
}
539550

540551
}

src/main/java/co/featbit/server/FBClientImp.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,11 @@
1212

1313
import java.io.IOException;
1414
import java.time.Duration;
15+
import java.util.List;
1516
import java.util.Map;
1617
import java.util.concurrent.*;
1718
import java.util.function.Consumer;
19+
import java.util.stream.Collectors;
1820

1921
import static co.featbit.server.Evaluator.*;
2022
import static com.google.common.base.Preconditions.checkArgument;
@@ -404,4 +406,16 @@ public void trackMetrics(FBUser user, Map<String, Double> metrics) {
404406
insightProcessor.send(event);
405407
}
406408

409+
public String getAllDataAsJson() {
410+
try {
411+
List<DataModel.FeatureFlag> allFlags = this.storage.getAll(DataStorageTypes.FEATURES).values().stream().map(v -> (DataModel.FeatureFlag) v).collect(Collectors.toList());
412+
List<DataModel.Segment> allSegments = this.storage.getAll(DataStorageTypes.SEGMENTS).values().stream().map(v -> (DataModel.Segment) v).collect(Collectors.toList());
413+
DataModel.DataExposer allData = new DataModel.DataExposer(allFlags, allSegments);
414+
return JsonHelper.serialize(allData);
415+
} catch (Exception ex) {
416+
logger.error("FB JAVA SDK: unexpected error in getAllDataAsJson", ex);
417+
}
418+
return null;
419+
}
420+
407421
}

src/main/java/co/featbit/server/exterior/FBClient.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,4 +262,11 @@ public interface FBClient extends Closeable {
262262
* @param metrics event name and numeric value in K/V
263263
*/
264264
void trackMetrics(FBUser user, Map<String, Double> metrics);
265+
266+
/**
267+
* Get all data as a json string
268+
*
269+
* @return all data as json string
270+
*/
271+
String getAllDataAsJson();
265272
}

0 commit comments

Comments
 (0)