MRTG用index.htmlを動的生成するシェルスクリプトCGI
index.html生成パラメータを記載した設定ファイルを作成し、CGI実行時の引数として設定ファイルの絶対パスを指定する。
1. MRTG添付のindexmakerスクリプトでindex.htmlを生成
2. 生成したindex.htmlをデータ保管ディレクトリに配置
3. index生成パラメータを記載したindex.confを作成し、同ディレクトリに配置
4. CGIの引数としてindex.confの絶対パスを指定
index.confは以下の内容を記載する。
ls -la | grep .old | awk '{printf "ITEM %s\n",$9}' | sed "s/.old//g"
SERVERNAME ServerName DATADIR /home/mrtg/data/server URL /mrtg/data/server ITEM server_2 ITEM cpu_load ITEM rmem ITEM vmem ITEM disk1
実行するには以下の箇所に設定を記載する必要がある。
実行時には以下の様に引数を与える。
/mrtg/mrtg-index.cgi?/home/mrtg/data/server/index.conf
#!/bin/sh
# ------------------------
# MRTG index.cgi
# ------------------------
# Version : 1.0
# date : 2007/12/27
export LANG=C
export PATH=/bin:/sbin:/usr/bin:/usr/sbin:$PATH
## Set
LOGOIMG="/mrtg/img"
TEMPDIR=/home/httpd/mrtg/tmp
## Check
if [ -f $1 ]; then
INDEXCONF=$1
else
echo Content-type: text/html
echo
echo "<HTML><HEAD><TITLE>Script Error Page</TITLE></HEAD><BODY><CENTER>"
echo "Script Parm Error<BR>"
echo $1"<BR>"
echo "</CENTER></BODY></HTML>"
exit 0
fi
## Exec
RAND=`date +%Y%m%d%H%M%S`
DATADIR=`grep DATADIR $INDEXCONF | awk '{print $2}'`
SERVERNAME=`grep SERVERNAME $INDEXCONF | awk '{print $2}'`
OUTPUT=$TEMPDIR/$RAND.html
ITEMCOUNT=`grep ITEM $INDEXCONF | wc -l`
ITEMLIST=$TEMPDIR/$RAND.txt
TODAY=`date +%Y/%m/%d\ %H:%M:%S`
URLDATA=`grep URL $INDEXCONF | awk '{print $2}'`
## Init
echo "" > $OUTPUT
grep ITEM $INDEXCONF > $ITEMLIST
## HTML OUTPUT
# Header
cat <<EOF >> $OUTPUT
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
<TITLE>$SERVERNAME</TITLE>
<meta http-equiv="content-type" content="text/html; charset=EUC-JP" >
<META HTTP-EQUIV="Refresh" CONTENT="300" >
<META HTTP-EQUIV="Cache-Control" content="no-cache" >
<META HTTP-EQUIV="Pragma" CONTENT="no-cache" >
<META HTTP-EQUIV="Expires" CONTENT="Wed, 26 Dec 2007 17:51:06 GMT" >
<LINK HREF="favicon.ico" rel="shortcut icon" >
<style type="text/css">
body {
background-color: #ffffff;
}
div {
border-bottom: 2px solid #aaa;
padding-bottom: 10px;
margin-bottom: 5px;
}
div h2 {
font-size: 1.2em;
}
div.graph img {
margin: 5px 0;
}
div.graph table, div#legend table {
font-size: .8em;
}
div.graph table td {
padding: 0 10px;
text-align: right;
}
div table .in th, div table td span.in {
color: #00cc00;
}
div table .out th, div table td span.out {
color: #0000ff;
}
div#legend th {
text-align: right;
}
div#footer {
border: none;
font-size: .8em;
font-family: Arial, Helvetica, sans-serif;
width: 476px;
}
div#footer img {
border: none;
height: 25px;
}
div#footer address {
text-align: right;
}
div#footer #version {
margin: 0;
padding: 0;
float: left;
width: 88px;
text-align: right;
}
</style>
</HEAD>
<BODY bgcolor="#ffffff" text="#000000" link="#000000" vlink="#000000" alink="#000000">
<CENTER>
<TABLE width="90%">
<TR><TD width="90%" colspan="3"><HR></TD></TR>
<TR>
<TD width="25%"></TD>
<TD width="50%"><FONT size="5">$SERVERNAME</FONT></TD>
<TD width="25%" valign="bottom"><FONT size="2">$TODAY</FONT></TD>
<TR><TD width="90%" colspan="3"><HR></TD></TR>
</TABLE>
<TABLE BORDER=0 CELLPADDING=0 CELLSPACING=10>
EOF
# Body
i=1
while [ $i -le $ITEMCOUNT ];
do
ITMENAME=`sed -n -e ${i}"p" $ITEMLIST | awk '{print $2}'`
ITEMTITLE=`grep title $DATADIR/$ITMENAME.html | sed -n -e 1p | sed "s/<title>//g" | sed "s/<\/title>//g"| sed -e "s/^\t\t//g"`
GRAPHITME=`grep -A24 "End Head" $DATADIR/$ITMENAME.html | grep -v End | grep -v Begin | grep -v div | grep -v "<h2>" | grep -v img | sed "s/\t//g"`
if [ -f $DATADIR/$ITMENAME.html ]; then
cat <<EOF >> $OUTPUT
<TR>
<TD align="left">
<B>$ITEMTITLE</B>
</TD>
</TR>
<TR><TD>
<div class="graph">
<A href=$URLDATA/$ITMENAME.html>
<IMG border="1" src=$URLDATA/$ITMENAME-day.png>
</A><BR>
$GRAPHITME
</DIV>
</TD></TR>
EOF
fi
i=$(($i+1))
done
# Footer
cat <<EOF >> $OUTPUT
</TABLE>
<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0>
<TR>
<TD WIDTH=63><A
HREF="http://oss.oetiker.ch/mrtg/"><IMG
BORDER=0 SRC="$LOGOIMG/mrtg-l.png" WIDTH=63 HEIGHT=25 ALT="MRTG"></A></TD>
<TD WIDTH=25><A
HREF="http://oss.oetiker.ch/mrtg/"><IMG
BORDER=0 SRC="$LOGOIMG/mrtg-m.png" WIDTH=25 HEIGHT=25 ALT=""></A></TD>
<TD WIDTH=388><A
HREF="http://oss.oetiker.ch/mrtg/"><IMG
BORDER=0 SRC="$LOGOIMG/mrtg-r.png" WIDTH=388 HEIGHT=25
ALT="Multi Router Traffic Grapher"></A></TD>
</TR>
</TABLE>
<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0>
<TR VALIGN=top>
<TD WIDTH=88 ALIGN=RIGHT><FONT FACE="Arial,Helvetica" SIZE=2>
version 2.15.2</FONT></TD>
<TD WIDTH=388 ALIGN=RIGHT><FONT FACE="Arial,Helvetica" SIZE=2>
<A HREF="http://tobi.oetiker.ch/">Tobias Oetiker</A>
<A HREF="mailto:tobi+mrtglink@oetiker.ch"><tobi@oetiker.ch></A>
and <A HREF="http://www.bungi.com/">Dave Rand</A> <A HREF="mailto:dlr@bungi.com"><dlr@bungi.com></A></FONT>
</TD>
</TR>
</TABLE>
</CENTER>
</BODY>
</HTML>
EOF
## Disply HTML
echo Content-type: text/html
echo
cat $OUTPUT
## Delete Temp Files
rm $OUTPUT
rm $ITEMLIST
# EOF