You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by an...@apache.org on 2015/09/04 12:14:26 UTC
[1/2] ignite git commit: # GG-1223 Added export to csv, minor fixes.
Repository: ignite
Updated Branches:
refs/heads/ignite-843 7ebc5fee8 -> 316b9421a
# GG-1223 Added export to csv, minor fixes.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/10a8b95d
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/10a8b95d
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/10a8b95d
Branch: refs/heads/ignite-843
Commit: 10a8b95dfe570cb30bd131cedffbef013410606e
Parents: e3b3c57
Author: Andrey <an...@gridgain.com>
Authored: Fri Sep 4 16:57:42 2015 +0700
Committer: Andrey <an...@gridgain.com>
Committed: Fri Sep 4 16:57:42 2015 +0700
----------------------------------------------------------------------
.../src/main/js/controllers/common-module.js | 25 +++-
.../src/main/js/controllers/sql-controller.js | 119 ++++++++++++++-----
.../main/js/controllers/summary-controller.js | 13 +-
modules/control-center-web/src/main/js/db.js | 6 +-
.../src/main/js/public/stylesheets/style.scss | 7 ++
.../src/main/js/routes/agent.js | 22 ++++
.../main/js/views/configuration/summary.jade | 2 +-
.../src/main/js/views/sql/sql.jade | 16 +--
.../main/js/views/templates/paragraph-rate.jade | 10 +-
.../handlers/query/QueryCommandHandler.java | 4 +-
10 files changed, 162 insertions(+), 62 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/10a8b95d/modules/control-center-web/src/main/js/controllers/common-module.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/controllers/common-module.js b/modules/control-center-web/src/main/js/controllers/common-module.js
index 021d624..8f75500 100644
--- a/modules/control-center-web/src/main/js/controllers/common-module.js
+++ b/modules/control-center-web/src/main/js/controllers/common-module.js
@@ -671,6 +671,21 @@ controlCenterModule.service('$common', [
return 'Save ' + objectName;
return 'Nothing to save';
+ },
+ download: function (type, name, data) {
+ var file = document.createElement('a');
+
+ file.setAttribute('href', 'data:' + type +';charset=utf-8,' + data);
+ file.setAttribute('download', name);
+ file.setAttribute('target', '_self');
+
+ file.style.display = 'none';
+
+ document.body.appendChild(file);
+
+ file.click();
+
+ document.body.removeChild(file);
}
}
}]);
@@ -1324,13 +1339,13 @@ controlCenterModule.factory('$focus', function ($timeout) {
});
// Directive to auto-focus element.
-controlCenterModule.directive('autoFocus', function($timeout) {
+controlCenterModule.directive('autoFocus', function() {
return {
- restrict: 'AC',
- link: function(scope, element) {
- $timeout(function(){
+ link: {
+ post: function postLink(scope, element) {
+ // this succeeds since the element has been rendered
element[0].focus();
- });
+ }
}
};
});
http://git-wip-us.apache.org/repos/asf/ignite/blob/10a8b95d/modules/control-center-web/src/main/js/controllers/sql-controller.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/controllers/sql-controller.js b/modules/control-center-web/src/main/js/controllers/sql-controller.js
index 57b7a0b..bbadd25 100644
--- a/modules/control-center-web/src/main/js/controllers/sql-controller.js
+++ b/modules/control-center-web/src/main/js/controllers/sql-controller.js
@@ -39,6 +39,8 @@ controlCenterModule.controller('sqlController', ['$scope', '$window','$controlle
{value: 'h', label: 'hours'}
];
+ $scope.exportDropdown = [{ 'text': 'Export all', 'click': 'exportAll(paragraph)'}];
+
$scope.aceInit = function (editor) {
editor.setAutoScrollEditorIntoView(true);
editor.$blockScrolling = Infinity;
@@ -77,6 +79,14 @@ controlCenterModule.controller('sqlController', ['$scope', '$window','$controlle
loadNotebook();
+ var _saveNotebook = function (f) {
+ $http.post('/notebooks/save', $scope.notebook)
+ .success(f || function() {})
+ .error(function (errMsg) {
+ $common.showError(errMsg);
+ });
+ };
+
$scope.renameNotebook = function (name) {
if (!name)
return;
@@ -84,35 +94,24 @@ controlCenterModule.controller('sqlController', ['$scope', '$window','$controlle
if ($scope.notebook.name != name) {
$scope.notebook.name = name;
- $http.post('/notebooks/save', $scope.notebook)
- .success(function () {
- var idx = _.findIndex($scope.$root.notebooks, function (item) {
- return item._id == $scope.notebook._id;
- });
+ _saveNotebook(function () {
+ var idx = _.findIndex($scope.$root.notebooks, function (item) {
+ return item._id == $scope.notebook._id;
+ });
- if (idx >= 0) {
- $scope.$root.notebooks[idx].name = name;
+ if (idx >= 0) {
+ $scope.$root.notebooks[idx].name = name;
- $scope.$root.rebuildDropdown();
- }
+ $scope.$root.rebuildDropdown();
+ }
- $scope.notebook.edit = false;
- })
- .error(function (errMsg) {
- $common.showError(errMsg);
- });
+ $scope.notebook.edit = false;
+ });
}
else
$scope.notebook.edit = false
};
- $scope.saveNotebook = function () {
- $http.post('/notebooks/save', $scope.notebook)
- .error(function (errMsg) {
- $common.showError(errMsg);
- });
- };
-
$scope.removeNotebook = function () {
$confirm.show('Are you sure you want to remove notebook: "' + $scope.notebook.name + '"?').then(
function () {
@@ -146,13 +145,7 @@ controlCenterModule.controller('sqlController', ['$scope', '$window','$controlle
if (paragraph.name != newName) {
paragraph.name = newName;
- $http.post('/notebooks/save', $scope.notebook)
- .success(function () {
- paragraph.edit = false;
- })
- .error(function (errMsg) {
- $common.showError(errMsg);
- });
+ _saveNotebook(function () { paragraph.edit = false; });
}
else
paragraph.edit = false
@@ -266,8 +259,6 @@ controlCenterModule.controller('sqlController', ['$scope', '$window','$controlle
};
var _processQueryResult = function (item) {
- $scope.saveNotebook();
-
return function (res) {
item.meta = [];
@@ -287,6 +278,8 @@ controlCenterModule.controller('sqlController', ['$scope', '$window','$controlle
};
$scope.execute = function (item) {
+ _saveNotebook();
+
_appendOnLast(item);
$http.post('/agent/query', {query: item.query, pageSize: item.pageSize, cacheName: item.cache.name})
@@ -297,6 +290,8 @@ controlCenterModule.controller('sqlController', ['$scope', '$window','$controlle
};
$scope.explain = function (item) {
+ _saveNotebook();
+
_appendOnLast(item);
$http.post('/agent/query', {query: 'EXPLAIN ' + item.query, pageSize: item.pageSize, cacheName: item.cache.name})
@@ -307,6 +302,8 @@ controlCenterModule.controller('sqlController', ['$scope', '$window','$controlle
};
$scope.scan = function (item) {
+ _saveNotebook();
+
_appendOnLast(item);
$http.post('/agent/scan', {pageSize: item.pageSize, cacheName: item.cache.name})
@@ -333,6 +330,56 @@ controlCenterModule.controller('sqlController', ['$scope', '$window','$controlle
});
};
+ var _export = function(meta, rows) {
+ var csvContent = "";
+
+ if (meta) {
+ csvContent += meta.map(function (col) {
+ return $scope.columnToolTip(col);
+ }).join(",") + '\n';
+ }
+
+ rows.forEach(function (row) {
+ if (Array.isArray(row)) {
+ csvContent += row.map(function (elem) {
+ return elem ? JSON.stringify(elem) : "";
+ }).join(",");
+ }
+ else {
+ var first = true;
+
+ for (var prop of meta) {
+ if (first)
+ first = false;
+ else
+ csvContent += ",";
+
+ var elem = row[prop.fieldName];
+
+ csvContent += elem ? JSON.stringify(elem) : "";
+ }
+ }
+
+ csvContent += '\n';
+ });
+
+ $common.download('application/octet-stream;charset=utf-8', 'export.csv', escape(csvContent));
+ };
+
+ $scope.exportPage = function(paragraph) {
+ _export(paragraph.meta, paragraph.rows);
+ };
+
+ $scope.exportAll = function(paragraph) {
+ $http.post('/agent/query/getAll', {query: paragraph.query, cacheName: paragraph.cache.name})
+ .success(function (item) {
+ _export(item.meta, item.rows);
+ })
+ .error(function (errMsg) {
+ $common.showError(errMsg);
+ });
+ };
+
$scope.columnToolTip = function (col) {
var res = [];
@@ -357,6 +404,18 @@ controlCenterModule.controller('sqlController', ['$scope', '$window','$controlle
return "";
};
+ $scope.startRefresh = function (paragraph, value, unit) {
+ paragraph.rate = { value: value, unit: unit, ruined: true };
+
+ //TODO Start timer.
+ };
+
+ $scope.stopRefresh = function (paragraph) {
+ paragraph.rate.ruined = false;
+
+ //TODO Stop timer.
+ };
+
$scope.getter = function (value) {
return value;
};
http://git-wip-us.apache.org/repos/asf/ignite/blob/10a8b95d/modules/control-center-web/src/main/js/controllers/summary-controller.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/controllers/summary-controller.js b/modules/control-center-web/src/main/js/controllers/summary-controller.js
index 2f1cec1..dfaa574 100644
--- a/modules/control-center-web/src/main/js/controllers/summary-controller.js
+++ b/modules/control-center-web/src/main/js/controllers/summary-controller.js
@@ -107,18 +107,7 @@ controlCenterModule.controller('summaryController', ['$scope', '$http', '$common
$scope.download = function () {
$http.post('summary/download', {_id: $scope.selectedItem._id, os: $scope.os})
.success(function (data) {
- var file = document.createElement('a');
-
- file.setAttribute('href', 'data:application/octet-stream;charset=utf-8,' + data);
- file.setAttribute('download', $scope.selectedItem.name + '-configuration.zip');
-
- file.style.display = 'none';
-
- document.body.appendChild(file);
-
- file.click();
-
- document.body.removeChild(file);
+ $common.download('application/octet-stream', $scope.selectedItem.name + '-configuration.zip', data);
})
.error(function (errMsg) {
$common.showError('Failed to generate zip: ' + errMsg);
http://git-wip-us.apache.org/repos/asf/ignite/blob/10a8b95d/modules/control-center-web/src/main/js/db.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/db.js b/modules/control-center-web/src/main/js/db.js
index 8aee6ec..216187c 100644
--- a/modules/control-center-web/src/main/js/db.js
+++ b/modules/control-center-web/src/main/js/db.js
@@ -351,7 +351,11 @@ var NotebookSchema = new Schema({
query: String,
editor: Boolean,
result: {type: String, enum: ['none', 'table', 'bar', 'pie', 'line', 'area']},
- pageSize: Number
+ pageSize: Number,
+ cache: {
+ name: String,
+ mode: {type: String, enum: ['PARTITIONED', 'REPLICATED', 'LOCAL']}
+ }
}]
});
http://git-wip-us.apache.org/repos/asf/ignite/blob/10a8b95d/modules/control-center-web/src/main/js/public/stylesheets/style.scss
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/public/stylesheets/style.scss b/modules/control-center-web/src/main/js/public/stylesheets/style.scss
index 3b8ffc1..fed7ce3 100644
--- a/modules/control-center-web/src/main/js/public/stylesheets/style.scss
+++ b/modules/control-center-web/src/main/js/public/stylesheets/style.scss
@@ -753,6 +753,13 @@ div.affix.padding-top-dflt {
margin-top: -8px;
}
+.popover .close {
+ position: absolute;
+ top: 5px;
+ right: 5px;
+ float: none;
+}
+
label {
font-weight: normal;
margin-bottom: 0;
http://git-wip-us.apache.org/repos/asf/ignite/blob/10a8b95d/modules/control-center-web/src/main/js/routes/agent.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/routes/agent.js b/modules/control-center-web/src/main/js/routes/agent.js
index 0c5fa4a..eb586e8 100644
--- a/modules/control-center-web/src/main/js/routes/agent.js
+++ b/modules/control-center-web/src/main/js/routes/agent.js
@@ -78,6 +78,28 @@ router.post('/query', function (req, res) {
}
});
+/* Execute query getAll. */
+router.post('/query/getAll', function (req, res) {
+ var client = _client(req, res);
+
+ if (client) {
+ // Create sql query.
+ var qry = new SqlFieldsQuery(req.body.query);
+
+ // Set page size for query.
+ qry.setPageSize(1024);
+
+ // Get query cursor.
+ var cursor = client.ignite().cache(req.body.cacheName).query(qry);
+
+ cursor.getAll().then(function (rows) {
+ res.json({meta: cursor.fieldsMetadata(), rows: rows});
+ }, function (err) {
+ res.status(500).send(err);
+ });
+ }
+});
+
/* Execute query. */
router.post('/scan', function (req, res) {
var client = _client(req, res);
http://git-wip-us.apache.org/repos/asf/ignite/blob/10a8b95d/modules/control-center-web/src/main/js/views/configuration/summary.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/views/configuration/summary.jade b/modules/control-center-web/src/main/js/views/configuration/summary.jade
index 6c77a78..63a1c84 100644
--- a/modules/control-center-web/src/main/js/views/configuration/summary.jade
+++ b/modules/control-center-web/src/main/js/views/configuration/summary.jade
@@ -64,7 +64,7 @@ block content
.col-xs-2.col-sm-2.col-md-1
label Generate:
.col-xs-4.col-sm-3.col-md-3
- button.form-control(type='button' ng-model='configServer.javaClassServer' bs-select data-placeholder='{{detail.placeholder}}' bs-options='item.value as item.label for item in javaClassItems' data-sort='false')
+ button.form-control(type='button' ng-model='configServer.javaClassServer' bs-select data-placeholder='{{detail.placeholder}}' bs-options='item.value as item.label for item in javaClassItems' data-sort='false')
div(ui-ace='{ onLoad: aceInit, mode: "java" }' ng-model='javaServer')
div(bs-pane title='Dockerfile')
.details-row
http://git-wip-us.apache.org/repos/asf/ignite/blob/10a8b95d/modules/control-center-web/src/main/js/views/sql/sql.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/views/sql/sql.jade b/modules/control-center-web/src/main/js/views/sql/sql.jade
index 93c637e..75878be 100644
--- a/modules/control-center-web/src/main/js/views/sql/sql.jade
+++ b/modules/control-center-web/src/main/js/views/sql/sql.jade
@@ -96,13 +96,15 @@ block container
button.btn.btn-default.base-control.tipLabel(ng-model='paragraph.pageSize' bs-options='item for item in pageSizes' bs-select)
.panel-body(ng-show='paragraph.rows && paragraph.result === "table" && paragraph.rows')
.row
- .col-sm-8
- lable Page #:
- b {{paragraph.page}}
- | Results:
- b {{paragraph.rows.length + paragraph.total}}
- .col-sm-4
- button.btn.btn-primary.fieldButton(ng-click='nextPage(paragraph)' ng-disabled='!paragraph.queryId') Next page
+ lable Page #:
+ b {{paragraph.page}}
+ | Results:
+ b {{paragraph.rows.length + paragraph.total}}
+ button.btn.btn-primary.fieldButton(ng-click='nextPage(paragraph)' ng-disabled='!paragraph.queryId') Next page
+ .btn-group.fieldButton
+ button.btn.btn-primary.fieldButton(ng-click='exportPage(paragraph)' ) Export
+ button.btn.dropdown-toggle.btn-primary(id='export-item-dropdown' data-toggle='dropdown' data-container='body' bs-dropdown='exportDropdown' data-placement='bottom-right')
+ span.caret
.table-responsive
table.table.table-condensed(st-table='displayedCollection' st-safe-src='paragraph.rows')
thead
http://git-wip-us.apache.org/repos/asf/ignite/blob/10a8b95d/modules/control-center-web/src/main/js/views/templates/paragraph-rate.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/views/templates/paragraph-rate.jade b/modules/control-center-web/src/main/js/views/templates/paragraph-rate.jade
index 3f583cb..d9d8cdf 100644
--- a/modules/control-center-web/src/main/js/views/templates/paragraph-rate.jade
+++ b/modules/control-center-web/src/main/js/views/templates/paragraph-rate.jade
@@ -17,13 +17,15 @@
.popover(tabindex='-1' style='width: 200px')
.arrow
h3.popover-title(style='color: black') Refresh rate
+ button.close(id='paragraph-rate-close' type='button' ng-click='$hide()') ×
.popover-content
form(name='popoverForm')
.form-group(style='margin: 0; padding: 5px')
.col-sm-4(style='padding: 0')
- input.form-control(id='paragraph-rate' ng-model='paragraph.rate.value' type='number' required auto-focus)
+ input.form-control(id='paragraph-rate' ng-init='value = paragraph.rate.value' ng-model='value' type='number' required auto-focus)
.col-sm-8(style='padding-left: 5px; padding-right: 0')
- button.form-control(id='paragraph-unit' ng-model='paragraph.rate.unit' required placeholder='Time unit' bs-select bs-options='item.value as item.label for item in timeUnit' tabindex='0')
+ button.form-control(id='paragraph-unit' ng-init='unit = paragraph.rate.unit' ng-model='unit' required placeholder='Time unit' bs-select bs-options='item.value as item.label for item in timeUnit' tabindex='0')
.form-actions(style='margin-top: 30px; padding: 5px')
- button.btn.btn-primary(id='paragraph-rate-btn-set' ng-disabled='popoverForm.$invalid' type='button' ng-click='popover.saved=true;paragraph.rate.ruined=true; $hide()') Set
- button.btn.btn-primary.btn-default(id='paragraph-rate-btn-stop' type='button' ng-click='paragraph.rate.ruined=false; $hide()') Stop
+ button.btn.btn-primary(id='paragraph-rate-start' ng-disabled='popoverForm.$invalid' type='button' ng-click='startRefresh(paragraph, value, unit); $hide()') Start
+ button.btn.btn-primary.btn-default(id='paragraph-rate-stop' type='button' ng-click='stopRefresh(paragraph); $hide()') Stop
+
http://git-wip-us.apache.org/repos/asf/ignite/blob/10a8b95d/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/query/QueryCommandHandler.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/query/QueryCommandHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/query/QueryCommandHandler.java
index 5828216..4b7e5ec 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/query/QueryCommandHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/query/QueryCommandHandler.java
@@ -196,10 +196,10 @@ public class QueryCommandHandler extends GridRestCommandHandlerAdapter {
break;
case SCAN:
CacheQueryFieldsMetaResult keyField = new CacheQueryFieldsMetaResult();
- keyField.setFieldName("Key");
+ keyField.setFieldName("key");
CacheQueryFieldsMetaResult valField = new CacheQueryFieldsMetaResult();
- valField.setFieldName("Value");
+ valField.setFieldName("value");
res.setFieldsMetadata(U.sealList(keyField, valField));
[2/2] ignite git commit: Merge remote-tracking branch
'origin/ignite-843' into ignite-843
Posted by an...@apache.org.
Merge remote-tracking branch 'origin/ignite-843' into ignite-843
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/316b9421
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/316b9421
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/316b9421
Branch: refs/heads/ignite-843
Commit: 316b9421aad1ec45c5a59368eeb60be4222d6c68
Parents: 10a8b95 7ebc5fe
Author: Andrey <an...@gridgain.com>
Authored: Fri Sep 4 17:15:11 2015 +0700
Committer: Andrey <an...@gridgain.com>
Committed: Fri Sep 4 17:15:11 2015 +0700
----------------------------------------------------------------------
.../src/main/js/controllers/sql-controller.js | 44 ++++++++++----------
1 file changed, 21 insertions(+), 23 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/316b9421/modules/control-center-web/src/main/js/controllers/sql-controller.js
----------------------------------------------------------------------