grafana/src/app/services/datasourceSrv.js

82 lines
1.9 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');
2015-02-27 06:45:00 -06:00
module.service('datasourceSrv', function($q, $injector, $rootScope) {
var self = this;
2015-02-27 06:45:00 -06:00
this.datasources = {};
this.metricSources = [];
this.annotationSources = [];
this.grafanaDB = new ($injector.get("GrafanaDatasource"));
2015-02-27 06:45:00 -06:00
this.init = function(dsSettingList) {
config.datasources = dsSettingList;
_.each(config.datasources, function(value, key) {
if (value.meta && value.meta.metrics) {
self.metricSources.push({ value: key, name: key });
}
});
if (!config.defaultDatasource) {
$rootScope.appEvent('alert-error', ["No default data source found", ""]);
}
};
this.get = function(name) {
2015-02-27 06:45:00 -06:00
if (!name) {
return this.get(config.defaultDatasource);
}
if (this.datasources[name]) {
return $q.when(this.datasources[name]);
}
return this.loadDatasource(name);
};
this.loadDatasource = function(name) {
var dsConfig = config.datasources[name];
2015-02-27 06:45:00 -06:00
var deferred = $q.defer();
var pluginDef = dsConfig.meta;
2015-02-27 06:45:00 -06:00
$rootScope.require([pluginDef.module], function() {
var AngularService = $injector.get(pluginDef.serviceName);
var instance = new AngularService(dsConfig, pluginDef);
instance.meta = pluginDef;
instance.name = name;
2015-02-27 06:45:00 -06:00
self.datasources[name] = instance;
deferred.resolve(instance);
});
2015-02-27 06:45:00 -06:00
return deferred.promise;
};
2015-01-17 03:39:01 -06:00
this.getAll = function() {
return this.datasources;
2015-01-17 03:39:01 -06:00
};
this.getAnnotationSources = function() {
return this.annotationSources;
2014-07-13 08:15:10 -05:00
};
this.getMetricSources = function() {
return this.metricSources;
};
this.getGrafanaDB = function() {
return this.grafanaDB;
};
this.init(config.datasources);
});
});