mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
feat(influxdb): more work onnew influxdb editor
This commit is contained in:
parent
9b4150509c
commit
31e2a8b8e9
@ -6,9 +6,19 @@ import queryPart = require('./query_part');
|
|||||||
|
|
||||||
declare var InfluxQueryBuilder: any;
|
declare var InfluxQueryBuilder: any;
|
||||||
|
|
||||||
|
class InfluxSelectModel {
|
||||||
|
modelParts: any[];
|
||||||
|
persistedParts: any[];
|
||||||
|
|
||||||
|
constructor(persistedParts: any[]) {
|
||||||
|
this.persistedParts = persistedParts;
|
||||||
|
this.modelParts = _.map(persistedParts, queryPart.create);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class InfluxQuery {
|
class InfluxQuery {
|
||||||
target: any;
|
target: any;
|
||||||
selectParts: any[];
|
selectModels: any[];
|
||||||
groupByParts: any;
|
groupByParts: any;
|
||||||
queryBuilder: any;
|
queryBuilder: any;
|
||||||
|
|
||||||
@ -29,10 +39,8 @@ class InfluxQuery {
|
|||||||
}
|
}
|
||||||
|
|
||||||
updateSelectParts() {
|
updateSelectParts() {
|
||||||
this.selectParts = _.map(this.target.select, function(parts: any) {
|
this.selectModels = _.map(this.target.select, function(parts: any) {
|
||||||
return _.map(parts, function(part: any) {
|
return new InfluxSelectModel(parts);
|
||||||
return queryPart.create(part);
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -41,6 +49,18 @@ class InfluxQuery {
|
|||||||
this.updateSelectParts();
|
this.updateSelectParts();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
removeSelectPart(selectModel, part) {
|
||||||
|
var partIndex = _.indexOf(selectModel.modelParts, part);
|
||||||
|
selectModel.persistedParts.splice(partIndex, 1);
|
||||||
|
this.updateSelectParts();
|
||||||
|
}
|
||||||
|
|
||||||
|
addSelectPart(selectModel, name) {
|
||||||
|
var partModel = queryPart.create({name: name});
|
||||||
|
selectModel.persistedParts.push(partModel.part);
|
||||||
|
selectModel.modelParts.push(partModel);
|
||||||
|
}
|
||||||
|
|
||||||
addSelect() {
|
addSelect() {
|
||||||
this.target.select.push([
|
this.target.select.push([
|
||||||
{name: 'mean', params: ['value']},
|
{name: 'mean', params: ['value']},
|
||||||
@ -92,8 +112,8 @@ class InfluxQuery {
|
|||||||
|
|
||||||
var query = 'SELECT ';
|
var query = 'SELECT ';
|
||||||
var i, y;
|
var i, y;
|
||||||
for (i = 0; i < this.selectParts.length; i++) {
|
for (i = 0; i < this.selectModels.length; i++) {
|
||||||
let parts = this.selectParts[i];
|
let parts = this.selectModels[i].modelParts;
|
||||||
var selectText = "";
|
var selectText = "";
|
||||||
for (y = 0; y < parts.length; y++) {
|
for (y = 0; y < parts.length; y++) {
|
||||||
let part = parts[y];
|
let part = parts[y];
|
||||||
|
@ -65,15 +65,15 @@
|
|||||||
|
|
||||||
<div ng-hide="target.rawQuery">
|
<div ng-hide="target.rawQuery">
|
||||||
|
|
||||||
<div class="tight-form" ng-repeat="parts in queryModel.selectParts">
|
<div class="tight-form" ng-repeat="selectModel in queryModel.selectModels">
|
||||||
<ul class="tight-form-list">
|
<ul class="tight-form-list">
|
||||||
<li class="tight-form-item query-keyword tight-form-align" style="width: 75px;">
|
<li class="tight-form-item query-keyword tight-form-align" style="width: 75px;">
|
||||||
<span ng-show="$index === 0">SELECT</span>
|
<span ng-show="$index === 0">SELECT</span>
|
||||||
</li>
|
</li>
|
||||||
<li ng-repeat="part in parts">
|
<li ng-repeat="part in selectModel.modelParts">
|
||||||
<influx-query-part-editor part="part" class="tight-form-item tight-form-func"></influx-query-part-editor>
|
<influx-query-part-editor part="part" class="tight-form-item tight-form-func" remove-action="removeSelectPart(selectModel, part)" part-updated="selectPartUpdated(selectModel, part)"></influx-query-part-editor>
|
||||||
</li>
|
</li>
|
||||||
<li class="dropdown" dropdown-typeahead="selectMenu" dropdown-typeahead-on-select="selectMenuAction(parts, $item, $subItem)">
|
<li class="dropdown" dropdown-typeahead="selectMenu" dropdown-typeahead-on-select="selectMenuAction(selectModel, $item, $subItem)">
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<div class="clearfix"></div>
|
<div class="clearfix"></div>
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<div class="tight-form-func-controls">
|
<div class="tight-form-func-controls">
|
||||||
<span class="pointer fa fa-question-circle"></span>
|
<span class="pointer fa fa-question-circle"></span>
|
||||||
<span class="pointer fa fa-remove" ></span>
|
<span class="pointer fa fa-remove" ng-click="removeAction()" ></span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<a ng-click="toggleControls()">{{part.def.name}}</a><span>(</span><span class="query-part-parameters"></span><span>)</span>
|
<a ng-click="toggleControls()">{{part.def.name}}</a><span>(</span><span class="query-part-parameters"></span><span>)</span>
|
||||||
|
@ -62,8 +62,18 @@ function (angular, _, InfluxQueryBuilder, InfluxQuery, queryPart) {
|
|||||||
}, []);
|
}, []);
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.selectMenuAction = function(selectParts, cat, subitem) {
|
$scope.selectMenuAction = function(selectModel, cat, subitem) {
|
||||||
selectParts.push(queryPart.create({name: subitem.value }));
|
$scope.queryModel.addSelectPart(selectModel, subitem.value);
|
||||||
|
$scope.get_data();
|
||||||
|
};
|
||||||
|
|
||||||
|
$scope.removeSelectPart = function(selectModel, part) {
|
||||||
|
$scope.queryModel.removeSelectPart(selectModel, part);
|
||||||
|
$scope.get_data();
|
||||||
|
};
|
||||||
|
|
||||||
|
$scope.selectPartUpdated = function() {
|
||||||
|
$scope.get_data();
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.fixTagSegments = function() {
|
$scope.fixTagSegments = function() {
|
||||||
@ -75,27 +85,9 @@ function (angular, _, InfluxQueryBuilder, InfluxQuery, queryPart) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.addGroupBy = function() {
|
|
||||||
$scope.target.groupBy.push({type: 'tag', key: "select tag"});
|
|
||||||
};
|
|
||||||
|
|
||||||
$scope.removeGroupBy = function(index) {
|
|
||||||
$scope.target.groupBy.splice(index, 1);
|
|
||||||
$scope.get_data();
|
|
||||||
};
|
|
||||||
|
|
||||||
$scope.addSelect = function() {
|
|
||||||
$scope.queryModel.addSelect();
|
|
||||||
};
|
|
||||||
|
|
||||||
$scope.removeSelect = function(index) {
|
|
||||||
$scope.queryModel.removeSelect(index);
|
|
||||||
$scope.get_data();
|
|
||||||
};
|
|
||||||
|
|
||||||
$scope.measurementChanged = function() {
|
$scope.measurementChanged = function() {
|
||||||
$scope.target.measurement = $scope.measurementSegment.value;
|
$scope.target.measurement = $scope.measurementSegment.value;
|
||||||
$scope.$parent.get_data();
|
$scope.get_data();
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.getFields = function() {
|
$scope.getFields = function() {
|
||||||
|
@ -135,7 +135,8 @@ class QueryPart {
|
|||||||
throw {message: 'Could not find query part ' + part.name};
|
throw {message: 'Could not find query part ' + part.name};
|
||||||
}
|
}
|
||||||
|
|
||||||
this.params = part.params || _.clone(this.def.defaultParams);
|
part.params = part.params || _.clone(this.def.defaultParams);
|
||||||
|
this.params = part.params;
|
||||||
this.updateText();
|
this.updateText();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,7 +17,8 @@ function (angular, _, $) {
|
|||||||
templateUrl: 'app/plugins/datasource/influxdb/partials/query_part.html',
|
templateUrl: 'app/plugins/datasource/influxdb/partials/query_part.html',
|
||||||
scope: {
|
scope: {
|
||||||
part: "=",
|
part: "=",
|
||||||
deleteAction: "&",
|
removeAction: "&",
|
||||||
|
partUpdated: "&",
|
||||||
},
|
},
|
||||||
link: function postLink($scope, elem) {
|
link: function postLink($scope, elem) {
|
||||||
var part = $scope.part;
|
var part = $scope.part;
|
||||||
@ -55,7 +56,7 @@ function (angular, _, $) {
|
|||||||
$link.html(templateSrv.highlightVariablesAsHtml(newValue));
|
$link.html(templateSrv.highlightVariablesAsHtml(newValue));
|
||||||
|
|
||||||
part.updateParam($input.val(), paramIndex);
|
part.updateParam($input.val(), paramIndex);
|
||||||
$scope.$apply($scope.targetChanged);
|
$scope.$apply($scope.partUpdated);
|
||||||
}
|
}
|
||||||
|
|
||||||
$input.hide();
|
$input.hide();
|
||||||
|
Loading…
Reference in New Issue
Block a user