Архитектура

This commit is contained in:
Халимов Рустам
2026-03-21 02:19:38 +03:00
parent f3e0941647
commit 5da1a2f45d
44 changed files with 826 additions and 380 deletions
@@ -17,6 +17,7 @@
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Minio" Version="7.0.0" />
<PackageReference Include="MongoDB.Driver" Version="3.2.0" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="10.0.1" />
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="8.16.0" />
<PackageReference Include="Microsoft.IdentityModel.Tokens" Version="8.16.0" />
@@ -44,6 +44,8 @@ public class StatisticsWorker : BackgroundService
long dbSize = 0;
long filesSize = 0;
long mongoSize = 0;
long messagesCount = 0;
try
{
// 1. Database size itself
@@ -51,14 +53,22 @@ public class StatisticsWorker : BackgroundService
var dbSizeResult = await cmd.ExecuteScalarAsync();
dbSize = dbSizeResult != DBNull.Value ? Convert.ToInt64(dbSizeResult) : 0;
// 2. Sum of all uploaded files (which live in MinIO, but we track size in MessageMedia)
cmd.CommandText = "SELECT SUM(\"Size\") FROM chats.\"MessageMedia\";";
var mediaSizeResult = await cmd.ExecuteScalarAsync();
filesSize = mediaSizeResult != DBNull.Value ? Convert.ToInt64(mediaSizeResult) : 0;
var mongoDb = scope.ServiceProvider.GetRequiredService<MongoDB.Driver.IMongoDatabase>();
var messagesCol = mongoDb.GetCollection<MongoDB.Bson.BsonDocument>("messages");
messagesCount = await messagesCol.CountDocumentsAsync(new MongoDB.Bson.BsonDocument(), cancellationToken: stoppingToken);
var statsCmd = new MongoDB.Bson.BsonDocument("dbStats", 1);
var mongoStats = await mongoDb.RunCommandAsync<MongoDB.Bson.BsonDocument>(statsCmd, cancellationToken: stoppingToken);
if (mongoStats.Contains("dataSize"))
mongoSize = mongoStats["dataSize"].ToInt64();
var fileStorage = scope.ServiceProvider.GetRequiredService<Knot.Shared.Kernel.Storage.IFileStorageService>();
var allMinioFiles = await fileStorage.ListFilesAsync();
foreach (var f in allMinioFiles) { filesSize += f.Size; }
}
catch { }
stat.TotalFilesSize = dbSize + filesSize; // Database size + MinIO files size
stat.TotalMessages = (int)messagesCount;
stat.TotalFilesSize = dbSize + mongoSize + filesSize;
await db.SaveChangesAsync(stoppingToken);
}