You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ji...@apache.org on 2019/09/03 08:50:33 UTC

[incubator-iotdb] branch log_tool updated: add a command line tool

This is an automated email from the ASF dual-hosted git repository.

jiangtian pushed a commit to branch log_tool
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git


The following commit(s) were added to refs/heads/log_tool by this push:
     new 232a224  add a command line tool
232a224 is described below

commit 232a224802adb68be38e814b26f854a410da383c
Author: jt <jt...@163.com>
AuthorDate: Tue Sep 3 16:40:42 2019 +0800

    add a command line tool
---
 .../UserGuide/8-System Tools/3-Log Visualizer.md   | 21 ++++--
 .../UserGuide/8-System Tools/3-Log Visualizer.md   | 22 +++++--
 .../{log-visualizer.bat => log-visualizer-cmd.bat} |  2 +-
 .../{log-visualizer.sh => log-visualizer-cmd.sh}   |  2 +-
 .../{log-visualizer.bat => log-visualizer-gui.bat} |  0
 .../{log-visualizer.sh => log-visualizer-gui.sh}   |  0
 .../iotdb/db/tools/logvisual/LogVisualizer.java    | 75 ++++++++++++++++------
 .../db/tools/logvisual/TimeSeriesStatistics.java   |  7 +-
 .../exceptions/NoLogFileLoadedException.java       |  2 +-
 .../logvisual/exceptions/NoSuchPlanException.java  |  2 +-
 .../exceptions/UnmatchedContentException.java      |  2 +-
 .../exceptions/VisualizationException.java         | 19 ++++++
 .../logvisual/exceptions/VisualizeException.java   | 19 ------
 .../iotdb/db/tools/logvisual/gui/PlanBox.java      |  8 +--
 14 files changed, 117 insertions(+), 64 deletions(-)

diff --git a/docs/Documentation-CHN/UserGuide/8-System Tools/3-Log Visualizer.md b/docs/Documentation-CHN/UserGuide/8-System Tools/3-Log Visualizer.md
index 1e60062..65a23a9 100644
--- a/docs/Documentation-CHN/UserGuide/8-System Tools/3-Log Visualizer.md	
+++ b/docs/Documentation-CHN/UserGuide/8-System Tools/3-Log Visualizer.md	
@@ -26,8 +26,8 @@
 
 - [日志可视化工具LogVisualizer](#日志可视化工具LogVisualizer)
 - [介绍](#介绍)
-- [使用方法](#使用方法)
-  - [准备工作](#准备工作)
+- [准备工作](#准备工作)
+- [使用方法(图形界面)](#使用方法(图形界面))
   - [启动图形界面](#启动图形界面)
   - [选择日志文件](#选择日志文件)
   - [选择解析器配置文件](#选择解析器配置文件)
@@ -36,6 +36,7 @@
   - [编辑可视化计划](#编辑可视化计划)
   - [删除可视化计划](#删除可视化计划)
   - [执行可视化计划](#执行可视化计划)
+- [使用方法(命令行)](#使用方法(命令行))
   
 
 <!-- /TOC -->
@@ -60,8 +61,7 @@
 方便后续的比较和分析。同时,LogVisualizer还会对这些时间序列进行统计,找出其中的最大值、最小值、平均值、
 日志条数等信息,使得用户能有一个总体性的认识。
 
-# 使用方法
-## 准备工作
+# 准备工作
 在使用LogVisualizer之前,您需要对其进行构建。LogVisualizer被集成到server模块作为一个系统工具,因此您
 可以通过构建server模块来同时构建LogVisualizer。您可以使用以下命令:
 > mvn clean package -pl server -DskipTests
@@ -73,9 +73,10 @@
 了解。您只有在熟悉正则表达式以后才能新建可视化计划或者对已有的计划进行修改。如果您对正则表达式一无所知,
 我们也提供了一些预设的可视化计划供您使用,但这些可视化计划仅限于分析IoTDB。
 
+# 使用方法(图形界面)
 ## 启动图形界面
-您可以通过脚本`log-visualizer.sh` (在Windows下为`log-visualizer.bat`)来启动LogVisualizer. 这将会启动
-一个如下图所示的图形界面:
+您可以通过脚本`log-visualizer-gui.sh` (在Windows下为`log-visualizer-gui.bat`)来启动LogVisualizer. 
+这将会启动一个如下图所示的图形界面:
 
 <img style="width:100%; max-width:800px; max-height:600px; margin-left:auto; margin-right:auto; display:block;" src="https://github.com/jt2594838/PicHub/blob/master/log-visualizer/main_panel.png?raw=true">
 
@@ -135,5 +136,11 @@
 
 <img style="width:100%; max-width:800px; max-height:600px; margin-left:auto; margin-right:auto; display:block;" src="https://github.com/jt2594838/PicHub/blob/master/log-visualizer/statistics.png?raw=true">
  
- 
+# 使用方法(命令行)
+我们也提供了LogVisualizer的命令行版本,您可以通过`log-visualizer-cmd.sh` (或 `log-visualizer-cmd.bat`)
+来使用。使用时必须输入四个参数,它们是:`日志文件的路径`,`解析器配置文件的路径`,`可视化计划的路径`,
+`结果输出路径`。运行该脚本,LogVisualizer将根据参数读取日志和可视化计划,执行每一个可视化计划,并将
+每一个计划的结果存储到输出路径的一个子文件夹下。
+例如: 
+> ./log-visualizer-cmd.sh all.log default.log.pattern planB.plan results
 
diff --git a/docs/Documentation/UserGuide/8-System Tools/3-Log Visualizer.md b/docs/Documentation/UserGuide/8-System Tools/3-Log Visualizer.md
index 981f27c..b4d25aa 100644
--- a/docs/Documentation/UserGuide/8-System Tools/3-Log Visualizer.md	
+++ b/docs/Documentation/UserGuide/8-System Tools/3-Log Visualizer.md	
@@ -27,8 +27,8 @@
 
 - [LogVisualizer](#LogVisualizer)
 - [Introduction](#introduction)
-- [Usage](#Usage)
-  - [Preparation](#preparation)
+- [Preparation](#preparation)
+- [Usage(GUI)](#Usage(GUI))
   - [Run the gui](#Run the gui)
   - [Choose a log file](#Choose a log file)
   - [Choose a parser property file](#Choose a parser property file)
@@ -37,6 +37,7 @@
   - [Edit plans](#Edit plans)
   - [Delete plans](#Delete plans)
   - [Execute plans](#Execute plans)
+- [Usage(CommandLine)](#Usage(CommandLine))
   
 
 <!-- /TOC -->
@@ -65,8 +66,7 @@ variants in a log file, generate timeseries based on these observations and draw
 them in a more human-friendly way. LogVisualizer also collects the statistics of the logs to 
 present an overall view of what was going on.
 
-# Usage
-## Preparation
+# Preparation
 Before using LogVisualizer, you should have it built. Since LogVisualizer is integrated in the 
 server module as a tool, you can build the server together with LogVisualizer using:
 > mvn clean package -pl server -DskipTests
@@ -79,9 +79,10 @@ expressions, especially Java style ones. Knowing about regular expressions enabl
 visualization plans or modify the existing ones. However, if you are totally new to regular expressions,
 you can still use the preset plans which are only applicable to IoTDB.
 
+# Usage(GUI)
 ## Run the gui
-You can run LogVisualizer using `log-visualizer.sh` (or `log-visualizer.bat` in windows). This 
-will bring you a gui like:
+You can run LogVisualizer using `log-visualizer-gui.sh` (or `log-visualizer-gui.bat` in windows). 
+This will bring you a gui like:
 
 <img style="width:100%; max-width:800px; max-height:600px; margin-left:auto; margin-right:auto; display:block;" src="https://github.com/jt2594838/PicHub/blob/master/log-visualizer/main_panel.png?raw=true">
 
@@ -148,5 +149,12 @@ can click the button on the up-right to close the tab.
 
 <img style="width:100%; max-width:800px; max-height:600px; margin-left:auto; margin-right:auto; display:block;" src="https://github.com/jt2594838/PicHub/blob/master/log-visualizer/statistics.png?raw=true">
  
- 
+# Usage(CommandLine)
+ We also provide a command line tool of LogVisualizer, which is `log-visualizer-cmd.sh` 
+ (or `log-visualizer-cmd.bat`). This tool takes exactly 4 parameters, which are: `the path of the log file` 
+ `the path of the parser property file` `the path of the visualization plan(s)` `the output directory`.
+ Running this tool will load the given logs, run all the plans and save the result of each plan into
+ a sub-directory of the output path.
+ E.g.: 
+ > ./log-visualizer-cmd.sh all.log default.log.pattern planB.plan results
 
diff --git a/server/src/assembly/resources/tools/logVisualize/log-visualizer.bat b/server/src/assembly/resources/tools/logVisualize/log-visualizer-cmd.bat
similarity index 97%
copy from server/src/assembly/resources/tools/logVisualize/log-visualizer.bat
copy to server/src/assembly/resources/tools/logVisualize/log-visualizer-cmd.bat
index 1f29a1d..da67366 100644
--- a/server/src/assembly/resources/tools/logVisualize/log-visualizer.bat
+++ b/server/src/assembly/resources/tools/logVisualize/log-visualizer-cmd.bat
@@ -27,7 +27,7 @@ popd
 
 set IOTDB_CONF=%IOTDB_HOME%\conf
 
-if NOT DEFINED MAIN_CLASS set MAIN_CLASS=org.apache.iotdb.db.tools.logvisual.gui.LogVisualizationGui
+if NOT DEFINED MAIN_CLASS set MAIN_CLASS=org.apache.iotdb.db.tools.logvisual.LogVisualizer
 if NOT DEFINED JAVA_HOME goto :err
 
 @REM -----------------------------------------------------------------------------
diff --git a/server/src/assembly/resources/tools/logVisualize/log-visualizer.sh b/server/src/assembly/resources/tools/logVisualize/log-visualizer-cmd.sh
similarity index 90%
copy from server/src/assembly/resources/tools/logVisualize/log-visualizer.sh
copy to server/src/assembly/resources/tools/logVisualize/log-visualizer-cmd.sh
index 0eaef37..dcb0232 100644
--- a/server/src/assembly/resources/tools/logVisualize/log-visualizer.sh
+++ b/server/src/assembly/resources/tools/logVisualize/log-visualizer-cmd.sh
@@ -29,7 +29,7 @@ for f in ${IOTDB_HOME}/lib/*.jar; do
   CLASSPATH=${CLASSPATH}":"$f
 done
 
-MAIN_CLASS=org.apache.iotdb.db.tools.logvisual.gui.LogVisualizationGui
+MAIN_CLASS=org.apache.iotdb.db.tools.logvisual.LogVisualizer
 
 if [ -n "$JAVA_HOME" ]; then
     for java in "$JAVA_HOME"/bin/amd64/java "$JAVA_HOME"/bin/java; do
diff --git a/server/src/assembly/resources/tools/logVisualize/log-visualizer.bat b/server/src/assembly/resources/tools/logVisualize/log-visualizer-gui.bat
similarity index 100%
rename from server/src/assembly/resources/tools/logVisualize/log-visualizer.bat
rename to server/src/assembly/resources/tools/logVisualize/log-visualizer-gui.bat
diff --git a/server/src/assembly/resources/tools/logVisualize/log-visualizer.sh b/server/src/assembly/resources/tools/logVisualize/log-visualizer-gui.sh
similarity index 100%
rename from server/src/assembly/resources/tools/logVisualize/log-visualizer.sh
rename to server/src/assembly/resources/tools/logVisualize/log-visualizer-gui.sh
diff --git a/server/src/main/java/org/apache/iotdb/db/tools/logvisual/LogVisualizer.java b/server/src/main/java/org/apache/iotdb/db/tools/logvisual/LogVisualizer.java
index 04117f1..6a1c7eb 100644
--- a/server/src/main/java/org/apache/iotdb/db/tools/logvisual/LogVisualizer.java
+++ b/server/src/main/java/org/apache/iotdb/db/tools/logvisual/LogVisualizer.java
@@ -18,7 +18,7 @@ import java.util.Map.Entry;
 import java.util.Properties;
 import org.apache.iotdb.db.tools.logvisual.exceptions.NoLogFileLoadedException;
 import org.apache.iotdb.db.tools.logvisual.exceptions.UnmatchedContentException;
-import org.apache.iotdb.db.tools.logvisual.exceptions.VisualizeException;
+import org.apache.iotdb.db.tools.logvisual.exceptions.VisualizationException;
 import org.jfree.chart.ChartFactory;
 import org.jfree.chart.ChartUtils;
 import org.jfree.chart.JFreeChart;
@@ -79,14 +79,51 @@ public class LogVisualizer {
    */
   private File logFile;
 
-  public static void main(String[] args) throws IOException {
+  // params: <LogFilePath> <ParserPropertyFilePath> <PlanFilePath> <OutputDirectory>
+  public static void main(String[] args) throws IOException, VisualizationException {
+    if (args.length != 4) {
+      System.out.println("Wrong number of parameters: "
+          + " params: <LogFilePath> <ParserPropertyFilePath> <PlanFilePath> <OutputDirectory>");
+      return;
+    }
+    File logFile = new File(args[0]);
+    if (!logFile.exists() || !logFile.isFile()) {
+      System.out.println("Log file does not exist");
+      return;
+    }
+    File parserPropertyFile = new File(args[1]);
+    if (!parserPropertyFile.exists() || !parserPropertyFile.isFile()) {
+      System.out.println("Parser property file does not exist");
+      return;
+    }
+    File planFile = new File(args[2]);
+    if (!planFile.exists()) {
+      System.out.println("Plan file does not exist");
+      return;
+    }
+
+    File destDir = new File(args[3]);
+    if (destDir.exists() && !destDir.isDirectory()) {
+      System.out.println("The output path is not a directory");
+      return;
+    }
+    destDir.mkdirs();
+
     LogVisualizer visualizer = new LogVisualizer();
-    visualizer.setParserPropertyFile(new File("E:\\codestore\\incubator-iotdb\\server\\src\\assembly"
-        + "\\resources"
-        + "\\tools\\logAnalyze\\default.log.pattern"));
-    visualizer.setLogFile( new File("C:\\Users\\admin\\Desktop\\logs\\log-all-2019-08-21.0.log"));
+    visualizer.setLogFile(logFile);
+    visualizer.setParserPropertyFile(parserPropertyFile);
     visualizer.loadLogParser();
-    visualizer.loadPlan("E:\\codestore\\incubator-iotdb\\server\\src\\assembly\\resources\\tools\\logAnalyze\\plans\\flushTimeConsumption.plan.example");
+
+    visualizer.loadPlan(planFile);
+    Collection<VisualizationPlan> plans = visualizer.listPlans();
+
+    for (VisualizationPlan plan : plans) {
+      visualizer.executePlan(plan);
+      visualizer.saveResults(destDir.getPath() + File.separator + plan.getName());
+      System.out.println("Executed and saved results of plan "+ plan.getName());
+    }
+
+    System.out.println("Visualization completed");
   }
 
   private void clearLogGroups() {
@@ -146,7 +183,7 @@ public class LogVisualizer {
     return plans.values();
   }
 
-  public void executePlan(VisualizationPlan plan) throws VisualizeException {
+  public void executePlan(VisualizationPlan plan) throws VisualizationException {
     if (logParser == null) {
       throw new NoLogFileLoadedException();
     }
@@ -154,7 +191,7 @@ public class LogVisualizer {
       // read the logs fom the beginning
       logParser.reset();
     } catch (IOException e) {
-      throw new VisualizeException(e);
+      throw new VisualizationException(e);
     }
     collectLogs(plan);
     groupLogs();
@@ -168,9 +205,9 @@ public class LogVisualizer {
   /**
    * Read all logs from the logParser and filter unwanted or malformed ones.
    * @param plan
-   * @throws VisualizeException
+   * @throws VisualizationException
    */
-  private void collectLogs(VisualizationPlan plan) throws VisualizeException {
+  private void collectLogs(VisualizationPlan plan) throws VisualizationException {
     LogFilter logFilter = plan.getLogFilter();
     try {
       LogEntry logEntry;
@@ -193,7 +230,7 @@ public class LogVisualizer {
         }
       }
     } catch (IOException e) {
-      throw new VisualizeException(e);
+      throw new VisualizationException(e);
     }
     logger.info("Collected {} logs from {}", logCache.size(), logFile.getPath());
   }
@@ -307,17 +344,17 @@ public class LogVisualizer {
     return ret;
   }
 
-  public void saveResults(String destDirPath, int width, int height) throws VisualizeException {
+  public void saveResults(String destDirPath) throws VisualizationException {
     if (charts == null || statisticsMap == null) {
-      throw new VisualizeException("No results to be saved");
+      throw new VisualizationException("No results to be saved");
     }
 
     File destDir = new File(destDirPath);
     if (destDir.exists() && !destDir.isDirectory()) {
-      throw new VisualizeException(String.format("%s exists and is not a directory", destDirPath));
+      throw new VisualizationException(String.format("%s exists and is not a directory", destDirPath));
     }
     if (!destDir.exists() && !destDir.mkdirs()) {
-      throw new VisualizeException(String.format("Cannot create directory %s", destDirPath));
+      throw new VisualizationException(String.format("Cannot create directory %s", destDirPath));
     }
     destDir.mkdirs();
 
@@ -327,9 +364,9 @@ public class LogVisualizer {
       JFreeChart chart = chartEntry.getValue();
       try (FileOutputStream fileOutputStream = new FileOutputStream(chartFile);
           BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream)) {
-        ChartUtils.writeChartAsPNG(bufferedOutputStream, chart, width, height);
+        ChartUtils.writeChartAsPNG(bufferedOutputStream, chart, 800, 600);
       } catch (IOException e) {
-        throw new VisualizeException(String.format("Cannot save chart of %s", chartEntry.getKey()), e);
+        throw new VisualizationException(String.format("Cannot save chart of %s", chartEntry.getKey()), e);
       }
     }
 
@@ -344,7 +381,7 @@ public class LogVisualizer {
         }
       }
     } catch (IOException e) {
-      throw new VisualizeException(String.format("Cannot save statistics to %s", destDirPath), e);
+      throw new VisualizationException(String.format("Cannot save statistics to %s", destDirPath), e);
     }
   }
 
diff --git a/server/src/main/java/org/apache/iotdb/db/tools/logvisual/TimeSeriesStatistics.java b/server/src/main/java/org/apache/iotdb/db/tools/logvisual/TimeSeriesStatistics.java
index 6985aee..2e01963 100644
--- a/server/src/main/java/org/apache/iotdb/db/tools/logvisual/TimeSeriesStatistics.java
+++ b/server/src/main/java/org/apache/iotdb/db/tools/logvisual/TimeSeriesStatistics.java
@@ -105,9 +105,10 @@ public class TimeSeriesStatistics {
   }
   
   public void serialize(Writer writer) throws IOException {
-    StringBuilder builder = new StringBuilder(statisticArray[0].toString());
-    for (int i = 1; i < statisticArray.length; i++) {
-      builder.append(",").append(statisticArray[i]);
+    Object[] statArray = toArray();
+    StringBuilder builder = new StringBuilder(statArray[0].toString());
+    for (int i = 1; i < statArray.length; i++) {
+      builder.append(",").append(statArray[i]);
     }
     builder.append("\n");
     writer.write(builder.toString());
diff --git a/server/src/main/java/org/apache/iotdb/db/tools/logvisual/exceptions/NoLogFileLoadedException.java b/server/src/main/java/org/apache/iotdb/db/tools/logvisual/exceptions/NoLogFileLoadedException.java
index d0d94e5..03b14db 100644
--- a/server/src/main/java/org/apache/iotdb/db/tools/logvisual/exceptions/NoLogFileLoadedException.java
+++ b/server/src/main/java/org/apache/iotdb/db/tools/logvisual/exceptions/NoLogFileLoadedException.java
@@ -1,6 +1,6 @@
 package org.apache.iotdb.db.tools.logvisual.exceptions;
 
-public class NoLogFileLoadedException extends VisualizeException {
+public class NoLogFileLoadedException extends VisualizationException {
 
   public NoLogFileLoadedException() {
     super("No log file is loaded, please load a log file first");
diff --git a/server/src/main/java/org/apache/iotdb/db/tools/logvisual/exceptions/NoSuchPlanException.java b/server/src/main/java/org/apache/iotdb/db/tools/logvisual/exceptions/NoSuchPlanException.java
index d60f3db..6341bd0 100644
--- a/server/src/main/java/org/apache/iotdb/db/tools/logvisual/exceptions/NoSuchPlanException.java
+++ b/server/src/main/java/org/apache/iotdb/db/tools/logvisual/exceptions/NoSuchPlanException.java
@@ -1,6 +1,6 @@
 package org.apache.iotdb.db.tools.logvisual.exceptions;
 
-public class NoSuchPlanException extends VisualizeException {
+public class NoSuchPlanException extends VisualizationException {
 
   public NoSuchPlanException(String planName) {
     super(String.format("No such plan %s", planName));
diff --git a/server/src/main/java/org/apache/iotdb/db/tools/logvisual/exceptions/UnmatchedContentException.java b/server/src/main/java/org/apache/iotdb/db/tools/logvisual/exceptions/UnmatchedContentException.java
index 1e0245b..1d5689e 100644
--- a/server/src/main/java/org/apache/iotdb/db/tools/logvisual/exceptions/UnmatchedContentException.java
+++ b/server/src/main/java/org/apache/iotdb/db/tools/logvisual/exceptions/UnmatchedContentException.java
@@ -1,6 +1,6 @@
 package org.apache.iotdb.db.tools.logvisual.exceptions;
 
-public class UnmatchedContentException extends VisualizeException {
+public class UnmatchedContentException extends VisualizationException {
 
   public UnmatchedContentException(String content, String pattern) {
     super(String.format("%s cannot match %s", content, pattern));
diff --git a/server/src/main/java/org/apache/iotdb/db/tools/logvisual/exceptions/VisualizationException.java b/server/src/main/java/org/apache/iotdb/db/tools/logvisual/exceptions/VisualizationException.java
new file mode 100644
index 0000000..092696c
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/tools/logvisual/exceptions/VisualizationException.java
@@ -0,0 +1,19 @@
+package org.apache.iotdb.db.tools.logvisual.exceptions;
+
+public class VisualizationException extends Exception {
+
+  public VisualizationException() {
+  }
+
+  public VisualizationException(String message) {
+    super(message);
+  }
+
+  public VisualizationException(String message, Throwable cause) {
+    super(message, cause);
+  }
+
+  public VisualizationException(Throwable cause) {
+    super(cause);
+  }
+}
\ No newline at end of file
diff --git a/server/src/main/java/org/apache/iotdb/db/tools/logvisual/exceptions/VisualizeException.java b/server/src/main/java/org/apache/iotdb/db/tools/logvisual/exceptions/VisualizeException.java
deleted file mode 100644
index 19ed8a5..0000000
--- a/server/src/main/java/org/apache/iotdb/db/tools/logvisual/exceptions/VisualizeException.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.apache.iotdb.db.tools.logvisual.exceptions;
-
-public class VisualizeException extends Exception {
-
-  public VisualizeException() {
-  }
-
-  public VisualizeException(String message) {
-    super(message);
-  }
-
-  public VisualizeException(String message, Throwable cause) {
-    super(message, cause);
-  }
-
-  public VisualizeException(Throwable cause) {
-    super(cause);
-  }
-}
\ No newline at end of file
diff --git a/server/src/main/java/org/apache/iotdb/db/tools/logvisual/gui/PlanBox.java b/server/src/main/java/org/apache/iotdb/db/tools/logvisual/gui/PlanBox.java
index d252754..6a29452 100644
--- a/server/src/main/java/org/apache/iotdb/db/tools/logvisual/gui/PlanBox.java
+++ b/server/src/main/java/org/apache/iotdb/db/tools/logvisual/gui/PlanBox.java
@@ -42,7 +42,7 @@ import org.apache.iotdb.db.tools.logvisual.LogVisualizer;
 import org.apache.iotdb.db.tools.logvisual.TimeSeriesStatistics;
 import org.apache.iotdb.db.tools.logvisual.VisualizationPlan;
 import org.apache.iotdb.db.tools.logvisual.conf.PropertyKeys;
-import org.apache.iotdb.db.tools.logvisual.exceptions.VisualizeException;
+import org.apache.iotdb.db.tools.logvisual.exceptions.VisualizationException;
 import org.apache.iotdb.db.tools.logvisual.gui.LogVisualizationGui.PropertyChangeCallback;
 import org.jfree.chart.JFreeChart;
 
@@ -195,7 +195,7 @@ class PlanBox extends Box{
     }
     try {
       visualizer.executePlan(plan);
-    } catch (VisualizeException e1) {
+    } catch (VisualizationException e1) {
       JOptionPane.showMessageDialog(this, "Cannot execute plan: " + e1.getMessage());
       return;
     }
@@ -268,9 +268,9 @@ class PlanBox extends Box{
     if (status == JFileChooser.APPROVE_OPTION) {
       File distDir = fileChooser.getSelectedFile();
       try {
-        visualizer.saveResults(distDir.getPath(), 800, 600);
+        visualizer.saveResults(distDir.getPath());
         JOptionPane.showMessageDialog(this, "Export successfully");
-      } catch (VisualizeException e1) {
+      } catch (VisualizationException e1) {
         JOptionPane.showMessageDialog(this,"Cannot export results:" + e1.getMessage());
       }
     }