public CIAgentWriter(ImmutableTracerSettings settings, ISampler sampler, int maxBufferSize = DefaultMaxBufferSize)
        {
            var isPartialFlushEnabled = settings.ExporterSettings.PartialFlushEnabled;
            var apiRequestFactory     = TracesTransportStrategy.Get(settings.ExporterSettings);
            var api = new Api(apiRequestFactory, null, rates => sampler.SetDefaultSampleRates(rates), isPartialFlushEnabled);

            _agentWriter = new AgentWriter(api, null, maxBufferSize: maxBufferSize);
        }
        public static async Task <bool> RunAsync(ImmutableExporterSettings settings)
        {
            var payload = Vendors.MessagePack.MessagePackSerializer.Serialize(Array.Empty <Span[]>());

            var requestFactory = TracesTransportStrategy.Get(settings);

            DisplayInfoMessage(settings);

            var request = requestFactory.Create(new Uri(settings.AgentUri, "/v0.4/traces"));

            var content = new ByteArrayContent(payload);

            content.Headers.ContentType = new MediaTypeHeaderValue("application/msgpack");

            try
            {
                var response = await request.PostAsync(new ArraySegment <byte>(payload), "application/msgpack").ConfigureAwait(false);

                if (response.StatusCode != 200)
                {
                    Utils.WriteError(WrongStatusCodeFormat((HttpStatusCode)response.StatusCode));
                    return(false);
                }

                var versionHeader = response.GetHeader("Datadog-Agent-Version");

                if (versionHeader != null)
                {
                    AnsiConsole.WriteLine(DetectedAgentVersionFormat(versionHeader));
                }
                else
                {
                    Utils.WriteWarning(AgentDetectionFailed);
                }
            }
            catch (Exception ex)
            {
                Utils.WriteError(ErrorDetectingAgent(settings.AgentUri.ToString(), ex.Message));
                return(false);
            }

            return(true);
        }