Initial add of defaria.com
[clearscm.git] / defaria.com / Computers / code / adm / bin / inventory
1 #!/bin/bash
2 ################################################################################
3 #
4 # File:         inventory
5 # Description:  Displays information about a machine including hardware and
6 #               software inventories
7 # Author:       Andrew@DeFaria.com
8 # Created:      Fri Jun 15 15:26:27 PDT 2001
9 # Language:     Korn Shell
10 #
11 # (c) Copyright 2001, Andrew DeFaria, all rights reserved.
12 #
13 ################################################################################
14 # Set me to command name
15 me=$(basename $0)
16
17 # Set adm_base
18 adm_base=${adm_base:-//sonscentral/Corporate/Software/adm}
19
20 # Set adm_fpath
21 adm_fpath=${adm_fpath:-$adm_base/functions}
22
23 # Source functions
24 . $adm_fpath/common
25
26 tmpprefix=${TMPDIR:-/tmp}/$me.$$
27 tmpfile=$tmpprefix
28 tmpfile=~v801310/adm/data/$(hostname).sysinfo
29 . $adm_fpath/tmpfiles
30
31 function usage {
32   print -u2 "Usage: $me -[h|ardware] -[s|oftware] -[da|emon]"
33   exit 1
34 } # usage
35
36 function display_inventory {
37   # This function displays the "inventory" for this machine. Currently 
38   # "inventory" consists of hardware, software and daemons.
39   display_hardware_inventory
40   display_software_inventory
41   display_daemon_inventory
42 } # display_inventory
43
44 function display_hardware_inventory {
45   # This function displays the hardware inventory. Only "important" hardware
46   # values are displayed. 
47   #
48   # This function may be enhanced in the future.
49   debug "ENTER: $0"
50
51   # Hostname
52   host=$(grep ^HOSTNAME: $tmpfile | cut -c16-)
53
54   # OS
55   os=$(uname -r)
56
57   # Model
58   model=$(grep ^MODEL: $tmpfile | cut -c16-)
59
60   # CPU Speed
61   cpu_speed=$(grep "^CPU SPEED:" $tmpfile | cut -c16-)
62
63   # CPUs
64   cpus=$(grep ^CPUS: $tmpfile | awk '{print $2}')
65
66   # Main Memory
67   memory=$(grep MEMORY: $tmpfile | awk '{printf "%s %s", $2, $3}')
68
69   # Swap
70   if is_root; then
71     swap=$(swapinfo -m -t | tail -1 | awk '{print $2}')
72     swap="$swap Meg"
73   else
74     swap="(Not run as root)"
75   fi
76
77   # Number of disks
78   if is_root; then
79     verbose "Determining the number of disks"
80     nbr_disks=$(ioscan -C disk | grep -ve "^H/W" -e "^==" -e "CD-ROM" | wc -l)
81   else
82     nbr_disks="(Not run as root)"
83   fi
84
85   # Volume groups and logical volumes
86   integer nbr_vg=0
87   integer nbr_lv=0
88
89   verbose "Determining volume groups and logical volumes"
90   for vg in $(vgdisplay | grep "^VG Name" | awk '{print $NF}'); do
91     let nbr_vg=nbr_vg+1
92     for v in $(vgdisplay -v $vg | grep "   LV Name" | awk '{print $NF}'); do
93       let nbr_lv=nbr_lv+1
94     done
95   done                            
96
97   # Display information
98   display "Machine: $host"
99   display "OS: $os"
100   display "Model: $model"
101   display "CPUs: $cpus ($cpu_speed)"
102   display "Memory: $memory"
103   display "Swap: $swap"
104   display "Number of disks: $nbr_disks"
105   display "Volume Groups: $nbr_vg"
106   display "Logical Volumes: $nbr_lv"
107
108   # Print filesystems with percentage filled in descending order:
109   display
110   bdf -l | grep -ve "^Filesystem" -e "^AFS" | 
111     awk '{printf "%s\t%s\n", $(NF-1), $NF}' | sort -nr
112   debug "EXIT: $0"
113 } # display_hardware_inventory
114
115 function display_software_inventory {
116   # This function displays the software inventory. Only "important" software
117   # values are displayed. Currently these are:
118   #
119   #     . Certain "interesting" software registered in the SD-UX product
120   #       database
121   #     . Certain "interesting" 3rd party software (typically not recorded
122   #       properly in the SD-UX product database)
123   #
124   # This function may be enhanced in the future.
125   debug "ENTER: $0"
126
127   verbose "Checking for certain important software (SD-UX)"
128   display "\nInstalled software (SD-UX):\n"
129   for package in \
130     Apache \
131     DB2V7CAE \
132     DB2V7CONN \
133     DB2V7SDK \
134     DB2V7WGRP \
135     C-ANSI-C \
136     C-Plus-Plus \
137     CCASE-MVFS \
138     Glance \
139     Ignite-UX \
140     Java-PlugIn1-2 \
141     Java-Runtime1-1 \
142     Java2JDK_base \
143     Java2RTE_base \
144     gcc \
145     NscapeDir40Srv \
146     NscapeFastrakSrv \
147     NscapeNavGold \
148     NSEntrpr36Srv \
149     NSNavigator40 \
150   ; do
151     grep "$package" $tmpfile > /dev/null 2>&1 
152
153     if [ $? -eq 0 ]; then
154       if [ -n "$packages" ]; then
155         packages="$packages, $package"
156       else
157         packages="$package"
158       fi
159     fi
160   done
161   display "\t$packages"
162
163   display "\nNumber of patches: \c"
164   grep -c "^  PH" $tmpfile
165
166   display "\nContents of /usr/local/bin:\n\t\c"
167   l -F /usr/local/bin
168
169   display "\nOther software:\n"
170
171   for other_software_dir in \
172     /sybase \
173     /usr/local/flexlm \
174     /opt/perl \
175     /opt/perl5 \
176     /opt/tuxedo \
177     /opt/weblogic \
178   ; do
179     if [ -d $other_software_dir ]; then
180       if [ -n "$other_software_dirs" ]; then
181         other_software_dirs="$other_software_dirs, $other_software_dir"
182       else
183         other_software_dirs="$other_software_dir"
184       fi
185     fi
186   done
187
188   display "\t$other_software_dirs"
189
190   debug "EXIT: $0"
191 } # display_software_inventory
192
193 function display_daemon_inventory {
194   # This function displays the daemon inventory. Only "important" daemon
195   # values are displayed. 
196   #
197   # This function may be enhanced in the future.
198   debug "ENTER: $0"
199
200   display "\nRunning daemons on $(uname -n):\n"
201
202   # Check to see if Oracle is running
203   if [ $(who | cut -f1 -d' ' | sort -u | grep -c oracle) -eq 1 ]; then
204     daemons="Oracle"
205   fi
206
207   verbose "Checking for running daemons"
208   # Check other running daemons
209   for daemon in \
210     ns-httpd \
211     uxwdog \
212     /opt/perf/bin/midaemon \
213     /usr/afs/bin/bosserver \
214     /usr/afs/bin/busserver \
215     /usr/afs/bin/fileserver \
216     /usr/afs/bin/kasserver \
217     /usr/afs/bin/ptserver \
218     /usr/afs/bin/runntp \
219     /usr/afs/bin/vlserver \
220     /usr/afs/bin/volserver \
221     /usr/excalib/efsd \
222     /usr/sbin/inetd.afs \
223     /usr/vice/etc/afsd\
224   ; do
225     integer n=$(ps -ef | grep "$daemon" | grep -v "grep $daemon" | wc -l)
226
227     if [ $n -gt 0 ]; then
228       if [ -n "$daemons" ]; then
229         daemons="$daemons, $daemon"
230       else
231         daemons="$daemon"
232       fi
233     fi
234   done
235   display "\t$daemons"
236
237   debug "EXIT: $0"
238 } # display_daemon_inventory
239
240 # Get parms
241 hardware=true
242 softare=true
243 daemon=true
244 while [ $# -ge 1 ]; do
245   case "$1" in
246     -usage)
247       usage
248       ;;
249     
250     -v|-verbose)
251       verbose=yes
252     ;;    
253
254     -d|-debug)
255       debug=yes
256     ;;    
257
258     -h|-hardware)
259       hardware=true
260       ;;
261     
262     -s|-software)
263       software=true
264       ;;
265     
266     -da|-daemon)
267       daemon=true
268       ;;
269     
270     *)
271       error "Unknown parameter encounter: \"$1\""
272       usage
273       ;;
274   esac
275   shift
276 done
277
278 # Find sysinfo
279
280 # First check to see if we can access our own sysinfo
281 sysinfo=/usr/contrib/bin/sysinfo
282
283 if [ ! -x $sysinfo ]; then
284   # Next check to see if we can find sysinfo on PATH
285   sysinfo=$(whence sysinfo)
286   if [ "_$sysinfo" = "_" ]; then
287     error "Unable to find sysinfo!" 1
288   else
289     warning "Using nonstandard sysinfo: $sysinfo. Results may vary"
290   fi
291 fi
292 verbose "Using sysinfo: $sysinfo"
293
294 # Hack alert! During testing I'm letting $tmpfile hang around. Therefore if it
295 # exists already we'll simply use it assuming it contains valid output from 
296 # a previous run. This speeds up things quite a bit
297 if [ ! -f $tmpfile ]; then
298   # Check to see if user is running as root
299   if is_root; then
300     error "You must run this as root" 1
301   else
302     verbose "Gathering information...\c"
303     $sysinfo -a > $tmpfile
304     chown v801310:sfokt $tmpfile
305     chmod 666 $tmpfile
306     verbose " done"
307   fi
308 fi
309
310 display_inventory