Skip to content

Commit 2d11cee

Browse files
dengfeigedengfeige
andauthored
fix: modify variations sorting (#17)
Co-authored-by: dengfeige <dengfeige@didiglobal.com>
1 parent 3a2f511 commit 2d11cee

3 files changed

Lines changed: 35 additions & 4 deletions

File tree

src/main/java/com/featureprobe/api/model/VariationAccessCounter.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ public class VariationAccessCounter {
2929
public VariationAccessCounter(String value, Long count) {
3030
this.value = value;
3131
this.count = count;
32-
this.deleted = false;
3332
}
3433

3534

src/main/java/com/featureprobe/api/service/MetricService.java

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,16 @@
2121
import lombok.AllArgsConstructor;
2222
import lombok.extern.slf4j.Slf4j;
2323
import org.apache.commons.collections4.CollectionUtils;
24+
import org.apache.commons.lang3.BooleanUtils;
2425
import org.apache.commons.lang3.StringUtils;
2526
import org.springframework.stereotype.Service;
2627

2728
import java.time.LocalDateTime;
2829
import java.time.ZoneId;
2930
import java.time.format.DateTimeFormatter;
31+
import java.util.ArrayList;
3032
import java.util.Collections;
33+
import java.util.Comparator;
3134
import java.util.Date;
3235
import java.util.List;
3336
import java.util.Map;
@@ -66,7 +69,7 @@ public MetricResponse query(String projectKey, String environmentKey, String tog
6669
environmentKey, toggleKey).get();
6770
appendLatestVariations(accessCounters, latestTargeting, metricType);
6871

69-
return new MetricResponse(accessEventPoints, accessCounters);
72+
return new MetricResponse(accessEventPoints, sortAccessCounters(accessCounters));
7073
}
7174

7275
private Map<String, VariationHistory> buildVariationVersionMap(String projectKey, String environmentKey,
@@ -243,11 +246,11 @@ protected void appendLatestVariations(List<VariationAccessCounter> accessCounter
243246
appendVariationIfInLatest(accessCounters, latestVariations);
244247
}
245248

249+
246250
private void setVariationDeletedIfNotInLatest(List<VariationAccessCounter> accessCounters,
247251
List<String> namesOrValues) {
248252
accessCounters.stream()
249-
.filter(accessCounter -> !namesOrValues.contains(accessCounter.getValue()))
250-
.forEach(accessCounter -> accessCounter.setDeleted(true));
253+
.forEach(accessCounter -> accessCounter.setDeleted(!namesOrValues.contains(accessCounter.getValue())));
251254
}
252255

253256
private void appendVariationIfInLatest(List<VariationAccessCounter> accessCounters, List<String> namesOrValues) {
@@ -261,6 +264,21 @@ private void appendVariationIfInLatest(List<VariationAccessCounter> accessCounte
261264
});
262265
}
263266

267+
protected List<VariationAccessCounter> sortAccessCounters(List<VariationAccessCounter> accessCounters) {
268+
Collections.sort(accessCounters, Comparator.comparingLong(VariationAccessCounter::getCount).reversed());
269+
270+
List<VariationAccessCounter> deletedCounters = Lists.newArrayList();
271+
new ArrayList<>(accessCounters).forEach(accessCounter -> {
272+
if (BooleanUtils.isTrue(accessCounter.getDeleted())) {
273+
deletedCounters.add(accessCounter);
274+
accessCounters.remove(accessCounter);
275+
}
276+
});
277+
accessCounters.addAll(deletedCounters);
278+
return accessCounters;
279+
}
280+
281+
264282
private String queryEnvironmentServerSdkKey(String projectKey, String environmentKey) {
265283
Environment environment = this.environmentRepository.findByProjectKeyAndKey(projectKey, environmentKey).get();
266284
return environment.getServerSdkKey();

src/test/groovy/com/featureprobe/api/service/MetricServiceSpec.groovy

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,20 @@ class MetricServiceSpec extends Specification {
120120
20 == accessEventPoints[0].values[0].count
121121
}
122122

123+
def "test sort access counters"() {
124+
when:
125+
def counters = metricService.sortAccessCounters([new VariationAccessCounter(count: 15),
126+
new VariationAccessCounter(count: 100),
127+
new VariationAccessCounter(count: 19, deleted: true),
128+
new VariationAccessCounter(count: 99, deleted: true),
129+
new VariationAccessCounter(count: 129)])
130+
131+
then:
132+
129 == counters.get(0).count
133+
19 == counters.get(counters.size() - 1).count
134+
99 == counters.get(counters.size() - 2).count
135+
}
136+
123137
def "test `isGroupByDay`"() {
124138
expect:
125139
groupByDay == metricService.isGroupByDay(lastHours)

0 commit comments

Comments
 (0)