diff --git a/service/config/sample.yml b/service/config/sample.yml index bcf76bb8c..da2a2c2f0 100644 --- a/service/config/sample.yml +++ b/service/config/sample.yml @@ -24,6 +24,9 @@ metrics: - "service:chat" transport: apiKey: secret://datadog.apiKey + udpTransport: + statsdHost: localhost + port: 8125 excludesAttributes: - m1_rate - m5_rate diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/metrics/SignalDatadogReporterFactory.java b/service/src/main/java/org/whispersystems/textsecuregcm/metrics/SignalDatadogReporterFactory.java index a00247396..ed6d01440 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/metrics/SignalDatadogReporterFactory.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/metrics/SignalDatadogReporterFactory.java @@ -19,7 +19,9 @@ import io.dropwizard.util.Duration; import java.util.ArrayList; import java.util.EnumSet; import java.util.List; +import java.util.Optional; import javax.validation.Valid; +import javax.validation.constraints.Min; import javax.validation.constraints.NotNull; import org.coursera.metrics.datadog.DatadogReporter; import org.coursera.metrics.datadog.DatadogReporter.Expansion; @@ -27,6 +29,8 @@ import org.coursera.metrics.datadog.DefaultMetricNameFormatterFactory; import org.coursera.metrics.datadog.DynamicTagsCallbackFactory; import org.coursera.metrics.datadog.MetricNameFormatterFactory; import org.coursera.metrics.datadog.transport.HttpTransport; +import org.coursera.metrics.datadog.transport.Transport; +import org.coursera.metrics.datadog.transport.UdpTransport; import org.whispersystems.textsecuregcm.WhisperServerVersion; import org.whispersystems.textsecuregcm.configuration.secrets.SecretString; import org.whispersystems.textsecuregcm.util.HostnameUtil; @@ -54,6 +58,11 @@ public class SignalDatadogReporterFactory extends BaseReporterFactory { @JsonProperty("transport") private HttpTransportConfig httpTransportConfig; + @Valid + @NotNull + @JsonProperty("udpTransport") + private UdpTransportConfig udpTransportConfig; + private static final EnumSet EXPANSIONS = EnumSet.of( Expansion.COUNT, Expansion.MIN, @@ -80,8 +89,12 @@ public class SignalDatadogReporterFactory extends BaseReporterFactory { } } + final boolean useUdpTransport = Optional.ofNullable(System.getenv("SIGNAL_USE_DATADOG_UDP_TRANSPORT")).isPresent(); + final Transport transport = + useUdpTransport ? udpTransportConfig.udpTransport() : httpTransportConfig.httpTransport(); + return DatadogReporter.forRegistry(registry) - .withTransport(httpTransportConfig.httpTransport()) + .withTransport(transport) .withHost(HostnameUtil.getLocalHostname()) .withTags(tagsWithVersion) .withPrefix(prefix) @@ -115,4 +128,14 @@ public class SignalDatadogReporterFactory extends BaseReporterFactory { .build(); } } + + public record UdpTransportConfig(@NotNull String statsdHost, @Min(1) int port) { + + public UdpTransport udpTransport() { + return new UdpTransport.Builder() + .withStatsdHost(statsdHost) + .withPort(port) + .build(); + } + } }