Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 1 addition & 33 deletions src/api/Elastic.Documentation.Api/MappingsExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
using System.Diagnostics;
using System.Text.Json;
using Elastic.Documentation.Api.AskAi;
using Elastic.Documentation.Api.Telemetry;
using Elastic.Documentation.Search;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
Expand All @@ -17,17 +16,14 @@ namespace Elastic.Documentation.Api;

public static class MappingsExtension
{
public static void MapElasticDocsApiEndpoints(this IEndpointRouteBuilder group, bool mapOtlpEndpoints = true)
public static void MapElasticDocsApiEndpoints(this IEndpointRouteBuilder group)
{

_ = group.MapGet("/", () => Results.Empty);
_ = group.MapPost("/", () => Results.Empty);
MapAskAiEndpoint(group);
MapNavigationSearch(group);
MapFullSearch(group);
MapChanges(group);
if (mapOtlpEndpoints)
MapOtlpProxyEndpoint(group);
}

private static void MapAskAiEndpoint(IEndpointRouteBuilder group)
Expand Down Expand Up @@ -180,32 +176,4 @@ Cancel ctx
return Results.Ok(response);
});

private static void MapOtlpProxyEndpoint(IEndpointRouteBuilder group)
{
// Use /o/* to avoid adblocker detection (common blocklists target /otlp, /telemetry, etc.)
var otlpGroup = group.MapGroup("/o");

MapOtlpSignalEndpoint(otlpGroup, "/t", OtlpSignalType.Traces);
MapOtlpSignalEndpoint(otlpGroup, "/l", OtlpSignalType.Logs);
MapOtlpSignalEndpoint(otlpGroup, "/m", OtlpSignalType.Metrics);
}

private static void MapOtlpSignalEndpoint(
IEndpointRouteBuilder group,
string path,
OtlpSignalType signalType) =>
group.MapPost(path,
async (HttpContext context, IOtlpService otlpService, Cancel ctx) =>
{
var contentType = context.Request.ContentType ?? "application/json";
var result = await otlpService.ForwardOtlp(
signalType,
context.Request.Body,
contentType,
ctx);
return result.IsSuccess
? Results.NoContent()
: Results.StatusCode(result.StatusCode);
})
.DisableAntiforgery();
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ public static TracerProviderBuilder AddDocsApiTracing(this TracerProviderBuilder
_ = builder
.AddSource(TelemetryConstants.AskAiSourceName)
.AddSource(TelemetryConstants.StreamTransformerSourceName)
.AddSource(TelemetryConstants.OtlpProxySourceName)
.AddSource(TelemetryConstants.CacheSourceName)
.AddSource(TelemetryConstants.AskAiFeedbackSourceName)
.AddAspNetCoreInstrumentation(aspNetCoreOptions =>
Expand Down
5 changes: 2 additions & 3 deletions src/api/Elastic.Documentation.Api/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
})
.AddDocumentationOpenTelemetry(new OtelRegistration("docs-api")
{
Tracing = (_, t) => t.AddDocsApiTracing()
Tracing = (_, t) => t.AddDocsApiTracing(),
})
.HealthCheckBuilderExtensions();

Expand Down Expand Up @@ -70,8 +70,7 @@

var v1 = api.MapGroup("/v1");

var mapOtlpEndpoints = !string.IsNullOrWhiteSpace(builder.Configuration["OTEL_EXPORTER_OTLP_ENDPOINT"]);
v1.MapElasticDocsApiEndpoints(mapOtlpEndpoints);
v1.MapElasticDocsApiEndpoints();
Console.WriteLine("API endpoints mapped");

Console.WriteLine("Application startup completed successfully");
Expand Down
36 changes: 0 additions & 36 deletions src/api/Elastic.Documentation.Api/ServicesExtension.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,7 @@
using Elastic.Documentation.Api.AskAi;
using Elastic.Documentation.Api.Caching;
using Elastic.Documentation.Api.Gcp;
using Elastic.Documentation.Api.Telemetry;
using Elastic.Documentation.Search;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using NetEscapades.EnumGenerators;
Expand Down Expand Up @@ -73,7 +71,6 @@ private static void AddElasticDocsApiServices(this IServiceCollection services,
AddDistributedCache(services, appEnv);
AddAskAiServices(services, appEnv);
AddSearchServices(services, appEnv);
AddOtlpProxyService(services, appEnv);
}

// Note: IParameterProvider is no longer needed - all options now read from IConfiguration (env vars)
Expand Down Expand Up @@ -194,37 +191,4 @@ private static void AddSearchServices(IServiceCollection services, AppEnv appEnv
logger?.LogInformation("Full search service registered with hybrid RRF support");
}

private static void AddOtlpProxyService(IServiceCollection services, AppEnv appEnv)
{
var logger = GetLogger(services);
logger?.LogInformation("Configuring OTLP proxy service for environment {AppEnvironment}", appEnv);

_ = services.AddSingleton(sp =>
{
var config = sp.GetRequiredService<IConfiguration>();
return new OtlpProxyOptions(config);
});

// Register named HttpClient for OTLP proxy.
// 1s timeout: the collector is a localhost sidecar and should answer in single-digit ms.
// RemoveAllResilienceHandlers opts this client out of the global standard resilience handler
// (retries + 10s/30s timeouts) so a dead collector fails fast instead of blocking ~9s.
// PooledConnectionLifetime=30s proactively recycles connections before the sidecar closes them,
// keeping the stale-connection drop rate negligible.
#pragma warning disable EXTEXP0001 // RemoveAllResilienceHandlers is experimental
_ = services.AddHttpClient(AdotOtlpService.HttpClientName)
.ConfigureHttpClient(client =>
{
client.Timeout = TimeSpan.FromSeconds(1);
})
.ConfigurePrimaryHttpMessageHandler(() => new SocketsHttpHandler
{
PooledConnectionLifetime = TimeSpan.FromSeconds(30),
})
.RemoveAllResilienceHandlers();
#pragma warning restore EXTEXP0001

_ = services.AddScoped<IOtlpService, AdotOtlpService>();
logger?.LogInformation("OTLP proxy configured to forward to ADOT Lambda Layer collector");
}
}
108 changes: 0 additions & 108 deletions src/api/Elastic.Documentation.Api/Telemetry/AdotOtlpService.cs

This file was deleted.

25 changes: 0 additions & 25 deletions src/api/Elastic.Documentation.Api/Telemetry/IOtlpService.cs

This file was deleted.

This file was deleted.

51 changes: 0 additions & 51 deletions src/api/Elastic.Documentation.Api/Telemetry/OtlpProxyOptions.cs

This file was deleted.

Loading
Loading