Discovery: FAST Search Server hosted classes

Microsoft.FASTSearch.MP.Discovery.SearchNodeHosted (Discovery)

Discover service instances using a script that parses etc\NodeConf.xml.

Knowledge Base article:

Summary

This rule discovers FAST Search Server 2010 for SharePoint service instances using a script that parses etc\NodeConf.xml.

Element properties:

TargetMicrosoft.FASTSearch.MP.Entity.SearchNode
EnabledTrue
Frequency15123
RemotableFalse

Object Discovery Details:

Discovered Classes and their attribuets:
Discovered relationships and their attribuets:

Member Modules:

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

Source Code:

<Discovery ID="Microsoft.FASTSearch.MP.Discovery.SearchNodeHosted" Enabled="true" Target="Microsoft.FASTSearch.MP.Entity.SearchNode" ConfirmDelivery="false" Remotable="false" Priority="Normal">
<Category>Discovery</Category>
<DiscoveryTypes>
<!-- NCTRL SERVICES -->
<DiscoveryClass TypeID="Microsoft.FASTSearch.MP.Entity.BrowserEngine">
<Property TypeID="Microsoft.FASTSearch.MP.Entity.NCtrlComponent" PropertyID="Id"/>
<Property TypeID="Microsoft.FASTSearch.MP.Entity.NCtrlComponent" PropertyID="Description"/>
<Property TypeID="Microsoft.FASTSearch.MP.Entity.NCtrlService" PropertyID="ServiceName"/>
<Property TypeID="System!System.Entity" PropertyID="DisplayName"/>
</DiscoveryClass>
<DiscoveryClass TypeID="Microsoft.FASTSearch.MP.Entity.SAMAdmin">
<Property TypeID="Microsoft.FASTSearch.MP.Entity.NCtrlComponent" PropertyID="Id"/>
<Property TypeID="Microsoft.FASTSearch.MP.Entity.NCtrlComponent" PropertyID="Description"/>
<Property TypeID="Microsoft.FASTSearch.MP.Entity.NCtrlService" PropertyID="ServiceName"/>
<Property TypeID="System!System.Entity" PropertyID="DisplayName"/>
</DiscoveryClass>
<DiscoveryClass TypeID="Microsoft.FASTSearch.MP.Entity.SAMWorker">
<Property TypeID="Microsoft.FASTSearch.MP.Entity.NCtrlComponent" PropertyID="Id"/>
<Property TypeID="Microsoft.FASTSearch.MP.Entity.NCtrlComponent" PropertyID="Description"/>
<Property TypeID="Microsoft.FASTSearch.MP.Entity.NCtrlService" PropertyID="ServiceName"/>
<Property TypeID="System!System.Entity" PropertyID="DisplayName"/>
</DiscoveryClass>
<DiscoveryClass TypeID="Microsoft.FASTSearch.MP.Entity.QRProxy">
<Property TypeID="Microsoft.FASTSearch.MP.Entity.NCtrlComponent" PropertyID="Id"/>
<Property TypeID="Microsoft.FASTSearch.MP.Entity.NCtrlComponent" PropertyID="Description"/>
<Property TypeID="Microsoft.FASTSearch.MP.Entity.NCtrlService" PropertyID="ServiceName"/>
<Property TypeID="System!System.Entity" PropertyID="DisplayName"/>
</DiscoveryClass>
<!-- MONITORINGSERVICE -->
<DiscoveryClass TypeID="Microsoft.FASTSearch.MP.Entity.MonitoringService">
<Property TypeID="System!System.Entity" PropertyID="DisplayName"/>
</DiscoveryClass>
<!-- CONNECTORS -->
<DiscoveryClass TypeID="Microsoft.FASTSearch.MP.Entity.JDBCConnector">
<Property TypeID="System!System.Entity" PropertyID="DisplayName"/>
</DiscoveryClass>
<DiscoveryClass TypeID="Microsoft.FASTSearch.MP.Entity.LotusNotesConnector">
<Property TypeID="System!System.Entity" PropertyID="DisplayName"/>
</DiscoveryClass>
<!-- ADMINSERVICES -->
<DiscoveryClass TypeID="Microsoft.FASTSearch.MP.Entity.AdminServices">
<Property TypeID="System!System.Entity" PropertyID="DisplayName"/>
</DiscoveryClass>
<DiscoveryRelationship TypeID="Microsoft.FASTSearch.MP.Relationship.SearchNodeHostsComponentBase"/>
</DiscoveryTypes>
<DataSource ID="DS" TypeID="Windows!Microsoft.Windows.TimedScript.DiscoveryProvider">
<IntervalSeconds>15123</IntervalSeconds>
<SyncTime/>
<ScriptName>SearchNodeDiscovery.vbs</ScriptName>
<Arguments>$MPElement$ $Target/Id$ $Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/PrincipalName$</Arguments>
<ScriptBody><Script>Option Explicit
On Error Resume Next

SetLocale("en-us")

Const PROCID_BROWSERENG = "browserengine"
Const PROCID_SAMADMIN = "samadmin"
Const PROCID_SAMWORKER = "samworker"
Const PROCID_QRPROXY = "qrproxy"

Const SRVNAME_BROWSERENG = "FASTSearchBrowserEngine"
Const SRVNAME_SAMADMIN = "FASTSearchSAMAdmin"
Const SRVNAME_SAMWORKER = "FASTSearchSAMWorker"
Const SRVNAME_QRPROXY = "QRProxyService"

Const SRVDESC_BROWSERENG = "Browser Engine Service"
Const SRVDESC_SAMADMIN = "Authorization Admin Service"
Const SRVDESC_SAMWORKER = "Authorization Worker Service"
Const SRVDESC_QRPROXY = "QRProxy Service"

' We cannot build these strings in the script as they are template-replaced by SCOM/MPSeal
const CLASS_BROWSERENG = "$MPElement[Name='Microsoft.FASTSearch.MP.Entity.BrowserEngine']$"
const CLASS_SAMADMIN = "$MPElement[Name='Microsoft.FASTSearch.MP.Entity.SAMAdmin']$"
const CLASS_SAMWORKER = "$MPElement[Name='Microsoft.FASTSearch.MP.Entity.SAMWorker']$"
const CLASS_QRPROXY = "$MPElement[Name='Microsoft.FASTSearch.MP.Entity.QRProxy']$"

Const ADMINSERVICES_SITENAME = "FASTSearchAdminServices"

Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count &lt; 3 Then
WScript.Quit -1
End If

Dim SourceID, ManagedEntityId, TargetComputer

SourceId = oArgs(0)
ManagedEntityId = oArgs(1)
TargetComputer = oArgs(2)

Dim oAPI, oDiscoveryData, oInst
Set oAPI = CreateObject("MOM.ScriptAPI")
set oDiscoveryData = oAPI.CreateDiscoveryData(0, SourceId, ManagedEntityId)

Dim WSHShell
Set WSHShell = WScript.CreateObject("WScript.Shell")

Const SetupKey = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\FAST Search Server\Setup\"
Dim strPath, isPSConfigured
strPath = WSHShell.RegRead(SetupKey &amp; "Path")
isPSConfigured = WSHShell.RegRead(SetupKey &amp; "PSConfigured")

If (strPath &lt;&gt; "") And isPSConfigured Then

'-------------------------------------------------------------------------
' NCTRL SERVICES
Dim xmlDoc
Set xmlDoc = CreateObject("Msxml2.DOMDocument")
xmlDoc.load(strPath &amp; "\etc\NodeConf.xml")

' This implementation is limited, in that nodeconf.xml supports multiple
' nodes to be configured in the same file. However, the FS14 setup team
' has promised that nodeconf.xml will contain only one node for FS14.
Dim firstNode
Set firstNode = xmlDoc.selectSingleNode("nodes/node")

Dim procList
Set procList = firstNode.selectNodes("global/startorder/proc")

Dim procListLength
procListLength = procList.Length

Dim node
For Each node In procList
Dim strProcName
strProcName = node.text

If (strProcName = PROCID_BROWSERENG) Then AddService strProcName, CLASS_BROWSERENG, SRVNAME_BROWSERENG, SRVDESC_BROWSERENG
If (strProcName = PROCID_SAMADMIN ) Then AddService strProcName, CLASS_SAMADMIN, SRVNAME_SAMADMIN, SRVDESC_SAMADMIN
If (strProcName = PROCID_SAMWORKER ) Then AddService strProcName, CLASS_SAMWORKER, SRVNAME_SAMWORKER, SRVDESC_SAMWORKER
If (strProcName = PROCID_QRPROXY ) Then AddService strProcName, CLASS_QRPROXY, SRVNAME_QRPROXY, SRVDESC_QRPROXY
Next


AddInstance "$MPElement[Name='Microsoft.FASTSearch.MP.Entity.MonitoringService']$", "FASTSearchMonitoring"
AddInstance "$MPElement[Name='Microsoft.FASTSearch.MP.Entity.JDBCConnector']$", "JDBCConnector"
AddInstance "$MPElement[Name='Microsoft.FASTSearch.MP.Entity.LotusNotesConnector']$", "LotusNotesConnector"


'-------------------------------------------------------------------------
' ADMIN SERVICES
Dim oExec
Set oExec = WSHShell.Exec("%WINDIR%\system32\inetsrv\appcmd.exe LIST SITE """ &amp; ADMINSERVICES_SITENAME &amp; """")

If Err.Number = 0 Then
Do While oExec.Status = 0
WScript.Sleep 100
Loop

If oExec.ExitCode = 0 Then
AddInstance "$MPElement[Name='Microsoft.FASTSearch.MP.Entity.AdminServices']$", "AdminServices"
AddInstance "$MPElement[Name='Microsoft.FASTSearch.MP.Entity.FarmWatcher']$", "FarmWatcher"
End If
End If
End If

Call oAPI.Return(oDiscoveryData)


Sub AddInstance (strClassExpr, strDisplayName)

On Error Resume Next

Set oInst = oDiscoveryData.CreateClassInstance(strClassExpr)
Call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
Call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", strDisplayName)
Call oDiscoveryData.AddInstance(oInst)

End Sub


Sub AddService (strProcName, strClassExpr, strServiceName, strDescription)

On Error Resume Next

Set oInst = oDiscoveryData.CreateClassInstance(strClassExpr)

Call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
Call oInst.AddProperty("$MPElement[Name='Microsoft.FASTSearch.MP.Entity.NCtrlComponent']/Id$", strProcName)
Call oInst.AddProperty("$MPElement[Name='Microsoft.FASTSearch.MP.Entity.NCtrlComponent']/Description$", strDescription)
Call oInst.AddProperty("$MPElement[Name='Microsoft.FASTSearch.MP.Entity.NCtrlService']/ServiceName$", strServiceName)
Call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", strServiceName)

Call oDiscoveryData.AddInstance(oInst)

End Sub
</Script></ScriptBody>
<TimeoutSeconds>300</TimeoutSeconds>
</DataSource>
</Discovery>