grafana/src/app/services/datasourceSrv.js

100 lines
2.4 KiB
JavaScript
Raw Normal View History

define([
'angular',
2014-08-07 07:35:19 -05:00
'lodash',
'config',
],
function (angular, _, config) {
'use strict';
2014-07-28 11:11:52 -05:00
var module = angular.module('grafana.services');
module.service('datasourceSrv', function($q, $http, $injector) {
var datasources = {};
var metricSources = [];
var annotationSources = [];
var grafanaDB = {};
this.init = function() {
_.each(config.datasources, function(value, key) {
var ds = this.datasourceFactory(value);
if (value.default) {
this.default = ds;
ds.default = true;
}
datasources[key] = ds;
}, this);
if (!this.default) {
this.default = datasources[_.keys(datasources)[0]];
this.default.default = true;
}
// create list of different source types
_.each(datasources, function(value, key) {
if (value.supportMetrics) {
metricSources.push({
name: value.name,
value: value.default ? null : key,
default: value.default,
});
}
if (value.supportAnnotations) {
annotationSources.push({
name: key,
editorSrc: value.annotationEditorSrc,
});
}
if (value.grafanaDB) {
grafanaDB = value;
}
});
};
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;
2014-08-07 09:04:44 -05:00
case 'grafana':
Datasource = $injector.get('GrafanaDatasource');
break;
default:
Datasource = $injector.get(ds.type);
}
return new Datasource(ds);
};
this.get = function(name) {
if (!name) { return this.default; }
if (datasources[name]) { return datasources[name]; }
return this.default;
};
this.getAnnotationSources = function() {
return annotationSources;
2014-07-13 08:15:10 -05:00
};
this.getMetricSources = function() {
return metricSources;
};
this.getGrafanaDB = function() {
return grafanaDB;
};
this.init();
});
});