diff --git a/src/admin/python/lsst/qserv/admin/replicationInterface.py b/src/admin/python/lsst/qserv/admin/replicationInterface.py index 88f8ebfbc..147ff7a90 100644 --- a/src/admin/python/lsst/qserv/admin/replicationInterface.py +++ b/src/admin/python/lsst/qserv/admin/replicationInterface.py @@ -201,7 +201,7 @@ def __init__( self.repl_ctrl = urlparse(repl_ctrl_uri) self.auth_key = auth_key self.admin_auth_key = admin_auth_key - self.repl_api_version = 35 + self.repl_api_version = 36 _log.debug(f"ReplicationInterface %s", self.repl_ctrl) def version(self) -> str: diff --git a/src/http/ChttpMetaModule.cc b/src/http/ChttpMetaModule.cc index 45aff9858..19de4dad6 100644 --- a/src/http/ChttpMetaModule.cc +++ b/src/http/ChttpMetaModule.cc @@ -37,7 +37,7 @@ string const adminAuthKey; namespace lsst::qserv::http { -unsigned int const ChttpMetaModule::version = 35; +unsigned int const ChttpMetaModule::version = 36; void ChttpMetaModule::process(string const& context, nlohmann::json const& info, httplib::Request const& req, httplib::Response& resp, string const& subModuleName) { diff --git a/src/http/MetaModule.cc b/src/http/MetaModule.cc index f64572b08..f7f4f57ac 100644 --- a/src/http/MetaModule.cc +++ b/src/http/MetaModule.cc @@ -37,7 +37,7 @@ string const adminAuthKey; namespace lsst::qserv::http { -unsigned int const MetaModule::version = 35; +unsigned int const MetaModule::version = 36; void MetaModule::process(string const& context, nlohmann::json const& info, shared_ptr const& req, shared_ptr const& resp, 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 d83bdbd18..9b40f5836 100644 --- a/src/www/qserv/js/Common.js +++ b/src/www/qserv/js/Common.js @@ -6,7 +6,7 @@ function(sqlFormatter, _) { class Common { - static RestAPIVersion = 35; + static RestAPIVersion = 36; static query2text(query, expanded) { if (expanded) { return sqlFormatter.format(query, Common._sqlFormatterConfig); @@ -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/QservCzarQueryProgress.js b/src/www/qserv/js/QservCzarQueryProgress.js index 60a4c9c55..f18542a1d 100644 --- a/src/www/qserv/js/QservCzarQueryProgress.js +++ b/src/www/qserv/js/QservCzarQueryProgress.js @@ -19,6 +19,9 @@ function(CSSLoader, class QservCzarQueryProgress extends FwkApplication { + // Return the default number of the last seconds to track in the query history + static last_seconds() { return 15 * 60; } + constructor(name) { super(name); this._data = undefined; @@ -97,8 +100,8 @@ function(CSSLoader, data-placement="top">
@@ -126,7 +129,7 @@ function(CSSLoader, `; let cont = this.fwk_app_container.html(html); cont.find('[data-toggle="tooltip"]').tooltip(); - this._set_last_seconds(900); + this._set_last_seconds(QservCzarQueryProgress.last_seconds()); cont.find(".form-control-selector").change(() => { this._load(); }); @@ -137,9 +140,9 @@ function(CSSLoader, cont.find("button#reset-form").click(() => { this._set_update_interval_sec(10); this._set_query_id(0); - this._set_last_seconds(15 * 60); + this._set_last_seconds(QservCzarQueryProgress.last_seconds()); this._set_vertical_scale('logarithmic'); - this._set_horizontal_scale(''); + this._set_horizontal_scale('auto-zoom-in'); this._load(); }); } 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,
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +