Repository navigation
Expand file tree
/
Copy pathProgram.cs
More file actions
53 lines (43 loc) · 1.82 KB
/
Copy pathProgram.cs
File metadata and controls
53 lines (43 loc) · 1.82 KB
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
using ClaudeCodeMonitor;
using ClaudeCodeMonitor.Configuration;
using ClaudeCodeMonitor.Display;
using ClaudeCodeMonitor.Services;
var builder = Host.CreateApplicationBuilder(args);
// Machine-specific settings (the clock address) live in a git-ignored file.
// Environment variables are re-added so they still win over it.
builder.Configuration
.AddJsonFile(FirstRunSetup.LocalSettingsFile, optional: true, reloadOnChange: false)
.AddEnvironmentVariables();
builder.Services.Configure<MonitorOptions>(
builder.Configuration.GetSection(MonitorOptions.SectionName));
var monitorOptions = builder.Configuration
.GetSection(MonitorOptions.SectionName)
.Get<MonitorOptions>() ?? new MonitorOptions();
if (string.IsNullOrWhiteSpace(monitorOptions.AwtrixHost) &&
await FirstRunSetup.PromptForHostAsync(builder.Environment.ContentRootPath) is { } enteredHost)
{
builder.Configuration[$"{MonitorOptions.SectionName}:{nameof(MonitorOptions.AwtrixHost)}"] = enteredHost;
monitorOptions.AwtrixHost = enteredHost;
}
if (string.IsNullOrWhiteSpace(monitorOptions.AwtrixHost))
{
Console.Error.WriteLine(
"Configuration error: Monitor:AwtrixHost is required. Set it in appsettings.Local.json to your clock's IP or hostname.");
return 1;
}
builder.Services.AddHttpClient<UsageClient>(client =>
{
client.BaseAddress = new Uri(monitorOptions.UsageBaseUrl.TrimEnd('/') + "/");
client.Timeout = TimeSpan.FromSeconds(15);
});
builder.Services.AddHttpClient<AwtrixClient>(client =>
{
client.BaseAddress = new Uri($"http://{monitorOptions.AwtrixHost}/");
client.Timeout = TimeSpan.FromSeconds(10);
});
builder.Services.AddSingleton<CredentialsReader>();
builder.Services.AddSingleton<ScreenComposer>();
builder.Services.AddHostedService<Worker>();
var host = builder.Build();
await host.RunAsync();
return 0;