Sub GetBAMRuntimeComponents()
Dim objAPI, objDiscoveryData
Set objAPI = CreateObject("MOM.ScriptAPI")
Set objDiscoveryData = objAPI.CreateDiscoveryData(0, SourceId, ManagedEntityId)
if Not IsNull(BAMDbName) and Not IsNull(BAMDbServerName) then
Dim defaultConnStr
defaultConnStr = "Server=" & BAMDbServerName & ";Database=" & BAMDbName & ";Trusted_Connection=yes"
CreateObjectsAndRelations defaultConnStr, objAPI, objDiscoveryData
end if
Call objAPI.Return(objDiscoveryData)
End Sub
Function CreateObjectsAndRelations(defaultConnStr, byRef objAPI, byRef objDiscoveryData)
Dim ObjError
Set ObjError = New Error
Dim cnADOConnection
Set cnADOConnection = MomCreateObject("ADODB.Connection")
cnADOConnection.Provider = "SQLNCLI11"
cnADOConnection.ConnectionTimeout = 15
ObjError.Clear
On Error Resume Next
cnADOConnection.Open defaultConnStr
ObjError.Save
On Error Goto 0
If 0 <> Err.number then
CreateObjectsAndRelations = BAM_DISCOVERY_CONNECT_FAILURE
Exit Function
End If
Dim objResults
ObjError.Clear
On Error Resume Next
Set objResults = cnADOConnection.Execute("select * from bam_Metadata_Properties bmp with (NoLock) where bmp.Scope = 'AnalysisDatabase' or bmp.Scope = 'StarSchemaDatabase' or bmp.Scope = 'Alert'")
ObjError.Save
On Error Goto 0
If ObjError.Number <> 0 Then
CreateObjectsAndRelations = BAM_DISCOVERY_QUERY_FAILURE
If (objResults <> null) Then objResults.Close
Exit Function
End If
Dim AnalysisDb, AnalysisDbServer
Dim StarSchemaDb, StarSchemaDbServer
Dim AlertsServiceName, AlertsServer
AnalysisDb = null
AnalysisDbServer = null
AlertsServiceName = null
AlertsServer = null
Do While Not objResults.EOF
if CStr(objResults(0)) = "AnalysisDatabase" then
if CStr(objResults(1)) = "DatabaseName" then
AnalysisDb = CStr(objResults(2))
else
AnalysisDbServer = CStr(objResults(2))
end if
else
if CStr(objResults(0)) = "StarSchemaDatabase" then
if CStr(objResults(1)) = "DatabaseName" then
StarSchemaDb = CStr(objResults(2))
else
StarSchemaDbServer = CStr(objResults(2))
end if
else
if CStr(objResults(0)) = "Alert" then
if CStr(objResults(1)) = "InstanceDatabaseName" then
AlertsServiceName = "NS$" & CStr(objResults(2))
else
' Important: The properties 'DistributorServerName', 'GeneratorServerName'
' and 'ProviderServerName' are all same for OOB BAM alerts configuration as
' the components corresponding to these run under a single alerts service.
' There is a scale-out scenario where these components can be different but
' in that case these properties are not updated in the bam_Metadata_Properties
' table. So currently only OOB scenario will work.
if CStr(objResults(1)) = "DistributorServerName" then
AlertsServer = CStr(objResults(2))
end if
end if
end if
end if
end if
objResults.MoveNext
Loop
cnADOConnection.Close
if Not IsNull(AnalysisDb) and Not IsNull(AnalysisDbServer) then
Set oBAMAnalysis = objDiscoveryData.CreateClassInstance("$MPElement[Name='Microsoft.BizTalk.Server.2016.BAMAnalysis']$")
call oBAMAnalysis.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", ComputerName)
call oBAMAnalysis.AddProperty("$MPElement[Name='Microsoft.BizTalk.Server.2016.BAMRuntime']/BAMPrimaryImportDbName$", BAMDbName)
call oBAMAnalysis.AddProperty("$MPElement[Name='Microsoft.BizTalk.Server.2016.BAMRuntime']/BAMPrimaryImportDbServerName$", BAMDbServerName)
call oBAMAnalysis.AddProperty("$MPElement[Name='Microsoft.BizTalk.Server.2016.BAMAnalysis']/BAMAnalysisDbName$", AnalysisDb)
call oBAMAnalysis.AddProperty("$MPElement[Name='Microsoft.BizTalk.Server.2016.BAMAnalysis']/BAMAnalysisDbServerName$", AnalysisDbServer)
call oBAMAnalysis.AddProperty("$MPElement[Name='Microsoft.BizTalk.Server.2016.BAMAnalysis']/BAMStarSchemaDbName$", StarSchemaDb)
call oBAMAnalysis.AddProperty("$MPElement[Name='Microsoft.BizTalk.Server.2016.BAMAnalysis']/BAMStarSchemaDbServerName$", StarSchemaDbServer)
call objDiscoveryData.AddInstance(oBAMAnalysis)
CreateRelationShip objDiscoveryData, oBAMRuntime, oBAMAnalysis, "$MPElement[Name='Microsoft.BizTalk.Server.2016.BAMRuntimeHostsBAMAnalysis']$"
end if
if Not IsNull(AlertsServiceName) and Not IsNull(AlertsServer) then
Set oBAMAlerts = objDiscoveryData.CreateClassInstance("$MPElement[Name='Microsoft.BizTalk.Server.2016.BAMAlerts']$")
call oBAMAlerts.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", ComputerName)
call oBAMAlerts.AddProperty("$MPElement[Name='Microsoft.BizTalk.Server.2016.BAMRuntime']/BAMPrimaryImportDbName$", BAMDbName)
call oBAMAlerts.AddProperty("$MPElement[Name='Microsoft.BizTalk.Server.2016.BAMRuntime']/BAMPrimaryImportDbServerName$", BAMDbServerName)
call oBAMAlerts.AddProperty("$MPElement[Name='Microsoft.BizTalk.Server.2016.BAMAlerts']/BAMAlertsServiceName$", AlertsServiceName)
call oBAMAlerts.AddProperty("$MPElement[Name='Microsoft.BizTalk.Server.2016.BAMAlerts']/BAMAlertsServerName$", AlertsServer)
call objDiscoveryData.AddInstance(oBAMAlerts)
CreateRelationShip objDiscoveryData, oBAMRuntime, oBAMAlerts, "$MPElement[Name='Microsoft.BizTalk.Server.2016.BAMRuntimeHostsBAMAlerts']$"
end if
End Function
Function CreateRelationShip(byRef objDiscoveryData, SourceObject, TargetObject, strRelationShipClassId)
Dim objRelation
Set objRelation = objDiscoveryData.CreateRelationshipInstance(strRelationShipClassId)
objRelation.Source = SourceObject
objRelation.Target = TargetObject
objDiscoveryData.AddInstance objRelation
End Function
Function MomCreateObject(ByVal sProgramId)
Dim ObjError
Set ObjError = New Error
On Error Resume Next
Set MomCreateObject = CreateObject(sProgramId)
ObjError.Save
On Error Goto 0
If ObjError.Number <> 0 Then WScript.Quit
End Function
Class Error
Private m_lNumber
Private m_sSource
Private m_sDescription
Private m_sHelpContext
Private m_sHelpFile
Public Sub Save()
m_lNumber = Err.number
m_sSource = Err.Source
m_sDescription = Err.Description
m_sHelpContext = Err.HelpContext
m_sHelpFile = Err.helpfile
End Sub
Public Sub Raise()
Err.Raise m_lNumber, m_sSource, m_sDescription, m_sHelpFile, m_sHelpContext
End Sub
Public Sub Clear()
m_lNumber = 0
m_sSource = ""
m_sDescription = ""
m_sHelpContext = ""
m_sHelpFile = ""
End Sub
Public Default Property Get Number()
Number = m_lNumber
End Property
Public Property Get Source()
Source = m_sSource
End Property
Public Property Get Description()
Description = m_sDescription
End Property
Public Property Get HelpContext()
HelpContext = m_sHelpContext
End Property
Public Property Get HelpFile()
HelpFile = m_sHelpFile
End Property
End Class </Script></ScriptBody>
<TimeoutSeconds>$Config/TimeoutSeconds$</TimeoutSeconds>
</DataSource>
</MemberModules>
<Composition>
<Node ID="DataSource"/>
</Composition>
</Composite>
</ModuleImplementation>
<OutputType>System!System.Discovery.Data</OutputType>
</DataSourceModuleType>