From ad1f7bc43b9abade12b50d4fbc81e407d9197f2e Mon Sep 17 00:00:00 2001 From: Shamser Ahmed Date: Wed, 17 Apr 2024 12:46:54 +0100 Subject: [PATCH] HPCC-31630 StatsScopeId::setScopeText not working for SSToperation scope type This change updates StatsScopeId::setScopeText so that it correctly sets the id for scope types that have a string value for a scope id (i.e. set 'name' member var in StatsScopeId) and correctly updates the '_next' argument. Signed-off-by: Shamser Ahmed --- system/jlib/jstats.cpp | 55 +++++++++++++++++++----------------------- 1 file changed, 25 insertions(+), 30 deletions(-) diff --git a/system/jlib/jstats.cpp b/system/jlib/jstats.cpp index 4dcab0b9ef1..e118ceebb38 100644 --- a/system/jlib/jstats.cpp +++ b/system/jlib/jstats.cpp @@ -1633,6 +1633,26 @@ void StatsScopeId::setId(StatisticScopeType _scopeType, unsigned _id, unsigned _ bool StatsScopeId::setScopeText(const char * text, const char * * _next) { + auto setScope = [&](StatisticScopeType _scopeType, const char *text, const char * *next) + { + if (!*text) + return false; + scopeType = _scopeType; + const char * endScopeNamePtr = strchr(text, ':'); + if (endScopeNamePtr) + { + name.set(text, endScopeNamePtr-text); + if (next) + * next = endScopeNamePtr; + } + else + { + name.set(text); + if (next) + *next = text + strlen(text); + } + return true; + }; char * * next = (char * *)_next; switch (*text) { @@ -1683,21 +1703,11 @@ bool StatsScopeId::setScopeText(const char * text, const char * * _next) break; case FunctionScopePrefix[0]: if (MATCHES_CONST_PREFIX(text, FunctionScopePrefix)) - { - setFunctionId(text+ strlen(FunctionScopePrefix)); - if (_next) - *_next = text + strlen(text); - return true; - } + return setScope(SSTfunction, text+strlen(FunctionScopePrefix), _next); break; case FileScopePrefix[0]: if (MATCHES_CONST_PREFIX(text, FileScopePrefix)) - { - setFileId(text+strlen(FileScopePrefix)); - if (_next) - *_next = text + strlen(text); - return true; - } + return setScope(SSTfile, text+strlen(FileScopePrefix), _next); break; case WorkflowScopePrefix[0]: if (MATCHES_CONST_PREFIX(text, WorkflowScopePrefix) && isdigit(text[strlen(WorkflowScopePrefix)])) @@ -1727,30 +1737,15 @@ bool StatsScopeId::setScopeText(const char * text, const char * * _next) break; case DFUWorkunitScopePrefix[0]: if (MATCHES_CONST_PREFIX(text, DFUWorkunitScopePrefix)) - { - setDfuWorkunitId(text+ strlen(DFUWorkunitScopePrefix)); - if (_next) - *_next = text + strlen(text); - return true; - } + return setScope(SSTdfuworkunit, text+strlen(DFUWorkunitScopePrefix), _next); break; case SectionScopePrefix[0]: if (MATCHES_CONST_PREFIX(text, SectionScopePrefix)) - { - setSectionId(text+strlen(SectionScopePrefix)); - if (_next) - *_next = text + strlen(text); - return true; - } + return setScope(SSTsection, text+strlen(SectionScopePrefix), _next); break; case OperationScopePrefix[0]: if (MATCHES_CONST_PREFIX(text, OperationScopePrefix)) - { - setOperationId(text+strlen(OperationScopePrefix)); - if (_next) - *_next = text + strlen(text); - return true; - } + return setScope(SSToperation, text+strlen(OperationScopePrefix), _next); break; case '\0': setId(SSTglobal, 0);