Source/Tx.Windows.TypeGeneration/PerfCounterParser.cs (57 lines of code) (raw):
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
using System.Collections.Generic;
using System.Text;
namespace Tx.Windows
{
public class PerfCounterParser
{
public static Dictionary<string, string> Parse(string dataSource)
{
SortedList<string, SortedSet<string>> allCounters = PdhUtils.Parse(dataSource);
var generated = new Dictionary<string, string>();
foreach (string counterSet in allCounters.Keys)
{
string setName = NameUtils.CreateIdentifier(counterSet);
var sb = new StringBuilder("// This code was generated by EtwEventTypeGen");
sb.AppendLine(setName);
sb.Append("namespace Tx.Windows.Counters.");
sb.AppendLine(setName);
sb.AppendLine();
sb.AppendLine("{");
foreach (string counter in allCounters[counterSet])
{
EmitCounter(counterSet, counter, ref sb);
}
sb.AppendLine("}");
generated.Add(setName, sb.ToString());
}
return generated;
}
private static void EmitCounter(string counterSet, string counter, ref StringBuilder sb)
{
sb.Append(" [PerformanceCounter(\"");
sb.Append(counterSet);
sb.Append("\", \"");
sb.Append(counter);
sb.AppendLine("\")]");
string c = counter
.Replace("%", "Percent")
.Replace("#", "Count of")
.Replace("(", "")
.Replace(")", "")
.Trim();
string className = NameUtils.CreateIdentifier(c).Trim('_');
sb.Append(" public class ");
sb.Append(className);
sb.AppendLine(" : PerformanceSample");
sb.AppendLine(" {");
sb.Append(" public ");
sb.Append(className);
sb.AppendLine("(PerformanceSample other)");
sb.AppendLine(" : base(other)");
sb.AppendLine(" { }");
sb.AppendLine(" }");
sb.AppendLine();
}
}
}