In Operations Manager 2007, views are groups of managed objects that have a commonality, which is defined in the view properties. When you select a view, a query is executed and the results of the query are displayed in the results pane.
Several views are created by default when Operations Manager is installed. Management Packs also contain views. When a Management Pack is imported, a folder is created in the Monitoring pane. This folder contains the views that are defined in the Management Pack. You cannot change these views, and you cannot add new views to the Management Pack folder. However, you can create a folder in the Monitoring pane and create views that appear in your folder.
There are several view types, each displaying a different aspect of monitoring data. The following example demonstrates how to create a state view and a diagram view. A state view displays relationships between components, computers, and computer groups. A diagram view displays a graphical view of a set of managed objects and how they relate to one another.
Visual Basic | Copy Code |
---|---|
Imports System Imports System.Collections.Generic Imports System.Collections.ObjectModel Imports System.Text Imports System.Xml Imports Microsoft.EnterpriseManagement Imports Microsoft.EnterpriseManagement.Configuration Imports Microsoft.EnterpriseManagement.Monitoring Namespace SDKSamples Class Program Public Overloads Shared Function Main(ByVal args() As String) As Integer Dim mg As ManagementGroup = New ManagementGroup("localhost") Dim mp As ManagementPack Dim stateView As ManagementPackView Dim diagramView As ManagementPackView Dim viewFolder As ManagementPackFolder Dim folderId As String mp = GetDefaultMP(mg) folderId = "ViewSamples.SampleFolder" & Guid.NewGuid().ToString("N") viewFolder = CreateViewFolder(mp, mg, "Sample Folder", folderId) stateView = CreateStateView(mp, mg, viewFolder) diagramView = CreateDiagramView(mp, mg, viewFolder) mp.AcceptChanges() End Function ' --------------------------------------------------------------------- Private Shared Function GetDefaultMP( _ ByVal mg As ManagementGroup) As ManagementPack Dim managementPacks As ReadOnlyCollection(Of ManagementPack) managementPacks = mg.GetManagementPacks("Microsoft.SystemCenter.OperationsManager.DefaultUser") If (managementPacks.Count <> 1) Then Throw New ApplicationException("Failed to retrieve the default mp") End If Return managementPacks(0) End Function ' --------------------------------------------------------------------- Private Shared Function CreateDiagramView( _ ByVal mp As ManagementPack, _ ByVal mg As ManagementGroup, _ ByVal viewFolder As ManagementPackFolder) As ManagementPackView Dim stateViewTypes As ReadOnlyCollection(Of MonitoringViewType) Dim sql2005DBClasses As ReadOnlyCollection(Of MonitoringClass) Dim view As ManagementPackView Dim viewConfigDoc As XmlDocument stateViewTypes = mg.GetMonitoringViewTypes("Microsoft.SystemCenter.DiagramViewType") If (stateViewTypes.Count <> 1) Then Throw New ApplicationException("Failed to load the state view type") End If view = New ManagementPackView(mp, "ViewsSample.DiagramView1", ManagementPackAccessibility.Public) view.TypeID = stateViewTypes(0) view.DisplayName = "Sample Diagram View" sql2005DBClasses = mg.GetMonitoringClasses(New MonitoringClassCriteria("DisplayName='SQL 2005 DB'")) If (sql2005DBClasses.Count <> 1) Then Throw New ApplicationException("Failed to retrieve the SQL 2005 DB class. Make sure the SQL 2005 MP is imported") End If view.Target = sql2005DBClasses(0) view.Category = "Operations" viewConfigDoc = CreateDiagramViewConfigDoc(mg, sql2005DBClasses(0)) view.Configuration = viewConfigDoc.ChildNodes(0).InnerXml Dim folderItem As ManagementPackFolderItem = New ManagementPackFolderItem(view, viewFolder) Return view End Function ' --------------------------------------------------------------------- Private Shared Function CreateDiagramViewConfigDoc( _ ByVal mg As ManagementGroup, _ ByVal monitoringClass As MonitoringClass) As XmlDocument Dim configDoc As XmlDocument = New XmlDocument() Dim rootNode As XmlElement = configDoc.CreateElement("Configuration") Dim presentationNode As XmlElement = configDoc.CreateElement("Presentation") Dim criteriaNode As XmlElement = configDoc.CreateElement("Criteria") configDoc.AppendChild(rootNode) rootNode.AppendChild(criteriaNode) rootNode.AppendChild(presentationNode) presentationNode.InnerXml = "<DiagramViewCriteria>" & _ "<DiagramViewDisplay>" & _ "<NodesPerRow>3</NodesPerRow>" & _ "<ContainmentLine>" & _ "<Color />" & _ "<SourceArrow IsFilled=""false"">" & _ "<ArrowStyle>NoAnchor</ArrowStyle>" & _ "</SourceArrow>" & _ "<TargetArrow IsFilled=""false"">" & _ "<ArrowStyle>ArrowAnchor</ArrowStyle>" & _ "</TargetArrow>" & _ "</ContainmentLine>" & _ "<NonContainmentLine>" & _ "<Color Red=""6"" Green=""134"" Blue=""253"" />" & _ "<SourceArrow IsFilled=""false"">" & _ "<ArrowStyle>NoAnchor</ArrowStyle>" & _ "</SourceArrow>" & _ "<TargetArrow IsFilled=""false"">" & _ "<ArrowStyle>ArrowAnchor</ArrowStyle>" & _ "</TargetArrow>" & _ "<LineStyle>DashDotDot</LineStyle>" & _ "</NonContainmentLine>" & _ "</DiagramViewDisplay>" & _ "</DiagramViewCriteria>" Dim target As XmlElement = configDoc.CreateElement("Target") Dim dbMonitoringObjects As ReadOnlyCollection(Of PartialMonitoringObject) dbMonitoringObjects = mg.GetPartialMonitoringObjects(monitoringClass) If (dbMonitoringObjects.Count < 1) Then Throw New ApplicationException("At least one database object is required") End If target.InnerText = dbMonitoringObjects(0).Id.ToString() rootNode.AppendChild(target) Return configDoc End Function ' --------------------------------------------------------------------- Private Shared Function CreateStateView( _ ByVal mp As ManagementPack, _ ByVal mg As ManagementGroup, _ ByVal viewFolder As ManagementPackFolder) As ManagementPackView Dim stateViewTypes As ReadOnlyCollection(Of MonitoringViewType) Dim sql2005DBClasses As ReadOnlyCollection(Of MonitoringClass) Dim view As ManagementPackView Dim viewConfigDoc As XmlDocument stateViewTypes = mg.GetMonitoringViewTypes("Microsoft.SystemCenter.StateViewType") If (stateViewTypes.Count <> 1) Then Throw New ApplicationException("Failed to load the state view type") End If view = New ManagementPackView( _ mp, "ViewsSample.SampleStateView2", ManagementPackAccessibility.Public) view.TypeID = stateViewTypes(0) view.DisplayName = "Sample State View2" sql2005DBClasses = mg.GetMonitoringClasses( _ New MonitoringClassCriteria("DisplayName='SQL 2005 DB'")) If (sql2005DBClasses.Count <> 1) Then Throw New ApplicationException("Failed to retrieve the SQL 2005 DB class. Make sure the SQL 2005 MP is imported") End If view.Target = sql2005DBClasses(0) view.Category = "Operations" viewConfigDoc = CreateViewConfigDoc(sql2005DBClasses(0)) view.Configuration = viewConfigDoc.ChildNodes(0).InnerXml Dim folderItem As ManagementPackFolderItem = New ManagementPackFolderItem(view, viewFolder) Return view End Function ' --------------------------------------------------------------------- Private Shared Function CreateViewConfigDoc( _ ByVal monitoringClass As MonitoringClass) As XmlDocument Dim configDoc As XmlDocument = New XmlDocument() Dim rootNode As XmlElement = configDoc.CreateElement("Configuration") Dim presentationNode As XmlElement = configDoc.CreateElement("Presentation") Dim criteriaNode As XmlElement = configDoc.CreateElement("Criteria") Dim maintenanceModeProp As XmlElement = configDoc.CreateElement("InMaintenanceMode") maintenanceModeProp.InnerText = "false" criteriaNode.AppendChild(maintenanceModeProp) configDoc.AppendChild(rootNode) rootNode.AppendChild(criteriaNode) rootNode.AppendChild(presentationNode) CreateColumnXmlNode(presentationNode, 0, "State", monitoringClass.Name, "Descending", True) CreateColumnXmlNode(presentationNode, -1, "Maintenance Mode", "InMaintenanceMode", "Ascending", True) CreateColumnXmlNode(presentationNode, -1, "Name", "Name", "Ascending", True) CreateColumnXmlNode(presentationNode, -1, "Path", "Path", "Ascending", False) Dim properties As ReadOnlyCollection(Of MonitoringClassProperty) properties = monitoringClass.GetMonitoringProperties(BaseClassTraversalDepth.Recursive) For Each prop As MonitoringClassProperty In properties CreateColumnXmlNode( _ presentationNode, -1, prop.DisplayName, prop.Name, "Ascending", True) Next Return configDoc End Function ' --------------------------------------------------------------------- Private Shared Function CreateViewFolder(ByVal mp As ManagementPack, _ ByVal mg As ManagementGroup, _ ByVal folderDisplayName As String, _ ByVal folderId As String) As ManagementPackFolder Dim newFolder As ManagementPackFolder Dim parentFolders As ReadOnlyCollection(Of MonitoringFolder) parentFolders = mg.GetMonitoringFolders(New MonitoringFolderCriteria("Name='Microsoft.SystemCenter.Monitoring.ViewFolder.Root'")) If parentFolders.Count <> 1 Then Throw New ApplicationException("Failed to retrieve the root folder") End If newFolder = New ManagementPackFolder(mp, folderId, ManagementPackAccessibility.Public) newFolder.DisplayName = folderDisplayName newFolder.ParentFolder = CType(parentFolders(0), ManagementPackFolder) Dim folderItem As New ManagementPackFolderItem(newFolder, parentFolders(0)) mp.AcceptChanges() Return newFolder End Function ' --------------------------------------------------------------------- Shared Sub CreateColumnXmlNode(ByVal rootNode As XmlElement, _ ByVal sortingIndex As Integer, _ ByVal columnName As String, _ ByVal columnId As String, _ ByVal sortOrder As String, _ ByVal isVisible As Boolean) Dim columnElement As XmlElement = rootNode.OwnerDocument.CreateElement("ColumnInfo") columnElement.SetAttribute("Index", rootNode.ChildNodes.Count.ToString()) columnElement.SetAttribute("SortIndex", sortingIndex.ToString()) columnElement.SetAttribute("Width", "100") columnElement.SetAttribute("Grouped", "false") rootNode.AppendChild(columnElement) If (sortingIndex >= 0) Then columnElement.SetAttribute("Sorted", "true") Else columnElement.SetAttribute("Sorted", "false") End If columnElement.SetAttribute("IsSortable", "true") If (isVisible) Then columnElement.SetAttribute("Visible", "true") Else columnElement.SetAttribute("Visible", "false") End If columnElement.SetAttribute("SortOrder", sortOrder) Dim nameElement As XmlElement = rootNode.OwnerDocument.CreateElement("Name") Dim idElement As XmlElement = rootNode.OwnerDocument.CreateElement("Id") columnElement.AppendChild(nameElement) columnElement.AppendChild(idElement) nameElement.InnerText = columnName idElement.InnerText = columnId End Sub End Class End Namespace |
C# | Copy Code |
---|---|
using System; using System.Collections.Generic; using System.Text; using Microsoft.EnterpriseManagement; using Microsoft.EnterpriseManagement.Configuration; using System.Collections.ObjectModel; using System.Xml; using Microsoft.EnterpriseManagement.Monitoring; namespace ViewCreation { class Program { // --------------------------------------------------------------------- static void Main(string[] args) { ManagementGroup mg = new ManagementGroup("localhost"); ManagementPack mp; ManagementPackView stateView; ManagementPackView diagramView; ManagementPackFolder viewFolder; string folderId; mp = GetDefaultMP(mg); folderId = "ViewSamples.SampleFolder" + Guid.NewGuid().ToString("N"); viewFolder = CreateViewFolder(mp, mg, "Sample Folder", folderId); stateView = CreateStateView(mp, mg, viewFolder); diagramView = CreateDiagramView(mp, mg, viewFolder); mp.AcceptChanges(); } // --------------------------------------------------------------------- private static ManagementPack GetDefaultMP( ManagementGroup mg ) { ReadOnlyCollection<ManagementPack> managementPacks; managementPacks = mg.GetManagementPacks("Microsoft.SystemCenter.OperationsManager.DefaultUser"); if (managementPacks.Count != 1) { throw new ApplicationException("Failed to retrieve the default mp"); } return (managementPacks[0]); } // --------------------------------------------------------------------- private static ManagementPackView CreateDiagramView( ManagementPack mp, ManagementGroup mg, ManagementPackFolder viewFolder ) { ReadOnlyCollection<MonitoringViewType> stateViewTypes; ReadOnlyCollection<MonitoringClass> sql2005DBClasses; ManagementPackView view; XmlDocument viewConfigDoc; stateViewTypes = mg.GetMonitoringViewTypes("Microsoft.SystemCenter.DiagramViewType"); if (stateViewTypes.Count != 1) { throw new ApplicationException("Failed to load the state view type"); } view = new ManagementPackView(mp, "ViewsSample.DiagramView1", ManagementPackAccessibility.Public); view.TypeID = stateViewTypes[0]; view.DisplayName = "Sample Diagram View"; sql2005DBClasses = mg.GetMonitoringClasses(new MonitoringClassCriteria("DisplayName='SQL 2005 DB'")); if (sql2005DBClasses.Count != 1) { throw new ApplicationException("Failed to retrieve the SQL 2005 DB class. Make sure the SQL 2005 MP is imported"); } view.Target = sql2005DBClasses[0]; view.Category = "Operations"; viewConfigDoc = CreateDiagramViewConfigDoc(mg, sql2005DBClasses[0]); view.Configuration = viewConfigDoc.ChildNodes[0].InnerXml; ManagementPackFolderItem folderItem = new ManagementPackFolderItem(view, viewFolder); return (view); } // --------------------------------------------------------------------- private static XmlDocument CreateDiagramViewConfigDoc( ManagementGroup mg, MonitoringClass monitoringClass ) { XmlDocument configDoc = new XmlDocument(); XmlElement rootNode = configDoc.CreateElement("Configuration"); XmlElement presentationNode = configDoc.CreateElement("Presentation"); XmlElement criteriaNode = configDoc.CreateElement("Criteria"); configDoc.AppendChild(rootNode); rootNode.AppendChild(criteriaNode); rootNode.AppendChild(presentationNode); presentationNode.InnerXml = @"<DiagramViewCriteria> <DiagramViewDisplay> <NodesPerRow>3</NodesPerRow> <ContainmentLine> <Color /> <SourceArrow IsFilled=""false""> <ArrowStyle>NoAnchor</ArrowStyle> </SourceArrow> <TargetArrow IsFilled=""false""> <ArrowStyle>ArrowAnchor</ArrowStyle> </TargetArrow> </ContainmentLine> <NonContainmentLine> <Color Red=""6"" Green=""134"" Blue=""253"" /> <SourceArrow IsFilled=""false""> <ArrowStyle>NoAnchor</ArrowStyle> </SourceArrow> <TargetArrow IsFilled=""false""> <ArrowStyle>ArrowAnchor</ArrowStyle> </TargetArrow> <LineStyle>DashDotDot</LineStyle> </NonContainmentLine> </DiagramViewDisplay> </DiagramViewCriteria>"; XmlElement target = configDoc.CreateElement("Target"); ReadOnlyCollection<PartialMonitoringObject> dbMonitoringObjects; dbMonitoringObjects = mg.GetPartialMonitoringObjects(monitoringClass); if (dbMonitoringObjects.Count < 1) { throw new ApplicationException("At least one database object is required"); } target.InnerText = dbMonitoringObjects[0].Id.ToString(); rootNode.AppendChild(target); return (configDoc); } // --------------------------------------------------------------------- private static ManagementPackView CreateStateView( ManagementPack mp, ManagementGroup mg, ManagementPackFolder viewFolder ) { ReadOnlyCollection<MonitoringViewType> stateViewTypes; ReadOnlyCollection<MonitoringClass> sql2005DBClasses; ManagementPackView view; XmlDocument viewConfigDoc; stateViewTypes = mg.GetMonitoringViewTypes("Microsoft.SystemCenter.StateViewType"); if (stateViewTypes.Count != 1) { throw new ApplicationException("Failed to load the state view type"); } view = new ManagementPackView( mp, "ViewsSample.SampleStateView2", ManagementPackAccessibility.Public); view.TypeID = stateViewTypes[0]; view.DisplayName = "Sample State View2"; sql2005DBClasses = mg.GetMonitoringClasses( new MonitoringClassCriteria("DisplayName='SQL 2005 DB'")); if (sql2005DBClasses.Count != 1) { throw new ApplicationException("Failed to retrieve the SQL 2005 DB class. Make sure the SQL 2005 MP is imported"); } view.Target = sql2005DBClasses[0]; view.Category = "Operations"; viewConfigDoc = CreateViewConfigDoc(sql2005DBClasses[0]); view.Configuration = viewConfigDoc.ChildNodes[0].InnerXml; ManagementPackFolderItem folderItem = new ManagementPackFolderItem(view, viewFolder); return (view); } // --------------------------------------------------------------------- private static XmlDocument CreateViewConfigDoc( MonitoringClass monitoringClass ) { XmlDocument configDoc = new XmlDocument(); XmlElement rootNode = configDoc.CreateElement("Configuration"); XmlElement presentationNode = configDoc.CreateElement("Presentation"); XmlElement criteriaNode = configDoc.CreateElement("Criteria"); XmlElement maintenanceModeProp = configDoc.CreateElement("InMaintenanceMode"); maintenanceModeProp.InnerText = "false"; criteriaNode.AppendChild(maintenanceModeProp); configDoc.AppendChild(rootNode); rootNode.AppendChild(criteriaNode); rootNode.AppendChild(presentationNode); CreateColumnXmlNode(presentationNode, 0, "State", monitoringClass.Name, "Descending", true); CreateColumnXmlNode(presentationNode, -1, "Maintenance Mode", "InMaintenanceMode", "Ascending", true); CreateColumnXmlNode(presentationNode, -1, "Name", "Name", "Ascending", true); CreateColumnXmlNode(presentationNode, -1, "Path", "Path", "Ascending", false); ReadOnlyCollection<MonitoringClassProperty> properties; properties = monitoringClass.GetMonitoringProperties(BaseClassTraversalDepth.Recursive); foreach (MonitoringClassProperty prop in properties) { CreateColumnXmlNode( presentationNode, -1, prop.DisplayName, prop.Name, "Ascending", true); } return (configDoc); } // --------------------------------------------------------------------- private static ManagementPackFolder CreateViewFolder( ManagementPack mp, ManagementGroup mg, string folderDisplayName, string folderId ) { ManagementPackFolder newFolder; ReadOnlyCollection<MonitoringFolder> parentFolders; parentFolders = mg.GetMonitoringFolders( new MonitoringFolderCriteria("Name='Microsoft.SystemCenter.Monitoring.ViewFolder.Root'")); if (parentFolders.Count != 1) { throw new ApplicationException("Failed to retrieve the root folder"); } newFolder = new ManagementPackFolder(mp, folderId, ManagementPackAccessibility.Public); newFolder.DisplayName = folderDisplayName; newFolder.ParentFolder = (ManagementPackFolder)parentFolders[0]; ManagementPackFolderItem folderItem = new ManagementPackFolderItem(newFolder, parentFolders[0]); mp.AcceptChanges(); return (newFolder); } // --------------------------------------------------------------------- static void CreateColumnXmlNode( XmlElement rootNode, int sortingIndex, string columnName, string columnId, string sortOrder, bool isVisible ) { XmlElement columnElement = rootNode.OwnerDocument.CreateElement("ColumnInfo"); columnElement.SetAttribute("Index", rootNode.ChildNodes.Count.ToString()); columnElement.SetAttribute("SortIndex", sortingIndex.ToString()); columnElement.SetAttribute("Width", "100"); columnElement.SetAttribute("Grouped", "false"); rootNode.AppendChild(columnElement); if (sortingIndex >= 0) { columnElement.SetAttribute("Sorted", "true"); } else { columnElement.SetAttribute("Sorted", "false"); } columnElement.SetAttribute("IsSortable", "true"); if (isVisible) { columnElement.SetAttribute("Visible", "true"); } else { columnElement.SetAttribute("Visible", "false"); } columnElement.SetAttribute("SortOrder", sortOrder); XmlElement nameElement = rootNode.OwnerDocument.CreateElement("Name"); XmlElement idElement = rootNode.OwnerDocument.CreateElement("Id"); columnElement.AppendChild(nameElement); columnElement.AppendChild(idElement); nameElement.InnerText = columnName; idElement.InnerText = columnId; } } } |
See Also
Send comments about this topic to Microsoft.