annotations_srv.js 2.5 KB

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