diff --git a/src/main/java/org/prebid/server/auction/ExchangeService.java b/src/main/java/org/prebid/server/auction/ExchangeService.java index c7258a8faa7..afd05e3a1c4 100644 --- a/src/main/java/org/prebid/server/auction/ExchangeService.java +++ b/src/main/java/org/prebid/server/auction/ExchangeService.java @@ -1473,6 +1473,7 @@ private List updateResponsesMetrics(List.* metric shouldn't be populated" def metrics = defaultPbsService.sendCollectedMetricsRequest() - assert !metrics.find { it.key.startsWith("account.${accountId}") } + def filteredMetrics = metrics.findAll { it.key != "account.${accountId}.requests.gotbids" } + assert !filteredMetrics.find { it.key.startsWith("account.${accountId}") } } def "PBS should update account..requests metric when verbosity level is basic"() { @@ -94,9 +96,44 @@ class MetricsSpec extends BaseSpec { assert metrics["account.${accountId}.adapter.generic.request_time" as String] == 1 assert metrics["account.${accountId}.adapter.generic.requests.gotbids" as String] == 1 assert metrics["account.${accountId}.requests" as String] == 1 + assert metrics["account.${accountId}.requests.gotbids" as String] == 1 assert metrics["account.${accountId}.requests.type.openrtb2-web" as String] == 1 } + def "PBS should not populate bid-related account metrics for failed bidder response when verbosity level is detailed"() { + given: "Default basic BidRequest with generic bidder" + def bidRequest = BidRequest.defaultBidRequest + + and: "Default basic BidResponse with bid price" + def bidResponse = BidResponse.getDefaultBidResponse(bidRequest) + + and: "Set bidder response to internal server error" + bidder.setResponse(bidRequest.id, bidResponse, SC_INTERNAL_SERVER_ERROR) + + and: "Account in the DB" + def accountId = bidRequest.site.publisher.id + def accountMetricsConfig = new AccountConfig(metrics: new AccountMetricsConfig(verbosityLevel: DETAILED)) + def account = new Account(uuid: accountId, config: accountMetricsConfig) + accountDao.save(account) + + when: "PBS processes auction request" + defaultPbsService.sendAuctionRequest(bidRequest) + + then: "General request metrics should be populated" + def metrics = defaultPbsService.sendCollectedMetricsRequest() + assert metrics["account.${accountId}.requests" as String] == 1 + assert metrics["account.${accountId}.requests.type.openrtb2-web" as String] == 1 + + and: "Adapter request time should be populated" + assert metrics["account.${accountId}.adapter.generic.request_time" as String] == 1 + + and: "Bid-related metrics should not be populated due to bidder error" + assert !metrics["account.${accountId}.requests.gotbids" as String] + assert !metrics["account.${accountId}.adapter.generic.requests.gotbids" as String] + assert !metrics["account.${accountId}.adapter.generic.bids_received" as String] + assert !metrics["account.${accountId}.adapter.generic.prices" as String] + } + def "PBS should update hood metrics when bid request contains hood channel type and verbosity level is detailed"() { given: "Default basic BidRequest with generic bidder" def bidRequest = BidRequest.getDefaultBidRequest(DOOH) @@ -183,8 +220,8 @@ class MetricsSpec extends BaseSpec { where: bidRequest << [BidRequest.getDefaultBidRequest(APP).tap { - it.dooh = Dooh.defaultDooh - }, + it.dooh = Dooh.defaultDooh + }, BidRequest.getDefaultBidRequest(APP).tap { it.site = Site.defaultSite }, diff --git a/src/test/java/org/prebid/server/metric/MetricsTest.java b/src/test/java/org/prebid/server/metric/MetricsTest.java index 0eed97eab2d..79b434ec4d4 100644 --- a/src/test/java/org/prebid/server/metric/MetricsTest.java +++ b/src/test/java/org/prebid/server/metric/MetricsTest.java @@ -601,6 +601,15 @@ public void updateAdapterRequestGotbidsMetricsShouldIncrementMetrics() { .isEqualTo(2); } + @Test + public void updateAccountRequestGotbidsMetricsShouldIncrementMetric() { + // when + metrics.updateAccountRequestGotbidsMetric(ACCOUNT_ID); + + // then + assertThat(metricRegistry.counter("account.accountId.requests.gotbids").getCount()).isOne(); + } + @Test public void updateAdapterBidMetricsShouldUpdateMetrics() { // when