query_hints.test.ts 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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 a rate hint for a monotonously increasing series', () => {
  15. const series = [{ datapoints: [[23, 1000], [24, 1001]], query: 'metric', responseIndex: 0 }];
  16. const hints = getQueryHints(series);
  17. expect(hints.length).toBe(1);
  18. expect(hints[0]).toMatchObject({
  19. label: 'Time series is monotonously increasing.',
  20. index: 0,
  21. fix: {
  22. action: {
  23. type: 'ADD_RATE',
  24. query: 'metric',
  25. },
  26. },
  27. });
  28. });
  29. it('returns no rate hint for a monotonously increasing series that already has a rate', () => {
  30. const series = [{ datapoints: [[23, 1000], [24, 1001]], query: 'rate(metric[1m])', responseIndex: 0 }];
  31. const hints = getQueryHints(series);
  32. expect(hints).toEqual([null]);
  33. });
  34. it('returns a rate hint w/o action for a complex monotonously increasing series', () => {
  35. const series = [{ datapoints: [[23, 1000], [24, 1001]], query: 'sum(metric)', responseIndex: 0 }];
  36. const hints = getQueryHints(series);
  37. expect(hints.length).toBe(1);
  38. expect(hints[0].label).toContain('rate()');
  39. expect(hints[0].fix).toBeUndefined();
  40. });
  41. it('returns a rate hint for a monotonously increasing series with missing data', () => {
  42. const series = [{ datapoints: [[23, 1000], [null, 1001], [24, 1002]], query: 'metric', responseIndex: 0 }];
  43. const hints = getQueryHints(series);
  44. expect(hints.length).toBe(1);
  45. expect(hints[0]).toMatchObject({
  46. label: 'Time series is monotonously increasing.',
  47. index: 0,
  48. fix: {
  49. action: {
  50. type: 'ADD_RATE',
  51. query: 'metric',
  52. },
  53. },
  54. });
  55. });
  56. it('returns a histogram hint for a bucket series', () => {
  57. const series = [{ datapoints: [[23, 1000]], query: 'metric_bucket', responseIndex: 0 }];
  58. const hints = getQueryHints(series);
  59. expect(hints.length).toBe(1);
  60. expect(hints[0]).toMatchObject({
  61. label: 'Time series has buckets, you probably wanted a histogram.',
  62. index: 0,
  63. fix: {
  64. action: {
  65. type: 'ADD_HISTOGRAM_QUANTILE',
  66. query: 'metric_bucket',
  67. },
  68. },
  69. });
  70. });
  71. });