Allows you to collect instances of discovery data objects. Namespace: Microsoft.EnterpriseManagement.ConnectorFramework
Assembly: Microsoft.EnterpriseManagement.OperationsManager (in microsoft.enterprisemanagement.operationsmanager.dll)

Usage

Visual Basic
Dim instance As SnapshotMonitoringDiscoveryData

Syntax

Visual Basic
Public Class SnapshotMonitoringDiscoveryData
C#
public class SnapshotMonitoringDiscoveryData
C++
public ref class SnapshotMonitoringDiscoveryData
J#
public class SnapshotMonitoringDiscoveryData
JScript
public class SnapshotMonitoringDiscoveryData

Example

The following example:

  • Connects to a Management Group.

  • Creates a connector.

  • Initializes the newly created connector.

  • Imports a management pack (if it is not already loaded).

  • Gets the monitoring class for each of the defined SnapshotMonitoringDiscoveryData objects, MonitoringClass objects, CustomMonitoringObject, CustomMonitoringRelationshipObject, and MonitoringClassProperty objects for discovery.

  • Sets the monitoring property value for each of the objects.

  • Sets the source and target for the relationship object.

  • Adds the discovery data to the Operation Manager.

  • Commits the discovery data to the Operation Manager over the newly built connector.

Visual Basic  Copy Code
' Synchronously runs a task to get a list of 
' rules or monitors running on a specific agent-managed computer.
Imports System
Imports System.Collections.Generic
Imports System.Collections.ObjectModel
Imports System.Diagnostics
Imports Microsoft.EnterpriseManagement
Imports Microsoft.EnterpriseManagement.Administration
Imports Microsoft.EnterpriseManagement.Common
Imports Microsoft.EnterpriseManagement.Configuration
Imports Microsoft.EnterpriseManagement.ConnectorFramework
Imports Microsoft.EnterpriseManagement.Monitoring
Imports System.IO
Imports System.Text

Namespace DiscoveryDataInsertion
	Class DiscoveryDataInsertionSample

		Dim m_managementGroup As ManagementGroup
		Dim m_monitoringConnector As MonitoringConnector
		Dim m_routerMonitoringObject As MonitoringObject
		Dim m_routerPortMonitoringObject As MonitoringObject
		Dim m_routerFanMonitoringObject As MonitoringObject

		Public Sub New( _
			ByVal managementServerName As String)

			Debug.Assert(managementServerName.Length > 0)

			ConnectToManagementGroup(managementServerName)

			CreateConnector()

			ImportMPIfNeed()
		End Sub

		Public Sub InsertDiscoveryData()

			Dim discoveryData As SnapshotMonitoringDiscoveryData = _
			 New SnapshotMonitoringDiscoveryData()
			Dim routerClass As MonitoringClass
			Dim routerPortClass As MonitoringClass
			Dim routerFanClass As MonitoringClass
			Dim entityClass As MonitoringClass
			Dim fanContainedInRouterRelationshipClass As MonitoringRelationshipClass
			Dim routerMonitoringObject As CustomMonitoringObject
			Dim routerPortObject As CustomMonitoringObject
			Dim routerFanMonitoringObject As CustomMonitoringObject
			Dim relationshipObject As CustomMonitoringRelationshipObject
			Dim routerIdProp As MonitoringClassProperty
			Dim portIdProp As MonitoringClassProperty
			Dim fanIdProp As MonitoringClassProperty
			Dim displayNameProp As MonitoringClassProperty


			routerClass = GetMonitoringClass("SdkDemo.DiscoveryDataInsertion.Router")
			routerPortClass = GetMonitoringClass("SdkDemo.DiscoveryDataInsertion.RouterPort")
			routerFanClass = GetMonitoringClass("SdkDemo.DiscoveryDataInsertion.RouterFan")
			entityClass = GetMonitoringClass("System.Entity")
			fanContainedInRouterRelationshipClass = _
			 GetMonitoringRelationshipClass("SdkDemo.DiscoveryDataInsertion.RouterContainsFan")

			routerIdProp = routerClass.GetMonitoringProperty("RouterId")
			portIdProp = routerPortClass.GetMonitoringProperty("PortId")
			fanIdProp = routerFanClass.GetMonitoringProperty("FanId")
			displayNameProp = entityClass.GetMonitoringProperty("DisplayName")

			routerMonitoringObject = New CustomMonitoringObject(routerClass)
			routerPortObject = New CustomMonitoringObject(routerPortClass)
			routerFanMonitoringObject = New CustomMonitoringObject(routerFanClass)
			relationshipObject = _
				New CustomMonitoringRelationshipObject(fanContainedInRouterRelationshipClass)

			routerMonitoringObject.SetMonitoringPropertyValue(routerIdProp, "1")
			routerMonitoringObject.SetMonitoringPropertyValue(displayNameProp, "Router 123")

			' There is a hosting relationship between the router and the router port.
			' In order for OpsMgr to know to what router it needs to associate with the port object, 
			' we need to set the key prop of the router (RouterId) on the hosted object(RouterPort).
			' There is no need to explicitly create a relationship object for relationships of type hosting.
			' An instance of the relationship will be created automatically.

			routerPortObject.SetMonitoringPropertyValue(routerIdProp, "1")
			routerPortObject.SetMonitoringPropertyValue(portIdProp, "1")
			routerPortObject.SetMonitoringPropertyValue(displayNameProp, "Port #1")

			routerFanMonitoringObject.SetMonitoringPropertyValue(fanIdProp, "1")
			routerFanMonitoringObject.SetMonitoringPropertyValue(displayNameProp, "Fan #1")

			relationshipObject.SetSource(routerMonitoringObject)
			relationshipObject.SetTarget(routerFanMonitoringObject)

			discoveryData.Include(routerPortObject)
			discoveryData.Include(routerMonitoringObject)
			discoveryData.Include(routerFanMonitoringObject)
			discoveryData.Include(relationshipObject)

			discoveryData.Commit(m_monitoringConnector)

			' Obtain references to the newly created objects
			' they will be used  to insert events and performance data
			m_routerMonitoringObject = m_managementGroup.GetMonitoringObject(CType(routerMonitoringObject.Id, Guid))
			m_routerPortMonitoringObject = m_managementGroup.GetMonitoringObject(CType(routerPortObject.Id, Guid))
			m_routerFanMonitoringObject = m_managementGroup.GetMonitoringObject(CType(routerFanMonitoringObject.Id, Guid))
		End Sub

		Private Sub ConnectToManagementGroup(ByVal managementServerName As String)

			m_managementGroup = New ManagementGroup(managementServerName)
		End Sub

		'---------------------------------------------------------------------
		Private Sub CreateConnector()

			Dim mcfAdmin As ConnectorFrameworkAdministration
			Dim connectorGuid As Guid = New Guid("DE1FC259-FE16-44ce-B90E-708CADE55909")

			mcfAdmin = m_managementGroup.GetConnectorFrameworkAdministration()

			Try

				m_monitoringConnector = mcfAdmin.GetMonitoringConnector(connectorGuid)

			Catch e As Microsoft.EnterpriseManagement.Common.ObjectNotFoundException

				' the connector does not exist, so create it

				Dim connectInfo As ConnectorInfo = New ConnectorInfo()

				connectInfo.Description = "This is a sample connector to demonstrate discovery data insertion"
				connectInfo.DisplayName = "Sample connector"
				connectInfo.Name = "Sample connector"

				m_monitoringConnector = mcfAdmin.Setup(connectInfo, connectorGuid)
			End Try

			If Not m_monitoringConnector.Initialized Then

				m_monitoringConnector.Initialize()
			End If
		End Sub

		Private Function GetMonitoringClass( _
			ByVal className As String) As MonitoringClass

			Dim monitoringClasses As ReadOnlyCollection(Of MonitoringClass)

			monitoringClasses = m_managementGroup.GetMonitoringClasses(className)

			If (monitoringClasses.Count = 0) Then

				Throw New ApplicationException("Failed to find monitoring class " & className)
			End If

			Return monitoringClasses(0)
		End Function

		Private Function GetMonitoringRelationshipClass( _
			ByVal relationshipName As String) As MonitoringRelationshipClass

			Dim relationshipClasses As ReadOnlyCollection(Of MonitoringRelationshipClass)

			relationshipClasses = _
				m_managementGroup.GetMonitoringRelationshipClasses(relationshipName)

			If (relationshipClasses.Count = 0) Then

				Throw New ApplicationException("Failed to find monitoring relationship " & relationshipName)
			End If

			Return relationshipClasses(0)
		End Function

		Private Sub ImportMPIfNeed()

			Dim criteria As ManagementPackCriteria = _
				New ManagementPackCriteria("Name = 'SdkDemo.DiscoveryDataInsertion'")

			If (m_managementGroup.GetManagementPacks(criteria).Count = 0) Then

				Dim mgmtPackPath As String

				mgmtPackPath = Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName) & _
					"\SdkDemo.DiscoveryDataInsertion.xml"

				m_managementGroup.ImportManagementPack(New ManagementPack(mgmtPackPath))
			End If
		End Sub


		Public Overloads Shared Function Main(ByVal args() As String) As Integer

			Dim dataInsertion As DiscoveryDataInsertionSample = _
				New DiscoveryDataInsertionSample("ManagementServerName")

			dataInsertion.InsertDiscoveryData()
		End Function
	End Class
End Namespace
C#  Copy Code
using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
using Microsoft.EnterpriseManagement.Administration;
using Microsoft.EnterpriseManagement;
using Microsoft.EnterpriseManagement.ConnectorFramework;
using Microsoft.EnterpriseManagement.Monitoring;
using Microsoft.EnterpriseManagement.Configuration;
using System.Collections.ObjectModel;
using System.IO;

namespace DiscoveryDataInsertion
{
	class DiscoveryDataInsertionSample
	{
		ManagementGroup	 m_managementGroup;
		MonitoringConnector m_monitoringConnector;
		MonitoringObject	m_routerMonitoringObject;
		MonitoringObject	m_routerPortMonitoringObject;
		MonitoringObject	m_routerFanMonitoringObject;

		public DiscoveryDataInsertionSample(
			string managementServerName
			)
		{
			Debug.Assert(managementServerName.Length > 0);

			ConnectToManagementGroup(managementServerName);

			CreateConnector();

			ImportMPIfNeed();
	}

		public void InsertDiscoveryData()
		{
			SnapshotMonitoringDiscoveryData discoveryData = new SnapshotMonitoringDiscoveryData();
			MonitoringClass					 routerClass;
			MonitoringClass					 routerPortClass;
			MonitoringClass					 routerFanClass;
			MonitoringClass					 entityClass;
			MonitoringRelationshipClass		 fanContainedInRouterRelationshipClass;
			CustomMonitoringObject			routerMonitoringObject;
			CustomMonitoringObject			routerPortObject;
			CustomMonitoringObject			routerFanMonitoringObject;
			CustomMonitoringRelationshipObject  relationshipObject;
			MonitoringClassProperty			 routerIdProp;
			MonitoringClassProperty			 portIdProp;
			MonitoringClassProperty			 fanIdProp;
			MonitoringClassProperty			 displayNameProp;
		

			routerClass	 = GetMonitoringClass("SdkDemo.DiscoveryDataInsertion.Router");
			routerPortClass = GetMonitoringClass("SdkDemo.DiscoveryDataInsertion.RouterPort");
			routerFanClass  = GetMonitoringClass("SdkDemo.DiscoveryDataInsertion.RouterFan");
			entityClass	 = GetMonitoringClass("System.Entity");
			fanContainedInRouterRelationshipClass = GetMonitoringRelationshipClass("SdkDemo.DiscoveryDataInsertion.RouterContainsFan");

			routerIdProp	= routerClass.GetMonitoringProperty("RouterId");
			portIdProp	= routerPortClass.GetMonitoringProperty("PortId");
			fanIdProp	 = routerFanClass.GetMonitoringProperty("FanId");
			displayNameProp = entityClass.GetMonitoringProperty("DisplayName");

			routerMonitoringObject	= new CustomMonitoringObject(routerClass);
			routerPortObject			= new CustomMonitoringObject(routerPortClass);
			routerFanMonitoringObject   = new CustomMonitoringObject(routerFanClass);
			relationshipObject		= new CustomMonitoringRelationshipObject(fanContainedInRouterRelationshipClass);

			routerMonitoringObject.SetMonitoringPropertyValue(routerIdProp, "1");
			routerMonitoringObject.SetMonitoringPropertyValue(displayNameProp, "Router 123");

			//There is a hosting relationship between the router and the router port.
			//In order for OpsMgr to know to what router it needs to associate with the port object, 
			//we need to set the key prop of the router (RouterId) on the hosted object(RouterPort).
			//There is no need to explicitly create a relationship object for relationships of type hosting.
			//An instance of the relationship will be created automatically.
		
			routerPortObject.SetMonitoringPropertyValue(routerIdProp, "1");
			routerPortObject.SetMonitoringPropertyValue(portIdProp, "1");
			routerPortObject.SetMonitoringPropertyValue(displayNameProp, "Port #1");

			routerFanMonitoringObject.SetMonitoringPropertyValue(fanIdProp, "1");
			routerFanMonitoringObject.SetMonitoringPropertyValue(displayNameProp, "Fan #1");

			relationshipObject.SetSource(routerMonitoringObject);
			relationshipObject.SetTarget(routerFanMonitoringObject);

			discoveryData.Include(routerPortObject);
			discoveryData.Include(routerMonitoringObject);
			discoveryData.Include(routerFanMonitoringObject);
			discoveryData.Include(relationshipObject);

			discoveryData.Commit(m_monitoringConnector);

			//Obtain references to the newly created objects
			//they will be used  to insert events and performance data
			m_routerMonitoringObject		= m_managementGroup.GetMonitoringObject((Guid)routerMonitoringObject.Id);
			m_routerPortMonitoringObject	= m_managementGroup.GetMonitoringObject((Guid)routerPortObject.Id);
			m_routerFanMonitoringObject	 = m_managementGroup.GetMonitoringObject((Guid)routerFanMonitoringObject.Id);
	}

		private void ConnectToManagementGroup(string managementServerName)
		{
			m_managementGroup = new ManagementGroup(managementServerName);
	}

		//---------------------------------------------------------------------
		private void CreateConnector()
		{
			ConnectorFrameworkAdministration mcfAdmin;
			Guid connectorGuid = new Guid("DE1FC259-FE16-44ce-B90E-708CADE55909");

			mcfAdmin = m_managementGroup.GetConnectorFrameworkAdministration();

			try
			{
				m_monitoringConnector = mcfAdmin.GetMonitoringConnector(connectorGuid);
		}
			catch (Microsoft.EnterpriseManagement.Common.ObjectNotFoundException error)
			{
				//the connector does not exist, so create it

				ConnectorInfo connectorInfo = new ConnectorInfo();

				connectorInfo.Description = "This is a sample connector to demonstrate discovery data insertion";
				connectorInfo.DisplayName = "Sample connector";
				connectorInfo.Name = "Sample connector";

				m_monitoringConnector = mcfAdmin.Setup(connectorInfo, connectorGuid);
		}

			if (!m_monitoringConnector.Initialized)
			{
				m_monitoringConnector.Initialize();
		}
	}

		private MonitoringClass GetMonitoringClass(
			string className
			)
		{
			ReadOnlyCollection<MonitoringClass> monitoringClasses;

			monitoringClasses = m_managementGroup.GetMonitoringClasses(className);

			if (monitoringClasses.Count == 0)
			{
				throw new ApplicationException("Failed to find monitoring class " + className);
		}

			return (monitoringClasses[0]);
	}

		private MonitoringRelationshipClass GetMonitoringRelationshipClass(
			string relationshipName
			)
		{
			ReadOnlyCollection<MonitoringRelationshipClass> relationshipClasses;

			relationshipClasses = m_managementGroup.GetMonitoringRelationshipClasses(relationshipName);

			if (relationshipClasses.Count == 0)
			{
				throw new ApplicationException("Failed to find monitoring relationship " + relationshipName);
		}

			return (relationshipClasses[0]);
	}

		private void ImportMPIfNeed()
		{
			ManagementPackCriteria criteria = new ManagementPackCriteria("Name = 'SdkDemo.DiscoveryDataInsertion'");

			if (m_managementGroup.GetManagementPacks(criteria).Count == 0)
			{
				string mgmtPackPath;

				mgmtPackPath = Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName) + @"\SdkDemo.DiscoveryDataInsertion.xml";
			
				m_managementGroup.ImportManagementPack(new ManagementPack(mgmtPackPath));
		}					
	}


		public static void Main(string[] args)
		{
			DiscoveryDataInsertionSample dataInsertion =
				new DiscoveryDataInsertionSample("ManagementServerName");

			dataInsertion.InsertDiscoveryData();
	}
}
}

Remarks

An instance of the SnapshotMonitoringDiscoveryData class represents a list of monitoring objects and monitoring relationships to add to or remove from Operations Manager.

The Snapshot discovery data replaces all data that was previously discovered by the connector. Any monitoring objects or relationships that were previously discovered but are not included in the instance of SnapshotMonitoringDiscoveryClass will be removed when Commit is called.

The Snapshot discovery indicates to the system that this is everything it has discovered. The Snapshot discovery effectively deletes anything that was previously discovered and the current discovery is everything that has been discovered. This is all of the discovery data that a connector is aware of.


Inheritance Hierarchy

System.Object
  Microsoft.EnterpriseManagement.ConnectorFramework.SnapshotMonitoringDiscoveryData

Thread Safety

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

Platforms

Development Platforms

Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP

Target Platforms

Windows Server 2008,Windows Server 2003,Windows Vista,Windows XP

See Also