Архитектура
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user