aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio_22/Tango.Portal.Chat.Web/Program.cs
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();