diff --git a/src/main/java/org/prebid/server/analytics/reporter/pubstack/PubstackAnalyticsReporter.java b/src/main/java/org/prebid/server/analytics/reporter/pubstack/PubstackAnalyticsReporter.java index 47e5a506a5d..87e52034472 100644 --- a/src/main/java/org/prebid/server/analytics/reporter/pubstack/PubstackAnalyticsReporter.java +++ b/src/main/java/org/prebid/server/analytics/reporter/pubstack/PubstackAnalyticsReporter.java @@ -22,8 +22,8 @@ import org.prebid.server.json.JacksonMapper; import org.prebid.server.util.HttpUtil; import org.prebid.server.vertx.Initializable; -import org.prebid.server.vertx.http.HttpClient; -import org.prebid.server.vertx.http.model.HttpClientResponse; +import org.prebid.server.vertx.httpclient.HttpClient; +import org.prebid.server.vertx.httpclient.model.HttpClientResponse; import java.util.Arrays; import java.util.Collections; diff --git a/src/main/java/org/prebid/server/analytics/reporter/pubstack/PubstackEventHandler.java b/src/main/java/org/prebid/server/analytics/reporter/pubstack/PubstackEventHandler.java index 235677ad61e..0dd4eb229e9 100644 --- a/src/main/java/org/prebid/server/analytics/reporter/pubstack/PubstackEventHandler.java +++ b/src/main/java/org/prebid/server/analytics/reporter/pubstack/PubstackEventHandler.java @@ -13,8 +13,8 @@ import org.prebid.server.exception.PreBidException; import org.prebid.server.json.JacksonMapper; import org.prebid.server.util.HttpUtil; -import org.prebid.server.vertx.http.HttpClient; -import org.prebid.server.vertx.http.model.HttpClientResponse; +import org.prebid.server.vertx.httpclient.HttpClient; +import org.prebid.server.vertx.httpclient.model.HttpClientResponse; import java.io.ByteArrayOutputStream; import java.io.IOException; diff --git a/src/main/java/org/prebid/server/auction/requestfactory/Ortb2RequestFactory.java b/src/main/java/org/prebid/server/auction/requestfactory/Ortb2RequestFactory.java index 61fe2069a60..7d819f82618 100644 --- a/src/main/java/org/prebid/server/auction/requestfactory/Ortb2RequestFactory.java +++ b/src/main/java/org/prebid/server/auction/requestfactory/Ortb2RequestFactory.java @@ -233,7 +233,6 @@ public Future enrichBidRequestWithGeolocationData(AuctionContext auc .build(); return Future.succeededFuture(bidRequest.toBuilder().device(updatedDevice).build()); - } public Future enrichBidRequestWithAccountAndPrivacyData(AuctionContext auctionContext) { @@ -259,7 +258,6 @@ public Future enrichBidRequestWithAccountAndPrivacyData(AuctionConte .device(ObjectUtils.defaultIfNull(enrichedDevice, device)) .regs(ObjectUtils.defaultIfNull(enrichedRegs, regs)) .build()); - } private static Regs enrichRegs(Regs regs, PrivacyContext privacyContext, Account account) { diff --git a/src/main/java/org/prebid/server/bidder/BidderErrorNotifier.java b/src/main/java/org/prebid/server/bidder/BidderErrorNotifier.java index 38fa9ec8ede..4fde2bbbcd5 100644 --- a/src/main/java/org/prebid/server/bidder/BidderErrorNotifier.java +++ b/src/main/java/org/prebid/server/bidder/BidderErrorNotifier.java @@ -7,8 +7,8 @@ import org.prebid.server.bidder.model.HttpRequest; import org.prebid.server.log.ConditionalLogger; import org.prebid.server.metric.Metrics; -import org.prebid.server.vertx.http.HttpClient; -import org.prebid.server.vertx.http.model.HttpClientResponse; +import org.prebid.server.vertx.httpclient.HttpClient; +import org.prebid.server.vertx.httpclient.model.HttpClientResponse; import java.util.Objects; diff --git a/src/main/java/org/prebid/server/bidder/HttpBidderRequester.java b/src/main/java/org/prebid/server/bidder/HttpBidderRequester.java index 42976d52256..2514c6c86df 100644 --- a/src/main/java/org/prebid/server/bidder/HttpBidderRequester.java +++ b/src/main/java/org/prebid/server/bidder/HttpBidderRequester.java @@ -32,8 +32,8 @@ import org.prebid.server.proto.openrtb.ext.response.ExtHttpCall; import org.prebid.server.proto.openrtb.ext.response.FledgeAuctionConfig; import org.prebid.server.util.HttpUtil; -import org.prebid.server.vertx.http.HttpClient; -import org.prebid.server.vertx.http.model.HttpClientResponse; +import org.prebid.server.vertx.httpclient.HttpClient; +import org.prebid.server.vertx.httpclient.model.HttpClientResponse; import java.io.ByteArrayOutputStream; import java.io.IOException; diff --git a/src/main/java/org/prebid/server/cache/CacheService.java b/src/main/java/org/prebid/server/cache/CacheService.java index 9656dd38501..cb4c48a6c6c 100644 --- a/src/main/java/org/prebid/server/cache/CacheService.java +++ b/src/main/java/org/prebid/server/cache/CacheService.java @@ -43,8 +43,8 @@ import org.prebid.server.util.HttpUtil; import org.prebid.server.util.ObjectUtil; import org.prebid.server.vast.VastModifier; -import org.prebid.server.vertx.http.HttpClient; -import org.prebid.server.vertx.http.model.HttpClientResponse; +import org.prebid.server.vertx.httpclient.HttpClient; +import org.prebid.server.vertx.httpclient.model.HttpClientResponse; import java.net.MalformedURLException; import java.net.URL; diff --git a/src/main/java/org/prebid/server/currency/CurrencyConversionService.java b/src/main/java/org/prebid/server/currency/CurrencyConversionService.java index 87f1916c640..9b6d81f77ee 100644 --- a/src/main/java/org/prebid/server/currency/CurrencyConversionService.java +++ b/src/main/java/org/prebid/server/currency/CurrencyConversionService.java @@ -17,8 +17,8 @@ import org.prebid.server.spring.config.model.ExternalConversionProperties; import org.prebid.server.util.HttpUtil; import org.prebid.server.vertx.Initializable; -import org.prebid.server.vertx.http.HttpClient; -import org.prebid.server.vertx.http.model.HttpClientResponse; +import org.prebid.server.vertx.httpclient.HttpClient; +import org.prebid.server.vertx.httpclient.model.HttpClientResponse; import java.io.IOException; import java.math.BigDecimal; diff --git a/src/main/java/org/prebid/server/floors/PriceFloorFetcher.java b/src/main/java/org/prebid/server/floors/PriceFloorFetcher.java index 3d88078c5a8..39f95f63860 100644 --- a/src/main/java/org/prebid/server/floors/PriceFloorFetcher.java +++ b/src/main/java/org/prebid/server/floors/PriceFloorFetcher.java @@ -31,8 +31,8 @@ import org.prebid.server.settings.model.AccountPriceFloorsFetchConfig; import org.prebid.server.util.HttpUtil; import org.prebid.server.util.ObjectUtil; -import org.prebid.server.vertx.http.HttpClient; -import org.prebid.server.vertx.http.model.HttpClientResponse; +import org.prebid.server.vertx.httpclient.HttpClient; +import org.prebid.server.vertx.httpclient.model.HttpClientResponse; import java.util.Map; import java.util.Objects; diff --git a/src/main/java/org/prebid/server/handler/BidderParamHandler.java b/src/main/java/org/prebid/server/handler/BidderParamHandler.java index 26366130cd1..f27137a2e1e 100644 --- a/src/main/java/org/prebid/server/handler/BidderParamHandler.java +++ b/src/main/java/org/prebid/server/handler/BidderParamHandler.java @@ -1,14 +1,18 @@ package org.prebid.server.handler; -import io.vertx.core.Handler; +import io.vertx.core.http.HttpMethod; import io.vertx.ext.web.RoutingContext; import org.prebid.server.model.Endpoint; import org.prebid.server.util.HttpUtil; import org.prebid.server.validation.BidderParamValidator; +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; -public class BidderParamHandler implements Handler { +public class BidderParamHandler implements ApplicationResource { private final BidderParamValidator bidderParamValidator; @@ -16,6 +20,11 @@ public BidderParamHandler(BidderParamValidator bidderParamValidator) { this.bidderParamValidator = Objects.requireNonNull(bidderParamValidator); } + @Override + public List endpoints() { + return Collections.singletonList(HttpEndpoint.of(HttpMethod.GET, Endpoint.bidder_params.value())); + } + @Override public void handle(RoutingContext routingContext) { HttpUtil.executeSafely(routingContext, Endpoint.bidder_params, diff --git a/src/main/java/org/prebid/server/handler/CookieSyncHandler.java b/src/main/java/org/prebid/server/handler/CookieSyncHandler.java index c020ea5adde..343aa09fcef 100644 --- a/src/main/java/org/prebid/server/handler/CookieSyncHandler.java +++ b/src/main/java/org/prebid/server/handler/CookieSyncHandler.java @@ -3,8 +3,8 @@ import io.netty.handler.codec.http.HttpHeaderValues; import io.netty.handler.codec.http.HttpResponseStatus; import io.vertx.core.Future; -import io.vertx.core.Handler; import io.vertx.core.buffer.Buffer; +import io.vertx.core.http.HttpMethod; import io.vertx.core.logging.Logger; import io.vertx.core.logging.LoggerFactory; import io.vertx.ext.web.RoutingContext; @@ -40,12 +40,16 @@ import org.prebid.server.settings.ApplicationSettings; import org.prebid.server.settings.model.Account; 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.ArrayList; +import java.util.Collections; +import java.util.List; import java.util.Objects; import java.util.Optional; -public class CookieSyncHandler implements Handler { +public class CookieSyncHandler implements ApplicationResource { private static final Logger logger = LoggerFactory.getLogger(CookieSyncHandler.class); private static final ConditionalLogger BAD_REQUEST_LOGGER = new ConditionalLogger(logger); @@ -93,6 +97,11 @@ public CookieSyncHandler(long defaultTimeout, this.mapper = Objects.requireNonNull(mapper); } + @Override + public List endpoints() { + return Collections.singletonList(HttpEndpoint.of(HttpMethod.POST, Endpoint.cookie_sync.value())); + } + @Override public void handle(RoutingContext routingContext) { metrics.updateCookieSyncRequestMetric(); diff --git a/src/main/java/org/prebid/server/handler/CustomizedAdminEndpoint.java b/src/main/java/org/prebid/server/handler/CustomizedAdminEndpoint.java deleted file mode 100644 index 4ac49624277..00000000000 --- a/src/main/java/org/prebid/server/handler/CustomizedAdminEndpoint.java +++ /dev/null @@ -1,79 +0,0 @@ -package org.prebid.server.handler; - -import io.vertx.core.Future; -import io.vertx.core.Handler; -import io.vertx.ext.auth.AuthProvider; -import io.vertx.ext.web.Router; -import io.vertx.ext.web.RoutingContext; -import io.vertx.ext.web.handler.BasicAuthHandler; -import org.apache.commons.collections4.MapUtils; -import org.apache.commons.lang3.StringUtils; - -import java.util.Map; -import java.util.Objects; - -public class CustomizedAdminEndpoint { - - private final String path; - private final Handler handler; - private final boolean isOnApplicationPort; - private final boolean isProtected; - private Map credentials; - - public CustomizedAdminEndpoint(String path, Handler handler, boolean isOnApplicationPort, - boolean isProtected) { - this.path = Objects.requireNonNull(path); - this.handler = Objects.requireNonNull(handler); - this.isOnApplicationPort = isOnApplicationPort; - this.isProtected = isProtected; - } - - public CustomizedAdminEndpoint withCredentials(Map credentials) { - this.credentials = credentials; - return this; - } - - public boolean isOnApplicationPort() { - return isOnApplicationPort; - } - - public void router(Router router) { - if (isProtected) { - routeToHandlerWithCredentials(router); - } else { - routeToHandler(router); - } - } - - private void routeToHandlerWithCredentials(Router router) { - if (credentials == null) { - throw new IllegalArgumentException("Credentials for admin endpoint is empty."); - } - - final AuthProvider authProvider = createAuthProvider(credentials); - router.route(path).handler(BasicAuthHandler.create(authProvider)).handler(handler); - } - - private void routeToHandler(Router router) { - router.route(path).handler(handler); - } - - private AuthProvider createAuthProvider(Map credentials) { - return (authInfo, resultHandler) -> { - if (MapUtils.isEmpty(credentials)) { - resultHandler.handle(Future.failedFuture("Credentials not set in configuration.")); - return; - } - - final String requestUsername = authInfo.getString("username"); - final String requestPassword = StringUtils.chomp(authInfo.getString("password")); - - final String storedPassword = credentials.get(requestUsername); - if (StringUtils.isNotBlank(requestPassword) && Objects.equals(storedPassword, requestPassword)) { - resultHandler.handle(Future.succeededFuture()); - } else { - resultHandler.handle(Future.failedFuture("No such user, or password incorrect.")); - } - }; - } -} diff --git a/src/main/java/org/prebid/server/handler/GetuidsHandler.java b/src/main/java/org/prebid/server/handler/GetuidsHandler.java index deb3822e4a9..705c5f94e27 100644 --- a/src/main/java/org/prebid/server/handler/GetuidsHandler.java +++ b/src/main/java/org/prebid/server/handler/GetuidsHandler.java @@ -1,7 +1,7 @@ package org.prebid.server.handler; import com.fasterxml.jackson.annotation.JsonInclude; -import io.vertx.core.Handler; +import io.vertx.core.http.HttpMethod; import io.vertx.ext.web.RoutingContext; import lombok.AllArgsConstructor; import lombok.Value; @@ -10,12 +10,16 @@ import org.prebid.server.json.JacksonMapper; import org.prebid.server.model.Endpoint; 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.Map; import java.util.Objects; import java.util.stream.Collectors; -public class GetuidsHandler implements Handler { +public class GetuidsHandler implements ApplicationResource { private final UidsCookieService uidsCookieService; private final JacksonMapper mapper; @@ -25,6 +29,11 @@ public GetuidsHandler(UidsCookieService uidsCookieService, JacksonMapper mapper) this.mapper = Objects.requireNonNull(mapper); } + @Override + public List endpoints() { + return Collections.singletonList(HttpEndpoint.of(HttpMethod.GET, Endpoint.getuids.value())); + } + @Override public void handle(RoutingContext routingContext) { final Map uids = uidsFrom(routingContext); diff --git a/src/main/java/org/prebid/server/handler/NotificationEventHandler.java b/src/main/java/org/prebid/server/handler/NotificationEventHandler.java index ef26b9d09da..61c986c12cc 100644 --- a/src/main/java/org/prebid/server/handler/NotificationEventHandler.java +++ b/src/main/java/org/prebid/server/handler/NotificationEventHandler.java @@ -3,9 +3,9 @@ import io.netty.handler.codec.http.HttpResponseStatus; import io.vertx.core.AsyncResult; import io.vertx.core.Future; -import io.vertx.core.Handler; import io.vertx.core.buffer.Buffer; import io.vertx.core.http.HttpHeaders; +import io.vertx.core.http.HttpMethod; import io.vertx.core.http.HttpServerResponse; import io.vertx.core.logging.Logger; import io.vertx.core.logging.LoggerFactory; @@ -29,15 +29,19 @@ import org.prebid.server.settings.model.AccountEventsConfig; import org.prebid.server.util.HttpUtil; import org.prebid.server.util.ResourceUtil; +import org.prebid.server.vertx.verticles.server.HttpEndpoint; +import org.prebid.server.vertx.verticles.server.application.ApplicationResource; import java.io.IOException; +import java.util.Collections; +import java.util.List; import java.util.Objects; /** * Accepts notifications from browsers and mobile application for further processing by {@link AnalyticsReporter} * and responding with tracking pixel when requested. */ -public class NotificationEventHandler implements Handler { +public class NotificationEventHandler implements ApplicationResource { private static final Logger logger = LoggerFactory.getLogger(NotificationEventHandler.class); @@ -77,6 +81,11 @@ private static TrackingPixel createTrackingPixel() { return TrackingPixel.of(PNG_CONTENT_TYPE, bytes); } + @Override + public List endpoints() { + return Collections.singletonList(HttpEndpoint.of(HttpMethod.GET, Endpoint.event.value())); + } + @Override public void handle(RoutingContext routingContext) { try { diff --git a/src/main/java/org/prebid/server/handler/OptoutHandler.java b/src/main/java/org/prebid/server/handler/OptoutHandler.java index c4360fb003a..e8ee98b2683 100644 --- a/src/main/java/org/prebid/server/handler/OptoutHandler.java +++ b/src/main/java/org/prebid/server/handler/OptoutHandler.java @@ -2,8 +2,8 @@ import io.netty.handler.codec.http.HttpResponseStatus; import io.vertx.core.AsyncResult; -import io.vertx.core.Handler; import io.vertx.core.http.Cookie; +import io.vertx.core.http.HttpMethod; import io.vertx.core.logging.Logger; import io.vertx.core.logging.LoggerFactory; import io.vertx.ext.web.RoutingContext; @@ -14,12 +14,15 @@ import org.prebid.server.optout.GoogleRecaptchaVerifier; import org.prebid.server.optout.model.RecaptchaResponse; 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.net.MalformedURLException; import java.net.URL; +import java.util.List; import java.util.Objects; -public class OptoutHandler implements Handler { +public class OptoutHandler implements ApplicationResource { private static final Logger logger = LoggerFactory.getLogger(OptoutHandler.class); @@ -41,6 +44,13 @@ public OptoutHandler(GoogleRecaptchaVerifier googleRecaptchaVerifier, UidsCookie this.optinUrl = Objects.requireNonNull(optinUrl); } + @Override + public List endpoints() { + return List.of( + HttpEndpoint.of(HttpMethod.GET, Endpoint.optout.value()), + HttpEndpoint.of(HttpMethod.POST, Endpoint.optout.value())); + } + @Override public void handle(RoutingContext routingContext) { final String recaptcha = getRequestParam(routingContext, RECAPTCHA_PARAM); diff --git a/src/main/java/org/prebid/server/handler/SetuidHandler.java b/src/main/java/org/prebid/server/handler/SetuidHandler.java index 55edbb5bc17..3f119079d83 100644 --- a/src/main/java/org/prebid/server/handler/SetuidHandler.java +++ b/src/main/java/org/prebid/server/handler/SetuidHandler.java @@ -3,9 +3,9 @@ import io.netty.handler.codec.http.HttpResponseStatus; import io.vertx.core.AsyncResult; import io.vertx.core.Future; -import io.vertx.core.Handler; import io.vertx.core.http.Cookie; import io.vertx.core.http.HttpHeaders; +import io.vertx.core.http.HttpMethod; import io.vertx.core.http.HttpServerRequest; import io.vertx.core.http.HttpServerResponse; import io.vertx.core.logging.Logger; @@ -51,6 +51,8 @@ import org.prebid.server.settings.ApplicationSettings; import org.prebid.server.settings.model.Account; 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; @@ -63,7 +65,7 @@ import java.util.stream.Collectors; import java.util.stream.Stream; -public class SetuidHandler implements Handler { +public class SetuidHandler implements ApplicationResource { private static final Logger logger = LoggerFactory.getLogger(SetuidHandler.class); @@ -126,6 +128,11 @@ private static Map collectMap(BidderCatalog bidderCa .collect(Collectors.toMap(Usersyncer::getCookieFamilyName, SetuidHandler::preferredUserSyncType)); } + @Override + public List endpoints() { + return Collections.singletonList(HttpEndpoint.of(HttpMethod.GET, Endpoint.setuid.value())); + } + private static UsersyncMethodType preferredUserSyncType(Usersyncer usersyncer) { return Stream.of(usersyncer.getIframe(), usersyncer.getRedirect()) .filter(Objects::nonNull) diff --git a/src/main/java/org/prebid/server/handler/StatusHandler.java b/src/main/java/org/prebid/server/handler/StatusHandler.java index f356971d598..ac4a9983fe7 100644 --- a/src/main/java/org/prebid/server/handler/StatusHandler.java +++ b/src/main/java/org/prebid/server/handler/StatusHandler.java @@ -2,7 +2,7 @@ import io.netty.handler.codec.http.HttpHeaderValues; import io.netty.handler.codec.http.HttpResponseStatus; -import io.vertx.core.Handler; +import io.vertx.core.http.HttpMethod; import io.vertx.ext.web.RoutingContext; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.health.HealthChecker; @@ -10,13 +10,16 @@ import org.prebid.server.json.JacksonMapper; import org.prebid.server.model.Endpoint; 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.TreeMap; import java.util.stream.Collectors; -public class StatusHandler implements Handler { +public class StatusHandler implements ApplicationResource { private final List healthCheckers; private final JacksonMapper mapper; @@ -26,6 +29,11 @@ public StatusHandler(List healthCheckers, JacksonMapper mapper) { this.mapper = Objects.requireNonNull(mapper); } + @Override + public List endpoints() { + return Collections.singletonList(HttpEndpoint.of(HttpMethod.GET, Endpoint.status.value())); + } + @Override public void handle(RoutingContext routingContext) { if (CollectionUtils.isEmpty(healthCheckers)) { diff --git a/src/main/java/org/prebid/server/handler/VtrackHandler.java b/src/main/java/org/prebid/server/handler/VtrackHandler.java index d433867b01e..3a50ee05cfd 100644 --- a/src/main/java/org/prebid/server/handler/VtrackHandler.java +++ b/src/main/java/org/prebid/server/handler/VtrackHandler.java @@ -5,8 +5,8 @@ import io.netty.handler.codec.http.HttpResponseStatus; import io.vertx.core.AsyncResult; import io.vertx.core.Future; -import io.vertx.core.Handler; import io.vertx.core.buffer.Buffer; +import io.vertx.core.http.HttpMethod; import io.vertx.core.logging.Logger; import io.vertx.core.logging.LoggerFactory; import io.vertx.ext.web.RoutingContext; @@ -30,13 +30,16 @@ import org.prebid.server.settings.model.AccountAuctionConfig; import org.prebid.server.settings.model.AccountEventsConfig; 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.Set; import java.util.stream.Collectors; -public class VtrackHandler implements Handler { +public class VtrackHandler implements ApplicationResource { private static final Logger logger = LoggerFactory.getLogger(VtrackHandler.class); @@ -72,6 +75,11 @@ public VtrackHandler(long defaultTimeout, this.mapper = Objects.requireNonNull(mapper); } + @Override + public List endpoints() { + return Collections.singletonList(HttpEndpoint.of(HttpMethod.POST, Endpoint.vtrack.value())); + } + @Override public void handle(RoutingContext routingContext) { final String accountId; diff --git a/src/main/java/org/prebid/server/handler/AccountCacheInvalidationHandler.java b/src/main/java/org/prebid/server/handler/admin/AccountCacheInvalidationHandler.java similarity index 97% rename from src/main/java/org/prebid/server/handler/AccountCacheInvalidationHandler.java rename to src/main/java/org/prebid/server/handler/admin/AccountCacheInvalidationHandler.java index 8ad70ec3bd0..afe07e9aa67 100644 --- a/src/main/java/org/prebid/server/handler/AccountCacheInvalidationHandler.java +++ b/src/main/java/org/prebid/server/handler/admin/AccountCacheInvalidationHandler.java @@ -1,4 +1,4 @@ -package org.prebid.server.handler; +package org.prebid.server.handler.admin; import io.netty.handler.codec.http.HttpResponseStatus; import io.vertx.core.Handler; diff --git a/src/main/java/org/prebid/server/handler/admin/AdminResourceWrapper.java b/src/main/java/org/prebid/server/handler/admin/AdminResourceWrapper.java new file mode 100644 index 00000000000..e75920659d6 --- /dev/null +++ b/src/main/java/org/prebid/server/handler/admin/AdminResourceWrapper.java @@ -0,0 +1,45 @@ +package org.prebid.server.handler.admin; + +import io.vertx.core.Handler; +import io.vertx.ext.web.RoutingContext; +import org.prebid.server.vertx.verticles.server.admin.AdminResource; + +import java.util.Objects; + +public class AdminResourceWrapper implements AdminResource { + + private final String path; + private final Handler handler; + private final boolean isOnApplicationPort; + private final boolean isSecured; + + public AdminResourceWrapper(String path, + boolean isOnApplicationPort, + boolean isProtected, + Handler handler) { + + this.path = Objects.requireNonNull(path); + this.isOnApplicationPort = isOnApplicationPort; + this.isSecured = isProtected; + this.handler = Objects.requireNonNull(handler); + } + + @Override + public String path() { + return path; + } + + public boolean isOnApplicationPort() { + return isOnApplicationPort; + } + + @Override + public boolean isSecured() { + return isSecured; + } + + @Override + public void handle(RoutingContext routingContext) { + handler.handle(routingContext); + } +} diff --git a/src/main/java/org/prebid/server/handler/CollectedMetricsHandler.java b/src/main/java/org/prebid/server/handler/admin/CollectedMetricsHandler.java similarity index 98% rename from src/main/java/org/prebid/server/handler/CollectedMetricsHandler.java rename to src/main/java/org/prebid/server/handler/admin/CollectedMetricsHandler.java index 0a789d87d92..c9db54e21fa 100644 --- a/src/main/java/org/prebid/server/handler/CollectedMetricsHandler.java +++ b/src/main/java/org/prebid/server/handler/admin/CollectedMetricsHandler.java @@ -1,4 +1,4 @@ -package org.prebid.server.handler; +package org.prebid.server.handler.admin; import com.codahale.metrics.Counter; import com.codahale.metrics.Gauge; diff --git a/src/main/java/org/prebid/server/handler/CurrencyRatesHandler.java b/src/main/java/org/prebid/server/handler/admin/CurrencyRatesHandler.java similarity index 98% rename from src/main/java/org/prebid/server/handler/CurrencyRatesHandler.java rename to src/main/java/org/prebid/server/handler/admin/CurrencyRatesHandler.java index fa7d54cafd4..f9b52a807e4 100644 --- a/src/main/java/org/prebid/server/handler/CurrencyRatesHandler.java +++ b/src/main/java/org/prebid/server/handler/admin/CurrencyRatesHandler.java @@ -1,4 +1,4 @@ -package org.prebid.server.handler; +package org.prebid.server.handler.admin; import com.fasterxml.jackson.annotation.JsonProperty; import io.netty.handler.codec.http.HttpHeaderValues; diff --git a/src/main/java/org/prebid/server/handler/HttpInteractionLogHandler.java b/src/main/java/org/prebid/server/handler/admin/HttpInteractionLogHandler.java similarity index 99% rename from src/main/java/org/prebid/server/handler/HttpInteractionLogHandler.java rename to src/main/java/org/prebid/server/handler/admin/HttpInteractionLogHandler.java index a6c17f0c4cd..b3573a5c4c5 100644 --- a/src/main/java/org/prebid/server/handler/HttpInteractionLogHandler.java +++ b/src/main/java/org/prebid/server/handler/admin/HttpInteractionLogHandler.java @@ -1,4 +1,4 @@ -package org.prebid.server.handler; +package org.prebid.server.handler.admin; import io.netty.handler.codec.http.HttpResponseStatus; import io.vertx.core.Handler; diff --git a/src/main/java/org/prebid/server/handler/LoggerControlKnobHandler.java b/src/main/java/org/prebid/server/handler/admin/LoggerControlKnobHandler.java similarity index 98% rename from src/main/java/org/prebid/server/handler/LoggerControlKnobHandler.java rename to src/main/java/org/prebid/server/handler/admin/LoggerControlKnobHandler.java index 61b6e305718..7875c7a52dd 100644 --- a/src/main/java/org/prebid/server/handler/LoggerControlKnobHandler.java +++ b/src/main/java/org/prebid/server/handler/admin/LoggerControlKnobHandler.java @@ -1,4 +1,4 @@ -package org.prebid.server.handler; +package org.prebid.server.handler.admin; import io.netty.handler.codec.http.HttpResponseStatus; import io.vertx.core.Handler; diff --git a/src/main/java/org/prebid/server/handler/SettingsCacheNotificationHandler.java b/src/main/java/org/prebid/server/handler/admin/SettingsCacheNotificationHandler.java similarity index 98% rename from src/main/java/org/prebid/server/handler/SettingsCacheNotificationHandler.java rename to src/main/java/org/prebid/server/handler/admin/SettingsCacheNotificationHandler.java index 08aec26922b..42eb8368bd3 100644 --- a/src/main/java/org/prebid/server/handler/SettingsCacheNotificationHandler.java +++ b/src/main/java/org/prebid/server/handler/admin/SettingsCacheNotificationHandler.java @@ -1,4 +1,4 @@ -package org.prebid.server.handler; +package org.prebid.server.handler.admin; import io.netty.handler.codec.http.HttpResponseStatus; import io.vertx.core.Handler; diff --git a/src/main/java/org/prebid/server/handler/TracerLogHandler.java b/src/main/java/org/prebid/server/handler/admin/TracerLogHandler.java similarity index 98% rename from src/main/java/org/prebid/server/handler/TracerLogHandler.java rename to src/main/java/org/prebid/server/handler/admin/TracerLogHandler.java index 53064a59264..d2414012b60 100644 --- a/src/main/java/org/prebid/server/handler/TracerLogHandler.java +++ b/src/main/java/org/prebid/server/handler/admin/TracerLogHandler.java @@ -1,4 +1,4 @@ -package org.prebid.server.handler; +package org.prebid.server.handler.admin; import io.netty.handler.codec.http.HttpResponseStatus; import io.vertx.core.Handler; diff --git a/src/main/java/org/prebid/server/handler/VersionHandler.java b/src/main/java/org/prebid/server/handler/admin/VersionHandler.java similarity index 98% rename from src/main/java/org/prebid/server/handler/VersionHandler.java rename to src/main/java/org/prebid/server/handler/admin/VersionHandler.java index eeeecae349a..adf8088e423 100644 --- a/src/main/java/org/prebid/server/handler/VersionHandler.java +++ b/src/main/java/org/prebid/server/handler/admin/VersionHandler.java @@ -1,4 +1,4 @@ -package org.prebid.server.handler; +package org.prebid.server.handler.admin; import com.fasterxml.jackson.core.JsonProcessingException; import io.netty.handler.codec.http.HttpResponseStatus; diff --git a/src/main/java/org/prebid/server/handler/info/BidderDetailsHandler.java b/src/main/java/org/prebid/server/handler/info/BidderDetailsHandler.java index 4a35cd8a9fc..007dd187db3 100644 --- a/src/main/java/org/prebid/server/handler/info/BidderDetailsHandler.java +++ b/src/main/java/org/prebid/server/handler/info/BidderDetailsHandler.java @@ -4,7 +4,7 @@ import com.fasterxml.jackson.databind.node.ObjectNode; import io.netty.handler.codec.http.HttpHeaderValues; import io.netty.handler.codec.http.HttpResponseStatus; -import io.vertx.core.Handler; +import io.vertx.core.http.HttpMethod; import io.vertx.ext.web.RoutingContext; import lombok.Value; import org.apache.commons.collections4.map.CaseInsensitiveMap; @@ -13,8 +13,11 @@ import org.prebid.server.json.JacksonMapper; import org.prebid.server.model.Endpoint; 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.Map; import java.util.Objects; import java.util.TreeMap; @@ -22,7 +25,7 @@ import java.util.stream.Collectors; import java.util.stream.Stream; -public class BidderDetailsHandler implements Handler { +public class BidderDetailsHandler implements ApplicationResource { private static final String BIDDER_NAME_PARAM = "bidderName"; private static final String ALL_PARAM_VALUE = "all"; @@ -67,6 +70,12 @@ private ObjectNode allInfos(Map nameToInfo) { return mapper.mapper().valueToTree(new TreeMap<>(nameToInfo)); } + @Override + public List endpoints() { + return Collections.singletonList( + HttpEndpoint.of(HttpMethod.GET, "%s/:%s".formatted(Endpoint.info_bidders.value(), BIDDER_NAME_PARAM))); + } + @Override public void handle(RoutingContext routingContext) { final String bidderName = routingContext.request().getParam(BIDDER_NAME_PARAM); diff --git a/src/main/java/org/prebid/server/handler/info/BiddersHandler.java b/src/main/java/org/prebid/server/handler/info/BiddersHandler.java index a212f2b8c04..ff186e5d63c 100644 --- a/src/main/java/org/prebid/server/handler/info/BiddersHandler.java +++ b/src/main/java/org/prebid/server/handler/info/BiddersHandler.java @@ -2,14 +2,17 @@ import io.netty.handler.codec.http.HttpHeaderValues; import io.netty.handler.codec.http.HttpResponseStatus; -import io.vertx.core.Handler; +import io.vertx.core.http.HttpMethod; import io.vertx.ext.web.RoutingContext; import org.prebid.server.bidder.BidderCatalog; import org.prebid.server.handler.info.filters.BidderInfoFilterStrategy; import org.prebid.server.json.JacksonMapper; import org.prebid.server.model.Endpoint; 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.Set; @@ -17,7 +20,7 @@ import java.util.function.Predicate; import java.util.stream.Collectors; -public class BiddersHandler implements Handler { +public class BiddersHandler implements ApplicationResource { private final BidderCatalog bidderCatalog; private final List filterStrategies; @@ -32,6 +35,11 @@ public BiddersHandler(BidderCatalog bidderCatalog, this.mapper = Objects.requireNonNull(mapper); } + @Override + public List endpoints() { + return Collections.singletonList(HttpEndpoint.of(HttpMethod.GET, Endpoint.info_bidders.value())); + } + @Override public void handle(RoutingContext routingContext) { try { diff --git a/src/main/java/org/prebid/server/handler/openrtb2/AmpHandler.java b/src/main/java/org/prebid/server/handler/openrtb2/AmpHandler.java index 55f61a554f7..e50e6018293 100644 --- a/src/main/java/org/prebid/server/handler/openrtb2/AmpHandler.java +++ b/src/main/java/org/prebid/server/handler/openrtb2/AmpHandler.java @@ -12,8 +12,8 @@ import io.netty.handler.codec.http.HttpResponseStatus; import io.vertx.core.AsyncResult; import io.vertx.core.Future; -import io.vertx.core.Handler; import io.vertx.core.MultiMap; +import io.vertx.core.http.HttpMethod; import io.vertx.core.http.HttpServerResponse; import io.vertx.core.logging.Logger; import io.vertx.core.logging.LoggerFactory; @@ -56,6 +56,8 @@ import org.prebid.server.proto.response.ExtAmpVideoResponse; import org.prebid.server.util.HttpUtil; import org.prebid.server.version.PrebidVersionProvider; +import org.prebid.server.vertx.verticles.server.HttpEndpoint; +import org.prebid.server.vertx.verticles.server.application.ApplicationResource; import java.time.Clock; import java.util.Collections; @@ -67,7 +69,7 @@ import java.util.function.Consumer; import java.util.stream.Collectors; -public class AmpHandler implements Handler { +public class AmpHandler implements ApplicationResource { private static final Logger logger = LoggerFactory.getLogger(AmpHandler.class); private static final ConditionalLogger conditionalLogger = new ConditionalLogger(logger); @@ -115,6 +117,11 @@ public AmpHandler(AmpRequestFactory ampRequestFactory, this.logSamplingRate = logSamplingRate; } + @Override + public List endpoints() { + return Collections.singletonList(HttpEndpoint.of(HttpMethod.GET, Endpoint.openrtb2_amp.value())); + } + @Override public void handle(RoutingContext routingContext) { // Prebid Server interprets request.tmax to be the maximum amount of time that a caller is willing to wait diff --git a/src/main/java/org/prebid/server/handler/openrtb2/AuctionHandler.java b/src/main/java/org/prebid/server/handler/openrtb2/AuctionHandler.java index a7c036a1f4c..c5a463dce95 100644 --- a/src/main/java/org/prebid/server/handler/openrtb2/AuctionHandler.java +++ b/src/main/java/org/prebid/server/handler/openrtb2/AuctionHandler.java @@ -5,8 +5,8 @@ import io.netty.handler.codec.http.HttpHeaderValues; import io.netty.handler.codec.http.HttpResponseStatus; import io.vertx.core.AsyncResult; -import io.vertx.core.Handler; import io.vertx.core.MultiMap; +import io.vertx.core.http.HttpMethod; import io.vertx.core.http.HttpServerResponse; import io.vertx.core.logging.Logger; import io.vertx.core.logging.LoggerFactory; @@ -33,6 +33,8 @@ import org.prebid.server.privacy.model.PrivacyContext; import org.prebid.server.util.HttpUtil; import org.prebid.server.version.PrebidVersionProvider; +import org.prebid.server.vertx.verticles.server.HttpEndpoint; +import org.prebid.server.vertx.verticles.server.application.ApplicationResource; import java.time.Clock; import java.util.Collections; @@ -40,7 +42,7 @@ import java.util.Objects; import java.util.function.Consumer; -public class AuctionHandler implements Handler { +public class AuctionHandler implements ApplicationResource { private static final Logger logger = LoggerFactory.getLogger(AuctionHandler.class); private static final ConditionalLogger conditionalLogger = new ConditionalLogger(logger); @@ -76,6 +78,11 @@ public AuctionHandler(double logSamplingRate, this.mapper = Objects.requireNonNull(mapper); } + @Override + public List endpoints() { + return Collections.singletonList(HttpEndpoint.of(HttpMethod.POST, Endpoint.openrtb2_auction.value())); + } + @Override public void handle(RoutingContext routingContext) { // Prebid Server interprets request.tmax to be the maximum amount of time that a caller is willing to wait diff --git a/src/main/java/org/prebid/server/handler/openrtb2/VideoHandler.java b/src/main/java/org/prebid/server/handler/openrtb2/VideoHandler.java index a68eb39eb45..76831745c47 100644 --- a/src/main/java/org/prebid/server/handler/openrtb2/VideoHandler.java +++ b/src/main/java/org/prebid/server/handler/openrtb2/VideoHandler.java @@ -3,8 +3,8 @@ import io.netty.handler.codec.http.HttpHeaderValues; import io.netty.handler.codec.http.HttpResponseStatus; import io.vertx.core.AsyncResult; -import io.vertx.core.Handler; import io.vertx.core.MultiMap; +import io.vertx.core.http.HttpMethod; import io.vertx.core.http.HttpServerResponse; import io.vertx.core.logging.Logger; import io.vertx.core.logging.LoggerFactory; @@ -33,6 +33,8 @@ import org.prebid.server.util.HttpUtil; import org.prebid.server.util.ObjectUtil; import org.prebid.server.version.PrebidVersionProvider; +import org.prebid.server.vertx.verticles.server.HttpEndpoint; +import org.prebid.server.vertx.verticles.server.application.ApplicationResource; import java.time.Clock; import java.util.ArrayList; @@ -42,7 +44,7 @@ import java.util.function.Consumer; import java.util.stream.Collectors; -public class VideoHandler implements Handler { +public class VideoHandler implements ApplicationResource { private static final Logger logger = LoggerFactory.getLogger(VideoHandler.class); @@ -78,6 +80,11 @@ public VideoHandler(VideoRequestFactory videoRequestFactory, this.mapper = Objects.requireNonNull(mapper); } + @Override + public List endpoints() { + return Collections.singletonList(HttpEndpoint.of(HttpMethod.POST, Endpoint.openrtb2_video.value())); + } + @Override public void handle(RoutingContext routingContext) { // Prebid Server interprets request.tmax to be the maximum amount of time that a caller is willing to wait diff --git a/src/main/java/org/prebid/server/optout/GoogleRecaptchaVerifier.java b/src/main/java/org/prebid/server/optout/GoogleRecaptchaVerifier.java index dcff4bade72..a37533586e7 100644 --- a/src/main/java/org/prebid/server/optout/GoogleRecaptchaVerifier.java +++ b/src/main/java/org/prebid/server/optout/GoogleRecaptchaVerifier.java @@ -10,8 +10,8 @@ import org.prebid.server.json.JacksonMapper; import org.prebid.server.optout.model.RecaptchaResponse; import org.prebid.server.util.HttpUtil; -import org.prebid.server.vertx.http.HttpClient; -import org.prebid.server.vertx.http.model.HttpClientResponse; +import org.prebid.server.vertx.httpclient.HttpClient; +import org.prebid.server.vertx.httpclient.model.HttpClientResponse; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; diff --git a/src/main/java/org/prebid/server/privacy/gdpr/vendorlist/VendorListService.java b/src/main/java/org/prebid/server/privacy/gdpr/vendorlist/VendorListService.java index 019da5e36b4..7aa8583b131 100644 --- a/src/main/java/org/prebid/server/privacy/gdpr/vendorlist/VendorListService.java +++ b/src/main/java/org/prebid/server/privacy/gdpr/vendorlist/VendorListService.java @@ -22,8 +22,8 @@ import org.prebid.server.metric.Metrics; import org.prebid.server.privacy.gdpr.vendorlist.proto.Vendor; import org.prebid.server.privacy.gdpr.vendorlist.proto.VendorList; -import org.prebid.server.vertx.http.HttpClient; -import org.prebid.server.vertx.http.model.HttpClientResponse; +import org.prebid.server.vertx.httpclient.HttpClient; +import org.prebid.server.vertx.httpclient.model.HttpClientResponse; import java.io.File; import java.io.IOException; diff --git a/src/main/java/org/prebid/server/settings/HttpApplicationSettings.java b/src/main/java/org/prebid/server/settings/HttpApplicationSettings.java index 262cceda164..72daa7e938d 100644 --- a/src/main/java/org/prebid/server/settings/HttpApplicationSettings.java +++ b/src/main/java/org/prebid/server/settings/HttpApplicationSettings.java @@ -22,8 +22,8 @@ import org.prebid.server.settings.proto.response.HttpAccountsResponse; import org.prebid.server.settings.proto.response.HttpFetcherResponse; import org.prebid.server.util.HttpUtil; -import org.prebid.server.vertx.http.HttpClient; -import org.prebid.server.vertx.http.model.HttpClientResponse; +import org.prebid.server.vertx.httpclient.HttpClient; +import org.prebid.server.vertx.httpclient.model.HttpClientResponse; import java.util.ArrayList; import java.util.Collections; diff --git a/src/main/java/org/prebid/server/settings/service/HttpPeriodicRefreshService.java b/src/main/java/org/prebid/server/settings/service/HttpPeriodicRefreshService.java index ef53df54ec2..b50d2512953 100644 --- a/src/main/java/org/prebid/server/settings/service/HttpPeriodicRefreshService.java +++ b/src/main/java/org/prebid/server/settings/service/HttpPeriodicRefreshService.java @@ -15,8 +15,8 @@ import org.prebid.server.settings.proto.response.HttpRefreshResponse; import org.prebid.server.util.HttpUtil; import org.prebid.server.vertx.Initializable; -import org.prebid.server.vertx.http.HttpClient; -import org.prebid.server.vertx.http.model.HttpClientResponse; +import org.prebid.server.vertx.httpclient.HttpClient; +import org.prebid.server.vertx.httpclient.model.HttpClientResponse; import java.time.Instant; import java.util.ArrayList; diff --git a/src/main/java/org/prebid/server/spring/config/AdminServerConfiguration.java b/src/main/java/org/prebid/server/spring/config/AdminServerConfiguration.java deleted file mode 100644 index 4cc83bdfc5d..00000000000 --- a/src/main/java/org/prebid/server/spring/config/AdminServerConfiguration.java +++ /dev/null @@ -1,61 +0,0 @@ -package org.prebid.server.spring.config; - -import io.vertx.core.Vertx; -import io.vertx.core.http.HttpServer; -import io.vertx.core.logging.Logger; -import io.vertx.core.logging.LoggerFactory; -import io.vertx.ext.web.Router; -import io.vertx.ext.web.handler.BodyHandler; -import org.prebid.server.handler.CustomizedAdminEndpoint; -import org.prebid.server.vertx.ContextRunner; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import javax.annotation.PostConstruct; -import java.util.List; - -@Configuration -@ConditionalOnProperty(prefix = "admin", name = "port") -public class AdminServerConfiguration { - - private static final Logger logger = LoggerFactory.getLogger(AdminServerConfiguration.class); - - @Autowired - private ContextRunner contextRunner; - - @Autowired - private Vertx vertx; - - @Autowired - @Qualifier("adminRouter") - private Router adminRouter; - - @Value("${admin.port}") - private int adminPort; - - @Bean(name = "adminRouter") - Router adminRouter(BodyHandler bodyHandler, List customizedAdminEndpoints) { - final Router router = Router.router(vertx); - router.route().handler(bodyHandler); - - customizedAdminEndpoints.stream() - .filter(customizedAdminEndpoint -> !customizedAdminEndpoint.isOnApplicationPort()) - .forEach(customizedAdminEndpoint -> customizedAdminEndpoint.router(router)); - - return router; - } - - @PostConstruct - public void startAdminServer() { - logger.info("Starting Admin Server to serve requests on port {0,number,#}", adminPort); - - contextRunner.runOnServiceContext(future -> - vertx.createHttpServer().requestHandler(adminRouter).listen(adminPort, future)); - - logger.info("Successfully started Admin Server"); - } -} 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 46b98597121..21ee67ac125 100644 --- a/src/main/java/org/prebid/server/spring/config/AnalyticsConfiguration.java +++ b/src/main/java/org/prebid/server/spring/config/AnalyticsConfiguration.java @@ -13,7 +13,7 @@ import org.prebid.server.auction.privacy.enforcement.mask.UserFpdActivityMask; import org.prebid.server.json.JacksonMapper; import org.prebid.server.metric.Metrics; -import org.prebid.server.vertx.http.HttpClient; +import org.prebid.server.vertx.httpclient.HttpClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; diff --git a/src/main/java/org/prebid/server/spring/config/AopConfiguration.java b/src/main/java/org/prebid/server/spring/config/AopConfiguration.java index cdad8883732..736ca55a494 100644 --- a/src/main/java/org/prebid/server/spring/config/AopConfiguration.java +++ b/src/main/java/org/prebid/server/spring/config/AopConfiguration.java @@ -25,7 +25,7 @@ static class HealthMonitorAspect { @Autowired HealthMonitor healthMonitor; - @Around(value = "execution(* org.prebid.server.vertx.http.HttpClient.*(..)) " + @Around(value = "execution(* org.prebid.server.vertx.httpclient.HttpClient.*(..)) " + "|| execution(* org.prebid.server.settings.ApplicationSettings.*(..)) " + "|| execution(* org.prebid.server.geolocation.GeoLocationService.*(..))") public Future around(ProceedingJoinPoint joinPoint) { diff --git a/src/main/java/org/prebid/server/spring/config/InitializationConfiguration.java b/src/main/java/org/prebid/server/spring/config/InitializationConfiguration.java index a0b0498e16b..d52de58ac63 100644 --- a/src/main/java/org/prebid/server/spring/config/InitializationConfiguration.java +++ b/src/main/java/org/prebid/server/spring/config/InitializationConfiguration.java @@ -3,7 +3,7 @@ import org.prebid.server.metric.Metrics; import org.prebid.server.vertx.ContextRunner; import org.prebid.server.vertx.Initializable; -import org.prebid.server.vertx.http.HttpClient; +import org.prebid.server.vertx.httpclient.HttpClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.context.event.ContextRefreshedEvent; @@ -35,7 +35,7 @@ public class InitializationConfiguration { @EventListener(ContextRefreshedEvent.class) public void initializeServices() { - contextRunner.runOnServiceContext(promise -> { + contextRunner.runBlocking(promise -> { initializables.forEach(Initializable::initialize); promise.complete(); }); diff --git a/src/main/java/org/prebid/server/spring/config/PriceFloorsConfiguration.java b/src/main/java/org/prebid/server/spring/config/PriceFloorsConfiguration.java index 67b4ce379ea..09be2779e22 100644 --- a/src/main/java/org/prebid/server/spring/config/PriceFloorsConfiguration.java +++ b/src/main/java/org/prebid/server/spring/config/PriceFloorsConfiguration.java @@ -18,7 +18,7 @@ import org.prebid.server.json.JacksonMapper; import org.prebid.server.metric.Metrics; import org.prebid.server.settings.ApplicationSettings; -import org.prebid.server.vertx.http.HttpClient; +import org.prebid.server.vertx.httpclient.HttpClient; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; diff --git a/src/main/java/org/prebid/server/spring/config/PrivacyServiceConfiguration.java b/src/main/java/org/prebid/server/spring/config/PrivacyServiceConfiguration.java index 61df84ee7bf..db8251b9b42 100644 --- a/src/main/java/org/prebid/server/spring/config/PrivacyServiceConfiguration.java +++ b/src/main/java/org/prebid/server/spring/config/PrivacyServiceConfiguration.java @@ -45,7 +45,7 @@ import org.prebid.server.settings.model.SpecialFeature; import org.prebid.server.settings.model.SpecialFeatures; import org.prebid.server.spring.config.retry.RetryPolicyConfigurationProperties; -import org.prebid.server.vertx.http.HttpClient; +import org.prebid.server.vertx.httpclient.HttpClient; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; 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 1180f622661..de4e7fddff6 100644 --- a/src/main/java/org/prebid/server/spring/config/ServiceConfiguration.java +++ b/src/main/java/org/prebid/server/spring/config/ServiceConfiguration.java @@ -114,9 +114,9 @@ import org.prebid.server.validation.VideoRequestValidator; import org.prebid.server.vast.VastModifier; import org.prebid.server.version.PrebidVersionProvider; -import org.prebid.server.vertx.http.BasicHttpClient; -import org.prebid.server.vertx.http.CircuitBreakerSecuredHttpClient; -import org.prebid.server.vertx.http.HttpClient; +import org.prebid.server.vertx.httpclient.BasicHttpClient; +import org.prebid.server.vertx.httpclient.CircuitBreakerSecuredHttpClient; +import org.prebid.server.vertx.httpclient.HttpClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; diff --git a/src/main/java/org/prebid/server/spring/config/SettingsConfiguration.java b/src/main/java/org/prebid/server/spring/config/SettingsConfiguration.java index 4a3ce154ab4..374edb1d2be 100644 --- a/src/main/java/org/prebid/server/spring/config/SettingsConfiguration.java +++ b/src/main/java/org/prebid/server/spring/config/SettingsConfiguration.java @@ -24,7 +24,7 @@ import org.prebid.server.settings.service.HttpPeriodicRefreshService; import org.prebid.server.settings.service.JdbcPeriodicRefreshService; import org.prebid.server.spring.config.database.DatabaseConfiguration; -import org.prebid.server.vertx.http.HttpClient; +import org.prebid.server.vertx.httpclient.HttpClient; import org.prebid.server.vertx.jdbc.JdbcClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; diff --git a/src/main/java/org/prebid/server/spring/config/VerticleStarter.java b/src/main/java/org/prebid/server/spring/config/VerticleStarter.java new file mode 100644 index 00000000000..49bdae234ae --- /dev/null +++ b/src/main/java/org/prebid/server/spring/config/VerticleStarter.java @@ -0,0 +1,29 @@ +package org.prebid.server.spring.config; + +import io.vertx.core.DeploymentOptions; +import io.vertx.core.Vertx; +import org.prebid.server.vertx.ContextRunner; +import org.prebid.server.vertx.verticles.VerticleDefinition; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; + +import java.util.List; + +@Configuration +public class VerticleStarter { + + @Autowired + public void start(Vertx vertx, ContextRunner contextRunner, List definitions) { + for (VerticleDefinition definition : definitions) { + if (definition.getAmount() <= 0) { + continue; + } + + contextRunner.runBlocking(promise -> + vertx.deployVerticle( + definition.getFactory(), + new DeploymentOptions().setInstances(definition.getAmount()), + promise)); + } + } +} diff --git a/src/main/java/org/prebid/server/spring/config/database/DatabaseConfiguration.java b/src/main/java/org/prebid/server/spring/config/database/DatabaseConfiguration.java index 69570b59622..065241e7aab 100644 --- a/src/main/java/org/prebid/server/spring/config/database/DatabaseConfiguration.java +++ b/src/main/java/org/prebid/server/spring/config/database/DatabaseConfiguration.java @@ -118,7 +118,11 @@ CircuitBreakerProperties databaseCircuitBreakerProperties() { @Bean @ConditionalOnProperty(prefix = "settings.database.circuit-breaker", name = "enabled", havingValue = "true") CircuitBreakerSecuredJdbcClient circuitBreakerSecuredJdbcClient( - Vertx vertx, JDBCClient vertxJdbcClient, Metrics metrics, Clock clock, ContextRunner contextRunner, + Vertx vertx, + JDBCClient vertxJdbcClient, + Metrics metrics, + Clock clock, + ContextRunner contextRunner, @Qualifier("databaseCircuitBreakerProperties") CircuitBreakerProperties circuitBreakerProperties) { final JdbcClient jdbcClient = createBasicJdbcClient(vertx, vertxJdbcClient, metrics, clock, contextRunner); @@ -131,7 +135,7 @@ private static BasicJdbcClient createBasicJdbcClient( Vertx vertx, JDBCClient vertxJdbcClient, Metrics metrics, Clock clock, ContextRunner contextRunner) { final BasicJdbcClient basicJdbcClient = new BasicJdbcClient(vertx, vertxJdbcClient, metrics, clock); - contextRunner.runOnServiceContext(promise -> basicJdbcClient.initialize().onComplete(promise)); + contextRunner.runBlocking(promise -> basicJdbcClient.initialize().onComplete(promise)); return basicJdbcClient; } diff --git a/src/main/java/org/prebid/server/spring/config/metrics/PrometheusConfiguration.java b/src/main/java/org/prebid/server/spring/config/metrics/PrometheusConfiguration.java index 77e0b942817..72a15515864 100644 --- a/src/main/java/org/prebid/server/spring/config/metrics/PrometheusConfiguration.java +++ b/src/main/java/org/prebid/server/spring/config/metrics/PrometheusConfiguration.java @@ -7,18 +7,17 @@ import io.prometheus.client.dropwizard.samplebuilder.SampleBuilder; import io.prometheus.client.vertx.MetricsHandler; import io.vertx.core.Vertx; -import io.vertx.core.http.HttpServer; import io.vertx.core.logging.Logger; import io.vertx.core.logging.LoggerFactory; +import io.vertx.core.net.SocketAddress; import io.vertx.ext.web.Router; import lombok.Data; import lombok.NoArgsConstructor; import org.prebid.server.metric.CounterType; import org.prebid.server.metric.Metrics; import org.prebid.server.metric.prometheus.NamespaceSubsystemSampleBuilder; -import org.prebid.server.vertx.ContextRunner; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.prebid.server.vertx.verticles.VerticleDefinition; +import org.prebid.server.vertx.verticles.server.ServerVerticle; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; @@ -26,15 +25,32 @@ import org.springframework.stereotype.Component; import org.springframework.validation.annotation.Validated; -import javax.annotation.PostConstruct; import javax.validation.constraints.NotNull; import java.util.List; @Configuration +@ConditionalOnProperty(prefix = "metrics.prometheus", name = "enabled", havingValue = "true") public class PrometheusConfiguration { + private static final Logger logger = LoggerFactory.getLogger(PrometheusConfiguration.class); + + // TODO: Decide how to integrate this with ability to serve requests on unix domain socket + @Bean + public VerticleDefinition prometheusHttpServerVerticleDefinition( + PrometheusConfigurationProperties prometheusConfigurationProperties, + Router prometheusRouter, + DropwizardExports dropwizardExports) { + + CollectorRegistry.defaultRegistry.register(dropwizardExports); + + return VerticleDefinition.ofSingleInstance( + () -> new ServerVerticle( + "Prometheus Http Server", + SocketAddress.inetSocketAddress(prometheusConfigurationProperties.getPort(), "0.0.0.0"), + prometheusRouter)); + } + @Bean - @ConditionalOnBean(PrometheusConfigurationProperties.class) public SampleBuilder sampleBuilder(PrometheusConfigurationProperties prometheusConfigurationProperties, List mapperConfigs) { @@ -44,51 +60,20 @@ public SampleBuilder sampleBuilder(PrometheusConfigurationProperties prometheusC mapperConfigs); } - @Configuration - @ConditionalOnBean(PrometheusConfigurationProperties.class) - public static class PrometheusServerConfiguration { - private static final Logger logger = LoggerFactory.getLogger(PrometheusServerConfiguration.class); - - @Autowired - private ContextRunner contextRunner; - - @Autowired - private Vertx vertx; - - @Autowired - private MetricRegistry metricRegistry; - - @Autowired - private Metrics metrics; - - @Autowired - private PrometheusConfigurationProperties prometheusConfigurationProperties; - - @Autowired - private SampleBuilder sampleBuilder; - - @PostConstruct - public void startPrometheusServer() { - logger.info( - "Starting Prometheus Server on port {0,number,#}", - prometheusConfigurationProperties.getPort()); - - if (metrics.getCounterType() == CounterType.flushingCounter) { - logger.warn("Prometheus metric system: Metric type is flushingCounter."); - } - - final Router router = Router.router(vertx); - router.route("/metrics").handler(new MetricsHandler()); - - CollectorRegistry.defaultRegistry.register(new DropwizardExports(metricRegistry, sampleBuilder)); + @Bean + DropwizardExports dropwizardExports(Metrics metrics, MetricRegistry metricRegistry, SampleBuilder sampleBuilder) { + if (metrics.getCounterType() == CounterType.flushingCounter) { + logger.warn("Prometheus metric system: Metric type is flushingCounter."); + } - contextRunner.runOnServiceContext(promise -> - vertx.createHttpServer() - .requestHandler(router) - .listen(prometheusConfigurationProperties.getPort(), promise)); + return new DropwizardExports(metricRegistry, sampleBuilder); + } - logger.info("Successfully started Prometheus Server"); - } + @Bean + Router prometheusRouter(Vertx vertx) { + final Router router = Router.router(vertx); + router.route("/metrics").handler(new MetricsHandler()); + return router; } @Data diff --git a/src/main/java/org/prebid/server/spring/config/model/ExternalConversionProperties.java b/src/main/java/org/prebid/server/spring/config/model/ExternalConversionProperties.java index b0206149f0d..914e1bcfc18 100644 --- a/src/main/java/org/prebid/server/spring/config/model/ExternalConversionProperties.java +++ b/src/main/java/org/prebid/server/spring/config/model/ExternalConversionProperties.java @@ -5,7 +5,7 @@ import lombok.Data; import org.prebid.server.json.JacksonMapper; import org.prebid.server.metric.Metrics; -import org.prebid.server.vertx.http.HttpClient; +import org.prebid.server.vertx.httpclient.HttpClient; import org.springframework.validation.annotation.Validated; import javax.validation.constraints.Min; diff --git a/src/main/java/org/prebid/server/spring/config/server/HttpServerConfiguration.java b/src/main/java/org/prebid/server/spring/config/server/HttpServerConfiguration.java deleted file mode 100644 index c14dcf9c408..00000000000 --- a/src/main/java/org/prebid/server/spring/config/server/HttpServerConfiguration.java +++ /dev/null @@ -1,63 +0,0 @@ -package org.prebid.server.spring.config.server; - -import io.vertx.core.Vertx; -import io.vertx.core.http.HttpServer; -import io.vertx.core.http.HttpServerOptions; -import io.vertx.core.logging.Logger; -import io.vertx.core.logging.LoggerFactory; -import io.vertx.ext.web.Router; -import org.prebid.server.handler.ExceptionHandler; -import org.prebid.server.vertx.ContextRunner; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.context.annotation.Configuration; - -import javax.annotation.PostConstruct; - -@Configuration -@ConditionalOnProperty(name = "server.http.enabled", havingValue = "true") -public class HttpServerConfiguration { - - private static final Logger logger = LoggerFactory.getLogger(HttpServerConfiguration.class); - - @Autowired - private ContextRunner contextRunner; - - @Autowired - private Vertx vertx; - - @Autowired - private HttpServerOptions httpServerOptions; - - @Autowired - private ExceptionHandler exceptionHandler; - - @Autowired - @Qualifier("router") - private Router router; - - @Value("#{'${http.port:${server.http.port}}'}") - private Integer httpPort; - - // TODO: remove support for properties with http prefix after transition period - @Value("#{'${vertx.http-server-instances:${server.http.server-instances}}'}") - private Integer httpServerNum; - - @PostConstruct - public void startHttpServer() { - logger.info( - "Starting {0} instances of Http Server to serve requests on port {1,number,#}", - httpServerNum, - httpPort); - - contextRunner.runOnNewContext(httpServerNum, promise -> - vertx.createHttpServer(httpServerOptions) - .exceptionHandler(exceptionHandler) - .requestHandler(router) - .listen(httpPort, promise)); - - logger.info("Successfully started {0} instances of Http Server", httpServerNum); - } -} diff --git a/src/main/java/org/prebid/server/spring/config/server/UnixSocketServerConfiguration.java b/src/main/java/org/prebid/server/spring/config/server/UnixSocketServerConfiguration.java deleted file mode 100644 index 54ae616f496..00000000000 --- a/src/main/java/org/prebid/server/spring/config/server/UnixSocketServerConfiguration.java +++ /dev/null @@ -1,63 +0,0 @@ -package org.prebid.server.spring.config.server; - -import io.vertx.core.Vertx; -import io.vertx.core.http.HttpServer; -import io.vertx.core.http.HttpServerOptions; -import io.vertx.core.logging.Logger; -import io.vertx.core.logging.LoggerFactory; -import io.vertx.core.net.SocketAddress; -import io.vertx.ext.web.Router; -import org.prebid.server.handler.ExceptionHandler; -import org.prebid.server.vertx.ContextRunner; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.context.annotation.Configuration; - -import javax.annotation.PostConstruct; - -@Configuration -@ConditionalOnProperty(name = "server.unix-socket.enabled", havingValue = "true") -public class UnixSocketServerConfiguration { - - private static final Logger logger = LoggerFactory.getLogger(UnixSocketServerConfiguration.class); - - @Autowired - private ContextRunner contextRunner; - - @Autowired - private Vertx vertx; - - @Autowired - private HttpServerOptions httpServerOptions; - - @Autowired - private ExceptionHandler exceptionHandler; - - @Autowired - @Qualifier("router") - private Router router; - - @Value("${server.unix-socket.path}") - private String socketPath; - - @Value("${server.unix-socket.server-instances}") - private Integer serverNum; - - @PostConstruct - public void startUnixSocketServer() { - logger.info( - "Starting {0} instances of Unix Socket Server to serve requests on socket {1}", - serverNum, - socketPath); - - contextRunner.runOnNewContext(serverNum, promise -> - vertx.createHttpServer(httpServerOptions) - .exceptionHandler(exceptionHandler) - .requestHandler(router) - .listen(SocketAddress.domainSocketAddress(socketPath), promise)); - - logger.info("Successfully started {0} instances of Unix Socket Server", serverNum); - } -} diff --git a/src/main/java/org/prebid/server/spring/config/AdminEndpointsConfiguration.java b/src/main/java/org/prebid/server/spring/config/server/admin/AdminEndpointsConfiguration.java similarity index 63% rename from src/main/java/org/prebid/server/spring/config/AdminEndpointsConfiguration.java rename to src/main/java/org/prebid/server/spring/config/server/admin/AdminEndpointsConfiguration.java index 93c8b1f61b4..31f50e8db6d 100644 --- a/src/main/java/org/prebid/server/spring/config/AdminEndpointsConfiguration.java +++ b/src/main/java/org/prebid/server/spring/config/server/admin/AdminEndpointsConfiguration.java @@ -1,19 +1,19 @@ -package org.prebid.server.spring.config; +package org.prebid.server.spring.config.server.admin; import com.codahale.metrics.MetricRegistry; import lombok.Data; import lombok.NoArgsConstructor; import org.apache.commons.lang3.ObjectUtils; import org.prebid.server.currency.CurrencyConversionService; -import org.prebid.server.handler.AccountCacheInvalidationHandler; -import org.prebid.server.handler.CollectedMetricsHandler; -import org.prebid.server.handler.CurrencyRatesHandler; -import org.prebid.server.handler.CustomizedAdminEndpoint; -import org.prebid.server.handler.HttpInteractionLogHandler; -import org.prebid.server.handler.LoggerControlKnobHandler; -import org.prebid.server.handler.SettingsCacheNotificationHandler; -import org.prebid.server.handler.TracerLogHandler; -import org.prebid.server.handler.VersionHandler; +import org.prebid.server.handler.admin.AccountCacheInvalidationHandler; +import org.prebid.server.handler.admin.AdminResourceWrapper; +import org.prebid.server.handler.admin.CollectedMetricsHandler; +import org.prebid.server.handler.admin.CurrencyRatesHandler; +import org.prebid.server.handler.admin.HttpInteractionLogHandler; +import org.prebid.server.handler.admin.LoggerControlKnobHandler; +import org.prebid.server.handler.admin.SettingsCacheNotificationHandler; +import org.prebid.server.handler.admin.TracerLogHandler; +import org.prebid.server.handler.admin.VersionHandler; import org.prebid.server.json.JacksonMapper; import org.prebid.server.log.CriteriaManager; import org.prebid.server.log.HttpInteractionLogger; @@ -21,6 +21,7 @@ import org.prebid.server.settings.CachingApplicationSettings; import org.prebid.server.settings.SettingsCache; import org.prebid.server.util.VersionInfo; +import org.prebid.server.vertx.verticles.server.admin.AdminResource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; @@ -31,180 +32,180 @@ import org.springframework.stereotype.Component; import java.util.Collections; +import java.util.List; import java.util.Map; +import java.util.function.Predicate; @Configuration public class AdminEndpointsConfiguration { @Bean @ConditionalOnExpression("${admin-endpoints.version.enabled} == true") - CustomizedAdminEndpoint versionEndpoint( + AdminResource versionEndpoint( VersionInfo versionInfo, JacksonMapper mapper, @Value("${admin-endpoints.version.path}") String path, @Value("${admin-endpoints.version.on-application-port}") boolean isOnApplicationPort, - @Value("${admin-endpoints.version.protected}") boolean isProtected, - @Autowired(required = false) Map adminEndpointCredentials) { + @Value("${admin-endpoints.version.protected}") boolean isProtected) { - return new CustomizedAdminEndpoint( + return new AdminResourceWrapper( path, - new VersionHandler(versionInfo.getVersion(), versionInfo.getCommitHash(), mapper, path), isOnApplicationPort, - isProtected) - .withCredentials(adminEndpointCredentials); + isProtected, + new VersionHandler(versionInfo.getVersion(), versionInfo.getCommitHash(), mapper, path)); } @Bean @ConditionalOnExpression("${currency-converter.external-rates.enabled} == true" + " and ${admin-endpoints.currency-rates.enabled} == true") - CustomizedAdminEndpoint currencyConversionRatesEndpoint( + AdminResource currencyConversionRatesEndpoint( CurrencyConversionService currencyConversionRates, JacksonMapper mapper, @Value("${admin-endpoints.currency-rates.path}") String path, @Value("${admin-endpoints.currency-rates.on-application-port}") boolean isOnApplicationPort, - @Value("${admin-endpoints.currency-rates.protected}") boolean isProtected, - @Autowired(required = false) Map adminEndpointCredentials) { + @Value("${admin-endpoints.currency-rates.protected}") boolean isProtected) { - return new CustomizedAdminEndpoint( + return new AdminResourceWrapper( path, - new CurrencyRatesHandler(currencyConversionRates, path, mapper), isOnApplicationPort, - isProtected) - .withCredentials(adminEndpointCredentials); + isProtected, + new CurrencyRatesHandler(currencyConversionRates, path, mapper)); } @Bean @ConditionalOnExpression("${settings.in-memory-cache.notification-endpoints-enabled:false}" + " and ${admin-endpoints.storedrequest.enabled} == true") - CustomizedAdminEndpoint cacheNotificationEndpoint( + AdminResource cacheNotificationEndpoint( SettingsCache settingsCache, JacksonMapper mapper, @Value("${admin-endpoints.storedrequest.path}") String path, @Value("${admin-endpoints.storedrequest.on-application-port}") boolean isOnApplicationPort, - @Value("${admin-endpoints.storedrequest.protected}") boolean isProtected, - @Autowired(required = false) Map adminEndpointCredentials) { + @Value("${admin-endpoints.storedrequest.protected}") boolean isProtected) { - return new CustomizedAdminEndpoint( + return new AdminResourceWrapper( path, - new SettingsCacheNotificationHandler(settingsCache, mapper, path), isOnApplicationPort, - isProtected) - .withCredentials(adminEndpointCredentials); + isProtected, + new SettingsCacheNotificationHandler(settingsCache, mapper, path)); } @Bean @ConditionalOnExpression("${settings.in-memory-cache.notification-endpoints-enabled:false}" + " and ${admin-endpoints.storedrequest-amp.enabled} == true") - CustomizedAdminEndpoint ampCacheNotificationEndpoint( + AdminResource ampCacheNotificationEndpoint( SettingsCache ampSettingsCache, JacksonMapper mapper, @Value("${admin-endpoints.storedrequest-amp.path}") String path, @Value("${admin-endpoints.storedrequest-amp.on-application-port}") boolean isOnApplicationPort, - @Value("${admin-endpoints.storedrequest-amp.protected}") boolean isProtected, - @Autowired(required = false) Map adminEndpointCredentials) { + @Value("${admin-endpoints.storedrequest-amp.protected}") boolean isProtected) { - return new CustomizedAdminEndpoint( + return new AdminResourceWrapper( path, - new SettingsCacheNotificationHandler(ampSettingsCache, mapper, path), isOnApplicationPort, - isProtected) - .withCredentials(adminEndpointCredentials); + isProtected, + new SettingsCacheNotificationHandler(ampSettingsCache, mapper, path)); } @Bean @ConditionalOnExpression("${settings.in-memory-cache.notification-endpoints-enabled:false}" + " and ${admin-endpoints.cache-invalidation.enabled} == true") - CustomizedAdminEndpoint cacheInvalidateNotificationEndpoint( + AdminResource cacheInvalidateNotificationEndpoint( CachingApplicationSettings cachingApplicationSettings, @Value("${admin-endpoints.cache-invalidation.path}") String path, @Value("${admin-endpoints.cache-invalidation.on-application-port}") boolean isOnApplicationPort, - @Value("${admin-endpoints.cache-invalidation.protected}") boolean isProtected, - @Autowired(required = false) Map adminEndpointCredentials) { + @Value("${admin-endpoints.cache-invalidation.protected}") boolean isProtected) { - return new CustomizedAdminEndpoint( + return new AdminResourceWrapper( path, - new AccountCacheInvalidationHandler(cachingApplicationSettings, path), isOnApplicationPort, - isProtected) - .withCredentials(adminEndpointCredentials); + isProtected, + new AccountCacheInvalidationHandler(cachingApplicationSettings, path)); } @Bean @ConditionalOnExpression("${admin-endpoints.logging-httpinteraction.enabled} == true") - CustomizedAdminEndpoint loggingHttpInteractionEndpoint( + AdminResource loggingHttpInteractionEndpoint( @Value("${logging.http-interaction.max-limit}") int maxLimit, HttpInteractionLogger httpInteractionLogger, @Value("${admin-endpoints.logging-httpinteraction.path}") String path, @Value("${admin-endpoints.logging-httpinteraction.on-application-port}") boolean isOnApplicationPort, - @Value("${admin-endpoints.logging-httpinteraction.protected}") boolean isProtected, - @Autowired(required = false) Map adminEndpointCredentials) { + @Value("${admin-endpoints.logging-httpinteraction.protected}") boolean isProtected) { - return new CustomizedAdminEndpoint( + return new AdminResourceWrapper( path, - new HttpInteractionLogHandler(maxLimit, httpInteractionLogger, path), isOnApplicationPort, - isProtected) - .withCredentials(adminEndpointCredentials); + isProtected, + new HttpInteractionLogHandler(maxLimit, httpInteractionLogger, path)); } @Bean @ConditionalOnExpression("${admin-endpoints.logging-changelevel.enabled} == true") - CustomizedAdminEndpoint loggingChangeLevelEndpoint( + AdminResource loggingChangeLevelEndpoint( @Value("${logging.change-level.max-duration-ms}") long maxDuration, LoggerControlKnob loggerControlKnob, @Value("${admin-endpoints.logging-changelevel.path}") String path, @Value("${admin-endpoints.logging-changelevel.on-application-port}") boolean isOnApplicationPort, - @Value("${admin-endpoints.logging-changelevel.protected}") boolean isProtected, - @Autowired(required = false) Map adminEndpointCredentials) { + @Value("${admin-endpoints.logging-changelevel.protected}") boolean isProtected) { - return new CustomizedAdminEndpoint( + return new AdminResourceWrapper( path, - new LoggerControlKnobHandler(maxDuration, loggerControlKnob, path), isOnApplicationPort, - isProtected) - .withCredentials(adminEndpointCredentials); + isProtected, + new LoggerControlKnobHandler(maxDuration, loggerControlKnob, path)); } @Bean @ConditionalOnProperty(prefix = "admin-endpoints.tracelog", name = "enabled", havingValue = "true") - CustomizedAdminEndpoint tracerLogEndpoint( + AdminResource tracerLogEndpoint( CriteriaManager criteriaManager, @Value("${admin-endpoints.tracelog.path}") String path, @Value("${admin-endpoints.tracelog.on-application-port}") boolean isOnApplicationPort, - @Value("${admin-endpoints.tracelog.protected}") boolean isProtected, - @Autowired(required = false) Map adminEndpointCredentials) { + @Value("${admin-endpoints.tracelog.protected}") boolean isProtected) { - return new CustomizedAdminEndpoint( - path, - new TracerLogHandler(criteriaManager), - isOnApplicationPort, - isProtected) - .withCredentials(adminEndpointCredentials); + return new AdminResourceWrapper(path, isOnApplicationPort, isProtected, new TracerLogHandler(criteriaManager)); } @Bean @ConditionalOnExpression("${admin-endpoints.collected-metrics.enabled} == true") - CustomizedAdminEndpoint collectedMetricsAdminEndpoint( + AdminResource collectedMetricsAdminEndpoint( MetricRegistry metricRegistry, JacksonMapper mapper, @Value("${admin-endpoints.collected-metrics.path}") String path, @Value("${admin-endpoints.collected-metrics.on-application-port}") boolean isOnApplicationPort, - @Value("${admin-endpoints.collected-metrics.protected}") boolean isProtected, - @Autowired(required = false) Map adminEndpointCredentials) { + @Value("${admin-endpoints.collected-metrics.protected}") boolean isProtected) { - return new CustomizedAdminEndpoint( + return new AdminResourceWrapper( path, - new CollectedMetricsHandler(metricRegistry, mapper, path), isOnApplicationPort, - isProtected) - .withCredentials(adminEndpointCredentials); + isProtected, + new CollectedMetricsHandler(metricRegistry, mapper, path)); } @Bean - Map adminEndpointCredentials( - @Autowired(required = false) AdminEndpointCredentials adminEndpointCredentials) { + AdminResourcesBinder applicationPortAdminResourcesBinder(Map adminEndpointCredentials, + List resources) { + + final List applicationPortAdminResources = resources.stream() + .filter(AdminResource::isOnApplicationPort) + .toList(); - return ObjectUtils.defaultIfNull(adminEndpointCredentials.getCredentials(), Collections.emptyMap()); + return new AdminResourcesBinder(adminEndpointCredentials, applicationPortAdminResources); + } + + @Bean + AdminResourcesBinder adminPortAdminResourcesBinder(Map adminEndpointCredentials, + List resources) { + + final List adminPortAdminResources = resources.stream() + .filter(Predicate.not(AdminResource::isOnApplicationPort)) + .toList(); + + return new AdminResourcesBinder(adminEndpointCredentials, adminPortAdminResources); + } + + @Bean + Map adminEndpointCredentials(@Autowired(required = false) AdminEndpointCredentials credentials) { + return ObjectUtils.defaultIfNull(credentials.getCredentials(), Collections.emptyMap()); } @Component diff --git a/src/main/java/org/prebid/server/spring/config/server/admin/AdminResourcesBinder.java b/src/main/java/org/prebid/server/spring/config/server/admin/AdminResourcesBinder.java new file mode 100644 index 00000000000..11d096d5666 --- /dev/null +++ b/src/main/java/org/prebid/server/spring/config/server/admin/AdminResourcesBinder.java @@ -0,0 +1,50 @@ +package org.prebid.server.spring.config.server.admin; + +import io.vertx.core.Handler; +import io.vertx.ext.web.Router; +import io.vertx.ext.web.RoutingContext; +import io.vertx.ext.web.handler.AuthHandler; +import io.vertx.ext.web.handler.BasicAuthHandler; +import org.prebid.server.vertx.verticles.server.admin.AdminResource; + +import java.util.List; +import java.util.Map; +import java.util.Objects; + +public class AdminResourcesBinder { + + private final Map credentials; + private final List resources; + + public AdminResourcesBinder(Map credentials, List resources) { + this.credentials = credentials; + this.resources = Objects.requireNonNull(resources); + } + + public void bind(Router router) { + for (AdminResource resource : resources) { + router + .route(resource.path()) + .handler(resource.isSecured() ? securedAuthHandler() : PassNextHandler.INSTANCE) + .handler(resource); + } + } + + private AuthHandler securedAuthHandler() { + if (credentials == null) { + throw new IllegalArgumentException("Credentials for admin endpoint is empty."); + } + + return BasicAuthHandler.create(new AdminServerAuthProvider(credentials)); + } + + private static class PassNextHandler implements Handler { + + private static final Handler INSTANCE = new PassNextHandler(); + + @Override + public void handle(RoutingContext event) { + event.next(); + } + } +} diff --git a/src/main/java/org/prebid/server/spring/config/server/admin/AdminServerAuthProvider.java b/src/main/java/org/prebid/server/spring/config/server/admin/AdminServerAuthProvider.java new file mode 100644 index 00000000000..f95980d1a60 --- /dev/null +++ b/src/main/java/org/prebid/server/spring/config/server/admin/AdminServerAuthProvider.java @@ -0,0 +1,39 @@ +package org.prebid.server.spring.config.server.admin; + +import io.vertx.core.AsyncResult; +import io.vertx.core.Future; +import io.vertx.core.Handler; +import io.vertx.core.json.JsonObject; +import io.vertx.ext.auth.AuthProvider; +import io.vertx.ext.auth.User; +import org.apache.commons.collections4.MapUtils; +import org.apache.commons.lang3.StringUtils; + +import java.util.Map; + +public class AdminServerAuthProvider implements AuthProvider { + + private final Map credentials; + + public AdminServerAuthProvider(Map credentials) { + this.credentials = credentials; + } + + @Override + public void authenticate(JsonObject authInfo, Handler> resultHandler) { + if (MapUtils.isEmpty(credentials)) { + resultHandler.handle(Future.failedFuture("Credentials not set in configuration.")); + return; + } + + final String requestUsername = authInfo.getString("username"); + final String requestPassword = StringUtils.chomp(authInfo.getString("password")); + + final String storedPassword = credentials.get(requestUsername); + if (StringUtils.isNotBlank(requestPassword) && StringUtils.equals(storedPassword, requestPassword)) { + resultHandler.handle(Future.succeededFuture()); + } else { + resultHandler.handle(Future.failedFuture("No such user, or password incorrect.")); + } + } +} diff --git a/src/main/java/org/prebid/server/spring/config/server/admin/AdminServerConfiguration.java b/src/main/java/org/prebid/server/spring/config/server/admin/AdminServerConfiguration.java new file mode 100644 index 00000000000..e88e04be03d --- /dev/null +++ b/src/main/java/org/prebid/server/spring/config/server/admin/AdminServerConfiguration.java @@ -0,0 +1,40 @@ +package org.prebid.server.spring.config.server.admin; + +import io.vertx.core.Vertx; +import io.vertx.core.net.SocketAddress; +import io.vertx.ext.web.Router; +import io.vertx.ext.web.handler.BodyHandler; +import org.prebid.server.vertx.verticles.VerticleDefinition; +import org.prebid.server.vertx.verticles.server.ServerVerticle; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ConditionalOnProperty(prefix = "admin", name = "port") +public class AdminServerConfiguration { + + @Bean + Router adminPortAdminServerRouter(Vertx vertx, + AdminResourcesBinder adminPortAdminResourcesBinder, + BodyHandler bodyHandler) { + + final Router router = Router.router(vertx); + router.route().handler(bodyHandler); + + adminPortAdminResourcesBinder.bind(router); + return router; + } + + @Bean + VerticleDefinition adminPortAdminHttpServerVerticleDefinition(Router adminPortAdminServerRouter, + @Value("${admin.port}") int port) { + + return VerticleDefinition.ofSingleInstance( + () -> new ServerVerticle( + "Admin Http Server", + SocketAddress.inetSocketAddress(port, "0.0.0.0"), + adminPortAdminServerRouter)); + } +} diff --git a/src/main/java/org/prebid/server/spring/config/WebConfiguration.java b/src/main/java/org/prebid/server/spring/config/server/application/ApplicationServerConfiguration.java similarity index 84% rename from src/main/java/org/prebid/server/spring/config/WebConfiguration.java rename to src/main/java/org/prebid/server/spring/config/server/application/ApplicationServerConfiguration.java index fd5e6b95ee3..4740f025320 100644 --- a/src/main/java/org/prebid/server/spring/config/WebConfiguration.java +++ b/src/main/java/org/prebid/server/spring/config/server/application/ApplicationServerConfiguration.java @@ -1,9 +1,10 @@ -package org.prebid.server.spring.config; +package org.prebid.server.spring.config.server.application; import io.vertx.core.Vertx; import io.vertx.core.http.HttpMethod; import io.vertx.core.http.HttpServerOptions; import io.vertx.core.net.JksOptions; +import io.vertx.core.net.SocketAddress; import io.vertx.ext.web.Router; import io.vertx.ext.web.handler.BodyHandler; import io.vertx.ext.web.handler.CorsHandler; @@ -30,7 +31,6 @@ import org.prebid.server.execution.TimeoutFactory; import org.prebid.server.handler.BidderParamHandler; import org.prebid.server.handler.CookieSyncHandler; -import org.prebid.server.handler.CustomizedAdminEndpoint; import org.prebid.server.handler.ExceptionHandler; import org.prebid.server.handler.GetuidsHandler; import org.prebid.server.handler.NoCacheHandler; @@ -54,11 +54,15 @@ import org.prebid.server.optout.GoogleRecaptchaVerifier; import org.prebid.server.privacy.HostVendorTcfDefinerService; import org.prebid.server.settings.ApplicationSettings; +import org.prebid.server.spring.config.server.admin.AdminResourcesBinder; import org.prebid.server.util.HttpUtil; import org.prebid.server.validation.BidderParamValidator; import org.prebid.server.version.PrebidVersionProvider; -import org.springframework.beans.factory.annotation.Autowired; +import org.prebid.server.vertx.verticles.VerticleDefinition; +import org.prebid.server.vertx.verticles.server.ServerVerticle; +import org.prebid.server.vertx.verticles.server.application.ApplicationResource; import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -73,13 +77,48 @@ import java.util.Set; @Configuration -public class WebConfiguration { +public class ApplicationServerConfiguration { @Value("${logging.sampling-rate:0.01}") private double logSamplingRate; - @Autowired - private Vertx vertx; + @Bean + @ConditionalOnProperty(name = "server.http.enabled", havingValue = "true") + VerticleDefinition httpApplicationServerVerticleDefinition( + HttpServerOptions httpServerOptions, + @Value("#{'${http.port:${server.http.port}}'}") Integer port, + Router applicationServerRouter, + ExceptionHandler exceptionHandler, + @Value("#{'${vertx.http-server-instances:${server.http.server-instances}}'}") Integer instances) { + + return VerticleDefinition.ofMultiInstance( + () -> new ServerVerticle( + "Application Http Server", + httpServerOptions, + SocketAddress.inetSocketAddress(port, "0.0.0.0"), + applicationServerRouter, + exceptionHandler), + instances); + } + + @Bean + @ConditionalOnProperty(name = "server.unix-socket.enabled", havingValue = "true") + VerticleDefinition unixSocketApplicationServerVerticleDefinition( + HttpServerOptions httpServerOptions, + @Value("${server.unix-socket.path}") String path, + Router applicationServerRouter, + ExceptionHandler exceptionHandler, + @Value("${server.unix-socket.server-instances}") Integer instances) { + + return VerticleDefinition.ofMultiInstance( + () -> new ServerVerticle( + "Application Unix Socket Server", + httpServerOptions, + SocketAddress.domainSocketAddress(path), + applicationServerRouter, + exceptionHandler), + instances); + } // TODO: remove support for properties with http prefix after transition period @Bean @@ -120,48 +159,25 @@ ExceptionHandler exceptionHandler(Metrics metrics) { return ExceptionHandler.create(metrics); } - @Bean("router") - Router router(BodyHandler bodyHandler, - NoCacheHandler noCacheHandler, - CorsHandler corsHandler, - org.prebid.server.handler.openrtb2.AuctionHandler openrtbAuctionHandler, - AmpHandler openrtbAmpHandler, - VideoHandler openrtbVideoHandler, - StatusHandler statusHandler, - CookieSyncHandler cookieSyncHandler, - SetuidHandler setuidHandler, - GetuidsHandler getuidsHandler, - VtrackHandler vtrackHandler, - OptoutHandler optoutHandler, - BidderParamHandler bidderParamHandler, - BiddersHandler biddersHandler, - BidderDetailsHandler bidderDetailsHandler, - NotificationEventHandler notificationEventHandler, - List customizedAdminEndpoints, - StaticHandler staticHandler) { + @Bean + Router applicationServerRouter(Vertx vertx, + BodyHandler bodyHandler, + NoCacheHandler noCacheHandler, + CorsHandler corsHandler, + List resources, + AdminResourcesBinder applicationPortAdminResourcesBinder, + StaticHandler staticHandler) { final Router router = Router.router(vertx); router.route().handler(bodyHandler); router.route().handler(noCacheHandler); router.route().handler(corsHandler); - router.post("/openrtb2/auction").handler(openrtbAuctionHandler); - router.get("/openrtb2/amp").handler(openrtbAmpHandler); - router.post("/openrtb2/video").handler(openrtbVideoHandler); - router.get("/status").handler(statusHandler); - router.post("/cookie_sync").handler(cookieSyncHandler); - router.get("/setuid").handler(setuidHandler); - router.get("/getuids").handler(getuidsHandler); - router.post("/vtrack").handler(vtrackHandler); - router.post("/optout").handler(optoutHandler); - router.get("/optout").handler(optoutHandler); - router.get("/bidders/params").handler(bidderParamHandler); - router.get("/info/bidders").handler(biddersHandler); - router.get("/info/bidders/:bidderName").handler(bidderDetailsHandler); - router.get("/event").handler(notificationEventHandler); - - customizedAdminEndpoints.stream() - .filter(CustomizedAdminEndpoint::isOnApplicationPort) - .forEach(customizedAdminEndpoint -> customizedAdminEndpoint.router(router)); + + resources.forEach(resource -> + resource.endpoints().forEach(endpoint -> + router.route(endpoint.getMethod(), endpoint.getPath()).handler(resource))); + + applicationPortAdminResourcesBinder.bind(router); router.get("/static/*").handler(staticHandler); router.get("/").handler(staticHandler); // serves index.html by default diff --git a/src/main/java/org/prebid/server/vertx/ContextRunner.java b/src/main/java/org/prebid/server/vertx/ContextRunner.java index ad18e40476c..43dc35c3683 100644 --- a/src/main/java/org/prebid/server/vertx/ContextRunner.java +++ b/src/main/java/org/prebid/server/vertx/ContextRunner.java @@ -1,89 +1,49 @@ package org.prebid.server.vertx; -import io.vertx.core.Context; +import io.vertx.core.Future; import io.vertx.core.Handler; import io.vertx.core.Promise; import io.vertx.core.Vertx; -import io.vertx.core.logging.Logger; -import io.vertx.core.logging.LoggerFactory; -import java.util.Objects; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.function.Supplier; -/** - * Component that manages Vertx contexts and provides interface to run arbitrary code on them. - *

- * Needed mostly to replace verticle deployment model provided by Vertx because it doesn't play nicely when using - * Vertx in embedded mode within Spring application. - */ public class ContextRunner { - private static final Logger logger = LoggerFactory.getLogger(ContextRunner.class); - private final Vertx vertx; private final long timeoutMs; - private final Context serviceContext; - public ContextRunner(Vertx vertx, long timeoutMs) { - this.vertx = Objects.requireNonNull(vertx); + this.vertx = vertx; this.timeoutMs = timeoutMs; - - this.serviceContext = vertx.getOrCreateContext(); - } - - /** - * Runs provided action specified number of times each in a new context. This method is handy for - * running several instances of {@link io.vertx.core.http.HttpServer} on different event loop threads. - */ - public void runOnNewContext(int times, Handler> action) { - runOnContext(vertx::getOrCreateContext, times, action); - } - - /** - * Runs provided action on a dedicated service context. - */ - public void runOnServiceContext(Handler> action) { - runOnContext(() -> serviceContext, 1, action); } - private void runOnContext(Supplier contextFactory, int times, Handler> action) { - final CountDownLatch completionLatch = new CountDownLatch(times); - final AtomicBoolean actionFailed = new AtomicBoolean(false); - for (int i = 0; i < times; i++) { - final Context context = contextFactory.get(); - - final Promise promise = Promise.promise(); - promise.future().onComplete(ar -> { - if (ar.failed()) { - logger.fatal("Fatal error occurred while running action on Vertx context", ar.cause()); - actionFailed.compareAndSet(false, true); - } - completionLatch.countDown(); - }); - - context.runOnContext(v -> { - try { - action.handle(promise); - } catch (RuntimeException e) { - promise.fail(e); - } - }); - } + public void runBlocking(Handler> action) { + final CountDownLatch completionLatch = new CountDownLatch(1); + final Promise promise = Promise.promise(); + final Future future = promise.future(); + + future.onComplete(ignored -> completionLatch.countDown()); + vertx.runOnContext(v -> { + try { + action.handle(promise); + } catch (RuntimeException e) { + promise.fail(e); + } + }); try { if (!completionLatch.await(timeoutMs, TimeUnit.MILLISECONDS)) { throw new RuntimeException( "Action has not completed within defined timeout %d ms".formatted(timeoutMs)); - } else if (actionFailed.get()) { - throw new RuntimeException("Action failed"); } } catch (InterruptedException e) { Thread.currentThread().interrupt(); throw new RuntimeException("Interrupted while waiting for action to complete", e); } + + if (future.failed()) { + throw new RuntimeException(future.cause()); + } } } diff --git a/src/main/java/org/prebid/server/vertx/http/BasicHttpClient.java b/src/main/java/org/prebid/server/vertx/httpclient/BasicHttpClient.java similarity index 97% rename from src/main/java/org/prebid/server/vertx/http/BasicHttpClient.java rename to src/main/java/org/prebid/server/vertx/httpclient/BasicHttpClient.java index dfeb5c4a32e..bfdd4337fc1 100644 --- a/src/main/java/org/prebid/server/vertx/http/BasicHttpClient.java +++ b/src/main/java/org/prebid/server/vertx/httpclient/BasicHttpClient.java @@ -1,4 +1,4 @@ -package org.prebid.server.vertx.http; +package org.prebid.server.vertx.httpclient; import io.vertx.core.Future; import io.vertx.core.MultiMap; @@ -9,7 +9,7 @@ import io.vertx.core.http.HttpHeaders; import io.vertx.core.http.HttpMethod; import org.prebid.server.exception.PreBidException; -import org.prebid.server.vertx.http.model.HttpClientResponse; +import org.prebid.server.vertx.httpclient.model.HttpClientResponse; import java.util.Objects; import java.util.concurrent.TimeoutException; diff --git a/src/main/java/org/prebid/server/vertx/http/CircuitBreakerSecuredHttpClient.java b/src/main/java/org/prebid/server/vertx/httpclient/CircuitBreakerSecuredHttpClient.java similarity index 98% rename from src/main/java/org/prebid/server/vertx/http/CircuitBreakerSecuredHttpClient.java rename to src/main/java/org/prebid/server/vertx/httpclient/CircuitBreakerSecuredHttpClient.java index 767398b37ad..ad957912dac 100644 --- a/src/main/java/org/prebid/server/vertx/http/CircuitBreakerSecuredHttpClient.java +++ b/src/main/java/org/prebid/server/vertx/httpclient/CircuitBreakerSecuredHttpClient.java @@ -1,4 +1,4 @@ -package org.prebid.server.vertx.http; +package org.prebid.server.vertx.httpclient; import com.github.benmanes.caffeine.cache.Caffeine; import io.vertx.core.Future; @@ -11,7 +11,7 @@ import org.prebid.server.log.ConditionalLogger; import org.prebid.server.metric.Metrics; import org.prebid.server.vertx.CircuitBreaker; -import org.prebid.server.vertx.http.model.HttpClientResponse; +import org.prebid.server.vertx.httpclient.model.HttpClientResponse; import java.net.MalformedURLException; import java.net.URL; diff --git a/src/main/java/org/prebid/server/vertx/http/HttpClient.java b/src/main/java/org/prebid/server/vertx/httpclient/HttpClient.java similarity index 94% rename from src/main/java/org/prebid/server/vertx/http/HttpClient.java rename to src/main/java/org/prebid/server/vertx/httpclient/HttpClient.java index d448f58b4bb..467cd43157c 100644 --- a/src/main/java/org/prebid/server/vertx/http/HttpClient.java +++ b/src/main/java/org/prebid/server/vertx/httpclient/HttpClient.java @@ -1,9 +1,9 @@ -package org.prebid.server.vertx.http; +package org.prebid.server.vertx.httpclient; import io.vertx.core.Future; import io.vertx.core.MultiMap; import io.vertx.core.http.HttpMethod; -import org.prebid.server.vertx.http.model.HttpClientResponse; +import org.prebid.server.vertx.httpclient.model.HttpClientResponse; /** * Interface describes HTTP interactions. diff --git a/src/main/java/org/prebid/server/vertx/http/model/HttpClientResponse.java b/src/main/java/org/prebid/server/vertx/httpclient/model/HttpClientResponse.java similarity index 87% rename from src/main/java/org/prebid/server/vertx/http/model/HttpClientResponse.java rename to src/main/java/org/prebid/server/vertx/httpclient/model/HttpClientResponse.java index 654d987d8b4..7ed9056e62e 100644 --- a/src/main/java/org/prebid/server/vertx/http/model/HttpClientResponse.java +++ b/src/main/java/org/prebid/server/vertx/httpclient/model/HttpClientResponse.java @@ -1,4 +1,4 @@ -package org.prebid.server.vertx.http.model; +package org.prebid.server.vertx.httpclient.model; import io.vertx.core.MultiMap; import lombok.AllArgsConstructor; diff --git a/src/main/java/org/prebid/server/vertx/verticles/VerticleDefinition.java b/src/main/java/org/prebid/server/vertx/verticles/VerticleDefinition.java new file mode 100644 index 00000000000..52334bf3c97 --- /dev/null +++ b/src/main/java/org/prebid/server/vertx/verticles/VerticleDefinition.java @@ -0,0 +1,22 @@ +package org.prebid.server.vertx.verticles; + +import io.vertx.core.Verticle; +import lombok.Value; + +import java.util.function.Supplier; + +@Value(staticConstructor = "of") +public class VerticleDefinition { + + Supplier factory; + + int amount; + + public static VerticleDefinition ofSingleInstance(Supplier factory) { + return of(factory, 1); + } + + public static VerticleDefinition ofMultiInstance(Supplier factory, int amount) { + return of(factory, amount); + } +} diff --git a/src/main/java/org/prebid/server/vertx/verticles/server/HttpEndpoint.java b/src/main/java/org/prebid/server/vertx/verticles/server/HttpEndpoint.java new file mode 100644 index 00000000000..811f6a1aa1a --- /dev/null +++ b/src/main/java/org/prebid/server/vertx/verticles/server/HttpEndpoint.java @@ -0,0 +1,12 @@ +package org.prebid.server.vertx.verticles.server; + +import io.vertx.core.http.HttpMethod; +import lombok.Value; + +@Value(staticConstructor = "of") +public class HttpEndpoint { + + HttpMethod method; + + String path; +} diff --git a/src/main/java/org/prebid/server/vertx/verticles/server/ServerVerticle.java b/src/main/java/org/prebid/server/vertx/verticles/server/ServerVerticle.java new file mode 100644 index 00000000000..eed48d09cde --- /dev/null +++ b/src/main/java/org/prebid/server/vertx/verticles/server/ServerVerticle.java @@ -0,0 +1,73 @@ +package org.prebid.server.vertx.verticles.server; + +import io.vertx.core.AbstractVerticle; +import io.vertx.core.AsyncResult; +import io.vertx.core.Promise; +import io.vertx.core.http.HttpServer; +import io.vertx.core.http.HttpServerOptions; +import io.vertx.core.logging.Logger; +import io.vertx.core.logging.LoggerFactory; +import io.vertx.core.net.SocketAddress; +import io.vertx.ext.web.Router; +import org.apache.commons.lang3.ObjectUtils; +import org.prebid.server.handler.ExceptionHandler; + +import java.util.Objects; + +public class ServerVerticle extends AbstractVerticle { + + private static final Logger logger = LoggerFactory.getLogger(ServerVerticle.class); + + private final String name; + private final HttpServerOptions serverOptions; + private final SocketAddress address; + private final Router router; + private final ExceptionHandler exceptionHandler; + + public ServerVerticle(String name, + HttpServerOptions serverOptions, + SocketAddress address, + Router router, + ExceptionHandler exceptionHandler) { + + this.name = Objects.requireNonNull(name); + this.serverOptions = Objects.requireNonNull(serverOptions); + this.address = Objects.requireNonNull(address); + this.router = Objects.requireNonNull(router); + this.exceptionHandler = Objects.requireNonNull(exceptionHandler); + } + + public ServerVerticle(String name, SocketAddress address, Router router) { + this.name = Objects.requireNonNull(name); + this.serverOptions = null; + this.address = Objects.requireNonNull(address); + this.router = Objects.requireNonNull(router); + this.exceptionHandler = null; + } + + @Override + public void start(Promise startPromise) { + final HttpServerOptions httpServerOptions = ObjectUtils.getIfNull(serverOptions, HttpServerOptions::new); + final HttpServer server = vertx.createHttpServer(httpServerOptions) + .requestHandler(router); + + if (exceptionHandler != null) { + server.exceptionHandler(exceptionHandler); + } + + server.listen(address, result -> onServerStarted(result, startPromise)); + } + + private void onServerStarted(AsyncResult result, Promise startPromise) { + if (result.succeeded()) { + startPromise.tryComplete(); + logger.info( + "Successfully started {0} instance on address: {1}, thread: {2}", + name, + address, + Thread.currentThread().getName()); + } else { + startPromise.tryFail(result.cause()); + } + } +} diff --git a/src/main/java/org/prebid/server/vertx/verticles/server/admin/AdminResource.java b/src/main/java/org/prebid/server/vertx/verticles/server/admin/AdminResource.java new file mode 100644 index 00000000000..0f901ec1167 --- /dev/null +++ b/src/main/java/org/prebid/server/vertx/verticles/server/admin/AdminResource.java @@ -0,0 +1,13 @@ +package org.prebid.server.vertx.verticles.server.admin; + +import io.vertx.core.Handler; +import io.vertx.ext.web.RoutingContext; + +public interface AdminResource extends Handler { + + String path(); + + boolean isOnApplicationPort(); + + boolean isSecured(); +} diff --git a/src/main/java/org/prebid/server/vertx/verticles/server/application/ApplicationResource.java b/src/main/java/org/prebid/server/vertx/verticles/server/application/ApplicationResource.java new file mode 100644 index 00000000000..ee352dc9c99 --- /dev/null +++ b/src/main/java/org/prebid/server/vertx/verticles/server/application/ApplicationResource.java @@ -0,0 +1,12 @@ +package org.prebid.server.vertx.verticles.server.application; + +import io.vertx.core.Handler; +import io.vertx.ext.web.RoutingContext; +import org.prebid.server.vertx.verticles.server.HttpEndpoint; + +import java.util.List; + +public interface ApplicationResource extends Handler { + + List endpoints(); +} diff --git a/src/test/java/org/prebid/server/analytics/reporter/pubstack/PubstackAnalyticsReporterTest.java b/src/test/java/org/prebid/server/analytics/reporter/pubstack/PubstackAnalyticsReporterTest.java index d12201b0df4..69f1f46a4af 100644 --- a/src/test/java/org/prebid/server/analytics/reporter/pubstack/PubstackAnalyticsReporterTest.java +++ b/src/test/java/org/prebid/server/analytics/reporter/pubstack/PubstackAnalyticsReporterTest.java @@ -19,8 +19,8 @@ import org.prebid.server.analytics.reporter.pubstack.model.PubstackAnalyticsProperties; import org.prebid.server.analytics.reporter.pubstack.model.PubstackConfig; import org.prebid.server.exception.PreBidException; -import org.prebid.server.vertx.http.HttpClient; -import org.prebid.server.vertx.http.model.HttpClientResponse; +import org.prebid.server.vertx.httpclient.HttpClient; +import org.prebid.server.vertx.httpclient.model.HttpClientResponse; import org.springframework.test.util.ReflectionTestUtils; import java.util.Collections; diff --git a/src/test/java/org/prebid/server/analytics/reporter/pubstack/PubstackEventHandlerTest.java b/src/test/java/org/prebid/server/analytics/reporter/pubstack/PubstackEventHandlerTest.java index 98fd998571b..739e3b38b36 100644 --- a/src/test/java/org/prebid/server/analytics/reporter/pubstack/PubstackEventHandlerTest.java +++ b/src/test/java/org/prebid/server/analytics/reporter/pubstack/PubstackEventHandlerTest.java @@ -18,8 +18,8 @@ import org.prebid.server.auction.model.TimeoutContext; import org.prebid.server.cookie.UidsCookie; import org.prebid.server.execution.Timeout; -import org.prebid.server.vertx.http.HttpClient; -import org.prebid.server.vertx.http.model.HttpClientResponse; +import org.prebid.server.vertx.httpclient.HttpClient; +import org.prebid.server.vertx.httpclient.model.HttpClientResponse; import org.springframework.test.util.ReflectionTestUtils; import java.util.Set; diff --git a/src/test/java/org/prebid/server/auction/CurrencyConversionServiceTest.java b/src/test/java/org/prebid/server/auction/CurrencyConversionServiceTest.java index 643e2b53301..361c0ed72b8 100644 --- a/src/test/java/org/prebid/server/auction/CurrencyConversionServiceTest.java +++ b/src/test/java/org/prebid/server/auction/CurrencyConversionServiceTest.java @@ -21,8 +21,8 @@ import org.prebid.server.proto.openrtb.ext.request.ExtRequestCurrency; import org.prebid.server.proto.openrtb.ext.request.ExtRequestPrebid; import org.prebid.server.spring.config.model.ExternalConversionProperties; -import org.prebid.server.vertx.http.HttpClient; -import org.prebid.server.vertx.http.model.HttpClientResponse; +import org.prebid.server.vertx.httpclient.HttpClient; +import org.prebid.server.vertx.httpclient.model.HttpClientResponse; import java.math.BigDecimal; import java.time.Clock; diff --git a/src/test/java/org/prebid/server/bidder/BidderErrorNotifierTest.java b/src/test/java/org/prebid/server/bidder/BidderErrorNotifierTest.java index f95ffb6d6d4..9a2f49eefed 100644 --- a/src/test/java/org/prebid/server/bidder/BidderErrorNotifierTest.java +++ b/src/test/java/org/prebid/server/bidder/BidderErrorNotifierTest.java @@ -15,8 +15,8 @@ import org.prebid.server.bidder.model.BidderError; import org.prebid.server.bidder.model.HttpRequest; import org.prebid.server.metric.Metrics; -import org.prebid.server.vertx.http.HttpClient; -import org.prebid.server.vertx.http.model.HttpClientResponse; +import org.prebid.server.vertx.httpclient.HttpClient; +import org.prebid.server.vertx.httpclient.model.HttpClientResponse; import java.util.concurrent.TimeoutException; diff --git a/src/test/java/org/prebid/server/bidder/HttpBidderRequesterTest.java b/src/test/java/org/prebid/server/bidder/HttpBidderRequesterTest.java index 222fe74882d..6a7aeeb25bd 100644 --- a/src/test/java/org/prebid/server/bidder/HttpBidderRequesterTest.java +++ b/src/test/java/org/prebid/server/bidder/HttpBidderRequesterTest.java @@ -40,8 +40,8 @@ import org.prebid.server.proto.openrtb.ext.response.ExtHttpCall; import org.prebid.server.proto.openrtb.ext.response.FledgeAuctionConfig; import org.prebid.server.util.HttpUtil; -import org.prebid.server.vertx.http.HttpClient; -import org.prebid.server.vertx.http.model.HttpClientResponse; +import org.prebid.server.vertx.httpclient.HttpClient; +import org.prebid.server.vertx.httpclient.model.HttpClientResponse; import java.time.Clock; import java.time.Instant; diff --git a/src/test/java/org/prebid/server/cache/CacheServiceTest.java b/src/test/java/org/prebid/server/cache/CacheServiceTest.java index 4e4410b7b1c..e82e74342e6 100644 --- a/src/test/java/org/prebid/server/cache/CacheServiceTest.java +++ b/src/test/java/org/prebid/server/cache/CacheServiceTest.java @@ -44,8 +44,8 @@ import org.prebid.server.settings.model.Account; import org.prebid.server.settings.model.AccountAuctionConfig; import org.prebid.server.vast.VastModifier; -import org.prebid.server.vertx.http.HttpClient; -import org.prebid.server.vertx.http.model.HttpClientResponse; +import org.prebid.server.vertx.httpclient.HttpClient; +import org.prebid.server.vertx.httpclient.model.HttpClientResponse; import java.io.IOException; import java.net.MalformedURLException; diff --git a/src/test/java/org/prebid/server/floors/PriceFloorFetcherTest.java b/src/test/java/org/prebid/server/floors/PriceFloorFetcherTest.java index f84de82dbed..b0e5365f180 100644 --- a/src/test/java/org/prebid/server/floors/PriceFloorFetcherTest.java +++ b/src/test/java/org/prebid/server/floors/PriceFloorFetcherTest.java @@ -28,8 +28,8 @@ import org.prebid.server.settings.model.AccountAuctionConfig; import org.prebid.server.settings.model.AccountPriceFloorsConfig; import org.prebid.server.settings.model.AccountPriceFloorsFetchConfig; -import org.prebid.server.vertx.http.HttpClient; -import org.prebid.server.vertx.http.model.HttpClientResponse; +import org.prebid.server.vertx.httpclient.HttpClient; +import org.prebid.server.vertx.httpclient.model.HttpClientResponse; import java.math.BigDecimal; import java.util.concurrent.TimeoutException; diff --git a/src/test/java/org/prebid/server/handler/AccountCacheInvalidationHandlerTest.java b/src/test/java/org/prebid/server/handler/AccountCacheInvalidationHandlerTest.java index ccde1aa16f2..9a6f07d7a83 100644 --- a/src/test/java/org/prebid/server/handler/AccountCacheInvalidationHandlerTest.java +++ b/src/test/java/org/prebid/server/handler/AccountCacheInvalidationHandlerTest.java @@ -10,6 +10,7 @@ import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; import org.prebid.server.VertxTest; +import org.prebid.server.handler.admin.AccountCacheInvalidationHandler; import org.prebid.server.settings.CachingApplicationSettings; import static org.mockito.ArgumentMatchers.any; diff --git a/src/test/java/org/prebid/server/handler/CollectedMetricsHandlerTest.java b/src/test/java/org/prebid/server/handler/CollectedMetricsHandlerTest.java index 59e3bdb0bf7..342c4b33ad0 100644 --- a/src/test/java/org/prebid/server/handler/CollectedMetricsHandlerTest.java +++ b/src/test/java/org/prebid/server/handler/CollectedMetricsHandlerTest.java @@ -17,6 +17,7 @@ import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; import org.prebid.server.VertxTest; +import org.prebid.server.handler.admin.CollectedMetricsHandler; import org.prebid.server.util.HttpUtil; import java.util.Collections; diff --git a/src/test/java/org/prebid/server/handler/CurrencyRatesHandlerTest.java b/src/test/java/org/prebid/server/handler/CurrencyRatesHandlerTest.java index bce27ba876a..fabb4bcb61b 100644 --- a/src/test/java/org/prebid/server/handler/CurrencyRatesHandlerTest.java +++ b/src/test/java/org/prebid/server/handler/CurrencyRatesHandlerTest.java @@ -13,6 +13,7 @@ import org.mockito.junit.MockitoRule; import org.prebid.server.VertxTest; import org.prebid.server.currency.CurrencyConversionService; +import org.prebid.server.handler.admin.CurrencyRatesHandler; import java.math.BigDecimal; import java.time.ZonedDateTime; diff --git a/src/test/java/org/prebid/server/handler/CustomizedAdminEndpointTest.java b/src/test/java/org/prebid/server/handler/CustomizedAdminEndpointTest.java deleted file mode 100644 index 65a54d77a4c..00000000000 --- a/src/test/java/org/prebid/server/handler/CustomizedAdminEndpointTest.java +++ /dev/null @@ -1,118 +0,0 @@ -package org.prebid.server.handler; - -import io.vertx.core.Handler; -import io.vertx.ext.web.Route; -import io.vertx.ext.web.Router; -import io.vertx.ext.web.RoutingContext; -import io.vertx.ext.web.handler.AuthHandler; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.mockito.Mock; -import org.mockito.junit.MockitoJUnit; -import org.mockito.junit.MockitoRule; -import org.prebid.server.VertxTest; - -import java.util.Collections; -import java.util.Map; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatExceptionOfType; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.BDDMockito.given; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.verifyNoMoreInteractions; - -public class CustomizedAdminEndpointTest extends VertxTest { - - private static final String PATH = "test"; - - @Rule - public final MockitoRule mockitoRule = MockitoJUnit.rule(); - - private CustomizedAdminEndpoint target; - - @Mock - private Handler handler; - - @Mock - private Router router; - - @Mock - private Route route; - - private final Map adminEndpointCredentials = Collections.singletonMap("user", "pass"); - - @Before - public void setUp() { - target = new CustomizedAdminEndpoint(PATH, handler, true, true); - - given(router.route(any())).willReturn(route); - given(route.handler(any())).willReturn(route); - } - - @Test - public void routeShouldThrowExceptionWhenProtectedButCredentialsNotProvided() { - // when and then - assertThatExceptionOfType(IllegalArgumentException.class) - .isThrownBy(() -> target.router(router)) - .withMessage("Credentials for admin endpoint is empty."); - } - - @Test - public void routeShouldCallAuthAndHandlerWhenProtectedAndCredentialsProvided() { - // given - target.withCredentials(adminEndpointCredentials); - - // when - target.router(router); - - // then - verify(router).route(PATH); - verify(route).handler(any(AuthHandler.class)); - verify(route).handler(handler); - - verifyNoMoreInteractions(route); - verifyNoMoreInteractions(router); - } - - @Test - public void routeShouldCallRouterWhenProtectedAndNoCredentials() { - // given - target.withCredentials(Collections.emptyMap()); - - // when - target.router(router); - - // then - verify(router).route(PATH); - verify(route).handler(any(AuthHandler.class)); - verify(route).handler(handler); - - verifyNoMoreInteractions(route); - verifyNoMoreInteractions(router); - } - - @Test - public void routeShouldCallRouterWhenNotProtectedAndCredentialsProvided() { - // given - target = new CustomizedAdminEndpoint(PATH, handler, true, false); - target.withCredentials(adminEndpointCredentials); - - // when - target.router(router); - - // then - verify(router).route(PATH); - verify(route).handler(handler); - - verifyNoMoreInteractions(route); - verifyNoMoreInteractions(router); - } - - @Test - public void isOnApplicationPortShouldReturnTrue() { - // when and then - assertThat(target.isOnApplicationPort()).isTrue(); - } -} diff --git a/src/test/java/org/prebid/server/handler/HttpInteractionLogHandlerTest.java b/src/test/java/org/prebid/server/handler/HttpInteractionLogHandlerTest.java index 3ac0f223ba1..669b235971a 100644 --- a/src/test/java/org/prebid/server/handler/HttpInteractionLogHandlerTest.java +++ b/src/test/java/org/prebid/server/handler/HttpInteractionLogHandlerTest.java @@ -10,6 +10,7 @@ import org.mockito.Mock; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; +import org.prebid.server.handler.admin.HttpInteractionLogHandler; import org.prebid.server.log.HttpInteractionLogger; import org.prebid.server.log.model.HttpLogSpec; diff --git a/src/test/java/org/prebid/server/handler/LoggerControlKnobHandlerTest.java b/src/test/java/org/prebid/server/handler/LoggerControlKnobHandlerTest.java index 6d244c0a0bc..5386e80835c 100644 --- a/src/test/java/org/prebid/server/handler/LoggerControlKnobHandlerTest.java +++ b/src/test/java/org/prebid/server/handler/LoggerControlKnobHandlerTest.java @@ -10,6 +10,7 @@ import org.mockito.Mock; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; +import org.prebid.server.handler.admin.LoggerControlKnobHandler; import org.prebid.server.log.LoggerControlKnob; import java.time.Duration; diff --git a/src/test/java/org/prebid/server/handler/SettingsCacheNotificationHandlerTest.java b/src/test/java/org/prebid/server/handler/SettingsCacheNotificationHandlerTest.java index e8aa1cb8925..f309751fc6f 100644 --- a/src/test/java/org/prebid/server/handler/SettingsCacheNotificationHandlerTest.java +++ b/src/test/java/org/prebid/server/handler/SettingsCacheNotificationHandlerTest.java @@ -13,6 +13,7 @@ import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; import org.prebid.server.VertxTest; +import org.prebid.server.handler.admin.SettingsCacheNotificationHandler; import org.prebid.server.settings.CacheNotificationListener; import org.prebid.server.settings.proto.request.InvalidateSettingsCacheRequest; import org.prebid.server.settings.proto.request.UpdateSettingsCacheRequest; diff --git a/src/test/java/org/prebid/server/handler/TracerLogHandlerTest.java b/src/test/java/org/prebid/server/handler/TracerLogHandlerTest.java index 0d94217fea3..4cddd8219a2 100644 --- a/src/test/java/org/prebid/server/handler/TracerLogHandlerTest.java +++ b/src/test/java/org/prebid/server/handler/TracerLogHandlerTest.java @@ -11,6 +11,7 @@ import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; import org.prebid.server.VertxTest; +import org.prebid.server.handler.admin.TracerLogHandler; import org.prebid.server.log.CriteriaManager; import static org.mockito.ArgumentMatchers.any; diff --git a/src/test/java/org/prebid/server/handler/VersionHandlerTest.java b/src/test/java/org/prebid/server/handler/VersionHandlerTest.java index 5d3b9f62128..aba9e183ee8 100644 --- a/src/test/java/org/prebid/server/handler/VersionHandlerTest.java +++ b/src/test/java/org/prebid/server/handler/VersionHandlerTest.java @@ -11,6 +11,7 @@ import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; import org.prebid.server.VertxTest; +import org.prebid.server.handler.admin.VersionHandler; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.verify; diff --git a/src/test/java/org/prebid/server/optout/GoogleRecaptchaVerifierTest.java b/src/test/java/org/prebid/server/optout/GoogleRecaptchaVerifierTest.java index 112235f9089..876cc216bfa 100644 --- a/src/test/java/org/prebid/server/optout/GoogleRecaptchaVerifierTest.java +++ b/src/test/java/org/prebid/server/optout/GoogleRecaptchaVerifierTest.java @@ -11,8 +11,8 @@ import org.mockito.junit.MockitoRule; import org.prebid.server.VertxTest; import org.prebid.server.exception.PreBidException; -import org.prebid.server.vertx.http.HttpClient; -import org.prebid.server.vertx.http.model.HttpClientResponse; +import org.prebid.server.vertx.httpclient.HttpClient; +import org.prebid.server.vertx.httpclient.model.HttpClientResponse; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; diff --git a/src/test/java/org/prebid/server/privacy/gdpr/vendorlist/VendorListServiceTest.java b/src/test/java/org/prebid/server/privacy/gdpr/vendorlist/VendorListServiceTest.java index af2969794ac..81c2cd3b55c 100644 --- a/src/test/java/org/prebid/server/privacy/gdpr/vendorlist/VendorListServiceTest.java +++ b/src/test/java/org/prebid/server/privacy/gdpr/vendorlist/VendorListServiceTest.java @@ -24,8 +24,8 @@ import org.prebid.server.privacy.gdpr.vendorlist.proto.SpecialPurpose; import org.prebid.server.privacy.gdpr.vendorlist.proto.Vendor; import org.prebid.server.privacy.gdpr.vendorlist.proto.VendorList; -import org.prebid.server.vertx.http.HttpClient; -import org.prebid.server.vertx.http.model.HttpClientResponse; +import org.prebid.server.vertx.httpclient.HttpClient; +import org.prebid.server.vertx.httpclient.model.HttpClientResponse; import java.io.File; import java.util.Date; diff --git a/src/test/java/org/prebid/server/settings/HttpApplicationSettingsTest.java b/src/test/java/org/prebid/server/settings/HttpApplicationSettingsTest.java index 2b90e48b926..9723f3b45a7 100644 --- a/src/test/java/org/prebid/server/settings/HttpApplicationSettingsTest.java +++ b/src/test/java/org/prebid/server/settings/HttpApplicationSettingsTest.java @@ -20,8 +20,8 @@ import org.prebid.server.settings.model.StoredResponseDataResult; import org.prebid.server.settings.proto.response.HttpAccountsResponse; import org.prebid.server.settings.proto.response.HttpFetcherResponse; -import org.prebid.server.vertx.http.HttpClient; -import org.prebid.server.vertx.http.model.HttpClientResponse; +import org.prebid.server.vertx.httpclient.HttpClient; +import org.prebid.server.vertx.httpclient.model.HttpClientResponse; import java.time.Clock; import java.time.Instant; diff --git a/src/test/java/org/prebid/server/settings/service/HttpPeriodicRefreshServiceTest.java b/src/test/java/org/prebid/server/settings/service/HttpPeriodicRefreshServiceTest.java index 7184a1968b4..547d1484199 100644 --- a/src/test/java/org/prebid/server/settings/service/HttpPeriodicRefreshServiceTest.java +++ b/src/test/java/org/prebid/server/settings/service/HttpPeriodicRefreshServiceTest.java @@ -14,8 +14,8 @@ import org.prebid.server.VertxTest; import org.prebid.server.settings.CacheNotificationListener; import org.prebid.server.settings.proto.response.HttpRefreshResponse; -import org.prebid.server.vertx.http.HttpClient; -import org.prebid.server.vertx.http.model.HttpClientResponse; +import org.prebid.server.vertx.httpclient.HttpClient; +import org.prebid.server.vertx.httpclient.model.HttpClientResponse; import java.util.Map; diff --git a/src/test/java/org/prebid/server/vertx/http/BasicHttpClientTest.java b/src/test/java/org/prebid/server/vertx/httpclient/BasicHttpClientTest.java similarity index 99% rename from src/test/java/org/prebid/server/vertx/http/BasicHttpClientTest.java rename to src/test/java/org/prebid/server/vertx/httpclient/BasicHttpClientTest.java index 5cb36c68ccb..a11a4cb2265 100644 --- a/src/test/java/org/prebid/server/vertx/http/BasicHttpClientTest.java +++ b/src/test/java/org/prebid/server/vertx/httpclient/BasicHttpClientTest.java @@ -1,4 +1,4 @@ -package org.prebid.server.vertx.http; +package org.prebid.server.vertx.httpclient; import io.vertx.core.Future; import io.vertx.core.Handler; diff --git a/src/test/java/org/prebid/server/vertx/http/CircuitBreakerSecuredHttpClientTest.java b/src/test/java/org/prebid/server/vertx/httpclient/CircuitBreakerSecuredHttpClientTest.java similarity index 98% rename from src/test/java/org/prebid/server/vertx/http/CircuitBreakerSecuredHttpClientTest.java rename to src/test/java/org/prebid/server/vertx/httpclient/CircuitBreakerSecuredHttpClientTest.java index 9a1d4e72882..f46af11e7a3 100644 --- a/src/test/java/org/prebid/server/vertx/http/CircuitBreakerSecuredHttpClientTest.java +++ b/src/test/java/org/prebid/server/vertx/httpclient/CircuitBreakerSecuredHttpClientTest.java @@ -1,4 +1,4 @@ -package org.prebid.server.vertx.http; +package org.prebid.server.vertx.httpclient; import io.vertx.core.Future; import io.vertx.core.Vertx; @@ -18,7 +18,7 @@ import org.mockito.junit.MockitoRule; import org.prebid.server.exception.PreBidException; import org.prebid.server.metric.Metrics; -import org.prebid.server.vertx.http.model.HttpClientResponse; +import org.prebid.server.vertx.httpclient.model.HttpClientResponse; import java.time.Clock; import java.time.Instant;