Repository: incubator-ignite
Updated Branches:
  refs/heads/ignite-141-2 9d740c693 -> 2578b7da7


# ignite-185 Add batch mode for Visor console


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

Branch: refs/heads/ignite-141-2
Commit: 656258303605068503f75289512e3aa687efe435
Parents: d030518
Author: anovikov <anovi...@gridgain.com>
Authored: Thu Feb 19 15:12:49 2015 +0700
Committer: anovikov <anovi...@gridgain.com>
Committed: Thu Feb 19 15:12:49 2015 +0700

----------------------------------------------------------------------
 .../ignite/visor/commands/VisorConsole.scala    | 48 ++++++++++++++++++--
 .../visor/commands/ack/VisorAckCommand.scala    |  6 +--
 .../visor/commands/gc/VisorGcCommand.scala      |  2 -
 .../visor/commands/kill/VisorKillCommand.scala  |  6 +--
 .../visor/commands/ping/VisorPingCommand.scala  |  4 +-
 .../commands/tasks/VisorTasksCommand.scala      |  2 +-
 .../scala/org/apache/ignite/visor/visor.scala   | 44 ++++++++++--------
 7 files changed, 78 insertions(+), 34 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/65625830/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/VisorConsole.scala
----------------------------------------------------------------------
diff --git 
a/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/VisorConsole.scala
 
b/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/VisorConsole.scala
index 62f590e..9c36904 100644
--- 
a/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/VisorConsole.scala
+++ 
b/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/VisorConsole.scala
@@ -24,7 +24,7 @@ import org.apache.ignite.startup.cmdline.AboutDialog
 
 import javax.swing.ImageIcon
 import java.awt.Image
-import java.io.File
+import java.io._
 import java.text.SimpleDateFormat
 import java.util
 
@@ -46,6 +46,7 @@ import 
org.apache.ignite.visor.commands.tasks.VisorTasksCommand
 import org.apache.ignite.visor.commands.top.VisorTopologyCommand
 import org.apache.ignite.visor.commands.vvm.VisorVvmCommand
 import org.apache.ignite.visor.visor
+import org.apache.ignite.visor.visor._
 
 import scala.tools.jline.console.ConsoleReader
 import scala.tools.jline.console.completer.Completer
@@ -100,7 +101,46 @@ object VisorConsole extends App {
 
     private val buf = new StringBuilder
 
-    private val reader = new ConsoleReader()
+    line = args.mkString(" ")
+
+    val argLst = parseArgs(args.mkString(" "))
+
+    val batchFile = argValue("b", argLst)
+    val batchCommand = argValue("e", argLst)
+
+    if (batchFile.isDefined && batchCommand.isDefined) {
+        visor.warn(
+            "Illegal options can't contains both command file and commands",
+            "Usage: ignitevisorcmd {-b=<batch commands file path>} 
{-e=command1;command2}"
+        )
+
+        visor.quit()
+    }
+
+    var inputStream: InputStream = new FileInputStream(FileDescriptor.in)
+
+    batchFile.foreach(name => {
+        val f = U.resolveIgnitePath(name)
+
+        if (f == null) {
+            visor.warn(
+                "Can't find batch commands file: " + name,
+                "Usage: ignitevisorcmd {-b=<batch command file path>} 
{-e=command1;command2}"
+            )
+
+            visor.quit()
+        }
+
+        inputStream = new FileInputStream(f)
+    })
+
+    batchCommand.foreach(commands => {
+        val input = commands.replace(";", "\n")
+
+        inputStream = new ByteArrayInputStream(input.getBytes("UTF-8"))
+    })
+
+    private val reader = new ConsoleReader(inputStream, System.out, null, null)
 
     reader.addCompleter(new VisorCommandCompleter(visor.commands))
     reader.addCompleter(new VisorFileNameCompleter())
@@ -145,7 +185,7 @@ object VisorConsole extends App {
                         case _ => adviseToHelp(line)
                     }
                 } catch {
-                    case ignore: Exception => ignore.printStackTrace()
+                    case ignore: Exception => adviseToHelp(line)
                 }
             }
         }
@@ -153,6 +193,8 @@ object VisorConsole extends App {
 
     def terminalWidth() = reader.getTerminal.getWidth
 
+    def consoleReader() = reader
+
     /**
      * Prints standard 'Invalid command' error message.
      */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/65625830/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/ack/VisorAckCommand.scala
----------------------------------------------------------------------
diff --git 
a/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/ack/VisorAckCommand.scala
 
b/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/ack/VisorAckCommand.scala
index be62eba..60cac88 100644
--- 
a/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/ack/VisorAckCommand.scala
+++ 
b/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/ack/VisorAckCommand.scala
@@ -22,9 +22,9 @@ import org.apache.ignite.internal.visor.misc.VisorAckTask
 
 import java.util.{HashSet => JavaHashSet}
 
-import org.apache.ignite.visor.{VisorTag, visor}
 import org.apache.ignite.visor.commands.VisorConsoleCommand
-import visor._
+import org.apache.ignite.visor.visor._
+import org.apache.ignite.visor.{VisorTag, visor}
 
 import scala.collection.JavaConversions._
 import scala.language.implicitConversions
@@ -157,5 +157,5 @@ object VisorAckCommand {
      *
      * @param vs Visor tagging trait.
      */
-    implicit def fromAck2Visor(vs: VisorTag) = cmd
+    implicit def fromAck2Visor(vs: VisorTag): VisorAckCommand = cmd
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/65625830/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/gc/VisorGcCommand.scala
----------------------------------------------------------------------
diff --git 
a/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/gc/VisorGcCommand.scala
 
b/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/gc/VisorGcCommand.scala
index ba5f460..5aa1f90 100644
--- 
a/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/gc/VisorGcCommand.scala
+++ 
b/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/gc/VisorGcCommand.scala
@@ -17,8 +17,6 @@
 
 package org.apache.ignite.visor.commands.gc
 
-import org.apache.ignite.internal.cluster.ClusterGroupEmptyCheckedException
-
 import org.apache.ignite._
 
 import org.apache.ignite.cluster.{ClusterGroupEmptyException, ClusterNode}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/65625830/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/kill/VisorKillCommand.scala
----------------------------------------------------------------------
diff --git 
a/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/kill/VisorKillCommand.scala
 
b/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/kill/VisorKillCommand.scala
index e066c6f..5187510 100644
--- 
a/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/kill/VisorKillCommand.scala
+++ 
b/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/kill/VisorKillCommand.scala
@@ -219,7 +219,7 @@ class VisorKillCommand {
 
         val op = if (restart) "restart" else "kill"
 
-        if (nodes.size() == ignite.nodes().size())
+        if (nodes.size == ignite.nodes().size())
             ask("Are you sure you want to " + op + " ALL nodes? (y/n) [n]: ", 
"n") match {
                 case "y" | "Y" =>  ask("You are about to " + op + " ALL nodes. 
" +
                     "Are you 100% sure? (y/n) [n]: ", "n") match {
@@ -230,7 +230,7 @@ class VisorKillCommand {
                 case "n" | "N" => break()
                 case x => nl(); warn("Invalid answer: " + x); break()
             }
-        else if (nodes.size() > 1)
+        else if (nodes.size > 1)
             ask("Are you sure you want to " + op + " several nodes? (y/n) [n]: 
", "n") match {
                 case "y" | "Y" => ()
                 case "n" | "N" => break()
@@ -352,5 +352,5 @@ object VisorKillCommand {
      *
      * @param vs Visor tagging trait.
      */
-    implicit def fromKill2Visor(vs: VisorTag) = cmd
+    implicit def fromKill2Visor(vs: VisorTag): VisorKillCommand = cmd
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/65625830/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/ping/VisorPingCommand.scala
----------------------------------------------------------------------
diff --git 
a/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/ping/VisorPingCommand.scala
 
b/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/ping/VisorPingCommand.scala
index f8b0608..829bea5 100644
--- 
a/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/ping/VisorPingCommand.scala
+++ 
b/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/ping/VisorPingCommand.scala
@@ -141,7 +141,7 @@ class VisorPingCommand {
                     else {
                         val ns = nodeById8(id8._2)
 
-                        if (ns.size() != 1)
+                        if (ns.size != 1)
                             scold("Unknown ID8: " + argName(id8))
                         else
                             pings +:= Pinger(ns.head, res)
@@ -224,5 +224,5 @@ object VisorPingCommand {
      *
      * @param vs Visor tagging trait.
      */
-    implicit def fromPing2Visor(vs: VisorTag) = cmd
+    implicit def fromPing2Visor(vs: VisorTag): VisorPingCommand = cmd
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/65625830/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/tasks/VisorTasksCommand.scala
----------------------------------------------------------------------
diff --git 
a/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/tasks/VisorTasksCommand.scala
 
b/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/tasks/VisorTasksCommand.scala
index bc137ab..ab84e7c 100644
--- 
a/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/tasks/VisorTasksCommand.scala
+++ 
b/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/tasks/VisorTasksCommand.scala
@@ -1480,5 +1480,5 @@ object VisorTasksCommand {
      *
      * @param vs Visor tagging trait.
      */
-    implicit def fromTrace2Visor(vs: VisorTag) = cmd
+    implicit def fromTrace2Visor(vs: VisorTag): VisorTasksCommand = cmd
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/65625830/modules/visor-console/src/main/scala/org/apache/ignite/visor/visor.scala
----------------------------------------------------------------------
diff --git 
a/modules/visor-console/src/main/scala/org/apache/ignite/visor/visor.scala 
b/modules/visor-console/src/main/scala/org/apache/ignite/visor/visor.scala
index 83abc22..2e13a60 100644
--- a/modules/visor-console/src/main/scala/org/apache/ignite/visor/visor.scala
+++ b/modules/visor-console/src/main/scala/org/apache/ignite/visor/visor.scala
@@ -17,23 +17,18 @@
 
 package org.apache.ignite.visor
 
-import java.io._
-import java.net._
-import java.text._
-import java.util.concurrent._
-import java.util.{HashSet => JHashSet, _}
-
 import org.apache.ignite.IgniteSystemProperties._
+import org.apache.ignite._
 import org.apache.ignite.cluster.{ClusterGroup, ClusterMetrics, ClusterNode}
 import org.apache.ignite.configuration.IgniteConfiguration
 import org.apache.ignite.events.EventType._
 import org.apache.ignite.events.{DiscoveryEvent, Event}
 import org.apache.ignite.internal.IgniteComponentType._
+import org.apache.ignite.internal.IgniteEx
 import org.apache.ignite.internal.IgniteNodeAttributes._
+import org.apache.ignite.internal.IgniteVersionUtils._
 import org.apache.ignite.internal.cluster.ClusterGroupEmptyCheckedException
 import org.apache.ignite.internal.processors.spring.IgniteSpringProcessor
-import org.apache.ignite.internal.{IgniteVersionUtils, IgniteEx}
-import IgniteVersionUtils._
 import org.apache.ignite.internal.util.lang.{GridFunc => F}
 import org.apache.ignite.internal.util.typedef._
 import org.apache.ignite.internal.util.{GridConfigurationFinder, IgniteUtils}
@@ -43,13 +38,20 @@ import 
org.apache.ignite.internal.visor.node.VisorNodeEventsCollectorTask.VisorN
 import org.apache.ignite.lang.{IgniteNotPeerDeployable, IgnitePredicate}
 import org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi
 import org.apache.ignite.thread.IgniteThreadPoolExecutor
-import org.apache.ignite.visor.commands.{VisorConsoleCommand, VisorTextTable}
-import org.apache.ignite._
+
 import org.jetbrains.annotations.Nullable
 
+import java.io._
+import java.net._
+import java.text._
+import java.util.concurrent._
+import java.util.{HashSet => JHashSet, _}
+
+import org.apache.ignite.visor.commands.VisorConsole.consoleReader
+import org.apache.ignite.visor.commands._
+
 import scala.collection.JavaConversions._
 import scala.collection.immutable
-import scala.io.StdIn
 import scala.language.{implicitConversions, reflectiveCalls}
 import scala.util.control.Breaks._
 
@@ -2034,14 +2036,12 @@ object visor extends VisorTag {
      * @param prompt User prompt.
      * @param mask Mask character (if `None`, no masking will be applied).
      */
-    private def readLineOpt(prompt: String, mask: Option[Char]): 
Option[String] =
+    private def readLineOpt(prompt: String, mask: Option[Char] = None): 
Option[String] =
         try {
-            val reader = new scala.tools.jline.console.ConsoleReader()
-
             val s = if (mask.isDefined)
-                reader.readLine(prompt, mask.get)
+                consoleReader().readLine(prompt, mask.get)
             else
-                reader.readLine(prompt)
+                consoleReader().readLine(prompt)
 
             Option(s)
         }
@@ -2061,11 +2061,15 @@ object visor extends VisorTag {
 
         (0 until ids.size).foreach(i => println((i + 1) + ": " + ids(i)))
 
-        println("\nC: Cancel")
+        nl()
+
+        println("C: Cancel")
+
+        nl()
 
-        StdIn.readLine("\nChoose node: ") match {
-            case "c" | "C" => None
-            case idx =>
+        readLineOpt("Choose node: ") match {
+            case Some("c") | Some("C") | None => None
+            case Some(idx) =>
                 try
                     Some(ids(idx.toInt - 1))
                 catch {

Reply via email to