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); }
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" }); }
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); }
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); }
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); }
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" })); }