diff options
author | Igor Pashev <pashev.igor@gmail.com> | 2014-10-26 12:33:50 +0400 |
---|---|---|
committer | Igor Pashev <pashev.igor@gmail.com> | 2014-10-26 12:33:50 +0400 |
commit | 47e6e7c84f008a53061e661f31ae96629bc694ef (patch) | |
tree | 648a07f3b5b9d67ce19b0fd72e8caa1175c98f1a /src/pmdas/windows/pdhmatch.sh | |
download | pcp-debian.tar.gz |
Debian 3.9.10debian/3.9.10debian
Diffstat (limited to 'src/pmdas/windows/pdhmatch.sh')
-rw-r--r-- | src/pmdas/windows/pdhmatch.sh | 192 |
1 files changed, 192 insertions, 0 deletions
diff --git a/src/pmdas/windows/pdhmatch.sh b/src/pmdas/windows/pdhmatch.sh new file mode 100644 index 0000000..33c2e98 --- /dev/null +++ b/src/pmdas/windows/pdhmatch.sh @@ -0,0 +1,192 @@ +#!/bin/sh +# +# take the output from pdhlist.exe +# - remove hostname +# - collapse known instance domains to a symbolic representation +# - match up against patterns in data.c +# + +#debug# tmp=/var/tmp/$$ +#debug# trap "rm -f $tmp.*; exit 0" 0 1 2 3 15 +tmp=`pwd`/tmp + +# Examples of instance domains to collapse from pdhlist.exe +# output +# +# SQLServer:Buffer Partition(0)\Free pages +# Job Object Details(Winlogon Job 0-57c89/logon.scr)\% User Time +# Job Object Details(Winlogon Job 0-57c89/_Total)\% User Time +# Job Object Details(WmiProviderSubSystemHostJob/wmiprvse)\% User Time +# Job Object Details(WmiProviderSubSystemHostJob/_Total)\% User Time +# [not] Job Object Details(_Total/_Total)\% User Time +# Job Object(WmiProviderSubSystemHostJob)\Current % User Mode Time +# [not] Job Object(_Total)\Current % User Mode Time +# Thread(Idle/0)\Context Switches/sec +# Thread(csrss/0#1)\Context Switches/sec +# LogicalDisk(C:)\% Free Space +# [not] LogicalDisk(_Total)\% Free Space +# Network Interface(Intel[R] PRO_1000 MT Dual Port Network # Connection _2)\Bytes Received/sec +# PhysicalDisk(0 C:)\% Disk Read Time +# [not] PhysicalDisk(_Total)\% Disk Read Time +# Print Queue(Canon LBP-3260 PCL6 on SCRIBE (from LUKE) in session 1)\Add Network Printer Calls +# [not] Print Queue(_Total)\Add Network Printer Calls +# Process(Idle)\% Privileged Time +# [not] Process(_Total)\% Privileged Time +# Processor(0)\% Idle Time +# [not] Processor(_Total)\% Idle Time +# RAS Port(LPT1)\Alignment Errors +# SQLServer:Databases(alice)\Active Transactions +# [not] SQLServer:Databases(_Total)\Active Transactions +# SQLServer:Locks(Database)\Average Wait Time (ms) +# [not] SQLServer:Locks(_Total)\Lock Requests/sec +# Server Work Queues(3)\Active Threads +# SQLServer:Cache Manager(Adhoc Sql Plans)\Cache Hit Ratio +# Terminal Services Session(Console)\% Privileged Time +# + +if [ $# -eq 1 ] +then + cat $1 +elif [ $# -eq 0 ] +then + cat +else + echo "Usage: $0 [output-file-from-pdhlist]" >&2 + exit 1 +fi \ +| dos2unix \ +| sed >$tmp.tmp \ + -e 's/^\\\\[^\]*\\//' \ + -e '/^SQLServer:Buffer Partition(/s/([0-9]*)\\/(<n>)\\/' \ + -e '/^Job Object Details(/{ +/(_Total\//!s/(.*\/_Total)\\/(<job>\/_Total)\\/ +/\/_Total)/!s/(.*\/.*)\\/(<job>\/<?>)\\/ +}' \ + -e '/^Job Object(/{ +/(_Total)/!s/(.*)\\/(<job>)\\/ +}' \ + -e '/^Thread(/{ +s/([^/]*\/[0-9]*)\\/(<name>\/<pid>)\\/ +s/([^/]*\/[0-9]*#[0-9]*)\\/(<name>\/<pid>#<tid>)\\/ +}' \ + -e '/^LogicalDisk(/s/([A-Z]:)\\/(<drive>)\\/' \ + -e '/^Network Interface(/s/([^)]*)\\/(<if>)\\/' \ + -e '/^PhysicalDisk(/s/([0-9][0-9]* [A-Z]:)\\/(<dev>)\\/' \ + -e '/^Print Queue(/{ +/(_Total)/!s/(.*)\\/(<queue>)\\/ +}' \ + -e '/^Process(/{ +/(_Total)/!s/(.*)\\/(<pname>)\\/ +}' \ + -e '/^Processor(/{ +/(_Total)/!s/(.*)\\/(<cpu>)\\/ +}' \ + -e '/^RAS Port(/s/(.*)\\/(<port>)\\/' \ + -e '/^SQLServer:Databases(/{ +/(_Total)/!s/(.*)\\/(<db>)\\/ +}' \ + -e '/^SQLServer:Locks(/{ +/(_Total)/!s/(.*)\\/(<type>)\\/ +}' \ + -e '/^Server Work Queues(/s/(.*)\\/(<queue>)\\/' \ + -e '/^SQLServer:Cache Manager(/s/(.*)\\/(<cache>)\\/' \ + -e '/^Terminal Services Session(/s/(.*)\\/(<tty>)\\/' + +# This step tries to deal with this class of cases ... +# pdhlist reports stuff like +# SQLServer:Locks\Average Wait Time (ms) +# SQLServer:Locks(_Total)\Average Wait Time (ms) +# SQLServer:Locks(*/*#*)\Average Wait Time (ms) +# but the first one is in fact bogus (only the second 2 forms +# can be looked up. +# +sed <$tmp.tmp \ + -e '/^.NET CLR Exceptions\\/d' \ + -e '/^.NET CLR Interop\\/d' \ + -e '/^.NET CLR Jit\\/d' \ + -e '/^.NET CLR Loading\\/d' \ + -e '/^.NET CLR LocksAndThreads\\/d' \ + -e '/^.NET CLR Memory\\/d' \ + -e '/^.NET CLR Remoting\\/d' \ + -e '/^.NET CLR Security\\/d' \ + -e '/^NBT Connection\\/d' \ + -e '/^Paging File\\/d' \ + -e '/^SQLServer:User Settable\\/d' \ + -e '/^Server Work Queues\\/d' \ + -e '/^SQLServer:Buffer Partition\\/d' \ + -e '/^Job Object Details\\/d' \ + -e '/^Job Object\\/d' \ + -e '/^Thread\\/d' \ + -e '/^LogicalDisk\\/d' \ + -e '/^Network Interface\\/d' \ + -e '/^PhysicalDisk\\/d' \ + -e '/^Print Queue\\/d' \ + -e '/^Process\\/d' \ + -e '/^Processor\\/d' \ + -e '/^RAS Port\\/d' \ + -e '/^SQLServer:Databases\\/d' \ + -e '/^SQLServer:Locks\\/d' \ +| LC_COLLATE=POSIX sort \ +| uniq >$tmp.munged + +# extract patterns from PMDA source +# +if [ -f data.c ] +then + sed -n <data.c \ + -e '/"\\\\/{ +s/"[ ]*$// +s/.*"// +s/\\\\/\\/g +s/^\\// +p +}' \ + | sed \ + -e '/^Network Interface(/s/(\*\/\*#\*)\\/(<if>)\\/' \ + -e '/^PhysicalDisk(/s/(\*\/\*#\*)\\/(<dev>)\\/' \ + -e '/^Processor(/s/(\*\/\*#\*)\\/(<cpu>)\\/' \ + -e '/^SQLServer:Locks(/s/(\*\/\*#\*)\\/(<type>)\\/' \ + -e '/^LogicalDisk(/s/(\*\/\*#\*)\\/(<drive>)\\/' \ + | LC_COLLATE=POSIX sort \ + | uniq >$tmp.pmda + +else + echo "Warning: no data.c, cannot match metrics up with PMDA patterns" >&2 + sed -e 's/^/? /' <$tmp.munged +fi + +# match 'em up +# + +comm -23 $tmp.pmda $tmp.munged >$tmp.tmp +if [ -s $tmp.tmp ] +then + echo "============================================" + echo "=== Warning: These current PMDA patterns do NOT match ANY metrics ..." + echo "============================================" + cat $tmp.tmp + echo +fi + +comm -12 $tmp.pmda $tmp.munged >$tmp.tmp +if [ -s $tmp.tmp ] +then + echo "============================================" + echo "=== Metrics supported in the current PMDA ..." + echo "============================================" + cat $tmp.tmp +else + echo "============================================" + echo "=== Warning: The current PMDA patterns match NO metric!" + echo "============================================" +fi + +comm -13 $tmp.pmda $tmp.munged >$tmp.tmp +if [ -s $tmp.tmp ] +then + echo + echo "============================================" + echo "=== Metrics NOT supported in the current PMDA" + echo "============================================" + cat $tmp.tmp +fi |