Beispiel #1
0
        public void TestCreateContainer()
        {
            var log      = new CappedLog.CappedLog();
            var builder0 = new CappedLog.CappedLogConfBuilder()
                           .SetDefaultCapacity(10)
                           .SetConstLabel("one", "1");
            var builder1 = builder0.Clone()
                           .AddConstLabels(new[] { "two", "2", "three", "33" })
                           .SetConstLabel("three", "3")
            ;
            var conf0 = builder0
                        .AddConstLabels(new[] { "two", "20", "three", "30" })
                        .Build();
            var conf1 = builder1
                        .Build();
            var conf2 = builder1.Clone()
                        .AddLabelNames(new[] { "four", "five" })
                        .Build();
            var conf3 = builder1.Clone()
                        .AddLabelName("four")
                        .Build();
            var conf11 = builder1.Clone()
                         .AddLabelName("four")
                         .SetDefaultCapacity(20)
                         .Build();

            var container0 = log.Create(conf0);
            var container1 = log.Create(conf1);

            Assert.AreNotEqual(container1, container0);

            var container2 = log.Create(conf2);

            Assert.AreNotEqual(container2, container1);
            Assert.AreNotEqual(container2, container0);

            var container3 = log.GetOrCreate(conf3);

            Assert.AreNotEqual(container3, container0);
            Assert.AreNotEqual(container3, container1);
            Assert.AreNotEqual(container3, container2);

            Assert.ThrowsException <ArgumentException>(() => log.Create(conf2));
            Assert.ThrowsException <ArgumentException>(() => log.Create(conf11));

            var container11 = log.GetOrCreate(conf11);

            Assert.AreEqual(container11, container3);
        }
Beispiel #2
0
        private static void Init(out CappedLog.CappedLogScope scrape, out CappedLog.CappedLogConf conf2, out CappedLog.CappedLogConf conf3, out CappedLog.CappedLogConf conf1, out CappedLog.CappedLogMetric metric11, out CappedLog.CappedLogMetric metric12, out CappedLog.CappedLogMetric metric2, out CappedLog.CappedLogMetric metric3)
        {
            var log = new CappedLog.CappedLog();

            scrape = new CappedLog.CappedLogScope(log);
            var builder1 = new CappedLog.CappedLogConfBuilder()
                           .AddConstLabel("one", "1")
                           .AddConstLabels(new[] { "two", "2", "three", "3" })
                           .SetDefaultCapacity(10);

            conf2 = builder1.Clone()
                    .SetDefaultCapacity(20)
                    .AddLabelNames(new[] { "four", "five" })
                    .Build();
            conf3 = builder1
                    .AddLabelName("four")
                    .Build();
            conf1 = builder1
                    .AddLabelName("six")
                    .AddConstLabel("seven", "7")
                    .Build();
            var conf0 = builder1
                        .AddLabelName("nine")
                        .Build();
            var container0 = log.GetOrCreate(conf0);
            var container1 = scrape.GetOrCreate(conf1);
            var container2 = scrape.GetOrCreate(conf2);
            var container3 = scrape.GetOrCreate(conf3);

            try { scrape.GetOrCreate(conf0); Assert.Fail(); }
            catch { }
            Assert.AreNotEqual(container1, container2);
            Assert.AreNotEqual(container1, container3);
            Assert.AreNotEqual(container2, container3);
            Assert.AreNotEqual(container1, container0);
            Assert.AreNotEqual(container2, container0);
            Assert.AreNotEqual(container3, container0);

            metric11 = container1.GetMetric(new[] { "41", "61" });
            metric12 = container1.GetMetric(new[] { "42", "62" });
            metric2  = container2.GetMetric(new[] { "4", "5" });
            metric3  = container3.GetMetric(new[] { "4" });
        }
Beispiel #3
0
        public void TestSimpleScrape()
        {
            var log  = new CappedLog.CappedLog();
            var conf = new CappedLog.CappedLogConfBuilder()
                       .AddConstLabel("foo", "1")
                       .SetDefaultCapacity(10)
                       .Build();
            var container    = log.GetOrCreate(conf);
            var scrape       = CappedLog.CappedLogScrape.CreateScrape(log, new MyScrapeProcess());
            var metric       = container.GetMetric(Array.Empty <string>());
            var cancellation = new CancellationTokenSource();

            //Sending messages to the log
            metric.TryEnqueue(() => CappedLog.CappedLogMessage.Create("msg1"));
            metric.TryEnqueue(() => CappedLog.CappedLogMessage.Create("msgN"));

            // Periodic collection of messages from the log
            var myScrapeProcessResult = scrape(cancellation.Token).Result;

            Assert.AreEqual(2, myScrapeProcessResult);
        }
Beispiel #4
0
        public void LogMessages()
        {
            var categoryName = "Test category";
            var log          = new CappedLog.CappedLog();
            var builder      = new CappedLog.CappedLogConfBuilder();
            var options      = new CappedLog.CappedLogLoggerOptions()
            {
                DefaultBuilder = builder, Storrage = log, LogLevel = LogLevel.Trace
            };
            var logger = new CappedLog.CappedLogLogger(categoryName, options);
            var data   = new List <(CappedLog.CappedLogMetric, CappedLog.CappedLogMessage)>();

            logger.LogError(new IndexOutOfRangeException("error message 1"), "Error {}", "1");
            log.ForEach(c => c.ForEach(m => m.DequeueAll(data, m, (p, d) => (p, d))));
            Assert.Single(data);
            Assert.Equal(new[] { "category", categoryName, "level", "error" }.ToKeyValuePairs(), data[0].Item1.Config.ConstLabels);
            Assert.Equal(new[] { "code", "exception" }, data[0].Item1.Config.LabelNames);
            Assert.Equal(new[] { "0", typeof(IndexOutOfRangeException).Name }, data[0].Item1.Labels);
            Assert.Equal("Error 1", data[0].Item2.Message);

            logger.LogCritical(new EventId(1, "Code 1"), new DllNotFoundException("error message 1"), "Critical {}", "2");
            log.ForEach(c => c.ForEach(m => m.DequeueAll(data, m, (p, d) => (p, d))));
            Assert.Equal(2, data.Count);
            Assert.Equal(new[] { "category", categoryName, "level", "crit" }.ToKeyValuePairs(), data[1].Item1.Config.ConstLabels);
            Assert.Equal(new[] { "code", "exception" }, data[1].Item1.Config.LabelNames);
            Assert.Equal(new[] { "Code 1", typeof(DllNotFoundException).Name }, data[1].Item1.Labels);
            Assert.Equal("Critical 2", data[1].Item2.Message);

            logger.LogWarning(new EventId(2), "Warning {}", "3");
            log.ForEach(c => c.ForEach(m => m.DequeueAll(data, m, (p, d) => (p, d))));
            Assert.Equal(3, data.Count);
            Assert.Equal(new[] { "category", categoryName, "level", "warn" }.ToKeyValuePairs(), data[2].Item1.Config.ConstLabels);
            Assert.Equal(new[] { "code", "exception" }, data[2].Item1.Config.LabelNames);
            Assert.Equal(new[] { "2", string.Empty }, data[2].Item1.Labels);
            Assert.Equal("Warning 3", data[2].Item2.Message);
        }
Beispiel #5
0
        public void TestAddMessages()
        {
            var log      = new CappedLog.CappedLog();
            var builder1 = new CappedLog.CappedLogConfBuilder()
                           .AddConstLabel("one", "1")
                           .AddConstLabels(new[] { "two", "2", "three", "3" })
                           .SetDefaultCapacity(10);
            var conf2 = builder1.Clone()
                        .SetDefaultCapacity(20)
                        .AddLabelNames(new[] { "four", "five" })
                        .Build();
            var conf3 = builder1
                        .AddLabelName("four")
                        .Build();
            var conf1 = builder1
                        .AddLabelName("six")
                        .AddConstLabel("seven", "7")
                        .Build();
            var container1 = log.GetOrCreate(conf1);
            var container2 = log.GetOrCreate(conf2);
            var container3 = log.GetOrCreate(conf3);
            var metric11   = container1.GetMetric(new[] { "41", "61" });
            var metric12   = container1.GetMetric(new[] { "42", "62" });
            var metric2    = container2.GetMetric(new[] { "4", "5" });
            var metric3    = container3.GetMetric(new[] { "4" });

            var    i11    = 0;
            var    i12    = 0;
            var    i2     = 0;
            var    i3     = 0;
            Action insert = () =>
            {
                var id = Thread.CurrentThread.ManagedThreadId;
                for (var i = 0; i < 10; ++i)
                {
                    if (metric11.TryEnqueue(() => $"message11 {id}-{i}"))
                    {
                        Interlocked.Increment(ref i11);
                    }
                    if (metric12.TryEnqueue(() => $"message12 {id}-{i}"))
                    {
                        Interlocked.Increment(ref i12);
                    }
                    if (metric2.TryEnqueue(() => $"message2 {id}-{i}"))
                    {
                        Interlocked.Increment(ref i2);
                    }
                    if (metric3.TryEnqueue(() => $"message2 {id}-{i}"))
                    {
                        Interlocked.Increment(ref i3);
                    }
                    Task.Delay(1).Wait();
                }
            };
            var tasks = new List <Task>();

            for (var i = 0; i < 8; ++i)
            {
                tasks.Add(Task.Factory.StartNew(insert));
            }

            Task.WaitAll(tasks.ToArray());

            Assert.AreEqual(i11, 10);
            Assert.AreEqual(i12, 10);
            Assert.AreEqual(i2, 20);
            Assert.AreEqual(i3, 10);
        }
Beispiel #6
0
        public void TestCreateMetric()
        {
            var log      = new CappedLog.CappedLog();
            var builder0 = new CappedLog.CappedLogConfBuilder()
                           .SetDefaultCapacity(10)
                           .AddConstLabel("one", "1");
            var builder1 = builder0.Clone()
                           .AddConstLabels(new[] { "two", "2", "three", "3" });
            var conf0 = builder0
                        .AddConstLabels(new[] { "two", "20", "three", "30" })
                        .Build();
            var conf2 = builder1.Clone()
                        .SetDefaultCapacity(20)
                        .AddLabelNames(new[] { "four", "five" })
                        .Build();
            var conf3 = builder1
                        .AddLabelName("four")
                        .Build();
            var conf1 = builder1
                        .AddLabelName("six")
                        .Build();
            var container0 = log.GetOrCreate(conf0);
            var container1 = log.GetOrCreate(conf1);
            var container2 = log.GetOrCreate(conf2);
            var container3 = log.GetOrCreate(conf3);

            Assert.AreNotEqual(container0, container1);
            Assert.AreNotEqual(container0, container2);
            Assert.AreNotEqual(container0, container3);
            Assert.AreNotEqual(container1, container2);
            Assert.AreNotEqual(container1, container3);
            Assert.AreNotEqual(container2, container3);

            var metric0   = container0.GetMetric(new[] { "41", "61" });
            var metric11  = container1.GetMetric(new[] { "41", "61" });
            var metric12  = container1.GetMetric(new[] { "42", "62" });
            var metric111 = container1.GetMetric(new[] { "41", "61" });

            Assert.AreNotEqual(metric0, metric11);
            Assert.AreNotEqual(metric0, metric12);
            Assert.AreNotEqual(metric11, metric12);
            Assert.AreEqual(metric11, metric111);

            var metric2 = container2.GetMetric(new[] { "4", "5" });
            var metric3 = container3.GetMetric(new[] { "4" });

            Assert.AreEqual(metric11.Capacity, 10);
            Assert.AreEqual(metric12.Capacity, 10);
            Assert.AreEqual(metric2.Capacity, 20);
            Assert.AreEqual(metric3.Capacity, 10);

            Assert.IsTrue(metric0.Config.ConstLabels.SequenceEqual(new[] { "one", "1", "two", "20", "three", "30" }.ToKeyValuePairs()));
            Assert.IsTrue(metric11.Config.ConstLabels.SequenceEqual(new[] { "one", "1", "two", "2", "three", "3" }.ToKeyValuePairs()));

            Assert.IsTrue(metric11.Config.LabelNames.SequenceEqual(new[] { "four", "six" }));
            Assert.IsTrue(metric11.Labels.SequenceEqual(new[] { "41", "61" }));
            Assert.IsTrue(metric12.Config.LabelNames.SequenceEqual(new[] { "four", "six" }));
            Assert.IsTrue(metric12.Labels.SequenceEqual(new[] { "42", "62" }));

            Assert.IsTrue(metric2.Config.LabelNames.SequenceEqual(new[] { "four", "five" }));
            Assert.IsTrue(metric2.Labels.SequenceEqual(new[] { "4", "5" }));

            Assert.IsTrue(metric3.Config.LabelNames.SequenceEqual(new[] { "four" }));
            Assert.IsTrue(metric3.Labels.SequenceEqual(new[] { "4" }));
        }