panelHelper.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. define([
  2. 'angular',
  3. 'lodash',
  4. 'kbn',
  5. 'jquery',
  6. ],
  7. function (angular, _, kbn, $) {
  8. 'use strict';
  9. var module = angular.module('grafana.services');
  10. module.service('panelHelper', function(timeSrv) {
  11. this.updateTimeRange = function(scope) {
  12. scope.range = timeSrv.timeRange();
  13. scope.rangeUnparsed = timeSrv.timeRange(false);
  14. this.applyPanelTimeOverrides(scope);
  15. if (scope.panel.maxDataPoints) {
  16. scope.resolution = scope.panel.maxDataPoints;
  17. }
  18. else {
  19. scope.resolution = Math.ceil($(window).width() * (scope.panel.span / 12));
  20. }
  21. scope.interval = kbn.calculateInterval(scope.range, scope.resolution, scope.panel.interval);
  22. };
  23. this.applyPanelTimeOverrides = function(scope) {
  24. scope.panelMeta.timeInfo = '';
  25. // check panel time overrrides
  26. if (scope.panel.timeFrom) {
  27. if (!kbn.isValidTimeSpan(scope.panel.timeFrom)) {
  28. scope.panelMeta.timeInfo = 'invalid time override';
  29. return;
  30. }
  31. if (_.isString(scope.rangeUnparsed.from)) {
  32. scope.panelMeta.timeInfo = "last " + scope.panel.timeFrom;
  33. scope.rangeUnparsed.from = 'now-' + scope.panel.timeFrom;
  34. scope.range.from = kbn.parseDate(scope.rangeUnparsed.from);
  35. }
  36. }
  37. if (scope.panel.timeShift) {
  38. if (!kbn.isValidTimeSpan(scope.panel.timeFrom)) {
  39. scope.panelMeta.timeInfo = 'invalid timeshift';
  40. return;
  41. }
  42. var timeShift = '-' + scope.panel.timeShift;
  43. scope.panelMeta.timeInfo += ' timeshift ' + timeShift;
  44. scope.range.from = kbn.parseDateMath(timeShift, scope.range.from);
  45. scope.range.to = kbn.parseDateMath(timeShift, scope.range.to);
  46. scope.rangeUnparsed = scope.range;
  47. }
  48. if (scope.panel.hideTimeOverride) {
  49. scope.panelMeta.timeInfo = '';
  50. }
  51. };
  52. this.issueMetricQuery = function(scope, datasource) {
  53. var metricsQuery = {
  54. range: scope.rangeUnparsed,
  55. interval: scope.interval,
  56. targets: scope.panel.targets,
  57. format: scope.panel.renderer === 'png' ? 'png' : 'json',
  58. maxDataPoints: scope.resolution,
  59. cacheTimeout: scope.panel.cacheTimeout
  60. };
  61. return datasource.query(metricsQuery).then(function(results) {
  62. if (scope.dashboard.snapshot) {
  63. scope.panel.snapshotData = results;
  64. }
  65. return results;
  66. });
  67. };
  68. });
  69. });