metric_find_query_specs.ts 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. import {describe, beforeEach, it, sinon, expect, angularMocks} from 'test/lib/common';
  2. import moment from 'moment';
  3. import helpers from 'test/specs/helpers';
  4. import {PrometheusDatasource} from '../datasource';
  5. import PrometheusMetricFindQuery from '../metric_find_query';
  6. describe('PrometheusMetricFindQuery', function() {
  7. var ctx = new helpers.ServiceTestContext();
  8. var instanceSettings = {url: 'proxied', directUrl: 'direct', user: 'test', password: 'mupp' };
  9. beforeEach(angularMocks.module('grafana.core'));
  10. beforeEach(angularMocks.module('grafana.services'));
  11. beforeEach(angularMocks.inject(function($q, $rootScope, $httpBackend, $injector) {
  12. ctx.$q = $q;
  13. ctx.$httpBackend = $httpBackend;
  14. ctx.$rootScope = $rootScope;
  15. ctx.ds = $injector.instantiate(PrometheusDatasource, {instanceSettings: instanceSettings});
  16. $httpBackend.when('GET', /\.html$/).respond('');
  17. }));
  18. describe('When performing metricFindQuery', function() {
  19. var results;
  20. var response;
  21. it('label_values(resource) should generate label search query', function() {
  22. response = {
  23. status: "success",
  24. data: ["value1", "value2", "value3"]
  25. };
  26. ctx.$httpBackend.expect('GET', 'proxied/api/v1/label/resource/values').respond(response);
  27. var pm = new PrometheusMetricFindQuery(ctx.ds, 'label_values(resource)');
  28. pm.process().then(function(data) { results = data; });
  29. ctx.$httpBackend.flush();
  30. ctx.$rootScope.$apply();
  31. expect(results.length).to.be(3);
  32. });
  33. it('label_values(metric, resource) should generate series query', function() {
  34. response = {
  35. status: "success",
  36. data: [
  37. {__name__: "metric", resource: "value1"},
  38. {__name__: "metric", resource: "value2"},
  39. {__name__: "metric", resource: "value3"}
  40. ]
  41. };
  42. ctx.$httpBackend.expect('GET', 'proxied/api/v1/series?match[]=metric').respond(response);
  43. var pm = new PrometheusMetricFindQuery(ctx.ds, 'label_values(metric, resource)');
  44. pm.process().then(function(data) { results = data; });
  45. ctx.$httpBackend.flush();
  46. ctx.$rootScope.$apply();
  47. expect(results.length).to.be(3);
  48. });
  49. it('label_values(metric{label1="foo", label2="bar", label3="baz"}, resource) should generate series query', function() {
  50. response = {
  51. status: "success",
  52. data: [
  53. {__name__: "metric", resource: "value1"},
  54. {__name__: "metric", resource: "value2"},
  55. {__name__: "metric", resource: "value3"}
  56. ]
  57. };
  58. ctx.$httpBackend.expect('GET', 'proxied/api/v1/series?match[]=metric').respond(response);
  59. var pm = new PrometheusMetricFindQuery(ctx.ds, 'label_values(metric, resource)');
  60. pm.process().then(function(data) { results = data; });
  61. ctx.$httpBackend.flush();
  62. ctx.$rootScope.$apply();
  63. expect(results.length).to.be(3);
  64. });
  65. it('metrics(metric.*) should generate metric name query', function() {
  66. response = {
  67. status: "success",
  68. data: ["metric1","metric2","metric3","nomatch"]
  69. };
  70. ctx.$httpBackend.expect('GET', 'proxied/api/v1/label/__name__/values').respond(response);
  71. var pm = new PrometheusMetricFindQuery(ctx.ds, 'metrics(metric.*)');
  72. pm.process().then(function(data) { results = data; });
  73. ctx.$httpBackend.flush();
  74. ctx.$rootScope.$apply();
  75. expect(results.length).to.be(3);
  76. });
  77. it('query_result(metric) should generate metric name query', function() {
  78. response = {
  79. status: "success",
  80. data: {
  81. resultType: "vector",
  82. result: [{
  83. metric: {"__name__": "metric", job: "testjob"},
  84. value: [1443454528.000, "3846"]
  85. }]
  86. }
  87. };
  88. ctx.$httpBackend.expect('GET', /proxied\/api\/v1\/query\?query=metric&time=.*/).respond(response);
  89. var pm = new PrometheusMetricFindQuery(ctx.ds, 'query_result(metric)');
  90. pm.process().then(function(data) { results = data; });
  91. ctx.$httpBackend.flush();
  92. ctx.$rootScope.$apply();
  93. expect(results.length).to.be(1);
  94. expect(results[0].text).to.be('metric{job="testjob"} 3846 1443454528000');
  95. });
  96. });
  97. });