📄
src/Cli/Program.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
using System; using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using Slopper.Cli; using Slopper.Domain; using Slopper.Infrastructure.Ai; using Slopper.Infrastructure.Database; using Slopper.Infrastructure.Ffmpeg; using Winton.Extensions.Configuration.Consul; var builder = Host.CreateApplicationBuilder(); builder.Configuration.AddConsul( "slopper", options => { options.ConsulConfigurationOptions = options => options.Address = new(builder.Configuration["Consul:Address"]!); options.ConsulHttpClientOptions = client => client.DefaultRequestHeaders.Authorization = new("Basic", builder.Configuration["Consul:BasicAuth"]); options.ReloadOnChange = true; options.PollWaitTime = TimeSpan.FromSeconds(5); } ); builder.ConfigureOpenTelemetry(); builder.Services.AddClipSelector().AddClipGenerator(); builder.Services.AddJellyfinDatabase().AddSlopperDatabase().AddFfmpegServices().AddAi(); builder.Services.AddOptions<TestOption>().BindConfiguration(""); using var app = builder.Build(); await app.StartAsync(); var options = app.Services.GetRequiredService<IOptionsMonitor<TestOption>>(); var logger = app.Services.GetRequiredService<ILogger<Program>>(); var lifetime = app.Services.GetRequiredService<IHostApplicationLifetime>(); do { logger.LogInformation("Consul: {Description}", options.CurrentValue.ConsulOptionForSlopper); await Task.Delay(TimeSpan.FromSeconds(5)); } while (!lifetime.ApplicationStopping.IsCancellationRequested); class TestOption { public required string ConsulOptionForSlopper { get; set; } }