diff --git a/src/Aspire.Hosting.Qdrant/QdrantBuilderExtensions.cs b/src/Aspire.Hosting.Qdrant/QdrantBuilderExtensions.cs index 1441ada4c2a..6490136c23e 100644 --- a/src/Aspire.Hosting.Qdrant/QdrantBuilderExtensions.cs +++ b/src/Aspire.Hosting.Qdrant/QdrantBuilderExtensions.cs @@ -86,7 +86,15 @@ public static IResourceBuilder AddQdrant(this IDistributed context.EnvironmentVariables[EnableStaticContentEnvVarName] = "0"; } }) - .WithHealthCheck(healthCheckKey); + .WithHealthCheck(healthCheckKey) + .WithUrlForEndpoint(QdrantServerResource.PrimaryEndpointName, c => + { + c.DisplayText = "Qdrant (GRPC)"; + // https://github.com/dotnet/aspire/issues/8809 + c.DisplayLocation = UrlDisplayLocation.DetailsOnly; + }) + .WithUrlForEndpoint(QdrantServerResource.HttpEndpointName, c => c.DisplayText = "Qdrant (HTTP)") + .WithUrlForEndpoint(QdrantServerResource.HttpEndpointName, e => new ResourceUrlAnnotation() { Url = "/dashboard", DisplayText = "Qdrant Dashboard" }); } /// @@ -179,7 +187,7 @@ private static QdrantClient CreateQdrantClient(string? connectionString) { throw new InvalidOperationException("Endpoint is unavailable"); } - + var client = new QdrantClient(endpoint, key); return client; } diff --git a/tests/Aspire.Hosting.Qdrant.Tests/QdrantFunctionalTests.cs b/tests/Aspire.Hosting.Qdrant.Tests/QdrantFunctionalTests.cs index 557fc56f6c8..afc88984056 100644 --- a/tests/Aspire.Hosting.Qdrant.Tests/QdrantFunctionalTests.cs +++ b/tests/Aspire.Hosting.Qdrant.Tests/QdrantFunctionalTests.cs @@ -219,6 +219,33 @@ await pipeline.ExecuteAsync(async token => } } + [Fact] + [RequiresDocker] + public async Task AddQdrantWithDefaultsAddsUrlAnnotations() + { + using var builder = TestDistributedApplicationBuilder.Create(); + + var qdrant = builder.AddQdrant("qdrant"); + + var tcs = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); + builder.Eventing.Subscribe((e, ct) => + { + tcs.SetResult(); + return Task.CompletedTask; + }); + + var app = await builder.BuildAsync(); + await app.StartAsync(); + await tcs.Task; + + var urls = qdrant.Resource.Annotations.OfType(); + Assert.Single(urls, u => u.Endpoint?.EndpointName == "grpc" && u.DisplayText == "Qdrant (GRPC)" && u.DisplayLocation == UrlDisplayLocation.DetailsOnly); + Assert.Single(urls, u => u.Endpoint?.EndpointName == "http" && u.DisplayText == "Qdrant (HTTP)"); + Assert.Single(urls, u => u.DisplayText == "Qdrant Dashboard" && u.Url.EndsWith("/dashboard")); + + await app.StopAsync(); + } + [Fact] [RequiresDocker] public async Task VerifyWaitForOnQdrantBlocksDependentResources()