summaryrefslogtreecommitdiff
path: root/src/com/p4square/grow/ccb/MonitoredCCBAPI.java
diff options
context:
space:
mode:
authorJesse Morgan <jesse@jesterpm.net>2016-04-09 14:20:48 -0700
committerJesse Morgan <jesse@jesterpm.net>2016-04-09 14:20:48 -0700
commitbbf907e51dfcf157bdee24dead1d531122aa25db (patch)
tree86e8e100046ec3461d8d53e448107cf0145388e2 /src/com/p4square/grow/ccb/MonitoredCCBAPI.java
parent2e76039d4ecaff8d2ed40b67c309c2498ff4a1d5 (diff)
parentbddf96d0fdd60faa1905d374eef8a122771f57a3 (diff)
Merge pull request #9 from PuyallupFoursquare/ccb-support
Adding support for Church Community Builder
Diffstat (limited to 'src/com/p4square/grow/ccb/MonitoredCCBAPI.java')
-rw-r--r--src/com/p4square/grow/ccb/MonitoredCCBAPI.java96
1 files changed, 96 insertions, 0 deletions
diff --git a/src/com/p4square/grow/ccb/MonitoredCCBAPI.java b/src/com/p4square/grow/ccb/MonitoredCCBAPI.java
new file mode 100644
index 0000000..43b6433
--- /dev/null
+++ b/src/com/p4square/grow/ccb/MonitoredCCBAPI.java
@@ -0,0 +1,96 @@
+package com.p4square.grow.ccb;
+
+import com.codahale.metrics.MetricRegistry;
+import com.codahale.metrics.Timer;
+import com.p4square.ccbapi.CCBAPI;
+import com.p4square.ccbapi.model.*;
+
+import java.io.IOException;
+
+/**
+ * MonitoredCCBAPI is a CCBAPI decorator which records metrics for each API call.
+ */
+public class MonitoredCCBAPI implements CCBAPI {
+
+ private final CCBAPI mAPI;
+ private final MetricRegistry mMetricRegistry;
+
+ public MonitoredCCBAPI(final CCBAPI api, final MetricRegistry metricRegistry) {
+ if (api == null) {
+ throw new IllegalArgumentException("api must not be null.");
+ }
+ mAPI = api;
+
+ if (metricRegistry == null) {
+ throw new IllegalArgumentException("metricRegistry must not be null.");
+ }
+ mMetricRegistry = metricRegistry;
+ }
+
+ @Override
+ public GetCustomFieldLabelsResponse getCustomFieldLabels() throws IOException {
+ final Timer.Context timer = mMetricRegistry.timer("CCBAPI.getCustomFieldLabels.time").time();
+ boolean success = false;
+ try {
+ final GetCustomFieldLabelsResponse resp = mAPI.getCustomFieldLabels();
+ success = true;
+ return resp;
+ } finally {
+ timer.stop();
+ mMetricRegistry.counter("CCBAPI.getCustomFieldLabels.success").inc(success ? 1 : 0);
+ mMetricRegistry.counter("CCBAPI.getCustomFieldLabels.failure").inc(!success ? 1 : 0);
+ }
+ }
+
+ @Override
+ public GetLookupTableResponse getLookupTable(final GetLookupTableRequest request) throws IOException {
+ final Timer.Context timer = mMetricRegistry.timer("CCBAPI.getLookupTable.time").time();
+ boolean success = false;
+ try {
+ final GetLookupTableResponse resp = mAPI.getLookupTable(request);
+ success = true;
+ return resp;
+ } finally {
+ timer.stop();
+ mMetricRegistry.counter("CCBAPI.getLookupTable.success").inc(success ? 1 : 0);
+ mMetricRegistry.counter("CCBAPI.getLookupTable.failure").inc(!success ? 1 : 0);
+ }
+ }
+
+ @Override
+ public GetIndividualProfilesResponse getIndividualProfiles(GetIndividualProfilesRequest request)
+ throws IOException {
+ final Timer.Context timer = mMetricRegistry.timer("CCBAPI.getIndividualProfiles").time();
+ boolean success = false;
+ try {
+ final GetIndividualProfilesResponse resp = mAPI.getIndividualProfiles(request);
+ mMetricRegistry.counter("CCBAPI.getIndividualProfiles.count").inc(resp.getIndividuals().size());
+ success = true;
+ return resp;
+ } finally {
+ timer.stop();
+ mMetricRegistry.counter("CCBAPI.getIndividualProfiles.success").inc(success ? 1 : 0);
+ mMetricRegistry.counter("CCBAPI.getIndividualProfiles.failure").inc(!success ? 1 : 0);
+ }
+ }
+
+ @Override
+ public UpdateIndividualProfileResponse updateIndividualProfile(UpdateIndividualProfileRequest request) throws IOException {
+ final Timer.Context timer = mMetricRegistry.timer("CCBAPI.updateIndividualProfile").time();
+ boolean success = false;
+ try {
+ final UpdateIndividualProfileResponse resp = mAPI.updateIndividualProfile(request);
+ success = true;
+ return resp;
+ } finally {
+ timer.stop();
+ mMetricRegistry.counter("CCBAPI.updateIndividualProfile.success").inc(success ? 1 : 0);
+ mMetricRegistry.counter("CCBAPI.updateIndividualProfile.failure").inc(!success ? 1 : 0);
+ }
+ }
+
+ @Override
+ public void close() throws IOException {
+ mAPI.close();
+ }
+}