From 3125177e5c31eb6da04a8dbb9d1353e82cea74aa Mon Sep 17 00:00:00 2001 From: Mitsuhiro Tanda Date: Sun, 28 Feb 2016 13:33:29 +0900 Subject: [PATCH] (prometheus) fix label_values() templating --- .../datasource/prometheus/metric_find_query.js | 6 +++--- .../prometheus/specs/metric_find_query_specs.ts | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/public/app/plugins/datasource/prometheus/metric_find_query.js b/public/app/plugins/datasource/prometheus/metric_find_query.js index 65ea92e05b1..25704df1e2c 100644 --- a/public/app/plugins/datasource/prometheus/metric_find_query.js +++ b/public/app/plugins/datasource/prometheus/metric_find_query.js @@ -11,16 +11,16 @@ function (_, moment) { } PrometheusMetricFindQuery.prototype.process = function() { - var label_values_regex = /^label_values\(([^,]+)(?:,\s*(.+))?\)$/; + var label_values_regex = /^label_values\((?:(.+),\s*)?([a-zA-Z_][a-zA-Z0-9_]+)\)$/; var metric_names_regex = /^metrics\((.+)\)$/; var query_result_regex = /^query_result\((.+)\)$/; var label_values_query = this.query.match(label_values_regex); if (label_values_query) { - if (label_values_query[2]) { + if (label_values_query[1]) { return this.labelValuesQuery(label_values_query[2], label_values_query[1]); } else { - return this.labelValuesQuery(label_values_query[1], null); + return this.labelValuesQuery(label_values_query[2], null); } } diff --git a/public/app/plugins/datasource/prometheus/specs/metric_find_query_specs.ts b/public/app/plugins/datasource/prometheus/specs/metric_find_query_specs.ts index dfc6b597598..5edf7038cd3 100644 --- a/public/app/plugins/datasource/prometheus/specs/metric_find_query_specs.ts +++ b/public/app/plugins/datasource/prometheus/specs/metric_find_query_specs.ts @@ -48,6 +48,22 @@ describe('PrometheusMetricFindQuery', function() { ctx.$rootScope.$apply(); expect(results.length).to.be(3); }); + it('label_values(metric{label1="foo", label2="bar", label3="baz"}, resource) should generate series query', function() { + response = { + status: "success", + data: [ + {__name__: "metric", resource: "value1"}, + {__name__: "metric", resource: "value2"}, + {__name__: "metric", resource: "value3"} + ] + }; + ctx.$httpBackend.expect('GET', 'proxied/api/v1/series?match[]=metric').respond(response); + var pm = new PrometheusMetricFindQuery(ctx.ds, 'label_values(metric, resource)'); + pm.process().then(function(data) { results = data; }); + ctx.$httpBackend.flush(); + ctx.$rootScope.$apply(); + expect(results.length).to.be(3); + }); it('metrics(metric.*) should generate metric name query', function() { response = { status: "success",