#!/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
