aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2026-03-28 17:09:42 +0100
committerDan Engelbrecht <[email protected]>2026-03-28 17:09:42 +0100
commitf6cb7e24e188abf3aebb6fc58299ed555a218f7a (patch)
tree67597ab0143a02aff2cce16075d77e8ebabb1bd6
parentfix tests (diff)
downloadzen-de/hub-process-info-refactor.tar.xz
zen-de/hub-process-info-refactor.zip
cleanup and options validationde/hub-process-info-refactor
-rw-r--r--src/zenserver/frontend/html/pages/hub.js6
-rw-r--r--src/zenserver/hub/httphubservice.cpp18
-rw-r--r--src/zenserver/hub/hub.cpp4
-rw-r--r--src/zenserver/hub/zenhubserver.cpp16
4 files changed, 35 insertions, 9 deletions
diff --git a/src/zenserver/frontend/html/pages/hub.js b/src/zenserver/frontend/html/pages/hub.js
index b3bfe7eba..c6f96d496 100644
--- a/src/zenserver/frontend/html/pages/hub.js
+++ b/src/zenserver/frontend/html/pages/hub.js
@@ -219,9 +219,9 @@ export class Page extends ZenPage
const limits = data.resource_limits || {};
if (machine.disk_total_bytes > 0 || machine.memory_total_mib > 0)
{
- const disk_used = (machine.disk_total_bytes || 0) - (machine.disk_free_bytes || 0);
- const mem_used = ((machine.memory_total_mib || 0) - (machine.memory_avail_mib || 0)) * 1024 * 1024;
- const vmem_used = ((machine.virtual_memory_total_mib || 0) - (machine.virtual_memory_avail_mib || 0)) * 1024 * 1024;
+ const disk_used = Math.max(0, (machine.disk_total_bytes || 0) - (machine.disk_free_bytes || 0));
+ const mem_used = Math.max(0, (machine.memory_total_mib || 0) - (machine.memory_avail_mib || 0)) * 1024 * 1024;
+ const vmem_used = Math.max(0, (machine.virtual_memory_total_mib || 0) - (machine.virtual_memory_avail_mib || 0)) * 1024 * 1024;
const disk_limit = limits.disk_bytes || 0;
const mem_limit = limits.memory_bytes || 0;
const disk_over = disk_limit > 0 && disk_used > disk_limit;
diff --git a/src/zenserver/hub/httphubservice.cpp b/src/zenserver/hub/httphubservice.cpp
index 485da0e6c..5b0e14042 100644
--- a/src/zenserver/hub/httphubservice.cpp
+++ b/src/zenserver/hub/httphubservice.cpp
@@ -84,14 +84,22 @@ HttpHubService::HttpHubService(Hub& Hub, HttpStatsService& StatsService, HttpSta
{
const std::time_t T = std::chrono::system_clock::to_time_t(Info.StateChangeTime);
std::tm Tm{};
+ bool TmOk;
#if ZEN_PLATFORM_WINDOWS
- gmtime_s(&Tm, &T);
+ TmOk = gmtime_s(&Tm, &T) == 0;
#else
- gmtime_r(&T, &Tm);
+ TmOk = gmtime_r(&T, &Tm) != nullptr;
#endif
- char Buf[32];
- std::strftime(Buf, sizeof(Buf), "%Y-%m-%dT%H:%M:%SZ", &Tm);
- Obj << "state_change_time" << std::string_view(Buf);
+ if (TmOk)
+ {
+ char Buf[32];
+ std::strftime(Buf, sizeof(Buf), "%Y-%m-%dT%H:%M:%SZ", &Tm);
+ Obj << "state_change_time" << std::string_view(Buf);
+ }
+ else
+ {
+ ZEN_WARN("gmtime failed for state_change_time value {}", T);
+ }
}
Obj.BeginObject("process_metrics");
{
diff --git a/src/zenserver/hub/hub.cpp b/src/zenserver/hub/hub.cpp
index a9c54dc6f..507f66f6c 100644
--- a/src/zenserver/hub/hub.cpp
+++ b/src/zenserver/hub/hub.cpp
@@ -1393,6 +1393,10 @@ Hub::UpdateMachineMetrics()
{
m_MachineMetrics.Store(Disk);
}
+ else
+ {
+ ZEN_WARN("Failed to query disk space for '{}'; disk-based provisioning limits will not be enforced", ChildDir);
+ }
}
m_MachineMetrics.Store(GetSystemMetrics());
diff --git a/src/zenserver/hub/zenhubserver.cpp b/src/zenserver/hub/zenhubserver.cpp
index 36fe4e44f..74d0a01b0 100644
--- a/src/zenserver/hub/zenhubserver.cpp
+++ b/src/zenserver/hub/zenhubserver.cpp
@@ -7,6 +7,7 @@
#include "hub.h"
#include <zencore/config.h>
+#include <zencore/except.h>
#include <zencore/filesystem.h>
#include <zencore/fmtutils.h>
#include <zencore/memory/llm.h>
@@ -265,6 +266,19 @@ ZenHubServerConfigurator::OnConfigFileParsed(LuaConfig::Options& LuaOptions)
void
ZenHubServerConfigurator::ValidateOptions()
{
+ if (m_ServerOptions.HubProvisionDiskLimitPercent != ~uint32_t{0} && m_ServerOptions.HubProvisionDiskLimitPercent > 100)
+ {
+ throw OptionParseException(
+ fmt::format("'--{}' ({}) must be in range 0..100", kHubProvisionDiskLimitPercent, m_ServerOptions.HubProvisionDiskLimitPercent),
+ {});
+ }
+ if (m_ServerOptions.HubProvisionMemoryLimitPercent != ~uint32_t{0} && m_ServerOptions.HubProvisionMemoryLimitPercent > 100)
+ {
+ throw OptionParseException(fmt::format("'--{}' ({}) must be in range 0..100",
+ kHubProvisionMemoryLimitPercent,
+ m_ServerOptions.HubProvisionMemoryLimitPercent),
+ {});
+ }
}
///////////////////////////////////////////////////////////////////////////
@@ -430,7 +444,7 @@ ZenHubServer::ResolveResourceLimit(uint64_t DirectBytes, uint32_t Percent, uint6
if (BytesLimit == 0 && PercentBytes == 0)
{
- ZEN_INFO("No {} limit enforced", ResourceName);
+ ZEN_INFO("No {} limit enforced (explicitly disabled via configuration)", ResourceName);
return 0;
}
if (BytesLimit == 0)