プロトタイプ2
メニューバー作成.ファイルのオープンと,グラフ表示のStart/Stop操作を可能にしてみた.
こんなん.
なんかメニューバーがついた.あと,GC時間グラフの縦軸を対数にしてみた.上には天気のマークとかあるが,このラインはGCMonのウィンドウではなく,私のマシンのデスクトップが移っているだけである.念のため.
これ.
展開して,libの下に以下のjarを置く.
- jfreechart
- jcommon
- xerces
- log4j
jfreechart-0.9.16.jar xerces.jar jcommon-0.9.1.jar log4j-1.1b7.jar実行は
ant runである.起動すると単に「GCMon」と表示される.ここでメニューバー「File->Load GCLog File」でGCLogファイルを選択すると画面が白紙のグラフ画面になる.さらにメニューバー「Control->Start」でグラフ描画を開始する.ここでさらにメニューバー「Control->Pause」とすると一時停止する.
今後の展開を考慮にいれて,ChartFrameの使用をやめ,ChartPanelにした.で,GCLogファイルをロードする度に,前のChartPanelをコンテナから削除し,JFreeChartを作成して,ChartPanelを作成し,コンテナに張り付けていたのだが,なんかウィンドウサイズを変更しないと再描画されなくてちょっとはまった.以下,GCLogControllerクラス.
public void loadGCLogFile (String gcLogFilePath) {
stopUpdateChart();
chartThread = null;
int componentCount = contentPane.getComponentCount();
logger.debug("component count = " + componentCount);
contentPane.removeAll();
logger.debug("create gcLog");
gcLog = new GCLog("1.4.1", gcLogFilePath);
logger.debug("create gcChart");
JFreeChart gcChart = gcLog.getChart(gcLogFilePath);
logger.debug("create chartPanel");
ChartPanel chartPanel = new ChartPanel(gcChart);
logger.debug("add chartPanel");
contentPane.setVisible(false);
contentPane.add(chartPanel);
contentPane.setVisible(true);
}
最後の三行のように,親コンテナを一旦見えなくしてPanelを張り付けてsetVisible(true)すると,ファイルロード後にうまく再描画されるようになった...多分ファイルをロードしてPanelを張りかえるだけではフレームの再描画のキックがうまくかからないということなんだろうな.
システムプロパティを二つ定義し,
ant run時に設定するようにした.以下build.xmlから.
<java dir="${build.main}" classname="${application.class}" fork="yes">
<sysproperty key="org.fireproject.gcmon.log4j" value="${basedir}/log4j.xml" />
<sysproperty key="org.fireproject.gcmon.title_image" value="${basedir}/title_image.png" />
...
前者はlog4jの設定ファイルの場所,後者はGCMon起動直後のタイトル画面用画像ファイルの場所である.
配布用tgzファイル作成targetであるdistを作成してみた.
<target name="dist" if="dist" description="create tgz file for distribute.">
<delete dir="dist_tmp/${dist}" />
<mkdir dir="dist_tmp/${dist}" />
<copy todir="dist_tmp/${dist}">
<fileset dir="${basedir}">
<include name="ChangeLog" />
<include name="build.*"/>
<include name="log4j.*"/>
<include name="title_image.png"/>
</fileset>
</copy>
<copy todir="dist_tmp/${dist}">
<fileset dir="${basedir}">
<include name="src/**/*" />
<exclude name="**/CVS" />
<exclude name="src/test" />
</fileset>
</copy>
<tar tarfile="${basedir}/${dist}.tar" basedir="${basedir}/dist_tmp"/>
<gzip zipfile="${basedir}/${dist}.tar.gz" src="${basedir}/${dist}.tar" />
<delete file="${basedir}/${dist}.tar"/>
<delete dir="dist_tmp/" />
</target>
tarタスクとgzipタスクのみだけで行うこともできそうな気がするが,その場合圧縮ファイルを展開するとトップディレクトリがgcmon-prototype2にならなくって気に入らないので,一旦tar対象ディレクトリをcopyで作成するようにした.
- GC,Full GC回数等,普通にカウンタを回したい.
- GCログファイル等各種項目を設定できるようにする.
- 今回はtail -fのようなものだったので,今度はlessのようなものにする.

