|
|
@@ -7,97 +7,85 @@ function (angular, _, config) {
|
|
|
'use strict';
|
|
|
|
|
|
var module = angular.module('grafana.services');
|
|
|
+ var typeMap = {
|
|
|
+ 'graphite': 'GraphiteDatasource',
|
|
|
+ 'influxdb': 'InfluxDatasource',
|
|
|
+ 'elasticsearch': 'ElasticDatasource',
|
|
|
+ 'opentsdb': 'OpenTSDBDatasource',
|
|
|
+ 'grafana': 'GrafanaDatasource',
|
|
|
+ };
|
|
|
|
|
|
module.service('datasourceSrv', function($q, $http, $injector) {
|
|
|
- var datasources = {};
|
|
|
- var metricSources = [];
|
|
|
- var annotationSources = [];
|
|
|
- var grafanaDB = {};
|
|
|
|
|
|
- this.init = function() {
|
|
|
- _.each(config.datasources, function(value, key) {
|
|
|
+ this.init = function(dsSettingList) {
|
|
|
+ config.datasources = dsSettingList;
|
|
|
+
|
|
|
+ this.datasources = {};
|
|
|
+ this.metricSources = [];
|
|
|
+ this.annotationSources = [];
|
|
|
+
|
|
|
+ _.each(dsSettingList, function(value, key) {
|
|
|
var ds = this.datasourceFactory(value);
|
|
|
+ ds.name = key;
|
|
|
if (value.default) {
|
|
|
this.default = ds;
|
|
|
ds.default = true;
|
|
|
}
|
|
|
- datasources[key] = ds;
|
|
|
+ this.datasources[key] = ds;
|
|
|
}, this);
|
|
|
|
|
|
if (!this.default) {
|
|
|
- this.default = datasources[_.keys(datasources)[0]];
|
|
|
+ this.default = this.datasources[_.keys(this.datasources)[0]];
|
|
|
this.default.default = true;
|
|
|
}
|
|
|
|
|
|
// create list of different source types
|
|
|
- _.each(datasources, function(value, key) {
|
|
|
+ _.each(this.datasources, function(value, key) {
|
|
|
if (value.supportMetrics) {
|
|
|
- metricSources.push({
|
|
|
+ this.metricSources.push({
|
|
|
name: value.name,
|
|
|
value: value.default ? null : key,
|
|
|
default: value.default,
|
|
|
});
|
|
|
}
|
|
|
if (value.supportAnnotations) {
|
|
|
- annotationSources.push({
|
|
|
- name: key,
|
|
|
- editorSrc: value.annotationEditorSrc,
|
|
|
- });
|
|
|
+ this.annotationSources.push({ name: key, editorSrc: value.annotationEditorSrc });
|
|
|
}
|
|
|
if (value.grafanaDB) {
|
|
|
- grafanaDB = value;
|
|
|
+ this.grafanaDB = value;
|
|
|
}
|
|
|
- });
|
|
|
-
|
|
|
+ }, this);
|
|
|
};
|
|
|
|
|
|
this.datasourceFactory = function(ds) {
|
|
|
- var Datasource = null;
|
|
|
- switch(ds.type) {
|
|
|
- case 'graphite':
|
|
|
- Datasource = $injector.get('GraphiteDatasource');
|
|
|
- break;
|
|
|
- case 'influxdb':
|
|
|
- Datasource = $injector.get('InfluxDatasource');
|
|
|
- break;
|
|
|
- case 'opentsdb':
|
|
|
- Datasource = $injector.get('OpenTSDBDatasource');
|
|
|
- break;
|
|
|
- case 'elasticsearch':
|
|
|
- Datasource = $injector.get('ElasticDatasource');
|
|
|
- break;
|
|
|
- case 'grafana':
|
|
|
- Datasource = $injector.get('GrafanaDatasource');
|
|
|
- break;
|
|
|
- default:
|
|
|
- Datasource = $injector.get(ds.type);
|
|
|
- }
|
|
|
+ var type = typeMap[ds.type] || ds.type;
|
|
|
+ var Datasource = $injector.get(type);
|
|
|
return new Datasource(ds);
|
|
|
};
|
|
|
|
|
|
this.get = function(name) {
|
|
|
if (!name) { return this.default; }
|
|
|
- if (datasources[name]) { return datasources[name]; }
|
|
|
+ if (this.datasources[name]) { return this.datasources[name]; }
|
|
|
|
|
|
return this.default;
|
|
|
};
|
|
|
|
|
|
this.getAll = function() {
|
|
|
- return datasources;
|
|
|
+ return this.datasources;
|
|
|
};
|
|
|
|
|
|
this.getAnnotationSources = function() {
|
|
|
- return annotationSources;
|
|
|
+ return this.annotationSources;
|
|
|
};
|
|
|
|
|
|
this.getMetricSources = function() {
|
|
|
- return metricSources;
|
|
|
+ return this.metricSources;
|
|
|
};
|
|
|
|
|
|
this.getGrafanaDB = function() {
|
|
|
- return grafanaDB;
|
|
|
+ return this.grafanaDB;
|
|
|
};
|
|
|
|
|
|
- this.init();
|
|
|
+ this.init(config.datasources);
|
|
|
});
|
|
|
});
|