datasourceSrv.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. define([
  2. 'angular',
  3. 'lodash',
  4. 'config',
  5. ],
  6. function (angular, _, config) {
  7. 'use strict';
  8. var module = angular.module('grafana.services');
  9. module.service('datasourceSrv', function($q, $http, $injector) {
  10. var datasources = {};
  11. var metricSources = [];
  12. var annotationSources = [];
  13. var grafanaDB = {};
  14. this.init = function() {
  15. _.each(config.datasources, function(value, key) {
  16. var ds = this.datasourceFactory(value);
  17. if (value.default) {
  18. this.default = ds;
  19. ds.default = true;
  20. }
  21. datasources[key] = ds;
  22. }, this);
  23. if (!this.default) {
  24. this.default = datasources[_.keys(datasources)[0]];
  25. this.default.default = true;
  26. }
  27. // create list of different source types
  28. _.each(datasources, function(value, key) {
  29. if (value.supportMetrics) {
  30. metricSources.push({
  31. name: value.name,
  32. value: value.default ? null : key,
  33. default: value.default,
  34. });
  35. }
  36. if (value.supportAnnotations) {
  37. annotationSources.push({
  38. name: key,
  39. editorSrc: value.annotationEditorSrc,
  40. });
  41. }
  42. if (value.grafanaDB) {
  43. grafanaDB = value;
  44. }
  45. });
  46. };
  47. this.datasourceFactory = function(ds) {
  48. var Datasource = null;
  49. switch(ds.type) {
  50. case 'graphite':
  51. Datasource = $injector.get('GraphiteDatasource');
  52. break;
  53. case 'influxdb':
  54. Datasource = $injector.get('InfluxDatasource');
  55. break;
  56. case 'opentsdb':
  57. Datasource = $injector.get('OpenTSDBDatasource');
  58. break;
  59. case 'elasticsearch':
  60. Datasource = $injector.get('ElasticDatasource');
  61. break;
  62. case 'grafana':
  63. Datasource = $injector.get('GrafanaDatasource');
  64. break;
  65. default:
  66. Datasource = $injector.get(ds.type);
  67. }
  68. return new Datasource(ds);
  69. };
  70. this.get = function(name) {
  71. if (!name) { return this.default; }
  72. if (datasources[name]) { return datasources[name]; }
  73. return this.default;
  74. };
  75. this.getAll = function() {
  76. return datasources;
  77. };
  78. this.getAnnotationSources = function() {
  79. return annotationSources;
  80. };
  81. this.getMetricSources = function() {
  82. return metricSources;
  83. };
  84. this.getGrafanaDB = function() {
  85. return grafanaDB;
  86. };
  87. this.init();
  88. });
  89. });