Skip to content

Commit 02ab379

Browse files
authored
Core: Transition PAAPI parameters (#3670)
1 parent 9e04626 commit 02ab379

File tree

57 files changed

+1847
-410
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+1847
-410
lines changed

src/main/java/org/prebid/server/auction/BidResponseCreator.java

Lines changed: 185 additions & 16 deletions
Large diffs are not rendered by default.

src/main/java/org/prebid/server/auction/ExchangeService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,7 @@ private Future<AuctionContext> runAuction(AuctionContext receivedContext) {
273273
.map(auctionParticipations -> updateResponsesMetrics(auctionParticipations, account, aliases))
274274
.map(context::with))
275275
// produce response from bidder results
276-
.compose(context -> bidResponseCreator.create(context, cacheInfo, bidderToMultiBid)
276+
.compose(context -> bidResponseCreator.create(context, cacheInfo, aliases, bidderToMultiBid)
277277
.map(bidResponse -> criteriaLogManager.traceResponse(
278278
logger,
279279
bidResponse,

src/main/java/org/prebid/server/auction/ImpAdjuster.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
package org.prebid.server.auction;
22

33
import com.fasterxml.jackson.databind.JsonNode;
4+
import com.fasterxml.jackson.databind.node.ArrayNode;
5+
import com.fasterxml.jackson.databind.node.IntNode;
46
import com.fasterxml.jackson.databind.node.ObjectNode;
57
import com.iab.openrtb.request.Imp;
68
import org.prebid.server.json.JacksonMapper;
79
import org.prebid.server.json.JsonMerger;
10+
import org.prebid.server.util.StreamUtil;
811
import org.prebid.server.validation.ImpValidator;
912

1013
import java.util.Iterator;
@@ -15,6 +18,8 @@
1518
public class ImpAdjuster {
1619

1720
private static final String IMP_EXT = "ext";
21+
private static final String EXT_AE = "ae";
22+
private static final String EXT_IGS = "igs";
1823
private static final String EXT_PREBID = "prebid";
1924
private static final String EXT_PREBID_BIDDER = "bidder";
2025
private static final String EXT_PREBID_IMP = "imp";
@@ -33,6 +38,8 @@ public ImpAdjuster(JacksonMapper jacksonMapper,
3338
}
3439

3540
public Imp adjust(Imp originalImp, String bidder, BidderAliases bidderAliases, List<String> debugMessages) {
41+
setAeParams(originalImp.getExt());
42+
3643
final JsonNode impExtPrebidImp = bidderParamsFromImpExtPrebidImp(originalImp.getExt());
3744
if (impExtPrebidImp == null) {
3845
return originalImp;
@@ -65,6 +72,28 @@ public Imp adjust(Imp originalImp, String bidder, BidderAliases bidderAliases, L
6572
}
6673
}
6774

75+
private void setAeParams(ObjectNode ext) {
76+
final int extAe = Optional.ofNullable(ext)
77+
.map(extNode -> extNode.get(EXT_AE))
78+
.filter(JsonNode::isInt)
79+
.map(JsonNode::asInt)
80+
.orElse(-1);
81+
82+
final boolean extIgsAePresent = Optional.ofNullable(ext)
83+
.map(extNode -> extNode.get(EXT_IGS))
84+
.filter(JsonNode::isArray)
85+
.stream()
86+
.flatMap(extNode -> StreamUtil.asStream(extNode.spliterator()))
87+
.filter(Objects::nonNull)
88+
.anyMatch(igsElementNode -> igsElementNode.has(EXT_AE));
89+
90+
if (!extIgsAePresent && (extAe == 0 || extAe == 1)) {
91+
final ArrayNode extIgs = jacksonMapper.mapper().createArrayNode();
92+
extIgs.add(jacksonMapper.mapper().createObjectNode().set(EXT_AE, IntNode.valueOf(extAe)));
93+
ext.set(EXT_IGS, extIgs);
94+
}
95+
}
96+
6897
private static JsonNode bidderParamsFromImpExtPrebidImp(ObjectNode ext) {
6998
return Optional.ofNullable(ext)
7099
.map(extNode -> extNode.get(EXT_PREBID))

src/main/java/org/prebid/server/auction/model/BidRejectionTracker.java

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,6 @@ public BidRejectionTracker(String bidder, Set<String> involvedImpIds, double log
4747
rejectedBids = new HashMap<>();
4848
}
4949

50-
/**
51-
* Restores ONLY imps from rejection, rejected bids are preserved for analytics.
52-
* A bid can be rejected only once.
53-
*/
5450
public void succeed(Collection<BidderBid> bids) {
5551
bids.stream()
5652
.map(BidderBid::getBid)
@@ -124,10 +120,6 @@ public void rejectAllImps(BidRejectionReason reason) {
124120
involvedImpIds.forEach(impId -> rejectImp(impId, reason));
125121
}
126122

127-
/**
128-
* If an impression has at least one valid bid, it's not considered rejected.
129-
* If no valid bids are returned for the impression, only the first one rejected reason will be returned
130-
*/
131123
public Map<String, BidRejectionReason> getRejectedImps() {
132124
final Map<String, BidRejectionReason> rejectedImpIds = new HashMap<>();
133125
for (String impId : involvedImpIds) {
@@ -144,9 +136,6 @@ public Map<String, BidRejectionReason> getRejectedImps() {
144136
return rejectedImpIds;
145137
}
146138

147-
/**
148-
* Bid is absent for the non-bid code from 0 to 299
149-
*/
150139
public Map<String, List<Pair<BidderBid, BidRejectionReason>>> getRejectedBids() {
151140
final Map<String, List<Pair<BidderBid, BidRejectionReason>>> missingImpIds = new HashMap<>();
152141
for (String impId : involvedImpIds) {
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package org.prebid.server.auction.model;
2+
3+
import com.fasterxml.jackson.annotation.JsonProperty;
4+
5+
public enum PaaFormat {
6+
7+
@JsonProperty("original")
8+
ORIGINAL,
9+
10+
@JsonProperty("iab")
11+
IAB
12+
}

src/main/java/org/prebid/server/bidder/HttpBidderRequester.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import org.prebid.server.log.LoggerFactory;
3232
import org.prebid.server.model.CaseInsensitiveMultiMap;
3333
import org.prebid.server.proto.openrtb.ext.response.ExtHttpCall;
34+
import org.prebid.server.proto.openrtb.ext.response.ExtIgi;
3435
import org.prebid.server.proto.openrtb.ext.response.FledgeAuctionConfig;
3536
import org.prebid.server.util.HttpUtil;
3637
import org.prebid.server.vertx.httpclient.HttpClient;
@@ -248,7 +249,7 @@ private static byte[] gzip(byte[] value) {
248249
*/
249250
private <T> Future<BidderCall<T>> failResponse(Throwable exception, HttpRequest<T> httpRequest) {
250251
conditionalLogger.warn("Error occurred while sending HTTP request to a bidder url: %s with message: %s"
251-
.formatted(httpRequest.getUri(), exception.getMessage()), logSamplingRate);
252+
.formatted(httpRequest.getUri(), exception.getMessage()), logSamplingRate);
252253
logger.debug("Error occurred while sending HTTP request to a bidder url: {}",
253254
exception, httpRequest.getUri());
254255

@@ -346,6 +347,7 @@ private static class ResultBuilder<T> {
346347
private final Map<HttpRequest<T>, BidderCall<T>> bidderCallsRecorded = new HashMap<>();
347348
private final List<BidderBid> bidsRecorded = new ArrayList<>();
348349
private final List<BidderError> errorsRecorded = new ArrayList<>();
350+
private final List<ExtIgi> igiRecorded = new ArrayList<>();
349351
private final List<FledgeAuctionConfig> fledgeRecorded = new ArrayList<>();
350352

351353
ResultBuilder(List<HttpRequest<T>> httpRequests,
@@ -366,6 +368,7 @@ void addHttpCall(BidderCall<T> bidderCall, CompositeBidderResponse bidderRespons
366368
handleBids(bidderResponse);
367369
handleBidderErrors(bidderResponse);
368370
handleBidderCallError(bidderCall);
371+
handleIgis(bidderResponse);
369372
handleFledgeAuctionConfigs(bidderResponse);
370373
}
371374

@@ -429,6 +432,12 @@ private void handleFledgeAuctionConfigs(CompositeBidderResponse bidderResponse)
429432
.ifPresent(fledgeRecorded::addAll);
430433
}
431434

435+
private void handleIgis(CompositeBidderResponse bidderResponse) {
436+
Optional.ofNullable(bidderResponse)
437+
.map(CompositeBidderResponse::getIgi)
438+
.ifPresent(igiRecorded::addAll);
439+
}
440+
432441
BidderSeatBid toBidderSeatBid(boolean debugEnabled) {
433442
final List<BidderCall<T>> httpCalls = new ArrayList<>(bidderCallsRecorded.values());
434443
httpRequests.stream()
@@ -446,6 +455,7 @@ BidderSeatBid toBidderSeatBid(boolean debugEnabled) {
446455
.bids(bidsRecorded)
447456
.httpCalls(extHttpCalls)
448457
.errors(errors)
458+
.igi(igiRecorded)
449459
.fledgeAuctionConfigs(fledgeRecorded)
450460
.build();
451461
}

src/main/java/org/prebid/server/bidder/consumable/ConsumableBidder.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -121,9 +121,12 @@ public Result<List<BidderBid>> makeBids(BidderCall<BidRequest> httpCall, BidRequ
121121
public CompositeBidderResponse makeBidderResponse(BidderCall<BidRequest> httpCall, BidRequest bidRequest) {
122122
try {
123123
final BidResponse bidResponse = mapper.decodeValue(httpCall.getResponse().getBody(), BidResponse.class);
124-
final List<BidderError> bidderErrors = new ArrayList<>();
125-
return CompositeBidderResponse.builder().bids(extractConsumableBids(bidRequest, bidResponse, bidderErrors))
126-
.errors(bidderErrors).build();
124+
final List<BidderError> errors = new ArrayList<>();
125+
126+
return CompositeBidderResponse.builder()
127+
.bids(extractConsumableBids(bidRequest, bidResponse, errors))
128+
.errors(errors)
129+
.build();
127130
} catch (DecodeException e) {
128131
return CompositeBidderResponse.withError(BidderError.badServerResponse(e.getMessage()));
129132
}

src/main/java/org/prebid/server/bidder/criteo/CriteoBidder.java

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
import org.prebid.server.proto.openrtb.ext.response.BidType;
2020
import org.prebid.server.proto.openrtb.ext.response.ExtBidPrebid;
2121
import org.prebid.server.proto.openrtb.ext.response.ExtBidPrebidMeta;
22-
import org.prebid.server.proto.openrtb.ext.response.FledgeAuctionConfig;
22+
import org.prebid.server.proto.openrtb.ext.response.ExtIgi;
2323
import org.prebid.server.util.BidderUtil;
2424
import org.prebid.server.util.HttpUtil;
2525

@@ -31,7 +31,6 @@
3131

3232
public class CriteoBidder implements Bidder<BidRequest> {
3333

34-
private static final String BIDDER_NAME = "criteo";
3534
private final String endpointUrl;
3635
private final JacksonMapper mapper;
3736

@@ -55,9 +54,12 @@ public Result<List<BidderBid>> makeBids(BidderCall<BidRequest> httpCall, BidRequ
5554
public CompositeBidderResponse makeBidderResponse(BidderCall<BidRequest> httpCall, BidRequest bidRequest) {
5655
try {
5756
final CriteoBidResponse bidResponse = mapper.decodeValue(
58-
httpCall.getResponse().getBody(),
59-
CriteoBidResponse.class);
60-
return CompositeBidderResponse.withBids(extractBids(bidResponse), extractFledge(bidResponse));
57+
httpCall.getResponse().getBody(), CriteoBidResponse.class);
58+
59+
return CompositeBidderResponse.builder()
60+
.bids(extractBids(bidResponse))
61+
.igi(extractIgi(bidResponse))
62+
.build();
6163
} catch (DecodeException | PreBidException e) {
6264
return CompositeBidderResponse.withError(BidderError.badServerResponse(e.getMessage()));
6365
}
@@ -105,21 +107,11 @@ private ObjectNode makeExt(String networkName) {
105107
.build());
106108
}
107109

108-
private static List<FledgeAuctionConfig> extractFledge(CriteoBidResponse bidResponse) {
109-
final List<FledgeAuctionConfig> fledgeConfigs = Optional.ofNullable(bidResponse)
110+
private static List<ExtIgi> extractIgi(CriteoBidResponse bidResponse) {
111+
return Optional.ofNullable(bidResponse)
110112
.map(CriteoBidResponse::getExt)
111113
.map(CriteoExtBidResponse::getIgi)
112114
.filter(CollectionUtils::isNotEmpty)
113-
.orElse(Collections.emptyList())
114-
.stream()
115-
.filter(igi -> CollectionUtils.isNotEmpty(igi.getIgs()) && igi.getIgs().getFirst() != null)
116-
.map(igi -> FledgeAuctionConfig.builder()
117-
.impId(igi.getImpId())
118-
.bidder(BIDDER_NAME)
119-
.config(igi.getIgs().getFirst().getConfig())
120-
.build())
121-
.toList();
122-
123-
return CollectionUtils.isEmpty(fledgeConfigs) ? null : fledgeConfigs;
115+
.orElse(Collections.emptyList());
124116
}
125117
}
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
package org.prebid.server.bidder.criteo;
22

33
import lombok.Value;
4+
import org.prebid.server.proto.openrtb.ext.response.ExtIgi;
45

56
import java.util.List;
67

78
@Value(staticConstructor = "of")
89
public class CriteoExtBidResponse {
910

10-
List<CriteoIgiExtBidResponse> igi;
11+
List<ExtIgi> igi;
1112
}

src/main/java/org/prebid/server/bidder/criteo/CriteoIgiExtBidResponse.java

Lines changed: 0 additions & 13 deletions
This file was deleted.

0 commit comments

Comments
 (0)