diff --git a/src/replica/contr/HttpQservMonitorModule.cc b/src/replica/contr/HttpQservMonitorModule.cc index ade25e38f..5228874a3 100644 --- a/src/replica/contr/HttpQservMonitorModule.cc +++ b/src/replica/contr/HttpQservMonitorModule.cc @@ -513,13 +513,16 @@ json HttpQservMonitorModule::_activeQueriesProgress() { json HttpQservMonitorModule::_pastQueries() { debug(__func__); - checkApiVersion(__func__, 25); + checkApiVersion(__func__, 36); auto const config = controller()->serviceProvider()->config(); string const queryStatus = query().optionalString("query_status", string()); string const queryType = query().optionalString("query_type", string()); unsigned int const queryAgeSec = query().optionalUInt("query_age", 0); unsigned int const minElapsedSec = query().optionalUInt("min_elapsed_sec", 0); + unsigned int const minNumChunks = query().optionalUInt("min_num_chunks", 0); + unsigned int const minCollectedBytes = query().optionalUInt("min_collected_bytes", 0); + unsigned int const minFinalRows = query().optionalUInt("min_final_rows", 0); unsigned int const limit4past = query().optionalUInt("limit4past", 1); string const searchPattern = query().optionalString("search_pattern", string()); bool const searchRegexpMode = query().optionalUInt("search_regexp_mode", 0) != 0; @@ -529,6 +532,9 @@ json HttpQservMonitorModule::_pastQueries() { debug(__func__, "query_type=" + queryType); debug(__func__, "query_age=" + to_string(queryAgeSec)); debug(__func__, "min_elapsed_sec=" + to_string(minElapsedSec)); + debug(__func__, "min_num_chunks=" + to_string(minNumChunks)); + debug(__func__, "min_collected_bytes=" + to_string(minCollectedBytes)); + debug(__func__, "min_final_rows=" + to_string(minFinalRows)); debug(__func__, "limit4past=" + to_string(limit4past)); debug(__func__, "search_pattern=" + searchPattern); debug(__func__, "search_regexp_mode=" + bool2str(searchRegexpMode)); @@ -557,6 +563,18 @@ json HttpQservMonitorModule::_pastQueries() { string const cond = g.gt(g.TIMESTAMPDIFF("SECOND", "submitted", "completed"), minElapsedSec); g.packCond(constraints, cond); } + if (minNumChunks > 0) { + string const cond = g.gt("chunkCount", minNumChunks); + g.packCond(constraints, cond); + } + if (minCollectedBytes > 0) { + string const cond = g.gt("collectedBytes", minCollectedBytes); + g.packCond(constraints, cond); + } + if (minFinalRows > 0) { + string const cond = g.gt("finalRows", minFinalRows); + g.packCond(constraints, cond); + } if (!searchPattern.empty()) { if (searchRegexpMode) { g.packCond(constraints, g.regexp("query", searchPattern)); diff --git a/src/www/qserv/js/Common.js b/src/www/qserv/js/Common.js index a018d9271..9b40f5836 100644 --- a/src/www/qserv/js/Common.js +++ b/src/www/qserv/js/Common.js @@ -17,7 +17,7 @@ function(sqlFormatter, } } static _sqlFormatterConfig = {"language":"mysql", "uppercase:":true, "indent":" "}; - static _max_compact_length = 120; + static _max_compact_length = 104; static _ivals = [ {value: 2, name: '2 sec'}, {value: 5, name: '5 sec'}, diff --git a/src/www/qserv/js/StatusPastQueries.js b/src/www/qserv/js/StatusPastQueries.js index 9fb92782d..19c0e00cf 100644 --- a/src/www/qserv/js/StatusPastQueries.js +++ b/src/www/qserv/js/StatusPastQueries.js @@ -70,7 +70,6 @@ function(CSSLoader, let html = `
-

Search queries

@@ -89,6 +88,14 @@ function(CSSLoader,
+
+ + +
-
- - -
-
- - -
@@ -121,6 +116,24 @@ function(CSSLoader,
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +