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;