public void MultipleValueLogEventsIncludesProperties() { using (TestCorrelator.CreateContext()) { var options = new SerilogMetricsReporterOptions { LogEventLevel = LogEventLevel.Verbose }; var writer = new SerilogMetricSnapshotWriter(options); var columns = new [] { "A", "B", "C" }; var values = new object[] { 1, 2, 3 }; var metricTags = MetricTags.FromSetItemString("foo:10,bar:20"); writer.Write("context", "name", columns, values, metricTags, DateTime.UtcNow); var tagsProperty = metricTags.Keys.Zip(metricTags.Values, (key, value) => new KeyValuePair <ScalarValue, LogEventPropertyValue>( new ScalarValue(key), new ScalarValue(value))); var properties = new Dictionary <string, LogEventPropertyValue>() { { "context", new ScalarValue("context") }, { "name", new ScalarValue("name") }, { "A", new ScalarValue(1) }, { "B", new ScalarValue(2) }, { "C", new ScalarValue(3) }, { "tags", new DictionaryValue(tagsProperty) } }; TestCorrelator.GetLogEventsFromCurrentContext() .Should().ContainSingle() .Which.Properties.Should().BeEquivalentTo(properties); } }
public void FlushIntervalMustBeGreaterThanZero() { var options = new SerilogMetricsReporterOptions { FlushInterval = TimeSpan.MinValue }; // ReSharper disable once ObjectCreationAsStatement Action constructor = () => new SerilogMetricsReporter(options); constructor.Should().Throw <ArgumentException>(); }
public void UsesFilterFromOptions() { var filter = Mock.Of <IFilterMetrics>(); var options = new SerilogMetricsReporterOptions { Filter = filter }; var reporter = new SerilogMetricsReporter(options); reporter.Filter.Should().BeSameAs(filter); }
public void UsesFlushIntervalFromOptions() { var tenSeconds = TimeSpan.FromSeconds(10); var options = new SerilogMetricsReporterOptions { FlushInterval = tenSeconds }; var reporter = new SerilogMetricsReporter(options); reporter.FlushInterval.Should().Be(tenSeconds); }
public void SingleValueLogEventsAreWrittenAtSpecifiedLevel(LogEventLevel logEventLevel) { using (TestCorrelator.CreateContext()) { var options = new SerilogMetricsReporterOptions { LogEventLevel = logEventLevel }; var writer = new SerilogMetricSnapshotWriter(options); writer.Write("context", "name", 123, MetricTags.Empty, DateTime.UtcNow); TestCorrelator.GetLogEventsFromCurrentContext() .Should().ContainSingle() .Which.Level.Should().Be(logEventLevel); } }
/// <summary> /// Add the <see cref="SerilogMetricsReporter" /> allowing metrics to be reported to Serilog. /// </summary> /// <param name="metricReporterProviderBuilder"> /// The <see cref="IMetricsReportingBuilder" /> used to configure metrics reporters. /// </param> /// <param name="setupAction">The Serilog reporting options to use.</param> /// <returns> /// An <see cref="IMetricsBuilder" /> that can be used to further configure App Metrics. /// </returns> public static IMetricsBuilder ToSerilog( this IMetricsReportingBuilder metricReporterProviderBuilder, Action <SerilogMetricsReporterOptions> setupAction) { if (metricReporterProviderBuilder == null) { throw new ArgumentNullException(nameof(metricReporterProviderBuilder)); } var options = new SerilogMetricsReporterOptions(); setupAction?.Invoke(options); var reporter = new SerilogMetricsReporter(options); return(metricReporterProviderBuilder.Using(reporter)); }
public void SingleValueLogEventsAreWrittenAtSpecifiedTime() { using (TestCorrelator.CreateContext()) { var options = new SerilogMetricsReporterOptions { LogEventLevel = LogEventLevel.Verbose }; var writer = new SerilogMetricSnapshotWriter(options); var timestamp = DateTime.UtcNow; writer.Write("context", "name", "value", 123, MetricTags.Empty, timestamp); TestCorrelator.GetLogEventsFromCurrentContext() .Should().ContainSingle() .Which.Timestamp.Should().Be(timestamp); } }
public void SingleValueLogEventsUseMessageTemplate() { using (TestCorrelator.CreateContext()) { var options = new SerilogMetricsReporterOptions { LogEventLevel = LogEventLevel.Verbose, MessageTemplates = { Fallback = "Metric {name} in context {context}" } }; var writer = new SerilogMetricSnapshotWriter(options); var timestamp = DateTime.UtcNow; writer.Write("context", "name", 123, MetricTags.Empty, timestamp); TestCorrelator.GetLogEventsFromCurrentContext() .Should().ContainSingle() .Which.RenderMessage().Should().Be("Metric \"name\" in context \"context\""); } }
public void MultipleValueLogEventsUseMessageTemplate() { using (TestCorrelator.CreateContext()) { var options = new SerilogMetricsReporterOptions { LogEventLevel = LogEventLevel.Verbose, MessageTemplates = { Fallback = "Metric {name} in context {context}" } }; var writer = new SerilogMetricSnapshotWriter(options); var columns = new [] { "A", "B", "C" }; var values = new object[] { 1, 2, 3 }; writer.Write("context", "name", columns, values, MetricTags.Empty, DateTime.UtcNow); TestCorrelator.GetLogEventsFromCurrentContext() .Should().ContainSingle() .Which.RenderMessage().Should().Be("Metric \"name\" in context \"context\""); } }
public SerilogMetricsReporterOptionsTests() { _options = new SerilogMetricsReporterOptions(); }