annotationsSrv.js 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. define([
  2. 'angular',
  3. 'lodash',
  4. './editorCtrl'
  5. ], function (angular, _) {
  6. 'use strict';
  7. var module = angular.module('grafana.services');
  8. module.service('annotationsSrv', function(datasourceSrv, $q, alertSrv, $rootScope) {
  9. var promiseCached;
  10. var list = [];
  11. var self = this;
  12. this.init = function() {
  13. $rootScope.onAppEvent('refresh', this.clearCache, $rootScope);
  14. $rootScope.onAppEvent('setup-dashboard', this.clearCache, $rootScope);
  15. };
  16. this.clearCache = function() {
  17. promiseCached = null;
  18. list = [];
  19. };
  20. this.getAnnotations = function(rangeUnparsed, dashboard) {
  21. if (dashboard.annotations.list.length === 0) {
  22. return $q.when(null);
  23. }
  24. if (promiseCached) {
  25. return promiseCached;
  26. }
  27. self.dashboard = dashboard;
  28. var annotations = _.where(dashboard.annotations.list, {enable: true});
  29. var promises = _.map(annotations, function(annotation) {
  30. return datasourceSrv.get(annotation.datasource).then(function(datasource) {
  31. return datasource.annotationQuery(annotation, rangeUnparsed)
  32. .then(self.receiveAnnotationResults)
  33. .then(null, errorHandler);
  34. }, this);
  35. });
  36. promiseCached = $q.all(promises)
  37. .then(function() {
  38. return list;
  39. });
  40. return promiseCached;
  41. };
  42. this.receiveAnnotationResults = function(results) {
  43. for (var i = 0; i < results.length; i++) {
  44. self.addAnnotation(results[i]);
  45. }
  46. };
  47. this.addAnnotation = function(options) {
  48. list.push({
  49. annotation: options.annotation,
  50. min: options.time,
  51. max: options.time,
  52. eventType: options.annotation.name,
  53. title: options.title,
  54. tags: options.tags,
  55. text: options.text,
  56. score: 1
  57. });
  58. };
  59. function errorHandler(err) {
  60. console.log('Annotation error: ', err);
  61. var message = err.message || "Annotation query failed";
  62. alertSrv.set('Annotations error', message,'error');
  63. }
  64. // Now init
  65. this.init();
  66. });
  67. });