#!/bin/ksh
#
# $Log: get_sysinfo_convert_html,v $
# Revision 1.6 2008/10/17 13:42:28 mbaker
# added Date field
#
# Revision 1.5 2008/09/24 18:22:40 mbaker
# added CD-ROM DVD
#
# Revision 1.4 2008/09/23 01:59:35 mbaker
# changed prints to ECHO
#
# Revision 1.3 2008/08/29 15:21:41 mbaker
# added company argument for HTML header
#
# Revision 1.2 2008/08/16 17:55:28 mbaker
# added RAIDL
#
# Revision 1.1 2008/06/26 02:08:55 mbaker
# Initial revision
#
#
###############################################################################
#DOCBEGIN
#
# Script to convert colon delimited get_sysinfo file into a html table.
#
# The script combines individual config file into one, by doing
# cat $SRCDIR/*.sysinfo.db > $SRCFILE
#
# It expects the input files from all systems to be in the format of:
# $HOSTNAME.sysinfo.db (which is the default output of get_sysinfo).
#
#
# Matt Baker - mbaker@computeranddata.com
# Latest copy available at www.computeranddata.com/scripts
# Version 4.3 08/29/2008
#
#DOCEND
###############################################################################
TMPDIR=/tmp
TMPFILE=$TMPDIR/html-format.$$
COMPANY=""
DESTDIR=/www
DESTFILE=$DESTDIR/company-sysinfo.html
SRCDIR=/nfsserver/data/get_sysinfo
SRCFILE=$SRCDIR/sysinfo.db
HEADERLINES=10
RULERLINES=5
HEADERONLY=0
VERBOSE=0
DEBUG=0
STDOUT=0
DATE="$(date)"
HEADER="
Item |
Hostname |
Hostid |
Serial Number |
OS Type |
OS Version |
Hardware Release |
Kernel Patch |
Arch |
Platform |
Model |
Kernel 32/64 Bit |
System Firmware |
CPU Qty |
CPU Speed |
Memory Size |
Page Size |
Swap Size |
DNS Domainname |
Virtual:Zones,VIO |
VNAMEs:VIPs |
Sun DOMAINs,LPARs,NPARs |
Diskgroups |
ZFS Pools |
Total Disk |
SMALL |
2GB |
4GB |
8GB |
18GB |
36GB |
73GB |
100GB |
150GB |
200GB |
300GB |
500GB |
gte 1TB |
EMC SAN |
EMC BCVs |
IBM SAN |
HDS SAN |
CD-ROM/DVD |
HBA |
HBA Type |
HBA Driver |
HBA Firmware |
HBA Fcode |
NET |
NIC:100Mb |
NIC:Gb |
Boards |
GBIC |
SOC |
SCSI |
FDDI |
HSI |
VIDEO |
SSA |
A5000 |
A5000 ARRAY NAMES |
Netra D130 |
RAIDL |
Java |
Perl |
VXVM |
VXFS |
VCS |
Netbackup |
TSM |
PowerPath |
ECC |
ESN Manager |
Volume Logix |
Fibre Zone |
Patrol |
Scheduler |
Forte |
Apache |
Netscape |
Websphere |
Weblogic |
Broadvision |
SQL Backtrack |
TripWire |
SSH |
Usage |
Location |
Busines Unit |
Server Purpose |
Lease Number |
Previous Hostnames |
Page if down |
Maintenance Level |
Data Capture Date |
"
OSTYPE=$(uname 2> /dev/null)
if [[ $OSTYPE = SunOS ]]
then
if [[ -f /usr/ucb/echo ]]
then
ECHO="/usr/ucb/echo"
else
#use ksh print
ECHO="print"
#ECHO="/usr/bin/echo"
fi
elif [[ $OSTYPE = AIX ]]
then
#use ksh print
ECHO="print"
#ECHO="/usr/bin/echo"
elif [[ $OSTYPE = HP-UX ]]
then
#use ksh print
ECHO="print"
#ECHO="/usr/bin/echo"
elif [[ $OSTYPE = Linux ]]
then
ECHO="/bin/echo"
elif [[ -n $(echo $OSTYPE | grep ^CYGWIN) ]]
then
ECHO="/usr/bin/echo"
fi
###########
# PARSING: read in options & arguments
###########
while (( $# ))
do
case $1 in
-sd) shift
if (( $# ))
then
SRCDIR=$1
#
# set file here so it knows new path, can be overriden later
#
SRCFILE=$SRCDIR/sysinfo.db
shift
if [[ ! -d $SRCDIR ]]
then
$ECHO "ERROR:4: srcdir $SRCDIR doesn't exist"
exit 4
fi
else
$ECHO "ERROR:1: srcdir (-sd) needs an argument"
exit 1
fi
;;
-sf) shift
if (( $# ))
then
SRCFILE=$SRCDIR/$1
shift
touch $SRCFILE 2> /dev/null
if [[ ! -f $SRCFILE ]]
then
$ECHO "ERROR:5: srcfile $SRCFILE cannot create"
exit 5
fi
else
$ECHO "ERROR:1: srcfile (-sf) needs an argument"
exit 1
fi
;;
-dd) shift
if (( $# ))
then
DESTDIR=$1
#
# set file here so it knows new path, can be overriden later
#
DESTFILE=$DESTDIR/company-sysinfo.html
shift
if [[ ! -d $DESTDIR ]]
then
$ECHO "ERROR:4: destdir $DESTDIR doesn't exist"
exit 4
fi
else
$ECHO "ERROR:1: destdir (-dd) needs an argument"
exit 1
fi
;;
-df) shift
if (( $# ))
then
DESTFILE=$DESTDIR/$1
shift
touch $DESTFILE 2> /dev/null
if [[ ! -f $DESTFILE ]]
then
$ECHO "ERROR:5: destfile $DESTFILE cannot create"
exit 5
fi
else
$ECHO "ERROR:1: destfile (-df) needs an argument"
exit 1
fi
;;
-c) shift
COMPANY="$1"
shift
;;
-stdout) STDOUT=1
shift
;;
-header*) HEADERONLY=1
shift
;;
-debug) DEBUG=1
shift
;;
-v) VERBOSE=1
shift
;;
-info | -doc)
awk '/DOCBEGIN/, /DOCEND/' $0 \
| sed -e 's/^#//' \
| sed -e '/DOCBEGIN/d' \
| sed -e '/DOCEND/d' \
| more
exit 0
;;
-h|*) if [[ $1 != -h ]]
then
$ECHO "\n OPTION: $1 is invalid.\n"
else
$ECHO ""
fi
##############################################################################
cat << EOF
Usage: $0:
Usage: $0: [-debug] [-v] [-headeronly] [-stdout]
Usage: $0: [-c companyname] [-sd SRCDIR ] [-sf SRCFILENAME ] [-dd DESTDIR ] [-df DESTFILENAME ]
Usage: $0: -info | -doc
Usage: $0: -h
no args: defaults to combined files in HTML output
-headeronly: print out HEADER ONLY
-stdout: print output to stdout (still saves to DESTFILE)
-debug: debug mode, does a 'set -x'
-o: lists running oracle instances/SIDs (based upon a unique standard)
-v: verbose mode
-info|doc: print out header of program (document)
-h: help - command synopsis (this listing)
EOF
##############################################################################
exit 1
;;
esac
done
if (( DEBUG ))
then
set -x
fi
if [[ -n $COMPANY ]]
then
COMPANY=" for $COMPANY"
fi
#
# Turn HEADER into colon delimited output, output it, then exit
#
if (( HEADERONLY ))
then
$ECHO $HEADER \
| sed -e 's///' \
| sed -e 's/<\/th>$//' \
| sed -e 's/> >://g' \
| sed -e 's/<\/th>//g'
exit 0
fi
if (( VERBOSE ))
then
$ECHO "starting conversion"
fi
#
# grab each individual config file and combine into one
#
cat $SRCDIR/*.sysinfo.db > $SRCFILE
#
# do header
#
cat << EOF > $TMPFILE
Server Configs $COMPANY
Last Modified on: $DATE
$HEADER
EOF
#
# add html to each line for table formatting
#
CNT=1
if (( VERBOSE ))
then
$ECHO -n "Doing server/line number..."
fi
while read -r line
do
if (( VERBOSE ))
then
$ECHO -n "${CNT}..."
fi
# translate colons to tables
line=$($ECHO "$line" | sed 's@:@@g')
# add table format for beginning and end of each line
line=$($ECHO " | ${CNT} | ${line} | ")
$ECHO "" >> $TMPFILE
$ECHO "$line" >> $TMPFILE
$ECHO " " >> $TMPFILE
#
# repeat the "rule" (double lines) every X lines
#
if (( $CNT % $RULERLINES == 0 ))
then
$ECHO "| | " >> $TMPFILE
#$ECHO " " >> $TMPFILE
#$ECHO " " >> $TMPFILE
fi
#
# repeat the header every X lines
#
if (( $CNT % $HEADERLINES == 0 ))
then
cat <<- EOF >> $TMPFILE
$HEADER
EOF
fi
let CNT=$CNT+1
done < $SRCFILE
#
# do footer
#
cat << EOF >> $TMPFILE
EOF
cat << EOF >> $TMPFILE
EOF
if [[ ! -d $DESTDIR ]]
then
$ECHO "ERROR:4: destdir $DESTDIR doesn't exist"
exit 4
fi
mv $TMPFILE $DESTFILE
#
# print to STDOUT (if set), then output save filename regarless
#
if (( STDOUT ))
then
cat $DESTFILE
else
if (( VERBOSE ))
then
$ECHO "completed conversion"
$ECHO "See outputfile $DESTFILE"
fi
fi
|