60 lines
2.3 KiB
C#
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;
|
|
}
|
|
}
|