• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

Aldaviva / FreshPager / 15600885521

12 Jun 2025 03:27AM UTC coverage: 80.711% (+26.8%) from 53.886%
15600885521

push

github

Aldaviva
Target runtime comes from matrix, not env anymore

34 of 96 branches covered (35.42%)

159 of 197 relevant lines covered (80.71%)

12.07 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

96.77
/FreshPager/Program.cs
1
using Bom.Squad;
2
using FreshPager;
3
using FreshPager.Data;
4
using Kasa;
5
using Microsoft.Extensions.Options;
6
using Pager.Duty;
7
using Pager.Duty.Webhooks;
8
using RuntimeUpgrade.Notifier;
9
using RuntimeUpgrade.Notifier.Data;
10
using Unfucked;
11
using Options = Kasa.Options;
12

13
BomSquad.DefuseUtf8Bom();
10✔
14

15
WebApplicationBuilder builder = WebApplication.CreateBuilder(args);
10✔
16

17
builder.Host
10✔
18
    .UseWindowsService()
10✔
19
    .UseSystemd();
10✔
20

21
builder.Services
10✔
22
    .Configure<Configuration>(builder.Configuration)
10✔
23
    .AddSingleton<PagerDutyFactory>(provider => key => new PagerDuty(key) { HttpClient = provider.GetRequiredService<HttpClient>() })
×
24
    .AddSingleton<KasaParameters>(provider =>
10✔
25
        provider.GetRequiredService<IOptions<Configuration>>().Value is
20!
26
            { alarmLightUrl: not "<TCP URL of Kasa outlet with optional 0-indexed socket number as path, like 'tcp://192.168.1.100/0'>" and { } url }
20✔
27
            ? new Uri(url, UriKind.Absolute) is var alarmLightUrl && alarmLightUrl.Host.HasText()
20✔
28
                ? new KasaParameters(alarmLightUrl.Host, alarmLightUrl.Segments.ElementAtOrDefault(1) is { } socket && int.TryParse(socket.TrimEnd('/'), out int socketId) ? socketId : null)
20✔
29
                : throw new UriFormatException($"{nameof(Configuration.alarmLightUrl)} has an empty hostname, ensure there is a // between the scheme and hostname (like 'tcp://192.168.1.100')")
20✔
30
            : null!)
20✔
31
    .AddSingleton<IKasaOutlet>(provider =>
10✔
32
        provider.GetService<KasaParameters>() is { } kasaParameters && new Options { LoggerFactory = provider.GetService<ILoggerFactory>() } is var kasaOptions ?
10!
33
            kasaParameters.socketId is not null ? new MultiSocketKasaOutlet(kasaParameters.hostname, kasaOptions) : new KasaOutlet(kasaParameters.hostname, kasaOptions) : null!)
10✔
34
    .AddSingleton<WebhookResource>(provider => provider.GetRequiredService<IOptions<Configuration>>().Value is { pagerDutyWebhookSecrets: not ["<My PagerDuty webhook secret>"] and { } secrets }
10!
35
        ? new WebhookResource(secrets) : null!)
10✔
36
    .AddSingleton<WebResource, FreshpingResource>()
10✔
37
    .AddSingleton<WebResource, PagerDutyResource>()
10✔
38
    .AddHttpClient();
10✔
39

40
await using WebApplication webapp = builder.Build();
10✔
41

42
foreach (WebResource resource in webapp.Services.GetServices<WebResource>()) {
60✔
43
    resource.map(webapp);
20✔
44
}
45

46
using RuntimeUpgradeNotifier runtimeUpgrades = new() {
10✔
47
    LoggerFactory   = webapp.Services.GetRequiredService<ILoggerFactory>(),
10✔
48
    RestartStrategy = RestartStrategy.AutoRestartService
10✔
49
};
10✔
50

51
await webapp.RunAsync();
10✔
52

53
internal delegate IPagerDuty PagerDutyFactory(string integrationKey);
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc