#!/bin/bash
###############################################################################
# gentcucci - Generate Total Control User Count (and temp) Config and Index
# (pronounced like Gent Cookie) an MRTG Tool
#
# Version 1.0.0
#
# Copyright and written by Kevin Benton, 1999.
#
# Please be sure that if you choose to use this code that you let Tobi or
# myself know that it's useful to you. Tobi - thanks for writing MRTG and
# making it freely available to those of us who weren't quite so creative.
#
# NOTE 1 - At the time of this writing, we've been using this script for over
# a year and it's worked like a champ. Don't let the version number fool
# you - this stuff is tried and tested.
#
# NOTE 2 - Please be sure to pick the target method below. Look for
# "INTENTIONAL ERROR" in this file, uncomment the appropriate line and delete
# the two "error" lines as directed.
#
# NOTE 3 - This could have been written in Perl to make it a lot faster, but at
# the time I wrote it, I didn't know enough Perl to do it. I certainly didn't
# feel like spending the time to write it in C. I may soon rewrite this
# entire script in Perl not only to make it faster, but to clean things as far
# as temp files go and what not.
#
# NOTE 4 - tcf2mrtg returns the number of users on-line for a particular
# target. This works on both ARCs and NetServers and gives us the ability to
# split apart DSP's. It can of course be adapted to whatever your platform
# needs require. If you only need data for the HARC aggregated together, use
# the MIB .1.3.6.1.4.1.429.4.2.1.10.0 or whatever is current for the HARC code
# you're using.
###############################################################################
###############################################################################
# store in users index file
stf() {
echo "$1" >>$TEMP_FILE
}
###############################################################################
# store in temperature index file
stfd() {
echo "$1" >>$TEMP_FILE2
}
###############################################################################
# store in temperature config
stod() {
echo "$1" >>$degree_file
}
###############################################################################
# store in users config
stou() {
echo "$1" >>$output_file
}
###############################################################################
########################## CONFIGURATION PARAMETERS ###########################
# output_dir is where MRTG will be storing configs. A directory www should
# exist under that with the directories tcusercount and tcdegree below that.
export output_dir=/usr/local/mrtg-2.8.12/local-config
# output_file is the MRTG user count config file.
export output_file=$output_dir/mrtg.tcusercount.cfg
# degree_file is the MRTG chassis temperature config file.
export degree_file=$output_dir/mrtg.tcdegree.cfg
# ro_comm is the read only SNMP community to use to grab data with.
export ro_comm=public
########################## CONFIGURATION PARAMETERS ###########################
export TEMP_FILE=/tmp/gentcuc.$$
export TEMP_FILE2=/tmp/gentcuc.$$.2
rm -f $TEMP_FILE 2>/dev/null >/dev/null
trap "rm -f $TEMP_FILE $TEMP_FILE2 2>/dev/null >/dev/null ; exit" 1 2 15
touch $TEMP_FILE
index=${output_dir}/www/tcusercount/index.htm
bigindex=${output_dir}/www/tcusercount/bigindex.htm
degreeindex=${output_dir}/www/tcdegree/index.htm
bigdegreeindex=${output_dir}/www/tcdegree/bigindex.htm
# Create mrtg.tcusercount.cfg header
cat >$output_file <<SH_EOF1
##################################################################
# CAUTION: This file is automatically generated. Do not edit. #
# Changes should be made in gwcs.list only. #
##################################################################
Workdir: $output_dir
Refresh: 300
Interval: 5
WriteExpires: Yes
Directory[^]: www/tcusercount/
PageTop[^]: <H1>
PageTop[\$]: Total Control Chassis User Count</H1>
Options[^]: gauge noinfo
YLegend[^]: Users On
ShortLegend[^]: Users
Title[$]: Total Control Chassis User Count
XZoom[^]: 2.0
YZoom[^]: 2.0
SH_EOF1
# Create mrtg.tcdegree.cfg header
cat >$degree_file <<SH_EOF2
##################################################################
# CAUTION: This file is automatically generated. Do not edit. #
# Changes should be made in nmcs.list only. #
##################################################################
Workdir: $output_dir
Refresh: 300
Interval: 5
WriteExpires: Yes
Directory[^]: www/tcdegree/
PageTop[^]: <H1>
PageTop[\$]: Total Control Chassis Temperature</H1>
Options[^]: gauge noinfo nopercent
YLegend[^]: Fahrenheit
ShortLegend[^]: Temp
Title[$]: Total Control Chassis Temperature
XZoom[^]: 2.0
YZoom[^]: 2.0
SH_EOF2
# Create master index temp file
stf "<HTML>"
stf "<HEAD><TITLE>Total Control SED_REPLACE_WITH_NAME</TITLE></HEAD>"
stf "<BODY BGCOLOR=WHITE>"
stf "<H1>Total Control SED_REPLACE_WITH_NAME</H1>"
stf "Updated `date`<P>"
stf "<A HREF=\"SED_REPLACE_WITH_INDEX.HTM\">Click here for SED_REPLACE_WITH_SIZE size images</A><BR>"
stf "<TABLE BORDER>"
# Process into mrtg.tcusercount.cfg and master user count index from gwcs.list
while read line
do
if echo "$line" | egrep '^#' >/dev/null 2>/dev/null
then
continue
fi
if [ -z "$line" ]
then
continue
fi
target="`echo \"$line\" | cut -d: -f1 | sed -e 's/+/ /g'`"
tag="`echo \"$line\" | \
cut -d: -f1 | \
sed -e 's/+/_/g' | \
sed -e 's/\_.*\@/_/g' | \
cut -d@ -f2`"
title="`echo \"$line\" | cut -d: -f2`"
maxb="`echo \"$line\" | cut -d: -f3`"
absm="`echo \"$line\" | cut -d: -f4`"
INTENTIONAL ERROR: YOU MUST PICK 1 OF THE 2 TARGETS BELOW AND DELETE THIS LINE
# stou "Target[$tag]: \`/usr/local/mrtg-2.8.12/local-config/tcf2mrtg \"$target\"\`"
# stou "Target[$tag]: .1.3.6.1.4.1.429.4.2.1.10.0:${ro_comm}@$target"
INTENTIONAL ERROR: YOU MUST PICK ONE OF THE TARGETS ABOVE AND DELETE THIS LINE
stou "Title[$tag]: $title"
stou "PageTop[$tag]: $title"
if [ ! "$absm" = "0" ]
then
stou "AbsMax[$tag]: $absm"
fi
stou "MaxBytes[$tag]: $maxb"
stou "WithPeak[$tag]: ymwd"
stou ""
stf " <TR>"
stf " <TD ROWSPAN=2>"
stf " <CENTER><A HREF=\"$tag.html\">$title</A><BR>"
stf " `/home/httpd/cgi-bin/tcnowstat \"$tag\" \"$maxb\"`<BR>"
stf " Potential Users: $maxb</CENTER>"
stf " <TD>Today<BR>5 Min</TD>"
stf " <TD>"
stf " <IMG SRC=\"$tag-day.png\" SED_REPLACE_WITH_PICSIZE>"
stf " </TD>"
stf " </TR>"
stf " <TR>"
stf " <TD>This Week<BR>30 Min</TD>"
stf " <TD>"
stf " <IMG SRC=\"$tag-week.png\" SED_REPLACE_WITH_PICSIZE>"
stf " </TD>"
stf " </TR>"
done <gwcs.list
stfd "<HTML>"
stfd "<HEAD><TITLE>Total Control SED_REPLACE_WITH_NAME</TITLE></HEAD>"
stfd "<BODY BGCOLOR=WHITE>"
stfd "<H1>Total Control SED_REPLACE_WITH_NAME</H1>"
stfd "Updated `date`<P>"
stfd "<A HREF=\"SED_REPLACE_WITH_INDEX.HTM\">Click here for SED_REPLACE_WITH_SIZE size images</A><BR>"
stfd "<TABLE BORDER>"
# Process into mrtg.tcusercount.cfg and master user count index from gwcs.list
while read line
do
if echo "$line" | egrep '^#' >/dev/null 2>/dev/null
then
continue
fi
if [ -z "$line" ]
then
continue
fi
name="`echo \"$line\" | cut -d: -f1 | sed -e 's/+/ /g'`"
tag="`echo \"$line\" | cut -d: -f1 | sed -e s/+/_/g`"
title="`echo \"$line\" | cut -d: -f2`"
stod "##################################################################"
stod "Target[$tag]: .1.3.6.1.4.1.429.1.2.2.5.0&.1.3.6.1.4.1.429.1.2.2.5.0:public@$name * 1.8 + 32"
stod "Title[$tag]: $title"
stod "PageTop[$tag]: $title"
stod "MaxBytes[$tag]: 200"
stfd " <TD ROWSPAN=2>"
stfd " <CENTER><A HREF=\"$tag.html\">$title</A><BR>"
stfd " `/home/httpd/cgi-bin/tcnowtemp \"$tag\"`</CENTER>"
stfd " <TD>Today<BR>5 Min</TD>"
stfd " <TD>"
stfd " <IMG SRC=\"$tag-day.png\" SED_REPLACE_WITH_PICSIZE>"
stfd " </TD>"
stfd " </TR>"
stfd " <TR>"
stfd " <TD>This Week<BR>30 Min</TD>"
stfd " <TD>"
stfd " <IMG SRC=\"$tag-week.png\" SED_REPLACE_WITH_PICSIZE>"
stfd " </TD>"
stfd " </TR>"
done <nmcs.list
# close the indexes up tight
stf "</TABLE></BODY></HTML>"
stfd "</TABLE></BODY></HTML>"
# create normal and big indexes for user count and temperature.
cat $TEMP_FILE | sed -e 's/SED_REPLACE_WITH_INDEX.HTM/bigindex.htm/g' | \
sed -e 's/SED_REPLACE_WITH_SIZE/double/g' | \
sed -e 's/SED_REPLACE_WITH_NAME/User Count Analysis/g' | \
sed -e 's/SED_REPLACE_WITH_PICSIZE//g' >$index
cat $TEMP_FILE | sed -e 's/SED_REPLACE_WITH_INDEX.HTM/index.htm/g' | \
sed -e 's/SED_REPLACE_WITH_SIZE/normal/g' | \
sed -e 's/SED_REPLACE_WITH_NAME/User Count Analysis/g' | \
sed -e 's/SED_REPLACE_WITH_PICSIZE/WIDTH=1000 HEIGHT=270/g' >$bigindex
cat $TEMP_FILE2 | sed -e 's/SED_REPLACE_WITH_INDEX.HTM/bigindex.htm/g' | \
sed -e 's/SED_REPLACE_WITH_SIZE/double/g' | \
sed -e 's/SED_REPLACE_WITH_NAME/Chassis Temperature/g' | \
sed -e 's/SED_REPLACE_WITH_PICSIZE//g' >$degreeindex
cat $TEMP_FILE2 | sed -e 's/SED_REPLACE_WITH_INDEX.HTM/index.htm/g' | \
sed -e 's/SED_REPLACE_WITH_SIZE/normal/g' | \
sed -e 's/SED_REPLACE_WITH_NAME/Chassis Temperature/g' | \
sed -e 's/SED_REPLACE_WITH_PICSIZE/WIDTH=1000 HEIGHT=270/g' >$bigdegreeindex
rm $TEMP_FILE $TEMP_FILE2