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 nonepull/14016/head
parent
f790799981
commit
6e2b4b3c58
|
@ -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": {
|
||||
|
|
|
@ -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 => {
|
||||
|
|
|
@ -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),
|
||||
},
|
||||
]
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue