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 2014/10/15 18:15:16 UTC
[03/50] git commit: Merge remote-tracking branch 'upstream/master'
into STORM-439
Merge remote-tracking branch 'upstream/master' into STORM-439
Conflicts:
storm-core/src/ui/public/js/visualization.js
storm-core/src/ui/public/templates/component-page-template.html
storm-core/src/ui/public/templates/index-page-template.html
storm-core/src/ui/public/templates/topology-page-template.html
Project: http://git-wip-us.apache.org/repos/asf/storm/repo
Commit: http://git-wip-us.apache.org/repos/asf/storm/commit/55231b27
Tree: http://git-wip-us.apache.org/repos/asf/storm/tree/55231b27
Diff: http://git-wip-us.apache.org/repos/asf/storm/diff/55231b27
Branch: refs/heads/security
Commit: 55231b27922a7cccf7592ebc82de37791a097a07
Parents: cccd4a5 b0974a3
Author: Parth Brahmbhatt <br...@gmail.com>
Authored: Wed Sep 24 13:43:09 2014 -0700
Committer: Parth Brahmbhatt <br...@gmail.com>
Committed: Wed Sep 24 13:43:09 2014 -0700
----------------------------------------------------------------------
CHANGELOG.md | 17 +
DEVELOPER.md | 2 +-
LICENSE | 25 +
README.markdown | 7 +-
STORM-UI-REST-API.md | 4 +-
dev-tools/jira-github-join.py | 2 +-
.../multilang/resources/asyncSplitsentence.js | 32 +
.../multilang/resources/randomsentence.js | 75 +++
.../multilang/resources/splitsentence.js | 26 +
.../storm-starter/multilang/resources/storm.js | 349 +++++++++++
.../storm/starter/WordCountTopologyNode.java | 121 ++++
.../src/jvm/storm/kafka/KafkaUtils.java | 5 +-
.../src/jvm/storm/kafka/PartitionManager.java | 5 +-
pom.xml | 2 +-
storm-core/pom.xml | 53 +-
.../src/clj/backtype/storm/daemon/common.clj | 3 +
.../src/clj/backtype/storm/daemon/nimbus.clj | 4 +-
storm-core/src/clj/backtype/storm/event.clj | 3 +
.../backtype/storm/scheduler/EvenScheduler.clj | 2 +-
storm-core/src/clj/backtype/storm/testing.clj | 2 +-
storm-core/src/clj/backtype/storm/util.clj | 2 +-
storm-core/src/dev/resources/storm.js | 349 +++++++++++
storm-core/src/dev/resources/tester_bolt.js | 27 +
storm-core/src/dev/resources/tester_spout.js | 58 ++
.../src/jvm/backtype/storm/StormSubmitter.java | 16 +
.../backtype/storm/messaging/netty/Client.java | 27 +-
.../StormBoundedExponentialBackoffRetry.java | 74 +++
.../src/jvm/backtype/storm/utils/Utils.java | 30 +-
storm-core/src/ui/public/component.html | 6 +
storm-core/src/ui/public/images/spinner.gif | Bin 0 -> 23470 bytes
storm-core/src/ui/public/index.html | 6 +
.../src/ui/public/js/jquery.blockUI.min.js | 6 +
storm-core/src/ui/public/js/script.js | 11 +
storm-core/src/ui/public/js/visualization.js | 14 +-
.../templates/component-page-template.html | 593 ++++++++++++++-----
.../public/templates/index-page-template.html | 219 +++++--
.../templates/topology-page-template.html | 195 +++++-
storm-core/src/ui/public/topology.html | 6 +
.../test/clj/backtype/storm/multilang_test.clj | 55 +-
.../test/clj/backtype/storm/scheduler_test.clj | 21 +
.../test/clj/backtype/storm/utils_test.clj | 3 +-
...StormBoundedExponentialBackoffRetryTest.java | 101 ++++
42 files changed, 2265 insertions(+), 293 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/storm/blob/55231b27/storm-core/src/ui/public/component.html
----------------------------------------------------------------------
diff --cc storm-core/src/ui/public/component.html
index 21a5e76,6fa998f..fddb9ef
--- a/storm-core/src/ui/public/component.html
+++ b/storm-core/src/ui/public/component.html
@@@ -23,8 -24,9 +24,9 @@@
<script src="/js/jquery.tablesorter.min.js" type="text/javascript"></script>
<script src="/js/jquery.cookies.2.2.0.min.js" type="text/javascript"></script>
<script src="/js/jquery.mustache.js" type="text/javascript"></script>
-<script src="/js/purl.js" type="text/javascript"></script>
+<script src="/js/url.min.js" type="text/javascript"></script>
<script src="/js/bootstrap-twipsy.js" type="text/javascript"></script>
+ <script src="/js/jquery.blockUI.min.js" type="text/javascript"></script>
<script src="/js/script.js" type="text/javascript"></script>
<script src="/js/moment.min.js" type="text/javascript"></script>
</head>
@@@ -46,10 -48,14 +48,14 @@@
</div>
<p id="toggle-switch" style="display: block;" class="js-only"></p>
<script>
+ $(document).ajaxStop($.unblockUI);
+ $(document).ajaxStart(function(){
+ $.blockUI({ message: '<img src="images/spinner.gif" /> <h3>Loading component summary...</h3>'});
+ });
$(document).ready(function() {
- var componentId = $.url().param("id");
- var topologyId = $.url().param("topology_id");
- var window = $.url().param("window");
+ var componentId = $.url("?id");
+ var topologyId = $.url("?topology_id");
+ var window = $.url("?window");
var sys = $.cookies.get("sys") || "false";
var url = "/api/v1/topology/"+topologyId+"/component/"+componentId+"?sys="+sys;
if(window) url += "&window="+window;
http://git-wip-us.apache.org/repos/asf/storm/blob/55231b27/storm-core/src/ui/public/js/script.js
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/storm/blob/55231b27/storm-core/src/ui/public/js/visualization.js
----------------------------------------------------------------------
diff --cc storm-core/src/ui/public/js/visualization.js
index 6d00901,7cec697..1e1c4d6
--- a/storm-core/src/ui/public/js/visualization.js
+++ b/storm-core/src/ui/public/js/visualization.js
@@@ -389,10 -389,11 +389,11 @@@ function show_visualization(sys)
should_update = true;
var update_freq_ms = 10000;
- var update = function(should_rechoose){
+ var update = function(should_rechoose) {
+ if(should_update) {
$.ajax({
- url: "/api/v1/topology/" + $.url().param("id") + "/visualization",
+ url: "/api/v1/topology/"+$.url("?id")+"/visualization",
- success: function(data, status, jqXHR) {
+ success: function (data, status, jqXHR) {
topology_data = data;
update_data(topology_data, sys);
sys.renderer.signal_update();
http://git-wip-us.apache.org/repos/asf/storm/blob/55231b27/storm-core/src/ui/public/templates/component-page-template.html
----------------------------------------------------------------------
diff --cc storm-core/src/ui/public/templates/component-page-template.html
index f912bd3,f718967..1e916e3
--- a/storm-core/src/ui/public/templates/component-page-template.html
+++ b/storm-core/src/ui/public/templates/component-page-template.html
@@@ -15,159 -15,474 +15,474 @@@
limitations under the License.
-->
<script id="component-summary-template" type="text/html">
- <h2>Component summary</h2>
- <table><thead><tr><th><span class="tip right" title="The ID assigned to a the Component by the Topology.">Id</span></th><th><span class="tip above" title="The name given to the topology by when it was submitted. Click the name to view the Topology's information.">Topology</span></th><th><span class="tip above" title="Executors are threads in a Worker process.">Executors</span></th><th><span class="tip above" title="A Task is an instance of a Bolt or Spout. The number of Tasks is almost always equal to the number of Executors.">Tasks</span></th></tr></thead>
- <tbody>
- <tr>
- <td>{{id}}</td>
- <td><a href="/topology.html?id={{encodedTopologyId}}">{{name}}</a></td>
- <td>{{executors}}</td>
- <td>{{tasks}}</td>
- </tbody>
- </table>
+ <h2>Component summary</h2>
+ <table>
+ <thead>
+ <tr>
+ <th>
+ <span class="tip right" title="The ID assigned to a the Component by the Topology.">
+ Id
+ </span>
+ </th>
+ <th>
+ <span class="tip above" title="The name given to the topology by when it was submitted. Click the name to view the Topology's information.">
+ Topology
+ </span>
+ </th>
+ <th>
+ <span class="tip above" title="Executors are threads in a Worker process.">
+ Executors
+ </span>
+ </th>
+ <th>
+ <span class="tip above" title="A Task is an instance of a Bolt or Spout. The number of Tasks is almost always equal to the number of Executors.">
+ Tasks
+ </span>
+ </th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{id}}</td>
- <td><a href="/topology.html?id={{topologyId}}">{{name}}</a></td>
++ <td><a href="/topology.html?id={{encodedTopologyId}}">{{name}}</a></td>
+ <td>{{executors}}</td>
+ <td>{{tasks}}</td>
+ </tbody>
+ </table>
</script>
<script id="spout-stats-detail-template" type="text/html">
- <h2>Spout stats</h2>
- <table class="zebra-striped" id="spout-stats-table"><thead><tr><th class="header headerSortDown"><span class="tip right" title="The past period of time for which the statistics apply. Click on a value to set the window for this page.">Window</span></th><th class="header"><span class="tip above" title="The number of Tuples emitted.">Emitted</span></th><th class="header"><span data-original-title="The number of Tuples emitted that sent to one or more bolts." class="tip above">Transferred</span></th><th class="header"><span class="tip above" title="The average time a Tuple "tree" takes to be completely processed by the Topology. A value of 0 is expected if no acking is done.">Complete latency (ms)</span></th><th class="header"><span class="tip above" title="The number of Tuple "trees" successfully processed. A value of 0 is expected if no acking is done.">Acked</span></th><th class="header"><span data-original-title="The number of Tuple "trees" that were
explicitly failed or timed out before acking was completed. A value of 0 is expected if no acking is done." class="tip left">Failed</span></th></tr></thead>
- <tbody>
- {{#spoutSummary}}
- <tr>
- <td><a href="/component.html?id={{encodedId}}&topology_id={{encodedTopologyId}}&window={{window}}">{{windowPretty}}</a></td>
- <td>{{transferred}}</td>
- <td>{{emitted}}</td>
- <td>{{completeLatency}}</td>
- <td>{{acked}}</td>
- <td>{{failed}}</td>
- </tr>
- {{/spoutSummary}}
- </tbody>
- </table>
+ <h2>Spout stats</h2>
+ <table class="zebra-striped" id="spout-stats-table">
+ <thead>
+ <tr>
+ <th class="header headerSortDown">
+ <span class="tip right" title="The past period of time for which the statistics apply. Click on a value to set the window for this page.">
+ Window
+ </span>
+ </th>
+ <th class="header">
+ <span class="tip above" title="The number of Tuples emitted.">
+ Emitted
+ </span>
+ </th>
+ <th class="header">
+ <span data-original-title="The number of Tuples emitted that sent to one or more bolts." class="tip above">
+ Transferred
+ </span>
+ </th>
+ <th class="header">
+ <span class="tip above" title="The average time a Tuple "tree" takes to be completely processed by the Topology. A value of 0 is expected if no acking is done.">
+ Complete latency (ms)
+ </span>
+ </th>
+ <th class="header">
+ <span class="tip above" title="The number of Tuple "trees" successfully processed. A value of 0 is expected if no acking is done.">
+ Acked
+ </span>
+ </th>
+ <th class="header">
+ <span data-original-title="The number of Tuple "trees" that were explicitly failed or timed out before acking was completed. A value of 0 is expected if no acking is done." class="tip left">
+ Failed
+ </span>
+ </th>
+ </tr>
+ </thead>
+ <tbody>
+ {{#spoutSummary}}
+ <tr>
- <td><a href="/component.html?id={{id}}&topology_id={{topologyId}}&window={{window}}">{{windowPretty}}</a></td>
++ <td><a href="/component.html?id={{encodedId}}&topology_id={{encodedTopologyId}}&window={{window}}">{{windowPretty}}</a></td>
+ <td>{{transferred}}</td>
+ <td>{{emitted}}</td>
+ <td>{{completeLatency}}</td>
+ <td>{{acked}}</td>
+ <td>{{failed}}</td>
+ </tr>
+ {{/spoutSummary}}
+ </tbody>
+ </table>
</script>
<script id="output-stats-template" type="text/html">
- <h2>Output stats ({{windowHint}})</h2>
- <table class="zebra-striped" id="output-stats-table"><thead><tr><th class="header headerSortDown"><span data-original-title="The name of the Tuple stream given in the Topolgy, or "default" if none was given." class="tip right">Stream</span></th><th class="header"><span class="tip above" title="The number of Tuples emitted.">Emitted</span></th><th class="header"><span data-original-title="The number of Tuples emitted that sent to one or more bolts." class="tip above">Transferred</span></th><th class="header"><span data-original-title="The average time a Tuple "tree" takes to be completely processed by the Topology. A value of 0 is expected if no acking is done." class="tip above">Complete latency (ms)</span></th><th class="header"><span data-original-title="The number of Tuple "trees" successfully processed. A value of 0 is expected if no acking is done." class="tip above">Acked</span></th><th class="header"><span data-original-title="The number of Tupl
e "trees" that were explicitly failed or timed out before acking was completed. A value of 0 is expected if no acking is done." class="tip left">Failed</span></th></tr></thead>
- <tbody>
- {{#outputStats}}
- <tr>
- <td>{{stream}}</td>
- <td>{{emitted}}</td>
- <td>{{transferred}}</td>
- <td>{{completeLatency}}</td>
- <td>{{acked}}</td>
- <td>{{failed}}</td>
- </tr>
- {{/outputStats}}
- </tbody>
- </table>
+ <h2>Output stats ({{windowHint}})</h2>
+ <table class="zebra-striped" id="output-stats-table">
+ <thead>
+ <tr>
+ <th class="header headerSortDown">
+ <span data-original-title="The name of the Tuple stream given in the Topolgy, or "default" if none was given." class="tip right">
+ Stream
+ </span>
+ </th>
+ <th class="header">
+ <span class="tip above" title="The number of Tuples emitted.">
+ Emitted
+ </span>
+ </th>
+ <th class="header">
+ <span data-original-title="The number of Tuples emitted that sent to one or more bolts." class="tip above">
+ Transferred
+ </span>
+ </th>
+ <th class="header">
+ <span data-original-title="The average time a Tuple "tree" takes to be completely processed by the Topology. A value of 0 is expected if no acking is done." class="tip above">
+ Complete latency (ms)
+ </span>
+ </th>
+ <th class="header">
+ <span data-original-title="The number of Tuple "trees" successfully processed. A value of 0 is expected if no acking is done." class="tip above">
+ Acked
+ </span>
+ </th>
+ <th class="header">
+ <span data-original-title="The number of Tuple "trees" that were explicitly failed or timed out before acking was completed. A value of 0 is expected if no acking is done." class="tip left">
+ Failed
+ </span>
+ </th>
+ </tr>
+ </thead>
+ <tbody>
+ {{#outputStats}}
+ <tr>
+ <td>{{stream}}</td>
+ <td>{{emitted}}</td>
+ <td>{{transferred}}</td>
+ <td>{{completeLatency}}</td>
+ <td>{{acked}}</td>
+ <td>{{failed}}</td>
+ </tr>
+ {{/outputStats}}
+ </tbody>
+ </table>
</script>
<script id="executor-stats-template" type="text/html">
- <h2>Executors ({{windowHint}})</h2>
- <table class="zebra-striped" id="executor-stats-table"><thead><tr><th class="header headerSortDown"><span class="tip right" title="The unique executor ID.">Id</span></th><th class="header"><span class="tip right" title="The length of time an Executor (thread) has been alive.">Uptime</span></th><th class="header"><span class="tip above" title="The hostname reported by the remote host. (Note that this hostname is not the result of a reverse lookup at the Nimbus node.)">Host</span></th><th class="header"><span data-original-title="The port number used by the Worker to which an Executor is assigned. Click on the port number to open the logviewer page for this Worker." class="tip above">Port</span></th><th class="header"><span data-original-title="The number of Tuples emitted." class="tip above">Emitted</span></th><th class="header"><span class="tip above" title="The number of Tuples emitted that sent to one or more bolts.">Transferred</span></th><th class="header"><span class="tip abov
e" title="The average time a Tuple "tree" takes to be completely processed by the Topology. A value of 0 is expected if no acking is done.">Complete latency (ms)</span></th><th class="header"><span class="tip above" title="The number of Tuple "trees" successfully processed. A value of 0 is expected if no acking is done.">Acked</span></th><th class="header"><span data-original-title="The number of Tuple "trees" that were explicitly failed or timed out before acking was completed. A value of 0 is expected if no acking is done." class="tip left">Failed</span></th></tr></thead>
- <tbody>
- {{#executorStats}}
- <tr>
- <td>{{id}}</td>
- <td>{{uptime}}</td>
- <td>{{host}}</td>
- <td><a href="{{workerLogLink}}">{{port}}</a></td>
- <td>{{emitted}}</td>
- <td>{{transferred}}</td>
- <td>{{completeLatency}}</td>
- <td>{{acked}}</td>
- <td>{{failed}}</td>
- </tr>
- {{/executorStats}}
- </tbody>
- </table>
+ <h2>Executors ({{windowHint}})</h2>
+ <table class="zebra-striped" id="executor-stats-table">
+ <thead>
+ <tr>
+ <th class="header headerSortDown">
+ <span class="tip right" title="The unique executor ID.">
+ Id
+ </span>
+ </th>
+ <th class="header">
+ <span class="tip right" title="The length of time an Executor (thread) has been alive.">
+ Uptime
+ </span>
+ </th>
+ <th class="header">
+ <span class="tip above" title="The hostname reported by the remote host. (Note that this hostname is not the result of a reverse lookup at the Nimbus node.)">
+ Host
+ </span>
+ </th>
+ <th class="header">
+ <span data-original-title="The port number used by the Worker to which an Executor is assigned. Click on the port number to open the logviewer page for this Worker." class="tip above">
+ Port
+ </span>
+ </th>
+ <th class="header">
+ <span data-original-title="The number of Tuples emitted." class="tip above">
+ Emitted
+ </span>
+ </th>
+ <th class="header">
+ <span class="tip above" title="The number of Tuples emitted that sent to one or more bolts.">
+ Transferred
+ </span>
+ </th>
+ <th class="header">
+ <span class="tip above" title="The average time a Tuple "tree" takes to be completely processed by the Topology. A value of 0 is expected if no acking is done.">
+ Complete latency (ms)
+ </span>
+ </th>
+ <th class="header">
+ <span class="tip above" title="The number of Tuple "trees" successfully processed. A value of 0 is expected if no acking is done.">
+ Acked
+ </span>
+ </th>
+ <th class="header">
+ <span data-original-title="The number of Tuple "trees" that were explicitly failed or timed out before acking was completed. A value of 0 is expected if no acking is done." class="tip left">
+ Failed
+ </span>
+ </th>
+ </tr>
+ </thead>
+ <tbody>
+ {{#executorStats}}
+ <tr>
+ <td>{{id}}</td>
+ <td>{{uptime}}</td>
+ <td>{{host}}</td>
+ <td><a href="{{workerLogLink}}">{{port}}</a></td>
+ <td>{{emitted}}</td>
+ <td>{{transferred}}</td>
+ <td>{{completeLatency}}</td>
+ <td>{{acked}}</td>
+ <td>{{failed}}</td>
+ </tr>
+ {{/executorStats}}
+ </tbody>
+ </table>
</script>
<script id="bolt-stats-template" type="text/html">
- <h2>Bolt stats</h2>
- <table class="zebra-striped" id="bolt-stats-table"><thead><tr><th class="header headerSortDown"><span class="tip right" title="The past period of time for which the statistics apply. Click on a value to set the window for this page.">Window</span></th><th class="header"><span class="tip above" title="The number of Tuples emitted.">Emitted</span></th><th class="header"><span class="tip above" title="The number of Tuples emitted that sent to one or more bolts.">Transferred</span></th><th class="header"><span data-original-title="The average time a Tuple spends in the execute method. The execute method may complete without sending an Ack for the tuple." class="tip above">Execute latency (ms)</span></th><th class="header"><span class="tip above" title="The number of incoming Tuples processed.">Executed</span></th><th class="header"><span data-original-title="The average time it takes to Ack a Tuple after it is first received. Bolts that join, aggregate or batch may not Ack a tuple unt
il a number of other Tuples have been received." class="tip above">Process latency (ms)</span></th><th class="header"><span data-original-title="The number of Tuples acknowledged by this Bolt." class="tip above">Acked</span></th><th class="header"><span data-original-title="The number of tuples Failed by this Bolt." class="tip left">Failed</span></th></tr></thead>
- <tbody>
- {{#boltStats}}
- <tr>
- <td><a href="/component.html?id={{encodedId}}&topology_id={{encodedTopologyId}}&window={{window}}">{{windowPretty}}</a></td>
- <td>{{emitted}}</td>
- <td>{{transferred}}</td>
- <td>{{executeLatency}}</td>
- <td>{{executed}}</td>
- <td>{{processLatency}}</td>
- <td>{{acked}}</td>
- <td>{{failed}}</td>
- </tr>
- {{/boltStats}}
- </tbody>
- </table>
+ <h2>Bolt stats</h2>
+ <table class="zebra-striped" id="bolt-stats-table">
+ <thead>
+ <tr>
+ <th class="header headerSortDown">
+ <span class="tip right" title="The past period of time for which the statistics apply. Click on a value to set the window for this page.">
+ Window
+ </span>
+ </th>
+ <th class="header">
+ <span class="tip above" title="The number of Tuples emitted.">
+ Emitted
+ </span>
+ </th>
+ <th class="header">
+ <span class="tip above" title="The number of Tuples emitted that sent to one or more bolts.">
+ Transferred
+ </span>
+ </th>
+ <th class="header">
+ <span data-original-title="The average time a Tuple spends in the execute method. The execute method may complete without sending an Ack for the tuple." class="tip above">
+ Execute latency (ms)
+ </span>
+ </th>
+ <th class="header">
+ <span class="tip above" title="The number of incoming Tuples processed.">
+ Executed
+ </span>
+ </th>
+ <th class="header">
+ <span data-original-title="The average time it takes to Ack a Tuple after it is first received. Bolts that join, aggregate or batch may not Ack a tuple until a number of other Tuples have been received." class="tip above">
+ Process latency (ms)
+ </span>
+ </th>
+ <th class="header">
+ <span data-original-title="The number of Tuples acknowledged by this Bolt." class="tip above">
+ Acked
+ </span>
+ </th>
+ <th class="header">
+ <span data-original-title="The number of tuples Failed by this Bolt." class="tip left">
+ Failed
+ </span>
+ </th>
+ </tr>
+ </thead>
+ <tbody>
+ {{#boltStats}}
+ <tr>
- <td><a href="/component.html?id={{id}}&topology_id={{topologyId}}&window={{window}}">{{windowPretty}}</a></td>
++ <td><a href="/component.html?id={{encodedId}}&topology_id={{encodedTopologyId}}&window={{window}}">{{windowPretty}}</a></td>
+ <td>{{emitted}}</td>
+ <td>{{transferred}}</td>
+ <td>{{executeLatency}}</td>
+ <td>{{executed}}</td>
+ <td>{{processLatency}}</td>
+ <td>{{acked}}</td>
+ <td>{{failed}}</td>
+ </tr>
+ {{/boltStats}}
+ </tbody>
+ </table>
</script>
<script id="bolt-input-stats-template" type="text/html">
- <h2>Input stats ({{windowHint}})</h2>
- <table class="zebra-striped" id="bolt-input-stats-table"><thead><tr><th class="header headerSortDown"><span class="tip right" title="The ID assigned to a the Component by the Topology.">Component</span></th><th class="header"><span class="tip right" title="The name of the Tuple stream given in the Topolgy, or "default" if none was given.">Stream</span></th><th class="header"><span class="tip above" title="The average time a Tuple spends in the execute method. The execute method may complete without sending an Ack for the tuple.">Execute latency (ms)</span></th><th class="header"><span class="tip above" title="The number of incoming Tuples processed.">Executed</span></th><th class="header"><span data-original-title="The average time it takes to Ack a Tuple after it is first received. Bolts that join, aggregate or batch may not Ack a tuple until a number of other Tuples have been received." class="tip above">Process latency (ms)</span></th><th class="header"><span class="t
ip above" title="The number of Tuples acknowledged by this Bolt.">Acked</span></th><th class="header"><span data-original-title="The number of tuples Failed by this Bolt." class="tip left">Failed</span></th></tr></thead>
- <tbody>
- {{#inputStats}}
- <tr>
- <td>{{component}}</td>
- <td>{{stream}}</td>
- <td>{{executeLatency}}</td>
- <td>{{executed}}</td>
- <td>{{processLatency}}</td>
- <td>{{acked}}</td>
- <td>{{failed}}</td>
- </tr>
- {{/inputStats}}
- </tbody>
- </table>
+ <h2>Input stats ({{windowHint}})</h2>
+ <table class="zebra-striped" id="bolt-input-stats-table">
+ <thead>
+ <tr>
+ <th class="header headerSortDown">
+ <span class="tip right" title="The ID assigned to a the Component by the Topology.">
+ Component
+ </span>
+ </th>
+ <th class="header">
+ <span class="tip right" title="The name of the Tuple stream given in the Topolgy, or "default" if none was given.">
+ Stream
+ </span>
+ </th>
+ <th class="header">
+ <span class="tip above" title="The average time a Tuple spends in the execute method. The execute method may complete without sending an Ack for the tuple.">
+ Execute latency (ms)
+ </span>
+ </th>
+ <th class="header">
+ <span class="tip above" title="The number of incoming Tuples processed.">
+ Executed
+ </span>
+ </th>
+ <th class="header">
+ <span data-original-title="The average time it takes to Ack a Tuple after it is first received. Bolts that join, aggregate or batch may not Ack a tuple until a number of other Tuples have been received." class="tip above">
+ Process latency (ms)
+ </span>
+ </th>
+ <th class="header">
+ <span class="tip above" title="The number of Tuples acknowledged by this Bolt.">
+ Acked
+ </span>
+ </th>
+ <th class="header">
+ <span data-original-title="The number of tuples Failed by this Bolt." class="tip left">
+ Failed
+ </span>
+ </th>
+ </tr>
+ </thead>
+ <tbody>
+ {{#inputStats}}
+ <tr>
+ <td>{{component}}</td>
+ <td>{{stream}}</td>
+ <td>{{executeLatency}}</td>
+ <td>{{executed}}</td>
+ <td>{{processLatency}}</td>
+ <td>{{acked}}</td>
+ <td>{{failed}}</td>
+ </tr>
+ {{/inputStats}}
+ </tbody>
+ </table>
</script>
<script id="bolt-output-stats-template" type="text/html">
- <h2>Output stats ({{windowHint}})</h2>
- <table class="zebra-striped" id="bolt-output-stats-table"><thead><tr><th class="header headerSortDown"><span class="tip right" title="The name of the Tuple stream given in the Topolgy, or "default" if none was given.">Stream</span></th><th class="header"><span class="tip above" title="The number of Tuples emitted.">Emitted</span></th><th class="header"><span class="tip above" title="The number of Tuples emitted that sent to one or more bolts.">Transferred</span></th></tr></thead>
- <tbody>
- {{#outputStats}}
- <tr>
- <td>{{stream}}</td>
- <td>{{emitted}}</td>
- <td>{{transferred}}</td>
- </tr>
- {{/outputStats}}
- </tbody>
- </table>
+ <h2>Output stats ({{windowHint}})</h2>
+ <table class="zebra-striped" id="bolt-output-stats-table">
+ <thead>
+ <tr>
+ <th class="header headerSortDown">
+ <span class="tip right" title="The name of the Tuple stream given in the Topolgy, or "default" if none was given.">
+ Stream
+ </span>
+ </th>
+ <th class="header">
+ <span class="tip above" title="The number of Tuples emitted.">
+ Emitted
+ </span>
+ </th>
+ <th class="header">
+ <span class="tip above" title="The number of Tuples emitted that sent to one or more bolts.">
+ Transferred
+ </span>
+ </th>
+ </tr>
+ </thead>
+ <tbody>
+ {{#outputStats}}
+ <tr>
+ <td>{{stream}}</td>
+ <td>{{emitted}}</td>
+ <td>{{transferred}}</td>
+ </tr>
+ {{/outputStats}}
+ </tbody>
+ </table>
</script>
<script id="bolt-executor-template" type="text/html">
- <h2>Executors</h2>
- <table class="zebra-striped" id="bolt-executor-table"><thead><tr><th class="header headerSortDown"><span class="tip right" title="The unique executor ID.">Id</span></th><th class="header"><span data-original-title="The length of time an Executor (thread) has been alive." class="tip right">Uptime</span></th><th class="header"><span class="tip above" title="The hostname reported by the remote host. (Note that this hostname is not the result of a reverse lookup at the Nimbus node.)">Host</span></th><th class="header"><span class="tip above" title="The port number used by the Worker to which an Executor is assigned. Click on the port number to open the logviewer page for this Worker.">Port</span></th><th class="header"><span class="tip above" title="The number of Tuples emitted.">Emitted</span></th><th class="header"><span class="tip above" title="The number of Tuples emitted that sent to one or more bolts.">Transferred</span></th><th class="header"><span class="tip above" title="If th
is is around 1.0, the corresponding Bolt is running as fast as it can, so you may want to increase the Bolt's parallelism. This is (number executed * average execute latency) / measurement time.">Capacity (last 10m)</span></th><th class="header"><span data-original-title="The average time a Tuple spends in the execute method. The execute method may complete without sending an Ack for the tuple." class="tip above">Execute latency (ms)</span></th><th class="header"><span class="tip above" title="The number of incoming Tuples processed.">Executed</span></th><th class="header"><span data-original-title="The average time it takes to Ack a Tuple after it is first received. Bolts that join, aggregate or batch may not Ack a tuple until a number of other Tuples have been received." class="tip above">Process latency (ms)</span></th><th class="header"><span data-original-title="The number of Tuples acknowledged by this Bolt." class="tip above">Acked</span></th><th class="header"><span data-or
iginal-title="The number of tuples Failed by this Bolt." class="tip left">Failed</span></th></tr></thead>
- <tbody>
- {{#executorStats}}
- <tr>
- <td>{{id}}}</td>
- <td>{{uptime}}</td>
- <td>{{host}}</td>
- <td><a href="{{workerLogLink}}">{{port}}</a></td>
- <td>{{emitted}}</td>
- <td>{{transferred}}</td>
- <td>{{capacity}}</td>
- <td>{{executeLatency}}</td>
- <td>{{executed}}</td>
- <td>{{processLatency}}</td>
- <td>{{acked}}</td>
- <td>{{failed}}</td>
- </tr>
- {{/executorStats}}
- </tbody>
- </table>
+ <h2>Executors</h2>
+ <table class="zebra-striped" id="bolt-executor-table">
+ <thead>
+ <tr>
+ <th class="header headerSortDown">
+ <span class="tip right" title="The unique executor ID.">
+ Id
+ </span>
+ </th>
+ <th class="header">
+ <span data-original-title="The length of time an Executor (thread) has been alive." class="tip right">
+ Uptime
+ </span>
+ </th>
+ <th class="header">
+ <span class="tip above" title="The hostname reported by the remote host. (Note that this hostname is not the result of a reverse lookup at the Nimbus node.)">
+ Host
+ </span>
+ </th>
+ <th class="header">
+ <span class="tip above" title="The port number used by the Worker to which an Executor is assigned. Click on the port number to open the logviewer page for this Worker.">
+ Port
+ </span>
+ </th>
+ <th class="header">
+ <span class="tip above" title="The number of Tuples emitted.">
+ Emitted
+ </span>
+ </th>
+ <th class="header">
+ <span class="tip above" title="The number of Tuples emitted that sent to one or more bolts.">
+ Transferred
+ </span>
+ </th>
+ <th class="header">
+ <span class="tip above" title="If this is around 1.0, the corresponding Bolt is running as fast as it can, so you may want to increase the Bolt's parallelism. This is (number executed * average execute latency) / measurement time.">
+ Capacity (last 10m)
+ </span>
+ </th>
+ <th class="header">
+ <span data-original-title="The average time a Tuple spends in the execute method. The execute method may complete without sending an Ack for the tuple." class="tip above">
+ Execute latency (ms)
+ </span>
+ </th>
+ <th class="header">
+ <span class="tip above" title="The number of incoming Tuples processed.">
+ Executed
+ </span>
+ </th>
+ <th class="header">
+ <span data-original-title="The average time it takes to Ack a Tuple after it is first received. Bolts that join, aggregate or batch may not Ack a tuple until a number of other Tuples have been received." class="tip above">
+ Process latency (ms)
+ </span>
+ </th>
+ <th class="header">
+ <span data-original-title="The number of Tuples acknowledged by this Bolt." class="tip above">
+ Acked
+ </span>
+ </th>
+ <th class="header">
+ <span data-original-title="The number of tuples Failed by this Bolt." class="tip left">
+ Failed
+ </span>
+ </th>
+ </tr>
+ </thead>
+ <tbody>
+ {{#executorStats}}
+ <tr>
+ <td>{{id}}}</td>
+ <td>{{uptime}}</td>
+ <td>{{host}}</td>
+ <td><a href="{{workerLogLink}}">{{port}}</a></td>
+ <td>{{emitted}}</td>
+ <td>{{transferred}}</td>
+ <td>{{capacity}}</td>
+ <td>{{executeLatency}}</td>
+ <td>{{executed}}</td>
+ <td>{{processLatency}}</td>
+ <td>{{acked}}</td>
+ <td>{{failed}}</td>
+ </tr>
+ {{/executorStats}}
+ </tbody>
+ </table>
</script>
<script id="component-errors-template" type="text/html">
- <h2>Errors</h2>
- <table class="zebra-striped" id="component-errors-table"><thead><tr><th>Time</th><th>Error Host</th><th>Error Port</th><th>Error</th></tr></thead>
- <tbody>
- {{#componentErrors}}
- <tr>
- <td>{{time}}</td>
- <td>{{errorHost}}</td>
- <td><a href="{{errorWorkerLogLink}}">{{errorPort}}</a></td>
- <td>
- <span id="{{errorLapsedSecs}}" class="errorSpan">{{error}}</span>
- </td>
- </tr>
- {{/componentErrors}}
- </tbody>
- </table>
+ <h2>Errors</h2>
+ <table class="zebra-striped" id="component-errors-table">
+ <thead>
+ <tr>
+ <th>Time</th>
+ <th>Error Host</th>
+ <th>Error Port</th>
+ <th>Error</th>
+ </tr>
+ </thead>
+ <tbody>
+ {{#componentErrors}}
+ <tr>
+ <td>{{time}}</td>
+ <td>{{errorHost}}</td>
+ <td><a href="{{errorWorkerLogLink}}">{{errorPort}}</a></td>
+ <td>
+ <span id="{{errorLapsedSecs}}" class="errorSpan">{{error}}</span>
+ </td>
+ </tr>
+ {{/componentErrors}}
+ </tbody>
+ </table>
</script>
http://git-wip-us.apache.org/repos/asf/storm/blob/55231b27/storm-core/src/ui/public/templates/index-page-template.html
----------------------------------------------------------------------
diff --cc storm-core/src/ui/public/templates/index-page-template.html
index d0db1bf,d249fac..e3aab5e
--- a/storm-core/src/ui/public/templates/index-page-template.html
+++ b/storm-core/src/ui/public/templates/index-page-template.html
@@@ -31,36 -75,103 +75,103 @@@
</table>
</script>
<script id="topology-summary-template" type="text/html">
- <table class="zebra-striped" id="topology-summary-table">
- <thead><tr><th><span class="tip right" title="The name given to the topology by when it was submitted. Click the name to view the Topology's information.">Name</span></th><th><span class="tip right" title="The unique ID given to a Topology each time it is launched.">Id</span></th><th><span class="tip above" title="The status can be one of ACTIVE, INACTIVE, KILLED, or REBALANCING.">Status</span></th><th><span class="tip above" title="The time since the Topology was submitted.">Uptime</span></th><th><span class="tip above" title="The number of Workers (processes).">Num workers</span></th><th><span class="tip above" title="Executors are threads in a Worker process.">Num executors</span></th><th><span class="tip above" title="A Task is an instance of a Bolt or Spout. The number of Tasks is almost always equal to the number of Executors.">Num tasks</span></th></tr></thead>
- <tbody>
- {{#topologies}}
- <tr>
- <td><a href="/topology.html?id={{encodedId}}">{{name}}</a></td>
- <td>{{id}}</td>
- <td>{{status}}</td>
- <td>{{uptime}}</td>
- <td>{{workersTotal}}</td>
- <td>{{executorsTotal}}</td>
- <td>{{tasksTotal}}</td>
- </tr>
- {{/topologies}}
- </tbody>
- </table>
+ <table class="zebra-striped" id="topology-summary-table">
+ <thead>
+ <tr>
+ <th>
+ <span class="tip right" title="The name given to the topology by when it was submitted. Click the name to view the Topology's information.">
+ Name
+ </span>
+ </th>
+ <th>
+ <span class="tip right" title="The unique ID given to a Topology each time it is launched.">
+ Id
+ </span>
+ </th>
+ <th>
+ <span class="tip above" title="The status can be one of ACTIVE, INACTIVE, KILLED, or REBALANCING.">
+ Status
+ </span>
+ </th>
+ <th>
+ <span class="tip above" title="The time since the Topology was submitted.">
+ Uptime
+ </span>
+ </th>
+ <th>
+ <span class="tip above" title="The number of Workers (processes).">
+ Num workers
+ </span>
+ </th>
+ <th>
+ <span class="tip above" title="Executors are threads in a Worker process.">
+ Num executors
+ </span>
+ </th>
+ <th>
+ <span class="tip above" title="A Task is an instance of a Bolt or Spout. The number of Tasks is almost always equal to the number of Executors.">
+ Num tasks
+ </span>
+ </th>
+ </tr>
+ </thead>
+ <tbody>
+ {{#topologies}}
+ <tr>
- <td><a href="/topology.html?id={{id}}">{{name}}</a></td>
++ <td><a href="/topology.html?id={{encodedId}}">{{name}}</a></td>
+ <td>{{id}}</td>
+ <td>{{status}}</td>
+ <td>{{uptime}}</td>
+ <td>{{workersTotal}}</td>
+ <td>{{executorsTotal}}</td>
+ <td>{{tasksTotal}}</td>
+ </tr>
+ {{/topologies}}
+ </tbody>
+ </table>
</script>
<script id="supervisor-summary-template" type="text/html">
- <table class="zebra-striped" id="supervisor-summary-table"><thead><tr><th><span class="tip right" title="A unique identifier given to a Supervisor when it joins the cluster.">Id</span></th><th><span class="tip above" title="The hostname reported by the remote host. (Note that this hostname is not the result of a reverse lookup at the Nimbus node.)">Host</span></th><th><span class="tip above" title="The length of time a Supervisor has been registered to the cluster.">Uptime</span></th><th><span class="tip above" title="Slots are Workers (processes).">Slots</span></th><th><span class="tip left" title="Slots are Workers (processes).">Used slots</span></th></tr></thead>
- <tbody>
- {{#supervisors}}
- <tr>
- <td>{{id}}</td>
- <td>{{host}}</td>
- <td>{{uptime}}</td>
- <td>{{slotsTotal}}</td>
- <td>{{slotsUsed}}</td>
- </tr>
- {{/supervisors}}
- </tbody>
+ <table class="zebra-striped" id="supervisor-summary-table">
+ <thead>
+ <tr>
+ <th>
+ <span class="tip right" title="A unique identifier given to a Supervisor when it joins the cluster.">
+ Id
+ </span>
+ </th>
+ <th>
+ <span class="tip above" title="The hostname reported by the remote host. (Note that this hostname is not the result of a reverse lookup at the Nimbus node.)">
+ Host
+ </span>
+ </th>
+ <th>
+ <span class="tip above" title="The length of time a Supervisor has been registered to the cluster.">
+ Uptime
+ </span>
+ </th>
+ <th>
+ <span class="tip above" title="Slots are Workers (processes).">
+ Slots
+ </span>
+ </th>
+ <th>
+ <span class="tip left" title="Slots are Workers (processes).">
+ Used slots
+ </span>
+ </th>
+ </tr>
+ </thead>
+ <tbody>
+ {{#supervisors}}
+ <tr>
+ <td>{{id}}</td>
+ <td>{{host}}</td>
+ <td>{{uptime}}</td>
+ <td>{{slotsTotal}}</td>
+ <td>{{slotsUsed}}</td>
+ </tr>
+ {{/supervisors}}
+ </tbody>
</table>
</script>
http://git-wip-us.apache.org/repos/asf/storm/blob/55231b27/storm-core/src/ui/public/templates/topology-page-template.html
----------------------------------------------------------------------
diff --cc storm-core/src/ui/public/templates/topology-page-template.html
index c5b3db0,b977071..3479fc1
--- a/storm-core/src/ui/public/templates/topology-page-template.html
+++ b/storm-core/src/ui/public/templates/topology-page-template.html
@@@ -148,5 -326,8 +326,8 @@@
</script>
<script id="topology-actions-template" type="text/html">
- <input {{activateStatus}} onclick="confirmAction('{{encodedId}}', '{{name}}', 'activate', false, 0)" type="button" value="Activate"><input {{deactivateStatus}} onclick="confirmAction('{{encodedId}}', '{{name}}', 'deactivate', false, 0)" type="button" value="Deactivate"><input {{rebalanceStatus}} onclick="confirmAction('{{encodedId}}', '{{name}}', 'rebalance', true, {{msgTimeout}})" type="button" value="Rebalance"><input {{killStatus}} onclick="confirmAction('{{encodedId}}', '{{name}}', 'kill', true, 30)" type="button" value="Kill">
- <input {{activateStatus}} onclick="confirmAction('{{id}}', '{{name}}', 'activate', false, 0)" type="button" value="Activate">
- <input {{deactivateStatus}} onclick="confirmAction('{{id}}', '{{name}}', 'deactivate', false, 0)" type="button" value="Deactivate">
- <input {{rebalanceStatus}} onclick="confirmAction('{{id}}', '{{name}}', 'rebalance', true, {{msgTimeout}})" type="button" value="Rebalance">
- <input {{killStatus}} onclick="confirmAction('{{id}}', '{{name}}', 'kill', true, 30)" type="button" value="Kill">
++ <input {{activateStatus}} onclick="confirmAction('{{encodedId}}', '{{name}}', 'activate', false, 0)" type="button" value="Activate">
++ <input {{deactivateStatus}} onclick="confirmAction('{{encodedId}}', '{{name}}', 'deactivate', false, 0)" type="button" value="Deactivate">
++ <input {{rebalanceStatus}} onclick="confirmAction('{{encodedId}}', '{{name}}', 'rebalance', true, {{msgTimeout}})" type="button" value="Rebalance">
++ <input {{killStatus}} onclick="confirmAction('{{encodedId}}', '{{name}}', 'kill', true, 30)" type="button" value="Kill">
</script>
http://git-wip-us.apache.org/repos/asf/storm/blob/55231b27/storm-core/src/ui/public/topology.html
----------------------------------------------------------------------
diff --cc storm-core/src/ui/public/topology.html
index e4da3c5,9d53144..6940df4
--- a/storm-core/src/ui/public/topology.html
+++ b/storm-core/src/ui/public/topology.html
@@@ -24,8 -25,9 +25,9 @@@
<script src="/js/jquery.tablesorter.min.js" type="text/javascript"></script>
<script src="/js/jquery.cookies.2.2.0.min.js" type="text/javascript"></script>
<script src="/js/jquery.mustache.js" type="text/javascript"></script>
-<script src="/js/purl.js" type="text/javascript"></script>
+<script src="/js/url.min.js" type="text/javascript"></script>
<script src="/js/bootstrap-twipsy.js" type="text/javascript"></script>
+ <script src="/js/jquery.blockUI.min.js" type="text/javascript"></script>
<script src="/js/script.js" type="text/javascript"></script>
<script src="/js/visualization.js" type="text/javascript"></script>
<script src="/js/arbor.js" type="text/javascript"></script>
@@@ -55,9 -57,13 +57,13 @@@
</div>
</body>
<script>
+ $(document).ajaxStop($.unblockUI);
+ $(document).ajaxStart(function(){
+ $.blockUI({ message: '<img src="images/spinner.gif" /> <h3>Loading topology summary...</h3>'});
+ });
$(document).ready(function() {
- var topologyId = $.url().param("id");
- var window = $.url().param("window");
+ var topologyId = $.url("?id");
+ var window = $.url("?window");
var sys = $.cookies.get("sys") || "false";
var url = "/api/v1/topology/"+topologyId+"?sys="+sys;
if(window) url += "&window="+window;