📄
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
using BfiMonitor; using HuaweiWifiSms.Grpc; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Options; using Quartz; var builder = Host.CreateApplicationBuilder(args); builder.ConfigureOpenTelemetry(); builder.Services.AddOptions<MonitorOptions>().BindConfiguration("Monitor"); builder.Services.AddGrpcClient<SmsSender.SmsSenderClient>( (sp, o) => { var opts = sp.GetRequiredService<IOptions<MonitorOptions>>().Value; o.Address = new Uri(opts.SmsSenderAddress); } ); builder.Services.AddSingleton<PlaywrightBrowserService>(); builder.Services.AddHostedService(sp => sp.GetRequiredService<PlaywrightBrowserService>()); builder.Services.AddSingleton<ScreeningRepository>(); builder.Services.AddSingleton(TimeProvider.System); var intervalSeconds = builder.Configuration.GetValue("Monitor:IntervalSeconds", 300); builder.Services.AddQuartz(q => { var checkerKey = JobKey.Create(nameof(BfiScreeningCheckerJob)); q.AddJob<BfiScreeningCheckerJob>(checkerKey); q.AddTrigger(t => t.ForJob(checkerKey) .StartNow() .WithSimpleSchedule(s => s.WithIntervalInSeconds(intervalSeconds).RepeatForever()) ); q.AddJob<SendSmsJob>(SendSmsJob.Key, j => j.StoreDurably()); }); builder.Services.AddQuartzHostedService(o => o.WaitForJobsToComplete = true); using var app = builder.Build(); app.Run();