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

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 8 additions & 8 deletions src/main/java/org/prebid/cache/handlers/cache/CacheHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
import org.prebid.cache.handlers.MetricsHandler;
import org.prebid.cache.handlers.ServiceType;
import org.prebid.cache.log.ConditionalLogger;
import org.prebid.cache.metrics.MetricsRecorder;
import org.prebid.cache.metrics.MeasurementTag;
import org.prebid.cache.metrics.MetricsRecorder.MetricsRecorderTimer;
import org.springframework.core.io.buffer.DataBufferLimitException;
import org.springframework.http.HttpHeaders;
Expand Down Expand Up @@ -69,7 +69,7 @@ Mono<ServerResponse> finalizeResult(final Mono<ServerResponse> mono,

private Mono<ServerResponse> handleErrorMetrics(final Throwable error, final ServerRequest request) {
if (error instanceof RepositoryException) {
recordMetric(MetricsRecorder.MeasurementTag.ERROR_DB);
recordMetric(MeasurementTag.ERROR_DB);
} else if (error instanceof ResourceNotFoundException) {
conditionalLogger.info(
error.getMessage()
Expand All @@ -79,7 +79,7 @@ private Mono<ServerResponse> handleErrorMetrics(final Throwable error, final Ser
} else if (error instanceof BadRequestException) {
log.error(error.getMessage());
} else if (error instanceof TimeoutException) {
metricsRecorder.markMeterForTag(this.metricTagPrefix, MetricsRecorder.MeasurementTag.ERROR_TIMEDOUT);
metricsRecorder.markMeterForTag(this.metricTagPrefix, MeasurementTag.ERROR_TIMED_OUT);
} else if (error instanceof DataBufferLimitException) {
final long contentLength = request.headers().contentLength().orElse(UNKNOWN_SIZE_VALUE);
conditionalLogger.error(
Expand All @@ -98,17 +98,17 @@ private void handleErrorStatusCodes(ServerRequest request, Signal<ServerResponse
final var response = signal.get();
HttpMethod method = request.method();
if (method == null || signal.isOnError() || response == null) {
recordMetric(MetricsRecorder.MeasurementTag.ERROR_UNKNOWN);
recordMetric(MeasurementTag.ERROR_UNKNOWN);
} else if (response.statusCode() == HttpStatus.INTERNAL_SERVER_ERROR) {
recordMetric(MetricsRecorder.MeasurementTag.ERROR_UNKNOWN);
recordMetric(MeasurementTag.ERROR_UNKNOWN);
} else if (response.statusCode() == HttpStatus.BAD_REQUEST) {
recordMetric(MetricsRecorder.MeasurementTag.ERROR_BAD_REQUEST);
recordMetric(MeasurementTag.ERROR_BAD_REQUEST);
} else if (response.statusCode() == HttpStatus.NOT_FOUND) {
recordMetric(MetricsRecorder.MeasurementTag.ERROR_MISSINGID);
recordMetric(MeasurementTag.ERROR_MISSING_ID);
}
}

private void recordMetric(MetricsRecorder.MeasurementTag tag) {
private void recordMetric(MeasurementTag tag) {
metricsRecorder.markMeterForTag(this.metricTagPrefix, tag);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import org.prebid.cache.handlers.ErrorHandler;
import org.prebid.cache.handlers.PayloadType;
import org.prebid.cache.handlers.ServiceType;
import org.prebid.cache.metrics.MeasurementTag;
import org.prebid.cache.metrics.MetricsRecorder;
import org.prebid.cache.metrics.MetricsRecorder.MetricsRecorderTimer;
import org.prebid.cache.model.PayloadWrapper;
Expand Down Expand Up @@ -77,7 +78,7 @@ private static Map<String, WebClient> createClientsCache(final int ttl, final in

public Mono<ServerResponse> fetch(ServerRequest request) {
// metrics
metricsRecorder.markMeterForTag(this.metricTagPrefix, MetricsRecorder.MeasurementTag.REQUEST);
metricsRecorder.markMeterForTag(this.metricTagPrefix, MeasurementTag.REQUEST);
final var timerContext = metricsRecorder.createRequestTimerForServiceType(this.type);

return request.queryParam(ID_KEY).map(id -> fetch(request, id, timerContext)).orElseGet(() -> {
Expand Down Expand Up @@ -163,14 +164,13 @@ private Mono<ServerResponse> processRequest(final ServerRequest request, final S

private Mono<ServerResponse> createServerResponse(final PayloadWrapper wrapper, final ServerRequest request) {
if (wrapper.getPayload().getType().equals(PayloadType.JSON.toString())) {
metricsRecorder.markMeterForTag(this.metricTagPrefix, MetricsRecorder.MeasurementTag.JSON);
metricsRecorder.markMeterForTag(this.metricTagPrefix, MeasurementTag.JSON);
return builder.createResponseMono(request, MediaType.APPLICATION_JSON_UTF8, wrapper);
} else if (wrapper.getPayload().getType().equals(PayloadType.XML.toString())) {
metricsRecorder.markMeterForTag(this.metricTagPrefix, MetricsRecorder.MeasurementTag.XML);
metricsRecorder.markMeterForTag(this.metricTagPrefix, MeasurementTag.XML);
return builder.createResponseMono(request, MediaType.APPLICATION_XML, wrapper);
}

return Mono.error(new UnsupportedMediaTypeException(UNSUPPORTED_MEDIATYPE));
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import org.prebid.cache.handlers.ErrorHandler;
import org.prebid.cache.handlers.ServiceType;
import org.prebid.cache.helpers.RandomUUID;
import org.prebid.cache.metrics.MeasurementTag;
import org.prebid.cache.metrics.MetricsRecorder;
import org.prebid.cache.model.Payload;
import org.prebid.cache.model.PayloadTransfer;
Expand Down Expand Up @@ -85,11 +86,17 @@ public PostCacheHandler(final ReactiveRepository<PayloadWrapper, String> reposit
}

public Mono<ServerResponse> save(final ServerRequest request) {
if (!isWriteAllowed(request)) {
final boolean isValidApiKey = isValidApiKey(request);
if (isValidApiKey) {
metricsRecorder.markMeterForTag(metricTagPrefix, MeasurementTag.REQUEST_TRUSTED);
}

if (apiConfig.isCacheWriteSecured() && !isValidApiKey) {
metricsRecorder.markMeterForTag(metricTagPrefix, MeasurementTag.ERROR_UNAUTHORIZED);
return ServerResponse.status(HttpStatus.UNAUTHORIZED).build();
}

metricsRecorder.markMeterForTag(this.metricTagPrefix, MetricsRecorder.MeasurementTag.REQUEST);
metricsRecorder.markMeterForTag(this.metricTagPrefix, MeasurementTag.REQUEST);
final var timerContext = metricsRecorder.createRequestTimerForServiceType(type);

String secondaryCache = request.queryParam(SECONDARY_CACHE_KEY).orElse(StringUtils.EMPTY);
Expand Down Expand Up @@ -128,9 +135,8 @@ public Mono<ServerResponse> save(final ServerRequest request) {
return finalizeResult(responseMono, request, timerContext);
}

private boolean isWriteAllowed(final ServerRequest request) {
return !apiConfig.isCacheWriteSecured()
|| StringUtils.equals(request.headers().firstHeader(API_KEY_HEADER), apiConfig.getApiKey());
private boolean isValidApiKey(final ServerRequest request) {
return StringUtils.equals(request.headers().firstHeader(API_KEY_HEADER), apiConfig.getApiKey());
}

private Function<PayloadTransfer, PayloadWrapper> payloadWrapperTransformer() {
Expand Down
29 changes: 29 additions & 0 deletions src/main/java/org/prebid/cache/metrics/MeasurementTag.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package org.prebid.cache.metrics;

import lombok.Getter;

@Getter
public enum MeasurementTag {
REQUEST_DURATION("pbc.${prefix}.request.duration"),
REQUEST("pbc.${prefix}.request"),
REQUEST_TRUSTED("pbc.${prefix}.trustedRequest"),
REQUEST_INVALID("pbc.request.invalid"),
ERROR_UNKNOWN("pbc.${prefix}.err.unknown"),
ERROR_TIMED_OUT("pbc.${prefix}.err.timedOut"),
ERROR_MISSING_ID("pbc.${prefix}.err.missingId"),
ERROR_BAD_REQUEST("pbc.${prefix}.err.badRequest"),
ERROR_UNAUTHORIZED("pbc.${prefix}.err.unauthorized"),
ERROR_DB("pbc.${prefix}.err.db"),
JSON("pbc.${prefix}.json"),
XML("pbc.${prefix}.xml"),
ERROR_SECONDARY_WRITE("pbc.err.secondaryWrite"),
ERROR_EXISTING_ID("pbc.err.existingId"),
PROXY_SUCCESS("pbc.proxy.success"),
PROXY_FAILURE("pbc.proxy.failure");

private final String tag;

MeasurementTag(final String tag) {
this.tag = tag;
}
}
27 changes: 1 addition & 26 deletions src/main/java/org/prebid/cache/metrics/MetricsRecorder.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.Timer;
import lombok.Getter;
import org.prebid.cache.handlers.ServiceType;
import org.springframework.stereotype.Component;

Expand All @@ -18,30 +17,6 @@ public MetricsRecorder(MeterRegistry meterRegistry) {
this.meterRegistry = meterRegistry;
}

public enum MeasurementTag {
REQUEST_DURATION("pbc.${prefix}.request.duration"),
REQUEST("pbc.${prefix}.request"),
ERROR_UNKNOWN("pbc.${prefix}.err.unknown"),
ERROR_TIMEDOUT("pbc.${prefix}.err.timedOut"),
ERROR_MISSINGID("pbc.${prefix}.err.missingId"),
ERROR_BAD_REQUEST("pbc.${prefix}.err.badRequest"),
REQUEST_INVALID("pbc.request.invalid"),
JSON("pbc.${prefix}.json"),
XML("pbc.${prefix}.xml"),
ERROR_DB("pbc.${prefix}.err.db"),
ERROR_SECONDARY_WRITE("pbc.err.secondaryWrite"),
ERROR_EXISTINGID("pbc.err.existingId"),
PROXY_SUCCESS("pbc.proxy.success"),
PROXY_FAILURE("pbc.proxy.failure");

@Getter
private final String tag;

MeasurementTag(final String tag) {
this.tag = tag;
}
}

public class MetricsRecorderTimer {
private final Timer timer;
private final Timer.Sample sample;
Expand All @@ -65,7 +40,7 @@ public Counter getSecondaryCacheWriteError() {
}

public Counter getExistingKeyError() {
return meterRegistry.counter(MeasurementTag.ERROR_EXISTINGID.getTag());
return meterRegistry.counter(MeasurementTag.ERROR_EXISTING_ID.getTag());
}

public Counter getProxySuccess() {
Expand Down