Repository: ignite Updated Branches: refs/heads/ignite-843 98872d307 -> b11cbfd05
# IGNITE-843 Updated sql page. Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/3228c4b0 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/3228c4b0 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/3228c4b0 Branch: refs/heads/ignite-843 Commit: 3228c4b0b9d8cad20964c281c1e187860a31775e Parents: 5ce52e9 Author: Andrey <[email protected]> Authored: Tue Sep 1 11:42:02 2015 +0700 Committer: Andrey <[email protected]> Committed: Tue Sep 1 11:42:02 2015 +0700 ---------------------------------------------------------------------- .../bin/ignite-web-agent.sh | 15 ++++ .../apache/ignite/agent/AgentConfiguration.java | 11 +-- .../org/apache/ignite/agent/AgentLauncher.java | 22 +++-- .../ignite/agent/AgentLoggingConfigurator.java | 8 +- .../org/apache/ignite/agent/AgentSocket.java | 36 +++++--- .../org/apache/ignite/agent/AgentUtils.java | 10 ++- .../handlers/DatabaseMetadataExtractor.java | 28 +++++-- .../ignite/agent/handlers/RestExecutor.java | 34 ++++---- .../org/apache/ignite/agent/remote/Remote.java | 5 +- .../ignite/agent/remote/RemoteHandler.java | 23 ++++-- .../ignite/agent/remote/WebSocketSender.java | 2 +- .../agent/testdrive/AgentMetadataTestDrive.java | 19 +++-- .../agent/testdrive/AgentSqlTestDrive.java | 55 ++++++++++--- .../ignite/agent/testdrive/model/Car.java | 2 +- .../ignite/agent/testdrive/model/CarKey.java | 2 +- .../ignite/agent/testdrive/model/Country.java | 2 +- .../agent/testdrive/model/CountryKey.java | 2 +- .../agent/testdrive/model/Department.java | 2 +- .../agent/testdrive/model/DepartmentKey.java | 2 +- .../ignite/agent/testdrive/model/Employee.java | 2 +- .../agent/testdrive/model/EmployeeKey.java | 2 +- .../ignite/agent/testdrive/model/Parking.java | 2 +- .../agent/testdrive/model/ParkingKey.java | 2 +- .../src/main/js/controllers/sql-controller.js | 47 ++++++++++- modules/control-center-web/src/main/js/db.js | 4 +- .../src/main/js/public/stylesheets/style.scss | 12 +-- .../src/main/js/views/includes/controls.jade | 6 +- .../src/main/js/views/sql/sql.jade | 87 +++++++++++--------- 28 files changed, 296 insertions(+), 148 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/modules/control-center-agent/bin/ignite-web-agent.sh ---------------------------------------------------------------------- diff --git a/modules/control-center-agent/bin/ignite-web-agent.sh b/modules/control-center-agent/bin/ignite-web-agent.sh index b0158a3..9acdc5c 100755 --- a/modules/control-center-agent/bin/ignite-web-agent.sh +++ b/modules/control-center-agent/bin/ignite-web-agent.sh @@ -16,4 +16,19 @@ # limitations under the License. # +SOURCE="${BASH_SOURCE[0]}" + +DIR="$( dirname "$SOURCE" )" + +while [ -h "$SOURCE" ] + do + SOURCE="$(readlink "$SOURCE")" + + [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" + + DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" + done + +DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" + java -jar ignite-web-agent-${version}.jar "$@" http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/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 44a7f1f..f2de4a7 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 @@ -17,11 +17,12 @@ package org.apache.ignite.agent; -import com.beust.jcommander.*; - -import java.io.*; -import java.net.*; -import java.util.*; +import com.beust.jcommander.Parameter; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.Reader; +import java.net.URL; +import java.util.Properties; /** * Agent configuration. http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/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 f04d9d9..01de963 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 @@ -17,15 +17,14 @@ package org.apache.ignite.agent; -import com.beust.jcommander.*; -import org.apache.ignite.agent.handlers.*; -import org.apache.ignite.agent.testdrive.*; -import org.eclipse.jetty.util.ssl.*; -import org.eclipse.jetty.websocket.client.*; - -import java.io.*; -import java.net.*; -import java.util.logging.*; +import com.beust.jcommander.JCommander; +import java.io.File; +import java.net.URI; +import java.util.logging.Level; +import java.util.logging.Logger; +import org.apache.ignite.agent.handlers.RestExecutor; +import org.eclipse.jetty.util.ssl.SslContextFactory; +import org.eclipse.jetty.websocket.client.WebSocketClient; /** * Control Center Agent launcher. @@ -61,6 +60,11 @@ public class AgentLauncher { return; } + if (cmdCfg.testDriveSql() && cmdCfg.nodeUri() != null) + log.log(Level.WARNING, + "URI for connect to Ignite REST server will be ignored because --test-drive-sql option was specified."); + + if (cmdCfg.configPath() != null) cfg.load(new File(cmdCfg.configPath()).toURI().toURL()); http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentLoggingConfigurator.java ---------------------------------------------------------------------- diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentLoggingConfigurator.java b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentLoggingConfigurator.java index d492c45..3a0084a 100644 --- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentLoggingConfigurator.java +++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentLoggingConfigurator.java @@ -17,8 +17,12 @@ package org.apache.ignite.agent; -import java.io.*; -import java.util.logging.*; +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.logging.LogManager; /** * Configurator for java.util.Logger. http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/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 b329967..d66393b 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 @@ -17,18 +17,28 @@ package org.apache.ignite.agent; -import com.google.gson.*; -import org.apache.http.auth.*; -import org.apache.ignite.agent.handlers.*; -import org.apache.ignite.agent.remote.*; -import org.apache.ignite.agent.testdrive.*; -import org.eclipse.jetty.websocket.api.*; -import org.eclipse.jetty.websocket.api.annotations.*; - -import java.io.*; -import java.net.*; -import java.util.concurrent.*; -import java.util.logging.*; +import com.google.gson.Gson; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import java.io.IOException; +import java.net.ConnectException; +import java.util.concurrent.CountDownLatch; +import java.util.logging.Level; +import java.util.logging.Logger; +import org.apache.ignite.agent.handlers.DatabaseMetadataExtractor; +import org.apache.ignite.agent.handlers.RestExecutor; +import org.apache.ignite.agent.remote.Remote; +import org.apache.ignite.agent.remote.RemoteHandler; +import org.apache.ignite.agent.remote.WebSocketSender; +import org.apache.ignite.agent.testdrive.AgentMetadataTestDrive; +import org.apache.ignite.agent.testdrive.AgentSqlTestDrive; +import org.eclipse.jetty.websocket.api.Session; +import org.eclipse.jetty.websocket.api.annotations.OnWebSocketClose; +import org.eclipse.jetty.websocket.api.annotations.OnWebSocketConnect; +import org.eclipse.jetty.websocket.api.annotations.OnWebSocketError; +import org.eclipse.jetty.websocket.api.annotations.OnWebSocketMessage; +import org.eclipse.jetty.websocket.api.annotations.WebSocket; /** * Handler for web-socket connection. @@ -170,7 +180,7 @@ public class AgentSocket implements WebSocketSender { AgentMetadataTestDrive.testDrive(); if (cfg.testDriveSql()) - AgentSqlTestDrive.testDrive(); + AgentSqlTestDrive.testDrive(cfg); } /** http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/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 d756664..6ee5633 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 @@ -17,10 +17,12 @@ package org.apache.ignite.agent; -import java.io.*; -import java.net.*; -import java.security.*; -import java.util.logging.*; +import java.io.File; +import java.net.URI; +import java.net.URISyntaxException; +import java.security.ProtectionDomain; +import java.util.logging.Level; +import java.util.logging.Logger; /** * Utility methods. http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/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 55e3307..6012b3f 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 @@ -17,15 +17,25 @@ 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.net.*; -import java.sql.*; -import java.util.*; -import java.util.logging.*; +import java.io.BufferedReader; +import java.io.File; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.URL; +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Properties; +import java.util.logging.Level; +import java.util.logging.Logger; +import org.apache.ignite.agent.AgentConfiguration; +import org.apache.ignite.agent.AgentUtils; +import org.apache.ignite.agent.remote.Remote; +import org.apache.ignite.schema.parser.DbMetadataReader; +import org.apache.ignite.schema.parser.DbTable; /** * Remote API to extract database metadata. http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/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 98fd2fa..7e8edf8 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 @@ -17,20 +17,26 @@ package org.apache.ignite.agent.handlers; -import org.apache.commons.codec.*; -import org.apache.http.*; -import org.apache.http.client.entity.*; -import org.apache.http.client.methods.*; -import org.apache.http.client.utils.*; -import org.apache.http.entity.*; -import org.apache.http.impl.client.*; -import org.apache.ignite.agent.*; -import org.apache.ignite.agent.remote.*; - -import java.io.*; -import java.net.*; -import java.nio.charset.*; -import java.util.*; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.net.URISyntaxException; +import java.nio.charset.Charset; +import java.util.List; +import java.util.Map; +import org.apache.commons.codec.Charsets; +import org.apache.http.Header; +import org.apache.http.NameValuePair; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.methods.HttpRequestBase; +import org.apache.http.client.utils.URIBuilder; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.ignite.agent.AgentConfiguration; +import org.apache.ignite.agent.remote.Remote; /** * Executor for REST requests. http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/modules/control-center-agent/src/main/java/org/apache/ignite/agent/remote/Remote.java ---------------------------------------------------------------------- diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/remote/Remote.java b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/remote/Remote.java index ecd056c..8fe49bd 100644 --- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/remote/Remote.java +++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/remote/Remote.java @@ -17,7 +17,10 @@ package org.apache.ignite.agent.remote; -import java.lang.annotation.*; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; /** * Use this annotation to associate methods with remote NodeJS server commands. http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/modules/control-center-agent/src/main/java/org/apache/ignite/agent/remote/RemoteHandler.java ---------------------------------------------------------------------- diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/remote/RemoteHandler.java b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/remote/RemoteHandler.java index 5ca6379..203f0fb 100644 --- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/remote/RemoteHandler.java +++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/remote/RemoteHandler.java @@ -17,13 +17,22 @@ package org.apache.ignite.agent.remote; -import com.google.gson.*; -import org.apache.http.auth.*; - -import java.lang.reflect.*; -import java.util.*; -import java.util.concurrent.*; -import java.util.logging.*; +import com.google.gson.Gson; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonNull; +import com.google.gson.JsonObject; +import com.google.gson.JsonPrimitive; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.lang.reflect.Type; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.logging.Level; +import java.util.logging.Logger; +import org.apache.http.auth.AuthenticationException; /** * Allow to execute methods remotely from NodeJS server by web-socket command. http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/modules/control-center-agent/src/main/java/org/apache/ignite/agent/remote/WebSocketSender.java ---------------------------------------------------------------------- diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/remote/WebSocketSender.java b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/remote/WebSocketSender.java index 44f4147..655ff85 100644 --- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/remote/WebSocketSender.java +++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/remote/WebSocketSender.java @@ -17,7 +17,7 @@ package org.apache.ignite.agent.remote; -import com.google.gson.*; +import com.google.gson.JsonObject; /** * Sender for messages to web-socket. http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/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 6d2ab50..d3307b7 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,12 +1,17 @@ package org.apache.ignite.agent.testdrive; -import org.apache.ignite.agent.*; -import org.h2.tools.*; - -import java.io.*; -import java.sql.*; -import java.util.concurrent.atomic.*; -import java.util.logging.*; +import java.io.File; +import java.io.FileReader; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.SQLException; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.logging.Level; +import java.util.logging.Logger; +import org.apache.ignite.agent.AgentUtils; +import org.h2.tools.RunScript; +import org.h2.tools.Server; /** * Test drive for metadata load from database. http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/AgentSqlTestDrive.java ---------------------------------------------------------------------- diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/AgentSqlTestDrive.java b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/AgentSqlTestDrive.java index d52deae..7a493a6 100644 --- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/AgentSqlTestDrive.java +++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/AgentSqlTestDrive.java @@ -1,14 +1,34 @@ package org.apache.ignite.agent.testdrive; -import org.apache.ignite.*; -import org.apache.ignite.agent.testdrive.model.*; -import org.apache.ignite.cache.*; -import org.apache.ignite.configuration.*; -import org.apache.ignite.lang.*; - -import java.util.*; -import java.util.concurrent.atomic.*; -import java.util.logging.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Random; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.logging.Level; +import java.util.logging.Logger; +import org.apache.ignite.Ignite; +import org.apache.ignite.IgniteCache; +import org.apache.ignite.Ignition; +import org.apache.ignite.agent.AgentConfiguration; +import org.apache.ignite.agent.testdrive.model.Car; +import org.apache.ignite.agent.testdrive.model.CarKey; +import org.apache.ignite.agent.testdrive.model.Country; +import org.apache.ignite.agent.testdrive.model.CountryKey; +import org.apache.ignite.agent.testdrive.model.Department; +import org.apache.ignite.agent.testdrive.model.DepartmentKey; +import org.apache.ignite.agent.testdrive.model.Employee; +import org.apache.ignite.agent.testdrive.model.EmployeeKey; +import org.apache.ignite.agent.testdrive.model.Parking; +import org.apache.ignite.agent.testdrive.model.ParkingKey; +import org.apache.ignite.cache.CacheTypeMetadata; +import org.apache.ignite.configuration.CacheConfiguration; +import org.apache.ignite.configuration.IgniteConfiguration; +import org.apache.ignite.internal.IgniteEx; +import org.apache.ignite.internal.IgniteNodeAttributes; +import org.apache.ignite.internal.util.typedef.F; +import org.apache.ignite.lang.IgniteBiTuple; /** * Test drive for SQL. @@ -299,7 +319,7 @@ public class AgentSqlTestDrive { /** * Start ignite node with cacheEmployee and populate it with data. */ - public static void testDrive() { + public static void testDrive(AgentConfiguration acfg) { if (initLatch.compareAndSet(false, true)) { log.log(Level.INFO, "TEST-DRIVE: Prepare node configuration..."); @@ -312,7 +332,20 @@ public class AgentSqlTestDrive { log.log(Level.INFO, "TEST-DRIVE: Start embedded node with indexed enabled caches..."); - Ignite ignite = Ignition.start(cfg); + IgniteEx ignite = (IgniteEx)Ignition.start(cfg); + + String host = ((Collection<String>) + ignite.localNode().attribute(IgniteNodeAttributes.ATTR_REST_JETTY_ADDRS)).iterator().next(); + + Integer port = ignite.localNode().attribute(IgniteNodeAttributes.ATTR_REST_JETTY_PORT); + + if (F.isEmpty(host) || port == null) { + log.log(Level.SEVERE, "TEST-DRIVE: Failed to start embedded node with rest!"); + + return; + } + + acfg.nodeUri(String.format("http://%s:%d", "0.0.0.0".equals(host) ? "127.0.0.1" : host, port)); log.log(Level.INFO, "TEST-DRIVE: Embedded node started"); http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/Car.java ---------------------------------------------------------------------- diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/Car.java b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/Car.java index 38cb1bc..969830b 100644 --- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/Car.java +++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/Car.java @@ -17,7 +17,7 @@ package org.apache.ignite.agent.testdrive.model; -import java.io.*; +import java.io.Serializable; /** * Car definition. http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/CarKey.java ---------------------------------------------------------------------- diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/CarKey.java b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/CarKey.java index 7e9d0ce..1c661d2 100644 --- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/CarKey.java +++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/CarKey.java @@ -17,7 +17,7 @@ package org.apache.ignite.agent.testdrive.model; -import java.io.*; +import java.io.Serializable; /** * CarKey definition. http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/Country.java ---------------------------------------------------------------------- diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/Country.java b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/Country.java index 7a6ddf9..9f10e6f 100644 --- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/Country.java +++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/Country.java @@ -17,7 +17,7 @@ package org.apache.ignite.agent.testdrive.model; -import java.io.*; +import java.io.Serializable; /** * Country definition. http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/CountryKey.java ---------------------------------------------------------------------- diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/CountryKey.java b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/CountryKey.java index e27d78c..8e10c94 100644 --- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/CountryKey.java +++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/CountryKey.java @@ -17,7 +17,7 @@ package org.apache.ignite.agent.testdrive.model; -import java.io.*; +import java.io.Serializable; /** * CountryKey definition. http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/Department.java ---------------------------------------------------------------------- diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/Department.java b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/Department.java index 054eb20..2786b0b 100644 --- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/Department.java +++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/Department.java @@ -17,7 +17,7 @@ package org.apache.ignite.agent.testdrive.model; -import java.io.*; +import java.io.Serializable; /** * Department definition. http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/DepartmentKey.java ---------------------------------------------------------------------- diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/DepartmentKey.java b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/DepartmentKey.java index a176461..0f4ce64 100644 --- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/DepartmentKey.java +++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/DepartmentKey.java @@ -17,7 +17,7 @@ package org.apache.ignite.agent.testdrive.model; -import java.io.*; +import java.io.Serializable; /** * DepartmentKey definition. http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/Employee.java ---------------------------------------------------------------------- diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/Employee.java b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/Employee.java index 1695549..eacc538 100644 --- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/Employee.java +++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/Employee.java @@ -17,7 +17,7 @@ package org.apache.ignite.agent.testdrive.model; -import java.io.*; +import java.io.Serializable; /** * Employee definition. http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/EmployeeKey.java ---------------------------------------------------------------------- diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/EmployeeKey.java b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/EmployeeKey.java index 2cce7c4..da89c20 100644 --- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/EmployeeKey.java +++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/EmployeeKey.java @@ -17,7 +17,7 @@ package org.apache.ignite.agent.testdrive.model; -import java.io.*; +import java.io.Serializable; /** * EmployeeKey definition. http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/Parking.java ---------------------------------------------------------------------- diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/Parking.java b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/Parking.java index 69048e5..3363d6f 100644 --- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/Parking.java +++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/Parking.java @@ -17,7 +17,7 @@ package org.apache.ignite.agent.testdrive.model; -import java.io.*; +import java.io.Serializable; /** * Parking definition. http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/ParkingKey.java ---------------------------------------------------------------------- diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/ParkingKey.java b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/ParkingKey.java index b076b33..1e0e595 100644 --- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/ParkingKey.java +++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/ParkingKey.java @@ -17,7 +17,7 @@ package org.apache.ignite.agent.testdrive.model; -import java.io.*; +import java.io.Serializable; /** * ParkingKey definition. http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/modules/control-center-web/src/main/js/controllers/sql-controller.js ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/controllers/sql-controller.js b/modules/control-center-web/src/main/js/controllers/sql-controller.js index 8822dc3..1abab92 100644 --- a/modules/control-center-web/src/main/js/controllers/sql-controller.js +++ b/modules/control-center-web/src/main/js/controllers/sql-controller.js @@ -25,7 +25,7 @@ controlCenterModule.controller('sqlController', ['$scope', '$controller', '$http $scope.joinTip = $common.joinTip; - $scope.pageSizes = [50, 100, 200, 400, 800, 1000]; + $scope.pageSizes = [10, 25, 50]; $scope.modes = [ {value: 'PARTITIONED', label: 'PARTITIONED'}, @@ -40,6 +40,8 @@ controlCenterModule.controller('sqlController', ['$scope', '$controller', '$http $scope.notebook_name = notebook.name; + $scope.notebook.activeIdx = []; + if (!notebook.paragraphs || notebook.paragraphs.length == 0) $scope.addParagraph(); }) @@ -67,6 +69,8 @@ controlCenterModule.controller('sqlController', ['$scope', '$controller', '$http } $scope.notebook.edit = false; + + $common.showInfo("Notebook successfully renamed."); }) .error(function (errMsg) { $common.showError(errMsg); @@ -76,6 +80,26 @@ controlCenterModule.controller('sqlController', ['$scope', '$controller', '$http $scope.notebook.edit = false }; + $scope.saveNotebook = function() { + $http.post('/notebooks/save', $scope.notebook) + .success(function () { + $common.showInfo("Notebook successfully saved."); + }) + .error(function (errMsg) { + $common.showError(errMsg); + }); + }; + + $scope.removeNotebook = function() { + $http.post('/notebooks/remove', $scope.notebook) + .success(function () { + $common.showInfo("Notebook successfully removed."); + }) + .error(function (errMsg) { + $common.showError(errMsg); + }); + }; + $scope.renameParagraph = function(paragraph, newName) { if (paragraph.name != newName) { paragraph.name = newName; @@ -103,11 +127,26 @@ controlCenterModule.controller('sqlController', ['$scope', '$controller', '$http if ($scope.caches && $scope.caches.length > 0) paragraph.cache = $scope.caches[0]; + $scope.notebook.activeIdx.push($scope.notebook.paragraphs.length); + $scope.notebook.paragraphs.push(paragraph); }; - $scope.removeParagraph = function(idx) { - $scope.notebook.splice(idx, 1); + $scope.removeParagraph = function(paragraph) { + var paragraph_idx = _.findIndex($scope.notebook.paragraphs, function (item) { + return paragraph == item; + }); + + var panel_idx = _.findIndex($scope.notebook.activeIdx, function (item) { + console.log(item); + + return paragraph_idx == item; + }); + + if (panel_idx >= 0) + $scope.notebook.activeIdx.splice(panel_idx, 1); + + $scope.notebook.paragraphs.splice(paragraph_idx, 1); }; $http.get('/models/sql.json') @@ -230,5 +269,5 @@ controlCenterModule.controller('sqlController', ['$scope', '$controller', '$http $scope.getter = function (value) { return value; - } + }; }]); http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/modules/control-center-web/src/main/js/db.js ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/db.js b/modules/control-center-web/src/main/js/db.js index edaf9dd..84529a4 100644 --- a/modules/control-center-web/src/main/js/db.js +++ b/modules/control-center-web/src/main/js/db.js @@ -348,7 +348,9 @@ var NotebookSchema = new Schema({ paragraphs: [{ name: String, query: String, - result: {type: String, enum: ['table', 'bar']} + editor: Boolean, + result: {type: String, enum: ['none', 'table', 'bar']}, + pageSize: Number }] }); http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/modules/control-center-web/src/main/js/public/stylesheets/style.scss ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/public/stylesheets/style.scss b/modules/control-center-web/src/main/js/public/stylesheets/style.scss index 748dde8..0ba33d1 100644 --- a/modules/control-center-web/src/main/js/public/stylesheets/style.scss +++ b/modules/control-center-web/src/main/js/public/stylesheets/style.scss @@ -514,21 +514,21 @@ table tr:hover { } .theme-line .panel-heading { - padding: 5px 10px 8px 10px; + padding: 5px 10px; margin: 0; cursor: pointer; - font-size: 1.2em; + font-size: $font-size-large; + line-height: 27px; - i { - font-size: $font-size-base; - } + a { color: black; } + + .btn-group { margin-left: 10px; } } .theme-line .panel-heading:hover { text-decoration: underline; } - .theme-line .panel-body { padding: 10px 20px; http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/modules/control-center-web/src/main/js/views/includes/controls.jade ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/views/includes/controls.jade b/modules/control-center-web/src/main/js/views/includes/controls.jade index 9a046f7..a4cef34 100644 --- a/modules/control-center-web/src/main/js/views/includes/controls.jade +++ b/modules/control-center-web/src/main/js/views/includes/controls.jade @@ -437,9 +437,9 @@ mixin main-table(title, rows, focusId, click, rowTemplate) mixin groups(groups, dataSource) .panel.panel-default(ng-repeat='group in #{groups}' ng-click='triggerDigest=true' ng-hide='{{group.hide}}') .panel-heading(bs-collapse-toggle ng-click='hidePopover()') {{::group.label}} - label(id='{{::group.group + "-title"}}') - i.fa.fa-question-circle(ng-if='group.tip' bs-tooltip='joinTip(group.tip)' type='button') - i.fa.fa-question-circle.blank(ng-if='!group.tip') + label(id='{{::group.group + "-title"}}') + i.tipLabel.fa.fa-question-circle(ng-if='group.tip' bs-tooltip='joinTip(group.tip)' type='button') + i.tipLabel.fa.fa-question-circle.blank(ng-if='!group.tip') .panel-collapse(role='tabpanel' bs-collapse-target id='{{::group.group}}' number='{{::group.number}}') .panel-body .col-sm-6(id='{{::group.group + "-left"}}') http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/modules/control-center-web/src/main/js/views/sql/sql.jade ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/views/sql/sql.jade b/modules/control-center-web/src/main/js/views/sql/sql.jade index b5a03c9..45b251d 100644 --- a/modules/control-center-web/src/main/js/views/sql/sql.jade +++ b/modules/control-center-web/src/main/js/views/sql/sql.jade @@ -28,7 +28,10 @@ block container .docs-header.notebook-header h1.col-sm-6(ng-hide='notebook.edit') a {{notebook.name}} - i.fa.fa-pencil.tipLabel(ng-click='notebook.edit = true;notebook.edit_name = notebook.name' bs-tooltip data-title='Rename notebook' data-trigger='hover') + .btn-group + i.btn.btn-default.fa.fa-pencil(ng-click='notebook.edit = true;notebook.edit_name = notebook.name' bs-tooltip data-title='Rename notebook' data-trigger='hover') + i.btn.btn-default.fa.fa-floppy-o(ng-click='saveNotebook()' bs-tooltip data-title='Save notebook' data-trigger='hover') + i.btn.btn-default.fa.fa-remove(ng-click='removeNotebook()' bs-tooltip data-title='Remove notebook' data-trigger='hover') h1.col-sm-6(ng-show='notebook.edit') input.sql-name-input(ng-model='notebook.edit_name' on-enter='renameNotebook(notebook.edit_name)' on-escape='notebook.edit = false;') i.tipLabel.fa.fa-floppy-o(ng-click='renameNotebook(notebook.edit_name)' bs-tooltip data-title='Save notebook name' data-trigger='hover') @@ -38,16 +41,20 @@ block container hr .panel-group(bs-collapse ng-model='notebook.activeIdx' data-allow-multiple='true' data-start-collapsed='false') .panel.panel-default(ng-repeat='paragraph in notebook.paragraphs') - .panel-heading - h3(ng-hide='paragraph.edit') - a(bs-collapse-toggle ng-click='hidePopover()') {{paragraph.name}} - i.fa.fa-pencil.tipLabel(ng-click='paragraph.edit = true; paragraph.edit_name = paragraph.name;' bs-tooltip data-title='Rename paragraph' data-trigger='hover') - .result.btn-group(ng-model='paragraph.result') + .panel-heading(bs-collapse-toggle) + div(ng-hide='paragraph.edit') + a {{paragraph.name}} + .btn-group(ng-click='$event.stopPropagation();') + i.btn.btn-default.fa.fa-pencil(ng-click='paragraph.edit = true; paragraph.edit_name = paragraph.name;' bs-tooltip data-title='Rename paragraph' data-trigger='hover') + i.btn.btn-default.fa.fa-clock-o(ng-click='paragraph.edit = true; paragraph.edit_name = paragraph.name;' bs-tooltip data-title='Refresh rate' data-trigger='hover') + i.btn.btn-default.fa.fa-remove(ng-click='removeParagraph(paragraph)' bs-tooltip data-title='Remove paragraph' data-trigger='hover') + + .btn-group(ng-model='paragraph.result' ng-click='$event.stopPropagation();' style='float: right' ) i.btn.btn-default.fa.fa-table(ng-click='paragraph.result="table"' ng-class="{'active': resultMode(paragraph, 'table')}" bs-tooltip data-title='Show table' data-trigger='hover') i.btn.btn-default.fa.fa-bar-chart(ng-click='paragraph.result="bar"' ng-class="{'active': resultMode(paragraph, 'bar')}" bs-tooltip data-title='Show bar chart' data-trigger='hover') - h3(ng-show='paragraph.edit') - input.sql-name-input(ng-model='paragraph.edit_name' on-enter='renameParagraph(paragraph, paragraph.edit_name)' on-escape='paragraph.edit = false;') - i.tipLabel.fa.fa-floppy-o(ng-click='renameParagraph(paragraph, paragraph.edit_name)' bs-tooltip data-title='Save paragraph name' data-trigger='hover') + div(ng-show='paragraph.edit') + input.sql-name-input(ng-model='paragraph.edit_name' ng-click='$event.stopPropagation();' on-enter='renameParagraph(paragraph, paragraph.edit_name)' on-escape='renameParagraph(paragraph, paragraph.name)') + i.tipLabel.fa.fa-floppy-o(ng-click='renameParagraph(paragraph, paragraph.edit_name); $event.stopPropagation();' bs-tooltip data-title='Save paragraph name' data-trigger='hover') .panel-collapse(role='tabpanel' bs-collapse-target) .panel-body(ng-show='paragraph.editor') .row @@ -67,35 +74,33 @@ block container a(ng-click='paragraph.cache = cache') {{$index + 1}}) {{::cache.name}}, {{::cache.mode}} hr(style='margin: 0') .settings-row - label Page Size: - button.btn.btn-default.base-control(ng-model='paragraph.pageSize' bs-options='item for item in pageSizes' bs-select) - .settings-row - button.btn.btn-primary(ng-click='explain(paragraph)') Explain - button.btn.btn-primary(ng-click='execute(paragraph)') Execute - button.btn.btn-primary(ng-click='scan(paragraph)') Scan - .panel-body.table-responsive(ng-show='paragraph.result === "table"') - table.table.table-striped.col-sm-12.sql-results(st-table='displayedCollection' st-safe-src='paragraph.rows') - thead - tr(style='border-size: 0') - td(colspan='{{paragraph.meta.length}}') - .col-sm-8 - lable Page #: - b {{paragraph.page}} - | Results: - b {{paragraph.rows.length + paragraph.total}} - .col-sm-4 - button.btn.btn-primary.fieldButton(ng-click='nextPage(paragraph)' ng-disabled='!paragraph.queryId') Next page - //.input-tip - // input.form-control(st-search placeholder='Filter...' type='search') - tr - th(ng-repeat='col in paragraph.meta track by $index' st-sort='getter' data-ng-bind='::col.fieldName' bs-tooltip='columnToolTip(col)') - tbody - //tr - // td(colspan='{{#{tab}.cols.length}}') - // .loading-indicator - tr(ng-repeat='row in displayedCollection track by $index') - td(ng-repeat='val in row track by $index') {{ val }} - tfoot - tr - td.text-right(colspan='{{paragraph.meta.length}}') - div(st-pagination st-items-by-page='10' st-displayed-pages='5') + button.btn.btn-primary(ng-click='explain(paragraph)' ng-disabled='!paragraph.query || !paragraph.cache') Explain + button.btn.btn-primary(ng-click='execute(paragraph)' ng-disabled='!paragraph.query || !paragraph.cache') Execute + button.btn.btn-primary(ng-click='scan(paragraph)' ng-disabled='!paragraph.cache') Scan + .pull-right + label Page Size: + button.btn.btn-default.base-control(ng-model='paragraph.pageSize' bs-options='item for item in pageSizes' bs-select) + .panel-body(ng-show='paragraph.result === "table"') + .row + .col-sm-8 + lable Page #: + b {{paragraph.page}} + | Results: + b {{paragraph.rows.length + paragraph.total}} + .col-sm-4 + button.btn.btn-primary.fieldButton(ng-click='nextPage(paragraph)' ng-disabled='!paragraph.queryId') Next page + .table-responsive + table.table.table-condensed(st-table='displayedCollection' st-safe-src='paragraph.rows') + thead + tr + th(ng-repeat='col in paragraph.meta track by $index' st-sort='getter' data-ng-bind='::col.fieldName' bs-tooltip='columnToolTip(col)') + tbody + //tr + // td(colspan='{{#{tab}.cols.length}}') + // .loading-indicator + tr(ng-repeat='row in displayedCollection track by $index') + td(ng-repeat='val in row track by $index') {{ val }} + //tfoot + // tr + // td.text-right(colspan='{{paragraph.meta.length}}') + // div(st-pagination st-items-by-page='10' st-displayed-pages='5')
