HiiHahWIKI - making some notes for... -
Linux:Java:JMeterのログの日付を変換して出力するサンプル
をテンプレートにして作成
開始行:
[[Linux:Java:標準入力を受けて標準出力に出す]]
*Linux:Java:JMeterのログの日付を変換して出力するサンプ...
JMeterのログを標準入力から受けて、日付フォーマットに直し...
日付の変換は以下の3種類を行っています。
-時分秒まで出力
-時分まで出力
-時まで出力
たいがい、JMeterログって、少なくとも万行単位で出力され、...
※今回、高負荷試験をJMeterで実施したところ、csvが1700万行...
そういう場合に、Excelで集計することが不可能なので、この結...
***ソースコード [#je803930]
こちらの記事のソースをベースにしてます。
-[[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 InputStre...
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("yyy...
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();
}
}
元々のデータはカンマ「,」区切りですが、出力は「タブ」区切...
なぜこうするかって?それは好みの問題ですw
***実行例 [#f119e4e1]
まず、インプットとなるJMeterの実行結果、「XXX.csv」はこん...
1385389721715,120,サンプル_1,200,OK,サンプル_スレッド10 ...
1385389721720,118,サンプル_2,200,OK,サンプル_スレッド10 ...
1385389721838,122,サンプル_1,200,OK,サンプル_スレッド10 ...
1385389721841,124,サンプル_2,200,OK,サンプル_スレッド10 ...
1385389721963,108,サンプル_1,200,OK,サンプル_スレッド10 ...
1385389721968,113,サンプル_2,200,OK,サンプル_スレッド10 ...
こんな感じ実行します。
cat XXXX.csv | java JmeterDateParser
2013-11-25 23:28:41 2013-11-25 23:28 2013-11-25 23 120 ...
2013-11-25 23:28:41 2013-11-25 23:28 2013-11-25 23 118 ...
2013-11-25 23:28:41 2013-11-25 23:28 2013-11-25 23 122 ...
2013-11-25 23:28:41 2013-11-25 23:28 2013-11-25 23 124 ...
2013-11-25 23:28:41 2013-11-25 23:28 2013-11-25 23 108 ...
2013-11-25 23:28:41 2013-11-25 23:28 2013-11-25 23 113 ...
これをSQLITEに突っ込んで、1カラム目、2カラム目、3カラム目...
終了行:
[[Linux:Java:標準入力を受けて標準出力に出す]]
*Linux:Java:JMeterのログの日付を変換して出力するサンプ...
JMeterのログを標準入力から受けて、日付フォーマットに直し...
日付の変換は以下の3種類を行っています。
-時分秒まで出力
-時分まで出力
-時まで出力
たいがい、JMeterログって、少なくとも万行単位で出力され、...
※今回、高負荷試験をJMeterで実施したところ、csvが1700万行...
そういう場合に、Excelで集計することが不可能なので、この結...
***ソースコード [#je803930]
こちらの記事のソースをベースにしてます。
-[[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 InputStre...
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("yyy...
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();
}
}
元々のデータはカンマ「,」区切りですが、出力は「タブ」区切...
なぜこうするかって?それは好みの問題ですw
***実行例 [#f119e4e1]
まず、インプットとなるJMeterの実行結果、「XXX.csv」はこん...
1385389721715,120,サンプル_1,200,OK,サンプル_スレッド10 ...
1385389721720,118,サンプル_2,200,OK,サンプル_スレッド10 ...
1385389721838,122,サンプル_1,200,OK,サンプル_スレッド10 ...
1385389721841,124,サンプル_2,200,OK,サンプル_スレッド10 ...
1385389721963,108,サンプル_1,200,OK,サンプル_スレッド10 ...
1385389721968,113,サンプル_2,200,OK,サンプル_スレッド10 ...
こんな感じ実行します。
cat XXXX.csv | java JmeterDateParser
2013-11-25 23:28:41 2013-11-25 23:28 2013-11-25 23 120 ...
2013-11-25 23:28:41 2013-11-25 23:28 2013-11-25 23 118 ...
2013-11-25 23:28:41 2013-11-25 23:28 2013-11-25 23 122 ...
2013-11-25 23:28:41 2013-11-25 23:28 2013-11-25 23 124 ...
2013-11-25 23:28:41 2013-11-25 23:28 2013-11-25 23 108 ...
2013-11-25 23:28:41 2013-11-25 23:28 2013-11-25 23 113 ...
これをSQLITEに突っ込んで、1カラム目、2カラム目、3カラム目...
ページ名: