summaryrefslogtreecommitdiff
path: root/src/main/java/com/p4square/restlet/metrics/MetricRouter.java
diff options
context:
space:
mode:
authorJesse Morgan <jesse@jesterpm.net>2016-04-09 15:53:24 -0700
committerJesse Morgan <jesse@jesterpm.net>2016-04-09 15:53:24 -0700
commit371ccae3d1f31ec38f4af77fb7fcd175d49b3cd5 (patch)
tree38c4f1e8828f9af9c4b77a173bee0d312b321698 /src/main/java/com/p4square/restlet/metrics/MetricRouter.java
parentbbf907e51dfcf157bdee24dead1d531122aa25db (diff)
parent3102d8bce3426d9cf41aeaf201c360d342677770 (diff)
Merge pull request #10 from PuyallupFoursquare/maven
Switching from Ivy+Ant to Maven.
Diffstat (limited to 'src/main/java/com/p4square/restlet/metrics/MetricRouter.java')
-rw-r--r--src/main/java/com/p4square/restlet/metrics/MetricRouter.java61
1 files changed, 61 insertions, 0 deletions
diff --git a/src/main/java/com/p4square/restlet/metrics/MetricRouter.java b/src/main/java/com/p4square/restlet/metrics/MetricRouter.java
new file mode 100644
index 0000000..d4da270
--- /dev/null
+++ b/src/main/java/com/p4square/restlet/metrics/MetricRouter.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2014 Jesse Morgan
+ */
+
+package com.p4square.restlet.metrics;
+
+import com.codahale.metrics.Counter;
+import com.codahale.metrics.MetricRegistry;
+import com.codahale.metrics.Timer;
+
+import org.restlet.Context;
+import org.restlet.Request;
+import org.restlet.Response;
+import org.restlet.Restlet;
+import org.restlet.routing.TemplateRoute;
+import org.restlet.routing.Router;
+
+/**
+ *
+ * @author Jesse Morgan <jesse@jesterpm.net>
+ */
+public class MetricRouter extends Router {
+
+ private final MetricRegistry mMetricRegistry;
+
+ public MetricRouter(Context context, MetricRegistry metrics) {
+ super(context);
+ mMetricRegistry = metrics;
+ }
+
+ @Override
+ protected void doHandle(Restlet next, Request request, Response response) {
+ String baseName;
+ if (next instanceof TemplateRoute) {
+ TemplateRoute temp = (TemplateRoute) next;
+ baseName = MetricRegistry.name("MetricRouter", temp.getTemplate().getPattern());
+ } else {
+ baseName = MetricRegistry.name("MetricRouter", "unknown");
+ }
+
+ final Timer.Context aggTimer = mMetricRegistry.timer("MetricRouter.time").time();
+ final Timer.Context timer = mMetricRegistry.timer(baseName + ".time").time();
+
+ try {
+ super.doHandle(next, request, response);
+ } finally {
+ timer.stop();
+ aggTimer.stop();
+
+ // Record status code
+ boolean success = !response.getStatus().isError();
+ if (success) {
+ mMetricRegistry.counter("MetricRouter.success").inc();
+ mMetricRegistry.counter(baseName + ".response.success").inc();
+ } else {
+ mMetricRegistry.counter("MetricRouter.failure").inc();
+ mMetricRegistry.counter(baseName + ".response.failure").inc();
+ }
+ }
+ }
+}