summaryrefslogtreecommitdiff
path: root/src/pmview/front-ends/weblogvis
diff options
context:
space:
mode:
Diffstat (limited to 'src/pmview/front-ends/weblogvis')
-rwxr-xr-xsrc/pmview/front-ends/weblogvis451
1 files changed, 451 insertions, 0 deletions
diff --git a/src/pmview/front-ends/weblogvis b/src/pmview/front-ends/weblogvis
new file mode 100755
index 0000000..5b570bd
--- /dev/null
+++ b/src/pmview/front-ends/weblogvis
@@ -0,0 +1,451 @@
+#!/bin/sh
+# Copyright (c) 1995-2000 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.*
+
+. $PCP_DIR/etc/pcp.env
+. $PCP_SHARE_DIR/lib/pmview-args
+
+# default idle time
+#
+defidle=3600
+
+_usage()
+{
+ echo >$tmp.msg 'Usage: '$prog' [options] [server ...]
+
+Options
+ -b display byte rate, rather than request rate
+ -f display activity by function, rather than activity by
+ result size
+ -i show server names
+ -I time maximum expected idle time in seconds [default $defidle]
+ -m max maximum expected request rate (or maximum byte rate)
+ -V verbose/diagnostic output
+
+pmview(1) options:'
+ _pmview_usage >> $tmp.msg
+ echo '
+Default title is: Web Log Activity (request rate by result size) for Host' >> $tmp.msg
+ echo '
+ The default is to display the request rate, grouped by result size, for all
+ Web servers on the target host.' | fmt >> $tmp.msg
+ _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
+serverList=""
+max=0
+idle=$defidle
+class=size
+show=request
+showInst=false
+
+_pmview_args "$@"
+
+if [ -n "$otherArgs" ]
+then
+ while getopts "?bfiI:m:v:V" c $otherArgs
+ do
+ case $c
+ in
+ b) # show bytes not requests
+ show=byte
+ ;;
+
+ f) # classify by function (method)
+ class=method
+ ;;
+ i)
+ showInst=true
+ ;;
+ I)
+ idle=$OPTARG
+ # and now the obscure +ve integer checking bit
+ # ...note the creative use of unary - to prevent leading signs
+ if [ "X-$idle" != "X`expr 0 + -$idle 2>/dev/null`" ]
+ then
+ _pmview_error "$prog: -I must have a positive integral argument"
+ #NOTREACHED
+ fi
+ ;;
+ m)
+ max=$OPTARG
+ # and now the obscure +ve integer checking bit
+ # ...note the creative use of unary - to prevent leading signs
+ if [ "X-$max" != "X`expr 0 + -$max 2>/dev/null`" ]
+ then
+ _pmview_error "$prog: -m must have a positive integral argument"
+ #NOTREACHED
+ fi
+ ;;
+ v)
+ if [ $OPTARG = "1" ]
+ then
+ _pmview_warning "$prog: pmview version 1 no longer supported, using version 2"
+ elif [ $OPTARG != "2" ]
+ then
+ _pmview_error "$prog: only version 2 supported for -v"
+ # NOTREACHED
+ fi
+ ;;
+ V)
+ verbose=true
+ ;;
+ '?')
+ _usage
+ exit 1
+ ;;
+ esac
+ done
+
+ set - $otherArgs
+ shift `expr $OPTIND - 1`
+ [ $# -gt 0 ] && serverList_sp=$* && serverList=`echo $* | sed -e 's/ /,/g'`
+fi
+[ -z "$titleArg" ] && titleArg="SGI PCP : Web Log Activity"
+
+
+if [ $max = 0 ]
+then
+ if [ $show = request ]
+ then
+ # requests per second
+ max=50
+ else
+ # bytes per second
+ max=500000
+ fi
+fi
+
+
+# maximum req error rate (default: 5% of request rate)
+#
+maxerr=`expr $max / 20`
+
+
+# if metrics source is an archive, and find out name of host
+#
+if [ "X$arch" != X ]
+then
+ host=`pmdumplog -l $arch | $PCP_AWK_PROG '/^Performance/ {print $5}' \
+ | sed -e 's/,//g'`
+ [ "X$host" = X ] && host="unknown host"
+ host="$host (Archive $arch)"
+fi
+
+
+# get perserver instances
+# in the default case use web.perserver.requests.total
+# in the -b flag case use web.perserver.bytes.total
+#
+rm -f $tmp.int
+if [ $show = request ]
+then
+ pminfo -f $msource $namespace web.perserver.requests.total \
+ > $tmp.int 2>/dev/null
+else
+ pminfo -f $msource $namespace web.perserver.bytes.total \
+ > $tmp.int 2>/dev/null
+fi
+if [ ! -s $tmp.int ]
+then
+ if [ "X$arch" != "X" ]
+ then
+ _pmview_error "$prog: weblog metrics not included in the archive \"$arch\""
+ #NOTREACHED
+ else
+ _pmview_error "$prog: weblog metrics not available for host \"$host\""
+ #NOTREACHED
+ fi
+fi
+
+sed -e 's/\]//' -e 's/"//g' $tmp.int \
+ | $PCP_AWK_PROG '$1 == "inst" {print $4}' > $tmp.list
+
+if [ ! -s $tmp.list ]
+then
+ if [ "X$arch" != X ]
+ then
+ _pmview_error "$prog: failed to get web servers from archive \"$arch\""
+ #NOTREACHED
+ else
+ _pmview_error "$prog: failed to get web servers from host \"$host\""
+ #NOTREACHED
+ fi
+fi
+
+rm -f $tmp.chosen
+if [ -z "$serverList" ]
+then
+ cp $tmp.list $tmp.chosen
+else
+ touch $tmp.chosen
+ for i in $serverList_sp
+ do
+ egrep $i $tmp.list >> $tmp.chosen
+ done
+fi
+
+servers_sp=`cat $tmp.chosen | sort | uniq`
+servers=`echo $servers_sp | sed -e 's/ /,/g'`
+nservers=`echo $servers | wc -w`
+
+if [ $nservers = 0 ]
+then
+ _usage
+ echo
+ echo "Error: $prog: no matching web servers"
+ echo " Available web servers are: " `cat $tmp.list`
+ exit 1
+fi
+
+
+if [ $show = request ]
+then
+ totalLabel="Total_Req_Rate"
+ label_sp="\"Request Rate\""
+ met="requests"
+ titleArg="$titleArg (request rate"
+else
+ totalLabel="Total_Data_Rate"
+ label_sp="\"Data Rate\""
+ met="bytes"
+ titleArg="$titleArg (data rate"
+fi
+
+#
+# strings for base plane labels
+#
+basestr_idle="Elapsed time since the last request\nNormalized to $idle seconds"
+if [ $show = request ]
+then
+ basestr_total="Total number of HTTP requests processed by server\nNormalized to $max requests per second"
+ basestr_req="HTTP request rate by response size in bytes\nNormalized to $max hits per second"
+ basestr_type="HTTP request rate by HTTP method\nNormalized to $max hits per second"
+else
+ basestr_total="Total number of bytes processed by server\nNormalized to $max bytes per second"
+ basestr_req="HTTP size rate by response size in bytes\nNormalized to $max bytes per second"
+ basestr_type="HTTP size rate by HTTP method\nNormalized to $max hits per second"
+fi
+
+
+#--- config file has already been created; continue writing to it ---
+#
+
+cat << end-of-file >>$tmp.pmview
+#
+# $prog
+#
+# Servers: $servers
+#
+end-of-file
+
+if $verbose
+then
+ if [ "X$serverList" != X ]
+ then
+ echo "# Matching servers for \"$serverList\": $servers"
+ fi
+fi
+
+if [ $class = size ]
+then
+ titleArg="$titleArg by result size)"
+else
+ titleArg="$titleArg by request type)"
+fi
+
+
+#
+# the real config starts here
+#
+cat << end-of-file >>$tmp.pmview
+
+_scale 1.2
+
+_grid _hide (
+
+ _label 2 0 1 5 _down _large $label_sp
+
+ _bar 0 0 east _col (
+ _metrics (
+ web.perserver.logidletime[$servers] $idle
+ )
+ _metriclabels ( Idle )
+ _colorList ( orange )
+ _baseLabel "$basestr_idle"
+ )
+
+end-of-file
+
+if [ $class = size ]
+then
+ cat << end-of-file >>$tmp.pmview
+
+ _bar 0 2 east _col (
+ _metrics (
+ web.perserver.$met.total[$servers] $max
+ )
+ _metriclabels ( Total )
+ _colorList ( rgbi:0.0/0.88/0.88 )
+ _baseLabel "$basestr_total"
+ )
+
+ _bar 0 4 east _col _groupbyinst (
+ _metrics (
+end-of-file
+
+ if [ $show = request ]
+ then
+ cat <<end-of-file >>$tmp.pmview
+ web.perserver.$met.size.unknown[$servers] $max
+end-of-file
+ fi
+
+ cat << end-of-file >>$tmp.pmview
+ web.perserver.$met.size.gt3m[$servers] $max
+ web.perserver.$met.size.le3m[$servers] $max
+ web.perserver.$met.size.le1m[$servers] $max
+ web.perserver.$met.size.le300k[$servers] $max
+ web.perserver.$met.size.le100k[$servers] $max
+ web.perserver.$met.size.le30k[$servers] $max
+ web.perserver.$met.size.le10k[$servers] $max
+ web.perserver.$met.size.le3k[$servers] $max
+end-of-file
+
+ if [ $show = request ]
+ then
+ cat <<end-of-file >>$tmp.pmview
+ web.perserver.$met.size.zero[$servers] $max
+ )
+ _metriclabels (
+ "?" "> 3M" "1M < 3M" "300K < 1M" "100K < 300K"
+ "30K < 100K" "10K < 30K" "3K < 10K" "0 < 3K" "0K"
+ )
+end-of-file
+ else
+ cat <<end-of-file >>$tmp.pmview
+ )
+ _metriclabels (
+ "> 3M" "1M < 3M" "300K < 1M" "100K < 300K"
+ "30K < 100K" "10K < 30K" "3K < 10K" "0 < 3K"
+ )
+end-of-file
+ fi
+
+ if $showInst
+ then
+ cat <<end-of-file >>$tmp.pmview
+ _instlabels _away ( $servers_sp )
+end-of-file
+ fi
+
+ cat << end-of-file >>$tmp.pmview
+ _colorList (
+ rgbi:1.0/0.35/0.0
+ rgbi:0.6/0.0/0.9
+ rgbi:0.0/1.0/0.0
+ rgbi:1.0/0.5/0.0
+ rgbi:0.65/0.3/1.0
+ rgbi:0.3/1.0/0.3
+ rgbi:1.0/0.65/0.3
+ rgbi:0.8/0.6/1.0
+ rgbi:0.6/1.0/0.6
+ rgbi:1.0/0.8/0.6
+
+ )
+ _baseLabel "$basestr_req"
+ )
+
+end-of-file
+
+else
+ cat << end-of-file >>$tmp.pmview
+
+ _bar 0 2 east _col (
+ _metrics (
+ web.perserver.$met.total[$servers] $max
+ )
+ _metriclabels ( Total )
+ _colorList ( rgbi:1.0/0.5/0.0 )
+ _baseLabel "$basestr_total"
+ )
+
+ _bar 0 4 east _col (
+ _metrics (
+ web.perserver.$met.get[$servers] $max
+ web.perserver.$met.head[$servers] $max
+ web.perserver.$met.post[$servers] $max
+ web.perserver.$met.other[$servers] $max
+end-of-file
+
+ if [ $show = request ]
+ then
+ cat << end-of-file >>$tmp.pmview
+ web.perserver.errors[$servers] $maxerr
+end-of-file
+ fi
+
+ cat << end-of-file >>$tmp.pmview
+ )
+ _metriclabels ( Get Head Post Other Error )
+end-of-file
+
+ if $showInst
+ then
+ cat <<end-of-file >>$tmp.pmview
+ _instlabels _away ( $servers_sp )
+end-of-file
+ fi
+
+ cat << end-of-file >>$tmp.pmview
+ _colorList (
+ rgbi:1.0/1.0/0.0
+ rgbi:0.0/1.0/1.0
+ rgbi:1.0/0.0/1.0
+ rgbi:1.0/1.0/0.6
+ rgbi:0.8/0.0/0.0
+ )
+ _baseLabel "$basestr_type"
+ )
+end-of-file
+
+fi
+
+cat << end-of-file >>$tmp.pmview
+)
+end-of-file
+
+titleArg="$titleArg for Host $host"
+
+$verbose && cat $tmp.pmview
+
+eval $PMVIEW <$tmp.pmview $args -title "'$titleArg'" -xrm "'*iconName: $prog'"
+
+exit
+