private static void AddStatsdMetricSink(IServiceCollection services, StatsdSinkConfiguration statsdConfiguration, Table metricSinkAsciiTable)
        {
            metricSinkAsciiTable.AddRow("StatsD", $"Url: {statsdConfiguration.Host}:{statsdConfiguration.Port}.");

            services.AddTransient <IMetricSink, StatsdMetricSink>();
            services.AddStatsD(provider =>
            {
                var loggerFactory = provider.GetRequiredService <ILoggerFactory>();
                var sinkLogger    = loggerFactory.CreateLogger <StatsdMetricSink>();
                var host          = statsdConfiguration.Host;
                var port          = statsdConfiguration.Port;
                var metricPrefix  = statsdConfiguration.MetricPrefix;

                return(new StatsDConfiguration
                {
                    Host = host,
                    Port = port,
                    Prefix = metricPrefix,
                    OnError = ex =>
                    {
                        sinkLogger.LogCritical(ex, "Failed to emit metric to {StatsdHost} on {StatsdPort} with prefix {StatsdPrefix}", host, port, metricPrefix);
                        return true;
                    }
                });
            });
        }
        public RuntimeConfigurationGenerator WithStatsDMetricSink(int?port = 1234, string host = "automated-test.host", string metricPrefix = "test.")
        {
            StatsdSinkConfiguration statsdSinkConfiguration;

            if (string.IsNullOrWhiteSpace(host) && port == null)
            {
                statsdSinkConfiguration = null;
            }
            else
            {
                statsdSinkConfiguration = new StatsdSinkConfiguration();

                if (string.IsNullOrWhiteSpace(host) == false)
                {
                    statsdSinkConfiguration.Host = host;
                }

                if (string.IsNullOrWhiteSpace(metricPrefix) == false)
                {
                    statsdSinkConfiguration.MetricPrefix = metricPrefix;
                }

                if (port != null)
                {
                    statsdSinkConfiguration.Port = port.Value;
                }
            }

            _runtimeConfiguration.MetricSinks.Statsd = statsdSinkConfiguration;

            return(this);
        }