grafanaDatasource.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. define([
  2. 'angular',
  3. 'lodash',
  4. 'jquery',
  5. 'config',
  6. 'kbn',
  7. 'moment'
  8. ],
  9. function (angular) {
  10. 'use strict';
  11. var module = angular.module('grafana.services');
  12. module.factory('GrafanaDatasource', function($q, $http) {
  13. function GrafanaDatasource() {
  14. this.type = 'grafana';
  15. this.grafanaDB = true;
  16. }
  17. GrafanaDatasource.prototype.getDashboard = function(id, isTemp) {
  18. var url = '/dashboard/' + id;
  19. if (isTemp) {
  20. url = '/temp/' + id;
  21. }
  22. return $http.get('/api/dashboards/' + id)
  23. .then(function(result) {
  24. if (result.data) {
  25. return angular.fromJson(result.data);
  26. } else {
  27. return false;
  28. }
  29. }, function(data) {
  30. if(data.status === 0) {
  31. throw "Could not contact Elasticsearch. Please ensure that Elasticsearch is reachable from your browser.";
  32. } else {
  33. throw "Could not find dashboard " + id;
  34. }
  35. });
  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 $http.post('/api/dashboard/', { dashboard: dashboard })
  43. .then(function() {
  44. return { title: dashboard.title, url: '/dashboard/db/' + dashboard.title };
  45. }, function(data) {
  46. throw "Failed to search: " + data;
  47. });
  48. };
  49. GrafanaDatasource.prototype.searchDashboards = function(query) {
  50. return $http.get('/api/search/', { params: { q: query } })
  51. .then(function(results) {
  52. var hits = { dashboards: [], tags: [] };
  53. hits.dashboards = results.data;
  54. return hits;
  55. }, function(data) {
  56. throw "Failed to search: " + data;
  57. });
  58. };
  59. return GrafanaDatasource;
  60. });
  61. });