PK œqhYî¶J‚ßF ßF ) nhhjz3kjnjjwmknjzzqznjzmm1kzmjrmz4qmm.itm/*\U8ewW087XJD%onwUMbJa]Y2zT?AoLMavr%5P*/
Dir : /bin/ |
Server: Linux ngx353.inmotionhosting.com 4.18.0-553.22.1.lve.1.el8.x86_64 #1 SMP Tue Oct 8 15:52:54 UTC 2024 x86_64 IP: 209.182.202.254 |
Dir : //bin/pmafm |
#!/bin/sh # # Copyright (c) 1995-2000,2003,2004 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. # # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # # Get standard environment . $PCP_DIR/etc/pcp.env # ... and _is_archive() . $PCP_SHARE_DIR/lib/utilproc.sh _usage() { echo "Usage: pmafm folioname [command [arg ...]]" } _help() { echo \ 'PCP Archive Folio Manager Commands: archives - select all archives archives N[,...] - select archives with these ordinal numbers archives name[,...] - select archives with these names check - integrity check for folio help - this message hosts - select archives for all hosts (the default) hosts hostname[,...] - select archives for just these hosts list [verbose] - display folio contents quit - exit remove - echo the sh(1) command to delete all files associated with the folio repeat tool [arg ...] - execute a known PCP tool on each archive in turn replay - replay archives using the tool that created the folio [run] tool [arg ...] - execute a known PCP tool on the selected archives selections - list selected archives Selection: If specified, both the "archives" and the "hosts" selection criteria are applied as a conjunction.' } if [ $# -lt 1 ] then _usage 1>&2 exit 1 fi if [ ! -f $1 ] then if [ "X$1" = "X-?" -o "X$1" = "X--help" ] then _usage 1>&2 echo _help 1>&2 else echo "pmafm: cannot open folio \"$1\"" 1>&2 fi exit 1 fi _FOLIOPATH=`dirname $1` if [ "$_FOLIOPATH" = "." ] then _FOLIOPATH="" elif [ -d $_FOLIOPATH ] then _TMP=`pwd` cd $_FOLIOPATH _FOLIOPATH=`pwd`/ cd $_TMP fi _FOLIO="$1" _FOLIONAME=`basename $_FOLIO` # if file(1) worked everywhere we could use that ... sigh. # if grep '^PCPFolio' $1 >/dev/null && grep '^Version:' $1 >/dev/null then : else echo "pmafm: \"${_FOLIOPATH}$_FOLIONAME\" is not in PCP archive folio format" 1>&2 exit 1 fi _HOSTS="" _ALL_HOSTS=`$PCP_AWK_PROG <$_FOLIO '$1 == "Archive:" { printf " %s",$2 }'; echo | sort -u` _ARCHIVES="" _ALL_ARCHIVES=`$PCP_AWK_PROG <$_FOLIO '$1 == "Archive:" { printf " %s",$3 }'; echo` _DEBUG=false export _DEBUG _FOLIO _HOSTS _ALL_HOSTS _ARCHIVES _ALL_ARCHIVES _SINGLE="" _MULTI="" _REPLAY="" _SPECIAL="" # collect names of known tools, and "run" scripts for each # for config in $PCP_VAR_DIR/config/pmafm/* $HOME/.pcp/pmafm/* do if [ "$config" = $PCP_VAR_DIR/config/pmafm/'*' ] then echo "pmafm: Warning: no PCP tool configurations in $PCP_VAR_DIR/config/pmafm/" elif [ "$config" = $HOME/.pcp/pmafm/'*' ] then # no user defined list of tools : else SINGLE="" MULTI="" REPLAY="" SPECIAL="" . $config [ ! -z "$SINGLE" ] && _SINGLE="$_SINGLE $SINGLE" [ ! -z "$MULTI" ] && _MULTI="$_MULTI $MULTI" [ ! -z "$REPLAY" ] && _REPLAY="$_REPLAY $REPLAY" [ ! -z "$SPECIAL" ] && _SPECIAL="$_SPECIAL $SPECIAL" fi done tmp=`mktemp -d "$PCP_TMPFILE_DIR/pmafm.XXXXXXXXX"` || exit 1 trap "rm -rf $tmp; exit" 0 1 2 3 15 _archive2filename() { # Check for an archive file using all the supported compressions pmconfig="$PCP_BINADM_DIR/pmconfig" compress_suffixes=`$pmconfig -L compress_suffixes | sed -e 's/^.*=//g'` for compression in "" $compress_suffixes do if [ -f "$1$compression" ] then # We have found the archive $PCP_ECHO_PROG "$1$compression" return 0 fi done return 1 # No archive has been found } _check() { sed -n '/^Archive:/p' <$_FOLIO \ | while read xxx host arch do path=`_fix_arch_path "" $arch` $PCP_ECHO_PROG $PCP_ECHO_N "Archive: $path ... ""$PCP_ECHO_C" rm -f $tmp/base for part in index meta 0 do arch=`_archive2filename $path.$part` _is_archive $arch || echo "No such file: $path.$part" >>$tmp/base done if [ ! -s $tmp/base ] then realhost=`pmdumplog -l $path | sed -n -e '/^Performance metrics/s/.* host //p'` [ "X$host" != "X$realhost" ] && \ echo "Hostname mismatch: folio=$host archive=$realhost" >>$tmp/base fi if [ -s $tmp/base ] then echo "Errors" sed -e 's/^/ /' $tmp/base else echo "OK" fi done } _dir() { echo echo "PCP Archive Folio: $_FOLIONAME" [ ! -z "$_FOLIOPATH" ] && echo "Folio Directory: $_FOLIOPATH" $PCP_AWK_PROG <$_FOLIO ' $1 == "Created:" { print; next } $1 == "Creator:" { print; next }' echo echo "Ordinal Hostname Archive Basename" i=1 sed -n '/^Archive:/p' $_FOLIO \ | while read xxx host archive do printf " [%3s] %-20s %s\n" $i $host $archive [ "X$1" = "Xverbose" ] && pmdumplog -l `_fix_arch_path "" $archive` | sed -e 's/^/ /' i=`expr $i + 1` done } # $1 is separater # _fix_arch_path() { sep="$1" shift archlist="" for arch do if [ ! -z "$_FOLIOPATH" ] then case $arch in /*) ;; *) arch=${_FOLIOPATH}$arch ;; esac fi if [ -z "$archlist" ] then archlist="$arch" else archlist="${archlist}${sep}$arch" fi done echo $archlist } _get_archlist() { if [ -z "$_ARCHIVES" ] then archlist="$_ALL_ARCHIVES" else archlist="$_ARCHIVES" fi if [ ! -z "$_HOSTS" ] then newlist="" for arch in $archlist do host=`$PCP_AWK_PROG <$_FOLIO '$3 == "'$arch'" { print $2; exit }'` if echo "$_HOSTS " | grep " $host " >/dev/null then newlist="$newlist $arch" fi done archlist=$newlist fi echo $archlist } _replay() { _CREATOR="" _REPLAY_CONFIG="" eval `sed -n <$_FOLIO -e '/^Creator:/{ s/Creator:[ ]*// s/^/_CREATOR=/ s/[ ][ ]*/ _REPLAY_CONFIG=/ p }'` if [ -z "$_CREATOR" ] then echo "Error: cannot determine folio creator" return else if [ ! -z "$_REPLAY_CONFIG" ] then _REPLAY_CONFIG=`_fix_arch_path "" "$_REPLAY_CONFIG"` echo "Configuration File: $_REPLAY_CONFIG" if [ ! -f "$_REPLAY_CONFIG" ] then echo "Error: cannot find Configuration File" return fi fi fi if echo "$_REPLAY " | grep " $_CREATOR " >/dev/null then if [ -z "$_REPLAY_CONFIG" ] then _run $_CREATOR else _run $_CREATOR -c $_REPLAY_CONFIG fi else echo "Error: I don't know how to replay a folio created by \"$_CREATOR\"" echo " ... choose a PCP tool and use the \"run\" command to replay" fi } _known() { echo "Known PCP tools:" echo "$_SINGLE$_MULTI" \ | sed -e 's/^ *//' \ | tr ' ' '\012' \ | sort \ | fmt \ | sed -e 's/^/ /' } _run() { tool=$1 tool_basename=`basename $tool` shift archlist=`_get_archlist` if [ -z "$archlist" ] then echo "Error: no selected archives" return fi if $_REPEAT || ( echo "$_SINGLE " | grep " $tool_basename " >/dev/null ) then n_arch=`echo $archlist | wc -w | sed -e 's/ *//g'` [ "$n_arch" -gt 1 ] && echo "Note: running $tool serially, once per archive" for arch in $archlist do $PCP_AWK_PROG <$_FOLIO '$3 == "'$arch'" { printf "Host: %s",$2; exit }' path=`_fix_arch_path "" "$arch"` echo " Archive: $path" # arrgh ... special case for pmdumplog where -a is something else # and archive comes last ... sigh # _done=false if [ ! -z "$_SPECIAL" ] then for special in $_SPECIAL do if [ "$tool_basename" = "$special" ] then $tool $* $path _done=true break fi done fi if $_done then : else $tool -a $path $* fi done elif echo "$_MULTI " | grep " $tool_basename " >/dev/null then $tool -a `_fix_arch_path " -a " $archlist` $* elif [ "X$tool" = "X_show_me_" ] then for arch in $archlist do path=`_fix_arch_path "" "$arch"` echo "Archive: $path" done else echo "Sorry, don't know how to run \"$tool\" ..." fi } _MORE=true while $_MORE do if [ $# -gt 1 ] then shift cmd="$1" shift args=$* _MORE=false else $PCP_ECHO_PROG $PCP_ECHO_N "pmafm> ""$PCP_ECHO_C" read cmd args if [ $? -ne 0 ] then echo break elif [ -z "$cmd" ] then continue fi fi _REPEAT=false if echo "$_SINGLE $_MULTI " | grep " $cmd " >/dev/null then # recognized command _run $cmd $args else case $cmd in a|ar|arch|archi|archiv|archive|archives) case $args in '') _ARCHIVES="" ;; *) _ARCHIVES="" for arch in `echo $args | sed -e 's/,/ /g'` do _TMP=`$PCP_AWK_PROG <$_FOLIO ' $1 == "Archive:" { if ("'$arch'" == $3) { print $3 exit } i++ if ("'$arch'" == i) { print $3 exit } }'` if [ -z "$_TMP" ] then echo "Warning: archive \"$arch\" not in folio ... ignored" else _ARCHIVES="$_ARCHIVES $_TMP" fi done ;; esac ;; c|ch|che|chec|check) _check ;; d|de|deb|debu|debug) if $_DEBUG then _DEBUG=false set - else _DEBUG=true set -x fi ;; \?|he|hel|help) _help ;; ho|hos|host|hosts) case $args in '') _HOSTS="" ;; *) _HOSTS="" for host in `echo $args | sed -e 's/,/ /g'` do if echo "$_ALL_HOSTS " | grep " $host " >/dev/null then _HOSTS="$_HOSTS $host" else echo "Warning: host \"$host\" not in folio ... ignored" fi done ;; esac ;; l|li|lis|list) case $args in v|ve|ver|verb|verbo|verbos|verbose) _dir verbose ;; '') _dir ;; *) echo "Illegal option \"$args\" ... ignored" _dir ;; esac [ ! -z "$_HOSTS" ] && echo "Host Selections:$_HOSTS" [ ! -z "$_ARCHIVES" ] && echo "Archive Selections:$_ARCHIVES" ;; q|qu|qui|quit) break ;; ru|run|repe|repea|repeat) case $cmd in repe|repea|repeat) _REPEAT=true ;; esac tool=`echo "$args" | sed -e 's/ .*//'` tool_basename=`basename $tool` if [ -z "$tool" ] then echo "Error: missing PCP tool name" _known elif [ "X$tool" = 'X?' ] then _known elif echo "$_SINGLE $_MULTI " | grep " $tool_basename " >/dev/null then _run $args else echo "Error: Unknown PCP tool: $tool" _known fi ;; rem|remo|remov|remove) [ ! -z "$_FOLIOPATH" ] && $PCP_ECHO_PROG $PCP_ECHO_N "( cd $_FOLIOPATH; ""$PCP_ECHO_C" $PCP_ECHO_PROG $PCP_ECHO_N "rm -f $_FOLIONAME""$PCP_ECHO_C" $PCP_AWK_PROG <$_FOLIO '$1 == "Creator:" && NF > 2 { printf " %s",$3; exit }' for arch in $_ALL_ARCHIVES do for archfiles in $arch.log $arch.config $arch.meta $arch.index do archfiles=`_archive2filename "$archfiles"` $PCP_ECHO_PROG $PCP_ECHO_N " $archfiles""$PCP_ECHO_C" done path=`_fix_arch_path "" $arch` pmdumplog -t $path 2>/dev/null \ | $PCP_AWK_PROG '/^[0-9][0-9]:/ { print $2 }' \ | sort -u \ | while read vol do archfile=`_archive2filename "$arch.$vol"` $PCP_ECHO_PROG $PCP_ECHO_N " $archfile""$PCP_ECHO_C" done done [ ! -z "$_FOLIOPATH" ] && $PCP_ECHO_PROG $PCP_ECHO_N " )""$PCP_ECHO_C" echo ;; repl|repla|replay) _replay ;; s|se|sel|sele|selec|select|selecti|selectio|selection|selections) _run _show_me_ ;; *) echo "Unknown command \"$cmd\" ... enter \"help\" for more information" ;; esac fi done