none
SCOM SP1 Groups, Classes and SNMP RRS feed

  • Question

  • I've been working on a management pack using some of the examples on the net (Kristopher Bash from the operating-quadrantin has been a huge inspiration) to monitor an Isilon cluster.  This had lead me to a number of interesting challenges to over come since I have to design this within the confines of SP1 and I have a unique networking to device configuration. 

    Device Overview:
    The Isilon cluster itself is a number of FreeBSD systems (nodes) joined together via and infiniband backend to create a single NAS.  While normally this would not be an issue, network connectivity to the device and SNMP response from the cluster have been.  In my configuration I have a total of 8 nodes each node has 2 network interfaces.  Of these 16 network interfaces only 2 are accessible/on the same network as my RMS (em1 node2, em1 node4).

    Device SNMP Design:
    While the cluster is highly dynamic the SNMP sub-systems are not.  The MIB created by Isilon does not join the whole of the cluster into an index for SNMP polling.  I can only poll a single nodes OID's.  To over come this limitation Isilon implemented SNMP-Proxy or comtosec within the system.  This allowed me to poll node 3 by changing the community name for the OID I was polling from the discovered name to <discoveredname>_node_3.

    MP Design:
    Now I'm not the best at MP design since I rarely work within SCOM so don't laugh too hard...  I reused items from Kristopher's Cisco MP and created a number of classes for discovery and item hosting.  To address the limitation I found within SCOM for dynamic discovery and 1 IP address 1 Community Name, I created a class property within the root called ConfiguredNodes.  I can poll the Isilon an populate this value (8).  Then I created a sub-class property value called NodeCommStr to fill in all the custom community names I generate using a VB script with Base64 encode/decode, the discovery community name and the ConfiguredNodes value, in the data source for sub-class discovery. public_node_1 public_node_2 etc...

    All in all this is working well however I have run into a few design roadblocks and I have some questions.

    1.  When I discover a set of items within the Isilon cluster the health explorer is not sorting this information alphabetically.  Is there a value I can include in the dependency roll-up to correct this?

    2.  I have run into an issue with the Isilon MIB and I'm looking for the best way to overcome the MIB's design.  They included a fan table with fan information and speed of the fans however there is no status (success{0}, warning{1}, error{2}).  I created a monitor type to compensate for this and included overrides for the warning and critical event points.  This is where I found the curve ball, seems that the fans are not the same....  There are 2 sets of fans - Chassis and Power Supply - and they have different thresholds *rolls eyes*.  Some I'm asking for the best design advice, should I create 2 classes, discoveries, monitor types, etc.?  Or can I address this issue by creating 2 monitor types with a string filter?

    3.  I've been successful in creating this MP and displaying the information as a single device however I was wondering if there was a way to create dynamic groups with sub groups.  This would have to be 100% dynamic since I can add a 9th 10th 192nd (yes 192) node to the cluster.

    Cluster
    -ClusterNode1
    -ClusterNode1Power
    -ClusterNode1Fans
    -etc

    The information is there in the NodeCommStr, I'm just in brain lock on how to design it right now.



    Again, code is raw and a work in progress so please no giggling.  Oh this is a multi post...  Code is too long.

    	<Manifest>
    		<Identity>
    			<ID>IsilonSNMP</ID>
    			<Version>1.0.1.2</Version>
    		</Identity>
    		<Name>IsilonSNMP</Name>
    		<References>
    			<Reference Alias="MicrosoftSystemCenterNetworkDeviceLibrary">
    				<ID>Microsoft.SystemCenter.NetworkDevice.Library</ID>
    				<Version>6.0.6278.0</Version>
    				<PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
    			</Reference>
    			<Reference Alias="Snmp">
    				<ID>System.Snmp.Library</ID>
    				<Version>6.0.6278.0</Version>
    				<PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
    			</Reference>
    			<Reference Alias="SystemHardwareLibrary">
    				<ID>System.Hardware.Library</ID>
    				<Version>6.0.6278.0</Version>
    				<PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
    			</Reference>
    			<Reference Alias="Windows">
    				<ID>Microsoft.Windows.Library</ID>
    				<Version>6.0.6278.0</Version>
    				<PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
    			</Reference>
    			<Reference Alias="SystemPerformanceLibrary">
    				<ID>System.Performance.Library</ID>
    				<Version>6.0.6278.0</Version>
    				<PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
    			</Reference>
    			<Reference Alias="System">
    				<ID>System.Library</ID>
    				<Version>6.0.6278.0</Version>
    				<PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
    			</Reference>
    			<Reference Alias="SC">
    				<ID>Microsoft.SystemCenter.Library</ID>
    				<Version>6.0.6278.0</Version>
    				<PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
    			</Reference>
    			<Reference Alias="Health">
    				<ID>System.Health.Library</ID>
    				<Version>6.0.6278.0</Version>
    				<PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
    			</Reference>
    		</References>
    	</Manifest>
    	<TypeDefinitions>
    		<EntityTypes>
    			<ClassTypes>
    				<ClassType ID="IsilonSNMP.Class.IsilonCluster" Accessibility="Public" Abstract="false" Base="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice" Hosted="false" Singleton="false">
    					<Property ID="Hostname" Type="string" Key="false" CaseSensitive="false" Length="256" MinLength="0" />
    					<Property ID="ConfiguredNodes" Type="string" Key="false" CaseSensitive="false" Length="256" MinLength="0" />
    					<!--      <Property ID="NodeCommStr" Type="string" Key="false" CaseSensitive="false" Length="256" MinLength="0" /> -->
    				</ClassType>
    				<ClassType ID="IsilonSNMP.Class.IsilonCluster.Nodes" Accessibility="Public" Abstract="false" Base="SystemHardwareLibrary!System.Chassis" Hosted="true" Singleton="false">
    					<Property ID="Name" Type="string" Key="true" CaseSensitive="false" Length="256" MinLength="0" />
    				</ClassType>
    				<ClassType ID="IsilonSNMP.Class.IsilonCluster.PhysicalDisk" Accessibility="Public" Abstract="false" Base="SystemHardwareLibrary!System.PhysicalDisk" Hosted="true" Singleton="false">
    					<Property ID="Index" Type="string" Key="true" CaseSensitive="false" Length="256" MinLength="0" />
    					<!--      <Property ID="ConfiguredNodes" Type="string" Key="false" CaseSensitive="false" Length="256" MinLength="0" /> -->
    					<Property ID="NodeCommStr" Type="string" Key="false" CaseSensitive="false" Length="256" MinLength="0" />
    					<Property ID="BayIndex" Type="string" Key="false" CaseSensitive="false" Length="256" MinLength="0" />
    				</ClassType>
    				<ClassType ID="IsilonSNMP.Class.IsilonCluster.PhysicalFan" Accessibility="Public" Abstract="false" Base="SystemHardwareLibrary!System.Fan" Hosted="true" Singleton="false">
    					<Property ID="Index" Type="string" Key="true" CaseSensitive="false" Length="256" MinLength="0" />
    					<Property ID="NodeCommStr" Type="string" Key="false" CaseSensitive="false" Length="256" MinLength="0" />
    					<Property ID="FanNumber" Type="string" Key="false" CaseSensitive="false" Length="256" MinLength="0" />
    				</ClassType>
    				<ClassType ID="IsilonSNMP.Group.IsilonClusters" Accessibility="Public" Abstract="false" Base="System!System.Group" Hosted="false" Singleton="true" />
    			</ClassTypes>
    			<RelationshipTypes>
    				<RelationshipType ID="IsilonSNMP.Relationship.ClusterHostsNodes" Accessibility="Internal" Abstract="false" Base="System!System.Hosting">
    					<Source>IsilonSNMP.Class.IsilonCluster</Source>
    					<Target>IsilonSNMP.Class.IsilonCluster.Nodes</Target>
    				</RelationshipType>
    				<RelationshipType ID="IsilonSNMP.Relationship.IsilonClustersGroupContainsIsilonClusters" Accessibility="Public" Abstract="false" Base="System!System.Containment">
    					<Source>IsilonSNMP.Group.IsilonClusters</Source>
    					<Target>IsilonSNMP.Class.IsilonCluster</Target>
    				</RelationshipType>
    				<RelationshipType ID="IsilonSNMP.Relationship.NodesHostsPhysicalDisk" Accessibility="Public" Abstract="false" Base="System!System.Hosting">
    					<Source>IsilonSNMP.Class.IsilonCluster.Nodes</Source>
    					<Target>IsilonSNMP.Class.IsilonCluster.PhysicalDisk</Target>
    				</RelationshipType>
    				<RelationshipType ID="IsilonSNMP.Relationship.NodesHostsPhysicalFan" Accessibility="Public" Abstract="false" Base="System!System.Hosting">
    					<Source>IsilonSNMP.Class.IsilonCluster.Nodes</Source>
    					<Target>IsilonSNMP.Class.IsilonCluster.PhysicalFan</Target>
    				</RelationshipType>
    			</RelationshipTypes>
    		</EntityTypes>
    		<ModuleTypes>
    			<DataSourceModuleType ID="IsilonSNMP.DataSource.BasicSNMPProbe" Accessibility="Internal" Batching="false">
    				<Configuration>
    					<xsd:element minOccurs="1" name="Interval" type="xsd:integer" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    					<xsd:element minOccurs="1" name="IPAddress" type="xsd:string" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    					<xsd:element minOccurs="1" name="CommStr" type="xsd:string" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    					<xsd:element minOccurs="1" name="OID" type="xsd:string" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    				</Configuration>
    				<OverrideableParameters>
    					<OverrideableParameter ID="Interval" Selector="$Config/Interval$" ParameterType="int" />
    				</OverrideableParameters>
    				<ModuleImplementation Isolation="Any">
    					<Composite>
    						<MemberModules>
    							<DataSource ID="Scheduler" TypeID="System!System.Scheduler">
    								<Scheduler>
    									<SimpleReccuringSchedule>
    										<Interval>$Config/Interval$</Interval>
    										<SyncTime />
    									</SimpleReccuringSchedule>
    									<ExcludeDates />
    								</Scheduler>
    							</DataSource>
    							<ProbeAction ID="SNMPProbe" TypeID="Snmp!System.SnmpProbe">
    								<IsWriteAction>false</IsWriteAction>
    								<IP>$Config/IPAddress$</IP>
    								<CommunityString>$Config/CommStr$</CommunityString>
    								<SnmpVarBinds>
    									<SnmpVarBind>
    										<OID>$Config/OID$</OID>
    										<Syntax>0</Syntax>
    										<Value VariantType="8" />
    									</SnmpVarBind>
    								</SnmpVarBinds>
    							</ProbeAction>
    							<ConditionDetection ID="ValueFilter" TypeID="System!System.ExpressionFilter">
    								<Expression>
    									<SimpleExpression>
    										<ValueExpression>
    											<XPathQuery Type="String">/DataItem/SnmpVarBinds/SnmpVarBind[1]/Value</XPathQuery>
    										</ValueExpression>
    										<Operator>NotEqual</Operator>
    										<ValueExpression>
    											<Value Type="String" />
    										</ValueExpression>
    									</SimpleExpression>
    								</Expression>
    							</ConditionDetection>
    						</MemberModules>
    						<Composition>
    							<Node ID="ValueFilter">
    								<Node ID="SNMPProbe">
    									<Node ID="Scheduler" />
    								</Node>
    							</Node>
    						</Composition>
    					</Composite>
    				</ModuleImplementation>
    				<OutputType>Snmp!System.SnmpData</OutputType>
    			</DataSourceModuleType>
    			<DataSourceModuleType ID="IsilonSNMP.DataSource.DiscoverContainmentClasses" Accessibility="Internal" Batching="false">
    				<Configuration>
    					<IncludeSchemaTypes>
    						<SchemaType>System!System.ParamListSchema</SchemaType>
    						<SchemaType>System!System.Discovery.MapperSchema</SchemaType>
    					</IncludeSchemaTypes>
    					<xsd:element minOccurs="1" name="IPAddress" type="xsd:string" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    					<xsd:element minOccurs="1" name="ClassID" type="xsd:string" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    					<xsd:element minOccurs="1" name="InstanceSettings" type="SettingsType" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    				</Configuration>
    				<ModuleImplementation Isolation="Any">
    					<Composite>
    						<MemberModules>
    							<DataSource ID="Scheduler" TypeID="System!System.Scheduler">
    								<Scheduler>
    									<SimpleReccuringSchedule>
    										<Interval>60</Interval>
    										<SyncTime />
    									</SimpleReccuringSchedule>
    									<ExcludeDates />
    								</Scheduler>
    							</DataSource>
    							<ConditionDetection ID="Mapper" TypeID="System!System.Discovery.ClassSnapshotDataMapper">
    								<ClassId>$Config/ClassID$</ClassId>
    								<InstanceSettings>$Config/InstanceSettings$</InstanceSettings>
    							</ConditionDetection>
    						</MemberModules>
    						<Composition>
    							<Node ID="Mapper">
    								<Node ID="Scheduler" />
    							</Node>
    						</Composition>
    					</Composite>
    				</ModuleImplementation>
    				<OutputType>System!System.Discovery.Data</OutputType>
    			</DataSourceModuleType>
    			<DataSourceModuleType ID="IsilonSNMP.DataSource.DiscoverCluster" Accessibility="Internal" Batching="false">
    				<Configuration>
    					<xsd:element minOccurs="1" name="Interval" type="xsd:integer" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    					<xsd:element minOccurs="1" name="IP" type="xsd:string" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    					<xsd:element minOccurs="1" name="CommunityString" type="xsd:string" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    					<xsd:element minOccurs="1" name="SystemOID" type="xsd:string" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    				</Configuration>
    				<OverrideableParameters>
    					<OverrideableParameter ID="Interval" Selector="$Config/Interval$" ParameterType="int" />
    				</OverrideableParameters>
    				<ModuleImplementation Isolation="Any">
    					<Composite>
    						<MemberModules>
    							<DataSource ID="Scheduler" TypeID="System!System.Scheduler">
    								<Scheduler>
    									<SimpleReccuringSchedule>
    										<Interval Unit="Seconds">$Config/Interval$</Interval>
    									</SimpleReccuringSchedule>
    									<ExcludeDates />
    								</Scheduler>
    							</DataSource>
    							<ProbeAction ID="Probe" TypeID="Snmp!System.SnmpProbe">
    								<IsWriteAction>false</IsWriteAction>
    								<IP>$Config/IP$</IP>
    								<CommunityString>$Config/CommunityString$</CommunityString>
    								<SnmpVarBinds>
    									<SnmpVarBind>
    										<OID>.1.3.6.1.4.1.12124.1.1.4.0</OID>
    										<Syntax>0</Syntax>
    										<Value VariantType="8" />
    									</SnmpVarBind>
    									<SnmpVarBind>
    										<OID>.1.3.6.1.4.1.12124.1.1.1.0</OID>
    										<Syntax>0</Syntax>
    										<Value VariantType="8" />
    									</SnmpVarBind>
    									<SnmpVarBind>
    										<OID>.1.3.6.1.2.1.1.5.0</OID>
    										<Syntax>0</Syntax>
    										<Value VariantType="8" />
    									</SnmpVarBind>
    									<SnmpVarBind>
    										<OID>.1.3.6.1.2.1.1.1.0</OID>
    										<Syntax>0</Syntax>
    										<Value VariantType="8" />
    									</SnmpVarBind>
    									<SnmpVarBind>
    										<OID>.1.3.6.1.2.1.1.4.0</OID>
    										<Syntax>0</Syntax>
    										<Value VariantType="8" />
    									</SnmpVarBind>
    									<SnmpVarBind>
    										<OID>.1.3.6.1.2.1.1.6.0</OID>
    										<Syntax>0</Syntax>
    										<Value VariantType="8" />
    									</SnmpVarBind>
    									<SnmpVarBind>
    										<OID>.1.3.6.1.2.1.1.2.0</OID>
    										<Syntax>0</Syntax>
    										<Value VariantType="8" />
    									</SnmpVarBind>
    								</SnmpVarBinds>
    							</ProbeAction>
    							<ConditionDetection ID="Mapper" TypeID="System!System.Discovery.FilteredClassSnapshotDataMapper">
    								<Expression>
    									<RegExExpression>
    										<ValueExpression>
    											<XPathQuery>/DataItem/SnmpVarBinds/SnmpVarBind[1]/Value</XPathQuery>
    										</ValueExpression>
    										<Operator>ContainsSubstring</Operator>
    										<Pattern>1.3.6.1.4.1.12124.</Pattern>
    									</RegExExpression>
    								</Expression>
    								<ClassId>$MPElement[Name="IsilonSNMP.Class.IsilonCluster"]$</ClassId>
    								<InstanceSettings>
    									<Settings>
    										<Setting>
    											<Name>$MPElement[Name="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice"]/IPAddress$</Name>
    											<Value>$Data/Source$</Value>
    										</Setting>
    										<Setting>
    											<Name>$MPElement[Name="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice"]/Name$</Name>
    											<Value>$Data/SnmpVarBinds/SnmpVarBind[5]/Value$</Value>
    										</Setting>
    										<Setting>
    											<Name>$MPElement[Name="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice"]/SystemDescription$</Name>
    											<Value>$Data/SnmpVarBinds/SnmpVarBind[4]/Value$</Value>
    										</Setting>
    										<Setting>
    											<Name>$MPElement[Name="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice"]/SystemContact$</Name>
    											<Value>$Data/SnmpVarBinds/SnmpVarBind[3]/Value$</Value>
    										</Setting>
    										<Setting>
    											<Name>$MPElement[Name="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice"]/SystemLocation$</Name>
    											<Value>$Data/SnmpVarBinds/SnmpVarBind[2]/Value$</Value>
    										</Setting>
    										<Setting>
    											<Name>$MPElement[Name="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice"]/SystemOID$</Name>
    											<Value>$Data/SnmpVarBinds/SnmpVarBind[1]/Value$</Value>
    										</Setting>
    										<Setting>
    											<Name>$MPElement[Name="System!System.Entity"]/DisplayName$</Name>
    											<Value>$Data/SnmpVarBinds/SnmpVarBind[5]/Value$</Value>
    										</Setting>
    										<Setting>
    											<Name>$MPElement[Name="IsilonSNMP.Class.IsilonCluster"]/Hostname$</Name>
    											<Value>$Data/SnmpVarBinds/SnmpVarBind[6]/Value$</Value>
    										</Setting>
    										<Setting>
    											<Name>$MPElement[Name="IsilonSNMP.Class.IsilonCluster"]/ConfiguredNodes$</Name>
    											<Value>$Data/SnmpVarBinds/SnmpVarBind[7]/Value$</Value>
    										</Setting>
    									</Settings>
    								</InstanceSettings>
    							</ConditionDetection>
    							<ConditionDetection ID="SystemOIDFilter" TypeID="System!System.ExpressionFilter">
    								<Expression>
    									<RegExExpression>
    										<ValueExpression>
    											<Value>$Config/SystemOID$</Value>
    										</ValueExpression>
    										<Operator>ContainsSubstring</Operator>
    										<Pattern>1.3.6.1.4.1.12124.</Pattern>
    									</RegExExpression>
    								</Expression>
    							</ConditionDetection>
    						</MemberModules>
    						<Composition>
    							<Node ID="Mapper">
    								<Node ID="Probe">
    									<Node ID="SystemOIDFilter">
    										<Node ID="Scheduler" />
    									</Node>
    								</Node>
    							</Node>
    						</Composition>
    					</Composite>
    				</ModuleImplementation>
    				<OutputType>System!System.Discovery.Data</OutputType>
    			</DataSourceModuleType>
    			<DataSourceModuleType ID="IsilonSNMP.DataSource.DiscoverPhysicalDisk" Accessibility="Internal" Batching="false">
    				<Configuration>
    					<xsd:element minOccurs="1" name="IPAddress" type="xsd:string" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    					<xsd:element minOccurs="1" name="CommStr" type="xsd:string" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    					<xsd:element minOccurs="1" name="Interval" type="xsd:integer" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    					<xsd:element minOccurs="1" name="ConfiguredNodes" type="xsd:string" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    					<xsd:element minOccurs="1" name="BayIndex" type="xsd:string" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    					<xsd:element minOccurs="1" name="NodeCommStr" type="xsd:string" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    				</Configuration>
    				<OverrideableParameters>
    					<OverrideableParameter ID="Interval" Selector="$Config/Interval$" ParameterType="int" />
    				</OverrideableParameters>
    				<ModuleImplementation Isolation="Any">
    					<Composite>
    						<MemberModules>
    							<DataSource ID="Scheduler" TypeID="System!System.Scheduler">
    								<Scheduler>
    									<SimpleReccuringSchedule>
    										<Interval>$Config/Interval$</Interval>
    										<SyncTime />
    									</SimpleReccuringSchedule>
    									<ExcludeDates />
    								</Scheduler>
    							</DataSource>
    							<ProbeAction ID="ScriptDiscovery" TypeID="Windows!Microsoft.Windows.ScriptDiscoveryProbe">
    								<ScriptName>DiscoverIsilonDisk.vbs</ScriptName>
    								<Arguments>$Config/IPAddress$ $Config/CommStr$ $MPElement$ $Target/Id$ $Config/ConfiguredNodes$</Arguments>
    								<ScriptBody>
    									<![CDATA['Discover PhysicalDisk
    Dim oAPI, oDiscoveryData, oInst, objWMIServices, objWMILocator, oArgs
    
    set oArgs = Wscript.Arguments
    
    if oArgs.Count <5 Then
       Wscript.Quit -1
    End If
    
    DeviceIP =  oArgs(0)
    CommStr = oArgs(1)
    SourceID = oArgs(2)
    ManagedEntityId = oArgs(3)
    StrConfiguredNodes = oArgs(4)
    CommStr = Decode(CommStr)
    ConfiguredNodesCommStr = cstr(CommStr)
    
    
    wscript.echo CommStr
    Set oAPI = CreateObject("MOM.ScriptAPI")
    set oDiscoveryData = oAPI.CreateDiscoveryData(0, SourceId, ManagedEntityId)
    Set objWMILocator = CreateObject("WbemScripting.SWbemLocator")
    Set objWMIServices = objWMiLocator.ConnectServer("","root\snmp\localhost")
    
    
    'Name community name
    GetPhysicalDisks
    
    'Created community names
    For i = 1 to StrConfiguredNodes
    
    	CommStr = ConfiguredNodesCommStr & "_node_" & i
    
    	GetPhysicalDisks
    Next
    
    'Return all data to SCOM
    Call oAPI.Return(oDiscoveryData) 
    
    Sub GetPhysicalDisks
    on error resume next
    	Set objWmiNamedValueSet = CreateObject("WbemScripting.SWbemNamedValueSet")
    	objWmiNamedValueSet.Add "AgentAddress", cstr(DeviceIP)
    	objWmiNamedValueSet.Add "AgentReadCommunityName", cstr(CommStr)
    	   
    	Set colPhysicalDisk = objWmiServices.InstancesOf("SNMP_ISILON_MIB_diskTable", , objWMINamedValueset)
    	For each objItem in colPhysicalDisk
    		nIndex = objItem.diskBay
    		sDesc = objItem.diskSerialNumber
    	
            if nIndex > 0 then 
    	
    			set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='IsilonSNMP.Class.IsilonCluster.PhysicalDisk']$")
    			call oInst.AddProperty("$MPElement[Name='MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice']/IPAddress$", DeviceIP)
    			call oInst.AddProperty("$MPElement[Name='IsilonSNMP.Class.IsilonCluster.PhysicalDisk']/Index$", cstr(CommStr) & "-" & cdbl(nIndex))
    			call oInst.AddProperty("$MPElement[Name='IsilonSNMP.Class.IsilonCluster.PhysicalDisk']/NodeCommStr$", Encode(CommStr))
    			call oInst.AddProperty("$MPElement[Name='IsilonSNMP.Class.IsilonCluster.PhysicalDisk']/BayIndex$", cdbl(nIndex))
    			call oInst.AddProperty("$MPElement[Name='IsilonSNMP.Class.IsilonCluster.Nodes']/Name$", "Cluster")
    			call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", "SNMP Host " & cstr(CommStr) & " - Bay " & nIndex & " - Serial Number " & HexToString(sDesc))
    			'call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", HexToString(sDesc))
    			call oDiscoveryData.AddInstance(oInst)	
    
    'Test Section
    
    'wscript.echo Base64Encode(CommStr)
    'wscript.echo Base64Encoder(CommStr)
    'wscript.Echo CommStr
    'wscript.Echo nIndex
    'Wscript.Echo HexToString(sDesc)
    'wscript.echo cdbl(nIndex) & cstr(CommStr)
    
    
    
            end if
    Next
    	
    
    	
    	on error goto 0
    End Sub
    
    Function Decode(strB64)
    	strXML = "<B64DECODE xmlns:dt=" & Chr(34) & _
            "urn:schemas-microsoft-com:datatypes" & Chr(34) & " " & _
            "dt:dt=" & Chr(34) & "bin.base64" & Chr(34) & ">" & _
            strB64 & "</B64DECODE>"
    	
    	Set oXMLDoc = CreateObject("MSXML2.DOMDocument.3.0")
    	oXMLDoc.LoadXML(strXML)
    	decode = oXMLDoc.selectsinglenode("B64DECODE").nodeTypedValue
    	set oXMLDoc = nothing
    End Function
    
    
    Function Encode(Str)
    'Use ADODB.Stream to write Ansi string to Unicode stream
    	Set objStream = CreateObject("ADODB.Stream")
    	objStream.Type = 2
    	objStream.Open
    	objStream.Charset = "unicode"
    	objStream.WriteText Str
    	objstream.Flush
    
    	'Read the stream back as a byte array
    	objStream.Position = 0
    	objStream.Type = 1
    	temp = objstream.read(2) 'read two bytes of the stream to discard the byte order mark
    	bArray = objStream.Read
    	objStream.Close
    
    	'Convert byte array to Base64
    	set objXML = createobject("MSXML2.DOMDocument.3.0")
    	Set objNode = objXML.createElement("b64")
    	objNode.dataType = "bin.base64"
    	objNode.nodeTypedValue = bArray
    	Encode = objNode.Text
    
    	Set Stream = Nothing
    	set objNode = nothing
    	set objXML = nothing
    End Function
    
    Function HexToString(str)
                    on error resume next
                    sOutput = ""
                    For x = 1 To len(str) Step 2
                                    sChar = Chr(Clng("&h" & Mid(str,x,2)))
                                    sOutput = sOutput & sChar
                    Next
                    if err.number = 0 then
                                    HexToString = sOutput
                    Else
                                    HexToString = str
                    end if
    End Function
    set oInst = nothing
    set oDiscoveryData = nothing
    set oArgs = nothing
    set oAPI = nothing
    set objWMILocator = nothing
    set objWMIServices = nothing
    set objWMINamedValueSet = nothing
    ]]>
    								</ScriptBody>
    								<TimeoutSeconds>120</TimeoutSeconds>
    							</ProbeAction>
    						</MemberModules>
    						<Composition>
    							<Node ID="ScriptDiscovery">
    								<Node ID="Scheduler" />
    							</Node>
    						</Composition>
    					</Composite>
    				</ModuleImplementation>
    				<OutputType>System!System.Discovery.Data</OutputType>
    			</DataSourceModuleType>

    Thursday, November 12, 2009 1:00 AM

Answers

  • As far as I know health explorer should sort alphabetically, are you not seeing that? Also you can create aggregate monitors to further logically group your monitors if you have many of them.
    This posting is provided "AS IS" with no warranties, and confers no rights. Use of included script samples are subject to the terms specified at http://www.microsoft.com/info/cpyright.htm
    Tuesday, November 24, 2009 12:49 AM
    Moderator

All replies

  • 			<DataSourceModuleType ID="IsilonSNMP.DataSource.DiscoverPhysicalFan" Accessibility="Internal" Batching="false">
    				<Configuration>
    					<xsd:element minOccurs="1" name="IPAddress" type="xsd:string" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    					<xsd:element minOccurs="1" name="CommStr" type="xsd:string" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    					<xsd:element minOccurs="1" name="Interval" type="xsd:integer" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    					<xsd:element minOccurs="1" name="ConfiguredNodes" type="xsd:string" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    					<xsd:element minOccurs="1" name="FanNumber" type="xsd:string" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    					<xsd:element minOccurs="1" name="NodeCommStr" type="xsd:string" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    					<xsd:element minOccurs="1" name="FanSpeedHighCritical" type="xsd:integer" />
    					<xsd:element minOccurs="1" name="FanSpeedLowWarn" type="xsd:integer" />
    					<xsd:element minOccurs="1" name="FanSpeedLowCritical" type="xsd:integer" />
    				</Configuration>
    				<OverrideableParameters>
    					<OverrideableParameter ID="Interval" Selector="$Config/Interval$" ParameterType="int" />
    					<OverrideableParameter ID="FanSpeedHighCritical" Selector="$Config/FanSpeedHighCritical$" ParameterType="int" />
    					<OverrideableParameter ID="FanSpeedLowWarn" Selector="$Config/FanSpeedLowWarn$" ParameterType="int" />
    					<OverrideableParameter ID="FanSpeedLowCritical" Selector="$Config/FanSpeedLowCritical$" ParameterType="int" />
    				</OverrideableParameters>
    				<ModuleImplementation Isolation="Any">
    					<Composite>
    						<MemberModules>
    							<DataSource ID="Scheduler" TypeID="System!System.Scheduler">
    								<Scheduler>
    									<SimpleReccuringSchedule>
    										<Interval>$Config/Interval$</Interval>
    										<SyncTime />
    									</SimpleReccuringSchedule>
    									<ExcludeDates />
    								</Scheduler>
    							</DataSource>
    							<ProbeAction ID="ScriptDiscovery" TypeID="Windows!Microsoft.Windows.ScriptDiscoveryProbe">
    								<ScriptName>DiscoverIsilonPhysicalFan.vbs</ScriptName>
    								<Arguments>$Config/IPAddress$ $Config/CommStr$ $MPElement$ $Target/Id$ $Config/ConfiguredNodes$</Arguments>
    								<ScriptBody>
    									<![CDATA['Discover PhysicalFan
    Dim oAPI, oDiscoveryData, oInst, objWMIServices, objWMILocator, oArgs
    
    set oArgs = Wscript.Arguments
    
    if oArgs.Count <5 Then
       Wscript.Quit -1
    End If
    
    DeviceIP =  oArgs(0)
    CommStr = oArgs(1)
    SourceID = oArgs(2)
    ManagedEntityId = oArgs(3)
    StrConfiguredNodes = oArgs(4)
    CommStr = Decode(CommStr)
    ConfiguredNodesCommStr = cstr(CommStr)
    
    
    wscript.echo CommStr
    Set oAPI = CreateObject("MOM.ScriptAPI")
    set oDiscoveryData = oAPI.CreateDiscoveryData(0, SourceId, ManagedEntityId)
    Set objWMILocator = CreateObject("WbemScripting.SWbemLocator")
    Set objWMIServices = objWMiLocator.ConnectServer("","root\snmp\localhost")
    
    
    'Name community name
    GetPhysicalFan
    
    'Created community names
    For i = 1 to StrConfiguredNodes
    
    	CommStr = ConfiguredNodesCommStr & "_node_" & i
    
    	GetPhysicalFan
    Next
    
    'Return all data to SCOM
    Call oAPI.Return(oDiscoveryData) 
    
    Sub GetPhysicalFan
    on error resume next
    	Set objWmiNamedValueSet = CreateObject("WbemScripting.SWbemNamedValueSet")
    	objWmiNamedValueSet.Add "AgentAddress", cstr(DeviceIP)
    	objWmiNamedValueSet.Add "AgentReadCommunityName", cstr(CommStr)
    	   
    	Set colPhysicalFan = objWmiServices.InstancesOf("SNMP_ISILON_MIB_FanTable", , objWMINamedValueset)
    	For each objItem in colPhysicalFan
    		nIndex = objItem.fanNumber
    		sDesc = objItem.fanDescription
    	
            if nIndex > 0 then 
    	
    			set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='IsilonSNMP.Class.IsilonCluster.PhysicalFan']$")
    			call oInst.AddProperty("$MPElement[Name='MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice']/IPAddress$", DeviceIP)
    			call oInst.AddProperty("$MPElement[Name='IsilonSNMP.Class.IsilonCluster.PhysicalFan']/Index$", cstr(CommStr) & "-" & cdbl(nIndex))
    			call oInst.AddProperty("$MPElement[Name='IsilonSNMP.Class.IsilonCluster.PhysicalFan']/NodeCommStr$", Encode(CommStr))
    			call oInst.AddProperty("$MPElement[Name='IsilonSNMP.Class.IsilonCluster.PhysicalFan']/FanNumber$", cdbl(nIndex))
    			call oInst.AddProperty("$MPElement[Name='IsilonSNMP.Class.IsilonCluster.Nodes']/Name$", "Cluster")
    			'call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", "SNMP Host " & cstr(CommStr) & " - Bay " & nIndex & " - Serial Number " & HexToString(sDesc))
    			call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", "SNMP Host " & cstr(CommStr) & " - " & HexToString(sDesc))
    			call oDiscoveryData.AddInstance(oInst)	
    
    'Test Section
    
    'wscript.echo Base64Encode(CommStr)
    'wscript.echo Base64Encoder(CommStr)
    'wscript.Echo CommStr
    'wscript.Echo nIndex
    'Wscript.Echo HexToString(sDesc)
    'wscript.echo cdbl(nIndex) & cstr(CommStr)
    
    
    
            end if
    Next
    	
    
    	
    	on error goto 0
    End Sub
    
    Function Decode(strB64)
    	strXML = "<B64DECODE xmlns:dt=" & Chr(34) & _
            "urn:schemas-microsoft-com:datatypes" & Chr(34) & " " & _
            "dt:dt=" & Chr(34) & "bin.base64" & Chr(34) & ">" & _
            strB64 & "</B64DECODE>"
    	
    	Set oXMLDoc = CreateObject("MSXML2.DOMDocument.3.0")
    	oXMLDoc.LoadXML(strXML)
    	decode = oXMLDoc.selectsinglenode("B64DECODE").nodeTypedValue
    	set oXMLDoc = nothing
    End Function
    
    
    Function Encode(Str)
    'Use ADODB.Stream to write Ansi string to Unicode stream
    	Set objStream = CreateObject("ADODB.Stream")
    	objStream.Type = 2
    	objStream.Open
    	objStream.Charset = "unicode"
    	objStream.WriteText Str
    	objstream.Flush
    
    	'Read the stream back as a byte array
    	objStream.Position = 0
    	objStream.Type = 1
    	temp = objstream.read(2) 'read two bytes of the stream to discard the byte order mark
    	bArray = objStream.Read
    	objStream.Close
    
    	'Convert byte array to Base64
    	set objXML = createobject("MSXML2.DOMDocument.3.0")
    	Set objNode = objXML.createElement("b64")
    	objNode.dataType = "bin.base64"
    	objNode.nodeTypedValue = bArray
    	Encode = objNode.Text
    
    	Set Stream = Nothing
    	set objNode = nothing
    	set objXML = nothing
    End Function
    
    Function HexToString(str)
                    on error resume next
                    sOutput = ""
                    For x = 1 To len(str) Step 2
                                    sChar = Chr(Clng("&h" & Mid(str,x,2)))
                                    sOutput = sOutput & sChar
                    Next
                    if err.number = 0 then
                                    HexToString = sOutput
                    Else
                                    HexToString = str
                    end if
    End Function
    set oInst = nothing
    set oDiscoveryData = nothing
    set oArgs = nothing
    set oAPI = nothing
    set objWMILocator = nothing
    set objWMIServices = nothing
    set objWMINamedValueSet = nothing
    ]]>
    								</ScriptBody>
    								<TimeoutSeconds>120</TimeoutSeconds>
    							</ProbeAction>
    						</MemberModules>
    						<Composition>
    							<Node ID="ScriptDiscovery">
    								<Node ID="Scheduler" />
    							</Node>
    						</Composition>
    					</Composite>
    				</ModuleImplementation>
    				<OutputType>System!System.Discovery.Data</OutputType>
    			</DataSourceModuleType>
    		</ModuleTypes>
    		<MonitorTypes>
    			<UnitMonitorType ID="IsilonSNMP.MonitorType.PhysicalDiskStatus" Accessibility="Internal">
    				<MonitorTypeStates>
    					<MonitorTypeState ID="PhysicalDiskOK" NoDetection="false" />
    					<MonitorTypeState ID="PhysicalDiskNotOK" NoDetection="false" />
    				</MonitorTypeStates>
    				<Configuration>
    					<xsd:element minOccurs="1" name="Interval" type="xsd:integer" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    					<xsd:element minOccurs="1" name="IPAddress" type="xsd:string" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    					<xsd:element minOccurs="1" name="OID" type="xsd:string" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    					<xsd:element minOccurs="1" name="NodeCommStr" type="xsd:string" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    				</Configuration>
    				<MonitorImplementation>
    					<MemberModules>
    						<DataSource ID="DS1" TypeID="IsilonSNMP.DataSource.BasicSNMPProbe">
    							<Interval>$Config/Interval$</Interval>
    							<IPAddress>$Config/IPAddress$</IPAddress>
    							<CommStr>$Config/NodeCommStr$</CommStr>
    							<OID>$Config/OID$</OID>
    						</DataSource>
    						<ConditionDetection ID="CDPhysicalDiskOK" TypeID="System!System.ExpressionFilter">
    							<Expression>
    								<RegExExpression>
    									<ValueExpression>
    										<XPathQuery Type="String">/DataItem/SnmpVarBinds/SnmpVarBind[1]/Value</XPathQuery>
    									</ValueExpression>
    									<Operator>ContainsSubstring</Operator>
    									<Pattern>HEALTHY</Pattern>
    								</RegExExpression>
    							</Expression>
    						</ConditionDetection>
    						<ConditionDetection ID="CDPhysicalDiskNotOK" TypeID="System!System.ExpressionFilter">
    							<Expression>
    								<RegExExpression>
    									<ValueExpression>
    										<XPathQuery Type="String">/DataItem/SnmpVarBinds/SnmpVarBind[1]/Value</XPathQuery>
    									</ValueExpression>
    									<Operator>DoesNotContainSubstring</Operator>
    									<Pattern>HEALTHY</Pattern>
    								</RegExExpression>
    							</Expression>
    						</ConditionDetection>
    					</MemberModules>
    					<RegularDetections>
    						<RegularDetection MonitorTypeStateID="PhysicalDiskOK">
    							<Node ID="CDPhysicalDiskOK">
    								<Node ID="DS1" />
    							</Node>
    						</RegularDetection>
    						<RegularDetection MonitorTypeStateID="PhysicalDiskNotOK">
    							<Node ID="CDPhysicalDiskNotOK">
    								<Node ID="DS1" />
    							</Node>
    						</RegularDetection>
    					</RegularDetections>
    				</MonitorImplementation>
    			</UnitMonitorType>
    			<UnitMonitorType ID="IsilonSNMP.MonitorType.PhysicalFanStatus" Accessibility="Internal">
    				<MonitorTypeStates>
    					<MonitorTypeState ID="PhysicalFanOK" NoDetection="false" />
    					<MonitorTypeState ID="PhysicalFanWarn" NoDetection="false" />
    					<MonitorTypeState ID="PhysicalFanCritical" NoDetection="false" />
    				</MonitorTypeStates>
    				<Configuration>
    					<xsd:element minOccurs="1" name="Interval" type="xsd:integer" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    					<xsd:element minOccurs="1" name="IPAddress" type="xsd:string" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    					<xsd:element minOccurs="1" name="OID" type="xsd:string" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    					<xsd:element minOccurs="1" name="NodeCommStr" type="xsd:string" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    					<xsd:element minOccurs="1" name="FanSpeedHighCritical" type="xsd:integer" />
    					<xsd:element minOccurs="1" name="FanSpeedLowWarn" type="xsd:integer" />
    					<xsd:element minOccurs="1" name="FanSpeedLowCritical" type="xsd:integer" />
    				</Configuration>
    				<OverrideableParameters>
    					<OverrideableParameter ID="Interval" Selector="$Config/Interval$" ParameterType="int" />
    					<OverrideableParameter ID="FanSpeedHighCritical" Selector="$Config/FanSpeedHighCritical$" ParameterType="int" />
    					<OverrideableParameter ID="FanSpeedLowWarn" Selector="$Config/FanSpeedLowWarn$" ParameterType="int" />
    					<OverrideableParameter ID="FanSpeedLowCritical" Selector="$Config/FanSpeedLowCritical$" ParameterType="int" />
    				</OverrideableParameters>
    				<MonitorImplementation>
    					<MemberModules>
    						<DataSource ID="DS1" TypeID="IsilonSNMP.DataSource.BasicSNMPProbe">
    							<Interval>$Config/Interval$</Interval>
    							<IPAddress>$Config/IPAddress$</IPAddress>
    							<CommStr>$Config/NodeCommStr$</CommStr>
    							<OID>$Config/OID$</OID>
    						</DataSource>
    						<ConditionDetection ID="CDPhysicalFanOK" TypeID="System!System.ExpressionFilter">
    							<Expression>
    								<And>
    									<Expression>
    										<SimpleExpression>
    											<ValueExpression>
    												<XPathQuery Type="Integer">/DataItem/SnmpVarBinds/SnmpVarBind[1]/Value</XPathQuery>
    											</ValueExpression>
    											<Operator>Less</Operator>
    											<ValueExpression>
    												<Value Type="Integer">$Config/FanSpeedHighCritical$</Value>
    											</ValueExpression>
    										</SimpleExpression>
    									</Expression>
    									<Expression>
    										<SimpleExpression>
    											<ValueExpression>
    												<XPathQuery Type="Integer">/DataItem/SnmpVarBinds/SnmpVarBind[1]/Value</XPathQuery>
    											</ValueExpression>
    											<Operator>Greater</Operator>
    											<ValueExpression>
    												<Value Type="Integer">$Config/FanSpeedLowWarn$</Value>
    											</ValueExpression>
    										</SimpleExpression>
    									</Expression>
    								</And>
    							</Expression>
    						</ConditionDetection>
    						<ConditionDetection ID="CDPhysicalFanWarn" TypeID="System!System.ExpressionFilter">
    							<Expression>
    								<And>
    									<Expression>
    										<SimpleExpression>
    											<ValueExpression>
    												<XPathQuery Type="Integer">/DataItem/SnmpVarBinds/SnmpVarBind[1]/Value</XPathQuery>
    											</ValueExpression>
    											<Operator>LessEqual</Operator>
    											<ValueExpression>
    												<Value Type="Integer">$Config/FanSpeedLowWarn$</Value>
    											</ValueExpression>
    										</SimpleExpression>
    									</Expression>
    									<Expression>
    										<SimpleExpression>
    											<ValueExpression>
    												<XPathQuery Type="Integer">/DataItem/SnmpVarBinds/SnmpVarBind[1]/Value</XPathQuery>
    											</ValueExpression>
    											<Operator>Greater</Operator>
    											<ValueExpression>
    												<Value Type="Integer">$Config/FanSpeedLowWarn$</Value>
    											</ValueExpression>
    										</SimpleExpression>
    									</Expression>
    								</And>
    							</Expression>
    						</ConditionDetection>
    						<ConditionDetection ID="CDPhysicalFanCritical" TypeID="System!System.ExpressionFilter">
    							<Expression>
    								<Or>
    									<Expression>
    										<SimpleExpression>
    											<ValueExpression>
    												<XPathQuery Type="Integer">/DataItem/SnmpVarBinds/SnmpVarBind[1]/Value</XPathQuery>
    											</ValueExpression>
    											<Operator>GreaterEqual</Operator>
    											<ValueExpression>
    												<Value Type="Integer">$Config/FanSpeedHighCritical$</Value>
    											</ValueExpression>
    										</SimpleExpression>
    									</Expression>
    									<Expression>
    										<SimpleExpression>
    											<ValueExpression>
    												<XPathQuery Type="Integer">/DataItem/SnmpVarBinds/SnmpVarBind[1]/Value</XPathQuery>
    											</ValueExpression>
    											<Operator>LessEqual</Operator>
    											<ValueExpression>
    												<Value Type="Integer">$Config/FanSpeedLowCritical$</Value>
    											</ValueExpression>
    										</SimpleExpression>
    									</Expression>
    								</Or>
    							</Expression>
    						</ConditionDetection>
    					</MemberModules>
    					<RegularDetections>
    						<RegularDetection MonitorTypeStateID="PhysicalFanOK">
    							<Node ID="CDPhysicalFanOK">
    								<Node ID="DS1" />
    							</Node>
    						</RegularDetection>
    						<RegularDetection MonitorTypeStateID="PhysicalFanWarn">
    							<Node ID="CDPhysicalFanWarn">
    								<Node ID="DS1" />
    							</Node>
    						</RegularDetection>
    						<RegularDetection MonitorTypeStateID="PhysicalFanCritical">
    							<Node ID="CDPhysicalFanCritical">
    								<Node ID="DS1" />
    							</Node>
    						</RegularDetection>
    					</RegularDetections>
    				</MonitorImplementation>
    			</UnitMonitorType>
    		</MonitorTypes>
    	</TypeDefinitions>
    	<Monitoring>
    		<Discoveries>
    			<Discovery ID="IsilonSNMP.Discovery.Cluster" Enabled="true" Target="IsilonSNMP.Class.IsilonCluster" ConfirmDelivery="true" Remotable="true" Priority="Normal">
    				<Category>Discovery</Category>
    				<DiscoveryTypes>
    					<DiscoveryClass TypeID="IsilonSNMP.Class.IsilonCluster.Nodes" />
    					<DiscoveryRelationship TypeID="IsilonSNMP.Relationship.ClusterHostsNodes" />
    				</DiscoveryTypes>
    				<DataSource ID="DS1" TypeID="IsilonSNMP.DataSource.DiscoverContainmentClasses">
    					<IPAddress>$Target/Property[Type="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice"]/IPAddress$</IPAddress>
    					<ClassID>$MPElement[Name="IsilonSNMP.Class.IsilonCluster.Nodes"]$</ClassID>
    					<InstanceSettings>
    						<Settings>
    							<Setting>
    								<Name>$MPElement[Name="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice"]/IPAddress$</Name>
    								<Value>$Target/Property[Type="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice"]/IPAddress$</Value>
    							</Setting>
    							<Setting>
    								<Name>$MPElement[Name="System!System.Entity"]/DisplayName$</Name>
    								<Value>Cluster</Value>
    							</Setting>
    							<Setting>
    								<Name>$MPElement[Name="IsilonSNMP.Class.IsilonCluster.Nodes"]/Name$</Name>
    								<Value>Cluster</Value>
    							</Setting>
    						</Settings>
    					</InstanceSettings>
    				</DataSource>
    			</Discovery>
    			<Discovery ID="IsilonSNMP.Discovery.IsilonCluster" Enabled="true" Target="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice" ConfirmDelivery="true" Remotable="true" Priority="Normal">
    				<Category>Discovery</Category>
    				<DiscoveryTypes>
    					<DiscoveryClass TypeID="IsilonSNMP.Class.IsilonCluster" />
    				</DiscoveryTypes>
    				<DataSource ID="DS1" TypeID="IsilonSNMP.DataSource.DiscoverCluster">
    					<Interval>600</Interval>
    					<IP>$Target/Property[Type="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice"]/IPAddress$</IP>
    					<CommunityString>$Target/Property[Type="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice"]/CommunityString$</CommunityString>
    					<SystemOID>$Target/Property[Type="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice"]/SystemOID$</SystemOID>
    				</DataSource>
    			</Discovery>
    			<Discovery ID="IsilonSNMP.Discovery.IsilonClustersGroup" Enabled="true" Target="IsilonSNMP.Group.IsilonClusters" ConfirmDelivery="true" Remotable="true" Priority="Normal">
    				<Category>Discovery</Category>
    				<DiscoveryTypes>
    					<DiscoveryRelationship TypeID="IsilonSNMP.Relationship.IsilonClustersGroupContainsIsilonClusters" />
    				</DiscoveryTypes>
    				<DataSource ID="GP1" TypeID="SC!Microsoft.SystemCenter.GroupPopulator">
    					<RuleId>$MPElement$</RuleId>
    					<GroupInstanceId>$MPElement[Name="IsilonSNMP.Group.IsilonClusters"]$</GroupInstanceId>
    					<MembershipRules>
    						<MembershipRule>
    							<MonitoringClass>$MPElement[Name="IsilonSNMP.Class.IsilonCluster"]$</MonitoringClass>
    							<RelationshipClass>$MPElement[Name="IsilonSNMP.Relationship.IsilonClustersGroupContainsIsilonClusters"]$</RelationshipClass>
    							<Expression>
    								<RegExExpression>
    									<ValueExpression>
    										<Property>$MPElement[Name="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice"]/IPAddress$</Property>
    									</ValueExpression>
    									<Operator>ContainsSubstring</Operator>
    									<Pattern>.</Pattern>
    								</RegExExpression>
    							</Expression>
    						</MembershipRule>
    					</MembershipRules>
    				</DataSource>
    			</Discovery>
    			<Discovery ID="IsilonSNMP.Discovery.PhysicalDisk" Enabled="true" Target="IsilonSNMP.Class.IsilonCluster.Nodes" ConfirmDelivery="true" Remotable="true" Priority="Normal">
    				<Category>Discovery</Category>
    				<DiscoveryTypes>
    					<DiscoveryClass TypeID="IsilonSNMP.Class.IsilonCluster.PhysicalDisk" />
    					<DiscoveryRelationship TypeID="IsilonSNMP.Relationship.NodesHostsPhysicalDisk" />
    				</DiscoveryTypes>
    				<DataSource ID="DS1" TypeID="IsilonSNMP.DataSource.DiscoverPhysicalDisk">
    					<IPAddress>$Target/Host/Property[Type="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice"]/IPAddress$</IPAddress>
    					<CommStr>$Target/Host/Property[Type="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice"]/CommunityString$</CommStr>
    					<Interval>7800</Interval>
    					<ConfiguredNodes>$Target/Host/Property[Type="IsilonSNMP.Class.IsilonCluster"]/ConfiguredNodes$</ConfiguredNodes>
    					<BayIndex>$MPElement[Name="IsilonSNMP.Class.IsilonCluster.PhysicalDisk"]/BayIndex$</BayIndex>
    					<NodeCommStr>$MPElement[Name="IsilonSNMP.Class.IsilonCluster.PhysicalDisk"]/NodeCommStr$</NodeCommStr>
    				</DataSource>
    			</Discovery>
    			<Discovery ID="IsilonSNMP.Discovery.PhysicalFan" Enabled="true" Target="IsilonSNMP.Class.IsilonCluster.Nodes" ConfirmDelivery="true" Remotable="true" Priority="Normal">
    				<Category>Discovery</Category>
    				<DiscoveryTypes>
    					<DiscoveryClass TypeID="IsilonSNMP.Class.IsilonCluster.PhysicalFan" />
    					<DiscoveryRelationship TypeID="IsilonSNMP.Relationship.NodesHostsPhysicalFan" />
    				</DiscoveryTypes>
    				<DataSource ID="DS1" TypeID="IsilonSNMP.DataSource.DiscoverPhysicalFan">
    					<IPAddress>$Target/Host/Property[Type="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice"]/IPAddress$</IPAddress>
    					<CommStr>$Target/Host/Property[Type="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice"]/CommunityString$</CommStr>
    					<Interval>8000</Interval>
    					<ConfiguredNodes>$Target/Host/Property[Type="IsilonSNMP.Class.IsilonCluster"]/ConfiguredNodes$</ConfiguredNodes>
    					<FanNumber>$MPElement[Name="IsilonSNMP.Class.IsilonCluster.PhysicalFan"]/FanNumber$</FanNumber>
    					<NodeCommStr>$MPElement[Name="IsilonSNMP.Class.IsilonCluster.PhysicalFan"]/NodeCommStr$</NodeCommStr>
    					<FanSpeedHighCritical>14500</FanSpeedHighCritical>
    					<FanSpeedLowWarn>3400</FanSpeedLowWarn>
    					<FanSpeedLowCritical>3000</FanSpeedLowCritical>
    				</DataSource>
    			</Discovery>
    		</Discoveries>
    		<Monitors>
    			<UnitMonitor ID="UIGeneratedMonitore2c4dd195da8497bb99c9711e4134d70" Accessibility="Public" Enabled="true" Target="IsilonSNMP.Class.IsilonCluster" ParentMonitorID="Health!System.Health.AvailabilityState" Remotable="true" Priority="Normal" TypeID="Snmp!System.SnmpTrapProvider.2SingleEvent2StateMonitorType" ConfirmDelivery="false">
    				<Category>Custom</Category>
    				<AlertSettings AlertMessage="UIGeneratedMonitore2c4dd195da8497bb99c9711e4134d70_AlertMessageResourceID">
    					<AlertOnState>Warning</AlertOnState>
    					<AutoResolve>true</AutoResolve>
    					<AlertPriority>Normal</AlertPriority>
    					<AlertSeverity>MatchMonitorHealth</AlertSeverity>
    				</AlertSettings>
    				<OperationalStates>
    					<OperationalState ID="UIGeneratedOpStateId843498792d7d4fbf80d83f3939255dd9" MonitorTypeStateID="SecondEventRaised" HealthState="Success" />
    					<OperationalState ID="UIGeneratedOpStateId9fd776cd21a747c5994738e863b31fb9" MonitorTypeStateID="FirstEventRaised" HealthState="Warning" />
    				</OperationalStates>
    				<Configuration>
    					<FirstIP>$Target/Property[Type="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice"]/IPAddress$</FirstIP>
    					<FirstCommunityString>$Target/Property[Type="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice"]/CommunityString$</FirstCommunityString>
    					<FirstAllTraps>false</FirstAllTraps>
    					<FirstVersion>$Target/Property[Type="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice"]/Version$</FirstVersion>
    					<FirstOIDProps>
    						<OIDProp>.1.3.6.1.4.1.12124.1.1.2.0</OIDProp>
    					</FirstOIDProps>
    					<FirstExpression>
    						<SimpleExpression>
    							<ValueExpression>
    								<XPathQuery Type="String">/DataItem/SnmpVarBinds/SnmpVarBind[1]/Value</XPathQuery>
    							</ValueExpression>
    							<Operator>Equal</Operator>
    							<ValueExpression>
    								<Value Type="String">1</Value>
    							</ValueExpression>
    						</SimpleExpression>
    					</FirstExpression>
    					<SecondIP>$Target/Property[Type="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice"]/IPAddress$</SecondIP>
    					<SecondCommunityString>$Target/Property[Type="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice"]/CommunityString$</SecondCommunityString>
    					<SecondAllTraps>false</SecondAllTraps>
    					<SecondVersion>$Target/Property[Type="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice"]/Version$</SecondVersion>
    					<SecondOIDProps>
    						<OIDProp>.1.3.6.1.4.1.12124.1.1.2.0</OIDProp>
    					</SecondOIDProps>
    					<SecondExpression>
    						<SimpleExpression>
    							<ValueExpression>
    								<XPathQuery Type="String">/DataItem/SnmpVarBinds/SnmpVarBind[1]/Value</XPathQuery>
    							</ValueExpression>
    							<Operator>NotEqual</Operator>
    							<ValueExpression>
    								<Value Type="String">1</Value>
    							</ValueExpression>
    						</SimpleExpression>
    					</SecondExpression>
    				</Configuration>
    			</UnitMonitor>
    			<UnitMonitor ID="IsilonSNMP.Monitor.PhysicalDiskStatus" Accessibility="Internal" Enabled="true" Target="IsilonSNMP.Class.IsilonCluster.PhysicalDisk" ParentMonitorID="Health!System.Health.AvailabilityState" Remotable="true" Priority="Normal" TypeID="IsilonSNMP.MonitorType.PhysicalDiskStatus" ConfirmDelivery="true">
    				<Category>AvailabilityHealth</Category>
    				<AlertSettings AlertMessage="IsilonSNMP.Monitor.PhysicalDiskStatus_AlertMessageResourceID">
    					<AlertOnState>Warning</AlertOnState>
    					<AutoResolve>true</AutoResolve>
    					<AlertPriority>Normal</AlertPriority>
    					<AlertSeverity>MatchMonitorHealth</AlertSeverity>
    					<AlertParameters>
    						<AlertParameter1>$Target/Property[Type="System!System.Entity"]/DisplayName$</AlertParameter1>
    						<AlertParameter2>$Data/Context/SnmpVarBinds/SnmpVarBind[1]/Value$</AlertParameter2>
    					</AlertParameters>
    				</AlertSettings>
    				<OperationalStates>
    					<OperationalState ID="IsilonSNMP.Monitor.PhysicalDiskStatus_PhysicalDiskOK" MonitorTypeStateID="PhysicalDiskOK" HealthState="Success" />
    					<OperationalState ID="IsilonSNMP.Monitor.PhysicalDiskStatus_PhysicalDiskNotOK" MonitorTypeStateID="PhysicalDiskNotOK" HealthState="Warning" />
    				</OperationalStates>
    				<Configuration>
    					<Interval>120</Interval>
    					<IPAddress>$Target/Host/Host/Property[Type="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice"]/IPAddress$</IPAddress>
    					<OID>.1.3.6.1.4.1.12124.2.52.1.5.$Target/Property[Type="IsilonSNMP.Class.IsilonCluster.PhysicalDisk"]/BayIndex$</OID>
    					<NodeCommStr>$Target/Property[Type="IsilonSNMP.Class.IsilonCluster.PhysicalDisk"]/NodeCommStr$</NodeCommStr>
    				</Configuration>
    			</UnitMonitor>
    			<UnitMonitor ID="IsilonSNMP.Monitor.PhysicalFanStatus" Accessibility="Internal" Enabled="true" Target="IsilonSNMP.Class.IsilonCluster.PhysicalFan" ParentMonitorID="Health!System.Health.AvailabilityState" Remotable="true" Priority="Normal" TypeID="IsilonSNMP.MonitorType.PhysicalFanStatus" ConfirmDelivery="true">
    				<Category>AvailabilityHealth</Category>
    				<AlertSettings AlertMessage="IsilonSNMP.Monitor.PhysicalFanStatus_AlertMessageResourceID">
    					<AlertOnState>Warning</AlertOnState>
    					<AutoResolve>true</AutoResolve>
    					<AlertPriority>Normal</AlertPriority>
    					<AlertSeverity>MatchMonitorHealth</AlertSeverity>
    					<AlertParameters>
    						<AlertParameter1>$Target/Property[Type="System!System.Entity"]/DisplayName$</AlertParameter1>
    						<AlertParameter2>$Data/Context/SnmpVarBinds/SnmpVarBind[1]/Value$</AlertParameter2>
    					</AlertParameters>
    				</AlertSettings>
    				<OperationalStates>
    					<OperationalState ID="IsilonSNMP.Monitor.PhysicalFanStatus_PhysicalFanOK" MonitorTypeStateID="PhysicalFanOK" HealthState="Success" />
    					<OperationalState ID="IsilonSNMP.Monitor.PhysicalFanStatus_PhysicalFanWarn" MonitorTypeStateID="PhysicalFanWarn" HealthState="Warning" />
    					<OperationalState ID="IsilonSNMP.Monitor.PhysicalFanStatus_PhysicalFanCritical" MonitorTypeStateID="PhysicalFanCritical" HealthState="Error" />
    				</OperationalStates>
    				<Configuration>
    					<Interval>120</Interval>
    					<IPAddress>$Target/Host/Host/Property[Type="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice"]/IPAddress$</IPAddress>
    					<OID>.1.3.6.1.4.1.12124.2.53.1.4.$Target/Property[Type="IsilonSNMP.Class.IsilonCluster.PhysicalFan"]/FanNumber$</OID>
    					<NodeCommStr>$Target/Property[Type="IsilonSNMP.Class.IsilonCluster.PhysicalFan"]/NodeCommStr$</NodeCommStr>
    					<FanSpeedHighCritical>14500</FanSpeedHighCritical>
    					<FanSpeedLowWarn>3400</FanSpeedLowWarn>
    					<FanSpeedLowCritical>3000</FanSpeedLowCritical>
    				</Configuration>
    			</UnitMonitor>
    			<DependencyMonitor ID="IsilonSNMP.Monitor.ClusterPhysicalDiskAvailabilityDependency" Accessibility="Internal" Enabled="true" Target="IsilonSNMP.Class.IsilonCluster.Nodes" ParentMonitorID="Health!System.Health.AvailabilityState" Remotable="true" Priority="Normal" RelationshipType="IsilonSNMP.Relationship.NodesHostsPhysicalDisk" MemberMonitor="IsilonSNMP.Monitor.PhysicalDiskStatus">
    				<Category>AvailabilityHealth</Category>
    				<Algorithm>WorstOf</Algorithm>
    				<MemberUnAvailable>Error</MemberUnAvailable>
    			</DependencyMonitor>
    			<DependencyMonitor ID="IsilonSNMP.Monitor.ClusterPhysicalFanAvailabilityDependency" Accessibility="Internal" Enabled="true" Target="IsilonSNMP.Class.IsilonCluster.Nodes" ParentMonitorID="Health!System.Health.AvailabilityState" Remotable="true" Priority="Normal" RelationshipType="IsilonSNMP.Relationship.NodesHostsPhysicalFan" MemberMonitor="IsilonSNMP.Monitor.PhysicalFanStatus">
    				<Category>AvailabilityHealth</Category>
    				<Algorithm>WorstOf</Algorithm>
    				<MemberUnAvailable>Error</MemberUnAvailable>
    			</DependencyMonitor>
    			<DependencyMonitor ID="IsilonSNMP.Monitor.ClusterClusterAvailabilityDependency" Accessibility="Internal" Enabled="true" Target="IsilonSNMP.Class.IsilonCluster" ParentMonitorID="Health!System.Health.AvailabilityState" Remotable="true" Priority="Normal" RelationshipType="IsilonSNMP.Relationship.ClusterHostsNodes" MemberMonitor="Health!System.Health.AvailabilityState">
    				<Category>AvailabilityHealth</Category>
    				<Algorithm>WorstOf</Algorithm>
    				<MemberUnAvailable>Error</MemberUnAvailable>
    			</DependencyMonitor>
    		</Monitors>
    	</Monitoring>
    	<Presentation>
    		<StringResources>
    			<StringResource ID="UIGeneratedMonitore2c4dd195da8497bb99c9711e4134d70_AlertMessageResourceID" />
    			<StringResource ID="AlertMessageIDb1a3848769824949889fcc4c159cf462" />
    			<StringResource ID="IsilonSNMP.Monitor.PhysicalDiskStatus_AlertMessageResourceID" />
    			<StringResource ID="IsilonSNMP.Monitor.PhysicalFanStatus_AlertMessageResourceID" />
    		</StringResources>
    	</Presentation>
    	<LanguagePacks>
    		<LanguagePack ID="ENU" IsDefault="true">
    			<DisplayStrings>
    				<DisplayString ElementID="IsilonSNMP">
    					<Name>Isilon SNMP MP</Name>
    					<Description>Management pack to discover a Isilon cluster running OneFS 5.5</Description>
    				</DisplayString>
    				<DisplayString ElementID="IsilonSNMP.Class.IsilonCluster">
    					<Name>Isilon Cluster</Name>
    					<Description>Isilon SNMP Device</Description>
    				</DisplayString>
    				<DisplayString ElementID="IsilonSNMP.Class.IsilonCluster" SubElementID="Hostname">
    					<Name>Hostname</Name>
    				</DisplayString>
    				<DisplayString ElementID="IsilonSNMP.Class.IsilonCluster" SubElementID="ConfiguredNodes">
    					<Name>ConfiguredNodes</Name>
    				</DisplayString>
    				<DisplayString ElementID="IsilonSNMP.Class.IsilonCluster.Nodes" SubElementID="Name">
    					<Name>Name</Name>
    				</DisplayString>
    				<DisplayString ElementID="IsilonSNMP.Class.IsilonCluster.Nodes">
    					<Name>Isilon Cluster Hosts Nodes</Name>
    					<Description>Containment class for the Isilon cluster with components such as hard disks, fans, power supplies, etc.</Description>
    				</DisplayString>
    				<DisplayString ElementID="IsilonSNMP.Relationship.ClusterHostsNodes">
    					<Name>Isilon Cluster Hosts Nodes</Name>
    				</DisplayString>
    				<DisplayString ElementID="IsilonSNMP.Discovery.IsilonCluster">
    					<Name>Discover Isilon Cluster</Name>
    					<Description>Discovery of the Isilon Cluster using OID strings from RFC1213.</Description>
    				</DisplayString>
    				<DisplayString ElementID="IsilonSNMP.DataSource.BasicSNMPProbe">
    					<Name>Isilon Basic Probe Data Source</Name>
    				</DisplayString>
    				<DisplayString ElementID="IsilonSNMP.DataSource.DiscoverCluster">
    					<Name>Discover Isilon Cluster</Name>
    				</DisplayString>
    				<DisplayString ElementID="IsilonSNMP.Relationship.IsilonClustersGroupContainsIsilonClusters">
    					<Name>Isilon Devices Group Contains Isilon Cluster</Name>
    				</DisplayString>
    				<DisplayString ElementID="IsilonSNMP.Discovery.Cluster">
    					<Name>Discover Isilon Cluster Containment Class</Name>
    					<Description>Discovers the Cluster containment class, which hosts managed objects such as fans</Description>
    				</DisplayString>
    				<DisplayString ElementID="IsilonSNMP.Discovery.IsilonClustersGroup">
    					<Name>Isilon Deivce Group Populator</Name>
    				</DisplayString>
    				<DisplayString ElementID="UIGeneratedMonitore2c4dd195da8497bb99c9711e4134d70">
    					<Name>PlaceHolder</Name>
    					<Description>Place Holder to detect isilon cluster</Description>
    				</DisplayString>
    				<DisplayString ElementID="UIGeneratedMonitore2c4dd195da8497bb99c9711e4134d70" SubElementID="UIGeneratedOpStateId843498792d7d4fbf80d83f3939255dd9">
    					<Name>Second Event Raised</Name>
    				</DisplayString>
    				<DisplayString ElementID="UIGeneratedMonitore2c4dd195da8497bb99c9711e4134d70" SubElementID="UIGeneratedOpStateId9fd776cd21a747c5994738e863b31fb9">
    					<Name>First Event Raised</Name>
    				</DisplayString>
    				<DisplayString ElementID="UIGeneratedMonitore2c4dd195da8497bb99c9711e4134d70_AlertMessageResourceID">
    					<Name>PlaceHolder</Name>
    					<Description>placeholder alert to detect isilon</Description>
    				</DisplayString>
    				<DisplayString ElementID="IsilonSNMP.Monitor.PhysicalDiskStatus">
    					<Name>Isilon PhysicalDisk Status Monitor</Name>
    					<Description>Monitor that generates an alert when the PhysicalDisk status is not ok.</Description>
    				</DisplayString>
    				<DisplayString ElementID="IsilonSNMP.Monitor.PhysicalDiskStatus" SubElementID="IsilonSNMP.Monitor.PhysicalDiskStatus_PhysicalDiskOK">
    					<Name>PhysicalDiskOK</Name>
    				</DisplayString>
    				<DisplayString ElementID="IsilonSNMP.Monitor.PhysicalDiskStatus" SubElementID="IsilonSNMP.Monitor.PhysicalDiskStatus_PhysicalDiskNotOK">
    					<Name>PhysicalDiskOK</Name>
    				</DisplayString>
    				<DisplayString ElementID="IsilonSNMP.Monitor.PhysicalDiskStatus_AlertMessageResourceID">
    					<Name>Isilon PhysicalDisk Status</Name>
    					<Description>The Disk ({0})  is in a warning or error state.  The Disk state is: {1}.</Description>
    				</DisplayString>
    				<DisplayString ElementID="IsilonSNMP.Class.IsilonCluster.PhysicalDisk">
    					<Name>Isilon Disk</Name>
    					<Description>Disk</Description>
    				</DisplayString>
    				<DisplayString ElementID="IsilonSNMP.Class.IsilonCluster.PhysicalDisk" SubElementID="Index">
    					<Name>Index</Name>
    				</DisplayString>
    				<DisplayString ElementID="IsilonSNMP.Relationship.NodesHostsPhysicalDisk">
    					<Name>Isilon Cluster Hosts PhysicalDisk</Name>
    				</DisplayString>
    				<DisplayString ElementID="IsilonSNMP.Discovery.PhysicalDisk">
    					<Name>Discover Isilon Cluster Physical Disks</Name>
    				</DisplayString>
    				<DisplayString ElementID="IsilonSNMP.DataSource.DiscoverPhysicalDisk">
    					<Name>Discover Isilon Cluster PhysicalDisk</Name>
    				</DisplayString>
    				<DisplayString ElementID="IsilonSNMP.Monitor.ClusterPhysicalDiskAvailabilityDependency">
    					<Name>Isilon Disk</Name>
    				</DisplayString>
    				<DisplayString ElementID="IsilonSNMP.Monitor.PhysicalFanStatus">
    					<Name>Isilon PhysicalFan Status Monitor</Name>
    					<Description>Monitor that generates an alert when the PhysicalFan speed is not within a premited range.</Description>
    				</DisplayString>
    				<DisplayString ElementID="IsilonSNMP.Monitor.PhysicalFanStatus" SubElementID="IsilonSNMP.Monitor.PhysicalFanStatus_PhysicalFanOK">
    					<Name>PhysicalFanOK</Name>
    				</DisplayString>
    				<DisplayString ElementID="IsilonSNMP.Monitor.PhysicalFanStatus" SubElementID="IsilonSNMP.Monitor.PhysicalFanStatus_PhysicalFanWarn">
    					<Name>PhysicalFanWarn</Name>
    				</DisplayString>
    				<DisplayString ElementID="IsilonSNMP.Monitor.PhysicalFanStatus" SubElementID="IsilonSNMP.Monitor.PhysicalFanStatus_PhysicalFanCritical">
    					<Name>PhysicalFanCritical</Name>
    				</DisplayString>
    				<DisplayString ElementID="IsilonSNMP.Monitor.PhysicalFanStatus_AlertMessageResourceID">
    					<Name>Isilon PhysicalFan Status</Name>
    					<Description>The Fan ({0})  is in a warning or error state.  Current Fan speed is: {1}.</Description>
    				</DisplayString>
    				<DisplayString ElementID="IsilonSNMP.Class.IsilonCluster.PhysicalFan">
    					<Name>Isilon Fan</Name>
    					<Description>Fan</Description>
    				</DisplayString>
    				<DisplayString ElementID="IsilonSNMP.Class.IsilonCluster.PhysicalFan" SubElementID="Index">
    					<Name>Index</Name>
    				</DisplayString>
    				<DisplayString ElementID="IsilonSNMP.Relationship.NodesHostsPhysicalFan">
    					<Name>Isilon Cluster Hosts PhysicalFan</Name>
    				</DisplayString>
    				<DisplayString ElementID="IsilonSNMP.Discovery.PhysicalFan">
    					<Name>Discover Isilon Cluster Physical Fans</Name>
    				</DisplayString>
    				<DisplayString ElementID="IsilonSNMP.DataSource.DiscoverPhysicalFan">
    					<Name>Discover Isilon Cluster PhysicalFan</Name>
    				</DisplayString>
    				<DisplayString ElementID="IsilonSNMP.Monitor.ClusterPhysicalFanAvailabilityDependency">
    					<Name>Isilon Fan</Name>
    				</DisplayString>
    				<DisplayString ElementID="IsilonSNMP.Monitor.ClusterClusterAvailabilityDependency">
    					<Name>Cluster</Name>
    				</DisplayString>
    			</DisplayStrings>
    		</LanguagePack>
    	</LanguagePacks>
    Thursday, November 12, 2009 1:01 AM
  • *crickets*
    Tuesday, November 17, 2009 7:35 PM
  • Well I haven't received any input from this newsgroup however I did poll a few programmer friends of mine to address question number 2 - monitors and the different thresholds for the fan.  They thought that it would be more economical to address the different thresholds in the monitor itself using expression over creation different discoveries and monitors for the different fan types.  Code update posted below, any thoughts from the newsgroup?

    I still have 2 outstanding questions, dynamic groups and sorting the health explorer.  It's ok to say "nope, not possible today".  To recap;

    Health Explorer:
    When I create a roll-up to add the monitor for viewing in the health explorer everything is a jumble, can this be sorted numerically or alphabetical?

    Dynamic Groups:
    At this time I have to add community strings into a class in order to query other nodes within the cluster.  Can I use these strings as searchables to create dynamic groups based on the community strings?  Maybe a code example?

    Cluster
    -Public
    --Public-Fan
    --Public-Disk
    -Public_node_2
    --Public_node_2-Fan
    --Public_node_2-Disk
    etc...

    Expressions Code Update - Data Source:

    <DataSourceModuleType ID="IsilonSNMP.DataSource.DiscoverPhysicalFan" Accessibility="Internal" Batching="false">
            <Configuration>
              <xsd:element minOccurs="1" name="IPAddress" type="xsd:string" />
              <xsd:element minOccurs="1" name="CommStr" type="xsd:string" />
              <xsd:element minOccurs="1" name="Interval" type="xsd:integer" />
              <xsd:element minOccurs="1" name="ConfiguredNodes" type="xsd:string" />
              <xsd:element minOccurs="1" name="FanNumber" type="xsd:string" />
              <xsd:element minOccurs="1" name="NodeCommStr" type="xsd:string" />
              <xsd:element minOccurs="1" name="PowerSupplyFanSpeedHighCritical" type="xsd:integer" />
              <xsd:element minOccurs="1" name="PowerSupplyFanSpeedLowCritical" type="xsd:integer" />
              <xsd:element minOccurs="1" name="PowerSupplyFanSpeedLowWarn" type="xsd:integer" />
              <xsd:element minOccurs="1" name="ChassisFanSpeedHighCritical" type="xsd:integer" />
              <xsd:element minOccurs="1" name="ChassisFanSpeedLowCritical" type="xsd:integer" />
              <xsd:element minOccurs="1" name="ChassisFanSpeedHighWarn" type="xsd:integer" />
              <xsd:element minOccurs="1" name="ChassisFanSpeedLowWarn" type="xsd:integer" />
            </Configuration>
            <OverrideableParameters>
              <OverrideableParameter ID="Interval" Selector="$Config/Interval$" ParameterType="int" />
              <OverrideableParameter ID="PowerSupplyFanSpeedHighCritical" Selector="$Config/PowerSupplyFanSpeedHighCritical$" ParameterType="int" />
              <OverrideableParameter ID="PowerSupplyFanSpeedLowCritical" Selector="$Config/PowerSupplyFanSpeedLowCritical$" ParameterType="int" />
              <OverrideableParameter ID="PowerSupplyFanSpeedLowWarn" Selector="$Config/PowerSupplyFanSpeedLowWarn$" ParameterType="int" />
              <OverrideableParameter ID="ChassisFanSpeedHighCritical" Selector="$Config/ChassisFanSpeedHighCritical$" ParameterType="int" />
              <OverrideableParameter ID="ChassisFanSpeedLowCritical" Selector="$Config/ChassisFanSpeedLowCritical$" ParameterType="int" />
              <OverrideableParameter ID="ChassisFanSpeedHighWarn" Selector="$Config/ChassisFanSpeedHighWarn$" ParameterType="int" />
              <OverrideableParameter ID="ChassisFanSpeedLowWarn" Selector="$Config/ChassisFanSpeedLowWarn$" ParameterType="int" />
            </OverrideableParameters>
          </DataSourceModuleType>

    Expressions Code Update - Unit Monitor Type:

    <UnitMonitorType ID="IsilonSNMP.MonitorType.PhysicalFanStatus" Accessibility="Internal">
            <MonitorTypeStates>
              <MonitorTypeState ID="PhysicalFanOK" NoDetection="false" />
              <MonitorTypeState ID="PhysicalFanWarn" NoDetection="false" />
              <MonitorTypeState ID="PhysicalFanCritical" NoDetection="false" />
            </MonitorTypeStates>
            <Configuration>
              <xsd:element minOccurs="1" name="Interval" type="xsd:integer" />
              <xsd:element minOccurs="1" name="IPAddress" type="xsd:string" />
              <xsd:element minOccurs="1" name="OID" type="xsd:string" />
              <xsd:element minOccurs="1" name="NodeCommStr" type="xsd:string" />
              <xsd:element minOccurs="1" name="PowerSupplyFanSpeedHighCritical" type="xsd:integer" />
              <xsd:element minOccurs="1" name="PowerSupplyFanSpeedLowCritical" type="xsd:integer" />
              <xsd:element minOccurs="1" name="PowerSupplyFanSpeedLowWarn" type="xsd:integer" />
              <xsd:element minOccurs="1" name="ChassisFanSpeedHighCritical" type="xsd:integer" />
              <xsd:element minOccurs="1" name="ChassisFanSpeedLowCritical" type="xsd:integer" />
              <xsd:element minOccurs="1" name="ChassisFanSpeedHighWarn" type="xsd:integer" />
              <xsd:element minOccurs="1" name="ChassisFanSpeedLowWarn" type="xsd:integer" />
              <xsd:element minOccurs="1" name="DisplayName" type="xsd:string" />
            </Configuration>
            <OverrideableParameters>
              <OverrideableParameter ID="Interval" Selector="$Config/Interval$" ParameterType="int" />
              <OverrideableParameter ID="PowerSupplyFanSpeedHighCritical" Selector="$Config/PowerSupplyFanSpeedHighCritical$" ParameterType="int" />
              <OverrideableParameter ID="PowerSupplyFanSpeedLowCritical" Selector="$Config/PowerSupplyFanSpeedLowCritical$" ParameterType="int" />
              <OverrideableParameter ID="PowerSupplyFanSpeedLowWarn" Selector="$Config/PowerSupplyFanSpeedLowWarn$" ParameterType="int" />
              <OverrideableParameter ID="ChassisFanSpeedHighCritical" Selector="$Config/ChassisFanSpeedHighCritical$" ParameterType="int" />
              <OverrideableParameter ID="ChassisFanSpeedLowCritical" Selector="$Config/ChassisFanSpeedLowCritical$" ParameterType="int" />
              <OverrideableParameter ID="ChassisFanSpeedHighWarn" Selector="$Config/ChassisFanSpeedHighWarn$" ParameterType="int" />
              <OverrideableParameter ID="ChassisFanSpeedLowWarn" Selector="$Config/ChassisFanSpeedLowWarn$" ParameterType="int" />
            </OverrideableParameters>
            <MonitorImplementation>
              <MemberModules>
                <DataSource ID="DS1" TypeID="IsilonSNMP.DataSource.BasicSNMPProbe">
                  <Interval>$Config/Interval$</Interval>
                  <IPAddress>$Config/IPAddress$</IPAddress>
                  <CommStr>$Config/NodeCommStr$</CommStr>
                  <OID>$Config/OID$</OID>
                </DataSource>
                <ConditionDetection ID="CDPhysicalFanOK" TypeID="System!System.ExpressionFilter">
                  <Expression>
                    <Or>
                      <Expression>
                        <And>
                          <Expression>
                            <RegExExpression>
                              <ValueExpression>
                                <Value Type="String">$Config/DisplayName$</Value>
                              </ValueExpression>
                              <Operator>ContainsSubstring</Operator>
                              <Pattern>Power</Pattern>
                            </RegExExpression>
                          </Expression>
                          <Expression>
                            <And>
                              <Expression>
                                <SimpleExpression>
                                  <ValueExpression>
                                    <XPathQuery Type="Integer">/DataItem/SnmpVarBinds/SnmpVarBind[1]/Value</XPathQuery>
                                  </ValueExpression>
                                  <Operator>Less</Operator>
                                  <ValueExpression>
                                    <Value Type="Integer">$Config/PowerSupplyFanSpeedHighCritical$</Value>
                                  </ValueExpression>
                                </SimpleExpression>
                              </Expression>
                              <Expression>
                                <SimpleExpression>
                                  <ValueExpression>
                                    <XPathQuery Type="Integer">/DataItem/SnmpVarBinds/SnmpVarBind[1]/Value</XPathQuery>
                                  </ValueExpression>
                                  <Operator>Greater</Operator>
                                  <ValueExpression>
                                    <Value Type="Integer">$Config/PowerSupplyFanSpeedLowWarn$</Value>
                                  </ValueExpression>
                                </SimpleExpression>
                              </Expression>
                            </And>
                          </Expression>
                        </And>
                      </Expression>
                      <Expression>
                        <And>
                          <Expression>
                            <RegExExpression>
                              <ValueExpression>
                                <Value Type="String">$Config/DisplayName$</Value>
                              </ValueExpression>
                              <Operator>ContainsSubstring</Operator>
                              <Pattern>Chassis</Pattern>
                            </RegExExpression>
                          </Expression>
                          <Expression>
                            <And>
                              <Expression>
                                <SimpleExpression>
                                  <ValueExpression>
                                    <XPathQuery Type="Integer">/DataItem/SnmpVarBinds/SnmpVarBind[1]/Value</XPathQuery>
                                  </ValueExpression>
                                  <Operator>Less</Operator>
                                  <ValueExpression>
                                    <Value Type="Integer">$Config/ChassisFanSpeedHighWarn$</Value>
                                  </ValueExpression>
                                </SimpleExpression>
                              </Expression>
                              <Expression>
                                <SimpleExpression>
                                  <ValueExpression>
                                    <XPathQuery Type="Integer">/DataItem/SnmpVarBinds/SnmpVarBind[1]/Value</XPathQuery>
                                  </ValueExpression>
                                  <Operator>Greater</Operator>
                                  <ValueExpression>
                                    <Value Type="Integer">$Config/ChassisFanSpeedLowWarn$</Value>
                                  </ValueExpression>
                                </SimpleExpression>
                              </Expression>
                            </And>
                          </Expression>
                        </And>
                      </Expression>
                    </Or>
                  </Expression>
                </ConditionDetection>
                <ConditionDetection ID="CDPhysicalFanWarn" TypeID="System!System.ExpressionFilter">
                  <Expression>
                    <Or>
                      <Expression>
                        <And>
                          <Expression>
                            <RegExExpression>
                              <ValueExpression>
                                <Value Type="String">$Config/DisplayName$</Value>
                              </ValueExpression>
                              <Operator>ContainsSubstring</Operator>
                              <Pattern>``</Pattern>
                            </RegExExpression>
                          </Expression>
                          <Expression>
                            <And>
                              <Expression>
                                <SimpleExpression>
                                  <ValueExpression>
                                    <XPathQuery Type="Integer">/DataItem/SnmpVarBinds/SnmpVarBind[1]/Value</XPathQuery>
                                  </ValueExpression>
                                  <Operator>LessEqual</Operator>
                                  <ValueExpression>
                                    <Value Type="Integer">$Config/PowerSupplyFanSpeedLowWarn$</Value>
                                  </ValueExpression>
                                </SimpleExpression>
                              </Expression>
                              <Expression>
                                <SimpleExpression>
                                  <ValueExpression>
                                    <XPathQuery Type="Integer">/DataItem/SnmpVarBinds/SnmpVarBind[1]/Value</XPathQuery>
                                  </ValueExpression>
                                  <Operator>Greater</Operator>
                                  <ValueExpression>
                                    <Value Type="Integer">$Config/PowerSupplyFanSpeedLowCritical$</Value>
                                  </ValueExpression>
                                </SimpleExpression>
                              </Expression>
                            </And>
                          </Expression>
                        </And>
                      </Expression>
                      <Expression>
                        <And>
                          <Expression>
                            <RegExExpression>
                              <ValueExpression>
                                <Value Type="String">$Config/DisplayName$</Value>
                              </ValueExpression>
                              <Operator>ContainsSubstring</Operator>
                              <Pattern>Chassis</Pattern>
                            </RegExExpression>
                          </Expression>
                          <Expression>
                            <Or>
                              <Expression>
                                <And>
                                  <Expression>
                                    <SimpleExpression>
                                      <ValueExpression>
                                        <XPathQuery Type="Integer">/DataItem/SnmpVarBinds/SnmpVarBind[1]/Value</XPathQuery>
                                      </ValueExpression>
                                      <Operator>Less</Operator>
                                      <ValueExpression>
                                        <Value Type="Integer">$Config/ChassisFanSpeedHighCritical$</Value>
                                      </ValueExpression>
                                    </SimpleExpression>
                                  </Expression>
                                  <Expression>
                                    <SimpleExpression>
                                      <ValueExpression>
                                        <XPathQuery Type="Integer">/DataItem/SnmpVarBinds/SnmpVarBind[1]/Value</XPathQuery>
                                      </ValueExpression>
                                      <Operator>GreaterEqual</Operator>
                                      <ValueExpression>
                                        <Value Type="Integer">$Config/ChassisFanSpeedHighWarn$</Value>
                                      </ValueExpression>
                                    </SimpleExpression>
                                  </Expression>
                                </And>
                              </Expression>
                              <Expression>
                                <And>
                                  <Expression>
                                    <SimpleExpression>
                                      <ValueExpression>
                                        <XPathQuery Type="Integer">/DataItem/SnmpVarBinds/SnmpVarBind[1]/Value</XPathQuery>
                                      </ValueExpression>
                                      <Operator>LessEqual</Operator>
                                      <ValueExpression>
                                        <Value Type="Integer">$Config/ChassisFanSpeedLowWarn$</Value>
                                      </ValueExpression>
                                    </SimpleExpression>
                                  </Expression>
                                  <Expression>
                                    <SimpleExpression>
                                      <ValueExpression>
                                        <XPathQuery Type="Integer">/DataItem/SnmpVarBinds/SnmpVarBind[1]/Value</XPathQuery>
                                      </ValueExpression>
                                      <Operator>Greater</Operator>
                                      <ValueExpression>
                                        <Value Type="Integer">$Config/ChassisFanSpeedLowCritical$</Value>
                                      </ValueExpression>
                                    </SimpleExpression>
                                  </Expression>
                                </And>
                              </Expression>
                            </Or>
                          </Expression>
                        </And>
                      </Expression>
                    </Or>
                  </Expression>
                </ConditionDetection>
                <ConditionDetection ID="CDPhysicalFanCritical" TypeID="System!System.ExpressionFilter">
                  <Expression>
                    <Or>
                      <Expression>
                        <And>
                          <Expression>
                            <RegExExpression>
                              <ValueExpression>
                                <Value Type="String">$Config/DisplayName$</Value>
                              </ValueExpression>
                              <Operator>ContainsSubstring</Operator>
                              <Pattern>Power</Pattern>
                            </RegExExpression>
                          </Expression>
                          <Expression>
                            <Or>
                              <Expression>
                                <SimpleExpression>
                                  <ValueExpression>
                                    <XPathQuery Type="Integer">/DataItem/SnmpVarBinds/SnmpVarBind[1]/Value</XPathQuery>
                                  </ValueExpression>
                                  <Operator>GreaterEqual</Operator>
                                  <ValueExpression>
                                    <Value Type="Integer">$Config/PowerSupplyFanSpeedHighCritical$</Value>
                                  </ValueExpression>
                                </SimpleExpression>
                              </Expression>
                              <Expression>
                                <SimpleExpression>
                                  <ValueExpression>
                                    <XPathQuery Type="Integer">/DataItem/SnmpVarBinds/SnmpVarBind[1]/Value</XPathQuery>
                                  </ValueExpression>
                                  <Operator>LessEqual</Operator>
                                  <ValueExpression>
                                    <Value Type="Integer">$Config/PowerSupplyFanSpeedLowCritical$</Value>
                                  </ValueExpression>
                                </SimpleExpression>
                              </Expression>
                            </Or>
                          </Expression>
                        </And>
                      </Expression>
                      <Expression>
                        <And>
                          <Expression>
                            <RegExExpression>
                              <ValueExpression>
                                <Value Type="String">$Config/DisplayName$</Value>
                              </ValueExpression>
                              <Operator>ContainsSubstring</Operator>
                              <Pattern>Chassis</Pattern>
                            </RegExExpression>
                          </Expression>
                          <Expression>
                            <Or>
                              <Expression>
                                <SimpleExpression>
                                  <ValueExpression>
                                    <XPathQuery Type="Integer">/DataItem/SnmpVarBinds/SnmpVarBind[1]/Value</XPathQuery>
                                  </ValueExpression>
                                  <Operator>GreaterEqual</Operator>
                                  <ValueExpression>
                                    <Value Type="Integer">$Config/ChassisFanSpeedHighCritical$</Value>
                                  </ValueExpression>
                                </SimpleExpression>
                              </Expression>
                              <Expression>
                                <SimpleExpression>
                                  <ValueExpression>
                                    <XPathQuery Type="Integer">/DataItem/SnmpVarBinds/SnmpVarBind[1]/Value</XPathQuery>
                                  </ValueExpression>
                                  <Operator>LessEqual</Operator>
                                  <ValueExpression>
                                    <Value Type="Integer">$Config/ChassisFanSpeedLowCritical$</Value>
                                  </ValueExpression>
                                </SimpleExpression>
                              </Expression>
                            </Or>
                          </Expression>
                        </And>
                      </Expression>
                    </Or>
                  </Expression>
                </ConditionDetection>
              </MemberModules>
              <RegularDetections>
                <RegularDetection MonitorTypeStateID="PhysicalFanOK">
                  <Node ID="CDPhysicalFanOK">
                    <Node ID="DS1" />
                  </Node>
                </RegularDetection>
                <RegularDetection MonitorTypeStateID="PhysicalFanWarn">
                  <Node ID="CDPhysicalFanWarn">
                    <Node ID="DS1" />
                  </Node>
                </RegularDetection>
                <RegularDetection MonitorTypeStateID="PhysicalFanCritical">
                  <Node ID="CDPhysicalFanCritical">
                    <Node ID="DS1" />
                  </Node>
                </RegularDetection>
              </RegularDetections>
            </MonitorImplementation>
          </UnitMonitorType>

    Expressions Code Update - Discovery:

    <Discovery ID="IsilonSNMP.Discovery.PhysicalFan" Enabled="true" Target="IsilonSNMP.Class.IsilonCluster.Nodes" ConfirmDelivery="true" Remotable="true" Priority="Normal">
            <Category>Discovery</Category>
            <DiscoveryTypes>
              <DiscoveryClass TypeID="IsilonSNMP.Class.IsilonCluster.PhysicalFan" />
              <DiscoveryRelationship TypeID="IsilonSNMP.Relationship.NodesHostsPhysicalFan" />
            </DiscoveryTypes>
            <DataSource ID="DS1" TypeID="IsilonSNMP.DataSource.DiscoverPhysicalFan">
              <IPAddress>$Target/Host/Property[Type="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice"]/IPAddress$</IPAddress>
              <CommStr>$Target/Host/Property[Type="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice"]/CommunityString$</CommStr>
              <Interval>8000</Interval>
              <ConfiguredNodes>$Target/Host/Property[Type="IsilonSNMP.Class.IsilonCluster"]/ConfiguredNodes$</ConfiguredNodes>
              <FanNumber>$MPElement[Name="IsilonSNMP.Class.IsilonCluster.PhysicalFan"]/FanNumber$</FanNumber>
              <NodeCommStr>$MPElement[Name="IsilonSNMP.Class.IsilonCluster.PhysicalFan"]/NodeCommStr$</NodeCommStr>
              <PowerSupplyFanSpeedHighCritical>14500</PowerSupplyFanSpeedHighCritical>
              <PowerSupplyFanSpeedLowCritical>3000</PowerSupplyFanSpeedLowCritical>
              <PowerSupplyFanSpeedLowWarn>3400</PowerSupplyFanSpeedLowWarn>
              <ChassisFanSpeedHighCritical>11600</ChassisFanSpeedHighCritical>
              <ChassisFanSpeedLowCritical>7800</ChassisFanSpeedLowCritical>
              <ChassisFanSpeedHighWarn>10800</ChassisFanSpeedHighWarn>
              <ChassisFanSpeedLowWarn>8500</ChassisFanSpeedLowWarn>
            </DataSource>
          </Discovery>

    Expressions Code Update - Unit Monitor:

    <UnitMonitor ID="IsilonSNMP.Monitor.PhysicalFanStatus" Accessibility="Internal" Enabled="true" Target="IsilonSNMP.Class.IsilonCluster.PhysicalFan" ParentMonitorID="Health!System.Health.AvailabilityState" Remotable="true" Priority="Normal" TypeID="IsilonSNMP.MonitorType.PhysicalFanStatus" ConfirmDelivery="true">
            <Category>AvailabilityHealth</Category>
            <AlertSettings AlertMessage="IsilonSNMP.Monitor.PhysicalFanStatus_AlertMessageResourceID">
              <AlertOnState>Warning</AlertOnState>
              <AutoResolve>true</AutoResolve>
              <AlertPriority>Normal</AlertPriority>
              <AlertSeverity>MatchMonitorHealth</AlertSeverity>
              <AlertParameters>
                <AlertParameter1>$Target/Property[Type="System!System.Entity"]/DisplayName$</AlertParameter1>
                <AlertParameter2>$Data/Context/SnmpVarBinds/SnmpVarBind[1]/Value$</AlertParameter2>
              </AlertParameters>
            </AlertSettings>
            <OperationalStates>
              <OperationalState ID="IsilonSNMP.Monitor.PhysicalFanStatus_PhysicalFanOK" MonitorTypeStateID="PhysicalFanOK" HealthState="Success" />
              <OperationalState ID="IsilonSNMP.Monitor.PhysicalFanStatus_PhysicalFanWarn" MonitorTypeStateID="PhysicalFanWarn" HealthState="Warning" />
              <OperationalState ID="IsilonSNMP.Monitor.PhysicalFanStatus_PhysicalFanCritical" MonitorTypeStateID="PhysicalFanCritical" HealthState="Error" />
            </OperationalStates>
            <Configuration>
              <Interval>120</Interval>
              <IPAddress>$Target/Host/Host/Property[Type="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice"]/IPAddress$</IPAddress>
              <OID>.1.3.6.1.4.1.12124.2.53.1.4.$Target/Property[Type="IsilonSNMP.Class.IsilonCluster.PhysicalFan"]/FanNumber$</OID>
              <NodeCommStr>$Target/Property[Type="IsilonSNMP.Class.IsilonCluster.PhysicalFan"]/NodeCommStr$</NodeCommStr>
              <PowerSupplyFanSpeedHighCritical>14500</PowerSupplyFanSpeedHighCritical>
              <PowerSupplyFanSpeedLowCritical>3000</PowerSupplyFanSpeedLowCritical>
              <PowerSupplyFanSpeedLowWarn>3400</PowerSupplyFanSpeedLowWarn>
              <ChassisFanSpeedHighCritical>11600</ChassisFanSpeedHighCritical>
              <ChassisFanSpeedLowCritical>7800</ChassisFanSpeedLowCritical>
              <ChassisFanSpeedHighWarn>10800</ChassisFanSpeedHighWarn>
              <ChassisFanSpeedLowWarn>8500</ChassisFanSpeedLowWarn>
              <DisplayName>$Target/Property[Type="System!System.Entity"]/DisplayName$</DisplayName>
            </Configuration>
          </UnitMonitor>
    • Edited by FreRange Wednesday, November 18, 2009 6:42 PM Formatting.
    Wednesday, November 18, 2009 6:39 PM
  • As far as I know health explorer should sort alphabetically, are you not seeing that? Also you can create aggregate monitors to further logically group your monitors if you have many of them.
    This posting is provided "AS IS" with no warranties, and confers no rights. Use of included script samples are subject to the terms specified at http://www.microsoft.com/info/cpyright.htm
    Tuesday, November 24, 2009 12:49 AM
    Moderator
  • No activity for 30 days. I will close the thread now. Feel free to re-open it.
    http://OpsMgr.ru/
    Monday, February 8, 2010 6:30 PM
    Moderator
  • Based on the ablove mentioned MP, What would be the inclusion into manifest section for me to Dicover SQL 2008 DB?
    Thursday, December 9, 2010 11:16 AM
  • Hi Ake,

    I need to monitor a ISILON Bay with the last version Opsmgr, 2012. But i have the same limitation with the ISILON bay. The famous SNMP-proxy.

    I try to create a script to browse the MIB and create the objets... But i have always a little error , bug  or any other thing on my way... Big challenge, no information ... I need help.
    And i find your old question about my issue.

    To be direct :

    Have you finalize a MP for your needs ?
    It's possible to test your MP ?

    Thanks.

    Best regards,  Cordialement,

    Julien


    JulienM

    Monday, September 23, 2013 5:48 PM
  • I know that this thread is super old, but I would love to get a copy of your Isilon MP or discuss it.  I have also created a similar pack and would like to compare/share.


    - Chris Temple

    Thursday, February 19, 2015 2:09 PM