datasource.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. define([
  2. 'angular',
  3. 'lodash',
  4. 'kbn',
  5. ],
  6. function (angular, _, kbn) {
  7. 'use strict';
  8. var module = angular.module('grafana.services');
  9. module.factory('GrafanaDatasource', function($q, backendSrv) {
  10. function GrafanaDatasource() {
  11. this.type = 'grafana';
  12. this.grafanaDB = true;
  13. this.name = "grafana";
  14. this.supportMetrics = true;
  15. this.editorSrc = 'app/features/grafanaDatasource/partials/query.editor.html';
  16. }
  17. GrafanaDatasource.prototype.getDashboard = function(slug, isTemp) {
  18. var url = '/dashboard/' + slug;
  19. if (isTemp) {
  20. url = '/temp/' + slug;
  21. }
  22. return backendSrv.get('/api/dashboard/' + slug)
  23. .then(function(data) {
  24. if (data && data.dashboard) {
  25. return data.dashboard;
  26. } else {
  27. return false;
  28. }
  29. });
  30. };
  31. GrafanaDatasource.prototype.query = function(options) {
  32. // get from & to in seconds
  33. var from = kbn.parseDate(options.range.from).getTime();
  34. var to = kbn.parseDate(options.range.to).getTime();
  35. return backendSrv.get('/api/metrics/test', { from: from, to: to, maxDataPoints: options.maxDataPoints });
  36. };
  37. GrafanaDatasource.prototype.saveDashboard = function(dashboard) {
  38. // remove id if title has changed
  39. if (dashboard.title !== dashboard.originalTitle) {
  40. dashboard.id = null;
  41. }
  42. return backendSrv.post('/api/dashboard/', { dashboard: dashboard })
  43. .then(function(data) {
  44. return { title: dashboard.title, url: '/dashboard/db/' + data.slug };
  45. }, function(err) {
  46. err.isHandled = true;
  47. err.data = err.data || {};
  48. throw err.data.message || "Unknown error";
  49. });
  50. };
  51. GrafanaDatasource.prototype.deleteDashboard = function(id) {
  52. return backendSrv.delete('/api/dashboard/' + id)
  53. .then(function(data) {
  54. return data.title;
  55. });
  56. };
  57. GrafanaDatasource.prototype.searchDashboards = function(query) {
  58. return backendSrv.get('/api/search/', {q: query})
  59. .then(function(data) {
  60. _.each(data.dashboards, function(item) {
  61. item.id = item.slug;
  62. });
  63. return data;
  64. });
  65. };
  66. return GrafanaDatasource;
  67. });
  68. });