You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by sp...@apache.org on 2017/03/09 18:16:00 UTC

[1/2] tinkerpop git commit: TINKERPOP-1644 Exposed GremlinScriptEngine metrics in Gremlin Server

Repository: tinkerpop
Updated Branches:
  refs/heads/TINKERPOP-1644 fc1f5a43c -> ab3cc8450


TINKERPOP-1644 Exposed GremlinScriptEngine metrics in Gremlin Server


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/63256739
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/63256739
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/63256739

Branch: refs/heads/TINKERPOP-1644
Commit: 6325673981cc82ff9872f7e76d9e850188f7e6b0
Parents: fc1f5a4
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Thu Mar 9 12:25:35 2017 -0500
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu Mar 9 12:25:35 2017 -0500

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |  2 +-
 .../gremlin/groovy/engine/ScriptEngines.java    |  7 ++
 .../gremlin/server/op/session/Session.java      | 27 +++++++
 .../gremlin/server/util/MetricManager.java      | 79 +++++++++++++++++---
 .../server/util/ServerGremlinExecutor.java      | 15 ++++
 5 files changed, 118 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/63256739/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index f59eac3..752cf43 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -26,7 +26,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 TinkerPop 3.2.5 (Release Date: NOT OFFICIALLY RELEASED YET)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-* Added various metrics to the `GremlinGroovyScriptEngine` around script compilation.
+* Added various metrics to the `GremlinGroovyScriptEngine` around script compilation and exposed them in Gremlin Server.
 * Moved the `caffeine` dependency down to `gremlin-groovy` and out of `gremlin-server`.
 * Improved script compilation in `GremlinGroovyScriptEngine to use better caching, log long compile times and prevent failed compilations from recompiling on future requests.
 * Split `ComputerVerificationStrategy` into two strategies: `ComputerVerificationStrategy` and `ComputerFinalizationStrategy`.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/63256739/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/ScriptEngines.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/ScriptEngines.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/ScriptEngines.java
index 7dcfc5c..6dfd87a 100644
--- a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/ScriptEngines.java
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/ScriptEngines.java
@@ -311,6 +311,13 @@ public class ScriptEngines implements AutoCloseable {
     }
 
     /**
+     * Gets an {@link GremlinScriptEngine} by its name.
+     */
+    public GremlinScriptEngine getEngineByName(final String engineName) {
+        return scriptEngines.get(engineName);
+    }
+
+    /**
      * Get the set of {@code ScriptEngine} that implement {@link DependencyManager} interface.
      */
     private Set<DependencyManager> getDependencyManagers() {

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/63256739/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/session/Session.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/session/Session.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/session/Session.java
index 9b16a3b..b8cb28c 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/session/Session.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/session/Session.java
@@ -18,11 +18,16 @@
  */
 package org.apache.tinkerpop.gremlin.server.op.session;
 
+import com.codahale.metrics.Metric;
+import com.codahale.metrics.MetricFilter;
 import org.apache.tinkerpop.gremlin.groovy.engine.GremlinExecutor;
+import org.apache.tinkerpop.gremlin.groovy.engine.ScriptEngines;
+import org.apache.tinkerpop.gremlin.jsr223.GremlinScriptEngine;
 import org.apache.tinkerpop.gremlin.server.Context;
 import org.apache.tinkerpop.gremlin.server.GraphManager;
 import org.apache.tinkerpop.gremlin.server.Settings;
 import org.apache.tinkerpop.gremlin.server.util.LifeCycleHook;
+import org.apache.tinkerpop.gremlin.server.util.MetricManager;
 import org.apache.tinkerpop.gremlin.server.util.ThreadFactoryUtil;
 import org.apache.tinkerpop.gremlin.structure.Graph;
 import org.slf4j.Logger;
@@ -30,6 +35,7 @@ import org.slf4j.LoggerFactory;
 
 import javax.script.Bindings;
 import javax.script.SimpleBindings;
+import java.util.Collections;
 import java.util.HashSet;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ExecutorService;
@@ -92,6 +98,15 @@ public class Session {
                 SessionOpProcessor.CONFIG_PER_GRAPH_CLOSE_TIMEOUT, SessionOpProcessor.DEFAULT_PER_GRAPH_CLOSE_TIMEOUT).toString());
 
         this.gremlinExecutor = initializeGremlinExecutor().create();
+
+        settings.scriptEngines.keySet().forEach(engineName -> {
+            try {
+                gremlinExecutor.eval("1+1", engineName, Collections.emptyMap()).join();
+                registerMetrics(engineName);
+            } catch (Exception ex) {
+                logger.warn(String.format("Could not initialize {} ScriptEngine as script could not be evaluated - %s", engineName), ex);
+            }
+        });
     }
 
     public GremlinExecutor getGremlinExecutor() {
@@ -207,6 +222,10 @@ public class Session {
         executor.shutdownNow();
 
         sessions.remove(session);
+
+        // once a session is dead release the gauges in the registry for it
+        MetricManager.INSTANCE.getRegistry().removeMatching((s, metric) -> s.contains(session));
+
         logger.info("Session {} closed", session);
     }
 
@@ -244,4 +263,12 @@ public class Session {
 
         return gremlinExecutorBuilder;
     }
+
+    private void registerMetrics(final String engineName) {
+        final ScriptEngines scriptEngines = gremlinExecutor.getScriptEngines();
+        final GremlinScriptEngine engine = null == scriptEngines ?
+                gremlinExecutor.getScriptEngineManager().getEngineByName(engineName) :
+                scriptEngines.getEngineByName(engineName);
+        MetricManager.INSTANCE.registerGremlinScriptEngineMetrics(engine, "session", session, "class-cache");
+    }
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/63256739/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/MetricManager.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/MetricManager.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/MetricManager.java
index 2867aa7..06179d2 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/MetricManager.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/MetricManager.java
@@ -33,6 +33,9 @@ import com.codahale.metrics.ganglia.GangliaReporter;
 import com.codahale.metrics.graphite.Graphite;
 import com.codahale.metrics.graphite.GraphiteReporter;
 import info.ganglia.gmetric4j.gmetric.GMetric;
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine;
+import org.apache.tinkerpop.gremlin.jsr223.GremlinScriptEngine;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -66,17 +69,16 @@ public enum MetricManager {
     private GraphiteReporter graphiteReporter = null;
 
     /**
-     * Return the Titan Metrics registry.
+     * Return the {@code MetricsRegistry}.
      *
-     * @return the single {@code MetricRegistry} used for all of Titan's Metrics
-     * monitoring
+     * @return the single {@code MetricRegistry} used for all of monitoring
      */
     public MetricRegistry getRegistry() {
         return registry;
     }
 
     /**
-     * Create a {@link ConsoleReporter} attached to the Titan Metrics registry.
+     * Create a {@link ConsoleReporter} attached to the {@code MetricsRegistry}.
      *
      * @param reportIntervalInMS milliseconds to wait between dumping metrics to the console
      */
@@ -106,7 +108,7 @@ public enum MetricManager {
     }
 
     /**
-     * Create a {@link CsvReporter} attached to the Titan Metrics registry.
+     * Create a {@link CsvReporter} attached to the {@code MetricsRegistry}.
      * <p/>
      * The {@code output} argument must be non-null but need not exist. If it
      * doesn't already exist, this method attempts to create it by calling
@@ -153,7 +155,7 @@ public enum MetricManager {
     }
 
     /**
-     * Create a {@link JmxReporter} attached to the Titan Metrics registry.
+     * Create a {@link JmxReporter} attached to the {@code MetricsRegistry}.
      * <p/>
      * If {@code domain} or {@code agentId} is null, then Metrics's uses its own
      * internal default value(s).
@@ -210,7 +212,7 @@ public enum MetricManager {
     }
 
     /**
-     * Create a {@link Slf4jReporter} attached to the Titan Metrics registry.
+     * Create a {@link Slf4jReporter} attached to the {@code MetricsRegistry}.
      * <p/>
      * If {@code loggerName} is null, or if it is non-null but
      * LoggerFactory.getLogger(loggerName) returns null, then Metrics's
@@ -257,7 +259,7 @@ public enum MetricManager {
     }
 
     /**
-     * Create a {@link GangliaReporter} attached to the Titan Metrics registry.
+     * Create a {@link GangliaReporter} attached to the {@code MetricsRegistry}.
      * <p/>
      * {@code groupOrHost} and {@code addressingMode} must be non-null. The
      * remaining non-primitive arguments may be null. If {@code protocol31} is
@@ -321,7 +323,7 @@ public enum MetricManager {
     }
 
     /**
-     * Create a {@link GraphiteReporter} attached to the Titan Metrics registry.
+     * Create a {@link GraphiteReporter} attached to the {@code MetricsRegistry}.
      * <p/>
      * If {@code prefix} is null, then Metrics's internal default prefix is used
      * (empty string at the time this comment was written).
@@ -367,8 +369,7 @@ public enum MetricManager {
     }
 
     /**
-     * Remove all Titan Metrics reporters previously configured through the
-     * {@code add*} methods on this class.
+     * Remove all reporters previously configured through the {@code add*} methods on this class.
      */
     public synchronized void removeAllReporters() {
         removeConsoleReporter();
@@ -418,4 +419,60 @@ public enum MetricManager {
     public Histogram getHistogram(final String prefix, final String... names) {
         return getRegistry().histogram(MetricRegistry.name(prefix, names));
     }
+
+    /**
+     * Registers metrics from a {@link GremlinScriptEngine}. At this point, this only works for the
+     * {@link GremlinGroovyScriptEngine} as it is the only one that collects metrics at this point. As the
+     * {@link GremlinScriptEngine} implementations achieve greater parity these metrics will get expanded.
+     */
+    public void registerGremlinScriptEngineMetrics(final GremlinScriptEngine engine, final String... prefix) {
+        if (engine instanceof GremlinGroovyScriptEngine) {
+            final GremlinGroovyScriptEngine gremlinGroovyScriptEngine = (GremlinGroovyScriptEngine) engine;
+            MetricManager.INSTANCE.getRegistry().register(
+                    MetricRegistry.name(GremlinGroovyScriptEngine.class, ArrayUtils.add(prefix, "long-run-compilation-count")),
+                    (Gauge<Long>) gremlinGroovyScriptEngine::getClassCacheLongRunCompilationCount);
+            MetricManager.INSTANCE.getRegistry().register(
+                    MetricRegistry.name(GremlinGroovyScriptEngine.class, ArrayUtils.add(prefix, "estimated-size")),
+                    (Gauge<Long>) gremlinGroovyScriptEngine::getClassCacheEstimatedSize);
+            MetricManager.INSTANCE.getRegistry().register(
+                    MetricRegistry.name(GremlinGroovyScriptEngine.class, ArrayUtils.add(prefix, "average-load-penalty")),
+                    (Gauge<Double>) gremlinGroovyScriptEngine::getClassCacheAverageLoadPenalty);
+            MetricManager.INSTANCE.getRegistry().register(
+                    MetricRegistry.name(GremlinGroovyScriptEngine.class, ArrayUtils.add(prefix, "eviction-count")),
+                    (Gauge<Long>) gremlinGroovyScriptEngine::getClassCacheEvictionCount);
+            MetricManager.INSTANCE.getRegistry().register(
+                    MetricRegistry.name(GremlinGroovyScriptEngine.class, ArrayUtils.add(prefix, "eviction-weight")),
+                    (Gauge<Long>) gremlinGroovyScriptEngine::getClassCacheEvictionWeight);
+            MetricManager.INSTANCE.getRegistry().register(
+                    MetricRegistry.name(GremlinGroovyScriptEngine.class, ArrayUtils.add(prefix, "hit-count")),
+                    (Gauge<Long>) gremlinGroovyScriptEngine::getClassCacheHitCount);
+            MetricManager.INSTANCE.getRegistry().register(
+                    MetricRegistry.name(GremlinGroovyScriptEngine.class, ArrayUtils.add(prefix, "hit-rate")),
+                    (Gauge<Double>) gremlinGroovyScriptEngine::getClassCacheHitRate);
+            MetricManager.INSTANCE.getRegistry().register(
+                    MetricRegistry.name(GremlinGroovyScriptEngine.class, ArrayUtils.add(prefix, "load-count")),
+                    (Gauge<Long>) gremlinGroovyScriptEngine::getClassCacheLoadCount);
+            MetricManager.INSTANCE.getRegistry().register(
+                    MetricRegistry.name(GremlinGroovyScriptEngine.class, ArrayUtils.add(prefix, "load-failure-count")),
+                    (Gauge<Long>) gremlinGroovyScriptEngine::getClassCacheLoadFailureCount);
+            MetricManager.INSTANCE.getRegistry().register(
+                    MetricRegistry.name(GremlinGroovyScriptEngine.class, ArrayUtils.add(prefix, "load-failure-rate")),
+                    (Gauge<Double>) gremlinGroovyScriptEngine::getClassCacheLoadFailureRate);
+            MetricManager.INSTANCE.getRegistry().register(
+                    MetricRegistry.name(GremlinGroovyScriptEngine.class, ArrayUtils.add(prefix, "load-success-count")),
+                    (Gauge<Long>) gremlinGroovyScriptEngine::getClassCacheLoadSuccessCount);
+            MetricManager.INSTANCE.getRegistry().register(
+                    MetricRegistry.name(GremlinGroovyScriptEngine.class, ArrayUtils.add(prefix, "miss-count")),
+                    (Gauge<Long>) gremlinGroovyScriptEngine::getClassCacheMissCount);
+            MetricManager.INSTANCE.getRegistry().register(
+                    MetricRegistry.name(GremlinGroovyScriptEngine.class, ArrayUtils.add(prefix, "miss-rate")),
+                    (Gauge<Double>) gremlinGroovyScriptEngine::getClassCacheMissRate);
+            MetricManager.INSTANCE.getRegistry().register(
+                    MetricRegistry.name(GremlinGroovyScriptEngine.class, ArrayUtils.add(prefix, "request-count")),
+                    (Gauge<Long>) gremlinGroovyScriptEngine::getClassCacheRequestCount);
+            MetricManager.INSTANCE.getRegistry().register(
+                    MetricRegistry.name(GremlinGroovyScriptEngine.class, ArrayUtils.add(prefix, "total-load-time")),
+                    (Gauge<Long>) gremlinGroovyScriptEngine::getClassCacheTotalLoadTime);
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/63256739/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/ServerGremlinExecutor.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/ServerGremlinExecutor.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/ServerGremlinExecutor.java
index b9b7280..d66e0e8 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/ServerGremlinExecutor.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/ServerGremlinExecutor.java
@@ -18,7 +18,11 @@
  */
 package org.apache.tinkerpop.gremlin.server.util;
 
+import com.codahale.metrics.Gauge;
 import org.apache.tinkerpop.gremlin.groovy.engine.GremlinExecutor;
+import org.apache.tinkerpop.gremlin.groovy.engine.ScriptEngines;
+import org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine;
+import org.apache.tinkerpop.gremlin.jsr223.GremlinScriptEngine;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource;
 import org.apache.tinkerpop.gremlin.server.Channelizer;
 import org.apache.tinkerpop.gremlin.server.GraphManager;
@@ -39,6 +43,8 @@ import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.ThreadFactory;
 import java.util.stream.Collectors;
 
+import static com.codahale.metrics.MetricRegistry.name;
+
 /**
  * The core of script execution in Gremlin Server.  Given {@link Settings} and optionally other arguments, this
  * class will construct a {@link GremlinExecutor} to be used by Gremlin Server.  A typical usage would be to
@@ -152,6 +158,7 @@ public class ServerGremlinExecutor<T extends ScheduledExecutorService> {
         settings.scriptEngines.keySet().forEach(engineName -> {
             try {
                 gremlinExecutor.eval("1+1", engineName, Collections.emptyMap()).join();
+                registerMetrics(engineName);
             } catch (Exception ex) {
                 logger.warn(String.format("Could not initialize {} ScriptEngine as script could not be evaluated - %s", engineName), ex);
             }
@@ -179,6 +186,14 @@ public class ServerGremlinExecutor<T extends ScheduledExecutorService> {
                 .collect(Collectors.toList());
     }
 
+    private void registerMetrics(final String engineName) {
+        final ScriptEngines scriptEngines = gremlinExecutor.getScriptEngines();
+        final GremlinScriptEngine engine = null == scriptEngines ?
+                gremlinExecutor.getScriptEngineManager().getEngineByName(engineName) :
+                scriptEngines.getEngineByName(engineName);
+        MetricManager.INSTANCE.registerGremlinScriptEngineMetrics(engine, "sessionless", "class-cache");
+    }
+
     public void addHostOption(final String key, final Object value) {
         hostOptions.put(key, value);
     }


[2/2] tinkerpop git commit: TINKERPOP-1644 Renamed metrics for GremlinScriptEngine instances.

Posted by sp...@apache.org.
TINKERPOP-1644 Renamed metrics for GremlinScriptEngine instances.

Included the name of the GremlinScriptEngine and prefixed each metric with GremlinServer class name to be consistent with other metrics.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/ab3cc845
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/ab3cc845
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/ab3cc845

Branch: refs/heads/TINKERPOP-1644
Commit: ab3cc8450a6e59b8ffde34f21ad170e906363e27
Parents: 6325673
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Thu Mar 9 13:15:04 2017 -0500
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu Mar 9 13:15:04 2017 -0500

----------------------------------------------------------------------
 .../gremlin/server/op/session/Session.java      |  2 +-
 .../gremlin/server/util/MetricManager.java      | 31 ++++++++++----------
 .../server/util/ServerGremlinExecutor.java      |  2 +-
 3 files changed, 18 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/ab3cc845/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/session/Session.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/session/Session.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/session/Session.java
index b8cb28c..6961339 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/session/Session.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/session/Session.java
@@ -269,6 +269,6 @@ public class Session {
         final GremlinScriptEngine engine = null == scriptEngines ?
                 gremlinExecutor.getScriptEngineManager().getEngineByName(engineName) :
                 scriptEngines.getEngineByName(engineName);
-        MetricManager.INSTANCE.registerGremlinScriptEngineMetrics(engine, "session", session, "class-cache");
+        MetricManager.INSTANCE.registerGremlinScriptEngineMetrics(engine, engineName, "session", session, "class-cache");
     }
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/ab3cc845/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/MetricManager.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/MetricManager.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/MetricManager.java
index 06179d2..faec502 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/MetricManager.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/MetricManager.java
@@ -36,6 +36,7 @@ import info.ganglia.gmetric4j.gmetric.GMetric;
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine;
 import org.apache.tinkerpop.gremlin.jsr223.GremlinScriptEngine;
+import org.apache.tinkerpop.gremlin.server.GremlinServer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -429,49 +430,49 @@ public enum MetricManager {
         if (engine instanceof GremlinGroovyScriptEngine) {
             final GremlinGroovyScriptEngine gremlinGroovyScriptEngine = (GremlinGroovyScriptEngine) engine;
             MetricManager.INSTANCE.getRegistry().register(
-                    MetricRegistry.name(GremlinGroovyScriptEngine.class, ArrayUtils.add(prefix, "long-run-compilation-count")),
+                    MetricRegistry.name(GremlinServer.class, ArrayUtils.add(prefix, "long-run-compilation-count")),
                     (Gauge<Long>) gremlinGroovyScriptEngine::getClassCacheLongRunCompilationCount);
             MetricManager.INSTANCE.getRegistry().register(
-                    MetricRegistry.name(GremlinGroovyScriptEngine.class, ArrayUtils.add(prefix, "estimated-size")),
+                    MetricRegistry.name(GremlinServer.class, ArrayUtils.add(prefix, "estimated-size")),
                     (Gauge<Long>) gremlinGroovyScriptEngine::getClassCacheEstimatedSize);
             MetricManager.INSTANCE.getRegistry().register(
-                    MetricRegistry.name(GremlinGroovyScriptEngine.class, ArrayUtils.add(prefix, "average-load-penalty")),
+                    MetricRegistry.name(GremlinServer.class, ArrayUtils.add(prefix, "average-load-penalty")),
                     (Gauge<Double>) gremlinGroovyScriptEngine::getClassCacheAverageLoadPenalty);
             MetricManager.INSTANCE.getRegistry().register(
-                    MetricRegistry.name(GremlinGroovyScriptEngine.class, ArrayUtils.add(prefix, "eviction-count")),
+                    MetricRegistry.name(GremlinServer.class, ArrayUtils.add(prefix, "eviction-count")),
                     (Gauge<Long>) gremlinGroovyScriptEngine::getClassCacheEvictionCount);
             MetricManager.INSTANCE.getRegistry().register(
-                    MetricRegistry.name(GremlinGroovyScriptEngine.class, ArrayUtils.add(prefix, "eviction-weight")),
+                    MetricRegistry.name(GremlinServer.class, ArrayUtils.add(prefix, "eviction-weight")),
                     (Gauge<Long>) gremlinGroovyScriptEngine::getClassCacheEvictionWeight);
             MetricManager.INSTANCE.getRegistry().register(
-                    MetricRegistry.name(GremlinGroovyScriptEngine.class, ArrayUtils.add(prefix, "hit-count")),
+                    MetricRegistry.name(GremlinServer.class, ArrayUtils.add(prefix, "hit-count")),
                     (Gauge<Long>) gremlinGroovyScriptEngine::getClassCacheHitCount);
             MetricManager.INSTANCE.getRegistry().register(
-                    MetricRegistry.name(GremlinGroovyScriptEngine.class, ArrayUtils.add(prefix, "hit-rate")),
+                    MetricRegistry.name(GremlinServer.class, ArrayUtils.add(prefix, "hit-rate")),
                     (Gauge<Double>) gremlinGroovyScriptEngine::getClassCacheHitRate);
             MetricManager.INSTANCE.getRegistry().register(
-                    MetricRegistry.name(GremlinGroovyScriptEngine.class, ArrayUtils.add(prefix, "load-count")),
+                    MetricRegistry.name(GremlinServer.class, ArrayUtils.add(prefix, "load-count")),
                     (Gauge<Long>) gremlinGroovyScriptEngine::getClassCacheLoadCount);
             MetricManager.INSTANCE.getRegistry().register(
-                    MetricRegistry.name(GremlinGroovyScriptEngine.class, ArrayUtils.add(prefix, "load-failure-count")),
+                    MetricRegistry.name(GremlinServer.class, ArrayUtils.add(prefix, "load-failure-count")),
                     (Gauge<Long>) gremlinGroovyScriptEngine::getClassCacheLoadFailureCount);
             MetricManager.INSTANCE.getRegistry().register(
-                    MetricRegistry.name(GremlinGroovyScriptEngine.class, ArrayUtils.add(prefix, "load-failure-rate")),
+                    MetricRegistry.name(GremlinServer.class, ArrayUtils.add(prefix, "load-failure-rate")),
                     (Gauge<Double>) gremlinGroovyScriptEngine::getClassCacheLoadFailureRate);
             MetricManager.INSTANCE.getRegistry().register(
-                    MetricRegistry.name(GremlinGroovyScriptEngine.class, ArrayUtils.add(prefix, "load-success-count")),
+                    MetricRegistry.name(GremlinServer.class, ArrayUtils.add(prefix, "load-success-count")),
                     (Gauge<Long>) gremlinGroovyScriptEngine::getClassCacheLoadSuccessCount);
             MetricManager.INSTANCE.getRegistry().register(
-                    MetricRegistry.name(GremlinGroovyScriptEngine.class, ArrayUtils.add(prefix, "miss-count")),
+                    MetricRegistry.name(GremlinServer.class, ArrayUtils.add(prefix, "miss-count")),
                     (Gauge<Long>) gremlinGroovyScriptEngine::getClassCacheMissCount);
             MetricManager.INSTANCE.getRegistry().register(
-                    MetricRegistry.name(GremlinGroovyScriptEngine.class, ArrayUtils.add(prefix, "miss-rate")),
+                    MetricRegistry.name(GremlinServer.class, ArrayUtils.add(prefix, "miss-rate")),
                     (Gauge<Double>) gremlinGroovyScriptEngine::getClassCacheMissRate);
             MetricManager.INSTANCE.getRegistry().register(
-                    MetricRegistry.name(GremlinGroovyScriptEngine.class, ArrayUtils.add(prefix, "request-count")),
+                    MetricRegistry.name(GremlinServer.class, ArrayUtils.add(prefix, "request-count")),
                     (Gauge<Long>) gremlinGroovyScriptEngine::getClassCacheRequestCount);
             MetricManager.INSTANCE.getRegistry().register(
-                    MetricRegistry.name(GremlinGroovyScriptEngine.class, ArrayUtils.add(prefix, "total-load-time")),
+                    MetricRegistry.name(GremlinServer.class, ArrayUtils.add(prefix, "total-load-time")),
                     (Gauge<Long>) gremlinGroovyScriptEngine::getClassCacheTotalLoadTime);
         }
     }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/ab3cc845/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/ServerGremlinExecutor.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/ServerGremlinExecutor.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/ServerGremlinExecutor.java
index d66e0e8..e3c0cae 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/ServerGremlinExecutor.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/ServerGremlinExecutor.java
@@ -191,7 +191,7 @@ public class ServerGremlinExecutor<T extends ScheduledExecutorService> {
         final GremlinScriptEngine engine = null == scriptEngines ?
                 gremlinExecutor.getScriptEngineManager().getEngineByName(engineName) :
                 scriptEngines.getEngineByName(engineName);
-        MetricManager.INSTANCE.registerGremlinScriptEngineMetrics(engine, "sessionless", "class-cache");
+        MetricManager.INSTANCE.registerGremlinScriptEngineMetrics(engine, engineName, "sessionless", "class-cache");
     }
 
     public void addHostOption(final String key, final Object value) {