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

Aldaviva / FreshPager / 18236131950

03 Oct 2025 11:28PM UTC coverage: 76.389% (-4.3%) from 80.711%
18236131950

push

github

Aldaviva
Publish correct toasts project

34 of 98 branches covered (34.69%)

165 of 216 relevant lines covered (76.39%)

11.52 hits per line

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

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

15
BomSquad.DefuseUtf8Bom();
10✔
16

17
WebApplicationBuilder builder = WebApplication.CreateBuilder(args);
10✔
18

19
builder.Host
10✔
20
    .UseWindowsService()
10✔
21
    .UseSystemd();
10✔
22

23
builder.Services
10✔
24
    .Configure<Configuration>(builder.Configuration)
10✔
25
    .AddSingleton<PagerDutyFactory>(provider => key => new PagerDuty(key) { HttpClient = provider.GetRequiredService<HttpClient>() })
×
26
    .AddSingleton<KasaParameters>(provider =>
10✔
27
        provider.GetRequiredService<IOptions<Configuration>>().Value is
20!
28
            { 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✔
29
            ? new Uri(url, UriKind.Absolute) is var alarmLightUrl && alarmLightUrl.Host.HasText()
20✔
30
                ? new KasaParameters(alarmLightUrl.Host, alarmLightUrl.Segments.ElementAtOrDefault(1) is { } socket && int.TryParse(socket.TrimEnd('/'), out int socketId) ? socketId : null)
20✔
31
                : 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✔
32
            : null!)
20✔
33
    .AddSingleton<IKasaOutlet>(provider =>
10✔
34
        provider.GetService<KasaParameters>() is { } kasaParameters && new Options { LoggerFactory = provider.GetService<ILoggerFactory>() } is var kasaOptions ?
10!
35
            kasaParameters.socketId is not null ? new MultiSocketKasaOutlet(kasaParameters.hostname, kasaOptions) : new KasaOutlet(kasaParameters.hostname, kasaOptions) : null!)
10✔
36
    .AddSingleton<WebhookResource>(provider => provider.GetRequiredService<IOptions<Configuration>>().Value is { pagerDutyWebhookSecrets: not ["<My PagerDuty webhook secret>"] and { } secrets }
10!
37
        ? new WebhookResource(secrets) : null!)
10✔
38
    .AddHttpClient()
10✔
39
    .AddSingleton<WebResource, FreshpingResource>()
10✔
40
    .AddSingleton<WebResource, PagerDutyResource>()
10✔
41
    .AddSingleton<WebResource, ToastResource>()
10✔
42
    .AddSingleton<ToastDispatcher, ToastDispatcherImpl>()
10✔
43
    .AddSignalR(options => options.DisableImplicitFromServicesParameters = true);
20✔
44

45
builder.Logging.AmplifyMessageLevels(options => options.Amplify("Microsoft.AspNetCore.SignalR.Internal.DefaultHubDispatcher", LogLevel.Warning, 2, 3, 5, 11, 13, 14, 15, 19, 21, 22, 23, 24));
20✔
46

47
await using WebApplication webapp = builder.Build();
10✔
48

49
foreach (WebResource resource in webapp.Services.GetServices<WebResource>()) {
80✔
50
    resource.map(webapp);
30✔
51
}
52

53
using RuntimeUpgradeNotifier runtimeUpgrades = new() {
10✔
54
    LoggerFactory   = webapp.Services.GetRequiredService<ILoggerFactory>(),
10✔
55
    RestartStrategy = RestartStrategy.AutoRestartService
10✔
56
};
10✔
57

58
await webapp.RunAsync();
10✔
59

60
namespace FreshPager {
61

62
    internal delegate IPagerDuty PagerDutyFactory(string integrationKey);
63

64
}
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