MRTG_lib.pm - MRTGとスクリプト支援用ライブラリ
use MRTG_lib; my ($configfile, @target_names, %globalcfg, %targetcfg); readcfg($configfile, \@target_names, \%globalcfg, \%targetcfg); my (@parsed_targets); cfgcheck(\@target_names, \%globalcfg, \%targetcfg, \@parsed_targets);
MRTG_libはMRTGの一部ですが、他のプログラムが同じ設定ファイルを簡単に読むことができるよう、 MRTGからは切り離されています。MRTG_libの主要部分は設定ファイルのパーサですが、 他にもいくつかの関数があります。
設定ファイルを読み込んでパースし、いくつかの配列やハッシュを埋めます。 必要な引数は以下の通りです。設定ファイルの名前、 ターゲット名のリストで埋められた配列へのリファレンス、 グローバル設定用のハッシュへのリファレンス、 ターゲット設定用のハッシュへのリファレンス。
設定ファイルの書き方は以下の通りです。
globaloption: value targetoption[targetname]: value aprefix*extglobal: value aprefix*exttarget[target2]: value
例えば、
workdir: /var/stat/mrtg target[router1]: 2:public@router1.local.net 14all*columns: 2
のようになります。
グローバル設定用のハッシュの構造は
$globalcfg{configoption} = 'value'
となります。
一方、ターゲット設定用のハッシュの構造は
$targetcfg{configoption}{targetname} = 'value'
という形になります。
MRTGの設定ファイルの書き方についてのさらに詳しい情報は referenceをご覧ください。
readcfgはさらに2つの引数を取ることができ、 設定ファイルの文法を拡張することができます。 これにより、プログラムは自身の設定をMRTGの設定ファイルに 含めることができるのです。5番目の引数は拡張用の接頭辞(prefix)、 6番目の引数はこの拡張設定用のチェックルールを含むハッシュです。 例えば、接頭辞が「14all」の場合、readcfgは「14all*」で始まる行、つまり、
14all*columns: 2 14all*graphsize[target3]: 500 200
のような行の全てが%extrulesに記述されたルールによってチェックされるのです。 このハッシュのフォーマットは
$extrules{option} = [sub{$_[0] =~ m/^\d+$/}, sub{"Error message for $_[0]"}]
つまり、
$extrules{option}[0] -> テスト用の式 $extrules{option}[1] -> テストに失敗した時のエラーメッセージ
という形になります。
この配列の最初の部分はオプションの値をテストするためのperlの式になります。 テスト式中では「$arg」という変数によってその値にアクセスすることができます。 配列の2つめの部分はテストに失敗した時に表示するためのエラーメッセージです。 失敗した時の値は「$arg」という変数を使って取り込むことができます。
readcfgに与えたものとは異なる接頭辞を持つ設定は、 チェックはされませんが%globalcfgや%targetcfgには格納されます。 接頭辞のついた設定は設定ハッシュの中でもその接頭辞が保存されています。
$targetcfg{'14all*graphsize'}{'target3'} = '500 200'
といった具合です。
readcfgで読み込まれた設定をチェックします。 コンフィギュレーション中での値の文法的そしてまた意味的なエラーをチェックします。 いくつかのオプションについてはデフォルト値を設定します。 「target[...]」オプションをパースし、MRTGの関数が使えるように@parsed_targetsに格納します。
最初の3つの引数はreadcfgと同じです。4番目の引数はパースされた ターゲットのデフォルト値が格納された配列のリファレンスです。
cfgcheckはoptionsのターゲット設定の値を変換します。例えば、
options[router1]: bits, growright
を次のハッシュへと変換します。
$targetcfg{'option'}{'bits'}{'router1'} = 1 $targetcfg{'option'}{'growright'}{'router1'} = 1
これはreadcfgによって行なわれるわけではありませんので、 もしcfgcheckを使用しないなら、$targetcfg{'option'}{'router1'} というスカラ変数をチェックする必要があります。 readcfgはこの変換を行ないません(MRTGではオプションをスペースもしくは ,で区切ることができます)。
この関数はパス名にディレクトリ分離子が重なって入っていないか、そして最後がディレクトリ分離子で 終わっているかをチェックします。$MRTG_lib::SLをディレクトリ分離子として利用しますが、 この値はOSに依って/もしくは\になります。
ログファイルをrrdフォーマットに変換します。RRDtoolが必要です。
与えられた時刻を綺麗に整形された日付け文字列として返します。 引数の時刻はUNIXの時刻フォーマット(1970年1月1日からの秒数)です。
現在時刻を文字列表記で返します。
__DIE__や__WARN__用のシグナルハンドラを組み込みます。 これらのエラーは指定した先へ出力されます。filenameが「eventlog」の場合、 MRTGはWindowsのイベントロガーへ出力します。
引数で与えられた時刻をHTTPのExpiresヘッダで使えるような形で返します。
プログラムをバックグラウンドで走らせ、端末から切り離します。
ifDescr、ipAdEntIfIndex、ifPhysAddress、ifNameといったSNMP変数をhostから読み、 次のように%confcacheへその値を格納します。
$confcache{$host}{'Descr'}{ifDescr}{oid} = (ifDescr or 'Dup') $confcache{$host}{'IP'}{ipAdEntIfIndex}{oid} = (ipAdEntIfIndex or 'Dup') $confcache{$host}{'Eth'}{ifPhysAddress}{oid} = (ifPhysAddress or 'Dup') $confcache{$host}{'Name'}{ifName}{oid} = (ifName or 'Dup') $confcache{$host}{'Type'}{ifType}{oid} = (ifType or 'Dup')
もし値が複数回取り出された場合、値(=の右側)は「Dup」になり、 そうでない場合には取り出した値になります。
my $confcache = readconfcache($file)
confcacheをファイルから事前にロードします。
現在のconfcacheをファイルへ出力します。
タイプtype用にデバッギングが有効化されていればSTDERRにmessageを出力します。 デバッグのタイプはtypeが@main::DEBUGに含まれている場合に有効化されます。
Tobias Oetiker <tobi@oetiker.ch>, Dave Rand <dlr@bungi.com>
そしてCHANGES
に書かれている他の貢献者たち
Rainer Bawidamann <Rainer.Bawidamann@rz.uni-ulm.de >によってドキュメント化されました。
花井 浩之 <e2j@mrtg.jp>