public static IApiRequestFactory GetAgentIntakeFactory(ImmutableExporterSettings settings) { // use the same transport for telemetry as we do for traces var strategy = settings.TracesTransport; switch (strategy) { case TracesTransportType.WindowsNamedPipe: Log.Information <string, string, int>("Using {FactoryType} for telemetry transport, with pipe name {PipeName} and timeout {Timeout}ms.", nameof(NamedPipeClientStreamFactory), settings.TracesPipeName, settings.TracesPipeTimeoutMs); return(new HttpStreamRequestFactory(new NamedPipeClientStreamFactory(settings.TracesPipeName, settings.TracesPipeTimeoutMs), DatadogHttpClient.CreateTelemetryAgentClient(), GetBaseEndpoint())); case TracesTransportType.Default: default: var agentUri = UriHelpers.Combine(settings.AgentUri, TelemetryConstants.AgentTelemetryEndpoint); #if NETCOREAPP Log.Information("Using {FactoryType} for telemetry transport.", nameof(HttpClientRequestFactory)); return(new HttpClientRequestFactory(agentUri, TelemetryHttpHeaderNames.GetDefaultAgentHeaders(), timeout: Timeout)); #else Log.Information("Using {FactoryType} for telemetry transport.", nameof(ApiWebRequestFactory)); return(new ApiWebRequestFactory(agentUri, TelemetryHttpHeaderNames.GetDefaultAgentHeaders(), timeout: Timeout)); #endif }
public Uri GetEndpoint(string relativePath) { return(UriHelpers.Combine(_baseEndpoint, relativePath)); }
public Uri GetEndpoint(string relativePath) => UriHelpers.Combine(_baseEndpoint, relativePath);
public static TelemetrySettings FromSource(IConfigurationSource?source) { string?configurationError = null; var apiKey = source?.GetString(ConfigurationKeys.ApiKey); var agentlessExplicitlyEnabled = source?.GetBool(ConfigurationKeys.Telemetry.AgentlessEnabled); var agentlessEnabled = false; if (agentlessExplicitlyEnabled == true) { if (string.IsNullOrEmpty(apiKey)) { configurationError = "Telemetry configuration error: Agentless mode was enabled, but no API key was available."; } else { agentlessEnabled = true; } } else if (agentlessExplicitlyEnabled is null) { // if there's an API key, we use agentless mode, otherwise we use the agent agentlessEnabled = !string.IsNullOrEmpty(apiKey); } // disabled by default unless using agentless var telemetryEnabled = source?.GetBool(ConfigurationKeys.Telemetry.Enabled) ?? agentlessEnabled; AgentlessSettings?agentless = null; if (telemetryEnabled && agentlessEnabled) { // We have an API key, so try to send directly to intake Uri agentlessUri; var requestedTelemetryUri = source?.GetString(ConfigurationKeys.Telemetry.Uri); if (!string.IsNullOrEmpty(requestedTelemetryUri) && Uri.TryCreate(requestedTelemetryUri, UriKind.Absolute, out var telemetryUri)) { // telemetry URI provided and well-formed agentlessUri = UriHelpers.Combine(telemetryUri, "/"); } else { if (!string.IsNullOrEmpty(requestedTelemetryUri)) { // URI parsing failed configurationError = configurationError is null ? $"Telemetry configuration error: The provided telemetry Uri '{requestedTelemetryUri}' was not a valid absolute Uri. Using default intake Uri." : configurationError + ", The provided telemetry Uri '{requestedTelemetryUri}' was not a valid absolute Uri. Using default intake Uri."; } // use the default intake. Use SIGNALFX_SITE if provided, otherwise use default var siteFromEnv = source?.GetString(ConfigurationKeys.Site); var ddSite = string.IsNullOrEmpty(siteFromEnv) ? "datadoghq.com" : siteFromEnv; agentlessUri = new Uri($"{TelemetryConstants.TelemetryIntakePrefix}.{ddSite}/"); } agentless = new AgentlessSettings(agentlessUri, apiKey !); } return(new TelemetrySettings(telemetryEnabled, configurationError, agentless)); }