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;
+ }
+}