diff --git a/external_plugin_deps.bzl b/external_plugin_deps.bzl
index aac37f1..1cb5b8b 100644
--- a/external_plugin_deps.bzl
+++ b/external_plugin_deps.bzl
@@ -1,8 +1,8 @@
 load("//tools/bzl:maven_jar.bzl", "maven_jar")
 
 def external_plugin_deps():
-  maven_jar(
-    name = 'metrics_graphite',
-    artifact = 'io.dropwizard.metrics:metrics-graphite:4.0.2',
-    sha1 = 'c58939a16560d60d3f3d7fe941d2dc9f41ba3b6c',
-  )
+    maven_jar(
+        name = "metrics_graphite",
+        artifact = "io.dropwizard.metrics:metrics-graphite:4.0.3",
+        sha1 = "557cb9adbd442852e12f8f41ddb81a889f670139",
+    )
diff --git a/src/main/java/com/googlesource/gerrit/plugins/metricsreporters/GerritGraphiteReporter.java b/src/main/java/com/googlesource/gerrit/plugins/metricsreporters/GerritGraphiteReporter.java
index 319ece0..59796cf 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/metricsreporters/GerritGraphiteReporter.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/metricsreporters/GerritGraphiteReporter.java
@@ -15,32 +15,28 @@
 
 import static com.codahale.metrics.MetricRegistry.name;
 
+import com.codahale.metrics.MetricFilter;
+import com.codahale.metrics.MetricRegistry;
+import com.codahale.metrics.graphite.Graphite;
+import com.codahale.metrics.graphite.GraphiteReporter;
 import com.google.gerrit.extensions.annotations.Listen;
 import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.gerrit.extensions.events.LifecycleListener;
 import com.google.gerrit.server.config.PluginConfigFactory;
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
-
-import com.codahale.metrics.MetricFilter;
-import com.codahale.metrics.MetricRegistry;
-import com.codahale.metrics.graphite.Graphite;
-import com.codahale.metrics.graphite.GraphiteReporter;
-
-import org.eclipse.jgit.lib.Config;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import java.net.InetAddress;
 import java.net.InetSocketAddress;
 import java.net.UnknownHostException;
 import java.util.concurrent.TimeUnit;
+import org.eclipse.jgit.lib.Config;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 @Listen
 @Singleton
 public class GerritGraphiteReporter implements LifecycleListener {
-  private static final Logger log =
-      LoggerFactory.getLogger(GerritGraphiteReporter.class);
+  private static final Logger log = LoggerFactory.getLogger(GerritGraphiteReporter.class);
 
   private static final String SECTION_GRAPHITE = "graphite";
   private static final String KEY_HOST = "host";
@@ -57,9 +53,7 @@
 
   @Inject
   public GerritGraphiteReporter(
-      PluginConfigFactory configFactory,
-      @PluginName String pluginName,
-      MetricRegistry registry) {
+      PluginConfigFactory configFactory, @PluginName String pluginName, MetricRegistry registry) {
     Config config = configFactory.getGlobalPluginConfig(pluginName);
     String host = config.getString(SECTION_GRAPHITE, null, KEY_HOST);
 
@@ -83,31 +77,31 @@
 
       long configRate;
       try {
-        configRate = config.getTimeUnit(
-            SECTION_GRAPHITE, null, KEY_RATE, DEFAULT_RATE, DEFAULT_RATE_UNIT);
+        configRate =
+            config.getTimeUnit(SECTION_GRAPHITE, null, KEY_RATE, DEFAULT_RATE, DEFAULT_RATE_UNIT);
       } catch (IllegalArgumentException e) {
-        log.warn(String.format(
-            "Invalid rate value; default to %ds", DEFAULT_RATE));
+        log.warn(String.format("Invalid rate value; default to %ds", DEFAULT_RATE));
         configRate = DEFAULT_RATE;
       }
       if (configRate > 0) {
         rate = (int) configRate;
       } else {
-        log.warn(String.format(
-            "Rate value must be positive; default to %ds", DEFAULT_RATE));
+        log.warn(String.format("Rate value must be positive; default to %ds", DEFAULT_RATE));
         rate = DEFAULT_RATE;
       }
 
-      log.info(String.format(
-          "Reporting to Graphite at %s:%d with prefix %s at rate %ds",
-          host, port, prefix, rate));
+      log.info(
+          String.format(
+              "Reporting to Graphite at %s:%d with prefix %s at rate %ds",
+              host, port, prefix, rate));
 
-      graphiteReporter = GraphiteReporter.forRegistry(registry)
-          .convertRatesTo(TimeUnit.MINUTES)
-          .convertDurationsTo(TimeUnit.MILLISECONDS)
-          .prefixedWith(prefix)
-          .filter(MetricFilter.ALL)
-          .build(new Graphite(new InetSocketAddress(host, port)));
+      graphiteReporter =
+          GraphiteReporter.forRegistry(registry)
+              .convertRatesTo(TimeUnit.MINUTES)
+              .convertDurationsTo(TimeUnit.MILLISECONDS)
+              .prefixedWith(prefix)
+              .filter(MetricFilter.ALL)
+              .build(new Graphite(new InetSocketAddress(host, port)));
     } else {
       log.warn("No hostname configured; not reporting to Graphite");
       graphiteReporter = null;
