panelHelper.js 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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.timeShift)) {
  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. scopedVars: scope.panel.scopedVars,
  60. cacheTimeout: scope.panel.cacheTimeout
  61. };
  62. return datasource.query(metricsQuery).then(function(results) {
  63. if (scope.dashboard.snapshot) {
  64. scope.panel.snapshotData = results;
  65. }
  66. return results;
  67. });
  68. };
  69. });
  70. });