Skip to content

Commit 7d8cf9e

Browse files
committed
default account config + account config from auctioncontext
1 parent 9020f18 commit 7d8cf9e

File tree

6 files changed

+50
-61
lines changed

6 files changed

+50
-61
lines changed

extra/modules/greenbids-real-time-data/src/main/java/org/prebid/server/hooks/modules/greenbids/real/time/data/model/data/Partner.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@
1111
@Value(staticConstructor = "of")
1212
public class Partner {
1313

14+
@JsonProperty(required = true)
15+
Boolean enabled;
16+
1417
String pbuid;
1518

1619
@JsonProperty("targetTpr")

extra/modules/greenbids-real-time-data/src/main/java/org/prebid/server/hooks/modules/greenbids/real/time/data/v1/GreenbidsRealTimeDataProcessedAuctionRequestHook.java

Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package org.prebid.server.hooks.modules.greenbids.real.time.data.v1;
22

33
import com.fasterxml.jackson.core.JsonProcessingException;
4-
import com.fasterxml.jackson.databind.JsonNode;
54
import com.fasterxml.jackson.databind.ObjectMapper;
65
import com.fasterxml.jackson.databind.node.ObjectNode;
76
import com.iab.openrtb.request.BidRequest;
@@ -33,8 +32,6 @@
3332
import org.prebid.server.hooks.v1.auction.AuctionInvocationContext;
3433
import org.prebid.server.hooks.v1.auction.AuctionRequestPayload;
3534
import org.prebid.server.hooks.v1.auction.ProcessedAuctionRequestHook;
36-
import org.prebid.server.proto.openrtb.ext.request.ExtRequest;
37-
import org.prebid.server.proto.openrtb.ext.request.ExtRequestPrebid;
3835
import org.prebid.server.settings.model.Account;
3936
import org.prebid.server.settings.model.AccountHooksConfiguration;
4037

@@ -49,7 +46,6 @@ public class GreenbidsRealTimeDataProcessedAuctionRequestHook implements Process
4946
private static final String CODE = "greenbids-real-time-data-processed-auction-request";
5047
private static final String ACTIVITY = "greenbids-filter";
5148
private static final String SUCCESS_STATUS = "success";
52-
private static final String BID_REQUEST_ANALYTICS_EXTENSION_NAME = "greenbids-rtd";
5349

5450
private final ObjectMapper mapper;
5551
private final FilterService filterService;
@@ -77,8 +73,12 @@ public Future<InvocationResult<AuctionRequestPayload>> call(
7773

7874
final AuctionContext auctionContext = invocationContext.auctionContext();
7975
final BidRequest bidRequest = auctionContext.getBidRequest();
80-
final Partner appliedPartner = Optional.ofNullable(parseBidRequestExt(bidRequest))
81-
.orElse(parseAccountConfig(auctionContext));
76+
final Partner appliedPartner = parseAccountConfig(auctionContext);
77+
78+
if (!appliedPartner.getEnabled()) {
79+
return Future.succeededFuture(toInvocationResult(
80+
bidRequest, null, InvocationAction.no_action));
81+
}
8282

8383
return Future.all(
8484
onnxModelRunnerWithThresholds.retrieveOnnxModelRunner(appliedPartner),
@@ -92,17 +92,6 @@ public Future<InvocationResult<AuctionRequestPayload>> call(
9292
bidRequest, null, InvocationAction.no_action)));
9393
}
9494

95-
private Partner parseBidRequestExt(BidRequest bidRequest) {
96-
return Optional.ofNullable(bidRequest)
97-
.map(BidRequest::getExt)
98-
.map(ExtRequest::getPrebid)
99-
.map(ExtRequestPrebid::getAnalytics)
100-
.filter(this::isNotEmptyObjectNode)
101-
.map(analytics -> (ObjectNode) analytics.get(BID_REQUEST_ANALYTICS_EXTENSION_NAME))
102-
.map(this::toPartner)
103-
.orElse(null);
104-
}
105-
10695
private Partner parseAccountConfig(AuctionContext auctionContext) {
10796
final Map<String, ObjectNode> modules = Optional.ofNullable(auctionContext)
10897
.map(AuctionContext::getAccount)
@@ -119,10 +108,6 @@ private Partner parseAccountConfig(AuctionContext auctionContext) {
119108
return partner;
120109
}
121110

122-
private boolean isNotEmptyObjectNode(JsonNode analytics) {
123-
return analytics != null && analytics.isObject() && !analytics.isEmpty();
124-
}
125-
126111
private Partner toPartner(ObjectNode adapterNode) {
127112
try {
128113
return mapper.treeToValue(adapterNode, Partner.class);

extra/modules/greenbids-real-time-data/src/test/java/org/prebid/server/hooks/modules/greenbids/real/time/data/core/GreenbidsInferenceDataServiceTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ public void extractThrottlingMessagesFromBidRequestShouldReturnValidThrottlingMe
7474
.banner(banner)
7575
.build();
7676
final Device device = givenDevice(identity());
77-
final BidRequest bidRequest = givenBidRequest(request -> request, List.of(imp), device, null);
77+
final BidRequest bidRequest = givenBidRequest(request -> request, List.of(imp), device);
7878

7979
final CountryResponse countryResponse = mock(CountryResponse.class);
8080

@@ -152,7 +152,7 @@ public void extractThrottlingMessagesFromBidRequestShouldHandleMissingIp() {
152152
.banner(banner)
153153
.build();
154154
final Device device = givenDeviceWithoutIp(identity());
155-
final BidRequest bidRequest = givenBidRequest(request -> request, List.of(imp), device, null);
155+
final BidRequest bidRequest = givenBidRequest(request -> request, List.of(imp), device);
156156

157157
final ZonedDateTime timestamp = ZonedDateTime.now(ZoneId.of("UTC"));
158158
final Integer expectedHourBucket = timestamp.getHour();
@@ -188,7 +188,7 @@ public void extractThrottlingMessagesFromBidRequestShouldThrowPreBidExceptionWhe
188188
.banner(banner)
189189
.build();
190190
final Device device = givenDevice(identity());
191-
final BidRequest bidRequest = givenBidRequest(request -> request, List.of(imp), device, null);
191+
final BidRequest bidRequest = givenBidRequest(request -> request, List.of(imp), device);
192192

193193
when(databaseReader.country(any(InetAddress.class))).thenThrow(new GeoIp2Exception("GeoIP failure"));
194194

extra/modules/greenbids-real-time-data/src/test/java/org/prebid/server/hooks/modules/greenbids/real/time/data/core/GreenbidsInvocationServiceTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public void createGreenbidsInvocationResultShouldReturnUpdateBidRequestWhenNotEx
4545
.banner(banner)
4646
.build();
4747
final Device device = givenDevice(identity());
48-
final BidRequest bidRequest = givenBidRequest(request -> request, List.of(imp), device, null);
48+
final BidRequest bidRequest = givenBidRequest(request -> request, List.of(imp), device);
4949
final Map<String, Map<String, Boolean>> impsBiddersFilterMap = givenImpsBiddersFilterMap();
5050
final Partner partner = givenPartner(0.0);
5151

@@ -82,7 +82,7 @@ public void createGreenbidsInvocationResultShouldReturnNoActionWhenExploration()
8282
.banner(banner)
8383
.build();
8484
final Device device = givenDevice(identity());
85-
final BidRequest bidRequest = givenBidRequest(request -> request, List.of(imp), device, null);
85+
final BidRequest bidRequest = givenBidRequest(request -> request, List.of(imp), device);
8686
final Map<String, Map<String, Boolean>> impsBiddersFilterMap = givenImpsBiddersFilterMap();
8787
final Partner partner = givenPartner(1.0);
8888

@@ -121,6 +121,6 @@ private Map<String, Map<String, Boolean>> givenImpsBiddersFilterMap() {
121121
}
122122

123123
private Partner givenPartner(Double explorationRate) {
124-
return Partner.of("test-pbuid", 0.60, explorationRate);
124+
return Partner.of(true, "test-pbuid", 0.60, explorationRate);
125125
}
126126
}

extra/modules/greenbids-real-time-data/src/test/java/org/prebid/server/hooks/modules/greenbids/real/time/data/util/TestBidRequestProvider.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import com.iab.openrtb.request.Imp;
1212
import com.iab.openrtb.request.Site;
1313
import org.prebid.server.json.ObjectMapperProvider;
14-
import org.prebid.server.proto.openrtb.ext.request.ExtRequest;
1514

1615
import java.util.Collections;
1716
import java.util.List;
@@ -26,15 +25,13 @@ private TestBidRequestProvider() { }
2625
public static BidRequest givenBidRequest(
2726
UnaryOperator<BidRequest.BidRequestBuilder> bidRequestCustomizer,
2827
List<Imp> imps,
29-
Device device,
30-
ExtRequest extRequest) {
28+
Device device) {
3129

3230
return bidRequestCustomizer.apply(BidRequest.builder()
3331
.id("request")
3432
.imp(imps)
3533
.site(givenSite(site -> site))
36-
.device(device)
37-
.ext(extRequest)).build();
34+
.device(device)).build();
3835
}
3936

4037
public static Site givenSite(UnaryOperator<Site.SiteBuilder> siteCustomizer) {

extra/modules/greenbids-real-time-data/src/test/java/org/prebid/server/hooks/modules/greenbids/real/time/data/v1/GreenbidsRealTimeDataProcessedAuctionRequestHookTest.java

Lines changed: 33 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,6 @@
5252
import org.prebid.server.hooks.v1.auction.AuctionInvocationContext;
5353
import org.prebid.server.hooks.v1.auction.AuctionRequestPayload;
5454
import org.prebid.server.model.HttpRequestContext;
55-
import org.prebid.server.proto.openrtb.ext.request.ExtRequest;
56-
import org.prebid.server.proto.openrtb.ext.request.ExtRequestPrebid;
5755
import org.prebid.server.settings.model.Account;
5856
import org.prebid.server.settings.model.AccountHooksConfiguration;
5957

@@ -164,8 +162,8 @@ public void callShouldFilterBiddersAndFallbackToAccountLevelConfigWhenPartnerNot
164162

165163
final Double explorationRate = 0.0001;
166164
final Device device = givenDevice(identity());
167-
final BidRequest bidRequest = givenBidRequest(request -> request, List.of(imp), device, null);
168-
final AuctionContext auctionContext = givenAuctionContext(bidRequest, context -> context);
165+
final BidRequest bidRequest = givenBidRequest(request -> request, List.of(imp), device);
166+
final AuctionContext auctionContext = givenAuctionContext(bidRequest, context -> context, explorationRate);
169167
final AuctionInvocationContext invocationContext = givenAuctionInvocationContext(auctionContext);
170168
when(invocationContext.auctionContext()).thenReturn(auctionContext);
171169
when(modelCacheWithExpiration.getIfPresent("onnxModelRunner_test-pbuid"))
@@ -174,7 +172,7 @@ public void callShouldFilterBiddersAndFallbackToAccountLevelConfigWhenPartnerNot
174172
.thenReturn(givenThrottlingThresholds());
175173

176174
final BidRequest expectedBidRequest = expectedUpdatedBidRequest(
177-
request -> request, explorationRate, device, false);
175+
request -> request, device);
178176
final AnalyticsResult expectedAnalyticsResult = expectedAnalyticsResult(false, false);
179177

180178
// when
@@ -225,9 +223,8 @@ public void callShouldNotFilterBiddersAndReturnAnalyticsTagWhenExploration() thr
225223

226224
final Double explorationRate = 1.0;
227225
final Device device = givenDevice(identity());
228-
final ExtRequest extRequest = givenExtRequest(explorationRate);
229-
final BidRequest bidRequest = givenBidRequest(request -> request, List.of(imp), device, extRequest);
230-
final AuctionContext auctionContext = givenAuctionContext(bidRequest, context -> context);
226+
final BidRequest bidRequest = givenBidRequest(request -> request, List.of(imp), device);
227+
final AuctionContext auctionContext = givenAuctionContext(bidRequest, context -> context, explorationRate);
231228
final AuctionInvocationContext invocationContext = givenAuctionInvocationContext(auctionContext);
232229
when(invocationContext.auctionContext()).thenReturn(auctionContext);
233230
when(modelCacheWithExpiration.getIfPresent("onnxModelRunner_test-pbuid"))
@@ -279,9 +276,8 @@ public void callShouldFilterBiddersBasedOnModelWhenAnyFeatureNotAvailable() thro
279276

280277
final Double explorationRate = 0.0001;
281278
final Device device = givenDeviceWithoutUserAgent(identity());
282-
final ExtRequest extRequest = givenExtRequest(explorationRate);
283-
final BidRequest bidRequest = givenBidRequest(request -> request, List.of(imp), device, extRequest);
284-
final AuctionContext auctionContext = givenAuctionContext(bidRequest, context -> context);
279+
final BidRequest bidRequest = givenBidRequest(request -> request, List.of(imp), device);
280+
final AuctionContext auctionContext = givenAuctionContext(bidRequest, context -> context, explorationRate);
285281
final AuctionInvocationContext invocationContext = givenAuctionInvocationContext(auctionContext);
286282
when(invocationContext.auctionContext()).thenReturn(auctionContext);
287283
when(modelCacheWithExpiration.getIfPresent("onnxModelRunner_test-pbuid"))
@@ -290,7 +286,7 @@ public void callShouldFilterBiddersBasedOnModelWhenAnyFeatureNotAvailable() thro
290286
.thenReturn(givenThrottlingThresholds());
291287

292288
final BidRequest expectedBidRequest = expectedUpdatedBidRequest(
293-
request -> request, explorationRate, device, true);
289+
request -> request, device);
294290
final AnalyticsResult expectedAnalyticsResult = expectedAnalyticsResult(false, false);
295291

296292
// when
@@ -340,9 +336,8 @@ public void callShouldFilterBiddersBasedOnModelResults() throws OrtException, IO
340336

341337
final Double explorationRate = 0.0001;
342338
final Device device = givenDevice(identity());
343-
final ExtRequest extRequest = givenExtRequest(explorationRate);
344-
final BidRequest bidRequest = givenBidRequest(request -> request, List.of(imp), device, extRequest);
345-
final AuctionContext auctionContext = givenAuctionContext(bidRequest, context -> context);
339+
final BidRequest bidRequest = givenBidRequest(request -> request, List.of(imp), device);
340+
final AuctionContext auctionContext = givenAuctionContext(bidRequest, context -> context, explorationRate);
346341
final AuctionInvocationContext invocationContext = givenAuctionInvocationContext(auctionContext);
347342
when(invocationContext.auctionContext()).thenReturn(auctionContext);
348343
when(modelCacheWithExpiration.getIfPresent("onnxModelRunner_test-pbuid"))
@@ -351,7 +346,7 @@ public void callShouldFilterBiddersBasedOnModelResults() throws OrtException, IO
351346
.thenReturn(givenThrottlingThresholds());
352347

353348
final BidRequest expectedBidRequest = expectedUpdatedBidRequest(
354-
request -> request, explorationRate, device, true);
349+
request -> request, device);
355350
final AnalyticsResult expectedAnalyticsResult = expectedAnalyticsResult(false, false);
356351

357352
// when
@@ -389,6 +384,19 @@ public void callShouldFilterBiddersBasedOnModelResults() throws OrtException, IO
389384
.isEqualTo(expectedBidRequest);
390385
}
391386

387+
static DatabaseReader givenDatabaseReader() throws IOException {
388+
final URL url = new URL("https://git.io/GeoLite2-Country.mmdb");
389+
final Path databasePath = Files.createTempFile("GeoLite2-Country", ".mmdb");
390+
391+
try (
392+
InputStream inputStream = url.openStream();
393+
FileOutputStream outputStream = new FileOutputStream(databasePath.toFile())) {
394+
inputStream.transferTo(outputStream);
395+
}
396+
397+
return new DatabaseReader.Builder(databasePath.toFile()).build();
398+
}
399+
392400
static ExtRequest givenExtRequest(Double explorationRate) {
393401
final ObjectNode greenbidsNode = TestBidRequestProvider.MAPPER.createObjectNode();
394402
greenbidsNode.put("pbuid", "test-pbuid");
@@ -406,12 +414,13 @@ static ExtRequest givenExtRequest(Double explorationRate) {
406414

407415
private AuctionContext givenAuctionContext(
408416
BidRequest bidRequest,
409-
UnaryOperator<AuctionContext.AuctionContextBuilder> auctionContextCustomizer) {
417+
UnaryOperator<AuctionContext.AuctionContextBuilder> auctionContextCustomizer,
418+
Double explorationRate) {
410419

411420
final AuctionContext.AuctionContextBuilder auctionContextBuilder = AuctionContext.builder()
412421
.httpRequest(HttpRequestContext.builder().build())
413422
.bidRequest(bidRequest)
414-
.account(givenAccount());
423+
.account(givenAccount(explorationRate));
415424

416425
return auctionContextCustomizer.apply(auctionContextBuilder).build();
417426
}
@@ -422,18 +431,19 @@ private AuctionInvocationContext givenAuctionInvocationContext(AuctionContext au
422431
return invocationContext;
423432
}
424433

425-
private Account givenAccount() {
434+
private Account givenAccount(Double explorationRate) {
426435
return Account.builder()
427436
.id("test-account")
428-
.hooks(givenAccountHooksConfiguration())
437+
.hooks(givenAccountHooksConfiguration(explorationRate))
429438
.build();
430439
}
431440

432-
private AccountHooksConfiguration givenAccountHooksConfiguration() {
441+
private AccountHooksConfiguration givenAccountHooksConfiguration(Double explorationRate) {
433442
final ObjectNode greenbidsNode = TestBidRequestProvider.MAPPER.createObjectNode();
443+
greenbidsNode.put("enabled", true);
434444
greenbidsNode.put("pbuid", "test-pbuid");
435445
greenbidsNode.put("targetTpr", 0.60);
436-
greenbidsNode.put("explorationRate", 0.0001);
446+
greenbidsNode.put("explorationRate", explorationRate);
437447
final Map<String, ObjectNode> modules = Map.of("greenbids", greenbidsNode);
438448
return AccountHooksConfiguration.of(null, modules, null);
439449
}
@@ -454,9 +464,7 @@ private ThrottlingThresholds givenThrottlingThresholds() throws IOException {
454464

455465
private BidRequest expectedUpdatedBidRequest(
456466
UnaryOperator<BidRequest.BidRequestBuilder> bidRequestCustomizer,
457-
Double explorationRate,
458-
Device device,
459-
Boolean addExtRequest) {
467+
Device device) {
460468

461469
final Banner banner = givenBanner();
462470

@@ -480,10 +488,6 @@ private BidRequest expectedUpdatedBidRequest(
480488
.site(givenSite(site -> site))
481489
.device(device);
482490

483-
if (addExtRequest) {
484-
bidRequestBuilder.ext(givenExtRequest(explorationRate));
485-
}
486-
487491
return bidRequestCustomizer.apply(bidRequestBuilder).build();
488492
}
489493

0 commit comments

Comments
 (0)