Files
git.stella-ops.org/src/Platform/StellaOps.Platform.Analytics/ServiceCollectionExtensions.cs
2026-01-22 19:08:46 +02:00

60 lines
2.3 KiB
C#

// 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
{
/// <summary>
/// Registers analytics ingestion services (SBOM, vulnerability correlation, attestation).
/// </summary>
/// <param name="services">The service collection.</param>
/// <param name="configuration">The configuration root.</param>
/// <returns>The service collection for chaining.</returns>
public static IServiceCollection AddAnalyticsIngestion(
this IServiceCollection services,
IConfiguration configuration,
string? defaultConnectionString = null)
{
// Bind options
services.AddOptions<AnalyticsIngestionOptions>()
.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<AnalyticsIngestionDataSource>();
services.AddSingleton<ICasContentReader, FileCasContentReader>();
// SBOM parser (from Concelier.SbomIntegration)
services.AddSingleton<IParsedSbomParser, ParsedSbomParser>();
// Vulnerability correlation service (also a BackgroundService)
services.AddSingleton<IVulnerabilityCorrelationService, VulnerabilityCorrelationService>();
services.AddHostedService(sp => (VulnerabilityCorrelationService)sp.GetRequiredService<IVulnerabilityCorrelationService>());
// SBOM ingestion service
services.AddHostedService<AnalyticsIngestionService>();
// Attestation ingestion service
services.AddHostedService<AttestationIngestionService>();
return services;
}
}