/// <summary> /// Add the <see cref="DatadogReporter" /> allowing metrics to be reported to Datadog. /// </summary> /// <param name="metricReporterProviderBuilder"> /// The <see cref="IMetricsReportingBuilder" /> used to configure metrics reporters. /// </param> /// <param name="url">The base url where metrics are written.</param> /// <param name="apiKey">The api key used for authentication</param> /// <param name="fieldsSetup">The metric fields to report as well as their names.</param> /// <param name="datadogOptionsSetup">The setup action to configure the <see cref="MetricsDatadogOptions"/> to use.</param> /// <returns> /// An <see cref="IMetricsBuilder" /> that can be used to further configure App Metrics. /// </returns> public static IMetricsBuilder ToDatadogHttp( this IMetricsReportingBuilder metricReporterProviderBuilder, string url, string apiKey, Action <MetricFields> fieldsSetup = null, Action <MetricsDatadogOptions> datadogOptionsSetup = null) { if (metricReporterProviderBuilder == null) { throw new ArgumentNullException(nameof(metricReporterProviderBuilder)); } if (url == null) { throw new ArgumentNullException(nameof(url)); } if (!Uri.TryCreate(url, UriKind.Absolute, out var uri)) { throw new InvalidOperationException($"{nameof(url)} must be a valid absolute URI"); } var datadogOptions = new MetricsDatadogOptions(); var options = new MetricsReportingDatadogOptions { Datadog = { BaseUri = uri, ApiKey = apiKey } }; datadogOptionsSetup?.Invoke(datadogOptions); IMetricsOutputFormatter formatter; MetricFields fields = null; if (fieldsSetup == null) { formatter = new MetricsDatadogJsonOutputFormatter(options.FlushInterval, datadogOptions); } else { fields = new MetricFields(); fieldsSetup.Invoke(fields); formatter = new MetricsDatadogJsonOutputFormatter(options.FlushInterval, datadogOptions, fields); } options.MetricsOutputFormatter = formatter; var httpClient = CreateClient(options, options.HttpPolicy); var reporter = new DatadogReporter(options, httpClient); var builder = metricReporterProviderBuilder.Using(reporter); builder.OutputMetrics.AsDatadogJson(datadogOptions, options.FlushInterval, fields); return(builder); }
public void WhenAddCounter_ThenSuccess() { using (var sut = new DatadogReporter(new IntegrationEncompassConfig())) { sut.AddCounter("my-metric", 10); } }
/// <summary> /// Add the <see cref="DatadogReporter" /> allowing metrics to be reported to Datadog. /// </summary> /// <param name="metricsReportingBuilder"> /// The <see cref="IMetricsReportingBuilder" /> used to configure metrics reporters. /// </param> /// <param name="options">The Datadog reporting options to use.</param> /// <returns> /// An <see cref="IMetricsBuilder" /> that can be used to further configure App Metrics. /// </returns> public static IMetricsBuilder ToDatadogHttp( this IMetricsReportingBuilder metricsReportingBuilder, MetricsReportingDatadogOptions options) { if (metricsReportingBuilder == null) { throw new ArgumentNullException(nameof(metricsReportingBuilder)); } var httpClient = CreateClient(options, options.HttpPolicy); var reporter = new DatadogReporter(options, httpClient); return(metricsReportingBuilder.Using(reporter)); }
/// <summary> /// Add the <see cref="DatadogReporter" /> allowing metrics to be reported to Datadog. /// </summary> /// <param name="metricReporterProviderBuilder"> /// The <see cref="IMetricsReportingBuilder" /> used to configure metrics reporters. /// </param> /// <param name="setupAction">The Datadog reporting options to use.</param> /// <returns> /// An <see cref="IMetricsBuilder" /> that can be used to further configure App Metrics. /// </returns> public static IMetricsBuilder ToDatadogHttp( this IMetricsReportingBuilder metricReporterProviderBuilder, Action <MetricsReportingDatadogOptions> setupAction) { if (metricReporterProviderBuilder == null) { throw new ArgumentNullException(nameof(metricReporterProviderBuilder)); } var options = new MetricsReportingDatadogOptions(); setupAction?.Invoke(options); var httpClient = CreateClient(options, options.HttpPolicy); var reporter = new DatadogReporter(options, httpClient); return(metricReporterProviderBuilder.Using(reporter)); }
static void Main(string[] args) { int count = 0; var config = new JsonEncompassConfig(); config.Init(System.IO.File.ReadAllText("../../SextantConfigTest.json")); //manually set appenders // var console = new ConsoleLogAppender(config); //var loggly = new LogglyLogAppender(config); //var elasticSearch = new ElasticsearchLogAppender(config); //Logger.AddAppender(console); //Logger.AddAppender(loggly); //Logger.AddAppender(elasticSearch); //automatically set appenders Logger.Setup(config); Logger.AddTag("runtime-tag"); Logger.Debug("SextantTestRig", "Test debug message."); Logger.Info("SextantTestRig", "Test info message"); Logger.Warn("SextantTestRig", "Test warn message"); Logger.Error("SextantTestRig", "Test error message"); Logger.Fatal("SextantTestRig", "Test fatal message"); Console.WriteLine("press Q to quit or any other key to log another debug event."); while (Console.ReadKey().Key != ConsoleKey.Q) { var increment = 19; Parallel.For(0, increment, async => { Debug(); }); count = count + increment; } Console.WriteLine($"total queued: {count}"); Console.WriteLine("Shutting down."); Logger.Shutdown(30); return; #region Simple Metrics var datadog = new DatadogReporter(config); var graphite = new GraphiteReporter(config); SimpleMetrics.AddReporter(datadog); SimpleMetrics.AddReporter(graphite); SimpleMetrics.AddGauge("SextantTestRig.Gauge", 10); SimpleMetrics.AddCounter("SextantTestRig.Counter", 10); SimpleMetrics.AddMeter("SextantTestRig.Meter", 10); #endregion #region StatsD Metrics StatsDMetrics.Setup(config); var timer = StatsDMetrics.Timer("sextant-statd-tests-timer", Unit.Calls); Random r = new Random(); timer.StartRecording(); var counter = StatsDMetrics.Counter("sextant-statd-tests-counter", Unit.Events, MetricTags.None); counter.Increment(r.Next(0, 100)); counter.Increment(r.Next(0, 10)); counter.Increment(r.Next(0, 10)); counter.Increment(r.Next(0, 10)); counter.Increment(r.Next(0, 10)); counter.Increment(r.Next(0, 10)); counter.Increment(r.Next(0, 10)); counter.Increment(r.Next(0, 10)); timer.EndRecording(); #endregion Console.WriteLine("press enter to quit."); Console.ReadLine(); }