You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ab...@apache.org on 2016/11/30 14:49:34 UTC
lucene-solr:feature/metrics: SOLR-4735 Split dot-separated domains
into subdomains to make the hierarchy clear. Use overridable registry names
in SolrCoreMetricManager.
Repository: lucene-solr
Updated Branches:
refs/heads/feature/metrics 8601477a6 -> e6f30e524
SOLR-4735 Split dot-separated domains into subdomains to make the hierarchy clear.
Use overridable registry names in SolrCoreMetricManager.
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/e6f30e52
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/e6f30e52
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/e6f30e52
Branch: refs/heads/feature/metrics
Commit: e6f30e5242181e2897734d3c97b42dc150226c70
Parents: 8601477
Author: Andrzej Bialecki <ab...@apache.org>
Authored: Wed Nov 30 15:48:28 2016 +0100
Committer: Andrzej Bialecki <ab...@apache.org>
Committed: Wed Nov 30 15:49:28 2016 +0100
----------------------------------------------------------------------
.../solr/metrics/SolrCoreMetricManager.java | 2 +-
.../solr/metrics/reporters/SolrJmxReporter.java | 49 +++++++++++++++-----
2 files changed, 39 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/e6f30e52/solr/core/src/java/org/apache/solr/metrics/SolrCoreMetricManager.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/metrics/SolrCoreMetricManager.java b/solr/core/src/java/org/apache/solr/metrics/SolrCoreMetricManager.java
index 7b78363..960ccba 100644
--- a/solr/core/src/java/org/apache/solr/metrics/SolrCoreMetricManager.java
+++ b/solr/core/src/java/org/apache/solr/metrics/SolrCoreMetricManager.java
@@ -58,7 +58,7 @@ public class SolrCoreMetricManager implements Closeable {
}
public static final String getRegistryName(String coreName) {
- return MetricRegistry.name(REGISTRY_PREFIX, coreName);
+ return SolrMetricManager.overridableRegistryName(MetricRegistry.name(REGISTRY_PREFIX, coreName));
}
/**
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/e6f30e52/solr/core/src/java/org/apache/solr/metrics/reporters/SolrJmxReporter.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/metrics/reporters/SolrJmxReporter.java b/solr/core/src/java/org/apache/solr/metrics/reporters/SolrJmxReporter.java
index cb8bc8a..f1a4097 100644
--- a/solr/core/src/java/org/apache/solr/metrics/reporters/SolrJmxReporter.java
+++ b/solr/core/src/java/org/apache/solr/metrics/reporters/SolrJmxReporter.java
@@ -56,7 +56,7 @@ public class SolrJmxReporter extends SolrMetricReporter {
*/
public SolrJmxReporter(String registryName) {
super(registryName);
- this.domain = registryName;
+ setDomain(registryName);
}
/**
@@ -94,7 +94,7 @@ public class SolrJmxReporter extends SolrMetricReporter {
return;
}
- JmxObjectNameFactory jmxObjectNameFactory = new JmxObjectNameFactory(registryName);
+ JmxObjectNameFactory jmxObjectNameFactory = new JmxObjectNameFactory(registryName, domain);
reporter = JmxReporter.forRegistry(SolrMetricManager.registry(registryName))
.registerWith(mBeanServer)
@@ -184,28 +184,55 @@ public class SolrJmxReporter extends SolrMetricReporter {
private static class JmxObjectNameFactory implements ObjectNameFactory {
private final String registryName;
+ private final String domain;
+ private final String[] subdomains;
- JmxObjectNameFactory(String registryName) {
+ JmxObjectNameFactory(String registryName, String domain) {
this.registryName = registryName;
+ this.domain = domain;
+ this.subdomains = domain.split("\\.");
}
/**
- * TODO description
+ * Create a hierarchical name of a metric.
*
- * @param type TODO description, example
- * @param domain TODO description, example
- * @param name TODO description, example
+ * @param type metric class, eg. "counters"
+ * @param currentDomain JMX domain
+ * @param name metric name
*/
@Override
- public ObjectName createName(String type, String domain, String name) {
+ public ObjectName createName(String type, String currentDomain, String name) {
SolrMetricInfo metricInfo = SolrMetricInfo.of(name);
// It turns out that ObjectName(String) mostly preserves key ordering
// as specified in the constructor (except for the 'type' key that ends
// up at top level) - unlike ObjectName(String, Map) constructor
// that seems to have a mind of its own...
- StringBuilder sb = new StringBuilder(domain);
- sb.append(':');
+ StringBuilder sb = new StringBuilder();
+ if (domain.equals(currentDomain)) {
+ if (subdomains != null && subdomains.length > 1) {
+ // use only first segment as domain
+ sb.append(subdomains[0]);
+ sb.append(':');
+ // use remaining segments as properties
+ for (int i = 1; i < subdomains.length; i++) {
+ if (i > 1) {
+ sb.append(',');
+ }
+ sb.append("dom");
+ sb.append(String.valueOf(i));
+ sb.append('=');
+ sb.append(subdomains[i]);
+ }
+ sb.append(','); // separate from other properties
+ } else {
+ sb.append(currentDomain);
+ sb.append(':');
+ }
+ } else {
+ sb.append(currentDomain);
+ sb.append(':');
+ }
if (metricInfo != null) {
sb.append("category=");
sb.append(metricInfo.category.toString());
@@ -242,7 +269,7 @@ public class SolrJmxReporter extends SolrMetricReporter {
try {
objectName = new ObjectName(sb.toString());
} catch (MalformedObjectNameException e) {
- throw new RuntimeException(e);
+ throw new RuntimeException(sb.toString(), e);
}
return objectName;