From 6e66b8a0fa2bb861affd00f433f5de4062e8352f Mon Sep 17 00:00:00 2001 From: Jimmi Dyson Date: Mon, 28 Sep 2015 13:32:53 +0100 Subject: [PATCH 1/2] Add prometheus datasource --- .../app/plugins/datasource/prometheus/datasource.js | 12 +++++++----- .../app/plugins/datasource/prometheus/queryCtrl.js | 2 +- public/test/specs/prometheus-datasource-specs.js | 2 +- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/public/app/plugins/datasource/prometheus/datasource.js b/public/app/plugins/datasource/prometheus/datasource.js index e6eaa71a392..158d2cf6ba5 100644 --- a/public/app/plugins/datasource/prometheus/datasource.js +++ b/public/app/plugins/datasource/prometheus/datasource.js @@ -1,17 +1,18 @@ define([ 'angular', 'lodash', - 'kbn', 'moment', 'app/core/utils/datemath', './directives', './queryCtrl', ], -function (angular, _, kbn, dateMath) { +function (angular, _, moment, dateMath) { 'use strict'; var module = angular.module('grafana.services'); + var durationSplitRegexp = /(\d+)(ms|s|m|h|d|w|M|y)/; + module.factory('PrometheusDatasource', function($q, backendSrv, templateSrv) { function PrometheusDatasource(datasource) { @@ -183,13 +184,14 @@ function (angular, _, kbn, dateMath) { }; PrometheusDatasource.prototype.calculateInterval = function(interval, intervalFactor) { - var sec = kbn.interval_to_seconds(interval); - + var m = interval.match(durationSplitRegexp); + var dur = moment.duration(parseInt(m[1]), m[2]); + var sec = dur.asSeconds(); if (sec < 1) { sec = 1; } - return sec * intervalFactor; + return Math.floor(sec * intervalFactor) + 's'; }; function transformMetricData(md, options) { diff --git a/public/app/plugins/datasource/prometheus/queryCtrl.js b/public/app/plugins/datasource/prometheus/queryCtrl.js index 88257c824f5..08f8e899c68 100644 --- a/public/app/plugins/datasource/prometheus/queryCtrl.js +++ b/public/app/plugins/datasource/prometheus/queryCtrl.js @@ -117,7 +117,7 @@ function (angular, _, kbn, dateMath) { $scope.calculateInterval = function() { var interval = $scope.target.interval || $scope.interval; var calculatedInterval = $scope.datasource.calculateInterval(interval, $scope.target.intervalFactor); - $scope.target.calculatedInterval = kbn.secondsToHms(calculatedInterval); + $scope.target.calculatedInterval = calculatedInterval; }; // TODO: validate target diff --git a/public/test/specs/prometheus-datasource-specs.js b/public/test/specs/prometheus-datasource-specs.js index c331b82385c..c65b8771851 100644 --- a/public/test/specs/prometheus-datasource-specs.js +++ b/public/test/specs/prometheus-datasource-specs.js @@ -21,7 +21,7 @@ define([ var results; var urlExpected = '/api/v1/query_range?query=' + encodeURIComponent('test{job="testjob"}') + - '&start=1443438675&end=1443460275&step=60'; + '&start=1443438675&end=1443460275&step=60s'; var query = { range: { from: moment(1443438674760), to: moment(1443460274760) }, targets: [{ expr: 'test{job="testjob"}' }], From cf0748895ed578965ccbc003ba5f6474269d3324 Mon Sep 17 00:00:00 2001 From: Jimmi Dyson Date: Tue, 29 Sep 2015 15:54:47 +0100 Subject: [PATCH 2/2] Prometheus template params fixes --- .../plugins/datasource/prometheus/datasource.js | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/public/app/plugins/datasource/prometheus/datasource.js b/public/app/plugins/datasource/prometheus/datasource.js index 158d2cf6ba5..dd8ba8e2b3b 100644 --- a/public/app/plugins/datasource/prometheus/datasource.js +++ b/public/app/plugins/datasource/prometheus/datasource.js @@ -130,8 +130,16 @@ function (angular, _, moment, dateMath) { PrometheusDatasource.prototype.metricFindQuery = function(query) { var url; - var metricsQuery = query.match(/^[a-zA-Z_:*][a-zA-Z0-9_:*]*/); - var labelValuesQuery = query.match(/^label_values\((.+)\)/); + var interpolated; + try { + interpolated = templateSrv.replace(query); + } + catch (err) { + return $q.reject(err); + } + + var metricsQuery = interpolated.match(/^[a-zA-Z_:*][a-zA-Z0-9_:*]*/); + var labelValuesQuery = interpolated.match(/^label_values\((.+)\)/); if (labelValuesQuery) { // return label values @@ -163,11 +171,12 @@ function (angular, _, moment, dateMath) { }); } else { // if query contains full metric name, return metric name and label list - url = '/api/v1/query?query=' + encodeURIComponent(query); + url = '/api/v1/query?query=' + encodeURIComponent(interpolated) + + '&time=' + (moment().valueOf() / 1000); return this._request('GET', url) .then(function(result) { - return _.map(result.data.result, function(metricData) { + return _.map(result.data.data.result, function(metricData) { return { text: getOriginalMetricName(metricData.metric), expandable: true