blob: c4eae436782117e299e230a33b92ca92d1fc7920 [file] [log] [blame]
/*
* 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.solr.metrics;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import com.codahale.metrics.Counter;
import org.apache.lucene.util.TestUtil;
import org.apache.solr.core.SolrInfoBean;
public final class SolrMetricTestUtils {
private static final int MAX_ITERATIONS = 100;
private static final SolrInfoBean.Category CATEGORIES[] = SolrInfoBean.Category.values();
public static String getRandomScope(Random random) {
return getRandomScope(random, random.nextBoolean());
}
public static String getRandomScope(Random random, boolean shouldDefineScope) {
return shouldDefineScope ? TestUtil.randomSimpleString(random, 5, 10) : null; // must be simple string for JMX publishing
}
public static SolrInfoBean.Category getRandomCategory(Random random) {
return getRandomCategory(random, random.nextBoolean());
}
public static SolrInfoBean.Category getRandomCategory(Random random, boolean shouldDefineCategory) {
return shouldDefineCategory ? CATEGORIES[TestUtil.nextInt(random, 0, CATEGORIES.length - 1)] : null;
}
public static Map<String, Counter> getRandomMetrics(Random random) {
return getRandomMetrics(random, random.nextBoolean());
}
public static Map<String, Counter> getRandomMetrics(Random random, boolean shouldDefineMetrics) {
return shouldDefineMetrics ? getRandomMetricsWithReplacements(random, new HashMap<>()) : null;
}
public static final String SUFFIX = "_testing";
public static Map<String, Counter> getRandomMetricsWithReplacements(Random random, Map<String, Counter> existing) {
HashMap<String, Counter> metrics = new HashMap<>();
ArrayList<String> existingKeys = new ArrayList<>(existing.keySet());
int numMetrics = TestUtil.nextInt(random, 1, MAX_ITERATIONS);
for (int i = 0; i < numMetrics; ++i) {
boolean shouldReplaceMetric = !existing.isEmpty() && random.nextBoolean();
String name = shouldReplaceMetric
? existingKeys.get(TestUtil.nextInt(random, 0, existingKeys.size() - 1))
: TestUtil.randomSimpleString(random, 5, 10) + SUFFIX; // must be simple string for JMX publishing
Counter counter = new Counter();
counter.inc(random.nextLong());
metrics.put(name, counter);
}
return metrics;
}
public static SolrMetricProducer getProducerOf(SolrMetricManager metricManager, SolrInfoBean.Category category, String scope, Map<String, Counter> metrics) {
return new SolrMetricProducer() {
@Override
public void initializeMetrics(SolrMetricManager manager, String registry, String tag, String scope) {
if (category == null) {
throw new IllegalArgumentException("null category");
}
if (metrics == null || metrics.isEmpty()) {
return;
}
for (Map.Entry<String, Counter> entry : metrics.entrySet()) {
manager.counter(null, registry, entry.getKey(), category.toString(), scope);
}
}
@Override
public String toString() {
return "SolrMetricProducer.of{" +
"\ncategory=" + category +
"\nscope=" + scope +
"\nmetrics=" + metrics +
"\n}";
}
};
}
}