// SPDX-License-Identifier: BUSL-1.1 // Copyright (c) 2026 stella-ops.org using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using StellaOps.Concelier.SbomIntegration.Parsing; using StellaOps.Platform.Analytics.Options; using StellaOps.Platform.Analytics.Services; namespace StellaOps.Platform.Analytics; public static class ServiceCollectionExtensions { /// /// Registers analytics ingestion services (SBOM, vulnerability correlation, attestation). /// /// The service collection. /// The configuration root. /// The service collection for chaining. public static IServiceCollection AddAnalyticsIngestion( this IServiceCollection services, IConfiguration configuration, string? defaultConnectionString = null) { // Bind options services.AddOptions() .Bind(configuration.GetSection(AnalyticsIngestionOptions.SectionName)) .PostConfigure(options => { if (string.IsNullOrWhiteSpace(options.PostgresConnectionString) && !string.IsNullOrWhiteSpace(defaultConnectionString)) { options.PostgresConnectionString = defaultConnectionString; } options.Normalize(); }) .ValidateOnStart(); // Data source and CAS reader services.AddSingleton(); services.AddSingleton(); // SBOM parser (from Concelier.SbomIntegration) services.AddSingleton(); // Vulnerability correlation service (also a BackgroundService) services.AddSingleton(); services.AddHostedService(sp => (VulnerabilityCorrelationService)sp.GetRequiredService()); // SBOM ingestion service services.AddHostedService(); // Attestation ingestion service services.AddHostedService(); return services; } }