| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- define([
- 'angular',
- 'lodash',
- 'config',
- ],
- function (angular, _, config) {
- 'use strict';
- 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;
- 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.getAll = function() {
- return datasources;
- };
- this.getAnnotationSources = function() {
- return annotationSources;
- };
- this.getMetricSources = function() {
- return metricSources;
- };
- this.getGrafanaDB = function() {
- return grafanaDB;
- };
- this.init();
- });
- });
|