This is an automated email from the ASF dual-hosted git repository.

chesnay pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/flink.git


The following commit(s) were added to refs/heads/master by this push:
     new 4a09019  [FLINK-21759][metrics][tests] Add TestMetricGroup
4a09019 is described below

commit 4a09019671188c82c96dea3232b5f35bb68296d1
Author: Chesnay Schepler <[email protected]>
AuthorDate: Sat Mar 13 10:28:33 2021 +0100

    [FLINK-21759][metrics][tests] Add TestMetricGroup
---
 .../apache/flink/metrics/util/TestMetricGroup.java | 159 +++++++++++++++++++++
 1 file changed, 159 insertions(+)

diff --git 
a/flink-metrics/flink-metrics-core/src/test/java/org/apache/flink/metrics/util/TestMetricGroup.java
 
b/flink-metrics/flink-metrics-core/src/test/java/org/apache/flink/metrics/util/TestMetricGroup.java
new file mode 100644
index 0000000..5a0a93f
--- /dev/null
+++ 
b/flink-metrics/flink-metrics-core/src/test/java/org/apache/flink/metrics/util/TestMetricGroup.java
@@ -0,0 +1,159 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.flink.metrics.util;
+
+import org.apache.flink.metrics.CharacterFilter;
+import org.apache.flink.metrics.Counter;
+import org.apache.flink.metrics.Gauge;
+import org.apache.flink.metrics.Histogram;
+import org.apache.flink.metrics.LogicalScopeProvider;
+import org.apache.flink.metrics.Meter;
+import org.apache.flink.metrics.MetricGroup;
+import org.apache.flink.metrics.SimpleCounter;
+
+import java.util.Collections;
+import java.util.Map;
+import java.util.Optional;
+import java.util.function.BiFunction;
+
+/** A customizable test {@link MetricGroup} implementation. */
+public class TestMetricGroup implements MetricGroup, LogicalScopeProvider {
+
+    private final String[] scopeComponents;
+    private final Map<String, String> variables;
+    private final BiFunction<String, Optional<CharacterFilter>, String> 
metricIdentifierFunction;
+    private final BiFunction<CharacterFilter, Optional<Character>, String> 
logicalScopeFunction;
+
+    public TestMetricGroup(
+            String[] scopeComponents,
+            Map<String, String> variables,
+            BiFunction<String, Optional<CharacterFilter>, String> 
metricIdentifierFunction,
+            BiFunction<CharacterFilter, Optional<Character>, String> 
logicalScopeFunction) {
+        this.scopeComponents = scopeComponents;
+        this.variables = variables;
+        this.metricIdentifierFunction = metricIdentifierFunction;
+        this.logicalScopeFunction = logicalScopeFunction;
+    }
+
+    public static TestMetricGroupBuilder newBuilder() {
+        return new TestMetricGroupBuilder();
+    }
+
+    @Override
+    public Counter counter(String name) {
+        return new SimpleCounter();
+    }
+
+    @Override
+    public <C extends Counter> C counter(String name, C counter) {
+        return counter;
+    }
+
+    @Override
+    public <T, G extends Gauge<T>> G gauge(String name, G gauge) {
+        return gauge;
+    }
+
+    @Override
+    public <H extends Histogram> H histogram(String name, H histogram) {
+        return histogram;
+    }
+
+    @Override
+    public <M extends Meter> M meter(String name, M meter) {
+        return meter;
+    }
+
+    @Override
+    public MetricGroup addGroup(String name) {
+        return this;
+    }
+
+    @Override
+    public MetricGroup addGroup(String key, String value) {
+        return this;
+    }
+
+    @Override
+    public String[] getScopeComponents() {
+        return scopeComponents;
+    }
+
+    @Override
+    public Map<String, String> getAllVariables() {
+        return variables;
+    }
+
+    @Override
+    public String getMetricIdentifier(String metricName) {
+        return metricIdentifierFunction.apply(metricName, Optional.empty());
+    }
+
+    @Override
+    public String getMetricIdentifier(String metricName, CharacterFilter 
filter) {
+        return metricIdentifierFunction.apply(metricName, Optional.of(filter));
+    }
+
+    @Override
+    public String getLogicalScope(CharacterFilter filter) {
+        return logicalScopeFunction.apply(filter, Optional.empty());
+    }
+
+    @Override
+    public String getLogicalScope(CharacterFilter filter, char delimiter) {
+        return logicalScopeFunction.apply(filter, Optional.of(delimiter));
+    }
+
+    /** Builder for {@link TestMetricGroup}. */
+    public static final class TestMetricGroupBuilder {
+        private String[] scopeComponents = new String[] {};
+        private Map<String, String> variables = Collections.emptyMap();
+        private BiFunction<String, Optional<CharacterFilter>, String> 
metricIdentifierFunction =
+                (name, filter) -> filter.map(f -> 
f.filterCharacters(name)).orElse(name);
+
+        private BiFunction<CharacterFilter, Optional<Character>, String> 
logicalScopeFunction =
+                (characterFilter, character) -> "logicalScope";
+
+        public TestMetricGroupBuilder setScopeComponents(String[] 
scopeComponents) {
+            this.scopeComponents = scopeComponents;
+            return this;
+        }
+
+        public TestMetricGroupBuilder setVariables(Map<String, String> 
variables) {
+            this.variables = variables;
+            return this;
+        }
+
+        public TestMetricGroupBuilder setMetricIdentifierFunction(
+                BiFunction<String, Optional<CharacterFilter>, String> 
metricIdentifierFunction) {
+            this.metricIdentifierFunction = metricIdentifierFunction;
+            return this;
+        }
+
+        public TestMetricGroupBuilder setLogicalScopeFunction(
+                BiFunction<CharacterFilter, Optional<Character>, String> 
logicalScopeFunction) {
+            this.logicalScopeFunction = logicalScopeFunction;
+            return this;
+        }
+
+        public TestMetricGroup build() {
+            return new TestMetricGroup(
+                    scopeComponents, variables, metricIdentifierFunction, 
logicalScopeFunction);
+        }
+    }
+}

Reply via email to