[[Linux:Java:標準入力を受けて標準出力に出す]]
*Linux:Java:JMeterのログの日付を変換して出力するサンプル [#v1939661]
JMeterのログを標準入力から受けて、日付フォーマットに直して標準出力に出力するサンプルです。
日付の変換は以下の3種類を行っています。
-時分秒まで出力
-時分まで出力
-時まで出力
たいがい、JMeterログって、少なくとも万行単位で出力され、多いときは千万行単位で出たりします。
※今回、高負荷試験をJMeterで実施したところ、csvが1700万行出力されたりw
そういう場合に、Excelで集計することが不可能なので、この結果をSQLITEか何かに突っ込んで解析したりすると幸せになれますw
***ソースコード [#je803930]
こちらの記事のソースをベースにしてます。
-[wiki:Linux:Java:標準入力を受けて標準出力に出す]
こんな感じです。
import java.io.*;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class JmeterDateParser {
public static void main(String[] args) {
try {
// 標準入力を設定
BufferedReader bin = new BufferedReader(new InputStreamReader(
System.in));
String line = null;
JmeterDateParser parser = new JmeterDateParser();
// 標準入力からの1行入力を待つ。
while ((line = bin.readLine()) != null) {
System.out.print(parser.process(line));
}
bin.close();
} catch (Exception e) {
e.printStackTrace();
// プログラムを終了
System.exit(255);
}
}
private final DateFormat df = new SimpleDateFormat("yyyy-MM-dd' 'HH:mm:ss");
private Calendar ca = null;
private final String SEPARATOR = "\t";
private final String RET_CODE = "\n";
public JmeterDateParser() {
ca = Calendar.getInstance();
}
// JMeterの結果レポートのcsvを読み込み、日付フォーマットを直す。
public String process(String line) {
String col[] = line.split(",");
// 10カラムでないレコードは無視する。
if (col.length != 10) {
return "";
}
// 第一カラムがlongにパース出来ないレコードは無視する。
long milisec;
try {
milisec = Long.parseLong(col[0]);
} catch (Exception e) {
return "";
}
// 日付に変換し、返却する。
ca.setTimeInMillis(milisec);
StringBuffer res = new StringBuffer();
String target = df.format(ca.getTime());
// 秒まで変換した値を出力
res.append(target);
// 分まで変換した値を出力
res.append(SEPARATOR).append(target.substring(0, 16));
// 時まで変換した値を出力
res.append(SEPARATOR).append(target.substring(0, 13));
for (int i = 1; i < col.length; i++) {
res.append(SEPARATOR).append(col[i]);
}
return res.append(RET_CODE).toString();
}
}