feat(mixed datasources): continued work on editor design change

This commit is contained in:
Torkel Ödegaard 2015-08-16 20:52:30 +02:00
parent 3105215425
commit a16c63a43e
19 changed files with 117 additions and 73 deletions

View File

@ -112,5 +112,13 @@ func UpdateDataSource(c *middleware.Context, cmd m.UpdateDataSourceCommand) {
} }
func GetDataSourcePlugins(c *middleware.Context) { func GetDataSourcePlugins(c *middleware.Context) {
c.JSON(200, plugins.DataSources) dsList := make(map[string]interface{})
for key, value := range plugins.DataSources {
if value.(map[string]interface{})["hide"] == nil {
dsList[key] = value
}
}
c.JSON(200, dsList)
} }

View File

@ -90,6 +90,11 @@ func getFrontendSettingsMap(c *middleware.Context) (map[string]interface{}, erro
"type": "grafana", "type": "grafana",
"meta": grafanaDatasourceMeta, "meta": grafanaDatasourceMeta,
} }
// add mixed backend data source
datasources["mixed"] = map[string]interface{}{
"type": "mixed",
"meta": plugins.DataSources["mixed"],
}
if defaultDatasource == "" { if defaultDatasource == "" {
defaultDatasource = "grafana" defaultDatasource = "grafana"

View File

@ -72,8 +72,7 @@
</div> </div>
</div> </div>
<div ng-include src="currentDatasource.meta.partials.annotations"> <datasource-editor-view datasource="currentAnnotation.datasource" name="annotations-query-editor"></datasource-editor-view>
</div>
<br> <br>
<button ng-show="editor.index === 1" type="button" class="btn btn-success" ng-click="add()">Add</button> <button ng-show="editor.index === 1" type="button" class="btn btn-success" ng-click="add()">Add</button>

View File

@ -40,6 +40,31 @@ function (angular, $, config) {
}; };
}); });
module.service('dynamicDirectiveSrv', function($compile, $parse, datasourceSrv) {
var self = this;
this.addDirective = function(options, type, editorScope) {
var panelEl = angular.element(document.createElement(options.name + '-' + type));
options.parentElem.append(panelEl);
$compile(panelEl)(editorScope);
};
this.define = function(options) {
var editorScope;
options.scope.$watch(options.datasourceProperty, function(newVal) {
if (editorScope) {
editorScope.$destroy();
options.parentElem.empty();
}
editorScope = options.scope.$new();
datasourceSrv.get(newVal).then(function(ds) {
self.addDirective(options, ds.meta.type, editorScope);
});
});
};
});
module.directive('queryEditorLoader', function($compile, $parse, datasourceSrv) { module.directive('queryEditorLoader', function($compile, $parse, datasourceSrv) {
return { return {
restrict: 'E', restrict: 'E',
@ -58,6 +83,10 @@ function (angular, $, config) {
editorScope = scope.$new(); editorScope = scope.$new();
editorScope.datasource = ds; editorScope.datasource = ds;
if (!scope.target.refId) {
scope.target.refId = 'A';
}
var panelEl = angular.element(document.createElement('metric-query-editor-' + ds.meta.type)); var panelEl = angular.element(document.createElement('metric-query-editor-' + ds.meta.type));
elem.append(panelEl); elem.append(panelEl);
$compile(panelEl)(editorScope); $compile(panelEl)(editorScope);
@ -67,25 +96,15 @@ function (angular, $, config) {
}; };
}); });
module.directive('queryOptionsLoader', function($compile, $parse, datasourceSrv) { module.directive('datasourceEditorView', function(dynamicDirectiveSrv) {
return { return {
restrict: 'E', restrict: 'E',
link: function(scope, elem) { link: function(scope, elem, attrs) {
var editorScope; dynamicDirectiveSrv.define({
datasourceProperty: attrs.datasource,
scope.$watch("panel.datasource", function() { name: attrs.name,
scope: scope,
datasourceSrv.get(scope.panel.datasource).then(function(ds) { parentElem: elem,
if (editorScope) {
editorScope.$destroy();
elem.empty();
}
editorScope = scope.$new();
var panelEl = angular.element(document.createElement('metric-query-options-' + ds.meta.type));
elem.append(panelEl);
$compile(panelEl)(editorScope);
});
}); });
} }
}; };

View File

@ -74,7 +74,7 @@ function (angular, _, config) {
}); });
if ($scope.panel.targets.length === 0) { if ($scope.panel.targets.length === 0) {
$scope.panel.targets = [{}]; $scope.panel.targets = [{refId: 'A'}];
} }
if (datasource === 'mixed') { if (datasource === 'mixed') {

View File

@ -19,15 +19,14 @@
<ul class="dropdown-menu" role="menu"> <ul class="dropdown-menu" role="menu">
<li ng-repeat="datasource in datasources" role="menuitem"> <li ng-repeat="datasource in datasources" role="menuitem">
<a ng-click="addDataQuery(datasource.value);">{{datasource.name}}</a> <a ng-click="addDataQuery(datasource.name);">{{datasource.name}}</a>
</li> </li>
</ul> </ul>
</span> </span>
</div> </div>
<query-options-loader></query-options-loader> <datasource-editor-view datasource="panel.datasource" name="metric-query-options"></datasource-editor-view>
</div> </div>
<div class="editor-row" style="margin-top: 30px"> <div class="editor-row" style="margin-top: 30px">

View File

@ -1,15 +1,11 @@
{ {
"pluginType": "datasource", "pluginType": "datasource",
"name": "Grafana (for testing)", "name": "Grafana (for testing)",
"hide": true,
"type": "grafana", "type": "grafana",
"serviceName": "GrafanaDatasource", "serviceName": "GrafanaDatasource",
"module": "plugins/datasource/grafana/datasource", "module": "plugins/datasource/grafana/datasource",
"partials": {
"query": "app/plugins/datasource/grafana/partials/query.editor.html"
},
"metrics": true "metrics": true
} }

View File

@ -5,6 +5,7 @@ define([
'config', 'config',
'kbn', 'kbn',
'moment', 'moment',
'./directives',
'./queryCtrl', './queryCtrl',
'./funcEditor', './funcEditor',
'./addGraphiteFunc', './addGraphiteFunc',

View File

@ -0,0 +1,21 @@
define([
'angular',
],
function (angular) {
'use strict';
var module = angular.module('grafana.directives');
module.directive('metricQueryEditorGraphite', function() {
return {controller: 'GraphiteQueryCtrl', templateUrl: 'app/plugins/datasource/graphite/partials/query.editor.html'};
});
module.directive('metricQueryOptionsGraphite', function() {
return {templateUrl: 'app/plugins/datasource/graphite/partials/query.options.html'};
});
module.directive('annotationsQueryEditorGraphite', function() {
return {templateUrl: 'app/plugins/datasource/graphite/partials/annotations.editor.html'};
});
});

View File

@ -9,8 +9,6 @@
"partials": { "partials": {
"config": "app/plugins/datasource/graphite/partials/config.html", "config": "app/plugins/datasource/graphite/partials/config.html",
"query": "app/plugins/datasource/graphite/partials/query.editor.html",
"annotations": "app/plugins/datasource/graphite/partials/annotations.editor.html"
}, },
"metrics": true, "metrics": true,

View File

@ -10,19 +10,6 @@ function (angular, _, config, gfunc, Parser) {
var module = angular.module('grafana.controllers'); var module = angular.module('grafana.controllers');
module.directive('metricQueryEditorGraphite', function() {
return {
controller: 'GraphiteQueryCtrl',
templateUrl: 'app/plugins/datasource/graphite/partials/query.editor.html',
};
});
module.directive('metricQueryOptionsGraphite', function() {
return {
templateUrl: 'app/plugins/datasource/graphite/partials/query.options.html',
};
});
module.controller('GraphiteQueryCtrl', function($scope, $sce, templateSrv) { module.controller('GraphiteQueryCtrl', function($scope, $sce, templateSrv) {
$scope.init = function() { $scope.init = function() {

View File

@ -4,6 +4,7 @@ define([
'kbn', 'kbn',
'./influxSeries', './influxSeries',
'./queryBuilder', './queryBuilder',
'./directives',
'./queryCtrl', './queryCtrl',
'./funcEditor', './funcEditor',
], ],

View File

@ -0,0 +1,21 @@
define([
'angular',
],
function (angular) {
'use strict';
var module = angular.module('grafana.directives');
module.directive('metricQueryEditorInfluxdb', function() {
return {controller: 'InfluxQueryCtrl', templateUrl: 'app/plugins/datasource/influxdb/partials/query.editor.html'};
});
module.directive('metricQueryOptionsInfluxdb', function() {
return {templateUrl: 'app/plugins/datasource/influxdb/partials/query.options.html'};
});
module.directive('annotationsQueryEditorInfluxdb', function() {
return {templateUrl: 'app/plugins/datasource/influxdb/partials/annotations.editor.html'};
});
});

View File

@ -9,8 +9,6 @@
"partials": { "partials": {
"config": "app/plugins/datasource/influxdb/partials/config.html", "config": "app/plugins/datasource/influxdb/partials/config.html",
"query": "app/plugins/datasource/influxdb/partials/query.editor.html",
"annotations": "app/plugins/datasource/influxdb/partials/annotations.editor.html"
}, },
"metrics": true, "metrics": true,

View File

@ -8,19 +8,6 @@ function (angular, _, InfluxQueryBuilder) {
var module = angular.module('grafana.controllers'); var module = angular.module('grafana.controllers');
module.directive('metricQueryEditorInfluxdb', function() {
return {
controller: 'InfluxQueryCtrl',
templateUrl: 'app/plugins/datasource/influxdb/partials/query.editor.html',
};
});
module.directive('metricQueryOptionsInfluxdb', function() {
return {
templateUrl: 'app/plugins/datasource/influxdb/partials/query.options.html',
};
});
module.controller('InfluxQueryCtrl', function($scope, $timeout, $sce, templateSrv, $q) { module.controller('InfluxQueryCtrl', function($scope, $timeout, $sce, templateSrv, $q) {
$scope.init = function() { $scope.init = function() {

View File

@ -1,15 +1,11 @@
{ {
"pluginType": "datasource", "pluginType": "datasource",
"name": "Mixed datasource", "name": "Mixed datasource",
"hide": true,
"type": "mixed", "type": "mixed",
"serviceName": "MixedDatasource", "serviceName": "MixedDatasource",
"module": "plugins/datasource/mixed/datasource", "module": "plugins/datasource/mixed/datasource",
"partials": {
"query": "app/plugins/datasource/mixed/partials/query.editor.html"
},
"metrics": true "metrics": true
} }

View File

@ -0,0 +1,16 @@
define([
'angular',
],
function (angular) {
'use strict';
var module = angular.module('grafana.directives');
module.directive('metricQueryEditorOpentsdb', function() {
return {
controller: 'OpenTSDBQueryCtrl',
templateUrl: 'app/plugins/datasource/opentsdb/partials/query.editor.html',
};
});
});

View File

@ -8,8 +8,7 @@
"module": "plugins/datasource/opentsdb/datasource", "module": "plugins/datasource/opentsdb/datasource",
"partials": { "partials": {
"config": "app/plugins/datasource/opentsdb/partials/config.html", "config": "app/plugins/datasource/opentsdb/partials/config.html"
"query": "app/plugins/datasource/opentsdb/partials/query.editor.html"
}, },
"metrics": true "metrics": true

View File

@ -8,13 +8,6 @@ function (angular, _, kbn) {
var module = angular.module('grafana.controllers'); var module = angular.module('grafana.controllers');
module.directive('metricQueryEditorOpentsdb', function() {
return {
controller: 'OpenTSDBQueryCtrl',
templateUrl: 'app/plugins/datasource/opentsdb/partials/query.editor.html',
};
});
module.controller('OpenTSDBQueryCtrl', function($scope, $timeout) { module.controller('OpenTSDBQueryCtrl', function($scope, $timeout) {
$scope.init = function() { $scope.init = function() {