Repository: incubator-ignite Updated Branches: refs/heads/ignite-843 bc9c86073 -> 1d860955e
IGNITE-843 Moved test-drive DDL to external file + minor refactorings of agent configuration. Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/1d860955 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/1d860955 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/1d860955 Branch: refs/heads/ignite-843 Commit: 1d860955e68f07a5d872b2e0fd3905dce815a2ca Parents: bc9c860 Author: Alexey Kuznetsov <akuznet...@apache.org> Authored: Fri Aug 21 16:57:18 2015 +0700 Committer: Alexey Kuznetsov <akuznet...@apache.org> Committed: Fri Aug 21 16:57:18 2015 +0700 ---------------------------------------------------------------------- modules/control-center-agent/README.txt | 5 +- .../assembly/release-control-center-agent.xml | 4 +- .../apache/ignite/agent/AgentConfiguration.java | 110 +++++++++---------- .../org/apache/ignite/agent/AgentLauncher.java | 20 ++-- .../org/apache/ignite/agent/AgentSocket.java | 4 +- .../org/apache/ignite/agent/AgentUtils.java | 4 +- .../handlers/DatabaseMetadataExtractor.java | 2 +- .../ignite/agent/handlers/RestExecutor.java | 4 +- .../agent/testdrive/AgentMetadataTestDrive.java | 44 +++----- .../test-drive/test-drive.sql | 40 +++++++ 10 files changed, 128 insertions(+), 109 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1d860955/modules/control-center-agent/README.txt ---------------------------------------------------------------------- diff --git a/modules/control-center-agent/README.txt b/modules/control-center-agent/README.txt index e9a57ff..f5ebfed 100644 --- a/modules/control-center-agent/README.txt +++ b/modules/control-center-agent/README.txt @@ -52,10 +52,11 @@ Options: URI for connect to Ignite Web Agent, for example: "wss://control-center.example.com:3001". Default: "wss://localhost:3001". - -tm, --test-metadata + -tm, --test-drive-metadata Start H2 database with sample tables in same process. + JDBC URL for connect to sample database: jdbc:h2:mem:test-drive-db - -ts, --test-sql + -ts, --test-drive-sql Create cache and populate it with sample data for use in query. http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1d860955/modules/control-center-agent/assembly/release-control-center-agent.xml ---------------------------------------------------------------------- diff --git a/modules/control-center-agent/assembly/release-control-center-agent.xml b/modules/control-center-agent/assembly/release-control-center-agent.xml index f16ccf5..e7f46e8 100644 --- a/modules/control-center-agent/assembly/release-control-center-agent.xml +++ b/modules/control-center-agent/assembly/release-control-center-agent.xml @@ -31,8 +31,8 @@ <directory>${basedir}</directory> <outputDirectory>/</outputDirectory> <includes> - <include>jdbc-drivers/README*</include> - <include>test-drive/README*</include> + <include>jdbc-drivers/*.*</include> + <include>test-drive/*.*</include> <include>README*</include> <include>LICENSE*</include> <include>NOTICE*</include> http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1d860955/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 ae74e38..d156509 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 @@ -49,7 +49,7 @@ public class AgentConfiguration { /** */ @Parameter(names = {"-n", "--node-uri"}, description = "URI for connect to Ignite REST server, for example: http://localhost:8080") - private String nodeUri = "http://localhost:8080"; + private String nodeUri; /** */ @Parameter(names = {"-c", "--config"}, description = "Path to configuration file") @@ -57,136 +57,137 @@ public class AgentConfiguration { /** */ @Parameter(names = {"-drv", "--driver-folder"}, - description = "Path to folder with JDBC drivers, for example /home/user/jdbc-drivers") + description = "Path to folder with JDBC drivers, for example: /home/user/jdbc-drivers") private String driversFolder; /** */ @Parameter(names = { "-tm", "--test-drive-metadata" }, - description = "Start H2 database with sample tables in same process.") - private boolean meta; + description = "Start H2 database with sample tables in same process. " + + "JDBC URL for connect to sample database: jdbc:h2:mem:test-drive-db") + private Boolean meta; /** */ @Parameter(names = { "-ts", "--test-drive-sql" }, description = "Create cache and populate it with sample data for use in query.") - private boolean sql; + private Boolean sql; /** */ @Parameter(names = { "-h", "--help" }, description = "Print this help message") - private boolean help; + private Boolean help; /** * @return Login. */ - public String getLogin() { + public String login() { return login; } /** * @param login Login. */ - public void setLogin(String login) { + public void login(String login) { this.login = login; } /** * @return Password. */ - public String getPassword() { + public String password() { return pwd; } /** * @param pwd Password. */ - public void setPassword(String pwd) { + public void password(String pwd) { this.pwd = pwd; } /** * @return Server URI. */ - public String getServerUri() { + public String serverUri() { return srvUri; } /** * @param srvUri URI. */ - public void setServerUri(String srvUri) { + public void serverUri(String srvUri) { this.srvUri = srvUri; } /** * @return Node URI. */ - public String getNodeUri() { + public String nodeUri() { return nodeUri; } /** * @param nodeUri Node URI. */ - public void setNodeUri(String nodeUri) { + public void nodeUri(String nodeUri) { this.nodeUri = nodeUri; } /** * @return Configuration path. */ - public String getConfigPath() { + public String configPath() { return cfgPath; } /** - * @param cfgPath Config path. - */ - public void setConfigPath(String cfgPath) { - this.cfgPath = cfgPath; - } - - /** * @return Configured drivers folder. */ - public String getDriversFolder() { + public String driversFolder() { return driversFolder; } /** * @param driversFolder Driver folder. */ - public void setDriversFolder(String driversFolder) { + public void driversFolder(String driversFolder) { this.driversFolder = driversFolder; } /** * @return {@code true} If metadata test drive should be started. */ - public boolean isTestDriveMeta() { - return meta; + public Boolean testDriveMetadata() { + return meta != null ? meta : false; } /** * @param meta Set to {@code true} if metadata test drive should be started. */ - public void setTestDriveMeta(boolean meta) { + public void testDriveMetadata(Boolean meta) { this.meta = meta; } /** * @return {@code true} If SQL test drive should be started. */ - public boolean isTestDriveSql() { - return sql; + public Boolean testDriveSql() { + return sql != null ? sql : false; } /** * @param sql Set to {@code true} if SQL test drive should be started. */ - public void setTestDriveSql(boolean sql) { + public void testDriveSql(Boolean sql) { this.sql = sql; } /** + * @return {@code true} If agent options usage should be printed. + */ + public Boolean help() { + return help != null ? help : false; + } + + /** * @param cfgUrl URL. */ public void load(URL cfgUrl) throws IOException { @@ -199,65 +200,58 @@ public class AgentConfiguration { String val = (String)props.remove("login"); if (val != null) - setLogin(val); + login(val); val = (String)props.remove("password"); if (val != null) - setPassword(val); + password(val); val = (String)props.remove("serverURI"); if (val != null) - setServerUri(val); + serverUri(val); val = (String)props.remove("nodeURI"); if (val != null) - setNodeUri(val); + nodeUri(val); val = (String)props.remove("driverFolder"); if (val != null) - setDriversFolder(val); + driversFolder(val); } /** * @param cmd Command. */ public void merge(AgentConfiguration cmd) { - if (cmd.getLogin() != null) - setLogin(cmd.getLogin()); + if (cmd.login() != null) + login(cmd.login()); - if (cmd.getPassword() != null) - setPassword(cmd.getPassword()); + if (cmd.password() != null) + password(cmd.password()); - if (cmd.getServerUri() != null) - setServerUri(cmd.getServerUri()); + if (cmd.serverUri() != null) + serverUri(cmd.serverUri()); if (srvUri == null) - setServerUri(DFLT_SERVER_URI); + serverUri(DFLT_SERVER_URI); - if (cmd.getNodeUri() != null) - setNodeUri(cmd.getNodeUri()); + if (cmd.nodeUri() != null) + nodeUri(cmd.nodeUri()); if (nodeUri == null) - setNodeUri(DFLT_NODE_URI); + nodeUri(DFLT_NODE_URI); - if (cmd.getDriversFolder() != null) - setDriversFolder(cmd.getDriversFolder()); + if (cmd.driversFolder() != null) + driversFolder(cmd.driversFolder()); - if (cmd.isTestDriveMeta()) - setTestDriveMeta(true); - - if (cmd.isTestDriveSql()) - setTestDriveSql(true); - } + if (cmd.testDriveMetadata()) + testDriveMetadata(true); - /** - * @return {@code true} If agent options usage should be printed. - */ - public boolean help() { - return help; + if (cmd.testDriveSql()) + testDriveSql(true); } } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1d860955/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentLauncher.java ---------------------------------------------------------------------- diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentLauncher.java b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentLauncher.java index 163c4c0..f2d8cab 100644 --- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentLauncher.java +++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentLauncher.java @@ -60,27 +60,27 @@ public class AgentLauncher { return; } - if (cmdCfg.getConfigPath() != null) - cfg.load(new File(cmdCfg.getConfigPath()).toURI().toURL()); + if (cmdCfg.configPath() != null) + cfg.load(new File(cmdCfg.configPath()).toURI().toURL()); cfg.merge(cmdCfg); - if (cfg.getLogin() == null) { + if (cfg.login() == null) { System.out.print("Login: "); - cfg.setLogin(System.console().readLine().trim()); + cfg.login(System.console().readLine().trim()); } - if (cfg.getPassword() == null) { + if (cfg.password() == null) { System.out.print("Password: "); - cfg.setPassword(new String(System.console().readPassword())); + cfg.password(new String(System.console().readPassword())); } - if (cfg.isTestDriveMeta()) + if (cfg.testDriveMetadata()) AgentMetadataTestDrive.testDrive(); - if (cfg.isTestDriveSql()) + if (cfg.testDriveSql()) AgentSqlTestDrive.testDrive(); RestExecutor restExecutor = new RestExecutor(cfg); @@ -103,9 +103,9 @@ public class AgentLauncher { while (!Thread.interrupted()) { AgentSocket agentSock = new AgentSocket(cfg, restExecutor); - log.log(Level.INFO, "Connecting to: " + cfg.getServerUri()); + log.log(Level.INFO, "Connecting to: " + cfg.serverUri()); - client.connect(agentSock, URI.create(cfg.getServerUri())); + client.connect(agentSock, URI.create(cfg.serverUri())); agentSock.waitForClose(); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1d860955/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 810bf9b..39a3ade 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 @@ -93,8 +93,8 @@ public class AgentSocket implements WebSocketSender { JsonObject authMsg = new JsonObject(); authMsg.addProperty("type", "AuthMessage"); - authMsg.addProperty("login", cfg.getLogin()); - authMsg.addProperty("password", cfg.getPassword()); + authMsg.addProperty("login", cfg.login()); + authMsg.addProperty("password", cfg.password()); send(authMsg); } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1d860955/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentUtils.java ---------------------------------------------------------------------- diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentUtils.java b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentUtils.java index be6d3e7..d756664 100644 --- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentUtils.java +++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentUtils.java @@ -53,10 +53,10 @@ public class AgentUtils { // Resolve path to class-file. URI classesUri = domain.getCodeSource().getLocation().toURI(); - boolean windows = System.getProperty("os.name").toLowerCase().contains("win"); + boolean win = System.getProperty("os.name").toLowerCase().contains("win"); // Overcome UNC path problem on Windows (http://www.tomergabel.com/JavaMishandlesUNCPathsOnWindows.aspx) - if (windows && classesUri.getAuthority() != null) + if (win && classesUri.getAuthority() != null) classesUri = new URI(classesUri.toString().replace("file://", "file:/")); return new File(classesUri).getParentFile(); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1d860955/modules/control-center-agent/src/main/java/org/apache/ignite/agent/handlers/DatabaseMetadataExtractor.java ---------------------------------------------------------------------- diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/handlers/DatabaseMetadataExtractor.java b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/handlers/DatabaseMetadataExtractor.java index ba2de15..2bf823c 100644 --- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/handlers/DatabaseMetadataExtractor.java +++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/handlers/DatabaseMetadataExtractor.java @@ -41,7 +41,7 @@ public class DatabaseMetadataExtractor { * @param cfg Config. */ public DatabaseMetadataExtractor(AgentConfiguration cfg) { - String driversFolder = cfg.getDriversFolder(); + String driversFolder = cfg.driversFolder(); if (driversFolder == null) { File agentHome = AgentUtils.getAgentHome(); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1d860955/modules/control-center-agent/src/main/java/org/apache/ignite/agent/handlers/RestExecutor.java ---------------------------------------------------------------------- diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/handlers/RestExecutor.java b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/handlers/RestExecutor.java index d8af3b1..c86ae16 100644 --- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/handlers/RestExecutor.java +++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/handlers/RestExecutor.java @@ -74,10 +74,10 @@ public class RestExecutor { @Remote public RestResult executeRest(String path, Map<String, String> params, String mtd, Map<String, String> headers, String body) throws IOException, URISyntaxException { - URIBuilder builder = new URIBuilder(cfg.getNodeUri()); + URIBuilder builder = new URIBuilder(cfg.nodeUri()); if (path != null) { - if (!path.startsWith("/") && !cfg.getNodeUri().endsWith("/")) + if (!path.startsWith("/") && !cfg.nodeUri().endsWith("/")) path = '/' + path; builder.setPath(path); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1d860955/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/AgentMetadataTestDrive.java ---------------------------------------------------------------------- diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/AgentMetadataTestDrive.java b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/AgentMetadataTestDrive.java index 6c75417..ecb08af 100644 --- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/AgentMetadataTestDrive.java +++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/AgentMetadataTestDrive.java @@ -1,7 +1,9 @@ package org.apache.ignite.agent.testdrive; +import org.apache.ignite.agent.*; import org.h2.tools.*; +import java.io.*; import java.sql.*; import java.util.logging.*; @@ -30,46 +32,28 @@ public class AgentMetadataTestDrive { * Start H2 database and populate it with several tables. */ public static void testDrive() { - log.log(Level.INFO, "Starting in-memory H2 database for metadata test drive..."); + log.log(Level.INFO, "TEST-DRIVE: Prepare in-memory H2 database..."); try { - Connection conn = DriverManager.getConnection("jdbc:h2:mem:test-driver-db;DB_CLOSE_DELAY=-1", "sa", ""); + Connection conn = DriverManager.getConnection("jdbc:h2:mem:test-drive-db;DB_CLOSE_DELAY=-1", "sa", ""); - query(conn, "CREATE TABLE COUNTRY(ID INTEGER NOT NULL PRIMARY KEY, COUNTRY_NAME VARCHAR(100))"); - log.log(Level.INFO, "Table COUNTRY created."); + File agentHome = AgentUtils.getAgentHome(); - query(conn, "CREATE TABLE DEPARTMENT(" + - " DEPARTMENT_ID INTEGER NOT NULL PRIMARY KEY," + - " DEPARTMENT_NAME VARCHAR(50) NOT NULL," + - " COUNTRY_ID INTEGER," + - " MANAGER_ID INTEGER)"); - log.log(Level.INFO, "Table DEPARTMENT created."); + File sqlScript = new File((agentHome != null) ? new File(agentHome, "test-drive") : new File("test-drive"), + "test-drive.sql"); - query(conn, "CREATE TABLE EMPLOYEE(" + - " EMPLOYEE_ID INTEGER NOT NULL PRIMARY KEY," + - " FIRST_NAME VARCHAR(20) NOT NULL," + - " LAST_NAME VARCHAR(30) NOT NULL," + - " EMAIL VARCHAR(25) NOT NULL," + - " PHONE_NUMBER VARCHAR(20)," + - " HIRE_DATE DATE NOT NULL," + - " JOB VARCHAR(50) NOT NULL," + - " SALARY DOUBLE," + - " MANAGER_ID INTEGER," + - " DEPARTMENT_ID INTEGER)"); - log.log(Level.INFO, "Table EMPLOYEE created."); - - query(conn, "CREATE INDEX EMP_SALARY_A ON EMPLOYEE(SALARY ASC)"); - query(conn, "CREATE INDEX EMP_SALARY_B ON EMPLOYEE(SALARY DESC)"); - query(conn, "CREATE INDEX EMP_NAMES ON EMPLOYEE(FIRST_NAME ASC, LAST_NAME ASC)"); - log.log(Level.INFO, "Indexes for table EMPLOYEE created."); + RunScript.execute(conn, new FileReader(sqlScript)); + log.log(Level.INFO, "TEST-DRIVE: Sample tables created."); conn.close(); Server.createTcpServer("-tcpDaemon").start(); - log.log(Level.INFO, "TcpServer stared."); - } catch (SQLException e) { - log.log(Level.SEVERE, "Failed to start test drive for metadata!", e); + log.log(Level.INFO, "TEST-DRIVE: TcpServer stared."); + + log.log(Level.INFO, "TEST-DRIVE: JDBC URL for test drive metadata load: jdbc:h2:mem:test-drive-db"); + } catch (Exception e) { + log.log(Level.SEVERE, "TEST-DRIVE: Failed to start test drive for metadata!", e); } } } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1d860955/modules/control-center-agent/test-drive/test-drive.sql ---------------------------------------------------------------------- diff --git a/modules/control-center-agent/test-drive/test-drive.sql b/modules/control-center-agent/test-drive/test-drive.sql new file mode 100644 index 0000000..98cfa25 --- /dev/null +++ b/modules/control-center-agent/test-drive/test-drive.sql @@ -0,0 +1,40 @@ +/* + * 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. + */ + +CREATE TABLE COUNTRY(ID INTEGER NOT NULL PRIMARY KEY, COUNTRY_NAME VARCHAR(100)); + +CREATE TABLE DEPARTMENT( + DEPARTMENT_ID INTEGER NOT NULL PRIMARY KEY, + DEPARTMENT_NAME VARCHAR(50) NOT NULL, + COUNTRY_ID INTEGER, + MANAGER_ID INTEGER); + +CREATE TABLE EMPLOYEE( + EMPLOYEE_ID INTEGER NOT NULL PRIMARY KEY, + FIRST_NAME VARCHAR(20) NOT NULL, + LAST_NAME VARCHAR(30) NOT NULL, + EMAIL VARCHAR(25) NOT NULL, + PHONE_NUMBER VARCHAR(20), + HIRE_DATE DATE NOT NULL, + JOB VARCHAR(50) NOT NULL, + SALARY DOUBLE, + MANAGER_ID INTEGER, + DEPARTMENT_ID INTEGER); + +CREATE INDEX EMP_SALARY_A ON EMPLOYEE(SALARY ASC); +CREATE INDEX EMP_SALARY_B ON EMPLOYEE(SALARY DESC); +CREATE INDEX EMP_NAMES ON EMPLOYEE(FIRST_NAME ASC, LAST_NAME ASC);