public void TestRecorders()
        {
            var collector = new MetricsCollector();

            collector.Record("Recorder1", 1.0M, Unit.MilliSecond);
            collector.Record("Recorder1", 11.0M, Unit.MilliSecond);
            collector.Record("Recorder2", 2.0M, Unit.Second);
            collector.Record("Recorder2", 22.0M, Unit.Second);

            var metrics = collector.GetMetrics();

            Assert.Equal(2, metrics.Count);
            RecorderUtils.AssertRecorderOutput(new[] { 1.0M, 11.0M }, Unit.MilliSecond,
                                               metrics["Recorder1"].FlushToString());
            RecorderUtils.AssertRecorderOutput(new[] { 2.0M, 22.0M }, Unit.Second, metrics["Recorder2"].FlushToString());
        }
        public void FlushedMetricDoesNotHaveData()
        {
            var collector = new MetricsCollector();

            collector.Record("counter", 10M, Unit.Minute);

            collector.FlushToString();

            Assert.Equal(string.Empty, collector.GetMetrics()["counter"].FlushToString());
        }
        public void CrossMetricMergesAreNotAllowed()
        {
            var collector = new MetricsCollector();

            collector.IncrementCounter("Counter", 1);
            var collector2 = new MetricsCollector();

            collector2.Record("Counter", 10M, Unit.Second);

            collector.Merge(collector2);
        }
        public void CollectorShouldIgnoreInvalidMetricNames()
        {
            var          collector   = new MetricsCollector();
            const string invalidName = "Invalid@Name";

            collector.IncrementCounter(invalidName, 1);
            using (collector.StartTimer(invalidName))
            {
                collector.Record(invalidName, 0, Unit.None);
            }

            Assert.Equal(string.Empty, collector.FlushToString());
        }