refactor code, remove direct 'System.out.println' call

This commit is contained in:
shrek.wang
2012-08-31 09:51:45 +08:00
parent 41b5766199
commit aff235f513
4 changed files with 75 additions and 54 deletions
@@ -15,6 +15,7 @@
*/
package com.alibaba.druid.support.console;
import java.io.PrintStream;
import java.util.ArrayList;
import java.io.File;
import java.io.IOException;
@@ -51,8 +52,7 @@ public class DruidStat {
try {
opt = Option.parseOptions(args);
} catch (OptionParseException e) {
System.out.println(e.getMessage());
Option.printHelp();
Option.printHelp(e.getMessage());
return;
}
@@ -62,6 +62,7 @@ public class DruidStat {
@SuppressWarnings("all")
public static void printDruidStat(Option option) throws Exception {
PrintStream out = option.getPrintStream();
String address = loadManagementAgentAndGetAddress(option.getPid());
JMXServiceURL jmxUrl = new JMXServiceURL(address);
JMXConnector jmxc = JMXConnectorFactory.connect(jmxUrl);
@@ -75,7 +76,7 @@ public class DruidStat {
if (option.printSqlData()) {
List<Map<String, Object>> content = (List<Map<String, Object>>) invokeService(jmxConn, Option.SQL);
if (content == null ) {
System.out.println("无SqlStat统计数据,请检查是否已执行了SQL");
out.println("无SqlStat统计数据,请检查是否已执行了SQL");
} else {
TabledDataPrinter.printSqlData(content, option);
}
@@ -84,7 +85,7 @@ public class DruidStat {
if (option.printActiveConn()) {
List<List<String>> content = (List<List<String>>) invokeService(jmxConn, Option.ACTIVE_CONN);
if (content == null || content.size() == 0 ) {
System.out.println("目前无活动中的数据库连接");
out.println("目前无活动中的数据库连接");
} else {
TabledDataPrinter.printActiveConnStack(content, option);
}
@@ -15,6 +15,8 @@
*/
package com.alibaba.druid.support.console;
import java.io.PrintStream;
public class Option {
public static final int DATA_SOURCE = 1 ;
@@ -27,6 +29,8 @@ public class Option {
private int interval = -1;
private boolean detailPrint;
private PrintStream printStream = System.out;
public void addPrintDataType(int newValue) {
this.printDataType= this.printDataType | newValue;
}
@@ -140,41 +144,53 @@ public class Option {
return option;
}
public static void printHelp(String errorMsg) {
printHelp(System.out, errorMsg);
}
public static void printHelp() {
System.out.println("Usage: druidStat -help | -sql -ds -act [-detail] [-id id] <pid> [refresh-interval]");
System.out.println();
System.out.println("参数: ");
System.out.println(" -help 打印此帮助信息");
System.out.println(" -sql 打印SQL统计数据");
System.out.println(" -ds 打印DataSource统计数据");
System.out.println(" -act 打印活动连接的堆栈信息");
System.out.println(" -detail 打印统计数据的全部字段信息");
System.out.println(" -id id 要打印的数据的具体id值" );
System.out.println(" pid 使用druid连接池的jvm进程id");
System.out.println(" refresh-interval 自动刷新时间间隔, 以秒为单位" );
printHelp(System.out, null);
}
System.out.println();
System.out.println("说明: ");
System.out.println(" -sql,-ds,-act参数中要至少指定一种数据进行打印, 可以");
System.out.println(" 组合使用, 比如 -sql -ds 一起的话就打印两种统计数据");
System.out.println(" -id id可以跟 -sql 或-ds组合, 比如 -sql -id 5 或 -ds -id 1086752");
System.out.println(" pid必需指定, refresh-interval可选, 如不指定,则打印数据后退出");
System.out.println(" pid和refresh-interval参数必需放在命令行的最后, 否则解析会出错");
public static void printHelp(PrintStream out, String errorMsg) {
if (errorMsg != null ) {
out.println(errorMsg);
out.println();
}
out.println("Usage: druidStat -help | -sql -ds -act [-detail] [-id id] <pid> [refresh-interval]");
out.println();
out.println("参数: ");
out.println(" -help 打印此帮助信息");
out.println(" -sql 打印SQL统计数据");
out.println(" -ds 打印DataSource统计数据");
out.println(" -act 打印活动连接的堆栈信息");
out.println(" -detail 打印统计数据的全部字段信息");
out.println(" -id id 要打印的数据的具体id值" );
out.println(" pid 使用druid连接池的jvm进程id");
out.println(" refresh-interval 自动刷新时间间隔, 以秒为单位" );
System.out.println();
System.out.println("例子: ");
System.out.println(" 打印3983进程的sql 统计数据.");
System.out.println(" >druidStat -sql 3983");
System.out.println(" 打印3983进程的ds统计数据.");
System.out.println(" >druidStat -ds 3983");
System.out.println(" 打印3983进程的sql的id为10的详细统计数据.");
System.out.println(" >druidStat -sql -id 10 -detail 3983");
System.out.println(" 打印3983进程的当前活动连接的堆栈信息");
System.out.println(" >druidStat -act 3983");
System.out.println(" 打印3983进程的ds,sql,和act信息");
System.out.println(" >druidStat -ds -sql -act 3983");
System.out.println(" 每隔5秒自动打印ds统计数据");
System.out.println(" >druidStat -ds 3983 5");
out.println();
out.println("说明: ");
out.println(" -sql,-ds,-act参数中要至少指定一种数据进行打印, 可以");
out.println(" 组合使用, 比如 -sql -ds 一起的话就打印两种统计数据");
out.println(" -id id可以跟 -sql 或-ds组合, 比如 -sql -id 5 或 -ds -id 1086752");
out.println(" pid必需指定, refresh-interval可选, 如不指定,则打印数据后退出");
out.println(" pid和refresh-interval参数必需放在命令行的最后, 否则解析会出错");
out.println();
out.println("例子: ");
out.println(" 打印3983进程的sql 统计数据.");
out.println(" >druidStat -sql 3983");
out.println(" 打印3983进程的ds统计数据.");
out.println(" >druidStat -ds 3983");
out.println(" 打印3983进程的sql的id为10的详细统计数据.");
out.println(" >druidStat -sql -id 10 -detail 3983");
out.println(" 打印3983进程的当前活动连接的堆栈信息");
out.println(" >druidStat -act 3983");
out.println(" 打印3983进程的ds,sql,和act信息");
out.println(" >druidStat -ds -sql -act 3983");
out.println(" 每隔5秒自动打印ds统计数据");
out.println(" >druidStat -ds 3983 5");
}
public int getId() {
@@ -199,4 +215,12 @@ public class Option {
return this.interval;
}
public void setPrintStream(PrintStream printStream) {
this.printStream=printStream;
}
public PrintStream getPrintStream() {
return this.printStream;
}
}
@@ -83,13 +83,4 @@ public class TableFormatter {
return sb.toString();
}
public static void main(String[] args) {
List<String[]> v = new ArrayList<String[]>();
v.add(new String[]{"name","age","addr"});
v.add(new String[]{"shrek", "200", "hangzhou zhejiang "});
v.add(new String[]{"what as", "11", "asdfa"});
String formattedStr = format(v);
System.out.println(formattedStr);
}
}
@@ -15,6 +15,7 @@
*/
package com.alibaba.druid.support.console;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -59,11 +60,12 @@ public class TabledDataPrinter {
"TransactionHistogram", "ConnectionHoldTimeHistogram", "RemoveAbandoned", "ClobOpenCount" };
public static void printActiveConnStack(List<List<String>> content, Option opt) {
PrintStream out = opt.getPrintStream();
for (List<String> stack : content) {
for (String line : stack) {
System.out.println(line);
out.println(line);
}
System.out.println("===============================\n");
out.println("===============================\n");
}
}
@@ -83,6 +85,7 @@ public class TabledDataPrinter {
}
public static void _printDataSourceData(List<Map<String, Object>> content, Option opt) {
PrintStream out = opt.getPrintStream();
if (opt.getId() != -1) {
List<Map<String, Object>> matchedContent = new ArrayList<Map<String, Object>>();
for (Map<String, Object> dsStat : content) {
@@ -95,9 +98,9 @@ public class TabledDataPrinter {
content = matchedContent;
}
if (opt.isDetailPrint()) {
System.out.println(getVerticalFormattedOutput(content, dsColField));
out.println(getVerticalFormattedOutput(content, dsColField));
} else {
System.out.println(getFormattedOutput(content, dsRowTitle, dsRowField));
out.println(getFormattedOutput(content, dsRowTitle, dsRowField));
}
}
@@ -117,6 +120,8 @@ public class TabledDataPrinter {
}
public static void _printSqlData(List<Map<String, Object>> content, Option opt) {
PrintStream out = opt.getPrintStream();
if (opt.getId() != -1) {
List<Map<String, Object>> matchedContent = new ArrayList<Map<String, Object>>();
for (Map<String, Object> sqlStat : content) {
@@ -126,9 +131,9 @@ public class TabledDataPrinter {
if (opt.isDetailPrint()) {
String dbType = (String) sqlStat.get("DbType");
String sql = (String) sqlStat.get("SQL");
System.out.println("Formatted SQL:");
System.out.println(SQLUtils.format(sql, dbType));
System.out.println();
out.println("Formatted SQL:");
out.println(SQLUtils.format(sql, dbType));
out.println();
}
break;
}
@@ -136,9 +141,9 @@ public class TabledDataPrinter {
content = matchedContent;
}
if (opt.isDetailPrint()) {
System.out.println(getVerticalFormattedOutput(content, sqlColField));
out.println(getVerticalFormattedOutput(content, sqlColField));
} else {
System.out.println(getFormattedOutput(content, sqlRowTitle, sqlRowField));
out.println(getFormattedOutput(content, sqlRowTitle, sqlRowField));
}
}