Creating a performance collection rule using the SDK

Here is a sample that demonstrates how to create a performance collection rule using the SDK. The only caviat is that this rule will not work for agentless monitoring. A powershell version will follow soon.

using System;

using System.Collections.Generic;

using System.Text;

using Microsoft.EnterpriseManagement;

using Microsoft.EnterpriseManagement.Configuration;

namespace RuleCreationSample

{

class Program

{

static void Main(string[] args)

{

ManagementGroup mg;

ManagementPack mp;

ManagementPackRule rule;

mg = new ManagementGroup("localhost");

mp = mg.GetManagementPacks("Test")[0];

rule = new ManagementPackRule(mp, "SamplePerformanceCollectionRule");

CreateDataSourceModule(rule, mg);

CreateWriteActionModules(rule, mg);

rule.Target = mg.GetMonitoringClasses("Microsoft.Windows.Server.2003.OperatingSystem")[0];

rule.Category = ManagementPackCategoryType.PerformanceCollection;

rule.DisplayName = "Sample Performance Counter collection rule";

rule.Description = "This rule was created by a sample that demonstrates how to create a performance collection rule using the SDK";

mp.AcceptChanges();

}

//---------------------------------------------------------------------

private static void CreateWriteActionModules(

ManagementPackRule rule,

ManagementGroup mg

)

{

ManagementPackModuleType dbWriteActionModuleType;

ManagementPackModuleType dwWriteActionModuleType;

ManagementPackWriteActionModule dbWriteActionModule;

ManagementPackWriteActionModule dwWriteActionModule;

dbWriteActionModuleType = mg.GetMonitoringModuleTypes("Microsoft.SystemCenter.CollectPerformanceData")[0];

dwWriteActionModuleType = mg.GetMonitoringModuleTypes("Microsoft.SystemCenter.DataWarehouse.PublishPerformanceData")[0];

dbWriteActionModule = new ManagementPackWriteActionModule(rule, "WriteToDB");

dwWriteActionModule = new ManagementPackWriteActionModule(rule, "WriteToDW");

dbWriteActionModule.TypeID = (ManagementPackWriteActionModuleType)dbWriteActionModuleType;

dwWriteActionModule.TypeID = (ManagementPackWriteActionModuleType)dwWriteActionModuleType;

rule.WriteActionCollection.Add(dbWriteActionModule);

rule.WriteActionCollection.Add(dwWriteActionModule);

}

//---------------------------------------------------------------------

private static void CreateDataSourceModule(

ManagementPackRule rule,

ManagementGroup mg

)

{

ManagementPackModuleType dsModuleType;

ManagementPackDataSourceModule dsModule;

dsModuleType = mg.GetMonitoringModuleTypes("System.Performance.DataProvider")[0];

dsModule = new ManagementPackDataSourceModule(rule, "DS");

dsModule.TypeID = (ManagementPackDataSourceModuleType)dsModuleType;

dsModule.Configuration = CreateConfig("% Processor Time", "_Total", "Processor", 10);

rule.DataSourceCollection.Add(dsModule);

}

//---------------------------------------------------------------------

static string CreateConfig(

string counterName,

string instanceName,

string objectName,

int frequencyInSeconds

)

{

StringBuilder builder = new StringBuilder();

builder.Append("<ComputerName></ComputerName>");

builder.AppendFormat("<CounterName>{0}</CounterName>", counterName);

builder.AppendFormat("<ObjectName>{0}</ObjectName>", objectName);

builder.AppendFormat("<InstanceName>{0}</InstanceName>", instanceName);

builder.Append("<AllInstances>false</AllInstances>");

builder.AppendFormat("<Frequency>{0}</Frequency>", frequencyInSeconds);

return (builder.ToString());

}

}

}