mirror of
https://github.com/SoPat712/allstarr.git
synced 2026-02-09 23:55:10 -05:00
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
60 lines
1.9 KiB
C#
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;
|
|
}
|
|
}
|