diff --git a/sample/sample-app-settings.yaml b/sample/sample-app-settings.yaml deleted file mode 100644 index 5b3303a663c..00000000000 --- a/sample/sample-app-settings.yaml +++ /dev/null @@ -1,2 +0,0 @@ -accounts: - - id: 1001 diff --git a/src/main/java/org/prebid/server/analytics/reporter/feedback/Feedback.java b/src/main/java/org/prebid/server/analytics/reporter/feedback/Feedback.java new file mode 100644 index 00000000000..82ab13272da --- /dev/null +++ b/src/main/java/org/prebid/server/analytics/reporter/feedback/Feedback.java @@ -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; + } +} diff --git a/src/main/java/org/prebid/server/analytics/reporter/feedback/FeedbackAnalyticsReporter.java b/src/main/java/org/prebid/server/analytics/reporter/feedback/FeedbackAnalyticsReporter.java new file mode 100644 index 00000000000..c8b226904af --- /dev/null +++ b/src/main/java/org/prebid/server/analytics/reporter/feedback/FeedbackAnalyticsReporter.java @@ -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 Future processEvent(T event) { + + if (event instanceof AuctionEvent auctionEvent) { + + List bidRequests = auctionEvent.getAuctionContext().getBidRequest().getImp(); + + Map 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!"; + + } +} diff --git a/src/main/java/org/prebid/server/auction/ApPostProcessor.java b/src/main/java/org/prebid/server/auction/ApPostProcessor.java new file mode 100644 index 00000000000..02eadfdef80 --- /dev/null +++ b/src/main/java/org/prebid/server/auction/ApPostProcessor.java @@ -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 postProcess(HttpRequestContext httpRequest, UidsCookie uidsCookie, + BidRequest bidRequest, BidResponse bidResponse, Account account) { + + List 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")); + targeting.remove("hb_pb"); + targeting.put("ap_hb_bidder",targeting.getValue("hb_bidder")); + targeting.remove("hb_bidder"); + targeting.put("ap_hb_size",targeting.getValue("hb_size")); + targeting.remove("hb_size"); + + JsonNode newPrebidNode = null; + try { + newPrebidNode = new ObjectMapper().readTree(newPrebid.toString()); + } catch (JsonProcessingException e) { + + } + + bid.getExt().replace("prebid",newPrebidNode); + + + }); + + return ogseatBid; + } + + +} diff --git a/src/main/java/org/prebid/server/spring/config/AnalyticsConfiguration.java b/src/main/java/org/prebid/server/spring/config/AnalyticsConfiguration.java index 180ce72421a..1b72f9cb0c4 100644 --- a/src/main/java/org/prebid/server/spring/config/AnalyticsConfiguration.java +++ b/src/main/java/org/prebid/server/spring/config/AnalyticsConfiguration.java @@ -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; @@ -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(); } } diff --git a/src/main/java/org/prebid/server/spring/config/ServiceConfiguration.java b/src/main/java/org/prebid/server/spring/config/ServiceConfiguration.java index dee3006e154..ef9b326a31a 100644 --- a/src/main/java/org/prebid/server/spring/config/ServiceConfiguration.java +++ b/src/main/java/org/prebid/server/spring/config/ServiceConfiguration.java @@ -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; @@ -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; @@ -892,6 +894,10 @@ ExternalConversionProperties externalConversionProperties( mapper); } + @Bean + @Primary + ApPostProcessor apPostProcessor() { return new ApPostProcessor(); } + @Bean HttpInteractionLogger httpInteractionLogger(JacksonMapper mapper) { return new HttpInteractionLogger(mapper);