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 2015/08/05 03:15:15 UTC

[24/50] incubator-ignite git commit: IGNITE-1184 control-center-agent: User should be able to store JDBC drivers to specified folder

IGNITE-1184 control-center-agent: User should be able to store JDBC drivers to specified folder


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

Branch: refs/heads/ignite-843
Commit: c64d4af96276a6bb3b0e060fa4efcea27a3a6620
Parents: 4ea5f07
Author: sevdokimov <se...@gridgain.com>
Authored: Fri Jul 31 18:02:44 2015 +0300
Committer: sevdokimov <se...@gridgain.com>
Committed: Fri Jul 31 18:02:44 2015 +0300

----------------------------------------------------------------------
 .../apache/ignite/agent/AgentConfiguration.java | 21 ++++++++
 .../org/apache/ignite/agent/AgentSocket.java    |  2 +-
 .../ignite/agent/LoggingConfigurator.java       | 18 ++-----
 .../java/org/apache/ignite/agent/Utils.java     | 56 ++++++++++++++++++++
 .../ignite/agent/handlers/DBExtractor.java      | 53 ++++++++++++++++++
 .../main/resources/default.config.properties    |  3 ++
 .../src/main/js/agents/agent-manager.js         | 16 ++++++
 7 files changed, 153 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/c64d4af9/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentConfiguration.java b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentConfiguration.java
index 4ac3072..769c53a 100644
--- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentConfiguration.java
+++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentConfiguration.java
@@ -48,6 +48,10 @@ public class AgentConfiguration {
     @Parameter(names = {"-c", "--config"}, description = "Path to configuration file")
     private String cfgPath;
 
+    /** */
+    @Parameter(names = {"-drv", "--driver-folder"}, description = "Path to drivers folder")
+    private String driversFolder;
+
     /**
      * @return Login.
      */
@@ -119,6 +123,20 @@ public class AgentConfiguration {
     }
 
     /**
+     * @return Configured drivers folder.
+     */
+    public String getDriversFolder() {
+        return driversFolder;
+    }
+
+    /**
+     * @param driversFolder Driver folder.
+     */
+    public void setDriversFolder(String driversFolder) {
+        this.driversFolder = driversFolder;
+    }
+
+    /**
      * @param cfgUrl URL.
      */
     public void load(URL cfgUrl) throws IOException {
@@ -167,5 +185,8 @@ public class AgentConfiguration {
 
         if (cmd.getConfigPath() != null)
             setNodeUri(cmd.getNodeUri());
+
+        if (cmd.getDriversFolder() != null)
+            setDriversFolder(cmd.getDriversFolder());
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/c64d4af9/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentSocket.java
----------------------------------------------------------------------
diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentSocket.java b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentSocket.java
index 935f417..e34972c 100644
--- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentSocket.java
+++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentSocket.java
@@ -88,7 +88,7 @@ public class AgentSocket implements WebSocketSender {
 
         this.ses = ses;
 
-        remote = RemoteHandler.wrap(this, this, restExecutor, new DBExtractor());
+        remote = RemoteHandler.wrap(this, this, restExecutor, new DBExtractor(cfg));
 
         JsonObject authMsg = new JsonObject();
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/c64d4af9/modules/control-center-agent/src/main/java/org/apache/ignite/agent/LoggingConfigurator.java
----------------------------------------------------------------------
diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/LoggingConfigurator.java b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/LoggingConfigurator.java
index 93cc8a9..5fb2c6e 100644
--- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/LoggingConfigurator.java
+++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/LoggingConfigurator.java
@@ -18,7 +18,6 @@
 package org.apache.ignite.agent;
 
 import java.io.*;
-import java.net.*;
 import java.util.logging.*;
 
 /**
@@ -44,21 +43,10 @@ public class LoggingConfigurator {
                 return;
             }
 
-            URL jarLogCfgUrl = AgentLauncher.class.getResource("/logging.properties");
+            File agentHome = Utils.getAgentHome();
 
-            String path = jarLogCfgUrl.getFile();
-
-            int jarSeparatorIdx = path.lastIndexOf("!/");
-
-            if (jarSeparatorIdx != -1) {
-                path = path.substring(0, jarSeparatorIdx);
-
-                if (path.startsWith("file:"))
-                    path = path.substring("file:".length());
-
-                File jarFile = new File(path);
-
-                File logCfg = new File(jarFile.getParentFile(), "logging.properties");
+            if (agentHome != null) {
+                File logCfg = new File(agentHome, "logging.properties");
 
                 if (logCfg.isFile()) {
                     readConfiguration(logCfg);

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/c64d4af9/modules/control-center-agent/src/main/java/org/apache/ignite/agent/Utils.java
----------------------------------------------------------------------
diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/Utils.java b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/Utils.java
new file mode 100644
index 0000000..30661ea
--- /dev/null
+++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/Utils.java
@@ -0,0 +1,56 @@
+/*
+ * 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.agent;
+
+import java.io.*;
+import java.net.*;
+
+/**
+ * Utility methods.
+ */
+public class Utils {
+    /**
+     * Default constructor.
+     */
+    private Utils() {
+        // No-op.
+    }
+
+    /**
+     * @return Folder where agent.jar is located.
+     */
+    public static File getAgentHome() {
+        URL jarLogCfgUrl = AgentLauncher.class.getResource("/logging.properties");
+
+        String path = jarLogCfgUrl.getFile();
+
+        int jarSeparatorIdx = path.lastIndexOf("!/");
+
+        if (jarSeparatorIdx == -1)
+            return null;
+
+        path = path.substring(0, jarSeparatorIdx);
+
+        if (path.startsWith("file:"))
+            path = path.substring("file:".length());
+
+        File jarFile = new File(path);
+
+        return jarFile.getParentFile();
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/c64d4af9/modules/control-center-agent/src/main/java/org/apache/ignite/agent/handlers/DBExtractor.java
----------------------------------------------------------------------
diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/handlers/DBExtractor.java b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/handlers/DBExtractor.java
index 676e900..1288848 100644
--- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/handlers/DBExtractor.java
+++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/handlers/DBExtractor.java
@@ -17,9 +17,11 @@
 
 package org.apache.ignite.agent.handlers;
 
+import org.apache.ignite.agent.*;
 import org.apache.ignite.agent.remote.*;
 import org.apache.ignite.schema.parser.*;
 
+import java.io.*;
 import java.sql.*;
 import java.util.*;
 
@@ -27,6 +29,30 @@ import java.util.*;
  * Remote API to extract DB metadata.
  */
 public class DBExtractor {
+    /** */
+    private final AgentConfiguration cfg;
+
+    /** */
+    private final String driversFolder;
+
+    /**
+     * @param cfg Config.
+     */
+    public DBExtractor(AgentConfiguration cfg) {
+        this.cfg = cfg;
+
+        String driversFolder = cfg.getDriversFolder();
+
+        if (driversFolder == null) {
+            File agentHome = Utils.getAgentHome();
+
+            if (agentHome != null)
+                driversFolder = agentHome + "/drivers";
+        }
+
+        this.driversFolder = driversFolder;
+    }
+
     /**
      * @param jdbcDriverJarPath JDBC driver JAR path.
      * @param jdbcDriverCls JDBC driver class.
@@ -38,8 +64,35 @@ public class DBExtractor {
     @Remote
     public Collection<DbTable> extractMetadata(String jdbcDriverJarPath, String jdbcDriverCls, String jdbcUrl,
         Properties jdbcInfo, boolean tblsOnly) throws SQLException {
+        if (!new File(jdbcDriverJarPath).isAbsolute() && driversFolder != null)
+            jdbcDriverJarPath = new File(driversFolder, jdbcDriverJarPath).getPath();
+
         Connection conn = DBReader.getInstance().connect(jdbcDriverJarPath, jdbcDriverCls, jdbcUrl, jdbcInfo);
 
         return DBReader.getInstance().extractMetadata(conn, tblsOnly);
     }
+
+    /**
+     * @return Drivers in drivers folder
+     * @see AgentConfiguration#driversFolder
+     */
+    @Remote
+    public List<String> availableDrivers() {
+        if (driversFolder == null)
+            return Collections.emptyList();
+
+        String[] list = new File(driversFolder).list();
+
+        if (list == null)
+            return Collections.emptyList();
+
+        List<String> res = new ArrayList<>();
+
+        for (String fileName : list) {
+            if (fileName.endsWith(".jar"))
+                res.add(fileName);
+        }
+
+        return res;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/c64d4af9/modules/control-center-agent/src/main/resources/default.config.properties
----------------------------------------------------------------------
diff --git a/modules/control-center-agent/src/main/resources/default.config.properties b/modules/control-center-agent/src/main/resources/default.config.properties
index 631e811..0162a8c 100644
--- a/modules/control-center-agent/src/main/resources/default.config.properties
+++ b/modules/control-center-agent/src/main/resources/default.config.properties
@@ -19,6 +19,9 @@ serverURI=wss://localhost:3001
 # Default Ignite node server URI.
 nodeURI=http://localhost:8080
 
+# Folder with available JDBC drivers
+# driverFolder=/home/user/drivers
+
 # User's login (email) on Ignite Control Center
 # login=ivan.ivanov@gmail.com
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/c64d4af9/modules/control-center-web/src/main/js/agents/agent-manager.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/agents/agent-manager.js b/modules/control-center-web/src/main/js/agents/agent-manager.js
index 875cdab..12d9f4b 100644
--- a/modules/control-center-web/src/main/js/agents/agent-manager.js
+++ b/modules/control-center-web/src/main/js/agents/agent-manager.js
@@ -187,11 +187,20 @@ Client.prototype.authResult = function(error) {
  * @param {Object} jdbcInfo
  * @param {Boolean} tablesOnly
  * @param {Function} cb Callback. Take 3 arguments: {String} error, {Object} exception, {Object} result.
+ * @return {Array} List of tables (see org.apache.ignite.schema.parser.DbTable java class)
  */
 Client.prototype.extractMetadata = function(jdbcDriverJarPath, jdbcDriverClass, jdbcUrl, jdbcInfo, tablesOnly, cb) {
     this._invokeRmtMethod('extractMetadata', arguments)
 };
 
+/**
+ * @param {Function} cb Callback.
+ * @return {Array} List of jars from driver folder.
+ */
+Client.prototype.availableDrivers = function(cb) {
+    this._invokeRmtMethod('availableDrivers', arguments)
+};
+
 Client.prototype._invokeRmtMethod = function(methodName, args) {
     var cb = null;
 
@@ -200,6 +209,13 @@ Client.prototype._invokeRmtMethod = function(methodName, args) {
     if (m.length > 0 && typeof m[m.length - 1] == 'function')
         cb = m.pop();
 
+    if (this._ws.readyState != 1) {
+        if (cb)
+            cb({type: 'org.apache.ignite.agent.AgentException', message: 'Connection is closed'});
+
+        return
+    }
+
     var msg = {
         mtdName: methodName,
         args: m