query_hints.test.ts 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. import { getQueryHints } from '../query_hints';
  2. describe('getQueryHints()', () => {
  3. it('returns no hints for no series', () => {
  4. expect(getQueryHints([])).toEqual([]);
  5. });
  6. it('returns no hints for empty series', () => {
  7. expect(getQueryHints([{ datapoints: [], query: '' }])).toEqual([null]);
  8. });
  9. it('returns no hint for a monotonously decreasing series', () => {
  10. const series = [{ datapoints: [[23, 1000], [22, 1001]], query: 'metric', responseIndex: 0 }];
  11. const hints = getQueryHints(series);
  12. expect(hints).toEqual([null]);
  13. });
  14. it('returns no hint for a flat series', () => {
  15. const series = [
  16. { datapoints: [[null, 1000], [23, 1001], [null, 1002], [23, 1003]], query: 'metric', responseIndex: 0 },
  17. ];
  18. const hints = getQueryHints(series);
  19. expect(hints).toEqual([null]);
  20. });
  21. it('returns a rate hint for a monotonously increasing series', () => {
  22. const series = [{ datapoints: [[23, 1000], [24, 1001]], query: 'metric', responseIndex: 0 }];
  23. const hints = getQueryHints(series);
  24. expect(hints.length).toBe(1);
  25. expect(hints[0]).toMatchObject({
  26. label: 'Time series is monotonously increasing.',
  27. index: 0,
  28. fix: {
  29. action: {
  30. type: 'ADD_RATE',
  31. query: 'metric',
  32. },
  33. },
  34. });
  35. });
  36. it('returns no rate hint for a monotonously increasing series that already has a rate', () => {
  37. const series = [{ datapoints: [[23, 1000], [24, 1001]], query: 'rate(metric[1m])', responseIndex: 0 }];
  38. const hints = getQueryHints(series);
  39. expect(hints).toEqual([null]);
  40. });
  41. it('returns a rate hint w/o action for a complex monotonously increasing series', () => {
  42. const series = [{ datapoints: [[23, 1000], [24, 1001]], query: 'sum(metric)', responseIndex: 0 }];
  43. const hints = getQueryHints(series);
  44. expect(hints.length).toBe(1);
  45. expect(hints[0].label).toContain('rate()');
  46. expect(hints[0].fix).toBeUndefined();
  47. });
  48. it('returns a rate hint for a monotonously increasing series with missing data', () => {
  49. const series = [{ datapoints: [[23, 1000], [null, 1001], [24, 1002]], query: 'metric', responseIndex: 0 }];
  50. const hints = getQueryHints(series);
  51. expect(hints.length).toBe(1);
  52. expect(hints[0]).toMatchObject({
  53. label: 'Time series is monotonously increasing.',
  54. index: 0,
  55. fix: {
  56. action: {
  57. type: 'ADD_RATE',
  58. query: 'metric',
  59. },
  60. },
  61. });
  62. });
  63. it('returns a histogram hint for a bucket series', () => {
  64. const series = [{ datapoints: [[23, 1000]], query: 'metric_bucket', responseIndex: 0 }];
  65. const hints = getQueryHints(series);
  66. expect(hints.length).toBe(1);
  67. expect(hints[0]).toMatchObject({
  68. label: 'Time series has buckets, you probably wanted a histogram.',
  69. index: 0,
  70. fix: {
  71. action: {
  72. type: 'ADD_HISTOGRAM_QUANTILE',
  73. query: 'metric_bucket',
  74. },
  75. },
  76. });
  77. });
  78. });