blob: dd063b2f6c813bacd99f1565f7190b3b9c12bbcd (
plain)
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
55
56
57
58
59
60
|
using Azure.Identity;
using Tango.Portal.Chat.Web.Alerts;
using Tango.Portal.Chat.Web.Services;
var builder = WebApplication.CreateBuilder(args);
// Config binding (appsettings.json + env vars)
builder.Services.AddControllersWithViews();
// OpenAI/Azure OpenAI config
builder.Services.Configure<LlmOptions>(builder.Configuration.GetSection("OpenAI"));
// ADX config
builder.Services.Configure<AdxOptions>(builder.Configuration.GetSection("ADX"));
builder.Services.AddSingleton<KustoQueryService>();
builder.Services.AddSingleton<ChatMessageLogger>();
builder.Services.AddSingleton<SchemaRegistry>();
builder.Services.AddSingleton<KqlGuard>();
// Azure Storage config
builder.Services.Configure<AzureStorageOptions>(builder.Configuration.GetSection("AzureStorage"));
builder.Services.AddSingleton<AIInstructionService>();
builder.Services.AddSingleton<AlertsQueryService>();
// N8N config
builder.Services.Configure<N8NOptions>(builder.Configuration.GetSection("N8N"));
builder.Services.AddHttpClient<N8NService>();
// Background service for alerts
builder.Services.AddHostedService<AlertsWorker>();
// Session configuration with 1 hour timeout
builder.Services.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromHours(1);
options.Cookie.HttpOnly = true;
options.Cookie.IsEssential = true;
});
// Simple HTTP client for LLM
builder.Services.AddHttpClient<LlmClient>();
var app = builder.Build();
app.UseStaticFiles();
app.UseRouting();
app.UseSession();
var AazureAlertsHandler = new AzureAlertsHandler(builder.Configuration["ALERTS_SHARED_SECRET"]);
app.MapPost("/api/monitor-alert", (HttpRequest req) =>
{
return AazureAlertsHandler.HandleAlert(req);
});
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.Run();
|