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.");
        }
Beispiel #3
0
        /// <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
                }
            }
        }