public void SimpleMetricUsage() { Log.Trace("Defining new metric definitions"); //create one sampled metric definition using the "make a definition for the current log set" override CustomSampledMetricDefinition temperatureTracking = new CustomSampledMetricDefinition("SimpleMetricUsage", "Temperature", "Experiment Temperature", MetricSampleType.RawCount); temperatureTracking.Description = "This is an example from iControl where we want to track the temperature of a reaction or some such thing."; //create a set of METRICS (definition + metric) using the static add metric capability Log.Trace("defining new metrics"); CustomSampledMetric incrementalCountMetric = CustomSampledMetric.AddOrGet("SimpleMetricUsage", "Unit Test Data", "IncrementalCount", MetricSampleType.IncrementalCount, null); CustomSampledMetric incrementalFractionMetric = CustomSampledMetric.AddOrGet("SimpleMetricUsage", "Unit Test Data", "IncrementalFraction", MetricSampleType.IncrementalFraction, null); CustomSampledMetric deltaCountMetric = CustomSampledMetric.AddOrGet("SimpleMetricUsage", "Unit Test Data", "TotalCount", MetricSampleType.TotalCount, null); CustomSampledMetric deltaFractionMetric = CustomSampledMetric.AddOrGet("SimpleMetricUsage", "Unit Test Data", "TotalFraction", MetricSampleType.TotalFraction, null); CustomSampledMetric rawCountMetric = CustomSampledMetric.AddOrGet("SimpleMetricUsage", "Unit Test Data", "RawCount", MetricSampleType.RawCount, null); CustomSampledMetric rawFractionMetric = CustomSampledMetric.AddOrGet("SimpleMetricUsage", "Unit Test Data", "RawFraction", MetricSampleType.RawFraction, null); //lets add 10 values, a few milliseconds apart Log.Trace("And now lets log data"); int curSamplePass = 0; while (curSamplePass < 10) { //the temperature tracking one is set up so we can write to instances directly from a definition. temperatureTracking.WriteSample(string.Format(CultureInfo.CurrentCulture, "Experiment {0}", 1), curSamplePass); temperatureTracking.WriteSample(string.Format(CultureInfo.CurrentCulture, "Experiment {0}", 2), curSamplePass); temperatureTracking.WriteSample(string.Format(CultureInfo.CurrentCulture, "Experiment {0}", 3), curSamplePass); temperatureTracking.WriteSample(string.Format(CultureInfo.CurrentCulture, "Experiment {0}", 4), curSamplePass); temperatureTracking.WriteSample(string.Format(CultureInfo.CurrentCulture, "Experiment {0}", 5), curSamplePass); temperatureTracking.WriteSample(string.Format(CultureInfo.CurrentCulture, "Experiment {0}", 6), curSamplePass); incrementalCountMetric.WriteSample(curSamplePass * 20); incrementalFractionMetric.WriteSample(curSamplePass * 20, curSamplePass * 30); deltaCountMetric.WriteSample(curSamplePass * 20); deltaFractionMetric.WriteSample(curSamplePass * 20, curSamplePass * 30); rawCountMetric.WriteSample(curSamplePass); rawFractionMetric.WriteSample(curSamplePass / 10.0); curSamplePass++; Thread.Sleep(100); } Log.Trace("Completed logging metric samples."); }
public void GenerateMetricData() { Log.Trace("Defining new metric definitions"); //go ahead and register a few metrics int curMetricDefinitionCount = Log.Metrics.Count; CustomSampledMetricDefinition newMetric; newMetric = new CustomSampledMetricDefinition(Log.Metrics, "GenerateMetricData", "Unit Test Data", "IncrementalCount", MetricSampleType.IncrementalCount); newMetric.Description = "Unit test sampled metric using the incremental count calculation routine"; newMetric = new CustomSampledMetricDefinition(Log.Metrics, "GenerateMetricData", "Unit Test Data", "IncrementalFraction", MetricSampleType.IncrementalFraction); newMetric.Description = "Unit test sampled metric using the incremental fraction calculation routine. Rare, but fun."; newMetric = new CustomSampledMetricDefinition(Log.Metrics, "GenerateMetricData", "Unit Test Data", "TotalCount", MetricSampleType.TotalCount); newMetric.Description = "Unit test sampled metric using the Total Count calculation routine. Very common."; newMetric = new CustomSampledMetricDefinition(Log.Metrics, "GenerateMetricData", "Unit Test Data", "TotalFraction", MetricSampleType.TotalFraction); newMetric.Description = "Unit test sampled metric using the Total Fraction calculation routine. Rare, but rounds us out."; newMetric = new CustomSampledMetricDefinition(Log.Metrics, "GenerateMetricData", "Unit Test Data", "RawCount", MetricSampleType.RawCount); newMetric.Description = "Unit test sampled metric using the Raw Count calculation routine, which we will then average to create sample intervals."; newMetric = new CustomSampledMetricDefinition(Log.Metrics, "GenerateMetricData", "Unit Test Data", "RawFraction", MetricSampleType.RawFraction); newMetric.Description = "Unit test sampled metric using the Raw Fraction calculation routine. Fraction types aren't common."; //we should have added six new metric definitions Assert.AreEqual(curMetricDefinitionCount + 6, Log.Metrics.Count, "The number of registered metric definitions hasn't increased by the right amount, tending to mean that one or more metrics didn't register."); //and lets go ahead and create new metrics for each definition Log.Trace("Defining new metrics"); new CustomSampledMetric(Log.Metrics, "GenerateMetricData", "Unit Test Data", "IncrementalCount", null); new CustomSampledMetric(Log.Metrics, "GenerateMetricData", "Unit Test Data", "IncrementalFraction", null); new CustomSampledMetric(Log.Metrics, "GenerateMetricData", "Unit Test Data", "TotalCount", null); new CustomSampledMetric(Log.Metrics, "GenerateMetricData", "Unit Test Data", "TotalFraction", null); new CustomSampledMetric(Log.Metrics, "GenerateMetricData", "Unit Test Data", "RawCount", null); new CustomSampledMetric(Log.Metrics, "GenerateMetricData", "Unit Test Data", "RawFraction", null); //and finally, lets go log some data! Log.Trace("And now lets log data"); CustomSampledMetric incrementalCountMetric = (CustomSampledMetric) Log.Metrics["GenerateMetricData", "Unit Test Data", "IncrementalCount"].Metrics[0]; CustomSampledMetric incrementalFractionMetric = (CustomSampledMetric) Log.Metrics["GenerateMetricData", "Unit Test Data", "IncrementalFraction"].Metrics[0]; CustomSampledMetric deltaCountMetric = (CustomSampledMetric) Log.Metrics["GenerateMetricData", "Unit Test Data", "TotalCount"].Metrics[0]; CustomSampledMetric deltaFractionMetric = (CustomSampledMetric) Log.Metrics["GenerateMetricData", "Unit Test Data", "TotalFraction"].Metrics[0]; CustomSampledMetric rawCountMetric = (CustomSampledMetric) Log.Metrics["GenerateMetricData", "Unit Test Data", "RawCount"].Metrics[0]; CustomSampledMetric rawFractionMetric = (CustomSampledMetric) Log.Metrics["GenerateMetricData", "Unit Test Data", "RawFraction"].Metrics[0]; //lets add 10 values, a few milliseconds apart int curSamplePass = 0; while (curSamplePass < 10) { //We're putting in fairly bogus data, but it will produce a consistent output. incrementalCountMetric.WriteSample(curSamplePass * 20); incrementalFractionMetric.WriteSample(curSamplePass * 20, curSamplePass * 30); deltaCountMetric.WriteSample(curSamplePass * 20); deltaFractionMetric.WriteSample(curSamplePass * 20, curSamplePass * 30); rawCountMetric.WriteSample(curSamplePass); rawFractionMetric.WriteSample(curSamplePass / 10.0); curSamplePass++; Thread.Sleep(100); } Log.Trace("Completed logging metric samples."); }
/// <summary> /// Create a complete custom sampled metric packet /// </summary> /// <param name="rawValue">The raw data value</param> /// <param name="rawTimeStamp">The exact date and time the raw value was determined</param> /// <param name="baseValue">The reference value to compare against for come counter types</param> /// <param name="metric">The metric this sample is for</param> public CustomSampledMetricSamplePacket(CustomSampledMetric metric, double rawValue, double baseValue, DateTimeOffset rawTimeStamp) : base(metric, rawValue, rawTimeStamp) { m_BaseValue = baseValue; }
/// <summary> /// Register all of the individual metrics we use /// </summary> private void Register() { lock (m_Lock) { //register our process-wide metrics CustomSampledMetricDefinition curSampledMetricDefinition; curSampledMetricDefinition = new CustomSampledMetricDefinition(Log.Metrics, ProcessMetricType, "Process.Processor", CounterTotalProcessorTime, MetricSampleType.TotalFraction); curSampledMetricDefinition.Description = "The percentage of processor capacity used by the process."; curSampledMetricDefinition.UnitCaption = "%"; m_ProcessPercentProcessorTime = curSampledMetricDefinition.Metrics.Add(null); curSampledMetricDefinition = new CustomSampledMetricDefinition(Log.Metrics, ProcessMetricType, "Process.Processor", CounterUserProcessorTime, MetricSampleType.TotalFraction); curSampledMetricDefinition.Description = "The percentage of processor capacity used by the process for non-privileged tasks."; curSampledMetricDefinition.UnitCaption = "%"; m_ProcessPercentUserProcessorTime = curSampledMetricDefinition.Metrics.Add(null); curSampledMetricDefinition = new CustomSampledMetricDefinition(Log.Metrics, ProcessMetricType, "Process.Processor", CounterPrivilegedProcessorTime, MetricSampleType.TotalFraction); curSampledMetricDefinition.Description = "The percentage of processor capacity used by the process for privileged tasks."; curSampledMetricDefinition.UnitCaption = "%"; m_ProcessPercentPrivilegedProcessorTime = curSampledMetricDefinition.Metrics.Add(null); curSampledMetricDefinition = new CustomSampledMetricDefinition(Log.Metrics, ProcessMetricType, "Process.Memory", CounterNonpagedSystemMemorySize, MetricSampleType.RawCount); curSampledMetricDefinition.Description = "The amount of nonpaged system memory allocated for the process."; curSampledMetricDefinition.UnitCaption = "Bytes"; m_ProcessNonpagedSystemMemorySize = curSampledMetricDefinition.Metrics.Add(null); curSampledMetricDefinition = new CustomSampledMetricDefinition(Log.Metrics, ProcessMetricType, "Process.Memory", CounterPagedMemorySize, MetricSampleType.RawCount); curSampledMetricDefinition.Description = "The amount of paged memory allocated for the process."; curSampledMetricDefinition.UnitCaption = "Bytes"; m_ProcessPagedMemorySize = curSampledMetricDefinition.Metrics.Add(null); curSampledMetricDefinition = new CustomSampledMetricDefinition(Log.Metrics, ProcessMetricType, "Process.Memory", CounterPagedSystemMemorySize, MetricSampleType.RawCount); curSampledMetricDefinition.Description = "The amount of pageable system memory allocated for the process."; curSampledMetricDefinition.UnitCaption = "Bytes"; m_ProcessPagedSystemMemorySize = curSampledMetricDefinition.Metrics.Add(null); curSampledMetricDefinition = new CustomSampledMetricDefinition(Log.Metrics, ProcessMetricType, "Process.Memory", CounterPeakPagedMemorySize, MetricSampleType.RawCount); curSampledMetricDefinition.Description = "The maximum amount of memory in the virtual memory paging file for the process."; curSampledMetricDefinition.UnitCaption = "Bytes"; m_ProcessPeakPagedMemorySize = curSampledMetricDefinition.Metrics.Add(null); curSampledMetricDefinition = new CustomSampledMetricDefinition(Log.Metrics, ProcessMetricType, "Process.Memory", CounterPeakVirtualMemorySize, MetricSampleType.RawCount); curSampledMetricDefinition.Description = "The maximum amount of virtual memory used for the process."; curSampledMetricDefinition.UnitCaption = "Bytes"; m_ProcessPeakVirtualMemorySize = curSampledMetricDefinition.Metrics.Add(null); curSampledMetricDefinition = new CustomSampledMetricDefinition(Log.Metrics, ProcessMetricType, "Process.Memory", CounterPeakWorkingSet, MetricSampleType.RawCount); curSampledMetricDefinition.Description = "The maximum amount of physical memory used for the process."; curSampledMetricDefinition.UnitCaption = "Bytes"; m_ProcessPeakWorkingSet = curSampledMetricDefinition.Metrics.Add(null); curSampledMetricDefinition = new CustomSampledMetricDefinition(Log.Metrics, ProcessMetricType, "Process.Memory", CounterPrivateMemorySize, MetricSampleType.RawCount); curSampledMetricDefinition.Description = "The amount of private memory allocated for the process."; curSampledMetricDefinition.UnitCaption = "Bytes"; m_ProcessPrivateMemorySize = curSampledMetricDefinition.Metrics.Add(null); curSampledMetricDefinition = new CustomSampledMetricDefinition(Log.Metrics, ProcessMetricType, "Process.Memory", CounterVirtualMemorySize, MetricSampleType.RawCount); curSampledMetricDefinition.Description = "The amount of virtual memory allocated for the process."; curSampledMetricDefinition.UnitCaption = "Bytes"; m_ProcessVirtualMemorySize = curSampledMetricDefinition.Metrics.Add(null); curSampledMetricDefinition = new CustomSampledMetricDefinition(Log.Metrics, ProcessMetricType, "Process.Memory", CounterWorkingSet, MetricSampleType.RawCount); curSampledMetricDefinition.Description = "The amount of physical memory allocated for the process."; curSampledMetricDefinition.UnitCaption = "Bytes"; m_ProcessWorkingSet = curSampledMetricDefinition.Metrics.Add(null); //register the different metrics we use for threads if (m_MonitorThreads) { #if MONITOR_OS_THREADS curSampledMetricDefinition = new CustomSampledMetricDefinition(Log.Metrics, ProcessMetricType, "Process.Thread", CounterTotalProcessorTime, MetricSampleType.TotalFraction); curSampledMetricDefinition.Description = "The percentage of processor capacity used by this thread."; curSampledMetricDefinition.UnitCaption = "%"; m_MetricDefinitions.Add(curSampledMetricDefinition); curSampledMetricDefinition = new CustomSampledMetricDefinition(Log.Metrics, ProcessMetricType, "Process.Thread", CounterUserProcessorTime, MetricSampleType.TotalFraction); curSampledMetricDefinition.Description = "The percentage of processor capacity used by the process for non-privileged tasks."; curSampledMetricDefinition.UnitCaption = "%"; m_MetricDefinitions.Add(curSampledMetricDefinition); curSampledMetricDefinition = new CustomSampledMetricDefinition(Log.Metrics, ProcessMetricType, "Process.Thread", CounterPrivilegedProcessorTime, MetricSampleType.TotalFraction); curSampledMetricDefinition.Description = "The percentage of processor capacity used by the process for privileged tasks."; curSampledMetricDefinition.UnitCaption = "%"; m_MetricDefinitions.Add(curSampledMetricDefinition); //register all of our threads. EnsureThreadsRegistered(m_MonitoredProcess.Threads); #endif } } }
/// <summary> /// Create a complete custom sampled metric packet /// </summary> /// <param name="rawValue">The raw data value</param> /// <param name="baseValue">The reference value to compare against for come counter types</param> /// <param name="metric">The metric this sample is for</param> public CustomSampledMetricSamplePacket(CustomSampledMetric metric, double rawValue, double baseValue) : base(metric, rawValue) { m_BaseValue = baseValue; }