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