From 734ba0233b959e18d5de309c8d39ebe4f5b831be Mon Sep 17 00:00:00 2001 From: Ken Rowland Date: Fri, 28 Feb 2025 16:11:36 -0500 Subject: [PATCH] HPCC-33338 Convert statically allocated metrics to dynamic allocation Removed statically allocated metrics in favor of using MODULE_INIT Signed-Off-By: Kenneth Rowland kenneth.rowland@lexisnexisrisk.com --- dali/base/danqs.cpp | 12 +++++++++++- dali/base/dasds.cpp | 25 +++++++++++++++++++++---- esp/platform/espprotocol.cpp | 20 ++++++++++++++------ esp/platform/txsummary.cpp | 12 +++++++++++- 4 files changed, 57 insertions(+), 12 deletions(-) diff --git a/dali/base/danqs.cpp b/dali/base/danqs.cpp index cad5dc25ee4..a6df2d967d1 100644 --- a/dali/base/danqs.cpp +++ b/dali/base/danqs.cpp @@ -33,7 +33,17 @@ #pragma warning (disable : 4355) #endif -static auto pNqRequestsCount = hpccMetrics::registerCounterMetric("dali.nq.requests.received", "The total number of Dali NQ requests received", SMeasureCount); +static std::shared_ptr pNqRequestsCount; +MODULE_INIT(INIT_PRIORITY_STANDARD) +{ + pNqRequestsCount = hpccMetrics::registerCounterMetric("dali.nq.requests.received", "The total number of Dali NQ requests received", SMeasureCount); + return true; +} + +MODULE_EXIT() +{ + pNqRequestsCount = nullptr; +} enum MQueueRequestKind { MQR_ADD_QUEUE, diff --git a/dali/base/dasds.cpp b/dali/base/dasds.cpp index 3a0c1a602d5..588e1c27783 100644 --- a/dali/base/dasds.cpp +++ b/dali/base/dasds.cpp @@ -84,10 +84,27 @@ static unsigned readWriteTimeout = 60000; #define DEFAULT_LCIDLE_RATE 1 // 1 write transactions per idle period. <= this rate is deemed idle (suitable for save) #define STORENOTSAVE_WARNING_PERIOD 72 // hours -static auto pSdsRequestsReceived = hpccMetrics::registerCounterMetric("dali.sds.requests.received", "The total number of Dali SDS requests received", SMeasureCount); -static auto pSdsRequestsStarted = hpccMetrics::registerCounterMetric("dali.sds.requests.started", "The total number of Dali SDS requests started", SMeasureCount); -static auto pSdsRequestsCompleted = hpccMetrics::registerCounterMetric("dali.sds.requests.completed", "The total number of Dali SDS requests completed", SMeasureCount); -static auto pSdsRequestsPending = hpccMetrics::registerGaugeFromCountersMetric("dali.sds.requests.pending", "Current number of pending SDS requests", SMeasureCount, pSdsRequestsReceived, pSdsRequestsStarted); +static std::shared_ptr pSdsRequestsReceived; +static std::shared_ptr pSdsRequestsStarted; +static std::shared_ptr pSdsRequestsCompleted; +static std::shared_ptr pSdsRequestsPending; + +MODULE_INIT(INIT_PRIORITY_STANDARD) +{ + pSdsRequestsReceived = hpccMetrics::registerCounterMetric("dali.sds.requests.received", "The total number of Dali SDS requests received", SMeasureCount); + pSdsRequestsStarted = hpccMetrics::registerCounterMetric("dali.sds.requests.started", "The total number of Dali SDS requests started", SMeasureCount); + pSdsRequestsCompleted = hpccMetrics::registerCounterMetric("dali.sds.requests.completed", "The total number of Dali SDS requests completed", SMeasureCount); + pSdsRequestsPending = hpccMetrics::registerGaugeFromCountersMetric("dali.sds.requests.pending", "Current number of pending SDS requests", SMeasureCount, pSdsRequestsReceived, pSdsRequestsStarted); + return true; +} + +MODULE_EXIT() +{ + pSdsRequestsReceived = nullptr; + pSdsRequestsStarted = nullptr; + pSdsRequestsCompleted = nullptr; + pSdsRequestsPending = nullptr; +} // #define TEST_NOTIFY_HANDLER diff --git a/esp/platform/espprotocol.cpp b/esp/platform/espprotocol.cpp index 9e4509407b2..89b803a1fa6 100644 --- a/esp/platform/espprotocol.cpp +++ b/esp/platform/espprotocol.cpp @@ -27,26 +27,34 @@ #endif #include "jmetrics.hpp" -static RelaxedAtomic gActiveRequests; +static std::shared_ptr pActiveRequests; -static auto pActiveRequests = hpccMetrics::registerCustomMetric("esp.requests.active", "Number of active requests", - hpccMetrics::METRICS_GAUGE, gActiveRequests, SMeasureCount); +MODULE_INIT(INIT_PRIORITY_STANDARD) +{ + pActiveRequests = hpccMetrics::registerGaugeMetric("esp.requests.active", "Number of active requests", SMeasureCount); + return true; +} + +MODULE_EXIT() +{ + pActiveRequests = nullptr; +} typedef IXslProcessor * (*getXslProcessor_func)(); unsigned ActiveRequests::getCount() { - return gActiveRequests; + return pActiveRequests->queryValue(); } ActiveRequests::ActiveRequests() { - gActiveRequests++; + pActiveRequests->adjust(1); } ActiveRequests::~ActiveRequests() { - gActiveRequests--; + pActiveRequests->adjust(-1); } CEspApplicationPort::CEspApplicationPort(bool viewcfg, CEspProtocol* prot) : viewConfig(viewcfg), rootAuth(false), navResize(false), navScroll(false), navWidth(165), protocol(prot) diff --git a/esp/platform/txsummary.cpp b/esp/platform/txsummary.cpp index 0e5e1158645..76f771a945f 100755 --- a/esp/platform/txsummary.cpp +++ b/esp/platform/txsummary.cpp @@ -24,7 +24,17 @@ #define MATCH_ENTRY [&](const EntryValue& e) {return strieq(e.get()->name, pathPart);} -static auto pRequestCount = hpccMetrics::registerCounterMetric("esp.requests.received", "Number of requests received", SMeasureCount); +static std::shared_ptr pRequestCount; +MODULE_INIT(INIT_PRIORITY_STANDARD) +{ + pRequestCount = hpccMetrics::registerCounterMetric("esp.requests.received", "Number of requests received", SMeasureCount); + return true; +} + +MODULE_EXIT() +{ + pRequestCount = nullptr; +} inline bool validate(const char* k) {