Port Discovery

Brocade.FCHBA.Monitoring.PortDiscovery (Discovery)

Discovery of all ports across all FC HBAs.

Knowledge Base article:

Summary

Discovery of all ports across all FC HBAs.

Element properties:

TargetBrocade.FCHBA.Monitoring.HBA
EnabledTrue
Frequency14400
RemotableFalse

Object Discovery Details:

Discovered Classes and their attribuets:

Member Modules:

ID Module Type TypeId RunAs 
DS DataSource Microsoft.Windows.TimedScript.DiscoveryProvider Default

Source Code:

<Discovery ID="Brocade.FCHBA.Monitoring.PortDiscovery" Enabled="true" Target="Brocade.FCHBA.Monitoring.HBA" ConfirmDelivery="false" Remotable="true" Priority="Normal">
<Category>Discovery</Category>
<DiscoveryTypes>
<DiscoveryClass TypeID="Brocade.FCHBA.Monitoring.Port">
<Property TypeID="Brocade.FCHBA.Monitoring.Port" PropertyID="PortWWN"/>
</DiscoveryClass>
</DiscoveryTypes>
<DataSource ID="DS" TypeID="Windows!Microsoft.Windows.TimedScript.DiscoveryProvider">
<IntervalSeconds>14400</IntervalSeconds>
<SyncTime/>
<ScriptName>DiscoverHBAPorts.vbs</ScriptName>
<Arguments>$MPElement$ $Target/Id$ $Target/Host/Property[Type="Brocade.FCHBA.Monitoring.Host"]/ImagePath$ $Target/Property[Type="Brocade.FCHBA.Monitoring.HBA"]/SerialNumber$ $Target/Property[Type="System!System.Entity"]/DisplayName$ $Target/Host/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/PrincipalName$ $Target/Host/Property[Type="Brocade.FCHBA.Monitoring.Host"]/HyperVGUID$</Arguments>
<ScriptBody><Script>
Option Explicit
'declare constants
'map event types numbers to friendly names
Const EVENT_TYPE_ERROR = 1
Const EVENT_TYPE_WARNING = 2
Const EVENT_TYPE_SUCCESS = 4
Const MAX_PHYSICALPORTS = 514

Dim objArgs, SourceID, ManagedEntityId, TargetComputer, ImagePath, SerialNumber
Dim objMOMAPI, objWMIService, objDiscoveryData
Dim colobjPorts, objHBAs, AdaptName, strQuery
Dim objPort, objHBA
Dim arrOfInst(97) '2 * maxadapters.
Dim objPortInst, InstanceName
Dim bFoundInstance, Index, portIndex,SystemEntity, portWWN, FabricName
Dim HyperVGUID
Dim objAdapInst,objHBAPortRel

bFoundInstance = True

Set objArgs = WScript.Arguments

If WScript.Arguments.Count &gt; 0 Then
SourceId = objArgs(0)
ManagedEntityId = objArgs(1)
ImagePath = objArgs(2)
SerialNumber = objArgs(3)
AdaptName = objArgs(4)
TargetComputer = objArgs(5)
HyperVGUID = objArgs(6)
End If

Set objMOMAPI = CreateObject("MOM.ScriptAPI")
Set objDiscoveryData = objMOMAPI.CreateDiscoveryData(0, SourceId, ManagedEntityId)

Set objWMIService = GetObject( "winmgmts:\\localhost\root\wmi" )
strQuery = "select * from MSFC_FCAdapterHBAAttributes Where SerialNumber='" + SerialNumber +"'"

Set objHBAs = objWMIService.ExecQuery( strQuery)
If (objHBAs is Nothing) Then
bFoundInstance = False
End If

'Get number of port InstanceNames with the same SerialNumber.
Index = 0
For Each objHBA In objHBAs
arrOfInst(Index) = objHBA.InstanceName
Index = Index + 1
Next

Set colobjPorts = objWMIService.ExecQuery("select * from MSFC_FibrePortHBAAttributes" )

If (colobjPorts is Nothing And bFoundInstance) Then
bFoundInstance = False
End If

portIndex = 0
If (colobjPorts.count &gt; 0 And bFoundInstance) Then
For Each objPort In colobjPorts
If (ChkStrExistsInArray(arrOfInst,objPort.InstanceName,Index,False) = true) Then

'Create HBA Instance and HBA PORT relation object.
Set objAdapInst = objDiscoveryData.CreateClassInstance("$MPElement[Name='Brocade.FCHBA.Monitoring.HBA']$")
Call objAdapInst.AddProperty("$MPElement[Name='Brocade.FCHBA.Monitoring.Host']/ImagePath$", ImagePath)
Call objAdapInst.AddProperty ("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
Call objAdapInst.AddProperty("$MPElement[Name='Brocade.FCHBA.Monitoring.HBA']/SerialNumber$", SerialNumber)
'End of new code.

FabricName = WWNToString(objPort.Attributes.FabricName)'unique to this adapter port.
portWWN = WWNToString(objPort.Attributes.PortWWN)'unique to this adapter port.
SystemEntity = AdaptName + "_Port" + CStr(portIndex)
Set objPortInst = objDiscoveryData.CreateClassInstance("$MPElement[Name='Brocade.FCHBA.Monitoring.Port']$")
'Call objPortInst.AddProperty("$MPElement[Name='Brocade.FCHBA.Monitoring.Host']/ImagePath$", ImagePath)
'Call objPortInst.AddProperty ("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
'Call objPortInst.AddProperty("$MPElement[Name='Brocade.FCHBA.Monitoring.HBA']/SerialNumber$", SerialNumber)

Call objPortInst.AddProperty("$MPElement[Name='MicrosoftSystemCenterVirtualMachineManagerPro2008Library!Microsoft.SystemCenter.VirtualMachineManager.Pro.2008.Base']/Name$", TargetComputer)
Call objPortInst.AddProperty ("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
'Call objPortInst.AddProperty("$MPElement[Name='MicrosoftSystemCenterVirtualMachineManagerPro2008Library!Microsoft.SystemCenter.VirtualMachineManager.Pro.2008.Internal']/Guid$",HyperVGUID)
Call objPortInst.AddProperty("$MPElement[Name='Brocade.FCHBA.Monitoring.Port']/PortWWN$", portWWN)
'Call objPortInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", SystemEntity)

Call objPortInst.AddProperty("$MPElement[Name='Brocade.FCHBA.Monitoring.Port']/UniquePortId$", objPort.UniquePortId)
Call objPortInst.AddProperty("$MPElement[Name='Brocade.FCHBA.Monitoring.Port']/PortFcId$", objPort.Attributes.PortFcId)
Call objPortInst.AddProperty("$MPElement[Name='Brocade.FCHBA.Monitoring.Port']/FabricName$", FabricName)
Call objPortInst.AddProperty("$MPElement[Name='Brocade.FCHBA.Monitoring.Port']/PortSpeed$", objPort.Attributes.PortSpeed)
Call objPortInst.AddProperty("$MPElement[Name='Brocade.FCHBA.Monitoring.Port']/PortState$", objPort.Attributes.PortState)
Call objPortInst.AddProperty("$MPElement[Name='Brocade.FCHBA.Monitoring.Port']/InstanceName$", objPort.InstanceName)
Call objDiscoveryData.AddInstance(objPortInst)

Set objHBAPortRel = objDiscoveryData.CreateRelationshipInstance("$MPElement[Name='Brocade.FCHBA.Monitoring.HBA_PORT_Relation']$")
objHBAPortRel.Source = objAdapInst
objHBAPortRel.Target = objPortInst
Call objDiscoveryData.AddInstance(objHBAPortRel)

'Call objMOMAPI.LogScriptEvent("DiscoverHBAPorts.vbs", 200, 2, "one Port instance added")
portIndex = portIndex + 1
End If
Next
End If

'Call objMOMAPI.LogScriptEvent("DiscoverHBAPorts.vbs", 200, 2, "Completed DiscoverHBAPorts.vbs.")
'Submit the discovery data for processing.
Call objMOMAPI.Return(objDiscoveryData)
WScript.Quit
'----------------------------End Of Main Fn---------------
'Converts WWN to StringWWN
Function WWNToString(arrayWWN)
Dim I
WWNToString = Hex0(arrayWWN(0))
For I = 1 To 7
WWNToString = WWNToString + ":" + Hex0(arrayWWN(I))
Next
End Function

'Returns the hexadecimal string value of input number(as two digits).
Function Hex0(n)
Hex0 = Hex(n)
If (n &lt; &amp;h10) Then Hex0 = "0" + Hex0
End Function
'If str exists then returns true
'If not exists then returns false and adds the string to the array (if bAddTo is true)
'If not exists then returns false and does not add the inputstring to the list(if bAddTo is false)
Function ChkStrExistsInArray(arrayOfStrs(),InputStr,LastItemIndex,bAddTo)
Dim I
ChkStrExistsInArray = False
For I = 0 To LastItemIndex
If (StrComp(LCase(arrayOfStrs(I)),LCase(InputStr)) = 0) Then
ChkStrExistsInArray = true
Exit For
End If
Next
If (ChkStrExistsInArray = False And bAddTo=True) Then
arrayOfStrs(LastItemIndex+1) = InputStr
End If
End Function
</Script></ScriptBody>
<TimeoutSeconds>400</TimeoutSeconds>
</DataSource>
</Discovery>