You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@storm.apache.org by bo...@apache.org on 2018/09/13 19:28:23 UTC

[1/2] storm git commit: STORM-3219: Update javascript to report errors consistently

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 <ev...@yahoo-inc.com>
Authored: Tue Sep 11 15:02:44 2018 -0500
Committer: Robert (Bobby) Evans <ev...@yahoo-inc.com>
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");


[2/2] storm git commit: Merge branch 'STORM-3219' of https://github.com/revans2/incubator-storm into STORM-3219

Posted by bo...@apache.org.
Merge branch 'STORM-3219' of https://github.com/revans2/incubator-storm into STORM-3219

STORM-3219: Update javascript to report errors consistently

This is closed #2826


Project: http://git-wip-us.apache.org/repos/asf/storm/repo
Commit: http://git-wip-us.apache.org/repos/asf/storm/commit/5b0afe2f
Tree: http://git-wip-us.apache.org/repos/asf/storm/tree/5b0afe2f
Diff: http://git-wip-us.apache.org/repos/asf/storm/diff/5b0afe2f

Branch: refs/heads/master
Commit: 5b0afe2fc8c12a5815da4c2dc2b85b91a96f15d9
Parents: 834eb10 0d7b975
Author: Robert Evans <ev...@yahoo-inc.com>
Authored: Thu Sep 13 14:06:56 2018 -0500
Committer: Robert Evans <ev...@yahoo-inc.com>
Committed: Thu Sep 13 14:06:56 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(-)
----------------------------------------------------------------------