/// <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));
        }
Example #5
0
        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();
        }