Scale unique answer tracking

This commit is contained in:
hz
2026-07-13 02:11:54 -05:00
parent 700da4e415
commit f2c59388eb
23 changed files with 1064 additions and 131 deletions
+24
View File
@@ -3,16 +3,21 @@ using Microsoft.AspNetCore.Diagnostics;
using Microsoft.IdentityModel.Tokens;
using Microsoft.OpenApi.Models;
using QuestionsApi.Services;
using MongoDB.Bson;
using System.Text;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
builder.Services.AddSingleton<MongoDatabaseProvider>();
builder.Services.AddSingleton<QuestionStore>();
builder.Services.AddSingleton<QuestionAttemptStore>();
builder.Services.AddSingleton<AnswerStatisticsStore>();
builder.Services.AddSingleton<RatingStore>();
builder.Services.AddSingleton<QuestionMediaStore>();
builder.Services.AddSingleton<QuestionReportStore>();
builder.Services.AddSingleton<ServiceMetrics>();
builder.Services.AddHostedService<AnswerStatisticsMaintenanceService>();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(c =>
@@ -61,6 +66,19 @@ builder.Services.AddAuthorization();
var app = builder.Build();
app.Use(async (context, next) =>
{
var started = System.Diagnostics.Stopwatch.StartNew();
try
{
await next();
}
finally
{
context.RequestServices.GetRequiredService<ServiceMetrics>().HttpRequest(started.Elapsed);
}
});
app.UseExceptionHandler(errorApp =>
{
errorApp.Run(async context =>
@@ -96,6 +114,12 @@ app.UseExceptionHandler(errorApp =>
});
app.MapGet("/healthz", () => Results.Ok("ok"));
app.MapGet("/readyz", async (MongoDatabaseProvider mongo) =>
{
await mongo.Database.RunCommandAsync<BsonDocument>(new BsonDocument("ping", 1));
return Results.Ok("ready");
});
app.MapGet("/metrics", (ServiceMetrics metrics) => Results.Text(metrics.RenderPrometheus(), "text/plain; version=0.0.4"));
app.UseSwagger();
app.UseSwaggerUI(o =>
{