Ver código fonte

Merge pull request #15435 from shamser/issue26585

HPCC-26585 Extend WUInfo to return execute cost

Reviewed-by: Gavin Halliday <ghalliday@hpccsystems.com>
Merged-by: Gavin Halliday <ghalliday@hpccsystems.com>
Gavin Halliday 3 anos atrás
pai
commit
f7016e13d8

+ 14 - 0
common/workunit/workunit.cpp

@@ -4305,6 +4305,8 @@ public:
             { return c->getAbortBy(str); }
     virtual unsigned __int64 getAbortTimeStamp() const
             { return c->getAbortTimeStamp(); }
+    virtual unsigned __int64 getExecuteCost() const
+            { return c->getExecuteCost(); }
     virtual void import(IPropertyTree *wuTree, IPropertyTree *graphProgressTree)
             { return c->import(wuTree, graphProgressTree); }
 
@@ -12260,6 +12262,18 @@ unsigned __int64 CLocalWorkUnit::getAbortTimeStamp() const
     CriticalBlock block(crit);
     return p->getPropInt64("Tracing/AbortTimeStamp", 0);
 }
+unsigned __int64 CLocalWorkUnit::getExecuteCost() const
+{
+    CriticalBlock block(crit);
+    Owned<IPropertyTreeIterator> iter = p->getElements("./Statistics/Statistic[@kind='CostExecute'][@scope='']");
+    unsigned __int64 totalCost = 0;
+    ForEach(*iter)
+    {
+        IPropertyTree &stat = iter->query();
+        totalCost += stat.getPropInt64("@value");
+    }
+    return totalCost;
+}
 
 #if 0
 void testConstWorkflow(IConstWorkflowItem * cwf, bool * okay, bool * dep)

+ 1 - 0
common/workunit/workunit.hpp

@@ -1300,6 +1300,7 @@ interface IConstWorkUnit : extends IConstWorkUnitInfo
     virtual void clearGraphProgress() const = 0;
     virtual IStringVal & getAbortBy(IStringVal & str) const = 0;
     virtual unsigned __int64 getAbortTimeStamp() const = 0;
+    virtual unsigned __int64 getExecuteCost() const = 0;
 };
 
 

+ 1 - 0
common/workunit/workunit.ipp

@@ -306,6 +306,7 @@ public:
     virtual unsigned getTotalThorTime() const;
     virtual IStringVal & getAbortBy(IStringVal & str) const;
     virtual unsigned __int64 getAbortTimeStamp() const;
+    virtual unsigned __int64 getExecuteCost() const;
 
     void clearExceptions(const char *source=nullptr);
     void commit();

+ 1 - 1
esp/scm/ws_workunits.ecm

@@ -25,7 +25,7 @@ EspInclude(ws_workunits_queryset_req_resp);
 
 ESPservice [
     auth_feature("DEFERRED"), //This declares that the method logic handles feature level authorization
-    version("1.83"), default_client_version("1.83"), cache_group("ESPWsWUs"),
+    version("1.84"), default_client_version("1.84"), cache_group("ESPWsWUs"),
     noforms,exceptions_inline("./smc_xslt/exceptions.xslt"),use_method_name] WsWorkunits
 {
     ESPmethod [cache_seconds(60), resp_xsl_default("/esp/xslt/workunits.xslt")]     WUQuery(WUQueryRequest, WUQueryResponse);

+ 1 - 0
esp/scm/ws_workunits_struct.ecm

@@ -439,6 +439,7 @@ ESPStruct [nil_remove] ECLWorkunit
     [min_ver("1.50")] int WorkflowCount;
     [min_ver("1.67")] int HelpersCount;
     [min_ver("1.78")] ESParray<string> ServiceNames;
+    [min_ver("1.84")] double ExecuteCost;
 };
 
 ESPStruct [nil_remove] WUECLAttribute

+ 2 - 0
esp/services/ws_workunits/ws_workunitsHelpers.cpp

@@ -1049,6 +1049,8 @@ void WsWuInfo::getInfo(IEspECLWorkunit &info, unsigned long flags)
     info.setSourceFileCount(cw->getSourceFileCount());
     info.setApplicationValueCount(cw->getApplicationValueCount());
     info.setHasDebugValue(cw->hasDebugValue("__calculated__complexity__"));
+    if(version>=1.84)
+        info.setExecuteCost(cost_type2money(cw->getExecuteCost()));
 
     getClusterInfo(info, flags);
     getExceptions(info, flags);