This is an automated email from the ASF dual-hosted git repository.
nwang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-heron.git
The following commit(s) were added to refs/heads/master by this push:
new 7987f4a Avoid duplicated metrics requests in Heron UI (#3378)
7987f4a is described below
commit 7987f4a218fe0f89a7fc83023bbc56691ec192a4
Author: Ning Wang <[email protected]>
AuthorDate: Thu Oct 24 21:22:52 2019 -0700
Avoid duplicated metrics requests in Heron UI (#3378)
Same request might be sent three times which gives heron UI pressure and
makes UI slow.
---
heron/tools/ui/resources/static/js/topologies.js | 90 +++++++++++++-----------
1 file changed, 50 insertions(+), 40 deletions(-)
diff --git a/heron/tools/ui/resources/static/js/topologies.js
b/heron/tools/ui/resources/static/js/topologies.js
index 9fa9f23..73860d1 100644
--- a/heron/tools/ui/resources/static/js/topologies.js
+++ b/heron/tools/ui/resources/static/js/topologies.js
@@ -23,6 +23,8 @@ var SUM = 0,
AVG = 1,
LAST = 2;
+var countersUrlFlags = {};
+
var AllExceptions = React.createClass({
getInitialState: function() {
return {}
@@ -480,50 +482,58 @@ var AllMetrics = React.createClass({
},
fetchCountersURL: function(url, timeRange) {
- $.ajax({
- url: url,
- dataType: 'json',
- success: function(response) {
- if (response.hasOwnProperty("metrics")) {
- var component = response.component;
- var metrics = this.metrics;
- if (!metrics.hasOwnProperty(component)) {
- metrics[response.component] = {};
- }
- if (!metrics[component].hasOwnProperty(timeRange)) {
- metrics[component][timeRange] = {};
- }
- for (var name in response.metrics) {
- if (response.metrics.hasOwnProperty(name)) {
- var metricname = name;
- // Handle __jvm-uptime-secs as a special case.
- if (name !== "__jvm-uptime-secs") {
- metricname = name.split("/")[0] + "/";
- }
- var displayName = this.supportedMetricNames[metricname].name;
- if (!metrics[component][timeRange].hasOwnProperty(displayName)) {
- metrics[component][timeRange][displayName] = {};
- }
- var tmpMetrics = {
- metrics: response.metrics[name],
- scaleDevisor:
this.supportedMetricNames[metricname].scaleDevisor,
- aggregationType:
this.supportedMetricNames[metricname].aggregationType
- };
- if (name === "__jvm-uptime-secs") {
- metrics[component][timeRange][displayName][""] = tmpMetrics;
- } else {
- metrics[component][timeRange][displayName][name.split("/")[1]]
= tmpMetrics;
+ // This function might be called multiple times with the same url. Note
+ // that the timeRange value is inlcuded in the url so it can be ignored in
+ // the check. We check if the request has been made before first and
+ // skip if this is a duplicated request.
+ if (!countersUrlFlags[url]) {
+ countersUrlFlags[url] = true; // Set the flag
+
+ $.ajax({
+ url: url,
+ dataType: 'json',
+ success: function(response) {
+ if (response.hasOwnProperty("metrics")) {
+ var component = response.component;
+ var metrics = this.metrics;
+ if (!metrics.hasOwnProperty(component)) {
+ metrics[response.component] = {};
+ }
+ if (!metrics[component].hasOwnProperty(timeRange)) {
+ metrics[component][timeRange] = {};
+ }
+ for (var name in response.metrics) {
+ if (response.metrics.hasOwnProperty(name)) {
+ var metricname = name;
+ // Handle __jvm-uptime-secs as a special case.
+ if (name !== "__jvm-uptime-secs") {
+ metricname = name.split("/")[0] + "/";
+ }
+ var displayName = this.supportedMetricNames[metricname].name;
+ if
(!metrics[component][timeRange].hasOwnProperty(displayName)) {
+ metrics[component][timeRange][displayName] = {};
+ }
+ var tmpMetrics = {
+ metrics: response.metrics[name],
+ scaleDevisor:
this.supportedMetricNames[metricname].scaleDevisor,
+ aggregationType:
this.supportedMetricNames[metricname].aggregationType
+ };
+ if (name === "__jvm-uptime-secs") {
+ metrics[component][timeRange][displayName][""] = tmpMetrics;
+ } else {
+
metrics[component][timeRange][displayName][name.split("/")[1]] = tmpMetrics;
+ }
}
}
+ metrics[component][timeRange]["__interval"] = response.interval;
+ this.setMetrics(metrics);
}
- metrics[component][timeRange]["__interval"] = response.interval;
- this.setMetrics(metrics);
- }
- }.bind(this),
+ }.bind(this),
- error: function() {
- }
- });
+ error: function() {
+ }
+ });
+ }
},
render: function() {