Repository: storm Updated Branches: refs/heads/master 834eb107e -> 5b0afe2fc
STORM-3219: Update javascript to report errors consistently Project: http://git-wip-us.apache.org/repos/asf/storm/repo Commit: http://git-wip-us.apache.org/repos/asf/storm/commit/0d7b9757 Tree: http://git-wip-us.apache.org/repos/asf/storm/tree/0d7b9757 Diff: http://git-wip-us.apache.org/repos/asf/storm/diff/0d7b9757 Branch: refs/heads/master Commit: 0d7b97570b2da2a5b9145e0cacf24a6fa8108c99 Parents: 8f9061a Author: Robert (Bobby) Evans <[email protected]> Authored: Tue Sep 11 15:02:44 2018 -0500 Committer: Robert (Bobby) Evans <[email protected]> Committed: Tue Sep 11 15:23:29 2018 -0500 ---------------------------------------------------------------------- .../storm/daemon/ui/WEB-INF/component.html | 189 ++++++++++-------- .../daemon/ui/WEB-INF/deep_search_result.html | 194 +++++++++++-------- .../apache/storm/daemon/ui/WEB-INF/index.html | 133 ++++++++----- .../apache/storm/daemon/ui/WEB-INF/js/script.js | 10 +- .../daemon/ui/WEB-INF/logviewer_search.html | 36 +++- .../storm/daemon/ui/WEB-INF/search_result.html | 98 ++++++---- .../storm/daemon/ui/WEB-INF/supervisor.html | 22 ++- .../storm/daemon/ui/WEB-INF/topology.html | 27 ++- 8 files changed, 428 insertions(+), 281 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/storm/blob/0d7b9757/storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/component.html ---------------------------------------------------------------------- diff --git a/storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/component.html b/storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/component.html index cee4ce4..10da241 100644 --- a/storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/component.html +++ b/storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/component.html @@ -143,6 +143,15 @@ $(document).ready(function() { var url = "/api/v1/topology/"+topologyId+"/component/"+componentId+"?sys="+sys; if(window) url += "&window="+window; + $.ajaxSetup({ + "error":function(jqXHR,textStatus,response) { + var errorJson = jQuery.parseJSON(jqXHR.responseText); + getStatic("/templates/json-error-template.html", function(template) { + $("#json-response-error").append(Mustache.render($(template).filter("#json-error-template").html(),errorJson)); + }); + } + }); + $.getJSON("/api/v1/cluster/configuration",function(response,status,jqXHR) { $.extend( $.fn.dataTable.defaults, { stateSave: true, @@ -158,14 +167,6 @@ $(document).ready(function() { }); renderToggleSys($("#toggle-switch")); - $.ajaxSetup({ - "error":function(jqXHR,textStatus,response) { - var errorJson = jQuery.parseJSON(jqXHR.responseText); - getStatic("/templates/json-error-template.html", function(template) { - $("#json-response-error").append(Mustache.render($(template).filter("#json-error-template").html(),errorJson)); - }); - } - }); function renderSupervisorPageLink(data, type, row, meta) { return type === 'display' ? @@ -255,97 +256,113 @@ $(document).ready(function() { } if(response["componentType"] == "spout") { - componentStatsDetail.append(Mustache.render($(template).filter("#spout-stats-detail-template").html(),response)); - //window, emitted, transferred, complete latency, acked, failed - $("#spout-stats-table").DataTable({ - paging: false, - info: false, - searching: false, - columnDefs: [ - {type: "num", targets: [1, 2, 3, 4, 5]}, - {type: "time-str", targets: [0]} - ] + jsError(function () { + componentStatsDetail.append(Mustache.render($(template).filter("#spout-stats-detail-template").html(),response)); + //window, emitted, transferred, complete latency, acked, failed + $("#spout-stats-table").DataTable({ + paging: false, + info: false, + searching: false, + columnDefs: [ + {type: "num", targets: [1, 2, 3, 4, 5]}, + {type: "time-str", targets: [0]} + ] + }); }); - outputStats.append(Mustache.render($(template).filter("#output-stats-template").html(),response)); - //stream, emitted, transferred, compltete latency, acked, failed - dtAutoPage("#output-stats-table", { - columnDefs: [ - {type: "num", targets: [1, 2, 3, 4, 5]} - ] + jsError(function () { + outputStats.append(Mustache.render($(template).filter("#output-stats-template").html(),response)); + //stream, emitted, transferred, compltete latency, acked, failed + dtAutoPage("#output-stats-table", { + columnDefs: [ + {type: "num", targets: [1, 2, 3, 4, 5]} + ] + }); }); - executorStats.append(Mustache.render($(template).filter("#executor-stats-template").html(),response)); - //id, uptime, host, port, actions, emitted, transferred, complete latency, acked, failed - dtAutoPage("#executor-stats-table", { - columnDefs: [ - {render: renderSupervisorPageLink, searchable: true, targets: [2]}, - {render: renderActionCheckbox, searchable: false, targets: [4]}, - {type: "num", targets: [5, 6, 7, 8, 9]}, - {type: "time-str", targets: [1]}, - ] - }).on("draw", function(e,s) {setWorkerActionCheckboxesClickCallback()}); + jsError(function () { + executorStats.append(Mustache.render($(template).filter("#executor-stats-template").html(),response)); + //id, uptime, host, port, actions, emitted, transferred, complete latency, acked, failed + dtAutoPage("#executor-stats-table", { + columnDefs: [ + {render: renderSupervisorPageLink, searchable: true, targets: [2]}, + {render: renderActionCheckbox, searchable: false, targets: [4]}, + {type: "num", targets: [5, 6, 7, 8, 9]}, + {type: "time-str", targets: [1]}, + ] + }).on("draw", function(e,s) {setWorkerActionCheckboxesClickCallback()}); + }); } else { - componentStatsDetail.append(Mustache.render($(template).filter("#bolt-stats-template").html(),response)); - //window, emitted, transferred, execute latency, executed, process latency, acked, failed - dtAutoPage("#bolt-stats-table", { - columnDefs: [ - {type: "num", targets: [1, 2, 3, 4, 5, 6, 7]}, - {type: "time-str", targets: [0]} - ] + jsError(function () { + componentStatsDetail.append(Mustache.render($(template).filter("#bolt-stats-template").html(),response)); + //window, emitted, transferred, execute latency, executed, process latency, acked, failed + dtAutoPage("#bolt-stats-table", { + columnDefs: [ + {type: "num", targets: [1, 2, 3, 4, 5, 6, 7]}, + {type: "time-str", targets: [0]} + ] + }); }); - inputStats.append(Mustache.render($(template).filter("#bolt-input-stats-template").html(),response)); - //component, stream, execute latency, executed, process latency, acked, failed - dtAutoPage("#bolt-input-stats-table", { - columnDefs: [ - {type: "num", targets: [2, 3, 4, 5, 6]} - ] + jsError(function () { + inputStats.append(Mustache.render($(template).filter("#bolt-input-stats-template").html(),response)); + //component, stream, execute latency, executed, process latency, acked, failed + dtAutoPage("#bolt-input-stats-table", { + columnDefs: [ + {type: "num", targets: [2, 3, 4, 5, 6]} + ] + }); }); - outputStats.append(Mustache.render($(template).filter("#bolt-output-stats-template").html(),response)); - //stream, emitted, transferred - dtAutoPage("#bolt-output-stats-table", { - columnDefs: [ - {type: "num", targets: [1, 2]} - ] + jsError(function () { + outputStats.append(Mustache.render($(template).filter("#bolt-output-stats-template").html(),response)); + //stream, emitted, transferred + dtAutoPage("#bolt-output-stats-table", { + columnDefs: [ + {type: "num", targets: [1, 2]} + ] + }); }); - executorStats.append(Mustache.render($(template).filter("#bolt-executor-template").html(),response)); - //id, uptime, host, port, actions, emitted, transferred, capacity, execute latency, executed, process latency, acked, failed - dtAutoPage("#executor-stats-table", { - columnDefs: [ - {render: renderSupervisorPageLink, searchable: true, targets: [2]}, - {render: renderActionCheckbox, searchable: false, targets: [4]}, - {type: "num", targets: [5, 6, 7, 8, 9, 10, 11, 12]}, - {type: "time-str", targets: [1]}, - ] - }).on("draw", function(e,s) {setWorkerActionCheckboxesClickCallback()}); + jsError(function () { + executorStats.append(Mustache.render($(template).filter("#bolt-executor-template").html(),response)); + //id, uptime, host, port, actions, emitted, transferred, capacity, execute latency, executed, process latency, acked, failed + dtAutoPage("#executor-stats-table", { + columnDefs: [ + {render: renderSupervisorPageLink, searchable: true, targets: [2]}, + {render: renderActionCheckbox, searchable: false, targets: [4]}, + {type: "num", targets: [5, 6, 7, 8, 9, 10, 11, 12]}, + {type: "time-str", targets: [1]}, + ] + }).on("draw", function(e,s) {setWorkerActionCheckboxesClickCallback()}); + }); } setWorkerActionCheckboxesClickCallback(); - componentErrors.append(Mustache.render($(template).filter("#component-errors-template").html(),formatErrorTimeSecs(response))); - //time, error - dtAutoPage("#component-errors-table", {}); - - var errorTimeCells = document.getElementsByClassName("errorTimeSpan"); - for (i = 0; i < errorTimeCells.length; i++) - { - var timeInMilliseconds = errorTimeCells[i].id * 1000; - var time = parseInt(timeInMilliseconds); - var date = new Date(time); - errorTimeCells[i].innerHTML = date.toJSON(); - } - - var errorCells = document.getElementsByClassName("errorSpan"); - for (i =0; i < errorCells.length; i++) - { - var timeLapsedInSecs = errorCells[i].id; - if (parseInt(timeLapsedInSecs) < 1800) { - errorCells[i].style.color = "#9d261d"; - errorCells[i].style.borderBottomColor = "#9d261d"; - } - errorCells[i].style.whiteSpace = "pre"; - } + jsError(function () { + componentErrors.append(Mustache.render($(template).filter("#component-errors-template").html(),formatErrorTimeSecs(response))); + //time, error + dtAutoPage("#component-errors-table", {}); + + var errorTimeCells = document.getElementsByClassName("errorTimeSpan"); + for (i = 0; i < errorTimeCells.length; i++) + { + var timeInMilliseconds = errorTimeCells[i].id * 1000; + var time = parseInt(timeInMilliseconds); + var date = new Date(time); + errorTimeCells[i].innerHTML = date.toJSON(); + } + + var errorCells = document.getElementsByClassName("errorSpan"); + for (i =0; i < errorCells.length; i++) + { + var timeLapsedInSecs = errorCells[i].id; + if (parseInt(timeLapsedInSecs) < 1800) { + errorCells[i].style.color = "#9d261d"; + errorCells[i].style.borderBottomColor = "#9d261d"; + } + errorCells[i].style.whiteSpace = "pre"; + } + }); $('#component-summary [data-toggle="tooltip"]').tooltip(); $('#component-actions [data-toggle="tooltip"]').tooltip(); $('#component-stats-detail [data-toggle="tooltip"]').tooltip(); http://git-wip-us.apache.org/repos/asf/storm/blob/0d7b9757/storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/deep_search_result.html ---------------------------------------------------------------------- diff --git a/storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/deep_search_result.html b/storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/deep_search_result.html index e357687..9f9af6d 100644 --- a/storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/deep_search_result.html +++ b/storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/deep_search_result.html @@ -41,6 +41,9 @@ <div class="row"> <div id="result"></div> </div> + <div class="row"> + <div id="json-response-error" class="col-md-12"></div> + </div> <div> <p id="page-rendered-at-timestamp"></p> </div> @@ -48,6 +51,16 @@ </body> <script type="text/javascript"> +function jsError(other) { + try { + other(); + } catch (err) { + getStatic("/templates/json-error-template.html", function(template) { + $("#json-response-error").append(Mustache.render($(template).filter("#json-error-template").html(),{error: "JS Error", errorMessage: err})); + }); + } +} + function elem_id_for_host(host) { return "search-results-"+host.replace(/\./g,"-"); } @@ -59,113 +72,128 @@ $(document).ready(function() { var port = $.url("?port") || "*"; var search_archived = $.url("?search-archived"); + $.ajaxSetup({ + "error":function(jqXHR,textStatus,response) { + var errorJson = jQuery.parseJSON(jqXHR.responseText); + getStatic("/templates/json-error-template.html", function(template) { + $("#json-response-error").append(Mustache.render($(template).filter("#json-error-template").html(),errorJson)); + }); + } + }); + getStatic("/templates/deep-search-result-page-template.html", function(template) { var checked; if (search_archived) { checked = "checked"; } $.get("/api/v1/history/summary", function (response, status, jqXHR) { - var findIds = function findIds(query, cb) { - var found = []; - var re = new RegExp(query, 'i'); - for (var j in response["topo-history"]) { - var id = response["topo-history"][j]; - if (re.test(id)) { - found.push({ value: id }); + jsError(function() { + var findIds = function findIds(query, cb) { + var found = []; + var re = new RegExp(query, 'i'); + for (var j in response["topo-history"]) { + var id = response["topo-history"][j]; + if (re.test(id)) { + found.push({ value: id }); + } } - } - cb(found); - }; - - $("#search-form").append(Mustache.render($(template).filter("#search-form-template").html(),{id: id, search: search, count: count, search_archived: checked, topologies: response["topo-history"]})); - $('#search-id').typeahead({ - hint: true, - highlight: true, - minLength: 1 - }, - { - name: 'ids', - displayKey: 'value', - source: findIds + cb(found); + }; + + $("#search-form").append(Mustache.render($(template).filter("#search-form-template").html(),{id: id, search: search, count: + count, search_archived: checked, topologies: response["topo-history"]})); + $('#search-id').typeahead({ + hint: true, + highlight: true, + minLength: 1 + }, + { + name: 'ids', + displayKey: 'value', + source: findIds + }); + $('#search-form [data-toggle="tooltip"]').tooltip(); }); - $('#search-form [data-toggle="tooltip"]').tooltip(); }); function render_file(file, host, logviewerPort, logviewerScheme, count, template) { - file.host = host; - file.id = id; - file.count = count; - file.logviewerPort = logviewerPort; - file.logviewerScheme = logviewerScheme; - file.search_archived = search_archived; - if (file.matches == 0) { - file.resultNotFound = true; - } - var searchTemplate = $(template).filter("#search-result-identified-template").html(); - var rendered = Mustache.render(searchTemplate, file); - var elemId = elem_id_for_host(host); - $("#"+elemId).remove(); - if (file.resultNotFound) { - // if no result found, - // and there is no "aResult" or "noResult" element exists, - // append "resultNotFound" element - if (!$("#aResult").length && !$("#noResult").length) { - $("#search-result-table > tbody").append(rendered); + jsError(function() { + file.host = host; + file.id = id; + file.count = count; + file.logviewerPort = logviewerPort; + file.logviewerScheme = logviewerScheme; + file.search_archived = search_archived; + if (file.matches == 0) { + file.resultNotFound = true; + } + var searchTemplate = $(template).filter("#search-result-identified-template").html(); + var rendered = Mustache.render(searchTemplate, file); + var elemId = elem_id_for_host(host); + $("#"+elemId).remove(); + if (file.resultNotFound) { + // if no result found, + // and there is no "aResult" or "noResult" element exists, + // append "resultNotFound" element + if (!$("#aResult").length && !$("#noResult").length) { + $("#search-result-table > tbody").append(rendered); + } + } else { + // if a result found, remove "noResult" element, + // and append the result + $("#noResult").remove(); + $("#search-result-table > tbody").append(rendered); } - } else { - // if a result found, remove "noResult" element, - // and append the result - $("#noResult").remove(); - $("#search-result-table > tbody").append(rendered); - } + }); } var result = $("#result"); if(search) { $.get("/api/v1/supervisor/summary", function(response, status, jqXHR) { + jsError(function() { + for(var i in response.supervisors) { + response.supervisors[i].elemId = elem_id_for_host(response.supervisors[i].host); + } - for(var i in response.supervisors) { - response.supervisors[i].elemId = elem_id_for_host(response.supervisors[i].host); - } - - result.append(Mustache.render($(template).filter("#search-result-files-template").html(),response)); - - var logviewerPort = response.logviewerPort; - var logviewerScheme = response.logviewerScheme; - var distinct_hosts = {}; - for (var index in response.supervisors) { - distinct_hosts[response.supervisors[index].host] = true; - } + result.append(Mustache.render($(template).filter("#search-result-files-template").html(),response)); + var logviewerPort = response.logviewerPort; + var logviewerScheme = response.logviewerScheme; + var distinct_hosts = {}; + for (var index in response.supervisors) { + distinct_hosts[response.supervisors[index].host] = true; + } - for (var host in distinct_hosts) { - var searchURL = logviewerScheme + "://"+host+":"+logviewerPort+"/api/v1/deepSearch/"+id+"?search-string="+search+"&num-matches="+count+"&port="+port; - if(search_archived) - searchURL += "&search-archived=" + search_archived; - - - $.ajax({dataType: "json", - url: searchURL, - xhrFields: { - withCredentials: true - }, - success: $.proxy(function(data,status,jqXHR) { - if(port == "*") { - for(var by_port in data) { - for(var i in data[by_port].matches) { - render_file(data[by_port].matches[i], this.host, logviewerPort, logviewerScheme, count, template); + for (var host in distinct_hosts) { + var searchURL = logviewerScheme + + "://"+host+":"+logviewerPort+"/api/v1/deepSearch/"+id+"?search-string="+search+"&num-matches="+count+"&port="+port; + if(search_archived) + searchURL += "&search-archived=" + search_archived; + + $.ajax({dataType: "json", + url: searchURL, + xhrFields: { + withCredentials: true + }, + success: $.proxy(function(data,status,jqXHR) { + if(port == "*") { + for(var by_port in data) { + for(var i in data[by_port].matches) { + render_file(data[by_port].matches[i], this.host, logviewerPort, logviewerScheme, count, + template); + } } } - } - else { - for(var i in data.matches) { - render_file(data.matches[i], this.host, logviewerPort, logviewerScheme, count, template); + else { + for(var i in data.matches) { + render_file(data.matches[i], this.host, logviewerPort, logviewerScheme, count, template); + } } - } - }, {host: host, id: id}) - }); - } + }, {host: host, id: id}) + }); + } + }); }); } }); http://git-wip-us.apache.org/repos/asf/storm/blob/0d7b9757/storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/index.html ---------------------------------------------------------------------- diff --git a/storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/index.html b/storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/index.html index 817eff6..fb38b43 100644 --- a/storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/index.html +++ b/storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/index.html @@ -101,11 +101,30 @@ </body> <script> +function jsError(other) { + try { + other(); + } catch (err) { + getStatic("/templates/json-error-template.html", function(template) { + $("#json-response-error").append(Mustache.render($(template).filter("#json-error-template").html(),{error: "JS Error", errorMessage: err})); + }); + } +} + $(document).ajaxStop($.unblockUI); $(document).ajaxStart(function(){ $.blockUI({ message: '<img src="images/spinner.gif" /> <h3>Loading summary...</h3>'}); }); $(document).ready(function() { + $.ajaxSetup({ + "error":function(jqXHR,textStatus,response) { + var errorJson = jQuery.parseJSON(jqXHR.responseText); + getStatic("/templates/json-error-template.html", function(template) { + $("#json-response-error").append(Mustache.render($(template).filter("#json-error-template").html(),errorJson)); + }); + } + }); + $.getJSON("/api/v1/cluster/configuration",function(responseClusterConfig,status,jqXHR) { $.extend( $.fn.dataTable.defaults, { stateSave: true, @@ -113,14 +132,6 @@ $(document).ready(function() { pageLength: responseClusterConfig["ui.pagination"] }); - $.ajaxSetup({ - "error":function(jqXHR,textStatus,response) { - var errorJson = jQuery.parseJSON(jqXHR.responseText); - getStatic("/templates/json-error-template.html", function(template) { - $("#json-response-error").append(Mustache.render($(template).filter("#json-error-template").html(),errorJson)); - }); - } - }); var uiUser = $("#ui-user"); var clusterSummary = $("#cluster-summary"); var clusterResources = $("#cluster-resources"); @@ -133,71 +144,89 @@ $(document).ready(function() { getStatic("/templates/index-page-template.html", function(indexTemplate) { $.getJSON("/api/v1/cluster/summary",function(response,status,jqXHR) { getStatic("/templates/user-template.html", function(template) { - uiUser.append(Mustache.render($(template).filter("#user-template").html(),response)); - $('#ui-user [data-toggle="tooltip"]').tooltip() + jsError(function() { + uiUser.append(Mustache.render($(template).filter("#user-template").html(),response)); + $('#ui-user [data-toggle="tooltip"]').tooltip() + }); }); - clusterSummary.append(Mustache.render($(indexTemplate).filter("#cluster-summary-template").html(),response)); - $('#cluster-summary [data-toggle="tooltip"]').tooltip(); + jsError(function() { + clusterSummary.append(Mustache.render($(indexTemplate).filter("#cluster-summary-template").html(),response)); + $('#cluster-summary [data-toggle="tooltip"]').tooltip(); + }); - clusterResources.append(Mustache.render($(indexTemplate).filter("#cluster-resources-template").html(),response)); - $('#cluster-resources [data-toggle="tooltip"]').tooltip(); + jsError(function() { + clusterResources.append(Mustache.render($(indexTemplate).filter("#cluster-resources-template").html(),response)); + $('#cluster-resources [data-toggle="tooltip"]').tooltip(); + }); - var displayResource = response["schedulerDisplayResource"]; - $('#cluster-resources [data-toggle="tooltip"]').tooltip(); - if (!displayResource){ - $('#cluster-resources-header').hide(); - $('#cluster-resources').hide(); - }; + jsError(function() { + var displayResource = response["schedulerDisplayResource"]; + $('#cluster-resources [data-toggle="tooltip"]').tooltip(); + if (!displayResource){ + $('#cluster-resources-header').hide(); + $('#cluster-resources').hide(); + }; + }); }); $.getJSON("/api/v1/nimbus/summary",function(response,status,jqXHR) { - nimbusSummary.append(Mustache.render($(indexTemplate).filter("#nimbus-summary-template").html(),response)); - //host, port, isLeader, version, uptime - dtAutoPage("#nimbus-summary-table", { - columnDefs: [ - {type: "num", targets: [1]}, - {type: "time-str", targets: [4]} - ] + jsError(function() { + nimbusSummary.append(Mustache.render($(indexTemplate).filter("#nimbus-summary-template").html(),response)); + //host, port, isLeader, version, uptime + dtAutoPage("#nimbus-summary-table", { + columnDefs: [ + {type: "num", targets: [1]}, + {type: "time-str", targets: [4]} + ] + }); + $('#nimbus-summary [data-toggle="tooltip"]').tooltip(); }); - $('#nimbus-summary [data-toggle="tooltip"]').tooltip(); }); $.getJSON("/api/v1/owner-resources", function(response, status, jqXHR) { - ownerSummary.append(Mustache.render($(indexTemplate).filter("#owner-summary-template").html(), response)); - makeOwnerSummaryTable(response, '#owner-summary-table', '#owner-summary'); + jsError(function() { + ownerSummary.append(Mustache.render($(indexTemplate).filter("#owner-summary-template").html(), response)); + makeOwnerSummaryTable(response, '#owner-summary-table', '#owner-summary'); + }); }); $.getJSON("/api/v1/topology/summary",function(response,status,jqXHR) { - topologySummary.append(Mustache.render($(indexTemplate).filter("#topology-summary-template").html(),response)); - //name, owner, status, uptime, num workers, num executors, num tasks, replication count, assigned total mem, assigned total cpu, scheduler info - dtAutoPage("#topology-summary-table", { - columnDefs: [ - {type: "num", targets: [4, 5, 6, 7, 8, 9]}, - {type: "time-str", targets: [3]} - ] + jsError(function() { + topologySummary.append(Mustache.render($(indexTemplate).filter("#topology-summary-template").html(),response)); + //name, owner, status, uptime, num workers, num executors, num tasks, replication count, assigned total mem, assigned total cpu, scheduler info + dtAutoPage("#topology-summary-table", { + columnDefs: [ + {type: "num", targets: [4, 5, 6, 7, 8, 9]}, + {type: "time-str", targets: [3]} + ] + }); + $('#topology-summary [data-toggle="tooltip"]').tooltip(); }); - $('#topology-summary [data-toggle="tooltip"]').tooltip(); }); $.getJSON("/api/v1/supervisor/summary",function(response,status,jqXHR) { - supervisorSummary.append(Mustache.render($(indexTemplate).filter("#supervisor-summary-template").html(),response)); - //id, host, uptime, slots, used slots - dtAutoPage("#supervisor-summary-table", { - columnDefs: [ - {type: "num", targets: [3, 4]}, - {type: "time-str", targets: [2]} - ] + jsError(function() { + supervisorSummary.append(Mustache.render($(indexTemplate).filter("#supervisor-summary-template").html(),response)); + //id, host, uptime, slots, used slots + dtAutoPage("#supervisor-summary-table", { + columnDefs: [ + {type: "num", targets: [3, 4]}, + {type: "time-str", targets: [2]} + ] + }); + $('#supervisor-summary [data-toggle="tooltip"]').tooltip(); }); - $('#supervisor-summary [data-toggle="tooltip"]').tooltip(); }); - var formattedResponse = formatConfigData(responseClusterConfig); - config.append(Mustache.render($(indexTemplate).filter("#configuration-template").html(),formattedResponse)); - $('#nimbus-configuration-table td').jsonFormatter(); - //key, value - dtAutoPage("#nimbus-configuration-table", {}); - $('#nimbus-configuration [data-toggle="tooltip"]').tooltip(); + jsError(function() { + var formattedResponse = formatConfigData(responseClusterConfig); + config.append(Mustache.render($(indexTemplate).filter("#configuration-template").html(),formattedResponse)); + $('#nimbus-configuration-table td').jsonFormatter(); + //key, value + dtAutoPage("#nimbus-configuration-table", {}); + $('#nimbus-configuration [data-toggle="tooltip"]').tooltip(); + }); }); }); }); http://git-wip-us.apache.org/repos/asf/storm/blob/0d7b9757/storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/js/script.js ---------------------------------------------------------------------- diff --git a/storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/js/script.js b/storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/js/script.js index 40b49e0..49b3518 100644 --- a/storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/js/script.js +++ b/storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/js/script.js @@ -193,10 +193,12 @@ function formatConfigData(data) { } function formatErrorTimeSecs(response){ - var errors = response["componentErrors"]; - for(var i = 0 ; i < errors.length ; i++){ - var time = errors[i]['time']; - errors[i]['time'] = moment.utc(time).local().format("ddd, DD MMM YYYY HH:mm:ss Z"); + if('componentErrors' in response) { + var errors = response["componentErrors"]; + for(var i = 0 ; i < errors.length ; i++){ + var time = errors[i]['time']; + errors[i]['time'] = moment.utc(time).local().format("ddd, DD MMM YYYY HH:mm:ss Z"); + } } return response; } http://git-wip-us.apache.org/repos/asf/storm/blob/0d7b9757/storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/logviewer_search.html ---------------------------------------------------------------------- diff --git a/storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/logviewer_search.html b/storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/logviewer_search.html index 5fb8870..96e7d9c 100644 --- a/storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/logviewer_search.html +++ b/storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/logviewer_search.html @@ -40,12 +40,25 @@ <div class="row"> <div id="result"></div> </div> + <div class="row"> + <div id="json-response-error"></div> + </div> <div> <p id="page-rendered-at-timestamp"></p> </div> </div> </body> <script> +function jsError(other) { + try { + other(); + } catch (err) { + getStatic("/templates/json-error-template.html", function(template) { + $("#json-response-error").append(Mustache.render($(template).filter("#json-error-template").html(),{error: "JS Error", errorMessage: err})); + }); + } +} + $(document).ready(function() { var file = $.url("?file"); var search = $.url("?search"); @@ -54,17 +67,30 @@ $(document).ready(function() { file = decodeURIComponent(file); search = decodeURIComponent(search); + $.ajaxSetup({ + "error":function(jqXHR,textStatus,response) { + var errorJson = jQuery.parseJSON(jqXHR.responseText); + getStatic("/templates/json-error-template.html", function(template) { + $("#json-response-error").append(Mustache.render($(template).filter("#json-error-template").html(),errorJson)); + }); + } + }); + getStatic("/templates/logviewer-search-page-template.html", function(template) { - $("#search-form").append(Mustache.render($(template).filter("#search-single-file").html(),{file: file, search: search, isDaemon: isDaemon})); + jsError(function() { + $("#search-form").append(Mustache.render($(template).filter("#search-single-file").html(),{file: file, search: search, isDaemon:isDaemon})); + }); var result = $("#result"); var url = "/api/v1/search?file="+encodeURIComponent(file)+"&search-string="+search+"&start-byte-offset="+offset+"&is-daemon="+isDaemon; $.getJSON(url,function(response,status,jqXHR) { - response.file = file; - result.append(Mustache.render($(template).filter("#logviewer-search-result-template").html(),response)); - }); + jsError(function() { + response.file = file; + result.append(Mustache.render($(template).filter("#logviewer-search-result-template").html(),response)); + }); + }); }); - }); +}); getPageRenderedTimestamp("page-rendered-at-timestamp"); http://git-wip-us.apache.org/repos/asf/storm/blob/0d7b9757/storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/search_result.html ---------------------------------------------------------------------- diff --git a/storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/search_result.html b/storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/search_result.html index 30f09e4..9a46095 100644 --- a/storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/search_result.html +++ b/storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/search_result.html @@ -40,62 +40,92 @@ <div class="row"> <div id="result"></div> </div> + <div class="row"> + <div id="json-response-error"></div> + </div> <div> <p id="page-rendered-at-timestamp"></p> </div> </div> </body> <script> +function jsError(other) { + try { + other(); + } catch (err) { + getStatic("/templates/json-error-template.html", function(template) { + $("#json-response-error").append(Mustache.render($(template).filter("#json-error-template").html(),{error: "JS Error", errorMessage: err})); + }); + } +} + $(document).ready(function() { var id = $.url("?id"); var search = $.url("?search"); var count = $.url("?count") || 2; var searchArchived = $.url("?searchArchived") || ""; + $.ajaxSetup({ + "error":function(jqXHR,textStatus,response) { + var errorJson = jQuery.parseJSON(jqXHR.responseText); + getStatic("/templates/json-error-template.html", function(template) { + $("#json-response-error").append(Mustache.render($(template).filter("#json-error-template").html(),errorJson)); + }); + } + }); + getStatic("/templates/search-result-page-template.html", function(template) { $("#search-form").append(Mustache.render($(template).filter("#search-form-template").html(),{id: id, search: search, count: count, searchArchived: searchArchived})); var result = $("#result"); $.getJSON("/api/v1/topology-workers/"+id, function(response,status,jqXHR) { - for (var index in response.hostPortList) { - var host = response.hostPortList[index].host; - var port = response.hostPortList[index].port; - var elemId = "search-results-"+host.replace(/\./g,"-")+"-"+port; - response.hostPortList[index].elemId = elemId; - } - result.append(Mustache.render($(template).filter("#search-result-files-template").html(),response)); + jsError(function() { + for (var index in response.hostPortList) { + var host = response.hostPortList[index].host; + var port = response.hostPortList[index].port; + var elemId = "search-results-"+host.replace(/\./g,"-")+"-"+port; + response.hostPortList[index].elemId = elemId; + } + result.append(Mustache.render($(template).filter("#search-result-files-template").html(),response)); + }); var logviewerPort = response.logviewerPort; var logviewerScheme = response.logviewerScheme; for (var index in response.hostPortList) { - var host = response.hostPortList[index].host; - var port = response.hostPortList[index].port; - var elemId = response.hostPortList[index].elemId; - var file = id+"/"+port+"/worker.log"; - var searchURL = logviewerScheme + "://"+host+":"+logviewerPort+"/api/v1/search?file="+encodeURIComponent(file)+"&search-string="+search+"&num-matches="+count; - if (searchArchived != "") { - searchURL = logviewerScheme + "://"+host+":"+logviewerPort+"/api/v1/deepSearch/"+id+"?search-string="+search+"&num-matches="+count+"&search-archived=true&port="+port; - } + jsError(function() { + var host = response.hostPortList[index].host; + var port = response.hostPortList[index].port; + var elemId = response.hostPortList[index].elemId; + var file = id+"/"+port+"/worker.log"; + var searchURL = logviewerScheme + "://"+host+":"+logviewerPort+"/api/v1/search?file="+encodeURIComponent(file)+"&search-string="+search+"&num-matches="+count; + if (searchArchived != "") { + searchURL = logviewerScheme + "://"+host+":"+logviewerPort+"/api/v1/deepSearch/"+id+"?search-string="+search+"&num-matches="+count+"&search-archived=true&port="+port; + } - $.ajax({dataType: "json", - url: searchURL, - xhrFields: { - withCredentials: true - }, - success: $.proxy(function(data,status,jqXHR) { - data.file = this.file; - data.host = this.host; - data.port = this.port; - data.id = id; - data.logviewerPort = logviewerPort; - data.logviewerScheme = logviewerScheme; - var searchTemp = $(template).filter("#search-result-identified-template").html(); - if (searchArchived != "") { - searchTemp = $(template).filter("#deepsearch-result-identified-template").html(); - } - var rendered = Mustache.render(searchTemp, data); - $("#"+this.elemId).replaceWith(rendered); - }, {host: host, port: port, file: file, elemId: elemId}) + $.ajax({dataType: "json", + url: searchURL, + xhrFields: { + withCredentials: true + }, + success: $.proxy( + function(data,status,jqXHR) { + jsError(function() { + data.file = this.file; + data.host = this.host; + data.port = this.port; + data.id = id; + data.logviewerPort = logviewerPort; + data.logviewerScheme = logviewerScheme; + var searchTemp = $(template).filter("#search-result-identified-template").html(); + if (searchArchived != "") { + searchTemp = $(template).filter("#deepsearch-result-identified-template").html(); + } + var rendered = Mustache.render(searchTemp, data); + $("#"+this.elemId).replaceWith(rendered); + }); + }, + {host: host, port: port, file: file, elemId: elemId}) + }); }); } }); http://git-wip-us.apache.org/repos/asf/storm/blob/0d7b9757/storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/supervisor.html ---------------------------------------------------------------------- diff --git a/storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/supervisor.html b/storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/supervisor.html index 5489d5a..5de0dfb 100644 --- a/storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/supervisor.html +++ b/storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/supervisor.html @@ -61,6 +61,9 @@ <span id="toggle-sys" style="display: block;" class="js-only"></span> </div> </div> + <div class="row"> + <div id="json-response-error"></div> + </div> <div> <p id="page-rendered-at-timestamp"></p> </div> @@ -73,6 +76,16 @@ $(document).ajaxStop($.unblockUI); $(document).ajaxStart(function(){ $.blockUI({ message: '<img src="images/spinner.gif" /> <h3>Loading summary...</h3>'}); }); +function jsError(other) { + try { + other(); + } catch (err) { + getStatic("/templates/json-error-template.html", function(template) { + $("#json-response-error").append(Mustache.render($(template).filter("#json-error-template").html(),{error: "JS Error", errorMessage: err})); + }); + } +} + $(document).ready(function() { var supervisorId = $.url("?id"); var host = $.url("?host"); @@ -101,15 +114,6 @@ $(document).ready(function() { }); } }); - function jsError(other) { - try { - other(); - } catch (err) { - getStatic("/templates/json-error-template.html", function(template) { - $("#json-response-error").append(Mustache.render($(template).filter("#json-error-template").html(),{error: "JS Error", errorMessage: err})); - }); - } - } $.getJSON(url,function(response,status,jqXHR) { getStatic("/templates/supervisor-page-template.html", function(template) { http://git-wip-us.apache.org/repos/asf/storm/blob/0d7b9757/storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/topology.html ---------------------------------------------------------------------- diff --git a/storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/topology.html b/storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/topology.html index 0250242..0dda533 100644 --- a/storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/topology.html +++ b/storm-webapp/src/main/java/org/apache/storm/daemon/ui/WEB-INF/topology.html @@ -99,6 +99,16 @@ </body> <script> +function jsError(other) { + try { + other(); + } catch (err) { + getStatic("/templates/json-error-template.html", function(template) { + $("#json-response-error").append(Mustache.render($(template).filter("#json-error-template").html(),{error: "JS Error", errorMessage: err})); + }); + } +} + var toggleChangeLogLevel; function closeChangeLogLevel (){ @@ -251,6 +261,15 @@ $(document).ready(function() { var sys = $.cookies.get("sys") || "false"; var url = "/api/v1/topology/"+topologyId+"?sys="+sys; if(window) url += "&window="+window; + $.ajaxSetup({ + "error":function(jqXHR,textStatus,response) { + var errorJson = jQuery.parseJSON(jqXHR.responseText); + getStatic("/templates/json-error-template.html", function(template) { + $("#json-response-error").append(Mustache.render($(template).filter("#json-error-template").html(),errorJson)); + }); + } + }); + $.getJSON("/api/v1/cluster/configuration",function(response,status,jqXHR) { $.extend( $.fn.dataTable.defaults, { stateSave: true, @@ -266,14 +285,6 @@ $(document).ready(function() { }); renderToggleSys($("#toggle-switch")); - $.ajaxSetup({ - "error":function(jqXHR,textStatus,response) { - var errorJson = jQuery.parseJSON(jqXHR.responseText); - getStatic("/templates/json-error-template.html", function(template) { - $("#json-response-error").append(Mustache.render($(template).filter("#json-error-template").html(),errorJson)); - }); - } - }); $.getJSON(url,function(response,status,jqXHR) { var uiUser = $("#ui-user");
