Don't track IPv4/IPv6 metrics at the application level
We can measure this at the infrastructure level without observing IPs directly.
This commit is contained in:
parent
1ac0140666
commit
ce60f13320
|
@ -8,20 +8,14 @@ package org.whispersystems.textsecuregcm.filters;
|
||||||
import static com.codahale.metrics.MetricRegistry.name;
|
import static com.codahale.metrics.MetricRegistry.name;
|
||||||
import static java.util.Objects.requireNonNull;
|
import static java.util.Objects.requireNonNull;
|
||||||
|
|
||||||
import com.google.common.net.HttpHeaders;
|
|
||||||
import com.google.common.net.InetAddresses;
|
|
||||||
import io.micrometer.core.instrument.Metrics;
|
import io.micrometer.core.instrument.Metrics;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.Inet4Address;
|
|
||||||
import java.net.Inet6Address;
|
|
||||||
import java.net.InetAddress;
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
import javax.ws.rs.container.ContainerRequestContext;
|
import javax.ws.rs.container.ContainerRequestContext;
|
||||||
import javax.ws.rs.container.ContainerRequestFilter;
|
import javax.ws.rs.container.ContainerRequestFilter;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.whispersystems.textsecuregcm.metrics.TrafficSource;
|
import org.whispersystems.textsecuregcm.metrics.TrafficSource;
|
||||||
import org.whispersystems.textsecuregcm.util.HeaderUtils;
|
|
||||||
|
|
||||||
public class RequestStatisticsFilter implements ContainerRequestFilter {
|
public class RequestStatisticsFilter implements ContainerRequestFilter {
|
||||||
|
|
||||||
|
@ -29,12 +23,8 @@ public class RequestStatisticsFilter implements ContainerRequestFilter {
|
||||||
|
|
||||||
private static final String CONTENT_LENGTH_DISTRIBUTION_NAME = name(RequestStatisticsFilter.class, "contentLength");
|
private static final String CONTENT_LENGTH_DISTRIBUTION_NAME = name(RequestStatisticsFilter.class, "contentLength");
|
||||||
|
|
||||||
private static final String IP_VERSION_METRIC = name(RequestStatisticsFilter.class, "ipVersion");
|
|
||||||
|
|
||||||
private static final String TRAFFIC_SOURCE_TAG = "trafficSource";
|
private static final String TRAFFIC_SOURCE_TAG = "trafficSource";
|
||||||
|
|
||||||
private static final String IP_VERSION_TAG = "ipVersion";
|
|
||||||
|
|
||||||
@Nonnull
|
@Nonnull
|
||||||
private final String trafficSourceTag;
|
private final String trafficSourceTag;
|
||||||
|
|
||||||
|
@ -48,31 +38,8 @@ public class RequestStatisticsFilter implements ContainerRequestFilter {
|
||||||
try {
|
try {
|
||||||
Metrics.summary(CONTENT_LENGTH_DISTRIBUTION_NAME, TRAFFIC_SOURCE_TAG, trafficSourceTag)
|
Metrics.summary(CONTENT_LENGTH_DISTRIBUTION_NAME, TRAFFIC_SOURCE_TAG, trafficSourceTag)
|
||||||
.record(requestContext.getLength());
|
.record(requestContext.getLength());
|
||||||
Metrics.counter(IP_VERSION_METRIC, TRAFFIC_SOURCE_TAG, trafficSourceTag, IP_VERSION_TAG, resolveIpVersion(requestContext))
|
|
||||||
.increment();
|
|
||||||
} catch (final Exception e) {
|
} catch (final Exception e) {
|
||||||
logger.warn("Error recording request statistics", e);
|
logger.warn("Error recording request statistics", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nonnull
|
|
||||||
private static String resolveIpVersion(@Nonnull final ContainerRequestContext ctx) {
|
|
||||||
return HeaderUtils.getMostRecentProxy(ctx.getHeaderString(HttpHeaders.X_FORWARDED_FOR))
|
|
||||||
.map(ipString -> {
|
|
||||||
try {
|
|
||||||
//noinspection UnstableApiUsage
|
|
||||||
final InetAddress addr = InetAddresses.forString(ipString);
|
|
||||||
if (addr instanceof Inet4Address) {
|
|
||||||
return "IPv4";
|
|
||||||
}
|
|
||||||
if (addr instanceof Inet6Address) {
|
|
||||||
return "IPv6";
|
|
||||||
}
|
|
||||||
} catch (IllegalArgumentException e) {
|
|
||||||
// ignore illegal argument exception
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
})
|
|
||||||
.orElse("unresolved");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue