2014-02-15 06:46:36 -06:00
|
|
|
define([
|
|
|
|
'angular',
|
2014-08-07 07:35:19 -05:00
|
|
|
'lodash',
|
2014-02-27 14:46:06 -06:00
|
|
|
'config',
|
2014-02-15 06:46:36 -06:00
|
|
|
],
|
2014-02-25 10:48:01 -06:00
|
|
|
function (angular, _, config) {
|
2014-02-15 06:46:36 -06:00
|
|
|
'use strict';
|
|
|
|
|
2014-07-28 11:11:52 -05:00
|
|
|
var module = angular.module('grafana.services');
|
2014-02-15 06:46:36 -06:00
|
|
|
|
2014-08-27 08:54:30 -05:00
|
|
|
module.service('datasourceSrv', function($q, $http, $injector) {
|
2014-07-13 08:01:20 -05:00
|
|
|
var datasources = {};
|
2014-07-30 01:34:58 -05:00
|
|
|
var metricSources = [];
|
|
|
|
var annotationSources = [];
|
2014-07-30 03:52:02 -05:00
|
|
|
var grafanaDB = {};
|
2014-02-25 10:48:01 -06:00
|
|
|
|
2014-03-04 15:01:25 -06:00
|
|
|
this.init = function() {
|
2014-07-13 08:01:20 -05:00
|
|
|
_.each(config.datasources, function(value, key) {
|
2014-08-26 07:17:46 -05:00
|
|
|
var ds = this.datasourceFactory(value);
|
2014-07-13 08:01:20 -05:00
|
|
|
if (value.default) {
|
2014-08-26 07:17:46 -05:00
|
|
|
this.default = ds;
|
|
|
|
ds.default = true;
|
2014-07-13 08:01:20 -05:00
|
|
|
}
|
2014-08-26 07:17:46 -05:00
|
|
|
datasources[key] = ds;
|
2014-07-13 08:01:20 -05:00
|
|
|
}, this);
|
|
|
|
|
|
|
|
if (!this.default) {
|
|
|
|
this.default = datasources[_.keys(datasources)[0]];
|
2014-07-20 09:32:01 -05:00
|
|
|
this.default.default = true;
|
2014-06-22 11:02:43 -05:00
|
|
|
}
|
2014-07-30 01:34:58 -05:00
|
|
|
|
|
|
|
// create list of different source types
|
|
|
|
_.each(datasources, function(value, key) {
|
|
|
|
if (value.supportMetrics) {
|
|
|
|
metricSources.push({
|
|
|
|
name: value.name,
|
|
|
|
value: value.default ? null : key,
|
2014-08-26 07:17:46 -05:00
|
|
|
default: value.default,
|
2014-07-30 01:34:58 -05:00
|
|
|
});
|
|
|
|
}
|
|
|
|
if (value.supportAnnotations) {
|
|
|
|
annotationSources.push({
|
|
|
|
name: key,
|
|
|
|
editorSrc: value.annotationEditorSrc,
|
|
|
|
});
|
|
|
|
}
|
2014-07-30 03:52:02 -05:00
|
|
|
if (value.grafanaDB) {
|
|
|
|
grafanaDB = value;
|
|
|
|
}
|
2014-07-30 01:34:58 -05:00
|
|
|
});
|
|
|
|
|
2014-03-04 15:01:25 -06:00
|
|
|
};
|
|
|
|
|
|
|
|
this.datasourceFactory = function(ds) {
|
2014-07-29 04:26:05 -05:00
|
|
|
var Datasource = null;
|
2014-03-04 14:49:06 -06:00
|
|
|
switch(ds.type) {
|
|
|
|
case 'graphite':
|
2014-07-29 04:26:05 -05:00
|
|
|
Datasource = $injector.get('GraphiteDatasource');
|
|
|
|
break;
|
2014-03-04 14:49:06 -06:00
|
|
|
case 'influxdb':
|
2014-07-29 04:26:05 -05:00
|
|
|
Datasource = $injector.get('InfluxDatasource');
|
|
|
|
break;
|
2014-03-14 14:14:16 -05:00
|
|
|
case 'opentsdb':
|
2014-07-29 04:26:05 -05:00
|
|
|
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');
|
2014-07-29 04:26:05 -05:00
|
|
|
break;
|
2014-08-15 12:06:04 -05:00
|
|
|
default:
|
|
|
|
Datasource = $injector.get(ds.type);
|
2014-03-04 14:49:06 -06:00
|
|
|
}
|
2014-07-29 04:26:05 -05:00
|
|
|
return new Datasource(ds);
|
2014-03-04 15:01:25 -06:00
|
|
|
};
|
2014-02-15 06:46:36 -06:00
|
|
|
|
|
|
|
this.get = function(name) {
|
2014-02-27 14:46:06 -06:00
|
|
|
if (!name) { return this.default; }
|
2014-07-13 08:01:20 -05:00
|
|
|
if (datasources[name]) { return datasources[name]; }
|
2014-02-27 14:46:06 -06:00
|
|
|
|
2014-09-11 07:07:27 -05:00
|
|
|
return this.default;
|
2014-02-15 06:46:36 -06:00
|
|
|
};
|
|
|
|
|
2014-07-13 08:01:20 -05:00
|
|
|
this.getAnnotationSources = function() {
|
2014-07-30 01:34:58 -05:00
|
|
|
return annotationSources;
|
2014-07-13 08:15:10 -05:00
|
|
|
};
|
2014-07-13 08:01:20 -05:00
|
|
|
|
2014-07-30 01:34:58 -05:00
|
|
|
this.getMetricSources = function() {
|
|
|
|
return metricSources;
|
2014-02-15 06:46:36 -06:00
|
|
|
};
|
2014-03-04 15:01:25 -06:00
|
|
|
|
2014-07-30 03:52:02 -05:00
|
|
|
this.getGrafanaDB = function() {
|
|
|
|
return grafanaDB;
|
|
|
|
};
|
|
|
|
|
2014-03-04 15:01:25 -06:00
|
|
|
this.init();
|
2014-02-15 06:46:36 -06:00
|
|
|
});
|
2014-05-19 08:31:30 -05:00
|
|
|
});
|