diff --git a/src/Server/Controllers/ServerController.cs b/src/Server/Controllers/ServerController.cs index 6813148..e333aa3 100644 --- a/src/Server/Controllers/ServerController.cs +++ b/src/Server/Controllers/ServerController.cs @@ -1,12 +1,8 @@ namespace Server.Controllers; -using System.Reflection; -using System.Text.Json; -using AdaptiveExpressions; using ElmahCore; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Options; -using Server.Exceptions; using Server.Helper; using Server.Models; using Shared; @@ -73,6 +69,7 @@ public class ServerController : ControllerBase embeddingsCount += entry.Keys.Count; } var sqlHelper = DatabaseHelper.GetSQLHelper(_options.Value); + var databaseTotalSize = DatabaseHelper.GetTotalDatabaseSize(sqlHelper); Task entityCountTask = DatabaseHelper.CountEntities(sqlHelper); long queryCacheUtilization = 0; long queryCacheElementCount = 0; @@ -95,6 +92,10 @@ public class ServerController : ControllerBase } }; long entityCount = await entityCountTask; + GC.Collect(); + GC.WaitForPendingFinalizers(); + GC.Collect(); + long ramTotalSize = GC.GetTotalMemory(false); return new ServerGetStatsResult() { Success = true, @@ -106,7 +107,9 @@ public class ServerController : ControllerBase EmbeddingCacheUtilization = size, EmbeddingCacheMaxElementCount = _searchdomainManager.EmbeddingCacheMaxCount, EmbeddingCacheElementCount = elementCount, - EmbeddingsCount = embeddingsCount + EmbeddingsCount = embeddingsCount, + DatabaseTotalSize = databaseTotalSize, + RamTotalSize = ramTotalSize }; } catch (Exception ex) { diff --git a/src/Server/Helper/DatabaseHelper.cs b/src/Server/Helper/DatabaseHelper.cs index 5183fbe..66a031e 100644 --- a/src/Server/Helper/DatabaseHelper.cs +++ b/src/Server/Helper/DatabaseHelper.cs @@ -224,6 +224,21 @@ public class DatabaseHelper(ILogger logger) return result; } + public static long GetTotalDatabaseSize(SQLHelper helper) + { + Dictionary parameters = []; + DbDataReader searchdomainSumReader = helper.ExecuteSQLCommand("SELECT SUM(Data_length) FROM information_schema.tables", parameters); + try + { + bool success = searchdomainSumReader.Read(); + long result = success && !searchdomainSumReader.IsDBNull(0) ? searchdomainSumReader.GetInt64(0) : 0; + return result; + } finally + { + searchdomainSumReader.Close(); + } + } + public static async Task CountEntities(SQLHelper helper) { DbDataReader searchdomainSumReader = helper.ExecuteSQLCommand("SELECT COUNT(*) FROM entity;", []); diff --git a/src/Server/Views/Home/Index.cshtml b/src/Server/Views/Home/Index.cshtml index 56b5143..81ddf4f 100644 --- a/src/Server/Views/Home/Index.cshtml +++ b/src/Server/Views/Home/Index.cshtml @@ -24,6 +24,24 @@
+ +
+
+
+

@T["Server"]

+ +
+ @T["Total RAM usage"] + +
+
+ @T["Total Database size"] + +
+
+
+
+
@@ -175,6 +193,10 @@ showThrobber(querycacheLoadedMaxElementCount); let querycacheLoadedElementCountProgressBar = document.getElementById("querycacheLoadedElementCountProgressBar"); + let serverMemorySize = document.getElementById("serverMemorySize"); + showThrobber(serverMemorySize); + let serverDatabaseSize = document.getElementById("serverDatabaseSize"); + showThrobber(serverDatabaseSize); let healthchecksServer = document.getElementById("healthchecksServer"); let healthchecksAiProvider = document.getElementById("healthchecksAiProvider"); @@ -214,6 +236,10 @@ hideThrobber(querycacheLoadedMaxElementCount); querycacheLoadedMaxElementCount.textContent = queryCacheMaxElementCountLoadedSearchdomainsOnly.toLocaleString(); querycacheLoadedMaxElementCountProgressBar.style.width = `${queryCacheElementCount / queryCacheMaxElementCountLoadedSearchdomainsOnly * 100}%`; + serverMemorySize.textContent = NumberOfBytesAsHumanReadable(result.RamTotalSize); + hideThrobber(serverMemorySize); + serverDatabaseSize.textContent = NumberOfBytesAsHumanReadable(result.DatabaseTotalSize); + hideThrobber(serverDatabaseSize); }); getHealthCheckStatusAndApply(healthchecksServer, "/healthz/Database"); getHealthCheckStatusAndApply(healthchecksAiProvider, "/healthz/AIProvider"); diff --git a/src/Shared/Models/ServerModels.cs b/src/Shared/Models/ServerModels.cs index 59905fd..4b2009f 100644 --- a/src/Shared/Models/ServerModels.cs +++ b/src/Shared/Models/ServerModels.cs @@ -28,4 +28,8 @@ public class ServerGetStatsResult : SuccesMessageBaseModel public long? QueryCacheMaxElementCountLoadedSearchdomainsOnly { get; set; } [JsonPropertyName("QueryCacheUtilization")] public long? QueryCacheUtilization { get; set; } + [JsonPropertyName("DatabaseTotalSize")] + public long? DatabaseTotalSize { get; set; } + [JsonPropertyName("RamTotalSize")] + public long? RamTotalSize { get; set; } } \ No newline at end of file