'*************************************************************************** ' MOM Script ' ' Name: Check for Percentage Increase ' ' Function: Checks for a percentage change between sampled measures of a ' performance counter. Issues a warning or error event if change ' exceeds specified value. ' ' Parameters: Warning Level: Percentage difference to generate a warning event. ' Error Level: Percentage difference to generate an error event. ' ' Notes: Specify negative parameter values to indicate a percentage drop in a measure. ' Parameter values should be in whole numbers as opposed to decimals (eg. 50 = 50%). ' ' Operation: Script must be usd a response to a performance rule. The rule defines the counter ' that will be sampled. The script requires no modification for different counters. ' '*************************************************************************** '========= Constants Const EVENT_TYPE_SUCCESS = 0 Const EVENT_TYPE_ERROR = 1 Const EVENT_TYPE_WARNING = 2 Const EVENT_TYPE_INFORMATION = 4 Const EVENT_TYPE_AUDITSUCCESS = 8 Const EVENT_TYPE_AUDITFAILURE = 16 '========= Setup Objects and Parameters Set objPerfData = ScriptContext.PerfData Set objScriptState = ScriptContext.GetScriptState Set objParams = ScriptContext.Parameters numWarningLevel = CDbl(objParams.Get("WarningLevel")) numErrorLevel = CDbl(objParams.Get("ErrorLevel")) numMininumDelta = CDbl(objParams.Get("MinimumDelta")) '========== Setup the state variable and assign its value. strSetName = "Perf" strVarName = objPerfData.ObjectName & ": " & objPerfData.CounterName & ": " & objPerfData.InstanceName Set objVarSet = objScriptState.GetSet(strSetName) numLastValue = objVarSet.get(strVarName) numCurrentValue = objPerfData.Value ScriptContext.Echo "Var Name: " & strVarName ScriptContext.Echo "Last Value: " & numLastValue ScriptContext.Echo "Current Value: " & numCurrentValue '========== Check for minimum and calculate percentage intDelta = numCurrentValue - numLastValue If numLastValue = 0 Or Abs(intDelta) < intMinimumDelta Then numPctg = 0 Else numPctg = intDelta / numLastValue * 100 End If strCommonMessage = "The counter " & strVarName & " experienced a " & _ FormatNumber(numPctg,1) & "% change between samples. " & vbcrlf & vbcrlf & _ "Last Sample: " & numLastValue & vbcrlf & _ "Current Sample: " & numCurrentValue & vbcrlf & _ "Percentage Change: " & FormatNumber(numpctg,1) & vbcrlf & vbcrlf & _ "Warning Level: " & numWarningLevel & vbcrlf & _ "Error Level: " & numErrorLevel '========== Test measured value and create event. If numWarningLevel < 0 Then If numPctg < numErrorLevel Then CreateEvent strVarName,"Performance Percentage Threshold",EVENT_TYPE_ERROR,202,strCommonMessage Elseif numPctg < numWarningLevel Then CreateEvent strVarName,"Performance Percentage Threshold",EVENT_TYPE_WARNING,201,strCommonMessage End If Else If numPctg > numErrorLevel Then CreateEvent strVarName,"Performance Percentage Threshold",EVENT_TYPE_ERROR,202,strCommonMessage Elseif numPctg > numWarningLevel Then CreateEvent strVarName,"Performance Percentage Threshold",EVENT_TYPE_WARNING,201,strCommonMessage End If End If '========== Save value for next execution. objVarSet.put strVarName,numCurrentValue objScriptState.SaveSet strSetName,objVarSet '************************************************************************************************** ' Sub: CreateEvent ' Purpose: Creates a MOM event ' Returns: None '************************************************************************************************** Sub CreateEvent(strSource,strCategory,intType,intNumber,strMessage) Set objEvent = ScriptContext.CreateEvent objEvent.EventSource = strSource objEvent.Category = strCategory objEvent.EventType = intType objEvent.EventNumber = intNumber objEvent.Message = strMessage ScriptContext.Submit objEvent End Sub