This is for WPAR monitoring shell script, earlier opened thread was closed, had to open a new thread, as suggested I have used script as below, But am trying to get the output in below format, need suggestions with it. Below is the lswpar output, required output format.
Script code:
lswpar | awk '
/^Name/ { next; }
/^---/ { next; }
{ state[$2] = state[$2] $1 " "; }
END {
printf( "==== WPAR Status Check =====\n" );
printf( "**** WPAR state Active:\n\t%s\n\n", state["A"] );
printf( "**** WPAR state Defined/Transition/broken:\n\t%s %s %s\n", state["D"], state["T"], state["B"] );
}
' | mail -s "WPAR `hostname` Server monitoring Status of Client WPARs" unix_support@xyz.com
Current Mail Output from script:
==== WPAR Status Check =====
**** WPAR state A-Active:
usprd02 usprd03
**** WPAR state D-Defined/T-Transition/B-broken:
usprd04 usprd05 usprd06
awk '
/^Name/ { next; }
/^---/ { next; }
{
state[$2] = state[$2] $1 " ";
if( $2 == "A" )
acount++;
else
others++;
}
END {
printf( "==== WPAR Status Check =====\n" );
printf( "**** WPAR state Active:\n\t%s\n", state["A"] );
printf( "\t%d WPAR state A-Active\n\n", acount );
printf( "**** WPAR state Defined/Transition/broken:\n\t%s %s %s\n", state["D"], state["T"], state["B"] );
printf( "\t%d WPARs are in Defined/Transition/Broken state\n", others );
}
'
I assume the output from the mail you posted is correct (all were active), and that you're not suggesting that the script isn't putting out incorrect lists; you were only looking to have the additional count information added to the output.
Not quite the way to get date in. From inside of awk you cannot use backquotes like that. This is one way which should work with even older awks. I haven't used an AIX system since about 2001, and then only briefly, so I'm not sure what awk you have installed and what it supports.
lpar-command | awk '
/^Name/ { next; }
/^---/ { next; }
{
state[$2] = state[$2] $1 " ";
if( $2 == "A" )
acount++;
else
others++;
}
END {
printf( "==== WPAR Status Check =====\n" );
printf( "==== %s ====\n", date );
printf( "**** WPAR state Active:\n\t%s\n", state["A"] );
printf( "\t%d WPAR state A-Active\n\n", acount );
printf( "**** WPAR state Defined/Transition/broken:\n\t%s %s %s\n", state["D"], state["T"], state["B"] );
printf( "\t%d WPARs are in Defined/Transition/Broken state\n", others );
}
' date="$(date)" |mail-command
If $(date) doesn't work (I did assume you're using a modern kshell or bash) replace with `date` .
The way this works is to execute the date command in the shell, and supply that to awk as a variable. The original (or very early) awk specification allowed for variables to be defined like this after the programme, and before the list of input files (if any).
Below script perfectly works, giving below mail output. I want to make the script mail only if there are any D-Defined/T-Transition/B-Broken State WPARs and also to copy the output generated during monitoring to a temporary log file, which gets cleaned up every week. Need your suggestions.
lpar-command | awk '
/^Name/ { next; }
/^---/ { next; }
{
state[$2] = state[$2] $1 " ";
if( $2 == "A" )
acount++;
else
others++;
}
END {
printf( "==== WPAR Status Check =====\n" );
printf( "==== %s ====\n", date );
printf( "**** WPAR state Active:\n\t%s\n", state["A"] );
printf( "\t%d WPAR state A-Active\n\n", acount );
printf( "**** WPAR state Defined/Transition/broken:\n\t%s %s %s\n", state["D"], state["T"], state["B"] );
printf( "\t%d WPARs are in D-Defined/T-Transition/B-Broken state\n", others );
}
' date="$(date)" |mail-command