Report MagicのCGI出力のフレーム化と日本語化

対象バージョン、環境

およそのインストール方法はAnalog用Report Magicドキュメント - SourceパッケージのインストールのままでOKだった。

フレーム化

Report MagicをApache httpdのログ解析ツールであるAnalogと組み合わせて使うとき、大抵はバッチ処理だが、CGIで使う方法もある。ただしこの場合、1ページしか表示できない。これを解決するため、CGIをいじった。

まず、フレームの全頁を作成するバッチ処理のスクリプトを起動し、バッチ処理の完了を確認し、フレームのインデックス頁にリダイレクトするようにした。

変更内容は、
1)まず、anlgform.plのメインとなる実行部分の 「3) PRINT ALL THE COMMANDS」のあたりで、OUTPUTの形式をCOMPUTERとして、OUTFILEとして適当な作業用ファイルを指定。

print ANALOG "OUTPUT COMPUTER\n";
print ANALOG "OUTFILE /tmp/作業用ファイル\n";

2)続いて、終了処理の部分で、ANALOGの処理の完了を待ってから、作業用
ファイルを入力としてrmagicを起動

# 4) WAIT FOR PROCESS TO FINISH. THAT'S IT.
unless (close(ANALOG)) {
    badreq(500, "Program Failure",
           "Analog failed to run or returned an error code.",
           "Maybe your server's error log will give a clue why.");
    print STDERR "[$lt] $progname: \"$analog\" failed to run or returned an erro
r code";
    print STDERR ": $!" if ($!);
    print STDERR ".\n";
    die;
}
$ss=`/rmagicのパス/rmagic2.pl /設定ファイルのパス/rmagic.ini`;
print "Location: http://フレーム形式のindex.htmlページのURI\n\n";

3)rmagic.iniの変更点としては、[statistics]の項目でFile_In = /tmp/作業用ファイル とすることぐらいか

最後のネック、グラフィックの文字列の日本語化

参考になったのは、下記のサイト。
ログ解析(Analog+ReportMagic)
上記サイトではanalogとreport magicのいずれもがEUC-JPで処理していて、GDで
UTF-8を入力として仮定しているということだったので、

./lang/ja 以下のファイルをnkf などを使ってUTF-8へ変換し、

./lang/ja/lang.ini を編集して

[Language]
CharacterSet = UTF-8

と設定した。

フォントのパスは、古いドキュメントではkochi-minchoなどが紹介されているが、最近では著作権の問題などで入手できない場合があると思うのでIPAのフォントを使った。
IPAexフォント/IPAフォント

設定方法参照:
IPAexフォント/IPAフォントインストール

(Fedora Core 5での設置例)
IPAのサイトからダウンロードして
#  フォントを置くディレクトリを作成し、ダウンロードした圧縮ファイルをコピー
 $ mkdir /usr/share/fonts/ipa
 $ cp IPAfont00203.zip /usr/share/fonts/ipa
# ディレクトリ変更後、圧縮ファイルを解凍
 $ cd /usr/share/fonts/ipa/
 $ unzip IPAfont00203.zip
# フォントのキャッシュを更新
 $ fc-cache -fv 

例えば以下の設定で動いた。

[graphs]
BG_Color = #FFFFCC
Font = /usr/share/fonts/ipa/IPAfont00203/ipamp.ttf,14,14,14
Font_Color = #000000
Width = 400
Height = 400
3d = 1
Palette = lgreen, lblue, lred, lpurple, lyellow, green, blue, red, purple, yellow
Cycle_Colors = 1
Shadows = 1
Format = png