mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
fix rate special function when using group by
This commit is contained in:
@@ -2,7 +2,7 @@ import _ from 'lodash';
|
|||||||
import $ from 'jquery';
|
import $ from 'jquery';
|
||||||
import coreModule from 'app/core/core_module';
|
import coreModule from 'app/core/core_module';
|
||||||
|
|
||||||
var template = `
|
let template = `
|
||||||
<div class="dropdown cascade-open">
|
<div class="dropdown cascade-open">
|
||||||
<a ng-click="showActionsMenu()" class="query-part-name pointer dropdown-toggle" data-toggle="dropdown">{{part.label}}</a>
|
<a ng-click="showActionsMenu()" class="query-part-name pointer dropdown-toggle" data-toggle="dropdown">{{part.label}}</a>
|
||||||
<span>{{part.def.wrapOpen}}</span><span class="query-part-parameters"></span><span>{{part.def.wrapClose}}</span>
|
<span>{{part.def.wrapOpen}}</span><span class="query-part-parameters"></span><span>{{part.def.wrapClose}}</span>
|
||||||
@@ -15,7 +15,7 @@ var template = `
|
|||||||
|
|
||||||
/** @ngInject */
|
/** @ngInject */
|
||||||
export function sqlPartEditorDirective($compile, templateSrv) {
|
export function sqlPartEditorDirective($compile, templateSrv) {
|
||||||
var paramTemplate = '<input type="text" class="hide input-mini"></input>';
|
let paramTemplate = '<input type="text" class="hide input-mini"></input>';
|
||||||
|
|
||||||
return {
|
return {
|
||||||
restrict: 'E',
|
restrict: 'E',
|
||||||
@@ -26,18 +26,18 @@ export function sqlPartEditorDirective($compile, templateSrv) {
|
|||||||
debounce: '@',
|
debounce: '@',
|
||||||
},
|
},
|
||||||
link: function postLink($scope, elem) {
|
link: function postLink($scope, elem) {
|
||||||
var part = $scope.part;
|
let part = $scope.part;
|
||||||
var partDef = part.def;
|
let partDef = part.def;
|
||||||
var $paramsContainer = elem.find('.query-part-parameters');
|
let $paramsContainer = elem.find('.query-part-parameters');
|
||||||
var debounceLookup = $scope.debounce;
|
let debounceLookup = $scope.debounce;
|
||||||
var cancelBlur = null;
|
let cancelBlur = null;
|
||||||
|
|
||||||
$scope.partActions = [];
|
$scope.partActions = [];
|
||||||
|
|
||||||
function clickFuncParam(paramIndex) {
|
function clickFuncParam(paramIndex) {
|
||||||
/*jshint validthis:true */
|
/*jshint validthis:true */
|
||||||
var $link = $(this);
|
let $link = $(this);
|
||||||
var $input = $link.next();
|
let $input = $link.next();
|
||||||
|
|
||||||
$input.val(part.params[paramIndex]);
|
$input.val(part.params[paramIndex]);
|
||||||
$input.css('width', $link.width() + 16 + 'px');
|
$input.css('width', $link.width() + 16 + 'px');
|
||||||
@@ -47,7 +47,7 @@ export function sqlPartEditorDirective($compile, templateSrv) {
|
|||||||
$input.focus();
|
$input.focus();
|
||||||
$input.select();
|
$input.select();
|
||||||
|
|
||||||
var typeahead = $input.data('typeahead');
|
let typeahead = $input.data('typeahead');
|
||||||
if (typeahead) {
|
if (typeahead) {
|
||||||
$input.val('');
|
$input.val('');
|
||||||
typeahead.lookup();
|
typeahead.lookup();
|
||||||
@@ -62,8 +62,8 @@ export function sqlPartEditorDirective($compile, templateSrv) {
|
|||||||
|
|
||||||
function switchToLink($input, paramIndex) {
|
function switchToLink($input, paramIndex) {
|
||||||
/*jshint validthis:true */
|
/*jshint validthis:true */
|
||||||
var $link = $input.prev();
|
let $link = $input.prev();
|
||||||
var newValue = $input.val();
|
let newValue = $input.val();
|
||||||
|
|
||||||
if (newValue !== '' || part.def.params[paramIndex].optional) {
|
if (newValue !== '' || part.def.params[paramIndex].optional) {
|
||||||
$link.html(templateSrv.highlightVariablesAsHtml(newValue));
|
$link.html(templateSrv.highlightVariablesAsHtml(newValue));
|
||||||
@@ -95,9 +95,9 @@ export function sqlPartEditorDirective($compile, templateSrv) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var typeaheadSource = function(query, callback) {
|
let typeaheadSource = function(query, callback) {
|
||||||
if (param.options) {
|
if (param.options) {
|
||||||
var options = param.options;
|
let options = param.options;
|
||||||
if (param.type === 'int') {
|
if (param.type === 'int') {
|
||||||
options = _.map(options, function(val) {
|
options = _.map(options, function(val) {
|
||||||
return val.toString();
|
return val.toString();
|
||||||
@@ -108,7 +108,7 @@ export function sqlPartEditorDirective($compile, templateSrv) {
|
|||||||
|
|
||||||
$scope.$apply(function() {
|
$scope.$apply(function() {
|
||||||
$scope.handleEvent({ $event: { name: 'get-param-options', param: param } }).then(function(result) {
|
$scope.handleEvent({ $event: { name: 'get-param-options', param: param } }).then(function(result) {
|
||||||
var dynamicOptions = _.map(result, function(op) {
|
let dynamicOptions = _.map(result, function(op) {
|
||||||
return op.value;
|
return op.value;
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -138,10 +138,10 @@ export function sqlPartEditorDirective($compile, templateSrv) {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
var typeahead = $input.data('typeahead');
|
let typeahead = $input.data('typeahead');
|
||||||
typeahead.lookup = function() {
|
typeahead.lookup = function() {
|
||||||
this.query = this.$element.val() || '';
|
this.query = this.$element.val() || '';
|
||||||
var items = this.source(this.query, $.proxy(this.process, this));
|
let items = this.source(this.query, $.proxy(this.process, this));
|
||||||
return items ? this.process(items) : items;
|
return items ? this.process(items) : items;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -170,9 +170,9 @@ export function sqlPartEditorDirective($compile, templateSrv) {
|
|||||||
$('<span>' + partDef.separator + '</span>').appendTo($paramsContainer);
|
$('<span>' + partDef.separator + '</span>').appendTo($paramsContainer);
|
||||||
}
|
}
|
||||||
|
|
||||||
var paramValue = templateSrv.highlightVariablesAsHtml(part.params[index]);
|
let paramValue = templateSrv.highlightVariablesAsHtml(part.params[index]);
|
||||||
var $paramLink = $('<a class="graphite-func-param-link pointer">' + paramValue + '</a>');
|
let $paramLink = $('<a class="graphite-func-param-link pointer">' + paramValue + '</a>');
|
||||||
var $input = $(paramTemplate);
|
let $input = $(paramTemplate);
|
||||||
|
|
||||||
$paramLink.appendTo($paramsContainer);
|
$paramLink.appendTo($paramsContainer);
|
||||||
$input.appendTo($paramsContainer);
|
$input.appendTo($paramsContainer);
|
||||||
|
|||||||
@@ -27,17 +27,17 @@ export class PostgresDatasource {
|
|||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
var quotedValues = _.map(value, function(val) {
|
let quotedValues = _.map(value, function(val) {
|
||||||
return "'" + val + "'";
|
return "'" + val + "'";
|
||||||
});
|
});
|
||||||
return quotedValues.join(',');
|
return quotedValues.join(',');
|
||||||
}
|
}
|
||||||
|
|
||||||
query(options) {
|
query(options) {
|
||||||
var queries = _.filter(options.targets, target => {
|
let queries = _.filter(options.targets, target => {
|
||||||
return target.hide !== true;
|
return target.hide !== true;
|
||||||
}).map(target => {
|
}).map(target => {
|
||||||
var queryModel = new PostgresQuery(target, this.templateSrv, options.scopedVars);
|
let queryModel = new PostgresQuery(target, this.templateSrv, options.scopedVars);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
refId: target.refId,
|
refId: target.refId,
|
||||||
|
|||||||
@@ -154,6 +154,10 @@ export default class PostgresQuery {
|
|||||||
break;
|
break;
|
||||||
case 'rate':
|
case 'rate':
|
||||||
let timeColumn = this.target.timeColumn;
|
let timeColumn = this.target.timeColumn;
|
||||||
|
if (aggregate) {
|
||||||
|
timeColumn = 'min(' + timeColumn + ')';
|
||||||
|
}
|
||||||
|
|
||||||
let curr = query;
|
let curr = query;
|
||||||
let prev = 'lag(' + curr + ') OVER (' + over + ')';
|
let prev = 'lag(' + curr + ') OVER (' + over + ')';
|
||||||
query = '(CASE WHEN ' + curr + ' >= ' + prev + ' THEN ' + curr + ' - ' + prev + ' ELSE ' + curr + ' END)';
|
query = '(CASE WHEN ' + curr + ' >= ' + prev + ' THEN ' + curr + ' - ' + prev + ' ELSE ' + curr + ' END)';
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
import { SqlPartDef, SqlPart } from 'app/core/components/sql_part/sql_part';
|
import { SqlPartDef, SqlPart } from 'app/core/components/sql_part/sql_part';
|
||||||
|
|
||||||
var index = [];
|
let index = [];
|
||||||
|
|
||||||
function createPart(part): any {
|
function createPart(part): any {
|
||||||
var def = index[part.type];
|
let def = index[part.type];
|
||||||
if (!def) {
|
if (!def) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user