Files
allstarr/allstarr/Services/Validation/StartupValidationOrchestrator.cs
Josh Patra 2b09484c0b Release v1.0.0 - Production Ready
Major Features:
- Spotify playlist injection with missing tracks search
- Transparent proxy authentication system
- WebSocket session management for external tracks
- Manual track mapping and favorites system
- Lyrics support (Spotify + LRCLib) with prefetching
- Admin dashboard with analytics and configuration
- Performance optimizations with health checks and endpoint racing
- Comprehensive caching and memory management

Performance Improvements:
- Quick health checks (3s timeout) before trying endpoints
- Health check results cached for 30 seconds
- 5 minute timeout for large artist responses
- Background Odesli conversion after streaming starts
- Parallel lyrics prefetching
- Endpoint benchmarking and racing
- 16 SquidWTF endpoints with load balancing

Reliability:
- Automatic endpoint fallback and failover
- Token expiration handling
- Concurrent request optimization
- Memory leak fixes
- Proper session cleanup

User Experience:
- Web UI for configuration and playlist management
- Real-time progress tracking
- API analytics dashboard
- Manual track mapping interface
- Playlist statistics and health monitoring
2026-02-08 00:43:47 -05:00

60 lines
1.9 KiB
C#

using Microsoft.Extensions.Options;
using allstarr.Models.Settings;
namespace allstarr.Services.Validation;
/// <summary>
/// Orchestrates startup validation for all configured services.
/// This replaces the old StartupValidationService with a more extensible architecture.
/// </summary>
public class StartupValidationOrchestrator : IHostedService
{
private readonly IEnumerable<IStartupValidator> _validators;
private readonly IOptions<SubsonicSettings> _subsonicSettings;
public StartupValidationOrchestrator(
IEnumerable<IStartupValidator> validators,
IOptions<SubsonicSettings> subsonicSettings)
{
_validators = validators;
_subsonicSettings = subsonicSettings;
}
public async Task StartAsync(CancellationToken cancellationToken)
{
// Get version from assembly
var version = typeof(StartupValidationOrchestrator).Assembly
.GetName().Version?.ToString(3) ?? "unknown";
Console.WriteLine();
Console.WriteLine("========================================");
Console.WriteLine($" allstarr v{version} ");
Console.WriteLine("========================================");
Console.WriteLine();
// Run all validators
foreach (var validator in _validators)
{
try
{
await validator.ValidateAsync(cancellationToken);
}
catch (Exception ex)
{
Console.WriteLine($"Error validating {validator.ServiceName}: {ex.Message}");
}
}
Console.WriteLine();
Console.WriteLine("========================================");
Console.WriteLine(" Startup validation complete ");
Console.WriteLine("========================================");
Console.WriteLine();
}
public Task StopAsync(CancellationToken cancellationToken)
{
return Task.CompletedTask;
}
}