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

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


The following commit(s) were added to refs/heads/master by this push:
     new 263167a  IGNITE-10561: REST: Memory policy metrics should be available 
via REST. This closes #5778.
263167a is described below

commit 263167a6073ae9024b860c28201915ca0c7e181b
Author: Roman Shtykh <[email protected]>
AuthorDate: Thu Feb 14 19:39:34 2019 +0300

    IGNITE-10561: REST: Memory policy metrics should be available via REST. 
This closes #5778.
    
    Signed-off-by: Andrey V. Mashenkov <[email protected]>
---
 .../rest/JettyRestProcessorAbstractSelfTest.java   | 79 +++++++++++++++++++++
 ...stProcessorAuthenticationWithTokenSelfTest.java | 34 ++++++---
 .../internal/processors/rest/GridRestCommand.java  |  8 ++-
 .../processors/rest/GridRestProcessor.java         |  2 +
 .../memory/MemoryMetricsCommandHandler.java        | 80 ++++++++++++++++++++++
 .../protocols/http/jetty/GridJettyRestHandler.java |  2 +
 6 files changed, 195 insertions(+), 10 deletions(-)

diff --git 
a/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java
 
b/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java
index 245cb3b..784cebc 100644
--- 
a/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java
+++ 
b/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java
@@ -143,6 +143,7 @@ import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.cache.CacheMode.REPLICATED;
 import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_ASYNC;
 import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
+import static org.apache.ignite.configuration.WALMode.NONE;
 import static org.apache.ignite.internal.IgniteVersionUtils.VER_STR;
 import static 
org.apache.ignite.internal.processors.query.QueryUtils.TEMPLATE_PARTITIONED;
 import static 
org.apache.ignite.internal.processors.query.QueryUtils.TEMPLATE_REPLICATED;
@@ -157,6 +158,9 @@ public abstract class JettyRestProcessorAbstractSelfTest 
extends JettyRestProces
     /** Used to sent request charset. */
     private static final String CHARSET = StandardCharsets.UTF_8.name();
 
+    /** */
+    private static boolean memoryMetricsEnabled;
+
     /** {@inheritDoc} */
     @Override protected void beforeTestsStarted() throws Exception {
         super.beforeTestsStarted();
@@ -167,6 +171,12 @@ public abstract class JettyRestProcessorAbstractSelfTest 
extends JettyRestProces
     /** {@inheritDoc} */
     @Override protected void beforeTest() throws Exception {
         grid(0).cache(DEFAULT_CACHE_NAME).removeAll();
+
+        if (memoryMetricsEnabled) {
+            memoryMetricsEnabled = false;
+
+            restartGrid();
+        }
     }
 
     /**
@@ -1976,6 +1986,69 @@ public abstract class JettyRestProcessorAbstractSelfTest 
extends JettyRestProces
      * @throws Exception If failed.
      */
     @Test
+    public void testDataRegionMetrics() throws Exception {
+        String ret = content(F.asMap("cmd", 
GridRestCommand.DATA_REGION_METRICS.key()));
+
+        JsonNode res = validateJsonResponse(ret);
+
+        assertTrue(res.size() > 0);
+
+        info(GridRestCommand.DATA_REGION_METRICS.key().toUpperCase() + " 
command result: " + ret);
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    @Test
+    public void testDataStorageMetricsDisabled() throws Exception {
+        String ret = content(F.asMap("cmd", 
GridRestCommand.DATA_STORAGE_METRICS.key()));
+
+        JsonNode res = validateJsonResponse(ret);
+
+        assertTrue(res.asText().equalsIgnoreCase("Storage metrics are not 
enabled"));
+
+        info(GridRestCommand.DATA_STORAGE_METRICS.key().toUpperCase() + " 
command result: " + ret);
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    @Test
+    public void testDataStorageMetricsEnabled() throws Exception {
+        if (!memoryMetricsEnabled) {
+            restartGrid();
+
+            memoryMetricsEnabled = true;
+        }
+
+        String ret = content(F.asMap("cmd", 
GridRestCommand.DATA_STORAGE_METRICS.key()));
+
+        assertNotNull(validateJsonResponse(ret));
+
+        info(GridRestCommand.DATA_STORAGE_METRICS.key().toUpperCase() + " 
command result: " + ret);
+    }
+
+    /**
+     * Restart grid.
+     *
+     * @throws Exception If failed.
+     */
+    protected void restartGrid() throws Exception {
+        stopAllGrids();
+
+        cleanPersistenceDir();
+
+        startGrids(gridCount());
+
+        grid(0).cluster().active(true);
+
+        initCache();
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    @Test
     public void testVersion() throws Exception {
         String ret = content(null, GridRestCommand.VERSION);
 
@@ -3075,8 +3148,14 @@ public abstract class JettyRestProcessorAbstractSelfTest 
extends JettyRestProces
         drCfg.setName("testDataRegion");
         drCfg.setMaxSize(100L * 1024 * 1024);
 
+        if (memoryMetricsEnabled)
+            drCfg.setPersistenceEnabled(true);
+
         dsCfg.setDefaultDataRegionConfiguration(drCfg);
 
+        if (memoryMetricsEnabled)
+            dsCfg.setMetricsEnabled(true).setWalMode(NONE);
+
         cfg.setDataStorageConfiguration(dsCfg);
 
         return cfg;
diff --git 
a/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAuthenticationWithTokenSelfTest.java
 
b/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAuthenticationWithTokenSelfTest.java
index 6a35a43..90461da 100644
--- 
a/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAuthenticationWithTokenSelfTest.java
+++ 
b/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAuthenticationWithTokenSelfTest.java
@@ -31,17 +31,33 @@ public class 
JettyRestProcessorAuthenticationWithTokenSelfTest extends JettyRest
     @Override protected void beforeTest() throws Exception {
         super.beforeTest();
 
-        // Authenticate and extract token.
-        if (F.isEmpty(tok)) {
-            String ret = content(null, GridRestCommand.AUTHENTICATE,
-                "user", DFLT_USER,
-                "password", DFLT_PWD);
+        if (F.isEmpty(tok))
+            refreshToken();
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void restartGrid() throws Exception {
+        tok = null;
+
+        super.restartGrid();
+
+        refreshToken();
+    }
+
+    /**
+     * Authenticate and extract token.
+     *
+     * @throws Exception If failed.
+     */
+    private void refreshToken() throws Exception {
+        String ret = content(DEFAULT_CACHE_NAME, GridRestCommand.AUTHENTICATE,
+            "user", DFLT_USER,
+            "password", DFLT_PWD);
 
-            int p1 = ret.indexOf("sessionToken");
-            int p2 = ret.indexOf('"', p1 + 16);
+        int p1 = ret.indexOf("sessionToken");
+        int p2 = ret.indexOf('"', p1 + 16);
 
-            tok = ret.substring(p1 + 15, p2);
-        }
+        tok = ret.substring(p1 + 15, p2);
     }
 
     /** {@inheritDoc} */
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestCommand.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestCommand.java
index 4046b15..6864cad 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestCommand.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestCommand.java
@@ -198,7 +198,13 @@ public enum GridRestCommand {
     REMOVE_USER("removeuser"),
 
     /** */
-    UPDATE_USER("updateuser");
+    UPDATE_USER("updateuser"),
+
+    /** Data region metrics. */
+    DATA_REGION_METRICS("dataregion"),
+
+    /** Data storage metrics. */
+    DATA_STORAGE_METRICS("datastorage");
 
     /** Enum values. */
     private static final GridRestCommand[] VALS = values();
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java
index f24c4d3..e16980c 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java
@@ -51,6 +51,7 @@ import 
org.apache.ignite.internal.processors.rest.handlers.auth.AuthenticationCo
 import 
org.apache.ignite.internal.processors.rest.handlers.cache.GridCacheCommandHandler;
 import 
org.apache.ignite.internal.processors.rest.handlers.cluster.GridBaselineCommandHandler;
 import 
org.apache.ignite.internal.processors.rest.handlers.cluster.GridChangeStateCommandHandler;
+import 
org.apache.ignite.internal.processors.rest.handlers.memory.MemoryMetricsCommandHandler;
 import 
org.apache.ignite.internal.processors.rest.handlers.datastructures.DataStructuresCommandHandler;
 import 
org.apache.ignite.internal.processors.rest.handlers.log.GridLogCommandHandler;
 import 
org.apache.ignite.internal.processors.rest.handlers.query.QueryCommandHandler;
@@ -533,6 +534,7 @@ public class GridRestProcessor extends GridProcessorAdapter 
{
             addHandler(new AuthenticationCommandHandler(ctx));
             addHandler(new UserActionCommandHandler(ctx));
             addHandler(new GridBaselineCommandHandler(ctx));
+            addHandler(new MemoryMetricsCommandHandler(ctx));
 
             // Start protocols.
             startTcpProtocol();
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/memory/MemoryMetricsCommandHandler.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/memory/MemoryMetricsCommandHandler.java
new file mode 100644
index 0000000..83ae052
--- /dev/null
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/memory/MemoryMetricsCommandHandler.java
@@ -0,0 +1,80 @@
+/*
+ * 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.ignite.internal.processors.rest.handlers.memory;
+
+import java.util.Collection;
+import org.apache.ignite.DataRegionMetrics;
+import org.apache.ignite.DataStorageMetrics;
+import org.apache.ignite.internal.GridKernalContext;
+import org.apache.ignite.internal.IgniteInternalFuture;
+import org.apache.ignite.internal.processors.rest.GridRestCommand;
+import org.apache.ignite.internal.processors.rest.GridRestResponse;
+import 
org.apache.ignite.internal.processors.rest.handlers.GridRestCommandHandlerAdapter;
+import org.apache.ignite.internal.processors.rest.request.GridRestRequest;
+import org.apache.ignite.internal.util.future.GridFinishedFuture;
+import org.apache.ignite.internal.util.typedef.internal.U;
+
+import static 
org.apache.ignite.internal.processors.rest.GridRestCommand.DATA_REGION_METRICS;
+import static 
org.apache.ignite.internal.processors.rest.GridRestCommand.DATA_STORAGE_METRICS;
+
+/**
+ * Command handler for {@link DataStorageMetrics} or a collection of {@link 
DataRegionMetrics}
+ */
+public class MemoryMetricsCommandHandler extends GridRestCommandHandlerAdapter 
{
+    /**
+     * Supported commands.
+     */
+    private static final Collection<GridRestCommand> SUPPORTED_COMMANDS = 
U.sealList(
+        DATA_STORAGE_METRICS, DATA_REGION_METRICS);
+
+    /**
+     * @param ctx Context.
+     */
+    public MemoryMetricsCommandHandler(GridKernalContext ctx) {
+        super(ctx);
+    }
+
+    /** {@inheritDoc} */
+    @Override public Collection<GridRestCommand> supportedCommands() {
+        return SUPPORTED_COMMANDS;
+    }
+
+    /** {@inheritDoc} */
+    @Override public IgniteInternalFuture<GridRestResponse> 
handleAsync(GridRestRequest req) {
+        assert req != null;
+
+        if (log.isDebugEnabled())
+            log.debug("Handling " + req.command().key() + " REST request: " + 
req);
+
+        GridRestCommand cmd = req.command();
+
+        switch (cmd) {
+            case DATA_REGION_METRICS:
+                return new GridFinishedFuture<>(new 
GridRestResponse(ctx.grid().dataRegionMetrics()));
+
+            case DATA_STORAGE_METRICS:
+                if 
(ctx.config().getDataStorageConfiguration().isMetricsEnabled())
+                    return new GridFinishedFuture<>(new 
GridRestResponse(ctx.grid().dataStorageMetrics()));
+                else
+                    return new GridFinishedFuture<>(new 
GridRestResponse("Storage metrics are not enabled"));
+
+            default:
+                return new GridFinishedFuture<>(new 
GridRestResponse(GridRestResponse.STATUS_FAILED, "Unknown command"));
+        }
+    }
+}
diff --git 
a/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java
 
b/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java
index 41642c3..f36bdb6 100644
--- 
a/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java
+++ 
b/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java
@@ -735,6 +735,8 @@ public class GridJettyRestHandler extends AbstractHandler {
                 break;
             }
 
+            case DATA_REGION_METRICS:
+            case DATA_STORAGE_METRICS:
             case NAME:
             case VERSION: {
                 restReq = new GridRestRequest();

Reply via email to