feat: add "none" selection to query builder function selector aggreation (#14010)

* package-lock.json

* feat: none query builder

* test: update query builder test

* chore: use constant for none
pull/14016/head
Andrew Watkins 2019-05-29 13:24:08 -07:00 committed by GitHub
parent f790799981
commit 6e2b4b3c58
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 59 additions and 32 deletions

10
ui/package-lock.json generated
View File

@ -2568,7 +2568,7 @@
},
"bindings": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/bindings/-/bindings-1.2.1.tgz",
"resolved": "http://registry.npmjs.org/bindings/-/bindings-1.2.1.tgz",
"integrity": "sha1-FK1hE4EtLTfXLme0ystLtyZQXxE=",
"dev": true
},
@ -2984,7 +2984,7 @@
},
"callsites": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
"resolved": "http://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
"integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=",
"dev": true
},
@ -3769,7 +3769,7 @@
},
"css-color-names": {
"version": "0.0.4",
"resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz",
"resolved": "http://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz",
"integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=",
"dev": true
},
@ -4676,7 +4676,7 @@
},
"dotenv": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-5.0.1.tgz",
"resolved": "http://registry.npmjs.org/dotenv/-/dotenv-5.0.1.tgz",
"integrity": "sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow==",
"dev": true
},
@ -9635,7 +9635,7 @@
},
"magic-string": {
"version": "0.22.5",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz",
"resolved": "http://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz",
"integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==",
"dev": true,
"requires": {

View File

@ -5,13 +5,17 @@ import React, {FunctionComponent} from 'react'
import {Dropdown, ComponentStatus} from '@influxdata/clockface'
// Constants
import {AGG_WINDOW_AUTO} from 'src/timeMachine/constants/queryBuilder'
import {
AGG_WINDOW_AUTO,
AGG_WINDOW_NONE,
} from 'src/timeMachine/constants/queryBuilder'
interface Window {
period: string
}
export const windows: Window[] = [
{period: AGG_WINDOW_NONE},
{period: AGG_WINDOW_AUTO},
{period: '5m'},
{period: '15m'},
@ -56,7 +60,7 @@ const WindowSelector: FunctionComponent<Props> = ({
}
const showPrefix = (id: string): boolean => {
return id !== AGG_WINDOW_AUTO // && id !== AGG_WINDOW_NONE
return id !== AGG_WINDOW_AUTO && id !== AGG_WINDOW_NONE
}
const getStatus = (disabled: boolean): ComponentStatus => {

View File

@ -6,77 +6,103 @@ export interface QueryFn {
flux: (period?: string) => string
}
export const genFlux = (func: string, period?: string) => {
if (period === AGG_WINDOW_NONE) {
return `|> ${func}()`
}
switch (func) {
case 'derivative': {
return `|> derivative(unit: ${period}, nonNegative: false)`
}
case 'nonnegative derivative': {
return `|> derivative(unit: ${period}, nonNegative: true)`
}
case 'median':
case 'mean':
case 'max':
case 'min':
case 'sum':
case 'stddev':
case 'first':
case 'last': {
return `|> aggregateWindow(every: ${period}, fn: ${func})`
}
default:
return `|> ${func}()`
}
}
export const FUNCTIONS: QueryFn[] = [
{
name: 'mean',
flux: period => `|> aggregateWindow(every: ${period}, fn: mean)`,
flux: period => genFlux('mean', period),
},
{
name: 'median',
// TODO: https://github.com/influxdata/influxdb/issues/13806
flux: period => `|> window(period: ${period})
|> toFloat()
|> median()
|> group(columns: ["_value", "_time", "_start", "_stop"], mode: "except")`,
flux: period => genFlux('median', period),
},
{
name: 'max',
flux: period => `|> aggregateWindow(every: ${period}, fn: max)`,
flux: period => genFlux('max', period),
},
{
name: 'min',
flux: period => `|> aggregateWindow(every: ${period}, fn: min)`,
flux: period => genFlux('min', period),
},
{
name: 'sum',
flux: period => `|> aggregateWindow(every: ${period}, fn: sum)`,
flux: period => genFlux('sum', period),
},
{
name: 'derivative',
flux: period => `|> derivative(unit: ${period}, nonNegative: false)`,
flux: period => genFlux('derivative', period),
},
{
name: 'nonnegative derivative',
flux: period => `|> derivative(unit: ${period}, nonNegative: true)`,
flux: period => genFlux('nonnegative derivative', period),
},
{
name: 'distinct',
flux: () => '|> distinct()',
flux: period => genFlux('distinct', period),
},
{
name: 'count',
flux: () => '|> count()',
flux: period => genFlux('count', period),
},
{
name: 'increase',
flux: () => '|> increase()',
flux: period => genFlux('increase', period),
},
{
name: 'skew',
flux: () => '|> skew()',
flux: period => genFlux('skew', period),
},
{
name: 'spread',
flux: () => '|> spread()',
flux: period => genFlux('spread', period),
},
{
name: 'stddev',
flux: period => `|> aggregateWindow(every: ${period}, fn: stddev)`,
flux: period => genFlux('stddev', period),
},
{
name: 'first',
flux: period => `|> aggregateWindow(every: ${period}, fn: first)`,
flux: period => genFlux('first', period),
},
{
name: 'last',
flux: period => `|> aggregateWindow(every: ${period}, fn: last)`,
flux: period => genFlux('last', period),
},
{
name: 'unique',
flux: () => '|> unique()',
flux: period => genFlux('unique', period),
},
{
name: 'sort',
flux: () => '|> sort()',
flux: period => genFlux('sort', period),
},
]

View File

@ -58,10 +58,7 @@ describe('buildQuery', () => {
from(bucket: "b0")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r._measurement == "m0")
|> window(period: v.windowPeriod)
|> toFloat()
|> median()
|> group(columns: ["_value", "_time", "_start", "_stop"], mode: "except")
|> aggregateWindow(every: v.windowPeriod, fn: median)
|> yield(name: "median")`
const actual = buildQuery(config)