summaryrefslogtreecommitdiffstats
path: root/java/com/google/gerrit/metrics/dropwizard/CallbackMetricImpl0.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/com/google/gerrit/metrics/dropwizard/CallbackMetricImpl0.java')
-rw-r--r--java/com/google/gerrit/metrics/dropwizard/CallbackMetricImpl0.java82
1 files changed, 82 insertions, 0 deletions
diff --git a/java/com/google/gerrit/metrics/dropwizard/CallbackMetricImpl0.java b/java/com/google/gerrit/metrics/dropwizard/CallbackMetricImpl0.java
new file mode 100644
index 0000000000..5e25651ff8
--- /dev/null
+++ b/java/com/google/gerrit/metrics/dropwizard/CallbackMetricImpl0.java
@@ -0,0 +1,82 @@
+// Copyright (C) 2015 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.google.gerrit.metrics.dropwizard;
+
+import com.codahale.metrics.MetricRegistry;
+import com.google.gerrit.metrics.CallbackMetric0;
+
+class CallbackMetricImpl0<V> extends CallbackMetric0<V> implements CallbackMetricGlue {
+ @SuppressWarnings("unchecked")
+ static <V> V zeroFor(Class<V> valueClass) {
+ if (valueClass == Integer.class) {
+ return (V) Integer.valueOf(0);
+ } else if (valueClass == Long.class) {
+ return (V) Long.valueOf(0);
+ } else if (valueClass == Double.class) {
+ return (V) Double.valueOf(0);
+ } else if (valueClass == Float.class) {
+ return (V) Float.valueOf(0);
+ } else if (valueClass == String.class) {
+ return (V) "";
+ } else if (valueClass == Boolean.class) {
+ return (V) Boolean.FALSE;
+ } else {
+ throw new IllegalArgumentException("unsupported value type " + valueClass.getName());
+ }
+ }
+
+ private final DropWizardMetricMaker metrics;
+ private final MetricRegistry registry;
+ private final String name;
+ private volatile V value;
+
+ CallbackMetricImpl0(
+ DropWizardMetricMaker metrics, MetricRegistry registry, String name, Class<V> valueType) {
+ this.metrics = metrics;
+ this.registry = registry;
+ this.name = name;
+ this.value = zeroFor(valueType);
+ }
+
+ @Override
+ public void beginSet() {}
+
+ @Override
+ public void endSet() {}
+
+ @Override
+ public void set(V value) {
+ this.value = value;
+ }
+
+ @Override
+ public void remove() {
+ metrics.remove(name);
+ registry.remove(name);
+ }
+
+ @Override
+ public void register(Runnable trigger) {
+ registry.register(
+ name,
+ new com.codahale.metrics.Gauge<V>() {
+ @Override
+ public V getValue() {
+ trigger.run();
+ return value;
+ }
+ });
+ }
+}