summaryrefslogtreecommitdiff
path: root/src/pmview/front-ends/clustervis
diff options
context:
space:
mode:
Diffstat (limited to 'src/pmview/front-ends/clustervis')
-rwxr-xr-xsrc/pmview/front-ends/clustervis331
1 files changed, 331 insertions, 0 deletions
diff --git a/src/pmview/front-ends/clustervis b/src/pmview/front-ends/clustervis
new file mode 100755
index 0000000..6cab7aa
--- /dev/null
+++ b/src/pmview/front-ends/clustervis
@@ -0,0 +1,331 @@
+#!/bin/sh
+#
+# Copyright (c) 2001 Silicon Graphics, Inc. All Rights Reserved.
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 2 of the License, or (at your
+# option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# for more details.
+#
+
+tmp=/tmp/$$
+trap "rm -f $tmp.*; exit" 0 1 2 3 15
+rm -f $tmp.*
+debug=false
+
+. $PCP_DIR/etc/pcp.env
+. $PCP_SHARE_DIR/lib/pmview-args
+
+# --- scaling parameters ---
+#
+
+# maximum packets per second
+max=750
+
+# maximum req rate (default: 5% of packet rate)
+maxreq=`expr $max / 20`
+
+# milliseconds per CPU
+maxcpu=1000
+
+#
+# clustervis tolerates multiple hosts or archives
+_pmview_multiple_sources_are_ok
+
+# --- define usage message ---
+#
+_usage()
+{
+ echo >$tmp.msg 'Usage: '$prog' [options]
+
+Default hosts are specified in /etc/nodes (or /etc/ace/nodes)
+or specify the file specifying cluster hosts with the -H flag.
+The -h flag may be used to specify multiple hosts or the -a flag
+may be used to specify multiple archives. The -h, -a and -H flags
+are all mutually exclusive.
+
+options:
+ -H nodes file specifying hosts in cluster
+ [default $PCP_CLUSTER_CONFIG or /etc/nodes or /etc/ace/nodes]
+ -m max maximum expected packets sent or received per sec [default 750]
+ -V verbose/diagnostic output
+
+pmview(1) options:'
+
+ _pmview_usage >> $tmp.msg
+ echo >> $tmp.msg
+ echo >> $tmp.msg 'Default title is: Web Server Activity'
+ echo >> $tmp.msg '
+ By default all network interfaces are shown, with a maximum packet rate
+ of '$max' packets per second. The maximum request rate is 5% (of the
+ maximum packet rate) and the maximum error rate is 20% of the maximum
+ request rate.
+
+ If given, the [interface ...] regular expressions restrict
+ the network statistics displayed to matching network interface names only.'
+
+ _pmview_info -f $tmp.msg
+}
+
+# --- build WM_COMMAND X(1) property for restart after login/logout ---
+#
+echo -n "pmview Version 2.1 \"$prog\"" > $tmp.pmview
+for arg
+do
+ echo -n " \"$arg\"" >>$tmp.pmview
+done
+echo >> $tmp.pmview
+
+# --- parse command line arguments ---
+#
+verbose=false
+argInterfaces=""
+hosts=""
+interfaces=""
+numsource=1
+if [ -z "$PCP_CLUSTER_CONFIG" ]
+then
+ nodesfile=/etc/nodes
+ [ ! -f "$nodesfile" ] && nodesfile=/etc/ace/nodes
+else
+ nodesfile="$PCP_CLUSTER_CONFIG"
+ if [ ! -f "$nodesfile" ]
+ then
+ echo "Error: \"$nodesfile\" specified in \$PCP_CLUSTER_CONFIG: file not found"
+ _usage
+ exit 1
+ fi
+fi
+
+livemode=false
+for f in $*
+do
+ [ $f = "-h" ] && livemode=true
+done
+
+_pmview_args "$@"
+$debug && echo "DEBUG msource=\"$msource\""
+
+if [ -n "$otherArgs" ]
+then
+ while getopts "?H:m:v:V" c $otherArgs
+ do
+ case $c
+ in
+ H)
+ nodesfile=$OPTARG
+ if [ ! -f "$nodesfile" ]
+ then
+ _pmview_error "$prog: \"$nodesfile\" for -H file not found"
+ #NOTREACHED
+ fi
+ ;;
+ m)
+ max=$OPTARG
+ if [ "X-$max" != "X`expr 0 + -$max 2>/dev/null`" ]
+ then
+ _pmview_error "$prog: -m must have a positive integral argument"
+ #NOTREACHED
+ fi
+ maxreq=`expr $max / 20`
+ ;;
+
+ V)
+ verbose=true
+ ;;
+
+ '?')
+ _usage
+ exit 1
+ ;;
+ esac
+ done
+fi
+
+if [ $numsource -eq 0 ]
+then
+ if [ -f $nodesfile ]
+ then
+ livemode=true
+ sourcelist=`sed -e '/^#/d' $nodesfile`
+ numsource=`echo $sourcelist | wc -w`
+ else
+ _pmview_error "$prog: -H, -a or -h must be given"
+ fi
+fi
+
+$debug && echo DEBUG sourcelist=\"$sourcelist\"
+hostcols=`echo "sqrt($numsource)" | bc`
+$debug && echo hostcols=$hostcols
+
+
+# --- set the window title ---
+#
+if [ -z "$titleArg" ]
+then
+ titleArg="SGI PCP : Cluster Node Activity"
+fi
+
+
+# ---- the real config starts here ---
+# pmview Version 2.1
+#
+cat << end-of-file >> $tmp.pmview
+
+_stackLength 26
+_marginWidth 4
+_marginDepth 4
+
+_colorList net_colors (
+ rgbi:0.8/0.0/0.0
+ rgbi:0.0/0.8/0.8
+ rgbi:1.0/0.5/0.0
+)
+
+_colorList cpu_colors ( red2 blue2 blue2 )
+
+# main grid
+_grid _show (
+
+end-of-file
+
+hostrow=0
+hostcol=0
+for source in $sourcelist
+do
+ if $livemode
+ then
+ host=$source
+ msource="-h $source"
+ else
+ host=`pmdumplog -l $source | $PCP_AWK_PROG '/^Performance/ {print $NF}'`
+ msource="-a $source"
+ fi
+
+ nice=`pmprobe $msource -i kernel.all.cpu.nice | $PCP_AWK_PROG '{print $2; exit}'`
+ if [ "$nice" = 1 ]
+ then
+ nicemetric=kernel.percpu.cpu.nice
+ else
+ nicemetric=""
+ fi
+
+ _pmview_cache_fetch -v \
+ kernel.percpu.cpu.user $nicemetric \
+ network.interface.in.packets \
+ network.interface.out.packets
+
+ # --- how many CPUs on this system? ---
+ #
+ if _pmview_fetch -I kernel.percpu.cpu.user
+ then
+ ncpu=`wc -l <$tmp.pmview_result`
+ else
+ _pmview_fetch_fail "get the number of CPUs"
+ fi
+
+ _pmview_cache_fetch -I network.interface.total.bytes
+
+ # --- how many network interfaces on this system? ---
+ #
+ if _pmview_fetch -I network.interface.in.packets
+ then
+ nnet=`grep -v '^lo' $tmp.pmview_result | wc -l`
+ else
+ _pmview_fetch_fail "get the number of network interfaces"
+ fi
+
+ rows=`echo "sqrt($ncpu + $ncpu + $nnet + $nnet)" | bc`
+ [ $rows -lt 4 ] && rows=4
+ row=0
+ col=0
+
+ echo "# grid for host $host" >>$tmp.pmview
+ echo "_baseHeight 8" >>$tmp.pmview
+ echo "_grid $hostcol $hostrow _hide (" >>$tmp.pmview
+
+ echo " _baseColor rgbi:0.4/0.4/0.6" >>$tmp.pmview
+ echo " _label 0 0 _down _large \"$host\"" >>$tmp.pmview
+ echo " _grid 1 0 _show (" >>$tmp.pmview
+
+ _pmview_fetch -I kernel.percpu.cpu.user
+ for cpu in `cat $tmp.pmview_result`
+ do
+ echo " _label $row $col _west \"$cpu\"" >>$tmp.pmview
+ echo " _stack `expr $row + 1` $col _hide (" >>$tmp.pmview
+ echo " _metrics (" >>$tmp.pmview
+ echo " $host:kernel.percpu.cpu.sys[$cpu] $maxcpu" >>$tmp.pmview
+ if [ ! -z "$nicemetric" ]
+ then
+ echo " $host:kernel.percpu.cpu.nice[$cpu] $maxcpu" >>$tmp.pmview
+ fi
+ echo " $host:kernel.percpu.cpu.user[$cpu] $maxcpu" >>$tmp.pmview
+ echo " )" >>$tmp.pmview
+ echo " _colorlist cpu_colors" >>$tmp.pmview
+ echo " )" >>$tmp.pmview
+
+ $debug && echo stack at row=`expr $row + 1` col=$col \"$cpu\"
+ $debug && echo label at row=$row col=$col
+
+ col=`expr $col + 1`
+ if [ $col -ge $rows ]
+ then
+ col=0
+ row=`expr $row + 2`
+ fi
+ done
+
+ _pmview_fetch -I network.interface.in.packets
+ grep -v '^lo' $tmp.pmview_result >$tmp.net
+ for net in `cat $tmp.net`
+ do
+ echo " _label $row $col _west \"$net\"" >>$tmp.pmview
+ echo " _stack `expr $row + 1` $col _hide (" >>$tmp.pmview
+ echo " _metrics (" >>$tmp.pmview
+ echo " $host:network.interface.total.errors[$net] $max" >>$tmp.pmview
+ echo " $host:network.interface.in.packets[$net] $max" >>$tmp.pmview
+ echo " $host:network.interface.out.packets[$net] $max" >>$tmp.pmview
+ echo " )" >>$tmp.pmview
+ echo " _colorlist net_colors" >>$tmp.pmview
+ echo " )" >>$tmp.pmview
+
+ $debug && echo stack at row=`expr $row + 1` col=$col \"$net\"
+ $debug && echo label at row=$row col=$col
+
+ col=`expr $col + 1`
+ if [ $col -ge $rows ]
+ then
+ col=0
+ row=`expr $row + 2`
+ fi
+
+ done
+ echo " )" >>$tmp.pmview
+ row=`expr $row + 1`
+ echo "# end of host grid" >>$tmp.pmview
+ echo ")" >>$tmp.pmview
+
+ hostcol=`expr $hostcol + 1`
+ if [ $hostcol -ge $hostcols ]
+ then
+ hostcol=0
+ hostrow=`expr $hostrow + 1`
+ fi
+
+done
+
+echo "" >>$tmp.pmview
+echo "# end of main grid" >>$tmp.pmview
+echo ")" >>$tmp.pmview
+
+$verbose && cat $tmp.pmview
+
+eval $PMVIEW <$tmp.pmview $args -title "'$titleArg'" -xrm "'*iconName: $prog'"
+
+exit
+