From 67e57947227767b07fdd9f2823f3ebc50f222044 Mon Sep 17 00:00:00 2001 From: Moxie Marlinspike Date: Fri, 21 Feb 2014 09:14:05 -0800 Subject: [PATCH] Support DataDog Reporting. --- pom.xml | 6 ++++++ .../WhisperServerConfiguration.java | 9 +++++++++ .../textsecuregcm/WhisperServerService.java | 10 ++++++++++ .../configuration/DataDogConfiguration.java | 20 +++++++++++++++++++ 4 files changed, 45 insertions(+) create mode 100644 src/main/java/org/whispersystems/textsecuregcm/configuration/DataDogConfiguration.java diff --git a/pom.xml b/pom.xml index 4dadedb74..a45c3b3e6 100644 --- a/pom.xml +++ b/pom.xml @@ -114,6 +114,12 @@ jetty-websocket 8.1.14.v20131031 + + + org.coursera + metrics-datadog + 0.1.5 + diff --git a/src/main/java/org/whispersystems/textsecuregcm/WhisperServerConfiguration.java b/src/main/java/org/whispersystems/textsecuregcm/WhisperServerConfiguration.java index 0b81581e4..24f3d8e73 100644 --- a/src/main/java/org/whispersystems/textsecuregcm/WhisperServerConfiguration.java +++ b/src/main/java/org/whispersystems/textsecuregcm/WhisperServerConfiguration.java @@ -20,6 +20,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.yammer.dropwizard.config.Configuration; import com.yammer.dropwizard.db.DatabaseConfiguration; import org.whispersystems.textsecuregcm.configuration.ApnConfiguration; +import org.whispersystems.textsecuregcm.configuration.DataDogConfiguration; import org.whispersystems.textsecuregcm.configuration.FederationConfiguration; import org.whispersystems.textsecuregcm.configuration.GcmConfiguration; import org.whispersystems.textsecuregcm.configuration.GraphiteConfiguration; @@ -84,6 +85,10 @@ public class WhisperServerConfiguration extends Configuration { @JsonProperty private GraphiteConfiguration graphite = new GraphiteConfiguration(); + @Valid + @JsonProperty + private DataDogConfiguration datadog = new DataDogConfiguration(); + @Valid @JsonProperty private WebsocketConfiguration websocket = new WebsocketConfiguration(); @@ -135,4 +140,8 @@ public class WhisperServerConfiguration extends Configuration { public GraphiteConfiguration getGraphiteConfiguration() { return graphite; } + + public DataDogConfiguration getDataDogConfiguration() { + return datadog; + } } diff --git a/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java b/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java index ea2dda8da..300918e92 100644 --- a/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java +++ b/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java @@ -24,6 +24,9 @@ import com.yammer.dropwizard.config.HttpConfiguration; import com.yammer.dropwizard.db.DatabaseConfiguration; import com.yammer.dropwizard.jdbi.DBIFactory; import com.yammer.dropwizard.migrations.MigrationsBundle; +import com.yammer.metrics.core.Clock; +import com.yammer.metrics.core.MetricPredicate; +import com.yammer.metrics.reporting.DatadogReporter; import com.yammer.metrics.reporting.GraphiteReporter; import net.spy.memcached.MemcachedClient; import org.bouncycastle.jce.provider.BouncyCastleProvider; @@ -164,6 +167,13 @@ public class WhisperServerService extends Service { config.getGraphiteConfiguration().getHost(), config.getGraphiteConfiguration().getPort()); } + + if (config.getDataDogConfiguration().isEnabled()) { + new DatadogReporter.Builder().withApiKey(config.getDataDogConfiguration().getApiKey()) + .withVmMetricsEnabled(true) + .build() + .start(15, TimeUnit.SECONDS); + } } private Optional initializeNexmoSmsSender(NexmoConfiguration configuration) { diff --git a/src/main/java/org/whispersystems/textsecuregcm/configuration/DataDogConfiguration.java b/src/main/java/org/whispersystems/textsecuregcm/configuration/DataDogConfiguration.java new file mode 100644 index 000000000..9fe5f9837 --- /dev/null +++ b/src/main/java/org/whispersystems/textsecuregcm/configuration/DataDogConfiguration.java @@ -0,0 +1,20 @@ +package org.whispersystems.textsecuregcm.configuration; + +import com.fasterxml.jackson.annotation.JsonProperty; + +public class DataDogConfiguration { + + @JsonProperty + private String apiKey; + + @JsonProperty + private boolean enabled = false; + + public String getApiKey() { + return apiKey; + } + + public boolean isEnabled() { + return enabled && apiKey != null; + } +}