瀏覽代碼

Merge pull request #5401 from wangkx/h10835

HPCC-10835 Add suspended/activated as filters for WUListQueries

Reviewed-By: Gordon Smith <gordon.smith@lexisnexis.com>
Reviewed-By: Richard Chapman <rchapman@hpccsystems.com>
Richard Chapman 11 年之前
父節點
當前提交
299a37ef59

+ 32 - 7
common/workunit/workunit.cpp

@@ -1934,6 +1934,8 @@ mapEnums querySortFields[] =
    { WUQSFpriority, "@priority" },
    { WUQSFpriorityHi, "@priority" },
    { WUQSFQuerySet, "../@id" },
+   { WUQSFActivited, "@activated" },
+   { WUQSFSuspendedByUser, "@suspended" },
    { WUQSFterm, NULL }
 };
 
@@ -2436,11 +2438,23 @@ public:
                                                 __int64 *cachehint,
                                                 unsigned *total)
     {
+        struct PostFilters
+        {
+            WUQueryFilterBoolean activatedFilter;
+            WUQueryFilterBoolean suspendedByUserFilter;
+            PostFilters()
+            {
+                activatedFilter = WUQFSAll;
+                suspendedByUserFilter = WUQFSAll;
+            };
+        } postFilters;
+
         class CQuerySetQueriesPager : public CSimpleInterface, implements IElementsPager
         {
             StringAttr querySet;
             StringAttr xPath;
             StringAttr sortOrder;
+            PostFilters& postFilters;
 
             void populateQueryTree(IPropertyTree* queryRegistry, const char* querySetId, IPropertyTree* querySetTree, const char *xPath, IPropertyTree* queryTree)
             {
@@ -2448,8 +2462,6 @@ public:
                 ForEach(*iter)
                 {
                     IPropertyTree &query = iter->query();
-                    IPropertyTree *queryWithSetId = queryTree->addPropTree("Query", LINK(&query));
-                    queryWithSetId->addProp("@querySetId", querySetId);
 
                     bool activated = false;
                     const char* queryId = query.queryProp("@id");
@@ -2460,6 +2472,17 @@ public:
                         if (alias)
                             activated = true;
                     }
+                    if (activated && (postFilters.activatedFilter == WUQFSNo))
+                        continue;
+                    if (!activated && (postFilters.activatedFilter == WUQFSYes))
+                        continue;
+                    if ((postFilters.suspendedByUserFilter == WUQFSNo) && query.hasProp(getEnumText(WUQSFSuspendedByUser,querySortFields)))
+                        continue;
+                    if ((postFilters.suspendedByUserFilter == WUQFSYes) && !query.hasProp(getEnumText(WUQSFSuspendedByUser,querySortFields)))
+                        continue;
+
+                    IPropertyTree *queryWithSetId = queryTree->addPropTree("Query", LINK(&query));
+                    queryWithSetId->addProp("@querySetId", querySetId);
                     queryWithSetId->addPropBool("@activated", activated);
                 }
             }
@@ -2495,8 +2518,8 @@ public:
         public:
             IMPLEMENT_IINTERFACE_USING(CSimpleInterface);
 
-            CQuerySetQueriesPager(const char* _querySet, const char* _xPath, const char *_sortOrder)
-                : querySet(_querySet), xPath(_xPath), sortOrder(_sortOrder)
+            CQuerySetQueriesPager(const char* _querySet, const char* _xPath, const char *_sortOrder, PostFilters& _postFilters)
+                : querySet(_querySet), xPath(_xPath), sortOrder(_sortOrder), postFilters(_postFilters)
             {
             }
             virtual IRemoteConnection* getElements(IArrayOf<IPropertyTree> &elements)
@@ -2529,6 +2552,10 @@ public:
                     xPath.append('[').append(getEnumText(subfmt,querySortFields)).append(">=").append(fv).append("]");
                 else if ((subfmt==WUQSFmemoryLimitHi) || (subfmt==WUQSFtimeLimitHi) || (subfmt==WUQSFwarnTimeLimitHi) || (subfmt==WUQSFpriorityHi))
                     xPath.append('[').append(getEnumText(subfmt,querySortFields)).append("<=").append(fv).append("]");
+                else if (subfmt==WUQSFActivited)
+                    postFilters.activatedFilter = (WUQueryFilterBoolean) atoi(fv);
+                else if (subfmt==WUQSFSuspendedByUser)
+                    postFilters.suspendedByUserFilter = (WUQueryFilterBoolean) atoi(fv);
                 else {
                     xPath.append('[').append(getEnumText(subfmt,querySortFields)).append('=');
                     if (fmt&WUQSFnocase)
@@ -2542,8 +2569,6 @@ public:
                 fv = fv + strlen(fv)+1;
             }
         }
-        if (xPath.length() < 1)
-            xPath.set("*");
         if (sortorder) {
             for (unsigned i=0;sortorder[i]!=WUQSFterm;i++) {
                 if (so.length())
@@ -2559,7 +2584,7 @@ public:
             }
         }
         IArrayOf<IPropertyTree> results;
-        Owned<IElementsPager> elementsPager = new CQuerySetQueriesPager(querySet.get(), xPath.str(), so.length()?so.str():NULL);
+        Owned<IElementsPager> elementsPager = new CQuerySetQueriesPager(querySet.get(), xPath.str(), so.length()?so.str():NULL, postFilters);
         Owned<IRemoteConnection> conn=getElementsPaged(elementsPager,startoffset,maxnum,NULL,"",cachehint,results,total);
         return new CConstQuerySetQueryIterator(results);
     }

+ 9 - 0
common/workunit/workunit.hpp

@@ -1108,6 +1108,13 @@ enum WUSortField
     WUSFwild = 2048
 };
 
+enum WUQueryFilterBoolean
+{
+    WUQFSNo = 0,
+    WUQFSYes = 1,
+    WUQFSAll = 2
+};
+
 enum WUQuerySortField
 {
     WUQSFId = 1,
@@ -1123,6 +1130,8 @@ enum WUQuerySortField
     WUQSFpriority = 11,
     WUQSFpriorityHi = 12,
     WUQSFQuerySet = 13,
+    WUQSFActivited = 14,
+    WUQSFSuspendedByUser = 15,
     WUQSFterm = 0,
     WUQSFreverse = 256,
     WUQSFnocase = 512,

+ 3 - 1
esp/scm/ws_workunits.ecm

@@ -1237,6 +1237,8 @@ ESPrequest [nil_remove] WUListQueriesRequest
     nonNegativeInteger WarnTimeLimitHigh;
     nonNegativeInteger PriorityLow;
     nonNegativeInteger PriorityHigh;
+    [min_ver("1.48")] bool Activated;
+    [min_ver("1.48")] bool SuspendedByUser;
 
     nonNegativeInteger PageSize(0);
     nonNegativeInteger PageStartFrom(0);
@@ -1446,7 +1448,7 @@ ESPresponse [exceptions_inline] WUCreateZAPInfoResponse
 };
 
 ESPservice [
-    version("1.47"), default_client_version("1.47"),
+    version("1.48"), default_client_version("1.48"),
     noforms,exceptions_inline("./smc_xslt/exceptions.xslt"),use_method_name] WsWorkunits
 {
     ESPmethod [resp_xsl_default("/esp/xslt/workunits.xslt")]     WUQuery(WUQueryRequest, WUQueryResponse);

+ 4 - 0
esp/services/ws_workunits/ws_workunitsQuerySets.cpp

@@ -1034,6 +1034,10 @@ bool CWsWorkunitsEx::onWUListQueries(IEspContext &context, IEspWUListQueriesRequ
         addWUQSQueryFilterInt(filters, filterCount, filterBuf, req.getPriorityLow(), (WUQuerySortField) (WUQSFpriority | WUQSFnumeric));
     if (!req.getPriorityHigh_isNull())
         addWUQSQueryFilterInt(filters, filterCount, filterBuf, req.getPriorityHigh(), (WUQuerySortField) (WUQSFpriorityHi | WUQSFnumeric));
+    if (!req.getActivated_isNull())
+        addWUQSQueryFilterInt(filters, filterCount, filterBuf, req.getActivated(), (WUQuerySortField) (WUQSFActivited | WUQSFnumeric));
+    if (!req.getSuspendedByUser_isNull())
+        addWUQSQueryFilterInt(filters, filterCount, filterBuf, req.getSuspendedByUser(), (WUQuerySortField) (WUQSFSuspendedByUser | WUQSFnumeric));
     filters[filterCount] = WUQSFterm;
 
     unsigned numberOfQueries = 0;