Skip to content
Merged
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
13 changes: 11 additions & 2 deletions src/main/java/org/prebid/server/cache/CoreCacheService.java
Original file line number Diff line number Diff line change
Expand Up @@ -219,11 +219,12 @@ public Future<BidCacheResponse> cachePutObjects(List<BidPutObject> bidPutObjects
Boolean isEventsEnabled,
Set<String> biddersAllowingVastUpdate,
String accountId,
Integer accountTtl,
String integration,
Timeout timeout) {

final List<CachedCreative> cachedCreatives =
updatePutObjects(bidPutObjects, isEventsEnabled, biddersAllowingVastUpdate, accountId, integration);
final List<CachedCreative> cachedCreatives = updatePutObjects(
bidPutObjects, isEventsEnabled, biddersAllowingVastUpdate, accountId, accountTtl, integration);

updateCreativeMetrics(
cachedCreatives,
Expand All @@ -237,6 +238,7 @@ private List<CachedCreative> updatePutObjects(List<BidPutObject> bidPutObjects,
Boolean isEventsEnabled,
Set<String> allowedBidders,
String accountId,
Integer accountTtl,
String integration) {

return bidPutObjects.stream()
Expand All @@ -251,11 +253,18 @@ private List<CachedCreative> updatePutObjects(List<BidPutObject> bidPutObjects,
putObject,
accountId,
integration))
.ttlseconds(resolveVtrackTtl(putObject.getTtlseconds(), accountTtl))
.build())
.map(payload -> CachedCreative.of(payload, creativeSizeFromTextNode(payload.getValue())))
.toList();
}

private static Integer resolveVtrackTtl(Integer initialObjectTtl, Integer initialAccountTtl) {
final Integer accountTtl = initialAccountTtl != null && initialAccountTtl > 0 ? initialAccountTtl : null;
final Integer objectTtl = initialObjectTtl != null && initialObjectTtl > 0 ? initialObjectTtl : null;
return ObjectUtils.min(objectTtl, accountTtl);
}

public Future<CacheServiceResult> cacheBidsOpenrtb(List<BidInfo> bidsToCache,
AuctionContext auctionContext,
CacheContext cacheContext,
Expand Down
14 changes: 12 additions & 2 deletions src/main/java/org/prebid/server/handler/PostVtrackHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,15 @@
import org.prebid.server.settings.model.Account;
import org.prebid.server.settings.model.AccountAuctionConfig;
import org.prebid.server.settings.model.AccountEventsConfig;
import org.prebid.server.settings.model.AccountVtrackConfig;
import org.prebid.server.util.HttpUtil;
import org.prebid.server.vertx.verticles.server.HttpEndpoint;
import org.prebid.server.vertx.verticles.server.application.ApplicationResource;

import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;

Expand Down Expand Up @@ -180,10 +182,12 @@ private void handleAccountResult(AsyncResult<Account> asyncAccount,
respondWithServerError(routingContext, "Error occurred while fetching account", asyncAccount.cause());
} else {
// insert impression tracking if account allows events and bidder allows VAST modification
final Boolean isEventEnabled = accountEventsEnabled(asyncAccount.result());
final Account account = asyncAccount.result();
final Boolean isEventEnabled = accountEventsEnabled(account);
final Integer accountTtl = accountVtrackTtl(account);
final Set<String> allowedBidders = biddersAllowingVastUpdate(vtrackPuts);
coreCacheService.cachePutObjects(
vtrackPuts, isEventEnabled, allowedBidders, accountId, integration, timeout)
vtrackPuts, isEventEnabled, allowedBidders, accountId, accountTtl, integration, timeout)
.onComplete(asyncCache -> handleCacheResult(asyncCache, routingContext));
}
}
Expand All @@ -196,6 +200,12 @@ private static Boolean accountEventsEnabled(Account account) {
return accountEventsConfig != null ? accountEventsConfig.getEnabled() : null;
}

private static Integer accountVtrackTtl(Account account) {
return Optional.ofNullable(account.getVtrack())
.map(AccountVtrackConfig::getTtl)
.orElse(null);
}

/**
* Returns list of bidders that allow VAST XML modification.
*/
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/org/prebid/server/settings/model/Account.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ public class Account {
@JsonAlias("alternate-bidder-codes")
AccountAlternateBidderCodes alternateBidderCodes;

AccountVtrackConfig vtrack;

public static Account empty(String id) {
return Account.builder().id(id).build();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package org.prebid.server.settings.model;

import lombok.Value;

@Value(staticConstructor = "of")
public class AccountVtrackConfig {

Integer ttl;
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ class AccountConfig {
AlternateBidderCodes alternateBidderCodes
@JsonProperty("alternate_bidder_codes")
AlternateBidderCodes alternateBidderCodesSnakeCase
AccountVtrackConfig vtrack

static getDefaultAccountConfig() {
new AccountConfig(status: AccountStatus.ACTIVE)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package org.prebid.server.functional.model.config

import groovy.transform.ToString

@ToString(includeNames = true, ignoreNulls = true)
class AccountVtrackConfig {

Integer ttl
}
Original file line number Diff line number Diff line change
Expand Up @@ -215,7 +215,7 @@ class PrebidServerService implements ObjectMapperWrapper {
}

PrebidCacheResponse sendPostVtrackRequest(VtrackRequest request, String account) {
def response = given(requestSpecification).queryParam("a", account)
def response = given(requestSpecification).queryParams(["a": account])
.body(request)
.post(VTRACK_ENDPOINT)

Expand Down
Loading
Loading