LiebermanSoftware.ERPMMP.DBProbeActionModuleType

LiebermanSoftware.ERPMMP.DBProbeActionModuleType (ProbeActionModuleType)

Element properties:

TypeProbeActionModuleType
IsolationAny
AccessibilityInternal
RunAsDefault
OutputTypeSystem.PropertyBagData

Member Modules:

ID Module Type TypeId RunAs 
PassThrough ProbeAction System.PassThroughProbe Default
Script ProbeAction Microsoft.Windows.ScriptPropertyBagProbe Default

Source Code:

<ProbeActionModuleType ID="LiebermanSoftware.ERPMMP.DBProbeActionModuleType" Accessibility="Internal" Batching="false" PassThrough="false">
<Configuration>
<xsd:element minOccurs="1" default="300" name="TimeoutSeconds" type="xsd:integer"/>
<xsd:element minOccurs="1" name="DBSource" type="xsd:string"/>
<xsd:element minOccurs="1" name="DBName" type="xsd:string"/>
<xsd:element minOccurs="1" name="DBPercent" default="90" type="xsd:integer"/>
<xsd:element minOccurs="1" name="SQLUserName" type="xsd:string"/>
<xsd:element minOccurs="1" name="SQLPassword" type="xsd:string"/>
</Configuration>
<ModuleImplementation Isolation="Any">
<Composite>
<MemberModules>
<ProbeAction ID="PassThrough" TypeID="System!System.PassThroughProbe"/>
<ProbeAction ID="Script" TypeID="Windows!Microsoft.Windows.ScriptPropertyBagProbe">
<ScriptName>DBProbeAction.vbs</ScriptName>
<Arguments>"$Config/DBSource$" "$Config/DBName$" $Config/DBPercent$</Arguments>
<ScriptBody><Script><![CDATA[
Const adOpenStatic = 3
Const adLockOptimistic = 3
SetLocale("en-us")

Function GenerateConnectionStr (server, db)
SecureInputStr = wscript.stdin.readline()
if (len(SecureInputStr) < 6) then
GenerateConnectionStr = "Provider=SQLOLEDB;Data Source='" & DBSource & "';Trusted_Connection=Yes;Initial Catalog='" + DBName + "';"
else
a = split(SecureInputStr, """ """)
UserName = right(a(0), len(a(0)) - 1)
Password = left(a(1), len(a(1)) - 1)
GenerateConnectionStr = "Provider=SQLOLEDB;Data Source='" & DBSource & "';Initial Catalog='" + DBName + "';" + "User Id='" + username + "';Password='" + password + "';"
end if
end Function


Function GetDBAutoGrowth(Connection, api)
On error resume next
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Open GenerateConnectionStr(DBSource, DBName)
Set objRecordSet = CreateObject("ADODB.Recordset")
objRecordSet.Open "select * from sysfiles", Connection, adOpenStatic, adLockOptimistic

if err.number <> 0 then
Set oBag = api.CreatePropertyBag()
oBag.AddValue "State" , "ERROR"
oBag.AddValue "DBServer" , DBSource
oBag.AddValue "DBName" , DBName
oBag.AddValue "Description" , Description
oBag.AddValue "Error Number" , err.number
oBag.AddValue "Error Description" , err.Description
api.AddItem oBag
api.ReturnItems
wscript.quit
end if

do until objRecordSet.EOF
growth = cint(objRecordSet("growth"))
max_size = clng(objRecordSet("maxsize"))
size = cint(objRecordSet("size"))
if clng(objRecordSet("status")) - 1048576 >= 0 then
is_percent_growth = 1
else
is_percent_growth = 0
end if

statusstr = statusstr + "File Name = " + objRecordSet("name") + "; "
statusstr = statusstr + "Current Size (KB) = " + cstr(size * 8) + "; "

if growth > 0 then
if is_percent_growth <> 0 then
statusstr = statusstr + "Grow By " + cstr(growth) + " percent; "
else
statusstr = statusstr + "Grow By " + cstr(growth * 8) + " KB; "
end if

if max_size = -1 then
statusstr = statusstr + "File will grow until the disk is full; "
else
statusstr = statusstr + "Max Size (KB) = " + cstr(max_size * 8)
percent = cdbl(size) / cdbl(max_size) * 100
if percent > DbPercent then
alert = true
alertstr = alertstr + "Database File " + objRecordSet("name") + " is " + cstr(percent) + " percent full; "
end if
end if
else
alert = true
alertstr = alertstr + "Database File " + objRecordSet("name") + " - No growth is allowed; "
end if
statusstr = statusstr + "."
objRecordSet.movenext
loop
objRecordset.Close
objConnection.Close
if alert = true then
Set oBag = api.CreateropertyBag()
oBag.AddValue "State" , "ERROR"
oBag.AddValue "DBServer" , DBSource
oBag.AddValue "DBName" , DBName
oBag.AddValue "Description" , Description
oBag.AddValue "Autogrowth" , statusstr
oBag.AddValue "Alert" , alertstr
api.AddItem oBag
api.ReturnItems
wscript.quit
end if

End Function

time1 = now()

Set objParameters = WScript.Arguments
DBSource = objParameters(0)
DBName = objParameters(1)
DbPercent = cint(objParameters(2))

Set oAPI = CreateObject("MOM.ScriptAPI")

if DBSource = "" and DBName = "" then
Set oBag = oAPI.CreatepropertyBag()
oBag.AddValue "State" , "GOOD"
oAPI.AddItem oBag
oAPI.ReturnItems
wscript.quit
end if

GetDBAutoGrowth objConnection, oAPI
Set oBag = oAPI.CreatepropertyBag()
oBag.AddValue "State" , "GOOD"
oAPI.AddItem oBag
oAPI.ReturnItems

oAPI.logscriptevent "ERPM - DBProbe", 205, 4, "total = " + cstr(DateDiff("s", time1, now)) + " seconds"

]]></Script></ScriptBody>
<SecureInput>"$Config/SQLUserName$" "$Config/SQLPassword$"</SecureInput>
<TimeoutSeconds>$Config/TimeoutSeconds$</TimeoutSeconds>
</ProbeAction>
</MemberModules>
<Composition>
<Node ID="Script">
<Node ID="PassThrough"/>
</Node>
</Composition>
</Composite>
</ModuleImplementation>
<OutputType>System!System.PropertyBagData</OutputType>
<TriggerOnly>true</TriggerOnly>
</ProbeActionModuleType>