You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@htrace.apache.org by iw...@apache.org on 2015/09/16 06:30:08 UTC
[22/22] incubator-htrace git commit: HTRACE-246. HTrace WebApp not
properly defined and therefore not packaged into .war (Lewis John McGibbney
via iwasakims)
HTRACE-246. HTrace WebApp not properly defined and therefore not packaged into .war (Lewis John McGibbney via iwasakims)
Project: http://git-wip-us.apache.org/repos/asf/incubator-htrace/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-htrace/commit/05ce37fb
Tree: http://git-wip-us.apache.org/repos/asf/incubator-htrace/tree/05ce37fb
Diff: http://git-wip-us.apache.org/repos/asf/incubator-htrace/diff/05ce37fb
Branch: refs/heads/master
Commit: 05ce37fbc7b27183da3592e3e57e9d06ed09db7a
Parents: 2716ffd
Author: Masatake Iwasaki <iw...@apache.org>
Authored: Sun Sep 13 18:39:53 2015 +0900
Committer: Masatake Iwasaki <iw...@apache.org>
Committed: Sun Sep 13 18:39:53 2015 +0900
----------------------------------------------------------------------
htrace-htraced/go/gobuild.sh | 2 +-
htrace-webapp/pom.xml | 2 +-
htrace-webapp/src/main/web/WEB-INF/web.xml | 20 -
htrace-webapp/src/main/web/app/about_view.js | 33 -
htrace-webapp/src/main/web/app/modal.js | 42 -
.../src/main/web/app/partition_widget.js | 72 -
htrace-webapp/src/main/web/app/predicate.js | 126 -
.../src/main/web/app/predicate_view.js | 68 -
htrace-webapp/src/main/web/app/query_results.js | 45 -
htrace-webapp/src/main/web/app/router.js | 74 -
htrace-webapp/src/main/web/app/search_result.js | 55 -
.../src/main/web/app/search_results.js | 25 -
.../src/main/web/app/search_results_view.js | 478 -
htrace-webapp/src/main/web/app/search_view.js | 196 -
htrace-webapp/src/main/web/app/server_info.js | 31 -
htrace-webapp/src/main/web/app/span.js | 282 -
.../src/main/web/app/span_details_view.js | 39 -
.../src/main/web/app/span_group_widget.js | 103 -
htrace-webapp/src/main/web/app/span_widget.js | 309 -
htrace-webapp/src/main/web/app/string.js | 62 -
htrace-webapp/src/main/web/app/time_cursor.js | 81 -
htrace-webapp/src/main/web/app/tree.js | 74 -
.../src/main/web/app/triangle_button.js | 108 -
.../src/main/web/app/widget_manager.js | 67 -
htrace-webapp/src/main/web/custom.css | 101 -
htrace-webapp/src/main/web/image/owl.png | Bin 435334 -> 0 bytes
htrace-webapp/src/main/web/index.html | 246 -
.../src/main/web/lib/backbone-1.1.2.js | 1608 ---
.../lib/bootstrap-3.3.1/css/bootstrap-theme.css | 470 -
.../bootstrap-3.3.1/css/bootstrap-theme.css.map | 1 -
.../bootstrap-3.3.1/css/bootstrap-theme.min.css | 5 -
.../web/lib/bootstrap-3.3.1/css/bootstrap.css | 6332 ------------
.../lib/bootstrap-3.3.1/css/bootstrap.css.map | 1 -
.../lib/bootstrap-3.3.1/css/bootstrap.min.css | 5 -
.../web/lib/bootstrap-3.3.1/js/bootstrap.js | 2320 -----
.../web/lib/bootstrap-3.3.1/js/bootstrap.min.js | 7 -
.../src/main/web/lib/bootstrap-3.3.1/js/npm.js | 13 -
htrace-webapp/src/main/web/lib/jquery-2.1.4.js | 9210 ------------------
htrace-webapp/src/main/web/lib/moment-2.10.3.js | 3111 ------
.../src/main/web/lib/underscore-1.7.0.js | 1416 ---
htrace-webapp/src/main/webapp/WEB-INF/web.xml | 20 +
htrace-webapp/src/main/webapp/app/about_view.js | 33 +
htrace-webapp/src/main/webapp/app/modal.js | 42 +
.../src/main/webapp/app/partition_widget.js | 72 +
htrace-webapp/src/main/webapp/app/predicate.js | 126 +
.../src/main/webapp/app/predicate_view.js | 68 +
.../src/main/webapp/app/query_results.js | 45 +
htrace-webapp/src/main/webapp/app/router.js | 74 +
.../src/main/webapp/app/search_result.js | 55 +
.../src/main/webapp/app/search_results.js | 25 +
.../src/main/webapp/app/search_results_view.js | 478 +
.../src/main/webapp/app/search_view.js | 196 +
.../src/main/webapp/app/server_info.js | 31 +
htrace-webapp/src/main/webapp/app/span.js | 282 +
.../src/main/webapp/app/span_details_view.js | 39 +
.../src/main/webapp/app/span_group_widget.js | 103 +
.../src/main/webapp/app/span_widget.js | 309 +
htrace-webapp/src/main/webapp/app/string.js | 62 +
.../src/main/webapp/app/time_cursor.js | 81 +
htrace-webapp/src/main/webapp/app/tree.js | 74 +
.../src/main/webapp/app/triangle_button.js | 108 +
.../src/main/webapp/app/widget_manager.js | 67 +
htrace-webapp/src/main/webapp/custom.css | 101 +
htrace-webapp/src/main/webapp/image/owl.png | Bin 0 -> 435334 bytes
htrace-webapp/src/main/webapp/index.html | 246 +
.../src/main/webapp/lib/backbone-1.1.2.js | 1608 +++
.../lib/bootstrap-3.3.1/css/bootstrap-theme.css | 470 +
.../bootstrap-3.3.1/css/bootstrap-theme.css.map | 1 +
.../bootstrap-3.3.1/css/bootstrap-theme.min.css | 5 +
.../lib/bootstrap-3.3.1/css/bootstrap.css | 6332 ++++++++++++
.../lib/bootstrap-3.3.1/css/bootstrap.css.map | 1 +
.../lib/bootstrap-3.3.1/css/bootstrap.min.css | 5 +
.../webapp/lib/bootstrap-3.3.1/js/bootstrap.js | 2320 +++++
.../lib/bootstrap-3.3.1/js/bootstrap.min.js | 7 +
.../main/webapp/lib/bootstrap-3.3.1/js/npm.js | 13 +
.../src/main/webapp/lib/jquery-2.1.4.js | 9210 ++++++++++++++++++
.../src/main/webapp/lib/moment-2.10.3.js | 3111 ++++++
.../src/main/webapp/lib/underscore-1.7.0.js | 1416 +++
78 files changed, 27238 insertions(+), 27238 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/05ce37fb/htrace-htraced/go/gobuild.sh
----------------------------------------------------------------------
diff --git a/htrace-htraced/go/gobuild.sh b/htrace-htraced/go/gobuild.sh
index a614ef4..e627147 100755
--- a/htrace-htraced/go/gobuild.sh
+++ b/htrace-htraced/go/gobuild.sh
@@ -127,7 +127,7 @@ install)
|| die "go install failed."
# Make a symlink to web src dir so can do development in-situ out
# of build dir. This is ugly but blame go build.
- ln -fs "../../htrace-webapp/src/main/web" "${GOBIN}/../"
+ ln -fs "../../htrace-webapp/src/main/webapp" "${GOBIN}/../web"
# Set the RPATH to make bundling leveldb and snappy easier.
set_rpath "${GOBIN}/htraced"
;;
http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/05ce37fb/htrace-webapp/pom.xml
----------------------------------------------------------------------
diff --git a/htrace-webapp/pom.xml b/htrace-webapp/pom.xml
index e169a64..dc1a05c 100644
--- a/htrace-webapp/pom.xml
+++ b/htrace-webapp/pom.xml
@@ -32,7 +32,7 @@ language governing permissions and limitations under the License. -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
- <webXml>src/main/web/WEB-INF/web.xml</webXml>
+ <webXml>src/main/webapp/WEB-INF/web.xml</webXml>
</configuration>
</plugin>
<plugin>
http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/05ce37fb/htrace-webapp/src/main/web/WEB-INF/web.xml
----------------------------------------------------------------------
diff --git a/htrace-webapp/src/main/web/WEB-INF/web.xml b/htrace-webapp/src/main/web/WEB-INF/web.xml
deleted file mode 100644
index 38c7a98..0000000
--- a/htrace-webapp/src/main/web/WEB-INF/web.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor
-license agreements. See the NOTICE file distributed with this work for additional
-information regarding copyright ownership. The ASF licenses this file to
-You under the Apache License, Version 2.0 (the "License"); you may not use
-this file except in compliance with the License. You may obtain a copy of
-the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required
-by applicable law or agreed to in writing, software distributed under the
-License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
-OF ANY KIND, either express or implied. See the License for the specific
-language governing permissions and limitations under the License. -->
-
-<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
-
- <display-name>HTrace</display-name>
-<description>WebApp that goes against an htrace server.
-</description>
-</web-app>
http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/05ce37fb/htrace-webapp/src/main/web/app/about_view.js
----------------------------------------------------------------------
diff --git a/htrace-webapp/src/main/web/app/about_view.js b/htrace-webapp/src/main/web/app/about_view.js
deleted file mode 100644
index 7dfe868..0000000
--- a/htrace-webapp/src/main/web/app/about_view.js
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-var htrace = htrace || {};
-htrace.AboutView = Backbone.View.extend({
- render: function() {
- this.$el.html(_.template($("#about-view-template").html())
- ({ model : this.model }));
- console.log("AboutView#render");
- return this;
- },
-
- close: function() {
- console.log("AboutView#close")
- this.undelegateEvents();
- }
-});
http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/05ce37fb/htrace-webapp/src/main/web/app/modal.js
----------------------------------------------------------------------
diff --git a/htrace-webapp/src/main/web/app/modal.js b/htrace-webapp/src/main/web/app/modal.js
deleted file mode 100644
index aed3fdc..0000000
--- a/htrace-webapp/src/main/web/app/modal.js
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-var htrace = htrace || {};
-
-// Show a modal dialog box with a warning message.
-htrace.showModalWarning = function(title, body) {
- var html = _.template($("#modal-warning-template").html())
- ({ title: title, body: body });
- htrace.showModal(html);
-}
-
-// Show a modal dialog box.
-htrace.showModal = function(html) {
- var el = $("#modal");
- el.html(html);
- // Dismiss the modal dialog box when enter is pressed.
- $(document).on("keypress", function(e) {
- if (e.which === 13) {
- $(document).off('keypress');
- $('#modal button:first', $(this)).click();
- return false;
- }
- });
- el.modal();
-};
http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/05ce37fb/htrace-webapp/src/main/web/app/partition_widget.js
----------------------------------------------------------------------
diff --git a/htrace-webapp/src/main/web/app/partition_widget.js b/htrace-webapp/src/main/web/app/partition_widget.js
deleted file mode 100644
index a68c8ce..0000000
--- a/htrace-webapp/src/main/web/app/partition_widget.js
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-var htrace = htrace || {};
-
-// Widget containing draggable horizontal partition
-htrace.PartitionWidget = function(params) {
- this.draw = function() {
- this.ctx.save();
- this.ctx.fillStyle = this.selected ? "#6600ff" : "#aaaaaa";
- this.ctx.fillRect(this.x0, this.y0, this.xF - this.x0, this.yF - this.y0);
- this.ctx.restore();
- };
-
- this.handle = function(e) {
- switch (e.type) {
- case "mouseDown":
- if (!htrace.inBoundingBox(e.x, e.y,
- this.x0, this.xF, this.y0, this.yF)) {
- return true;
- }
- this.manager.registerHighPriority("mouseUp", this);
- this.manager.registerHighPriority("mouseMove", this);
- this.selected = true;
- $(this.el).css('cursor', 'ew-resize');
- return false;
- case "mouseMove":
- // Move the partition to the mouse pointer area
- var x = Math.min(Math.max(e.x, this.xMin), this.xMax);
- var width = this.xF - this.x0;
- this.x0 = Math.floor(x - (width / 2));
- this.xF = this.x0 + width;
- return false;
- case "mouseUp":
- this.manager.unregister("mouseUp", this);
- this.manager.unregister("mouseMove", this);
- $(this.el).css('cursor', 'pointer');
- this.selected = false;
- this.releaseHandler(this.x0);
- return false;
- case "draw":
- this.draw();
- return true;
- default:
- return true;
- }
- };
-
- for (var k in params) {
- this[k]=params[k];
- }
- this.selected = false;
- this.manager.register("mouseDown", this);
- this.manager.register("draw", this);
- return this;
-};
http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/05ce37fb/htrace-webapp/src/main/web/app/predicate.js
----------------------------------------------------------------------
diff --git a/htrace-webapp/src/main/web/app/predicate.js b/htrace-webapp/src/main/web/app/predicate.js
deleted file mode 100644
index 6526719..0000000
--- a/htrace-webapp/src/main/web/app/predicate.js
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-var htrace = htrace || {};
-
-htrace.checkStringIsPositiveWholeNumber = function(val) {
- if (!val.match(/^[0-9]([0-9]*)$/)) {
- if (!val.match(/[^\s]/)) {
- throw "You entered an empty string into a numeric field.";
- }
- throw "Non-numeric characters found.";
- }
-};
-
-htrace.checkStringIsNotEmpty = function(val) {
- if (!val.match(/[^\s]/)) {
- throw "You entered an empty string into a text field.";
- }
-};
-
-// Predicate type
-htrace.PType = Backbone.Model.extend({
- initialize: function(options) {
- this.name = options.name;
- this.field = options.field;
- this.op = options.op;
- },
-
- // Try to normalize a value of this type into something htraced can accept.
- // Returns a string containing the normalized value on success. Throws a
- // string explaining the parse error otherwise.
- // Dates are represented by milliseconds since the epoch; span ids don't start
- // with 0x.
- normalize: function(val) {
- switch (this.field) {
- case "begin":
- return htrace.parseDate(val).valueOf().toString();
- case "end":
- return htrace.parseDate(val).valueOf().toString();
- case "description":
- htrace.checkStringIsNotEmpty(val);
- return val;
- case "duration":
- htrace.checkStringIsPositiveWholeNumber(val);
- return val;
- case "spanid":
- return htrace.normalizeSpanId(val);
- case "tracerid":
- htrace.checkStringIsNotEmpty(val);
- return val;
- default:
- return "Normalization not implemented for field '" + this.field + "'";
- }
- },
-
- getDefaultValue: function() {
- switch (this.field) {
- case "begin":
- return htrace.dateToString(moment());
- case "end":
- return htrace.dateToString(moment());
- case "description":
- return "";
- case "duration":
- return "0";
- case "spanid":
- return "";
- case "tracerid":
- return "";
- default:
- return "(unknown)";
- }
- }
-});
-
-htrace.parsePType = function(name) {
- switch (name) {
- case "Began after":
- return new htrace.PType({name: name, field:"begin", op:"gt"});
- case "Began at or before":
- return new htrace.PType({name: name, field:"begin", op:"le"});
- case "Ended after":
- return new htrace.PType({name: name, field:"end", op:"gt"});
- case "Ended at or before":
- return new htrace.PType({name: name, field:"end", op:"le"});
- case "Description contains":
- return new htrace.PType({name: name, field:"description", op:"cn"});
- case "Description is exactly":
- return new htrace.PType({name: name, field:"description", op:"eq"});
- case "Duration is longer than":
- return new htrace.PType({name: name, field:"duration", op:"gt"});
- case "Duration is at most":
- return new htrace.PType({name: name, field:"duration", op:"le"});
- case "Span ID is":
- return new htrace.PType({name: name, field:"spanid", op:"eq"});
- case "TracerId contains":
- return new htrace.PType({name: name, field:"tracerid", op:"cn"});
- case "TracerId is exactly":
- return new htrace.PType({name: name, field:"tracerid", op:"eq"});
- default:
- return null
- }
-};
-
-htrace.Predicate = function(options) {
- this.op = options.ptype.op;
- this.field = options.ptype.field;
- this.val = options.val;
- return this;
-};
http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/05ce37fb/htrace-webapp/src/main/web/app/predicate_view.js
----------------------------------------------------------------------
diff --git a/htrace-webapp/src/main/web/app/predicate_view.js b/htrace-webapp/src/main/web/app/predicate_view.js
deleted file mode 100644
index aefe896..0000000
--- a/htrace-webapp/src/main/web/app/predicate_view.js
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-var htrace = htrace || {};
-
-htrace.PredicateView = Backbone.View.extend({
- initialize: function(options) {
- this.el = options.el;
- this.index = options.index;
- this.ptype = options.ptype;
- this.searchView = options.searchView;
- },
-
- events: {
- "click .closeButton": "remove",
- },
-
- render: function() {
- this.$el.html(_.template($("#predicate-template").html())
- ({ desc: this.ptype.name, id: this.index }))
- if (this.getText() === "") {
- $(this.$el).find(".form-control").val(this.ptype.getDefaultValue());
- }
- console.log(this.toString() + "#render");
- return this;
- },
-
- // Handle the user removing this predicate.
- remove: function() {
- this.searchView.removePredicateView(this);
- Backbone.View.prototype.remove.apply(this, arguments);
- },
-
- // Get the text which the user has entered in.
- getText: function() {
- return $(this.$el).find(".form-control").val().trim();
- },
-
- // Get the predicate expressed by this view.
- // Throw an exception if the predicate can't be parsed.
- getPredicate: function() {
- return new htrace.Predicate({
- ptype: this.ptype,
- val: this.ptype.normalize(this.getText())
- });
- },
-
- toString: function() {
- return "PredicateView(this.el=" + this.el + ", this.index=" +
- this.index + ", this.ptype='" + this.ptype.name + "')";
- }
-});
http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/05ce37fb/htrace-webapp/src/main/web/app/query_results.js
----------------------------------------------------------------------
diff --git a/htrace-webapp/src/main/web/app/query_results.js b/htrace-webapp/src/main/web/app/query_results.js
deleted file mode 100644
index 8beaf0e..0000000
--- a/htrace-webapp/src/main/web/app/query_results.js
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-var htrace = htrace || {};
-
-htrace.QueryResults = Backbone.Collection.extend({
- // The query results are spans.
- model: htrace.Span,
-
- initialize: function(options) {
- this.queryJson = options.queryJson;
- },
-
- url: function() {
- return "query?query=" + this.queryString();
- },
-
- parse: function(response, xhr) {
- return response;
- },
-
- prettyQueryString: function() {
- return JSON.stringify(this.queryJson, null, 2);
- },
-
- queryString: function() {
- return encodeURIComponent(JSON.stringify(this.queryJson));
- }
-});
http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/05ce37fb/htrace-webapp/src/main/web/app/router.js
----------------------------------------------------------------------
diff --git a/htrace-webapp/src/main/web/app/router.js b/htrace-webapp/src/main/web/app/router.js
deleted file mode 100644
index 607da44..0000000
--- a/htrace-webapp/src/main/web/app/router.js
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-var htrace = htrace || {};
-
-htrace.HTraceRouter = Backbone.Router.extend({
- "routes": {
- "": "empty",
- "about": "about",
- "search": "search",
- "*unknown": "unknown"
- },
-
- empty: function() {
- console.log("Redirecting to #about.");
- Backbone.history.navigate("about", {"trigger": true, "replace": true});
- },
-
- about: function() {
- console.log("Visiting #about.");
- serverInfo = new htrace.ServerInfo();
- var router = this;
- serverInfo.fetch({
- "success": function(model, response, options) {
- router.switchView(new htrace.AboutView({model: serverInfo, el: "#app"}));
- router.activateNavBarEntry("about")
- },
- "error": function(model, response, options) {
- window.alert("Failed to fetch htraced server info via GET " +
- "/server/info: " + JSON.stringify(response));
- }
- });
- },
-
- search: function() {
- console.log("Visiting #search.");
- this.switchView(new htrace.SearchView({el : "#app"}));
- htrace.router.activateNavBarEntry("search");
- },
-
- unknown: function() {
- console.log("Unknown route " + Backbone.history.getFragment() + ".")
- },
-
- "switchView": function(view) {
- this.view && this.view.close();
- this.view = view;
- this.view.render();
- },
-
- "activateNavBarEntry": function(id) {
- $(".nav").find(".active").removeClass("active");
- $(".nav").find("#" + id).addClass("active");
- }
-});
-
-htrace.router = new htrace.HTraceRouter();
-Backbone.history.start();
http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/05ce37fb/htrace-webapp/src/main/web/app/search_result.js
----------------------------------------------------------------------
diff --git a/htrace-webapp/src/main/web/app/search_result.js b/htrace-webapp/src/main/web/app/search_result.js
deleted file mode 100644
index 9798ad7..0000000
--- a/htrace-webapp/src/main/web/app/search_result.js
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-var htrace = htrace || {};
-
-// A pair of span trees: one going up, and the other going down.
-// This represents a single search result.
-htrace.SearchResult = Backbone.Model.extend({
- initialize: function(options) {
- this.set("childrenRoot", {
- root: options.span,
- contents: null,
- });
- this.set("childrenRoot", {
- root: options.span,
- contents: null,
- });
-
- this.set("parentsRoot", options.span);
- },
-
- getBegin: function() {
- var begin = this.get("span").get("begin");
- var children = this.get("children");
- for (var childIdx = 0; childIdx < children.length; childIdx++) {
- begin = Math.min(begin, children[childIdx].getBegin());
- }
- return begin;
- },
-
- getEnd: function() {
- var end = this.get("span").get("end");
- var children = this.get("children");
- for (var childIdx = 0; childIdx < children.length; childIdx++) {
- end = Math.max(end, children[childIdx].getEnd());
- }
- return end;
- }
-});
http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/05ce37fb/htrace-webapp/src/main/web/app/search_results.js
----------------------------------------------------------------------
diff --git a/htrace-webapp/src/main/web/app/search_results.js b/htrace-webapp/src/main/web/app/search_results.js
deleted file mode 100644
index 25b18ae..0000000
--- a/htrace-webapp/src/main/web/app/search_results.js
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-var htrace = htrace || {};
-
-htrace.SearchResults = Backbone.Collection.extend({
- // The search results are span trees.
- model: htrace.SpanTreeNode
-});
http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/05ce37fb/htrace-webapp/src/main/web/app/search_results_view.js
----------------------------------------------------------------------
diff --git a/htrace-webapp/src/main/web/app/search_results_view.js b/htrace-webapp/src/main/web/app/search_results_view.js
deleted file mode 100644
index b2fffbd..0000000
--- a/htrace-webapp/src/main/web/app/search_results_view.js
+++ /dev/null
@@ -1,478 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-var htrace = htrace || {};
-
-htrace.SearchResultsView = Backbone.View.extend({
- // The minimum time span we will allow between begin and end.
- MINIMUM_TIME_SPAN: 100,
-
- begin: 0,
-
- end: this.MINIMUM_TIME_SPAN,
-
- processNameFraction: 0.2,
-
- initialize: function(options) {
- this.searchResults = options.searchResults;
- this.el = options.el;
- var view = this;
-
- // Re-render the canvas when the window size changes.
- // Add a debouncer delay to avoid spamming render requests.
- $(window).on("resize", _.debounce(function() {
- view.render();
- }, 250));
- },
-
- // Get the canvas X coordinate of a mouse click from the absolute event
- // coordinate.
- getCanvasX: function(e) {
- return e.pageX - $("#resultsCanvas").offset().left;
- },
-
- // Get the canvas Y coordinate of a mouse click from the absolute event
- // coordinate.
- getCanvasY: function(e) {
- return e.pageY - $("#resultsCanvas").offset().top;
- },
-
- handleMouseDown: function(e) {
- e.preventDefault();
- this.widgetManager.handle({
- type: "mouseDown",
- x: this.getCanvasX(e),
- y: this.getCanvasY(e),
- raw: e
- });
- this.draw();
- },
-
- handleMouseUp: function(e) {
- e.preventDefault();
- this.widgetManager.handle({
- type: "mouseUp",
- x: this.getCanvasX(e),
- y: this.getCanvasY(e),
- raw: e
- });
- this.draw();
- },
-
- handleMouseOut: function(e) {
- e.preventDefault();
- this.widgetManager.handle({
- type: "mouseOut"
- });
- this.draw();
- },
-
- handleMouseMove: function(e) {
- e.preventDefault();
- this.widgetManager.handle({
- type: "mouseMove",
- x: this.getCanvasX(e),
- y: this.getCanvasY(e),
- raw: e
- });
- this.draw();
- },
-
- handleDblclick: function(e) {
- e.preventDefault();
- this.widgetManager.handle({
- type: "dblclick",
- x: this.getCanvasX(e),
- y: this.getCanvasY(e),
- raw: e
- });
- this.draw();
- },
-
- render: function() {
- console.log("SearchResultsView#render.");
- $(this.el).html(_.template($("#search-results-view-template").html()));
- $('#selectedTime').attr('readonly', 'readonly');
- this.canvas = $("#resultsCanvas");
- this.ctx = this.canvas.get(0).getContext("2d");
- this.setupCoordinates();
- this.setupWidgets();
- this.scaleCanvas();
- this.draw();
- this.attachEvents();
- return this;
- },
-
- /*
- * Compute the ratio to use between the size of the canvas (i.e.
- * canvas.ctx.width, canvas.ctx.height) and the size in "HTML5 pixels." Note
- * that 'HTML5 pixels" don't actually correspond to screen pixels. A line 1
- * "HTML5 pixel" wide actually takes up multiple scren pixels, etc.
- *
- * TODO: fix this to be sharper
- */
- computeScaleFactor: function() {
- var backingStoreRatio = this.ctx.backingStorePixelRatio ||
- this.ctx.mozBackingStorePixelRatio ||
- this.ctx.msBackingStorePixelRatio ||
- this.ctx.webkitBackingStorePixelRatio ||
- this.ctx.oBackingStorePixelRatio ||
- this.ctx.backingStorePixelRatio || 1;
- return (window.devicePixelRatio || 1) / backingStoreRatio;
- },
-
- // Sets up the canvas size and scaling.
- scaleCanvas: function() {
- var ratio = this.computeScaleFactor();
- //console.log("scaleCanvas: cssX=" + cssX + ", cssY=" + cssY + ", ratio=" + ratio);
- $('#searchView').css('height', this.canvasY + "px");
- $('#resultsView').css('height', this.canvasY + "px");
- $('#resultsCanvas').css('height', this.canvasY + "px");
- this.ctx.canvas.width = this.viewX * ratio;
- this.ctx.canvas.height = this.canvasY * ratio;
- this.ctx.scale(ratio, ratio);
- },
-
- //
- // Set up the screen coordinates.
- //
- // 0 xB xD xS viewX
- // +--------------+----------+--------------------+-----------+
- // |TracerId | Buttons | Span Description | Scrollbar |
- // +--------------+----------+--------------------+-----------+
- //
- setupCoordinates: function() {
- this.viewX = this.canvas.parent().innerWidth();
- this.viewY = $(window).innerHeight() - $("#header").innerHeight() - 50;
- this.xB = Math.floor(this.viewX * this.processNameFraction);
- this.xD = this.xB + Math.min(75, Math.floor(this.viewX / 20));
- var scrollBarWidth = Math.min(50, Math.floor(this.viewX / 10));
- this.xS = this.viewX - scrollBarWidth;
- this.canvasY = this.viewY;
- },
-
- setupWidgets: function() {
- var searchResultsView = this;
- this.widgetManager = new htrace.WidgetManager({searchResultsView: this});
-
- var partitionWidgetWidth = Math.max(5, Math.floor(this.viewX / 300));
-
- // Create a SpanWidget for each span we know about
- var spanWidgetHeight = Math.min(25, Math.floor(this.viewY / 32));
- var numResults = this.searchResults.size();
- var groupY = 0;
- for (var i = 0; i < numResults; i++) {
- var widget = new htrace.SpanGroupWidget({
- manager: this.widgetManager,
- ctx: this.ctx,
- span: this.searchResults.at(i),
- x0: 0,
- xB: this.xB + partitionWidgetWidth,
- xD: this.xD,
- xF: this.xS,
- y0: groupY,
- begin: this.begin,
- end: this.end,
- spanWidgetHeight: spanWidgetHeight
- });
- groupY = widget.yF;
- }
- if (this.canvasY < groupY) {
- this.canvasY = groupY;
- }
-
- // Create the draggable horizontal parition between process names and span
- // names.
- new htrace.PartitionWidget({
- el: '#resultsCanvas',
- manager: this.widgetManager,
- ctx: this.ctx,
- x0: this.xB,
- xF: this.xB + partitionWidgetWidth,
- xMin: Math.floor(this.viewX * 0.10),
- xMax: Math.floor(this.viewX * 0.90),
- y0: 0,
- yF: groupY,
- releaseHandler: function(x) {
- searchResultsView.processNameFraction = (x / searchResultsView.viewX);
- console.log("htrace#PartitionWidget setting processNameFraction to " +
- searchResultsView.processNameFraction);
- searchResultsView.render();
- }
- });
-
- // Create the time cursor widget.
- var selectedTime = this.begin;
- if (this.timeCursor != null) {
- selectedTime = this.timeCursor.selectedTime;
- }
- this.timeCursor = new htrace.TimeCursor({
- manager: this.widgetManager,
- selectedTime: selectedTime,
- el: "#selectedTime"
- });
- this.timeCursor.ctx = this.ctx;
- this.timeCursor.x0 = this.xD;
- this.timeCursor.xF = this.xS;
- this.timeCursor.y0 = 0;
- this.timeCursor.yF = this.canvasY;
- this.timeCursor.begin = this.begin;
- this.timeCursor.end = this.end;
- },
-
- draw: function() {
- if (this.checkCanvasTooSmall()) {
- return;
- }
-
- // Set the background to white.
- this.ctx.save();
- this.ctx.fillStyle="#ffffff";
- this.ctx.strokeStyle="#000000";
- this.ctx.fillRect(0, 0, this.viewX, this.canvasY);
- this.ctx.restore();
-
- // Draw all the widgets.
- this.widgetManager.handle({type: "draw"});
- },
-
- checkCanvasTooSmall: function() {
- if ((this.viewX < 200) || (this.viewY < 200)) {
- this.ctx.fillStyle="#cccccc";
- this.ctx.strokeStyle="#000000";
- this.ctx.fillRect(0, 0, this.viewX, this.viewY);
- this.ctx.font = "24px serif";
- this.ctx.fillStyle="#000000";
- this.ctx.fillText("Canvas too small!", 0, 24);
- return true;
- }
- return false;
- },
-
- attachEvents: function() {
- // Use jquery to capture mouse events on the canvas.
- // For some reason using backbone doesn't work for getting these events.
- var view = this;
- $("#resultsCanvas").off("mousedown");
- $("#resultsCanvas").on("mousedown", function(e) {
- $("#resultsCanvas").focus();
- view.handleMouseDown(e);
- });
- $("#resultsCanvas").off("mouseup");
- $("#resultsCanvas").on("mouseup", function(e) {
- view.handleMouseUp(e);
- });
- $("#resultsCanvas").off("mouseout");
- $("#resultsCanvas").on("mouseout", function(e) {
- view.handleMouseOut(e);
- });
- $("#resultsCanvas").off("mousemove");
- $("#resultsCanvas").on("mousemove", function(e) {
- view.handleMouseMove(e);
- });
- $("#resultsCanvas").off("dblclick");
- $("#resultsCanvas").on("dblclick", function(e) {
- view.handleDblclick(e);
- });
- // Keyboard events. These events only fire if the canvas has focus. So if
- // you press delete when entering a time in the time dialog box, this will
- // not fire. Etc.
- $("#resultsCanvas").off("keyup");
- $("#resultsCanvas").on("keyup", function(e) {
- if (e.keyCode == 46) { // delete key
- view.clearHandler(false);
- return false;
- } else if (e.keyCode == 90) { // z key
- view.zoomHandler();
- return false;
- } else {
- return true;
- }
- });
- $("#resultsCanvas").off("contextmenu");
- $("#resultsCanvas").on("contextmenu", function(e) {
- return false;
- });
- },
-
- remove: function() {
- $(window).off("resize");
- $("#resultsCanvas").off("mousedown");
- $("#resultsCanvas").off("mouseup");
- $("#resultsCanvas").off("mouseout");
- $("#resultsCanvas").off("mousemove");
- $("#resultsCanvas").off("dblclick");
- $("#resultsCanvas").off("keyup");
- $("#resultsCanvas").off("contextmenu");
- Backbone.View.prototype.remove.apply(this, arguments);
- },
-
- handleBeginOrEndChange: function(e, type) {
- e.preventDefault();
- var text = $(e.target).val().trim();
- var d = null;
- try {
- d = htrace.parseDate(text);
- } catch(err) {
- $("#begin").val(htrace.dateToString(this.begin));
- $("#end").val(htrace.dateToString(this.end));
- htrace.showModalWarning("Timeline " + type + " Format Error",
- "Please enter a valid time in the timeline " + type + " field.<p/>" +
- err);
- return null;
- }
- if (type === "begin") {
- this.setTimes({begin: d.valueOf()});
- } else if (type === "end") {
- this.setTimes({end: d.valueOf()});
- } else {
- throw "invalid type for handleBeginOrEndChange: expected begin or end.";
- }
- this.render();
- },
-
- setTimes: function(params) {
- if (params["begin"]) {
- this.begin = params["begin"];
- }
- if (params["end"]) {
- this.end = params["end"];
- }
- if (this.end < this.begin) {
- var b = this.begin;
- this.begin = this.end;
- this.end = b;
- }
- var delta = this.end - this.begin;
- if (delta < this.MINIMUM_TIME_SPAN) {
- var needed = this.MINIMUM_TIME_SPAN - delta;
- this.begin -= (needed / 2);
- this.end += (needed / 2);
- }
- $("#begin").val(htrace.dateToString(this.begin));
- $("#end").val(htrace.dateToString(this.end));
- // caller should invoke render()
- },
-
- clearHandler: function(clearAllIfNoneSelected) {
- console.log("invoking clearHandler.");
- var toDelete = []
- var noneSelected = true;
- for (var i = 0; i < this.searchResults.length; i++) {
- var resultSelected = false;
- var model = this.searchResults.at(i);
- htrace.treeTraverseDepthFirstPre(model,
- htrace.getReifiedChildren, 0,
- function(node, depth) {
- if (noneSelected) {
- if (node.get("selected")) {
- resultSelected = true;
- }
- }
- });
- htrace.treeTraverseDepthFirstPre(model,
- htrace.getReifiedParents, 0,
- function(node, depth) {
- if (node.get("selected")) {
- resultSelected = true;
- }
- });
- if (resultSelected) {
- if (noneSelected) {
- toDelete = [];
- noneSelected = false;
- }
- toDelete.push(model);
- } else if (noneSelected) {
- toDelete.push(model);
- }
- }
- if (noneSelected && (!clearAllIfNoneSelected)) {
- return;
- }
- ids = [];
- for (var i = 0; i < toDelete.length; i++) {
- ids.push(toDelete[i].get("spanId"));
- }
- console.log("clearHandler: removing " + JSON.stringify(ids));
- this.searchResults.remove(toDelete);
- this.render();
- },
-
- getSelectedSpansOrAllSpans: function() {
- // Get the list of selected spans.
- // If there are no spans selected, we return all spans.
- var ret = [];
- var noneSelected = true;
- this.applyToAllSpans(function(span) {
- if (span.get("selected")) {
- if (noneSelected) {
- ret = [];
- noneSelected = false;
- }
- ret.push(span);
- } else if (noneSelected) {
- ret.push(span);
- }
- });
- return ret;
- },
-
- zoomHandler: function() {
- var zoomSpans = this.getSelectedSpansOrAllSpans();
- var numResults = zoomSpans.length;
- if (numResults == 0) {
- this.setTimes({begin:0, end:this.MINIMUM_TIME_SPAN});
- this.render();
- return;
- }
- var minStart = 4503599627370496;
- var maxEnd = 0;
- for (var i = 0; i < numResults; i++) {
- var begin = zoomSpans[i].getEarliestBegin();
- if (begin < minStart) {
- minStart = begin;
- }
- var end = zoomSpans[i].getLatestEnd();
- if (end > maxEnd) {
- maxEnd = end;
- }
- }
- this.setTimes({begin: minStart, end: maxEnd});
- this.render();
- },
-
- // Apply a function to all spans
- applyToAllSpans: function(cb) {
- for (var i = 0; i < this.searchResults.length; i++) {
- htrace.treeTraverseDepthFirstPre(this.searchResults.at(i),
- htrace.getReifiedChildren, 0,
- function(node, depth) {
- cb(node);
- });
- htrace.treeTraverseDepthFirstPre(this.searchResults.at(i),
- htrace.getReifiedParents, 0,
- function(node, depth) {
- if (depth > 0) {
- cb(node);
- }
- });
- }
- }
-});
http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/05ce37fb/htrace-webapp/src/main/web/app/search_view.js
----------------------------------------------------------------------
diff --git a/htrace-webapp/src/main/web/app/search_view.js b/htrace-webapp/src/main/web/app/search_view.js
deleted file mode 100644
index aeb4273..0000000
--- a/htrace-webapp/src/main/web/app/search_view.js
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-var htrace = htrace || {};
-htrace.SearchView = Backbone.View.extend({
- initialize : function() {
- this.predicateViews = [];
- this.highestPredicateIndex = 0;
- this.searchInProgress = false;
- this.searchResults = new htrace.SearchResults();
- this.resultsView = new htrace.SearchResultsView({
- searchResults: this.searchResults,
- el: "#resultsView"
- });
- },
-
- events: {
- "click #searchButton": "searchHandler",
- "click #clearButton": "clearHandler",
- "click .add-field": "dropdownHandler",
- "blur #begin": "blurBeginHandler",
- "blur #end": "blurEndHandler",
- "click #zoomButton": "zoomHandler"
- },
-
- searchHandler: function(e){
- e.preventDefault();
-
- this.doSearch(e.ctrlKey);
- },
-
- clearHandler: function(e){
- e.preventDefault();
-
- this.resultsView.clearHandler(true);
- },
-
- doSearch: function(showDebug){
- if (this.searchInProgress) {
- console.log("Can't start a new search while another one is in " +
- "progress.");
- return false;
- }
-
- // Check if there are no search criteria.
- if (this.predicateViews.length == 0) {
- htrace.showModalWarning("No Search Criteria Specified",
- "You have not specified any search criteria. " +
- "Use the 'Add Predicate' button to specify what to search for.");
- return false;
- }
-
- // Build the predicate array.
- predicates = []
- var predicateViewsLen = this.predicateViews.length;
- for (var i = 0; i < predicateViewsLen; i++) {
- var predicateView = this.predicateViews[i];
- try {
- predicates.push(predicateView.getPredicate());
- } catch(err) {
- htrace.showModalWarning("Search Field Validation Error",
- "Invalid search string for the '" + predicateView.ptype.name +
- "' field.<p/>" + err);
- return false;
- }
- }
- var queryJson = {
- pred: predicates,
- lim: 20
- };
- // If there are existing search results, we want results which "come after"
- // those. So pass the last span we saw as a continuation token.
- if (this.searchResults.size() > 0) {
- queryJson.prev =
- this.searchResults.at(this.searchResults.size() - 1).unparse();
- }
- var searchView = this;
- var queryResults = new htrace.QueryResults({queryJson: queryJson});
- console.log("Starting span query " + queryResults.url());
- this.searchInProgress = true;
- queryResults.fetch({
- success: function(model, response, options){
- var firstResults = (searchView.searchResults.size() === 0);
- console.log("Success on span query " + queryResults.url() + ": got " +
- queryResults.size() + " result(s). firstResults=" + firstResults);
- searchView.searchResults.add(queryResults.models);
- if (firstResults) {
- // After the initial search, zoom to fit everything.
- // On subsequent searches, we leave the viewport alone.
- searchView.resultsView.zoomHandler();
- }
- searchView.searchInProgress = false;
- if (showDebug) {
- htrace.showModalWarning("Search Debug",
- "This is the search debug box, accessible by holding down the " +
- "control key while clicking the search button.<p/>" +
- "<h3>Query JSON</h3><pre>" + queryResults.prettyQueryString() +
- "</pre><p/><h3>Response JSON</h3><pre>" +
- JSON.stringify(queryResults, null, 2) + "</pre><p/>");
- } else if (queryResults.size() == 0) {
- if (firstResults) {
- htrace.showModalWarning("No Results Found",
- "No results were found for your query.<p/>");
- } else {
- htrace.showModalWarning("No Additional Results Found",
- "No additional results were found for your query.<p/>");
- }
- }
- searchView.resultsView.render();
- },
- error: function(model, response, options){
- searchView.searchResults.reset();
- var err = "Error " + JSON.stringify(response, null, 2) +
- " on span query " + queryResults.url();
- console.log(err);
- alert(err);
- searchView.searchInProgress = false;
- }
- });
- return false;
- },
-
- dropdownHandler: function(e){
- e.preventDefault();
- var text = $(e.target).text();
- var ptype = htrace.parsePType(text);
- if (!ptype) {
- alert("Unable to parse predicate type '" + text + "'");
- return false;
- }
- var index = this.highestPredicateIndex;
- this.highestPredicateIndex++;
- var el = "pred" + index;
- $("#predicates").append('<div id="' + el + '"/></div>');
- predicateView = new htrace.PredicateView({
- el: "#" + el,
- index: index,
- ptype: ptype,
- searchView: this
- });
- this.predicateViews.push(predicateView);
- predicateView.render();
- return true;
- },
-
- blurBeginHandler: function(e) {
- return this.resultsView.handleBeginOrEndChange(e, "begin");
- },
-
- blurEndHandler: function(e) {
- return this.resultsView.handleBeginOrEndChange(e, "end");
- },
-
- zoomHandler: function(e) {
- e.preventDefault();
- this.resultsView.zoomHandler();
- },
-
- removePredicateView: function(predicateView) {
- this.predicateViews = _.without(this.predicateViews, predicateView);
- },
-
- render: function() {
- this.$el.html(_.template($("#search-view-template").html())
- ({ model : this.model }))
- this.resultsView.render();
- console.log("SearchView#render");
- return this;
- },
-
- close: function() {
- console.log("SearchView#close")
- while (this.predicateViews.length > 0) {
- this.predicateViews[0].remove();
- }
- this.resultsView.remove();
- this.resultsView = null;
- this.undelegateEvents();
- }
-});
http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/05ce37fb/htrace-webapp/src/main/web/app/server_info.js
----------------------------------------------------------------------
diff --git a/htrace-webapp/src/main/web/app/server_info.js b/htrace-webapp/src/main/web/app/server_info.js
deleted file mode 100644
index b03f706..0000000
--- a/htrace-webapp/src/main/web/app/server_info.js
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-// htraced ServerInfo sent back from /serverInfo.
-// See rest.go.
-htrace.ServerInfo = Backbone.Model.extend({
- defaults: {
- "ReleaseVersion": "unknown",
- "GitVersion": "unknown",
- },
-
- url: function() {
- return "server/info";
- }
-});
http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/05ce37fb/htrace-webapp/src/main/web/app/span.js
----------------------------------------------------------------------
diff --git a/htrace-webapp/src/main/web/app/span.js b/htrace-webapp/src/main/web/app/span.js
deleted file mode 100644
index cd87543..0000000
--- a/htrace-webapp/src/main/web/app/span.js
+++ /dev/null
@@ -1,282 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-var htrace = htrace || {};
-
-// The invalid span ID, which is all zeroes.
-htrace.INVALID_SPAN_ID = "00000000000000000000000000000000";
-
-// Convert an array of htrace.Span models into a comma-separated string.
-htrace.spanModelsToString = function(spans) {
- var ret = "";
- var prefix = "";
- for (var i = 0; i < spans.length; i++) {
- ret += prefix + JSON.stringify(spans[i].unparse());
- prefix = ", ";
- }
- return ret;
-};
-
-// Convert an array of return results from ajax calls into an array of
-// htrace.Span models.
-htrace.parseMultiSpanAjaxQueryResults = function(ajaxCalls) {
- var parsedSpans = [];
- for (var i = 0; i < ajaxCalls.length; i++) {
- var text = ajaxCalls[i][0];
- var result = ajaxCalls[i][1];
- if (ajaxCalls[i]["status"] != "200") {
- throw "ajax error: " + ajaxCalls[i].statusText;
- }
- var parsedSpan = new htrace.Span({});
- try {
- parsedSpan.parse(ajaxCalls[i].responseJSON, {});
- } catch (e) {
- throw "span parse error: " + e;
- }
- parsedSpans.push(parsedSpan);
- }
- return parsedSpans;
-};
-
-htrace.sortSpansByBeginTime = function(spans) {
- return spans.sort(function(a, b) {
- if (a.get("begin") < b.get("begin")) {
- return -1;
- } else if (a.get("begin") > b.get("begin")) {
- return 1;
- } else {
- return 0;
- }
- });
-};
-
-htrace.getReifiedParents = function(span) {
- return span.get("reifiedParents") || [];
-};
-
-htrace.getReifiedChildren = function(span) {
- return span.get("reifiedChildren") || [];
-};
-
-htrace.Span = Backbone.Model.extend({
- // Parse a span sent from htraced.
- // We use more verbose names for some attributes.
- // Missing attributes are treated as zero or empty. Numerical attributes are
- // forced to be numbers.
- parse: function(response, options) {
- var span = {};
- this.set("spanId", response.a ? response.a : htrace.INVALID_SPAN_ID);
- this.set("tracerId", response.r ? response.r : "");
- this.set("parents", response.p ? response.p : []);
- this.set("description", response.d ? response.d : "");
- this.set("begin", response.b ? parseInt(response.b, 10) : 0);
- this.set("end", response.e ? parseInt(response.e, 10) : 0);
- if (response.t) {
- var t = response.t.sort(function(a, b) {
- if (a.t < b.t) {
- return -1;
- } else if (a.t > b.t) {
- return 1;
- } else {
- return 0;
- }
- });
- this.set("timeAnnotations", t);
- } else {
- this.set("timeAnnotations", []);
- }
- this.set("infoAnnotations", response.n ? response.n : {});
- this.set("selected", false);
-
- // reifiedChildren starts off as null and will be filled in as needed.
- this.set("reifiedChildren", null);
-
- // If there are parents, reifiedParents starts off as null. Otherwise, we
- // know it is the empty array.
- this.set("reifiedParents", (this.get("parents").length == 0) ? [] : null);
-
- return span;
- },
-
- // Transform a span model back into a JSON string suitable for sending over
- // the wire.
- unparse: function() {
- var obj = { };
- if (!(this.get("spanId") === htrace.INVALID_SPAN_ID)) {
- obj.a = this.get("spanId");
- }
- if (!(this.get("tracerId") === "")) {
- obj.r = this.get("tracerId");
- }
- if (this.get("parents").length > 0) {
- obj.p = this.get("parents");
- }
- if (this.get("description").length > 0) {
- obj.d = this.get("description");
- }
- if (this.get("begin") > 0) {
- obj.b = this.get("begin");
- }
- if (this.get("end") > 0) {
- obj.e = this.get("end");
- }
- if (this.get("timeAnnotations").length > 0) {
- obj.t = this.get("timeAnnotations");
- }
- if (_.size(this.get("infoAnnotations")) > 0) {
- obj.n = this.get("infoAnnotations");
- }
- return obj;
- },
-
- //
- // Although the parent IDs are always present in the 'parents' field of the
- // span, sometimes we need the actual parent span models. In that case we
- // must "reify" them (make them real).
- //
- // This functionReturns a jquery promise which reifies all the parents of this
- // span and stores them into reifiedParents. The promise returns the empty
- // string on success, or an error string on failure.
- //
- reifyParents: function() {
- var span = this;
- var numParents = span.get("parents").length;
- var ajaxCalls = [];
- // Set up AJAX queries to reify the parents.
- for (var i = 0; i < numParents; i++) {
- ajaxCalls.push($.ajax({
- url: "span/" + span.get("parents")[i],
- data: {},
- contentType: "application/json; charset=utf-8",
- dataType: "json"
- }));
- }
- var rootDeferred = jQuery.Deferred();
- $.when.apply($, ajaxCalls).then(function() {
- var reifiedParents = [];
- try {
- reifiedParents = htrace.parseMultiSpanAjaxQueryResults(ajaxCalls);
- } catch (e) {
- rootDeferred.resolve("Error reifying parents for " +
- span.get("spanId") + ": " + e);
- return;
- }
- reifiedParents = htrace.sortSpansByBeginTime(reifiedParents);
- // The current span is a child of the reified parents. There may be other
- // children of those parents, but we are ignoring that here. By making
- // this non-null, the "expand children" button will not appear for these
- // paren spans.
- for (var j = 0; j < reifiedParents.length; j++) {
- reifiedParents[j].set("reifiedChildren", [span]);
- }
- console.log("Setting reified parents for " + span.get("spanId") +
- " to " + htrace.spanModelsToString (reifiedParents));
- span.set("reifiedParents", reifiedParents);
- rootDeferred.resolve("");
- });
- return rootDeferred.promise();
- },
-
- //
- // The span itself does not contain its children. However, the server has an
- // index which can be used to easily find the children of a particular span.
- //
- // This function returns a jquery promise which reifies all the children of
- // this span and stores them into reifiedChildren. The promise returns the
- // empty string on success, or an error string on failure.
- //
- reifyChildren: function() {
- var rootDeferred = jQuery.Deferred();
- var span = this;
- $.ajax({
- url: "span/" + span.get("spanId") + "/children?lim=50",
- data: {},
- contentType: "application/json; charset=utf-8",
- dataType: "json"
- }).done(function(childIds) {
- var ajaxCalls = [];
- for (var i = 0; i < childIds.length; i++) {
- ajaxCalls.push($.ajax({
- url: "span/" + childIds[i],
- data: {},
- contentType: "application/json; charset=utf-8",
- dataType: "json"
- }));
- };
- $.when.apply($, ajaxCalls).then(function() {
- var reifiedChildren;
- try {
- reifiedChildren = htrace.parseMultiSpanAjaxQueryResults(ajaxCalls);
- } catch (e) {
- reifiedChildren = rootDeferred.resolve("Error reifying children " +
- "for " + span.get("spanId") + ": " + e);
- return;
- }
- reifiedChildren = htrace.sortSpansByBeginTime(reifiedChildren);
- // The current span is a parent of the new child.
- // There may be other parents, but we are ignoring that here.
- // By making this non-null, the "expand parents" button will not
- // appear for these child spans.
- for (var j = 0; j < reifiedChildren.length; j++) {
- reifiedChildren[j].set("reifiedParents", [span]);
- }
- console.log("Setting reified children for " + span.get("spanId") +
- " to " + htrace.spanModelsToString (reifiedChildren));
- span.set("reifiedChildren", reifiedChildren);
- rootDeferred.resolve("");
- });
- }).fail(function(statusData) {
- // Check if the /children query failed.
- rootDeferred.resolve("Error querying children of " +
- span.get("spanId") + ": got " + statusData);
- return;
- });
- return rootDeferred.promise();
- },
-
- // Get the earliest begin time of this span or any of its reified parents or
- // children.
- getEarliestBegin: function() {
- var earliestBegin = this.get("begin");
- htrace.treeTraverseDepthFirstPre(this, htrace.getReifiedParents, 0,
- function(span, depth) {
- earliestBegin = Math.min(earliestBegin, span.get("begin"));
- });
- htrace.treeTraverseDepthFirstPre(this, htrace.getReifiedChildren, 0,
- function(span, depth) {
- earliestBegin = Math.min(earliestBegin, span.get("begin"));
- });
- return earliestBegin;
- },
-
- // Get the earliest begin time of this span or any of its reified parents or
- // children.
- getLatestEnd: function() {
- var latestEnd = this.get("end");
- htrace.treeTraverseDepthFirstPre(this, htrace.getReifiedParents, 0,
- function(span, depth) {
- latestEnd = Math.max(latestEnd, span.get("end"));
- });
- htrace.treeTraverseDepthFirstPre(this, htrace.getReifiedChildren, 0,
- function(span, depth) {
- latestEnd = Math.max(latestEnd, span.get("end"));
- });
- return latestEnd;
- },
-});
http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/05ce37fb/htrace-webapp/src/main/web/app/span_details_view.js
----------------------------------------------------------------------
diff --git a/htrace-webapp/src/main/web/app/span_details_view.js b/htrace-webapp/src/main/web/app/span_details_view.js
deleted file mode 100644
index 9a37055..0000000
--- a/htrace-webapp/src/main/web/app/span_details_view.js
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-var htrace = htrace || {};
-
-htrace.SpanDetailsView = Backbone.View.extend({
- initialize: function(options) {
- this.el = options.el;
- this.model = options.model;
- }
-
- render: function() {
- this.$el.html(_.template($("#about-view-template").html())
- ({ model : this.model }));
- console.log("AboutView#render");
- return this;
- },
-
- close: function() {
- console.log("AboutView#close")
- this.undelegateEvents();
- }
-});
http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/05ce37fb/htrace-webapp/src/main/web/app/span_group_widget.js
----------------------------------------------------------------------
diff --git a/htrace-webapp/src/main/web/app/span_group_widget.js b/htrace-webapp/src/main/web/app/span_group_widget.js
deleted file mode 100644
index ad0b482..0000000
--- a/htrace-webapp/src/main/web/app/span_group_widget.js
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-var htrace = htrace || {};
-
-// Widget containing a group of trace spans displayed on the canvas.
-htrace.SpanGroupWidget = function(params) {
- this.draw = function() {
- this.ctx.save();
- this.ctx.fillStyle="#ffffff";
- this.ctx.fillRect(this.x0, this.y0, this.xF - this.x0, this.yF - this.y0);
- this.ctx.strokeStyle="#aaaaaa";
- this.ctx.beginPath();
- this.ctx.moveTo(this.x0, this.y0);
- this.ctx.lineTo(this.xF, this.y0);
- this.ctx.stroke();
- this.ctx.beginPath();
- this.ctx.moveTo(this.x0, this.yF);
- this.ctx.lineTo(this.xF, this.yF);
- this.ctx.stroke();
- this.ctx.restore();
- return true;
- };
-
- this.createSpanWidget = function(node, indentLevel,
- allowUpButton, allowDownButton) {
- new htrace.SpanWidget({
- manager: this.manager,
- ctx: this.ctx,
- span: node,
- x0: this.x0,
- xB: this.xB,
- xD: this.xD,
- xF: this.xF,
- xT: this.childIndent * indentLevel,
- y0: this.spanY,
- yF: this.spanY + this.spanWidgetHeight,
- allowUpButton: allowUpButton,
- allowDownButton: allowDownButton,
- begin: this.begin,
- end: this.end
- });
- this.spanY += this.spanWidgetHeight;
- }
-
- this.handle = function(e) {
- switch (e.type) {
- case "draw":
- this.draw();
- return true;
- }
- }
-
- for (var k in params) {
- this[k]=params[k];
- }
- this.manager.register("draw", this);
- this.spanY = this.y0 + 4;
-
- // Figure out how much to indent each child's description text.
- this.childIndent = Math.max(10, (this.xF - this.xD) / 50);
-
- // Get the maximum depth of the parents tree to find out how far to indent.
- var parentTreeHeight =
- htrace.treeHeight(this.span, htrace.getReifiedParents);
-
- // Traverse the parents tree upwards.
- var thisWidget = this;
- htrace.treeTraverseDepthFirstPost(this.span, htrace.getReifiedParents, 0,
- function(node, depth) {
- if (depth > 0) {
- thisWidget.createSpanWidget(node,
- parentTreeHeight - depth, true, false);
- }
- });
- thisWidget.createSpanWidget(this.span, parentTreeHeight, true, true);
- // Traverse the children tree downwards.
- htrace.treeTraverseDepthFirstPre(this.span, htrace.getReifiedChildren, 0,
- function(node, depth) {
- if (depth > 0) {
- thisWidget.createSpanWidget(node,
- parentTreeHeight + depth, false, true);
- }
- });
- this.yF = this.spanY + 4;
- return this;
-};
http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/05ce37fb/htrace-webapp/src/main/web/app/span_widget.js
----------------------------------------------------------------------
diff --git a/htrace-webapp/src/main/web/app/span_widget.js b/htrace-webapp/src/main/web/app/span_widget.js
deleted file mode 100644
index 50bea91..0000000
--- a/htrace-webapp/src/main/web/app/span_widget.js
+++ /dev/null
@@ -1,309 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-var htrace = htrace || {};
-
-htrace.showSpanDetails = function(span) {
- var info = {
- spanID: span.get("spanID"),
- begin: htrace.dateToString(span.get("begin"), 10),
- end: htrace.dateToString(span.get("end"), 10),
- duration: ((span.get("end") - span.get("begin")) + " ms")
- };
- var explicitOrder = {
- spanId: 1,
- begin: 2,
- end: 3,
- duration: 4
- };
- keys = ["duration"];
- for(k in span.attributes) {
- if (k == "reifiedChildren") {
- continue;
- }
- if (k == "reifiedParents") {
- continue;
- }
- if (k == "selected") {
- continue;
- }
- if (k == "timeAnnotations") {
- // For timeline annotations, make the times into top-level keys.
- var timeAnnotations = span.get("timeAnnotations");
- for (var i = 0; i < timeAnnotations.length; i++) {
- var key = htrace.dateToString(timeAnnotations[i].t);
- keys.push(key);
- info[key] = timeAnnotations[i].m;
- explicitOrder[key] = 200;
- }
- continue;
- }
- if (k == "infoAnnotations") {
- // For info annotations, move the keys to the top level.
- // Surround them in brackets to make it clear that they are
- // user-defined.
- var infoAnnotations = span.get("infoAnnotations");
- _.each(infoAnnotations, function(value, key) {
- key = "[" + key + "]";
- keys.push(key);
- info[key] = value;
- explicitOrder[key] = 200;
- });
- continue;
- }
- keys.push(k);
- if (info[k] == null) {
- info[k] = span.get(k);
- }
- }
- // We sort the keys so that the stuff we want at the top appears at the top,
- // and everything else is in alphabetical order.
- keys = keys.sort(function(a, b) {
- var oa = explicitOrder[a] || 100;
- var ob = explicitOrder[b] || 100;
- if (oa < ob) {
- return -1;
- } else if (oa > ob) {
- return 1;
- } else if (a < b) {
- return -1;
- } else if (a > b) {
- return 1;
- } else {
- return 0;
- }
- });
- var len = keys.length;
- var h = '<table style="table-layout:fixed;width:100%;word-wrap:break-word">';
- for (i = 0; i < len; i++) {
- // Make every other row grey to improve visibility.
- var colorString = ((i%2) == 1) ? "#f1f1f1" : "#ffffff";
- h += _.template($("#table-row-template").html())(
- {bgcolor: colorString, key: keys[i], val: info[keys[i]]});
- }
- h += '</table>';
- htrace.showModal(_.template($("#modal-table-template").html())(
- {title: "Span Details", body: h}));
-};
-
-// Widget containing the trace span displayed on the canvas.
-htrace.SpanWidget = function(params) {
- this.draw = function() {
- this.drawBackground();
- this.drawTracerId();
- this.drawDescription();
- };
-
- // Draw the background of this span widget.
- this.drawBackground = function() {
- this.ctx.save();
- if (this.span.get("selected")) {
- this.ctx.fillStyle="#ffccff";
- } else {
- this.ctx.fillStyle="#ffffff";
- }
- this.ctx.fillRect(this.x0, this.y0, this.xSize, this.ySize);
- this.ctx.restore();
- }
-
- // Draw process ID text.
- this.drawTracerId = function() {
- this.ctx.save();
- this.ctx.fillStyle="#000000";
- this.ctx.font = (this.ySize - 2) + "px sans-serif";
- this.ctx.beginPath();
- this.ctx.rect(this.x0, this.y0, this.xB - this.x0, this.ySize);
- this.ctx.clip();
- this.ctx.fillText(this.span.get('tracerId'), this.x0, this.yF - 4);
- this.ctx.restore();
- };
-
- // Draw the span description
- this.drawDescription = function() {
- // Draw the light blue bar representing time.
- this.ctx.save();
- this.ctx.beginPath();
- this.ctx.rect(this.xD, this.y0, this.xF - this.xD, this.ySize);
- this.ctx.clip();
- this.ctx.strokeStyle="#000000";
- this.ctx.fillStyle="#a7b7ff";
- var beginX = this.timeToPosition(this.span.get('begin'));
- var endX = this.timeToPosition(this.span.get('end'));
-
- // If the span is completely off the screen, draw a diamond at either the
- // beginning or the end of the bar to indicate whether it's too early or too
- // late to be seen.
- if (endX < this.x0) {
- beginX = this.xD;
- endX = this.xD;
- }
- if (beginX > this.xF) {
- beginX = this.xF;
- endX = this.xF;
- }
-
- var gapY = 2;
- var epsilon = Math.max(2, Math.floor(this.xSize / 1000));
- if (endX - beginX < epsilon) {
- // The time interval is too narrow to see. Draw a diamond on the point instead.
- this.ctx.beginPath();
- this.ctx.moveTo(beginX, this.y0 + gapY);
- this.ctx.lineTo(beginX + (Math.floor(this.ySize / 2) - gapY),
- this.y0 + Math.floor(this.ySize / 2));
- this.ctx.lineTo(beginX, this.yF - gapY);
- this.ctx.lineTo(beginX - (Math.floor(this.ySize / 2) - gapY),
- this.y0 + Math.floor(this.ySize / 2));
- this.ctx.closePath();
- this.ctx.fill();
- } else {
- // Draw a bar from the start time to the end time.
-// console.log("beginX=" + beginX + ", endX=" + endX +
-// ", begin=" + this.span.get('begin') + ", end=" + this.span.get('end'));
- this.ctx.fillRect(beginX, this.y0 + gapY, endX - beginX,
- this.ySize - (gapY * 2));
-
- // Draw a dots showing time points where annotations are.
- var annotations = this.span.get('timeAnnotations');
- var annotationY = this.y0 + gapY;
- var annotationW = 4;
- var annotationH = (this.ySize - (gapY * 2)) / 2;
- this.ctx.fillStyle="#419641";
- for (var i = 0; i < annotations.length; i++) {
- this.ctx.fillRect(this.timeToPosition(annotations[i].t), annotationY,
- annotationW, annotationH);
- }
- }
-
- // Draw description text
- this.ctx.fillStyle="#000000";
- this.ctx.font = (this.ySize - gapY) + "px sans-serif";
- this.ctx.fillText(this.span.get('description'),
- this.xD + this.xT,
- this.yF - gapY - 2);
-
- this.ctx.restore();
- };
-
- // Convert a time in milliseconds since the epoch to an x position.
- this.timeToPosition = function(time) {
- return this.xD +
- (((time - this.begin) * (this.xF - this.xD)) /
- (this.end - this.begin));
- };
-
- this.handle = function(e) {
- switch (e.type) {
- case "mouseDown":
- if (!htrace.inBoundingBox(e.x, e.y,
- this.x0, this.xF, this.y0, this.yF)) {
- return true;
- }
- if (e.raw.ctrlKey) {
- // If the control key is pressed, we toggle the current selection.
- // The user can create multiple selections this way.
- if (this.span.get("selected")) {
- this.span.set("selected", false);
- } else {
- this.span.set("selected", true);
- }
- } else {
- var that = this;
- this.manager.searchResultsView.applyToAllSpans(function(span) {
- // Note: we don't want to set the selection state unless we need
- // to. Setting the state (even to the same thing it already is)
- // triggers a full re-render, if the span is one in the results
- // collection. A full re-render slows us down and disrupts events
- // like double-clicking.
- if (that.span === span) {
- if (!span.get("selected")) {
- span.set("selected", true);
- }
- } else if (span.get("selected")) {
- span.set("selected", false);
- }
- });
- }
- return true;
- case "draw":
- this.draw();
- return true;
- case "dblclick":
- if (htrace.inBoundingBox(e.x, e.y,
- this.x0, this.xF, this.y0, this.yF)) {
- htrace.showSpanDetails(this.span);
- }
- return true;
- }
- };
-
- for (var k in params) {
- this[k]=params[k];
- }
- this.xSize = this.xF - this.x0;
- this.ySize = this.yF - this.y0;
- this.xDB = this.xD - this.xB;
- this.manager.register("draw", this);
-
- var widget = this;
- if ((this.span.get("reifiedParents") == null) && (this.allowUpButton)) {
- new htrace.TriangleButton({
- ctx: this.ctx,
- manager: this.manager,
- direction: "up",
- x0: this.xB + 2,
- xF: this.xB + (this.xDB / 2) - 2,
- y0: this.y0 + 2,
- yF: this.yF - 2,
- callback: function() {
- $.when(widget.span.reifyParents()).done(function (result) {
- console.log("reifyParents: result was '" + result + "'");
- if (result != "") {
- alert(result);
- } else {
- widget.manager.searchResultsView.render();
- }
- });
- },
- });
- }
- if ((this.span.get("reifiedChildren") == null) && (this.allowDownButton)) {
- new htrace.TriangleButton({
- ctx: this.ctx,
- manager: this.manager,
- direction: "down",
- x0: this.xB + (this.xDB / 2) + 2,
- xF: this.xD - 2,
- y0: this.y0 + 2,
- yF: this.yF - 2,
- callback: function() {
- $.when(widget.span.reifyChildren()).done(function (result) {
- console.log("reifyChildren: result was '" + result + "'");
- if (result != "") {
- alert(result);
- } else {
- widget.manager.searchResultsView.render();
- }
- });
- },
- });
- }
- this.manager.register("mouseDown", this);
- this.manager.register("dblclick", this);
- return this;
-};
http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/05ce37fb/htrace-webapp/src/main/web/app/string.js
----------------------------------------------------------------------
diff --git a/htrace-webapp/src/main/web/app/string.js b/htrace-webapp/src/main/web/app/string.js
deleted file mode 100644
index c9c514b..0000000
--- a/htrace-webapp/src/main/web/app/string.js
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-var htrace = htrace || {};
-
-// Parse an ISO8601 date string into a moment.js object.
-htrace.parseDate = function(val) {
- if (val.match(/^[0-9]([0-9]*)$/)) {
- // Treat an all-numeric field as UTC milliseconds since the epoch.
- return moment.utc(parseInt(val, 10));
- }
- // Look for approved date formats.
- var toTry = [
- "YYYY-MM-DDTHH:mm:ss,SSS",
- "YYYY-MM-DDTHH:mm:ss",
- "YYYY-MM-DDTHH:mm",
- "YYYY-MM-DD"
- ];
- for (var i = 0; i < toTry.length; i++) {
- var m = moment.utc(val, toTry[i], true);
- if (m.isValid()) {
- return m;
- }
- }
- throw "Please enter the date either as YYYY-MM-DDTHH:mm:ss,SSS " +
- "in UTC, or as the number of milliseconds since the epoch.";
-};
-
-// Convert a moment.js moment into an ISO8601-style date string.
-htrace.dateToString = function(val) {
- return moment.utc(val).format("YYYY-MM-DDTHH:mm:ss,SSS");
-};
-
-// Normalize a span ID into the format the server expects to see--
-// i.e. something like 00000000000000000000000000000000.
-htrace.normalizeSpanId = function(str) {
- if (str.length != 36) {
- throw "The length of '" + str + "' was " + str.length +
- ", but span IDs must be 36 characters long.";
- }
- if (str.search(/[^0-9a-fA-F]/) != -1) {
- throw "Span IDs must contain only hexadecimal digits, but '" + str +
- "' contained invalid characters.";
- }
- return str;
-};
http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/05ce37fb/htrace-webapp/src/main/web/app/time_cursor.js
----------------------------------------------------------------------
diff --git a/htrace-webapp/src/main/web/app/time_cursor.js b/htrace-webapp/src/main/web/app/time_cursor.js
deleted file mode 100644
index 1caaa9a..0000000
--- a/htrace-webapp/src/main/web/app/time_cursor.js
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-var htrace = htrace || {};
-
-// Draws a vertical bar selecting a time.
-htrace.TimeCursor = function(params) {
- this.positionToTime = function(x) {
- if ((x < this.x0) || (x > this.xF)) {
- return -1;
- }
- return this.begin +
- (((x - this.x0) * (this.end - this.begin)) / (this.xF - this.x0));
- };
-
- this.timeToPosition = function(time) {
- return this.x0 + (((time - this.begin) *
- (this.xF - this.x0)) / (this.end - this.begin));
- };
-
- this.draw = function() {
- if (this.selectedTime != -1) {
- this.ctx.save();
- this.ctx.beginPath();
- this.ctx.rect(this.x0, this.y0,
- this.xF - this.x0, this.yF - this.y0);
- this.ctx.clip();
- this.ctx.strokeStyle="#ff0000";
- var x = this.timeToPosition(this.selectedTime);
- this.ctx.beginPath();
- this.ctx.moveTo(x, this.y0);
- this.ctx.lineTo(x, this.yF);
- this.ctx.stroke();
- this.ctx.restore();
- }
- };
-
- this.handle = function(e) {
- switch (e.type) {
- case "mouseMove":
- if (htrace.inBoundingBox(e.x, e.y,
- this.x0, this.xF, this.y0, this.yF)) {
- this.selectedTime = this.positionToTime(e.x);
- if (this.selectedTime < 0) {
- $(this.el).val("");
- } else {
- $(this.el).val(htrace.dateToString(this.selectedTime));
- }
- return true;
- }
- return true;
- case "draw":
- this.draw();
- return true;
- }
- };
-
- this.selectedTime = -1;
- for (var k in params) {
- this[k]=params[k];
- }
- this.manager.register("mouseMove", this);
- this.manager.register("draw", this);
- return this;
-};