Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions sample/sample-app-settings.yaml

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package org.prebid.server.analytics.reporter.feedback;

import com.iab.openrtb.request.Imp;

import java.math.BigDecimal;

public class Feedback {
public Feedback(String _impressionId, String _bidder, BigDecimal _revenue) {
this._impressionId = _impressionId;
this._bidder = _bidder;
this._revenue = _revenue;
}

private int _siteId;

private String _country;

private String _platform;

private String _networkAdUnit;

private String _impressionId;

private String _bidder;

private BigDecimal _revenue;

public void sendFeedback()
{
//send feedback here
}


public String getImpId() {
return this._impressionId;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package org.prebid.server.analytics.reporter.feedback;

import com.fasterxml.jackson.databind.node.ObjectNode;
import com.iab.openrtb.request.BidRequest;
import com.iab.openrtb.request.Imp;
import com.iab.openrtb.response.Bid;
import io.vertx.core.Future;
import io.vertx.core.json.JsonObject;
import org.prebid.server.analytics.AnalyticsReporter;
import org.prebid.server.analytics.model.AuctionEvent;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class FeedbackAnalyticsReporter implements AnalyticsReporter {
@Override
public <T> Future<Void> processEvent(T event) {

if (event instanceof AuctionEvent auctionEvent) {

List<Imp> bidRequests = auctionEvent.getAuctionContext().getBidRequest().getImp();

Map<String, String> requestProperties = new HashMap<>();
try {
bidRequests.forEach(bid -> {
requestProperties.put(bid.getId(), String.valueOf(bid.getExt().get("context").get("data").get("adslot")));
});

auctionEvent.getBidResponse().getSeatbid().forEach(seatBid -> {
Bid bid = seatBid.getBid().get(0);
String impId = bid.getImpid();
String networkAdUnit = requestProperties.get(impId);
Feedback fb = new Feedback(networkAdUnit, seatBid.getSeat(), seatBid.getBid().get(0).getPrice());
fb.sendFeedback();
});
}
catch (Exception ex)
{
ex.getMessage();
}


}


//add dat
return Future.succeededFuture();
}

@Override
public int vendorId() {
return 0;
}

@Override
public String name() {
return "Feedback Analytics Reporter!";

}
}
77 changes: 77 additions & 0 deletions src/main/java/org/prebid/server/auction/ApPostProcessor.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
package org.prebid.server.auction;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.iab.openrtb.request.BidRequest;
import com.iab.openrtb.response.BidResponse;
import com.iab.openrtb.response.SeatBid;
import io.vertx.core.Future;
import io.vertx.core.json.JsonObject;
import org.prebid.server.cookie.UidsCookie;
import org.prebid.server.model.HttpRequestContext;
import org.prebid.server.proto.response.AmpResponse;
import org.prebid.server.settings.model.Account;

import javax.management.ObjectName;
import java.util.List;
import java.util.Map;
import java.util.Objects;

public class ApPostProcessor implements BidResponsePostProcessor {

public ApPostProcessor()
{
System.out.println("in constructor");
}

@Override
public Future<BidResponse> postProcess(HttpRequestContext httpRequest, UidsCookie uidsCookie,
BidRequest bidRequest, BidResponse bidResponse, Account account) {

List<SeatBid> seatBids = bidResponse.getSeatbid();
if(!seatBids.isEmpty()) {
seatBids.forEach(seatBid -> {
try {
modifyBidTargeting(seatBid);
} catch (JsonProcessingException e) {
return Future.succeededFuture(bidResponse);
}

});
}


return Future.succeededFuture(bidResponse);
}


public SeatBid modifyBidTargeting(SeatBid ogseatBid) throws JsonProcessingException {
ogseatBid.getBid().forEach(bid -> {
JsonObject newPrebid = JsonObject.mapFrom(bid.getExt().get("prebid"));
JsonObject targeting = newPrebid.getJsonObject("targeting");
targeting.put("ap_hb_pb",targeting.getValue("hb_pb"));
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should be hb_ap_pb.
Also move these strings to constants

targeting.remove("hb_pb");
targeting.put("ap_hb_bidder",targeting.getValue("hb_bidder"));
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should be hb_ap_bidder.
Also move these strings to constants

targeting.remove("hb_bidder");
targeting.put("ap_hb_size",targeting.getValue("hb_size"));
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should be hb_ap_size.
Also move these strings to constants

targeting.remove("hb_size");

JsonNode newPrebidNode = null;
try {
newPrebidNode = new ObjectMapper().readTree(newPrebid.toString());
} catch (JsonProcessingException e) {

}

bid.getExt().replace("prebid",newPrebidNode);


});

return ogseatBid;
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import lombok.NoArgsConstructor;
import org.prebid.server.analytics.AnalyticsReporter;
import org.prebid.server.analytics.reporter.AnalyticsReporterDelegator;
import org.prebid.server.analytics.reporter.feedback.FeedbackAnalyticsReporter;
import org.prebid.server.analytics.reporter.log.LogAnalyticsReporter;
import org.prebid.server.analytics.reporter.pubstack.PubstackAnalyticsReporter;
import org.prebid.server.analytics.reporter.pubstack.model.PubstackAnalyticsProperties;
Expand Down Expand Up @@ -119,5 +120,14 @@ private static class PubstackBufferProperties {
@NotNull
Long reportTtlMs;
}


}

@Bean
@ConditionalOnProperty(prefix = "analytics.feedback", name = "enabled", havingValue = "true")
FeedbackAnalyticsReporter AdpushupFeedbackAdapter()
{
return new FeedbackAnalyticsReporter();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import io.vertx.core.http.HttpClientOptions;
import io.vertx.core.net.JksOptions;
import org.prebid.server.auction.AmpResponsePostProcessor;
import org.prebid.server.auction.ApPostProcessor;
import org.prebid.server.auction.BidResponseCreator;
import org.prebid.server.auction.BidResponsePostProcessor;
import org.prebid.server.auction.DebugResolver;
Expand Down Expand Up @@ -95,6 +96,7 @@
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.context.annotation.Scope;
import org.springframework.context.annotation.ScopedProxyMode;

Expand Down Expand Up @@ -892,6 +894,10 @@ ExternalConversionProperties externalConversionProperties(
mapper);
}

@Bean
@Primary
ApPostProcessor apPostProcessor() { return new ApPostProcessor(); }

@Bean
HttpInteractionLogger httpInteractionLogger(JacksonMapper mapper) {
return new HttpInteractionLogger(mapper);
Expand Down