Huawei.ISM.Management.Pack.huawei.DataSource.Discovery.HostGroup.Properties (DataSourceModuleType)

Element properties:

TypeDataSourceModuleType
IsolationAny
AccessibilityInternal
RunAsDefault
OutputTypeSystem.Discovery.Data

Member Modules:

ID Module Type TypeId RunAs 
snmpProbe DataSource System.NetworkManagement.SnmpDataSource Default
ScriptDiscovery ProbeAction Microsoft.Windows.ScriptDiscoveryProbe Default

Overrideable Parameters:

IDParameterTypeSelector
Intervalint$Config/Interval$
LogLevelint$Config/LogLevel$

Source Code:

<DataSourceModuleType ID="Huawei.ISM.Management.Pack.huawei.DataSource.Discovery.HostGroup.Properties" Accessibility="Internal" Batching="false">
<Configuration>
<IncludeSchemaTypes>
<SchemaType>System!System.Discovery.MapperSchema</SchemaType>
<SchemaType>System!System.ExpressionEvaluatorSchema</SchemaType>
<SchemaType>System!System.ParamListSchema</SchemaType>
</IncludeSchemaTypes>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" name="Interval" type="xsd:integer"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" name="IPAddress" type="xsd:string"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" name="CommStr" type="xsd:string"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" name="Index" type="xsd:string"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" name="Version" type="xsd:string"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" name="LogLevel" type="xsd:integer"/>
</Configuration>
<OverrideableParameters>
<OverrideableParameter ID="Interval" Selector="$Config/Interval$" ParameterType="int"/>
<OverrideableParameter ID="LogLevel" Selector="$Config/LogLevel$" ParameterType="int"/>
</OverrideableParameters>
<ModuleImplementation Isolation="Any">
<Composite>
<MemberModules>
<DataSource ID="snmpProbe" TypeID="SNL!System.NetworkManagement.SnmpDataSource">
<Scheduler>
<SimpleReccuringSchedule>
<Interval>$Config/Interval$</Interval>
</SimpleReccuringSchedule>
<ExcludeDates/>
</Scheduler>
<SNMPv3UserName>$RunAs[Name="SNL!System.NetworkManagement.SnmpV3.MonitoringAccount"]/UserName$</SNMPv3UserName>
<SNMPv3AuthProtocol>$RunAs[Name="SNL!System.NetworkManagement.SnmpV3.MonitoringAccount"]/AuthenticationProtocol$</SNMPv3AuthProtocol>
<SNMPv3AuthPassword>$RunAs[Name="SNL!System.NetworkManagement.SnmpV3.MonitoringAccount"]/AuthenticationKey$</SNMPv3AuthPassword>
<SNMPv3PrivProtocol>$RunAs[Name="SNL!System.NetworkManagement.SnmpV3.MonitoringAccount"]/PrivacyProtocol$</SNMPv3PrivProtocol>
<SNMPv3PrivPassword>$RunAs[Name="SNL!System.NetworkManagement.SnmpV3.MonitoringAccount"]/PrivacyKey$</SNMPv3PrivPassword>
<SNMPv3ContextName>$RunAs[Name="SNL!System.NetworkManagement.SnmpV3.MonitoringAccount"]/ContextName$</SNMPv3ContextName>
<IP>$Config/IPAddress$</IP>
<CommunityString>$Config/CommStr$</CommunityString>
<Version>$Config/Version$</Version>
<SnmpVarBinds>
<SnmpVarBind>
<OID>.1.3.6.1.4.1.34774.4.1.23.4.6.1.1.$Config/Index$</OID>
<Syntax>0</Syntax>
<Value VariantType="8"/>
</SnmpVarBind>
<SnmpVarBind>
<OID>.1.3.6.1.4.1.34774.4.1.23.4.6.1.2.$Config/Index$</OID>
<Syntax>0</Syntax>
<Value VariantType="8"/>
</SnmpVarBind>
<SnmpVarBind>
<OID>.1.3.6.1.4.1.34774.4.1.23.4.6.1.3.$Config/Index$</OID>
<Syntax>0</Syntax>
<Value VariantType="8"/>
</SnmpVarBind>
</SnmpVarBinds>
</DataSource>
<ProbeAction ID="ScriptDiscovery" TypeID="Windows!Microsoft.Windows.ScriptDiscoveryProbe">
<ScriptName>DiscoverHostGroupProperites.vbs</ScriptName>
<Arguments>$MPElement$ $Target/Id$ $Target/Host/Property[Type="SNL!System.NetworkManagement.Node"]/DeviceKey$ "$Data/SnmpVarBinds/SnmpVarBind[1]/Value$" "$Data/SnmpVarBinds/SnmpVarBind[2]/Value$" "$Data/SnmpVarBinds/SnmpVarBind[3]/Value$" $Config/LogLevel$</Arguments>
<ScriptBody><Script>

'**********************************************************************************
' Script Name - Huawei HostGroup Properites Discovery
' Author: Muralidhar L, Vignesh Pandian
'
' Description:
' Discovery of Huawei HostGroup and all it's attributes.
'
' (c) Copyright Huawei Inc. 2013-2015. All rights reserved
'**********************************************************************************
Option Explicit
SetLocale("en-us")

Dim oAPI, oDiscoveryData, oInst
Set oAPI = CreateObject("MOM.ScriptAPI")

Dim oArgs

set oArgs = wscript.arguments

If oArgs.Count &gt; 10 Then

Call oAPI.LogScriptEvent("DiscoverHostGroupProperites.vbs",101,0, _
"script was called with fewer than three arguments and was not executed.")
Wscript.Quit -1

End If

' Declaration of Script argument and File logging variables
Dim logMessage, logLevel, debugLevel, objLogTextFile, objLogFSO,isOpen

logLevel = oArgs(6)
isOpen = 0
' Begin Logheader
Sub OpenLogFile()
If logLevel &lt;&gt; 0 Then
Dim fileSize, strOutFile
On Error Resume Next
Const strFileName = "Discovery_HostGroupProperites.log"
Const ForAppending = 8
Const ForWriting = 2
Const MaxFileSize = 5242880 'File Size is limited to 512 KB

dim wsShell : Set wsShell = Createobject("WScript.Shell")
dim tFolder : tFolder = wsShell.ExpandEnvironmentStrings("%ProgramFiles%")

Set objLogFSO = CreateObject("Scripting.FileSystemObject")

If Not objLogFSO.FolderExists(tFolder) Then
objLogFSO.CreateFolder(tFolder)
End If

tFolder = tFolder &amp; "\Huawei"
If Not objLogFSO.FolderExists(tFolder) Then
objLogFSO.CreateFolder(tFolder)
End If

tFolder = tFolder &amp; "\SCOM"
If Not objLogFSO.FolderExists(tFolder) Then
objLogFSO.CreateFolder(tFolder)
End If

strOutFile = tFolder &amp; "\" &amp; strFileName
If Not objLogFSO.FileExists(strOutFile) Then
Set objLogTextFile = objLogFSO.CreateTextFile(strOutFile)
objLogTextFile.Close()
End If
fileSize = objLogFSO.GetFile(strOutFile).Size

Dim k
k = 0
Do
Err.Clear
WScript.Sleep(1000)
On Error Resume Next
If (fileSize &gt; MaxFileSize) Then
Set objLogTextFile = objLogFSO.OpentextFile(strOutFile, ForWriting, True)
Else
Set objLogTextFile = objLogFSO.OpentextFile(strOutFile, ForAppending, True)
End If
k = k + 1
Loop While Err.Number &lt;&gt; 0

logMessage = "INFO: Script - HostGroup Properites Discovery : Start()"&amp; k
MOMDebugLog 1, logMessage
logMessage = "INFO: Script - HostGroup(" &amp; oArgs(3) &amp;") Belongs to Huawei Device IP Address :"&amp; oArgs(8)
MOMDebugLog 1, logMessage
Err.Clear
isOpen = 1
End If
End Sub

Sub MOMDebugLog (ByVal debugLevel, ByVal Message)
On Error Resume Next
If (debugLevel &gt; 0) and (debugLevel &lt;= logLevel) Then
objLogTextFile.WriteLine(Now() &amp; " ---- " &amp; Message)
Err.Clear
End If
End Sub

' End of Logheader


Dim SourceID, ManagedEntityID, deviceKey, hostGroupID, hostGroupName, idList

SourceID = oArgs(0)
ManagedEntityID = oArgs(1)
deviceKey = oArgs(2)
hostGroupID = oArgs(3)
hostGroupName = oArgs(4)
idList = oArgs(5)

hostGroupID = TRIM(hostGroupID)
hostGroupName = TRIM(hostGroupName)
idList = TRIM(idList)

Set oDiscoveryData = oAPI.CreateDiscoveryData(0, SourceID, ManagedEntityID)

Dim oFSo
Set oFso = CreateObject("Scripting.FileSystemObject")

Dim arVol, Vol, arHostGroupName,aridList, i

arVol = split(hostGroupID,Chr(32))
arHostGroupName = split(hostGroupName,Chr(32))
aridList = split(idList,Chr(32))
i =0
For Each Vol in arVol
Set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Huawei.ISM.Management.Pack.huawei.Class.HostGroup']$")
Call oInst.AddProperty ("$MPElement[Name='SNL!System.NetworkManagement.Node']/DeviceKey$", deviceKey)
Call oInst.AddProperty ("$MPElement[Name='Huawei.ISM.Management.Pack.huawei.Class.HostGroup']/id$", Vol)

If UBound(arHostGroupName) &lt; i Then
Call oInst.AddProperty("$MPElement[Name='Huawei.ISM.Management.Pack.huawei.Class.HostGroup']/name$", "")
Else
Call oInst.AddProperty("$MPElement[Name='Huawei.ISM.Management.Pack.huawei.Class.HostGroup']/name$", UTF8BadDecode(arHostGroupName(i)))
End If

If UBound(aridList) &lt; i Then
Call oInst.AddProperty("$MPElement[Name='Huawei.ISM.Management.Pack.huawei.Class.HostGroup']/idList$", "")
Else
Call oInst.AddProperty("$MPElement[Name='Huawei.ISM.Management.Pack.huawei.Class.HostGroup']/idList$", aridList(i))
End If

Call oDiscoveryData.AddInstance(oInst)
i = i+1
Next

Public Function OS(system)
select Case system
Case 0
OS="Linux"
Case 1
OS="Windows"
Case 2
OS="Solaris"
Case 3
OS="HP-UX"
Case 4
OS="AIX"
Case 5
OS="enServer"
Case 6
OS="Mac OS"
Case 7
OS="VMware ESX"
Case 8
OS="Linux"
Case 9
OS="Windows Server 2012"
Case Else
OS=""
End select
End Function

'&#x5F62;&#x5F0F;&#x7C7B;&#x5982;code=E7-0x-0x93-0x9C-0xE7-0x93-0x9C-0x5F-0x30-0x30-0x39
Public Function UTF8BadDecode(ByVal code)
If code = "" Then
UTF8BadDecode = ""
Exit Function
End If

Dim tmp
Dim decodeStr
Dim codelen
Dim leftStr
Dim result
Dim str
str = code
result = ""

On Error Resume Next
code = Trim(code)
'&#x5C06;&#x5B57;&#x7B26;&#x4E32;&#x4E2D;&#x7684; &#x201C;-0x&#x201D;&#x66FF;&#x6362;&#x4E3A;&#x201C;.&#x201D;
code = Replace(code, "-0x", ".")
'&#x83B7;&#x53D6;&#x5DE6;&#x8FB9;&#x7684;&#x7B2C;&#x4E00;&#x4E2A;&#x5B57;&#x7B26;
leftStr = Left(code, 1)
If leftStr = "" Then

UTF8BadDecode = ""
Exit Function

ElseIf leftStr &lt;&gt; "." Then

result = str

ElseIf leftStr = "." Then

codelen = Len(code)

If (Mid(code, 2, 1) = "C" Or Mid(code, 2, 1) = "B") Then
decodeStr = Replace(Mid(code, 1, 6), ".", "")
tmp = c10ton(CLng("&amp;H" &amp; Hex(CLng("&amp;H" &amp; decodeStr) And &amp;H1F3F)), 2)
tmp = String(16 - Len(tmp), "0") &amp; tmp
result = result &amp; ChrW(CLng("&amp;H" &amp; c2to16(Mid(tmp, 3, 4)) &amp; c2to16(Mid(tmp, 7, 2) &amp; Mid(tmp, 11, 2)) &amp; Right(decodeStr, 1))) &amp; UTF8BadDecode(Right(code, codelen - 6))
ElseIf (Mid(code, 2, 1) = "E") Then
decodeStr = Replace(Mid(code, 1, 9), ".", "")
tmp = c10ton((CLng("&amp;H" &amp; Mid(Hex(CLng("&amp;H" &amp; decodeStr) And &amp;HF3F3F), 2, 3))), 2)
tmp = String(10 - Len(tmp), "0") &amp; tmp
result = result &amp; ChrW(CLng("&amp;H" &amp; (Mid(decodeStr, 2, 1) &amp; c2to16(Mid(tmp, 1, 4)) &amp; c2to16(Mid(tmp, 5, 2) &amp; Right(tmp, 2)) &amp; Right(decodeStr, 1)))) &amp; UTF8BadDecode(Right(code, codelen - 9))
Else
result = Chr(CLng("&amp;H" &amp; (Mid(code, 2, 2)))) &amp; UTF8BadDecode(Right(code, codelen - 3))
End If
End If

If Err.Number &lt;&gt; 0 Then
result = str
If isOpen = 0 Then
OpenLogFile()
End IF
logMessage = "ERROR : Script -Hexadecimal string parsing error.code:" &amp; str
MOMDebugLog 1, logMessage
End If
Err.Clear
UTF8BadDecode = result
End Function


'&#x4E8C;&#x8FDB;&#x5236;&#x4EE3;&#x7801;&#x8F6C;&#x6362;&#x4E3A;&#x5341;&#x516D;&#x8FDB;&#x5236;&#x4EE3;&#x7801;
Public Function c2to16(ByVal x)
On Error Resume Next
Dim i, strinfo
i = 1
strinfo = ""
For i = 1 To Len(x) Step 4
strinfo = strinfo &amp; Hex(c2to10(Mid(x, i, 4)))
Next
c2to16 = strinfo

If Err.Number &lt;&gt; 0 Then
If isOpen = 0 Then
OpenLogFile()
End IF
logMessage = "ERROR : Script -Binary code into hex code error.code:" &amp; x
MOMDebugLog 1, logMessage
End If
Err.Clear
End Function

'&#x4E8C;&#x8FDB;&#x5236;&#x4EE3;&#x7801;&#x8F6C;&#x6362;&#x4E3A;&#x5341;&#x8FDB;&#x5236;&#x4EE3;&#x7801;
Public Function c2to10(ByVal x)
On Error Resume Next
c2to10 = 0
If x = "0" Then Exit Function
Dim i
i = 0
For i = 0 To Len(x) - 1
If Mid(x, Len(x) - i, 1) = "1" Then c2to10 = c2to10 + 2 ^ (i)
Next

If Err.Number &lt;&gt; 0 Then
If isOpen = 0 Then
OpenLogFile()
End IF
logMessage = "ERROR : Script -Binary to decimal code error.code:" &amp; x
MOMDebugLog 1, logMessage
End If

Err.Clear
End Function

'10&#x8FDB;&#x5236;&#x8F6C;n&#x8FDB;&#x5236;(&#x9ED8;&#x8BA4;2)
Public Function c10ton(ByVal x, ByVal n)
On Error Resume Next
Dim i
i = x \ n
If i &gt; 0 Then
If x Mod n &gt; 10 Then
c10ton = c10ton(i, n) + Chr(x Mod n + 55)
Else
c10ton = c10ton(i, n) + CStr(x Mod n)
End If
Else
If x &gt; 10 Then
c10ton = Chr(x + 55)
Else
c10ton = CStr(x)
End If
End If
If Err.Number &lt;&gt; 0 Then
If isOpen = 0 Then
OpenLogFile()
End IF

logMessage = "ERROR : Script -Decimal code into binary code error.code:" &amp; x
MOMDebugLog 1, logMessage
End If
Err.Clear
End Function
Call oAPI.Return(oDiscoveryData)

Set oDiscoveryData = Nothing
Set oAPI =Nothing
set oArgs = Nothing

' Close file used for logs
If logLevel &lt;&gt; 0 And isOpen &lt;&gt; 0 Then
objLogTextFile.Close
Set objLogTextFile = Nothing
Set objLogFSO = Nothing
End If

</Script></ScriptBody>
<TimeoutSeconds>300</TimeoutSeconds>
</ProbeAction>
</MemberModules>
<Composition>
<Node ID="ScriptDiscovery">
<Node ID="snmpProbe"/>
</Node>
</Composition>
</Composite>
</ModuleImplementation>
<OutputType>System!System.Discovery.Data</OutputType>
</DataSourceModuleType>