// 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;
}
}