You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ak...@apache.org on 2017/08/21 11:42:11 UTC

ignite git commit: IGNITE-6127 Implemented GZip data between web-agent and web server.

Repository: ignite
Updated Branches:
  refs/heads/master 918c409f5 -> 90f4d4dfd


IGNITE-6127 Implemented GZip data between web-agent and web server.


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

Branch: refs/heads/master
Commit: 90f4d4dfdd6f8d99a8dd1ea9a80396e0c749d8cc
Parents: 918c409
Author: Alexey Kuznetsov <ak...@apache.org>
Authored: Mon Aug 21 18:42:08 2017 +0700
Committer: Alexey Kuznetsov <ak...@apache.org>
Committed: Mon Aug 21 18:42:08 2017 +0700

----------------------------------------------------------------------
 .../node/VisorNodeDataCollectorTaskResult.java  | 29 ++++++++++++++++++++
 modules/web-console/backend/app/agentSocket.js  | 29 +++++++++++++++-----
 .../agent/handlers/AbstractListener.java        | 21 ++++++++++++++
 .../ignite/console/agent/rest/RestResult.java   | 25 +++++++++++++++--
 4 files changed, 94 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/90f4d4df/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorNodeDataCollectorTaskResult.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorNodeDataCollectorTaskResult.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorNodeDataCollectorTaskResult.java
index 093e867..c1e2f1f 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorNodeDataCollectorTaskResult.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorNodeDataCollectorTaskResult.java
@@ -271,6 +271,35 @@ public class VisorNodeDataCollectorTaskResult extends VisorDataTransferObject {
         return persistenceMetricsEx;
     }
 
+    /**
+     * Add specified results.
+     *
+     * @param res Results to add.
+     */
+    public void add(VisorNodeDataCollectorTaskResult res) {
+        assert res != null;
+
+        active = active || res.isActive();
+        unhandledEx.putAll(res.getUnhandledEx());
+        gridNames.putAll(res.getGridNames());
+        topVersions.putAll(res.getTopologyVersions());
+        taskMonitoringEnabled.putAll(res.isTaskMonitoringEnabled());
+        errCnts.putAll(res.getErrorCounts());
+        evts.addAll(res.getEvents());
+        evtsEx.putAll(res.getEventsEx());
+        memoryMetrics.putAll(res.getMemoryMetrics());
+        memoryMetricsEx.putAll(res.getMemoryMetricsEx());
+        caches.putAll(res.getCaches());
+        cachesEx.putAll(res.getCachesEx());
+        igfss.putAll(res.getIgfss());
+        igfsEndpoints.putAll(res.getIgfsEndpoints());
+        igfssEx.putAll(res.getIgfssEx());
+        readyTopVers.putAll(res.getReadyAffinityVersions());
+        pendingExchanges.putAll(res.getPendingExchanges());
+        persistenceMetrics.putAll(res.getPersistenceMetrics());
+        persistenceMetricsEx.putAll(res.getPersistenceMetricsEx());
+    }
+
     /** {@inheritDoc} */
     @Override protected void writeExternalData(ObjectOutput out) throws IOException {
         out.writeBoolean(active);

http://git-wip-us.apache.org/repos/asf/ignite/blob/90f4d4df/modules/web-console/backend/app/agentSocket.js
----------------------------------------------------------------------
diff --git a/modules/web-console/backend/app/agentSocket.js b/modules/web-console/backend/app/agentSocket.js
index 0853339..489d145 100644
--- a/modules/web-console/backend/app/agentSocket.js
+++ b/modules/web-console/backend/app/agentSocket.js
@@ -24,7 +24,7 @@
  */
 module.exports = {
     implements: 'agent-socket',
-    inject: ['require(lodash)']
+    inject: ['require(lodash)', 'require(zlib)']
 };
 
 /**
@@ -79,9 +79,10 @@ class Command {
 
 /**
  * @param _
+ * @param zlib
  * @returns {AgentSocket}
  */
-module.exports.factory = function(_) {
+module.exports.factory = function(_, zlib) {
     /**
      * Connected agent descriptor.
      */
@@ -131,11 +132,25 @@ module.exports.factory = function(_) {
          */
         emitEvent(event, ...args) {
             return new Promise((resolve, reject) =>
-                this._emit(event, args, (error, res) => {
-                    if (error)
-                        return reject(error);
-
-                    resolve(res);
+                this._emit(event, args, (resErr, res) => {
+                    if (resErr)
+                        return reject(resErr);
+
+                    if (res.zipped) {
+                        // TODO IGNITE-6127 Temporary solution until GZip support for socket.io-client-java.
+                        // See: https://github.com/socketio/socket.io-client-java/issues/312
+                        // We can GZip manually for now.
+                        zlib.gunzip(new Buffer(res.data, 'base64'), (unzipErr, unzipped) => {
+                            if (unzipErr)
+                                return reject(unzipErr);
+
+                            res.data = unzipped.toString();
+
+                            resolve(res);
+                        });
+                    }
+                    else
+                        resolve(res);
                 })
             );
         }

http://git-wip-us.apache.org/repos/asf/ignite/blob/90f4d4df/modules/web-console/web-agent/src/main/java/org/apache/ignite/console/agent/handlers/AbstractListener.java
----------------------------------------------------------------------
diff --git a/modules/web-console/web-agent/src/main/java/org/apache/ignite/console/agent/handlers/AbstractListener.java b/modules/web-console/web-agent/src/main/java/org/apache/ignite/console/agent/handlers/AbstractListener.java
index 987dac9..faf864b 100644
--- a/modules/web-console/web-agent/src/main/java/org/apache/ignite/console/agent/handlers/AbstractListener.java
+++ b/modules/web-console/web-agent/src/main/java/org/apache/ignite/console/agent/handlers/AbstractListener.java
@@ -19,11 +19,15 @@ package org.apache.ignite.console.agent.handlers;
 
 import io.socket.client.Ack;
 import io.socket.emitter.Emitter;
+import java.io.ByteArrayOutputStream;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.Map;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
+import java.util.zip.GZIPOutputStream;
+import org.apache.commons.codec.binary.Base64OutputStream;
+import org.apache.ignite.console.agent.rest.RestResult;
 import org.apache.log4j.Logger;
 
 import static org.apache.ignite.console.agent.AgentUtils.removeCallback;
@@ -66,6 +70,23 @@ abstract class AbstractListener implements Emitter.Listener {
                     try {
                         Object res = execute(params);
 
+                        // TODO IGNITE-6127 Temporary solution until GZip support for socket.io-client-java.
+                        // See: https://github.com/socketio/socket.io-client-java/issues/312
+                        // We can GZip manually for now.
+                        if (res instanceof RestResult) {
+                            RestResult restRes = (RestResult) res;
+
+                            ByteArrayOutputStream baos = new ByteArrayOutputStream(4096);
+                            Base64OutputStream b64os = new Base64OutputStream(baos);
+                            GZIPOutputStream gzip = new GZIPOutputStream(b64os);
+
+                            gzip.write(restRes.getData().getBytes());
+
+                            gzip.close();
+
+                            restRes.zipData(baos.toString());
+                        }
+
                         cb.call(null, toJSON(res));
                     } catch (Exception e) {
                         cb.call(e, null);

http://git-wip-us.apache.org/repos/asf/ignite/blob/90f4d4df/modules/web-console/web-agent/src/main/java/org/apache/ignite/console/agent/rest/RestResult.java
----------------------------------------------------------------------
diff --git a/modules/web-console/web-agent/src/main/java/org/apache/ignite/console/agent/rest/RestResult.java b/modules/web-console/web-agent/src/main/java/org/apache/ignite/console/agent/rest/RestResult.java
index 5beeee7..962ffb6 100644
--- a/modules/web-console/web-agent/src/main/java/org/apache/ignite/console/agent/rest/RestResult.java
+++ b/modules/web-console/web-agent/src/main/java/org/apache/ignite/console/agent/rest/RestResult.java
@@ -22,13 +22,16 @@ package org.apache.ignite.console.agent.rest;
  */
 public class RestResult {
     /** REST http code. */
-    private final int status;
+    private int status;
 
     /** The field contains description of error if server could not handle the request. */
-    private final String error;
+    private String error;
 
     /** The field contains result of command. */
-    private final String data;
+    private String data;
+
+    /** Flag of zipped data. */
+    private boolean zipped;
 
     /**
      * @param status REST http code.
@@ -78,4 +81,20 @@ public class RestResult {
     public String getData() {
         return data;
     }
+
+    /**
+     * @param data Set zipped data.
+     */
+    public void zipData(String data) {
+        zipped = true;
+
+        this.data = data;
+    }
+
+    /**
+     * @return {@code true if data is zipped and Base64 encoded.}
+     */
+    public boolean isZipped() {
+        return zipped;
+    }
 }