From b802112dcd778eee1f6b19d5ad9e4668ce96d0cd Mon Sep 17 00:00:00 2001 From: Scott Anderson Date: Mon, 28 Oct 2019 11:42:47 -0600 Subject: [PATCH 01/25] updated 2.0 reference --- content/flux/v0.x/_index.md | 28 + content/flux/v0.x/about_the_project/_index.md | 26 + content/flux/v0.x/about_the_project/cla.md | 10 + .../flux/v0.x/about_the_project/license.md | 10 + .../releasenotes-changelog.md | 880 ++++++++++++++++++ content/flux/v0.x/guides/_index.md | 27 + content/flux/v0.x/guides/conditional-logic.md | 175 ++++ content/flux/v0.x/guides/executing-queries.md | 95 ++ .../flux/v0.x/guides/flux-in-dashboards.md | 148 +++ content/flux/v0.x/guides/grouping-data.md | 668 +++++++++++++ content/flux/v0.x/guides/histograms.md | 138 +++ content/flux/v0.x/guides/join.md | 302 ++++++ .../flux/v0.x/guides/manipulate-timestamps.md | 108 +++ .../flux/v0.x/guides/mathematic-operations.md | 250 +++++ .../flux/v0.x/guides/regular-expressions.md | 84 ++ content/flux/v0.x/guides/sort-limit.md | 44 + content/flux/v0.x/guides/sql.md | 184 ++++ .../flux/v0.x/guides/windowing-aggregating.md | 328 +++++++ content/flux/v0.x/introduction/_index.md | 42 + .../v0.x/introduction/flux-vs-influxql.md | 272 ++++++ .../introduction/getting-started/_index.md | 130 +++ .../getting-started/query-influxdb.md | 130 +++ .../getting-started/syntax-basics.md | 221 +++++ .../getting-started/transform-data.md | 174 ++++ .../flux/v0.x/introduction/installation.md | 37 + content/flux/v0.x/language/_index.md | 38 + .../flux/v0.x/language/assignment-scope.md | 80 ++ content/flux/v0.x/language/blocks.md | 27 + content/flux/v0.x/language/data-model.md | 131 +++ content/flux/v0.x/language/expressions.md | 268 ++++++ .../flux/v0.x/language/lexical-elements.md | 337 +++++++ content/flux/v0.x/language/notation.md | 36 + content/flux/v0.x/language/operators.md | 147 +++ content/flux/v0.x/language/options.md | 55 ++ content/flux/v0.x/language/packages.md | 65 ++ content/flux/v0.x/language/representation.md | 40 + content/flux/v0.x/language/side-effects.md | 18 + content/flux/v0.x/language/statements.md | 158 ++++ .../v0.x/language/string-interpolation.md | 86 ++ .../flux/v0.x/language/system-built-ins.md | 26 + content/flux/v0.x/language/types.md | 135 +++ content/flux/v0.x/language/variables.md | 15 + content/flux/v0.x/stdlib/_index.md | 16 + content/flux/v0.x/stdlib/built-in/_index.md | 21 + .../v0.x/stdlib/built-in/inputs/_index.md | 18 + .../v0.x/stdlib/built-in/inputs/buckets.md | 25 + .../flux/v0.x/stdlib/built-in/inputs/from.md | 53 ++ .../flux/v0.x/stdlib/built-in/misc/_index.md | 19 + .../v0.x/stdlib/built-in/misc/intervals.md | 166 ++++ .../v0.x/stdlib/built-in/misc/linearbins.md | 54 ++ .../stdlib/built-in/misc/logarithmicbins.md | 54 ++ content/flux/v0.x/stdlib/built-in/misc/now.md | 36 + .../flux/v0.x/stdlib/built-in/misc/sleep.md | 55 ++ .../v0.x/stdlib/built-in/outputs/_index.md | 18 + .../flux/v0.x/stdlib/built-in/outputs/to.md | 163 ++++ .../v0.x/stdlib/built-in/outputs/yield.md | 47 + .../flux/v0.x/stdlib/built-in/tests/_index.md | 18 + .../v0.x/stdlib/built-in/tests/contains.md | 48 + .../stdlib/built-in/transformations/_index.md | 22 + .../transformations/aggregates/_index.md | 50 + .../aggregates/aggregatewindow.md | 126 +++ .../aggregates/chandemomentumoscillator.md | 114 +++ .../transformations/aggregates/count.md | 49 + .../transformations/aggregates/cov.md | 71 ++ .../transformations/aggregates/covariance.md | 45 + .../transformations/aggregates/derivative.md | 67 ++ .../transformations/aggregates/difference.md | 122 +++ .../transformations/aggregates/doubleema.md | 64 ++ .../aggregates/exponentialmovingaverage.md | 75 ++ .../aggregates/histogramquantile.md | 91 ++ .../transformations/aggregates/holtwinters.md | 118 +++ .../transformations/aggregates/increase.md | 70 ++ .../transformations/aggregates/integral.md | 52 ++ .../transformations/aggregates/kaufmansama.md | 56 ++ .../transformations/aggregates/kaufmanser.md | 46 + .../transformations/aggregates/mean.md | 46 + .../transformations/aggregates/median.md | 115 +++ .../transformations/aggregates/mode.md | 61 ++ .../aggregates/movingaverage.md | 71 ++ .../transformations/aggregates/pearsonr.md | 66 ++ .../transformations/aggregates/quantile.md | 109 +++ .../transformations/aggregates/reduce.md | 170 ++++ .../aggregates/relativestrengthindex.md | 105 +++ .../transformations/aggregates/skew.md | 40 + .../transformations/aggregates/spread.md | 50 + .../transformations/aggregates/stddev.md | 63 ++ .../transformations/aggregates/sum.md | 46 + .../aggregates/timedmovingaverage.md | 84 ++ .../transformations/aggregates/tripleema.md | 69 ++ .../aggregates/tripleexponentialderivative.md | 66 ++ .../built-in/transformations/columns.md | 60 ++ .../built-in/transformations/cumulativesum.md | 47 + .../stdlib/built-in/transformations/drop.md | 69 ++ .../built-in/transformations/duplicate.md | 47 + .../built-in/transformations/elapsed.md | 56 ++ .../stdlib/built-in/transformations/fill.md | 76 ++ .../stdlib/built-in/transformations/filter.md | 56 ++ .../stdlib/built-in/transformations/group.md | 84 ++ .../built-in/transformations/histogram.md | 80 ++ .../built-in/transformations/hourselection.md | 55 ++ .../transformations/influxfieldsascols.md | 43 + .../stdlib/built-in/transformations/join.md | 135 +++ .../stdlib/built-in/transformations/keep.md | 63 ++ .../stdlib/built-in/transformations/keys.md | 60 ++ .../built-in/transformations/keyvalues.md | 83 ++ .../stdlib/built-in/transformations/limit.md | 53 ++ .../stdlib/built-in/transformations/map.md | 105 +++ .../stdlib/built-in/transformations/pivot.md | 149 +++ .../stdlib/built-in/transformations/range.md | 74 ++ .../stdlib/built-in/transformations/rename.md | 65 ++ .../transformations/selectors/_index.md | 28 + .../transformations/selectors/bottom.md | 64 ++ .../transformations/selectors/distinct.md | 42 + .../transformations/selectors/first.md | 38 + .../selectors/highestaverage.md | 85 ++ .../selectors/highestcurrent.md | 85 ++ .../transformations/selectors/highestmax.md | 85 ++ .../transformations/selectors/last.md | 37 + .../selectors/lowestaverage.md | 86 ++ .../selectors/lowestcurrent.md | 85 ++ .../transformations/selectors/lowestmin.md | 85 ++ .../built-in/transformations/selectors/max.md | 46 + .../built-in/transformations/selectors/min.md | 46 + .../transformations/selectors/sample.md | 53 ++ .../built-in/transformations/selectors/top.md | 58 ++ .../transformations/selectors/unique.md | 38 + .../stdlib/built-in/transformations/set.md | 42 + .../stdlib/built-in/transformations/sort.md | 54 ++ .../built-in/transformations/statecount.md | 60 ++ .../built-in/transformations/stateduration.md | 74 ++ .../transformations/stream-table/_index.md | 34 + .../transformations/stream-table/getcolumn.md | 41 + .../transformations/stream-table/getrecord.md | 41 + .../transformations/stream-table/tablefind.md | 57 ++ .../stdlib/built-in/transformations/tail.md | 47 + .../built-in/transformations/timeshift.md | 53 ++ .../transformations/truncatetimecolumn.md | 54 ++ .../type-conversions/_index.md | 19 + .../transformations/type-conversions/bool.md | 33 + .../transformations/type-conversions/bytes.md | 32 + .../type-conversions/duration.md | 33 + .../transformations/type-conversions/float.md | 33 + .../transformations/type-conversions/int.md | 33 + .../type-conversions/string.md | 33 + .../transformations/type-conversions/time.md | 33 + .../type-conversions/tobool.md | 38 + .../type-conversions/toduration.md | 48 + .../type-conversions/tofloat.md | 44 + .../transformations/type-conversions/toint.md | 44 + .../type-conversions/tostring.md | 44 + .../type-conversions/totime.md | 44 + .../type-conversions/touint.md | 44 + .../transformations/type-conversions/uint.md | 33 + .../stdlib/built-in/transformations/union.md | 56 ++ .../stdlib/built-in/transformations/window.md | 130 +++ content/flux/v0.x/stdlib/csv/_index.md | 23 + content/flux/v0.x/stdlib/csv/from.md | 78 ++ .../v0.x/stdlib/custom-functions/_index.md | 135 +++ .../custom-functions/custom-aggregate.md | 264 ++++++ content/flux/v0.x/stdlib/date/_index.md | 58 ++ content/flux/v0.x/stdlib/date/hour.md | 33 + content/flux/v0.x/stdlib/date/microsecond.md | 33 + content/flux/v0.x/stdlib/date/millisecond.md | 33 + content/flux/v0.x/stdlib/date/minute.md | 33 + content/flux/v0.x/stdlib/date/month.md | 33 + content/flux/v0.x/stdlib/date/monthday.md | 33 + content/flux/v0.x/stdlib/date/nanosecond.md | 33 + content/flux/v0.x/stdlib/date/quarter.md | 33 + content/flux/v0.x/stdlib/date/second.md | 33 + content/flux/v0.x/stdlib/date/truncate.md | 58 ++ content/flux/v0.x/stdlib/date/week.md | 33 + content/flux/v0.x/stdlib/date/weekday.md | 33 + content/flux/v0.x/stdlib/date/year.md | 31 + content/flux/v0.x/stdlib/date/yearday.md | 33 + .../flux/v0.x/stdlib/experimental/_index.md | 42 + .../v0.x/stdlib/experimental/addduration.md | 64 ++ .../stdlib/experimental/bigtable/_index.md | 27 + .../v0.x/stdlib/experimental/bigtable/from.md | 59 ++ .../flux/v0.x/stdlib/experimental/group.md | 64 ++ .../v0.x/stdlib/experimental/mqtt/_index.md | 27 + .../flux/v0.x/stdlib/experimental/mqtt/to.md | 134 +++ .../v0.x/stdlib/experimental/objectkeys.md | 53 ++ .../stdlib/experimental/prometheus/_index.md | 27 + .../stdlib/experimental/prometheus/scrape.md | 52 ++ content/flux/v0.x/stdlib/experimental/set.md | 78 ++ .../v0.x/stdlib/experimental/subduration.md | 64 ++ content/flux/v0.x/stdlib/experimental/to.md | 113 +++ .../flux/v0.x/stdlib/influxdb-v1/_index.md | 25 + .../v0.x/stdlib/influxdb-v1/fieldsascols.md | 50 + .../v0.x/stdlib/influxdb-v1/measurements.md | 37 + .../stdlib/influxdb-v1/measurementtagkeys.md | 47 + .../influxdb-v1/measurementtagvalues.md | 58 ++ .../flux/v0.x/stdlib/influxdb-v1/tagkeys.md | 75 ++ .../flux/v0.x/stdlib/influxdb-v1/tagvalues.md | 83 ++ content/flux/v0.x/stdlib/json/encode.md | 50 + content/flux/v0.x/stdlib/json/index.md | 23 + content/flux/v0.x/stdlib/math/_index.md | 47 + content/flux/v0.x/stdlib/math/abs.md | 36 + content/flux/v0.x/stdlib/math/acos.md | 37 + content/flux/v0.x/stdlib/math/acosh.md | 38 + content/flux/v0.x/stdlib/math/asin.md | 39 + content/flux/v0.x/stdlib/math/asinh.md | 37 + content/flux/v0.x/stdlib/math/atan.md | 36 + content/flux/v0.x/stdlib/math/atan2.md | 59 ++ content/flux/v0.x/stdlib/math/atanh.md | 42 + content/flux/v0.x/stdlib/math/cbrt.md | 37 + content/flux/v0.x/stdlib/math/ceil.md | 38 + content/flux/v0.x/stdlib/math/copysign.md | 36 + content/flux/v0.x/stdlib/math/cos.md | 36 + content/flux/v0.x/stdlib/math/cosh.md | 37 + content/flux/v0.x/stdlib/math/dim.md | 43 + content/flux/v0.x/stdlib/math/erf.md | 37 + content/flux/v0.x/stdlib/math/erfc.md | 38 + content/flux/v0.x/stdlib/math/erfcinv.md | 41 + content/flux/v0.x/stdlib/math/erfinv.md | 41 + content/flux/v0.x/stdlib/math/exp.md | 38 + content/flux/v0.x/stdlib/math/exp2.md | 38 + content/flux/v0.x/stdlib/math/expm1.md | 42 + content/flux/v0.x/stdlib/math/float64bits.md | 31 + content/flux/v0.x/stdlib/math/floor.md | 38 + content/flux/v0.x/stdlib/math/frexp.md | 42 + content/flux/v0.x/stdlib/math/gamma.md | 40 + content/flux/v0.x/stdlib/math/hypot.md | 46 + content/flux/v0.x/stdlib/math/ilogb.md | 37 + content/flux/v0.x/stdlib/math/isinf.md | 40 + content/flux/v0.x/stdlib/math/isnan.md | 36 + content/flux/v0.x/stdlib/math/j0.md | 38 + content/flux/v0.x/stdlib/math/j1.md | 37 + content/flux/v0.x/stdlib/math/jn.md | 42 + content/flux/v0.x/stdlib/math/ldexp.md | 44 + content/flux/v0.x/stdlib/math/lgamma.md | 40 + content/flux/v0.x/stdlib/math/log.md | 38 + content/flux/v0.x/stdlib/math/log10.md | 38 + content/flux/v0.x/stdlib/math/log1p.md | 42 + content/flux/v0.x/stdlib/math/log2.md | 38 + content/flux/v0.x/stdlib/math/logb.md | 37 + content/flux/v0.x/stdlib/math/minf.md | 32 + content/flux/v0.x/stdlib/math/mmax.md | 47 + content/flux/v0.x/stdlib/math/mmin.md | 46 + content/flux/v0.x/stdlib/math/mod.md | 47 + content/flux/v0.x/stdlib/math/modf.md | 39 + content/flux/v0.x/stdlib/math/nan.md | 21 + content/flux/v0.x/stdlib/math/nextafter.md | 43 + content/flux/v0.x/stdlib/math/pow.md | 60 ++ content/flux/v0.x/stdlib/math/pow10.md | 37 + content/flux/v0.x/stdlib/math/remainder.md | 45 + content/flux/v0.x/stdlib/math/round.md | 38 + content/flux/v0.x/stdlib/math/roundtoeven.md | 40 + content/flux/v0.x/stdlib/math/signbit.md | 31 + content/flux/v0.x/stdlib/math/sin.md | 37 + content/flux/v0.x/stdlib/math/sincos.md | 38 + content/flux/v0.x/stdlib/math/sinh.md | 37 + content/flux/v0.x/stdlib/math/sqrt.md | 38 + content/flux/v0.x/stdlib/math/tan.md | 37 + content/flux/v0.x/stdlib/math/tanh.md | 37 + content/flux/v0.x/stdlib/math/trunc.md | 37 + content/flux/v0.x/stdlib/math/y0.md | 39 + content/flux/v0.x/stdlib/math/y1.md | 39 + content/flux/v0.x/stdlib/math/yn.md | 45 + content/flux/v0.x/stdlib/mqtt/_index.md | 23 + content/flux/v0.x/stdlib/mqtt/to.md | 131 +++ content/flux/v0.x/stdlib/regexp/_index.md | 23 + content/flux/v0.x/stdlib/regexp/compile.md | 52 ++ content/flux/v0.x/stdlib/regexp/findstring.md | 52 ++ .../v0.x/stdlib/regexp/findstringindex.md | 58 ++ content/flux/v0.x/stdlib/regexp/getstring.md | 46 + .../v0.x/stdlib/regexp/matchregexpstring.md | 53 ++ content/flux/v0.x/stdlib/regexp/quotemeta.md | 47 + .../v0.x/stdlib/regexp/replaceallstring.md | 61 ++ .../flux/v0.x/stdlib/regexp/splitregexp.md | 44 + content/flux/v0.x/stdlib/runtime/_index.md | 22 + content/flux/v0.x/stdlib/runtime/version.md | 22 + content/flux/v0.x/stdlib/sql/_index.md | 22 + content/flux/v0.x/stdlib/sql/from.md | 81 ++ content/flux/v0.x/stdlib/sql/to.md | 81 ++ content/flux/v0.x/stdlib/strings/_index.md | 22 + content/flux/v0.x/stdlib/strings/compare.md | 57 ++ .../flux/v0.x/stdlib/strings/containsany.md | 52 ++ .../flux/v0.x/stdlib/strings/containsstr.md | 50 + content/flux/v0.x/stdlib/strings/countstr.md | 63 ++ content/flux/v0.x/stdlib/strings/equalfold.md | 54 ++ content/flux/v0.x/stdlib/strings/hasprefix.md | 44 + content/flux/v0.x/stdlib/strings/hassuffix.md | 44 + .../flux/v0.x/stdlib/strings/index-func.md | 52 ++ content/flux/v0.x/stdlib/strings/indexany.md | 52 ++ content/flux/v0.x/stdlib/strings/isdigit.md | 41 + content/flux/v0.x/stdlib/strings/isletter.md | 41 + content/flux/v0.x/stdlib/strings/islower.md | 41 + content/flux/v0.x/stdlib/strings/isupper.md | 41 + content/flux/v0.x/stdlib/strings/joinstr.md | 49 + content/flux/v0.x/stdlib/strings/lastindex.md | 52 ++ .../flux/v0.x/stdlib/strings/lastindexany.md | 51 + content/flux/v0.x/stdlib/strings/repeat.md | 51 + content/flux/v0.x/stdlib/strings/replace.md | 62 ++ .../flux/v0.x/stdlib/strings/replaceall.md | 57 ++ content/flux/v0.x/stdlib/strings/split.md | 48 + .../flux/v0.x/stdlib/strings/splitafter.md | 48 + .../flux/v0.x/stdlib/strings/splitaftern.md | 53 ++ content/flux/v0.x/stdlib/strings/splitn.md | 53 ++ content/flux/v0.x/stdlib/strings/strlen.md | 55 ++ content/flux/v0.x/stdlib/strings/substring.md | 57 ++ content/flux/v0.x/stdlib/strings/title.md | 40 + content/flux/v0.x/stdlib/strings/tolower.md | 43 + content/flux/v0.x/stdlib/strings/totitle.md | 54 ++ content/flux/v0.x/stdlib/strings/toupper.md | 53 ++ content/flux/v0.x/stdlib/strings/trim.md | 53 ++ content/flux/v0.x/stdlib/strings/trimleft.md | 52 ++ .../flux/v0.x/stdlib/strings/trimprefix.md | 52 ++ content/flux/v0.x/stdlib/strings/trimright.md | 53 ++ content/flux/v0.x/stdlib/strings/trimspace.md | 41 + .../flux/v0.x/stdlib/strings/trimsuffix.md | 52 ++ content/flux/v0.x/stdlib/system/_index.md | 20 + content/flux/v0.x/stdlib/system/time.md | 49 + content/flux/v0.x/stdlib/testing/_index.md | 23 + .../flux/v0.x/stdlib/testing/assertempty.md | 43 + .../flux/v0.x/stdlib/testing/assertequals.md | 75 ++ content/flux/v0.x/stdlib/testing/diff.md | 68 ++ data/default_versions.toml | 4 +- data/versions.toml | 2 +- 319 files changed, 20799 insertions(+), 3 deletions(-) create mode 100644 content/flux/v0.x/_index.md create mode 100644 content/flux/v0.x/about_the_project/_index.md create mode 100644 content/flux/v0.x/about_the_project/cla.md create mode 100644 content/flux/v0.x/about_the_project/license.md create mode 100644 content/flux/v0.x/about_the_project/releasenotes-changelog.md create mode 100644 content/flux/v0.x/guides/_index.md create mode 100644 content/flux/v0.x/guides/conditional-logic.md create mode 100644 content/flux/v0.x/guides/executing-queries.md create mode 100644 content/flux/v0.x/guides/flux-in-dashboards.md create mode 100644 content/flux/v0.x/guides/grouping-data.md create mode 100644 content/flux/v0.x/guides/histograms.md create mode 100644 content/flux/v0.x/guides/join.md create mode 100644 content/flux/v0.x/guides/manipulate-timestamps.md create mode 100644 content/flux/v0.x/guides/mathematic-operations.md create mode 100644 content/flux/v0.x/guides/regular-expressions.md create mode 100644 content/flux/v0.x/guides/sort-limit.md create mode 100644 content/flux/v0.x/guides/sql.md create mode 100644 content/flux/v0.x/guides/windowing-aggregating.md create mode 100644 content/flux/v0.x/introduction/_index.md create mode 100644 content/flux/v0.x/introduction/flux-vs-influxql.md create mode 100644 content/flux/v0.x/introduction/getting-started/_index.md create mode 100644 content/flux/v0.x/introduction/getting-started/query-influxdb.md create mode 100644 content/flux/v0.x/introduction/getting-started/syntax-basics.md create mode 100644 content/flux/v0.x/introduction/getting-started/transform-data.md create mode 100644 content/flux/v0.x/introduction/installation.md create mode 100644 content/flux/v0.x/language/_index.md create mode 100644 content/flux/v0.x/language/assignment-scope.md create mode 100644 content/flux/v0.x/language/blocks.md create mode 100644 content/flux/v0.x/language/data-model.md create mode 100644 content/flux/v0.x/language/expressions.md create mode 100644 content/flux/v0.x/language/lexical-elements.md create mode 100644 content/flux/v0.x/language/notation.md create mode 100644 content/flux/v0.x/language/operators.md create mode 100644 content/flux/v0.x/language/options.md create mode 100644 content/flux/v0.x/language/packages.md create mode 100644 content/flux/v0.x/language/representation.md create mode 100644 content/flux/v0.x/language/side-effects.md create mode 100644 content/flux/v0.x/language/statements.md create mode 100644 content/flux/v0.x/language/string-interpolation.md create mode 100644 content/flux/v0.x/language/system-built-ins.md create mode 100644 content/flux/v0.x/language/types.md create mode 100644 content/flux/v0.x/language/variables.md create mode 100644 content/flux/v0.x/stdlib/_index.md create mode 100644 content/flux/v0.x/stdlib/built-in/_index.md create mode 100644 content/flux/v0.x/stdlib/built-in/inputs/_index.md create mode 100644 content/flux/v0.x/stdlib/built-in/inputs/buckets.md create mode 100644 content/flux/v0.x/stdlib/built-in/inputs/from.md create mode 100644 content/flux/v0.x/stdlib/built-in/misc/_index.md create mode 100644 content/flux/v0.x/stdlib/built-in/misc/intervals.md create mode 100644 content/flux/v0.x/stdlib/built-in/misc/linearbins.md create mode 100644 content/flux/v0.x/stdlib/built-in/misc/logarithmicbins.md create mode 100644 content/flux/v0.x/stdlib/built-in/misc/now.md create mode 100644 content/flux/v0.x/stdlib/built-in/misc/sleep.md create mode 100644 content/flux/v0.x/stdlib/built-in/outputs/_index.md create mode 100644 content/flux/v0.x/stdlib/built-in/outputs/to.md create mode 100644 content/flux/v0.x/stdlib/built-in/outputs/yield.md create mode 100644 content/flux/v0.x/stdlib/built-in/tests/_index.md create mode 100644 content/flux/v0.x/stdlib/built-in/tests/contains.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/_index.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/aggregates/_index.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/aggregates/aggregatewindow.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/aggregates/chandemomentumoscillator.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/aggregates/count.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/aggregates/cov.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/aggregates/covariance.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/aggregates/derivative.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/aggregates/difference.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/aggregates/doubleema.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/aggregates/exponentialmovingaverage.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/aggregates/histogramquantile.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/aggregates/holtwinters.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/aggregates/increase.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/aggregates/integral.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/aggregates/kaufmansama.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/aggregates/kaufmanser.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/aggregates/mean.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/aggregates/median.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/aggregates/mode.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/aggregates/movingaverage.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/aggregates/pearsonr.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/aggregates/quantile.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/aggregates/reduce.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/aggregates/relativestrengthindex.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/aggregates/skew.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/aggregates/spread.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/aggregates/stddev.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/aggregates/sum.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/aggregates/timedmovingaverage.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/aggregates/tripleema.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/aggregates/tripleexponentialderivative.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/columns.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/cumulativesum.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/drop.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/duplicate.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/elapsed.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/fill.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/filter.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/group.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/histogram.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/hourselection.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/influxfieldsascols.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/join.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/keep.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/keys.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/keyvalues.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/limit.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/map.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/pivot.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/range.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/rename.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/selectors/_index.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/selectors/bottom.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/selectors/distinct.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/selectors/first.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/selectors/highestaverage.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/selectors/highestcurrent.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/selectors/highestmax.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/selectors/last.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/selectors/lowestaverage.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/selectors/lowestcurrent.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/selectors/lowestmin.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/selectors/max.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/selectors/min.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/selectors/sample.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/selectors/top.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/selectors/unique.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/set.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/sort.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/statecount.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/stateduration.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/stream-table/_index.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/stream-table/getcolumn.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/stream-table/getrecord.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/stream-table/tablefind.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/tail.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/timeshift.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/truncatetimecolumn.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/type-conversions/_index.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/type-conversions/bool.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/type-conversions/bytes.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/type-conversions/duration.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/type-conversions/float.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/type-conversions/int.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/type-conversions/string.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/type-conversions/time.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/type-conversions/tobool.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/type-conversions/toduration.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/type-conversions/tofloat.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/type-conversions/toint.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/type-conversions/tostring.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/type-conversions/totime.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/type-conversions/touint.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/type-conversions/uint.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/union.md create mode 100644 content/flux/v0.x/stdlib/built-in/transformations/window.md create mode 100644 content/flux/v0.x/stdlib/csv/_index.md create mode 100644 content/flux/v0.x/stdlib/csv/from.md create mode 100644 content/flux/v0.x/stdlib/custom-functions/_index.md create mode 100644 content/flux/v0.x/stdlib/custom-functions/custom-aggregate.md create mode 100644 content/flux/v0.x/stdlib/date/_index.md create mode 100644 content/flux/v0.x/stdlib/date/hour.md create mode 100644 content/flux/v0.x/stdlib/date/microsecond.md create mode 100644 content/flux/v0.x/stdlib/date/millisecond.md create mode 100644 content/flux/v0.x/stdlib/date/minute.md create mode 100644 content/flux/v0.x/stdlib/date/month.md create mode 100644 content/flux/v0.x/stdlib/date/monthday.md create mode 100644 content/flux/v0.x/stdlib/date/nanosecond.md create mode 100644 content/flux/v0.x/stdlib/date/quarter.md create mode 100644 content/flux/v0.x/stdlib/date/second.md create mode 100644 content/flux/v0.x/stdlib/date/truncate.md create mode 100644 content/flux/v0.x/stdlib/date/week.md create mode 100644 content/flux/v0.x/stdlib/date/weekday.md create mode 100644 content/flux/v0.x/stdlib/date/year.md create mode 100644 content/flux/v0.x/stdlib/date/yearday.md create mode 100644 content/flux/v0.x/stdlib/experimental/_index.md create mode 100644 content/flux/v0.x/stdlib/experimental/addduration.md create mode 100644 content/flux/v0.x/stdlib/experimental/bigtable/_index.md create mode 100644 content/flux/v0.x/stdlib/experimental/bigtable/from.md create mode 100644 content/flux/v0.x/stdlib/experimental/group.md create mode 100644 content/flux/v0.x/stdlib/experimental/mqtt/_index.md create mode 100644 content/flux/v0.x/stdlib/experimental/mqtt/to.md create mode 100644 content/flux/v0.x/stdlib/experimental/objectkeys.md create mode 100644 content/flux/v0.x/stdlib/experimental/prometheus/_index.md create mode 100644 content/flux/v0.x/stdlib/experimental/prometheus/scrape.md create mode 100644 content/flux/v0.x/stdlib/experimental/set.md create mode 100644 content/flux/v0.x/stdlib/experimental/subduration.md create mode 100644 content/flux/v0.x/stdlib/experimental/to.md create mode 100644 content/flux/v0.x/stdlib/influxdb-v1/_index.md create mode 100644 content/flux/v0.x/stdlib/influxdb-v1/fieldsascols.md create mode 100644 content/flux/v0.x/stdlib/influxdb-v1/measurements.md create mode 100644 content/flux/v0.x/stdlib/influxdb-v1/measurementtagkeys.md create mode 100644 content/flux/v0.x/stdlib/influxdb-v1/measurementtagvalues.md create mode 100644 content/flux/v0.x/stdlib/influxdb-v1/tagkeys.md create mode 100644 content/flux/v0.x/stdlib/influxdb-v1/tagvalues.md create mode 100644 content/flux/v0.x/stdlib/json/encode.md create mode 100644 content/flux/v0.x/stdlib/json/index.md create mode 100644 content/flux/v0.x/stdlib/math/_index.md create mode 100644 content/flux/v0.x/stdlib/math/abs.md create mode 100644 content/flux/v0.x/stdlib/math/acos.md create mode 100644 content/flux/v0.x/stdlib/math/acosh.md create mode 100644 content/flux/v0.x/stdlib/math/asin.md create mode 100644 content/flux/v0.x/stdlib/math/asinh.md create mode 100644 content/flux/v0.x/stdlib/math/atan.md create mode 100644 content/flux/v0.x/stdlib/math/atan2.md create mode 100644 content/flux/v0.x/stdlib/math/atanh.md create mode 100644 content/flux/v0.x/stdlib/math/cbrt.md create mode 100644 content/flux/v0.x/stdlib/math/ceil.md create mode 100644 content/flux/v0.x/stdlib/math/copysign.md create mode 100644 content/flux/v0.x/stdlib/math/cos.md create mode 100644 content/flux/v0.x/stdlib/math/cosh.md create mode 100644 content/flux/v0.x/stdlib/math/dim.md create mode 100644 content/flux/v0.x/stdlib/math/erf.md create mode 100644 content/flux/v0.x/stdlib/math/erfc.md create mode 100644 content/flux/v0.x/stdlib/math/erfcinv.md create mode 100644 content/flux/v0.x/stdlib/math/erfinv.md create mode 100644 content/flux/v0.x/stdlib/math/exp.md create mode 100644 content/flux/v0.x/stdlib/math/exp2.md create mode 100644 content/flux/v0.x/stdlib/math/expm1.md create mode 100644 content/flux/v0.x/stdlib/math/float64bits.md create mode 100644 content/flux/v0.x/stdlib/math/floor.md create mode 100644 content/flux/v0.x/stdlib/math/frexp.md create mode 100644 content/flux/v0.x/stdlib/math/gamma.md create mode 100644 content/flux/v0.x/stdlib/math/hypot.md create mode 100644 content/flux/v0.x/stdlib/math/ilogb.md create mode 100644 content/flux/v0.x/stdlib/math/isinf.md create mode 100644 content/flux/v0.x/stdlib/math/isnan.md create mode 100644 content/flux/v0.x/stdlib/math/j0.md create mode 100644 content/flux/v0.x/stdlib/math/j1.md create mode 100644 content/flux/v0.x/stdlib/math/jn.md create mode 100644 content/flux/v0.x/stdlib/math/ldexp.md create mode 100644 content/flux/v0.x/stdlib/math/lgamma.md create mode 100644 content/flux/v0.x/stdlib/math/log.md create mode 100644 content/flux/v0.x/stdlib/math/log10.md create mode 100644 content/flux/v0.x/stdlib/math/log1p.md create mode 100644 content/flux/v0.x/stdlib/math/log2.md create mode 100644 content/flux/v0.x/stdlib/math/logb.md create mode 100644 content/flux/v0.x/stdlib/math/minf.md create mode 100644 content/flux/v0.x/stdlib/math/mmax.md create mode 100644 content/flux/v0.x/stdlib/math/mmin.md create mode 100644 content/flux/v0.x/stdlib/math/mod.md create mode 100644 content/flux/v0.x/stdlib/math/modf.md create mode 100644 content/flux/v0.x/stdlib/math/nan.md create mode 100644 content/flux/v0.x/stdlib/math/nextafter.md create mode 100644 content/flux/v0.x/stdlib/math/pow.md create mode 100644 content/flux/v0.x/stdlib/math/pow10.md create mode 100644 content/flux/v0.x/stdlib/math/remainder.md create mode 100644 content/flux/v0.x/stdlib/math/round.md create mode 100644 content/flux/v0.x/stdlib/math/roundtoeven.md create mode 100644 content/flux/v0.x/stdlib/math/signbit.md create mode 100644 content/flux/v0.x/stdlib/math/sin.md create mode 100644 content/flux/v0.x/stdlib/math/sincos.md create mode 100644 content/flux/v0.x/stdlib/math/sinh.md create mode 100644 content/flux/v0.x/stdlib/math/sqrt.md create mode 100644 content/flux/v0.x/stdlib/math/tan.md create mode 100644 content/flux/v0.x/stdlib/math/tanh.md create mode 100644 content/flux/v0.x/stdlib/math/trunc.md create mode 100644 content/flux/v0.x/stdlib/math/y0.md create mode 100644 content/flux/v0.x/stdlib/math/y1.md create mode 100644 content/flux/v0.x/stdlib/math/yn.md create mode 100644 content/flux/v0.x/stdlib/mqtt/_index.md create mode 100644 content/flux/v0.x/stdlib/mqtt/to.md create mode 100644 content/flux/v0.x/stdlib/regexp/_index.md create mode 100644 content/flux/v0.x/stdlib/regexp/compile.md create mode 100644 content/flux/v0.x/stdlib/regexp/findstring.md create mode 100644 content/flux/v0.x/stdlib/regexp/findstringindex.md create mode 100644 content/flux/v0.x/stdlib/regexp/getstring.md create mode 100644 content/flux/v0.x/stdlib/regexp/matchregexpstring.md create mode 100644 content/flux/v0.x/stdlib/regexp/quotemeta.md create mode 100644 content/flux/v0.x/stdlib/regexp/replaceallstring.md create mode 100644 content/flux/v0.x/stdlib/regexp/splitregexp.md create mode 100644 content/flux/v0.x/stdlib/runtime/_index.md create mode 100644 content/flux/v0.x/stdlib/runtime/version.md create mode 100644 content/flux/v0.x/stdlib/sql/_index.md create mode 100644 content/flux/v0.x/stdlib/sql/from.md create mode 100644 content/flux/v0.x/stdlib/sql/to.md create mode 100644 content/flux/v0.x/stdlib/strings/_index.md create mode 100644 content/flux/v0.x/stdlib/strings/compare.md create mode 100644 content/flux/v0.x/stdlib/strings/containsany.md create mode 100644 content/flux/v0.x/stdlib/strings/containsstr.md create mode 100644 content/flux/v0.x/stdlib/strings/countstr.md create mode 100644 content/flux/v0.x/stdlib/strings/equalfold.md create mode 100644 content/flux/v0.x/stdlib/strings/hasprefix.md create mode 100644 content/flux/v0.x/stdlib/strings/hassuffix.md create mode 100644 content/flux/v0.x/stdlib/strings/index-func.md create mode 100644 content/flux/v0.x/stdlib/strings/indexany.md create mode 100644 content/flux/v0.x/stdlib/strings/isdigit.md create mode 100644 content/flux/v0.x/stdlib/strings/isletter.md create mode 100644 content/flux/v0.x/stdlib/strings/islower.md create mode 100644 content/flux/v0.x/stdlib/strings/isupper.md create mode 100644 content/flux/v0.x/stdlib/strings/joinstr.md create mode 100644 content/flux/v0.x/stdlib/strings/lastindex.md create mode 100644 content/flux/v0.x/stdlib/strings/lastindexany.md create mode 100644 content/flux/v0.x/stdlib/strings/repeat.md create mode 100644 content/flux/v0.x/stdlib/strings/replace.md create mode 100644 content/flux/v0.x/stdlib/strings/replaceall.md create mode 100644 content/flux/v0.x/stdlib/strings/split.md create mode 100644 content/flux/v0.x/stdlib/strings/splitafter.md create mode 100644 content/flux/v0.x/stdlib/strings/splitaftern.md create mode 100644 content/flux/v0.x/stdlib/strings/splitn.md create mode 100644 content/flux/v0.x/stdlib/strings/strlen.md create mode 100644 content/flux/v0.x/stdlib/strings/substring.md create mode 100644 content/flux/v0.x/stdlib/strings/title.md create mode 100644 content/flux/v0.x/stdlib/strings/tolower.md create mode 100644 content/flux/v0.x/stdlib/strings/totitle.md create mode 100644 content/flux/v0.x/stdlib/strings/toupper.md create mode 100644 content/flux/v0.x/stdlib/strings/trim.md create mode 100644 content/flux/v0.x/stdlib/strings/trimleft.md create mode 100644 content/flux/v0.x/stdlib/strings/trimprefix.md create mode 100644 content/flux/v0.x/stdlib/strings/trimright.md create mode 100644 content/flux/v0.x/stdlib/strings/trimspace.md create mode 100644 content/flux/v0.x/stdlib/strings/trimsuffix.md create mode 100644 content/flux/v0.x/stdlib/system/_index.md create mode 100644 content/flux/v0.x/stdlib/system/time.md create mode 100644 content/flux/v0.x/stdlib/testing/_index.md create mode 100644 content/flux/v0.x/stdlib/testing/assertempty.md create mode 100644 content/flux/v0.x/stdlib/testing/assertequals.md create mode 100644 content/flux/v0.x/stdlib/testing/diff.md diff --git a/content/flux/v0.x/_index.md b/content/flux/v0.x/_index.md new file mode 100644 index 0000000000..6412a1f90d --- /dev/null +++ b/content/flux/v0.x/_index.md @@ -0,0 +1,28 @@ +--- +title: Flux v0.x (technical preview) documentation +description: +menu: + flux: + name: v0.x + identifier: flux_0_x + weight: 95 +--- + +## [Introduction to Flux](/flux/v0.x/introduction) +A quick introduction to Flux and its design principles. + +## [Enable Flux](/flux/v0.x/introduction/installation) +Flux is packaged with InfluxDB v1.7+ and does not require any additional installation, +however it does need to be enabled. + +## [Get started with Flux](/flux/v0.x/introduction/getting-started) +The best way to learn Flux is to walk through writing a flux script. This guide does just that. + +## [Flux guides](/flux/v0.x/guides) +Helpful guides that walk through both common and complex tasks and use cases for Flux. + +## [Flux standard library](/flux/v0.x/stdlib) +The Flux standard library includes packages and functions that retrieve, transform, process, and output data. + +## [Flux language reference](/flux/v0.x/language) +The specification for the Flux language and query execution. diff --git a/content/flux/v0.x/about_the_project/_index.md b/content/flux/v0.x/about_the_project/_index.md new file mode 100644 index 0000000000..b8dabcd504 --- /dev/null +++ b/content/flux/v0.x/about_the_project/_index.md @@ -0,0 +1,26 @@ +--- +title: About the project + +menu: + flux_0_x: + weight: 1 +--- + +## [Release notes](/flux/v0.x/about_the_project/releasenotes-changelog) + + + +## [CLA](https://influxdata.com/community/cla/) + +## [Licenses](https://github.com/influxdata/influxdb/blob/master/LICENSE) + +## Third Party Software +InfluxData products contain third party software, which means the copyrighted, patented, or otherwise legally protected +software of third parties that is incorporated in InfluxData products. + +Third party suppliers make no representation nor warranty with respect to such third party software or any portion thereof. +Third party suppliers assume no liability for any claim that might arise with respect to such third party software, nor for a +customer’s use of or inability to use the third party software. + +The [list of third party software components, including references to associated licenses and other materials](https://github.com/influxdata/influxdb/blob/master/DEPENDENCIES.md), +is maintained on a version by version basis. diff --git a/content/flux/v0.x/about_the_project/cla.md b/content/flux/v0.x/about_the_project/cla.md new file mode 100644 index 0000000000..7a75a0f341 --- /dev/null +++ b/content/flux/v0.x/about_the_project/cla.md @@ -0,0 +1,10 @@ +--- +title: CLA + +menu: + flux_0_x: + name: CLA + weight: 30 + parent: About the project + url: https://influxdb.com/community/cla.html +--- diff --git a/content/flux/v0.x/about_the_project/license.md b/content/flux/v0.x/about_the_project/license.md new file mode 100644 index 0000000000..6a0facc384 --- /dev/null +++ b/content/flux/v0.x/about_the_project/license.md @@ -0,0 +1,10 @@ +--- +title: License + +menu: + flux_0_x: + name: License + weight: 40 + parent: About the project + url: https://github.com/influxdata/influxdb/blob/master/LICENSE +--- diff --git a/content/flux/v0.x/about_the_project/releasenotes-changelog.md b/content/flux/v0.x/about_the_project/releasenotes-changelog.md new file mode 100644 index 0000000000..2a30a51c7d --- /dev/null +++ b/content/flux/v0.x/about_the_project/releasenotes-changelog.md @@ -0,0 +1,880 @@ +--- +title: Release Notes/Changelog +menu: + flux_0_x: + parent: About the project + weight: 1 +--- + +## v0.x.2 [2019-10-24] + +### Bug fixes +- Make `keep()` and `drop()` throw an error if merging tables with different schemas. + +## v0.x.1 [2019-10-24] + +### Bug fixes +- Add annotated errors to the execute package where it affects normal usage. +- Reorder variables in the allocator for atomic operations. + +## v0.x.0 [2019-10-11] + +### Features +- Add `experimental/prometheus` package. +- Add a memory manager to the memory allocator. +- Add an internal function for generating data. +- Switch to using discarding mode for transformations. +- Group key join on `_time`. + +### Bug fixes +- Require `data` parameter in `monitor.check()`. +- Return the EOF error when reading metadata. +- Re-add missing import. +- Fix broken links in SPEC. +- Return error from cache. +- Update the `universe` package to use flux errors throughout. +- Parse escape characters in string interpolation expressions. +- Improve CSV error message for serialized Flux error. +- Have the interpreter return annotated Flux errors. + +## v0.49.0 [2019-09-24] + +### Features +- Optimize `filter()` to pass through tables when possible. +- Additional arrow builder utilities. +- Add a `benchmark()` function to the testing package. +- Add an arrow backed version of the table buffer. + +### Bug fixes +- Fix `sql.from()` connection leak. +- Fix some of the memory leaks within the standard library. +- Fix `mqtt.to()` topic parameter. + +## v0.48.0 [2019-09-20] + +### Breaking changes +- Convert the Flux memory allocator into an arrow allocator. + +### Features +- New dependency injection framework. +- Add planner options to Flux language. +- Make Flux `internal/promql/quantile` behavior match PromQL `quantile` aggregate. + +### Bug fixes +- Passing context to WalkIR. +- Make `join()` reject input tables lacking `on` columns. + +## v0.47.1 [2019-09-18] + +### Bug fixes +- Pass dependencies to WalkIR + +### Bug fixes +- Introduce ParenExpression. +- Make fmt runs cargo fmt on Rust directories. +- Update `Hex.Dump` to `hex.EncodeToString`. +- Integrate the Promql transpiler into Flux. + +## v0.46.2 [2019-09-12] + +### Bug fixes +- Make `to` use URL validator. +- Add filesystem to default test dependencies. + +## v0.46.1 [2019-09-11] + +### Bug fixes +- Add a filesystem service. +- Do a pointer comparison for table objects instead of a deep compare. + +## v0.46.0 [2019-09-10] + +### Features +- Replace EnvironmentSecretService with EmptySecret…. +- Source location for rust parser. + +### Bug fixes +- Push error for bad string expression. +- Remove `token` parameter from `pagerduty.endpoint`. + +## v0.45.2 [2019-09-10] + +### Bug fixes +- Push the tag before running goreleaser. +- Additional opentracing spans for debugging query flow. + +## v0.45.1 [2019-09-09] + +### Bug fixes +- Ensure `http.post` respects the context. + +## v0.45.0 [2019-09-06] + +### Features +- Added Google Bigtable `from()`. + +### Bug fixes +- Add `pagerduty.severityFromLevel()` helper function. +- Sleep function now gets canceled when the context is canceled. +- Categorize the undefined identifier as an invalid status code. +- Panic from `CheckKind` in `memberEvaluator`. + +## v0.44.0 [2019-09-05] + +### Features +- Add `http.basicAuth` function. +- Add measurement filters to `monitor.from` and `monitor.logs`. + +### Bug fixes +- changed the default HTTP client to be more robust. + +## v0.43.0 [2019-09-04] + +### Features +- PagerDuty endpoint for alerts and notifications. + +## v0.42.0 [2019-08-30] + +### Features +- Add `stateChanges` function. + +### Bug fixes +- Race condition in looking up types in `map`. +- Support bool equality expressions. +- Calculating a type variable's free type variables. +- Do not generate fresh type variables for member expressions. +- Array instantiation. + +## v0.41.0 [2019-08-26] + +### Features +- Add ability to validate URLs before making `http.post` requests. +- Evaluate string interpolation. +- Implement the `secrets.get` function. +- Added secret service interface. +- Add secrets package that will construct a secret object. +- Added a SecretService interface and a new dependencies package and a basic test of functionality. +- Add Slack endpoint. + +### Bug fixes +- Make `reset()` check for non-nil data before calling `Release()`. +- Add test case for `notify` function. +- Add missing math import to test case. +- Make packages aware of options. +- Resolved `holtWinters` panic. +- Use non-pointer receiver for `interpreter.function`. + +## v0.40.2 [2019-08-22] + +### Bug fixes +- Resolved `holtWinters()` panic. + +## v0.40.1 [2019-08-21] + +### Bug fixes +- Use non-pointer receiver for `interpreter.function`. + +## v0.40.0 [2019-08-20] + +### Breaking changes +- Update compiler package to use true scope. +- Add `http` and `json` to prelude. + +### Features +- Add `alerts.check()` function. +- Add `alerts.notify` function. +- Add `kaufmansER()` and `kaufmansAMA()` functions. +- Add `experimental.to()` function. +- Add `experimental.set()` function to update entire object. +- Add `experimental.objectKeys()` function. +- Add `tripleExponentialDerivative()` function. +- Add `json.encode()` function. +- Add `mqtt.to()` function. +- Add Bytes type. +- Update compiler package to use true scope. +- Add http endpoint. +- Add post method implementation. +- String interpolation. + +### Bug fixes +- Avoid wrapping table errors in the CSV encoder. +- Remove irrelevant TODOs. +- `mode()` now properly considers nulls when calculating the mode. +- Add `http` and `json` to prelude. +- Rename all Flux test files to use `_test.flux`. + +## v0.39.0 [2019-08-13] + +{{% warn %}} +In Flux 0.39.0, `holtWinters()` can cause the query engine to panic. +**Flux 0.40.2 resolves this panic.** +{{% /warn %}} + +### Breaking changes +- Implement the scanning components for string expressions. + +### Features +- Add `tail()` function. +- Add framework for `http.post()` function. +- Implement `deadman()` function. +- Time arithmetic functions. +- Alerts package. +- Add an experimental `group()` function with mode `extend`. +- Implement the scanning components for string expressions. +- Add `chandeMomentumOscillator()` function. +- Add `hourSelection()` function. +- Add `date.year()` function + +### Bug fixes +- Update object to use Invalid type instead of nil monotypes. +- Make it so the alerts package can be defined in pure Flux. +- Close connection after `sql.to()`. + +## v0.38.0 [2019-08-06] + +### Features +- Update selectors to operate on time columns. +- Add `relativeStrengthIndex()` transformation. +- Add double and triple exponential average transformations (`doubleEMA()` and `tripleEMA()`). +- Add `holtWinters()` transformation. +- Add `keepFirst` parameter to `difference()`. +- DatePart equivalent functions. +- Add runtime package. +- Add and subtract duration literal arithmetic. +- Allow `keep()` to run regardless of nonexistent columns. + If all columns given are nonexistent, `keep()` returns an empty table. +- Scanner returns positioning. + +### Bug fixes +- Function resolver now keeps track of local assignments that may be evaluated at runtime. +- Fixed InfluxDB test errors. +- Add range to tests to pass in InfluxDB. +- Allow converting a duration to a duration. +- Catch integer overflow and underflow for literals. + +## v0.37.2 [2019-07-24] + +- _General cleanup of internal code._ + +## v0.37.1 [2019-07-23] + +### Bug fixes +- Fixed InfluxDB test errors. +- Add range to tests to pass in InfluxDB. + +## v0.37.0 [2019-07-22] + +### Features +- Add PromQL to Flux transpiler and Flux helper functions. +- Add mutable arrow array builders. +- Created date package. +- Return query and result errors in the multi result encoder. +- Add `exponentialMovingAverage()`. +- Add full draft of Rust parser. +- Implement more production rules. +- AST marshalling. +- Parse statements. +- Parse integer and float literals. +- Add initial Rust implementation of parser. + +## v0.36.2 [2019-07-12] + +_A technical preview of Flux packaged with InfluxDB v1.7.8._ + +### Bug fixes +- Add helper methods for comparing entire result sets. +- Map will not panic when a record is `null`. + +## v0.36.1 [2019-07-10] + +### Bug fixes +- Add `range` call to some end-to-end tests. +- Fix implementation of `strings.replaceAll`. + +## v0.36.0 [2019-07-09] + +### Features +- Updated `movingAverage()` and added `timedMovingAverage`. +- `elapsed()` function. +- `mode()` function. +- `sleep()` function. +- Modify error usage in places to use the new enriched errors. +- Enriched error interface. +- End-to-end tests that show how to mimic pandas functionality. +- End-to-end tests for string functions. + +### Bug fixes +- Fix `difference()` so that it returns an error instead of panicking when given a `_time` column. +- Added end-to-end tests for type conversion functions. +- Make `map()` error if return type is not an object. +- Fixed miscounted allocations in the `ColListTableBuilder`. +- Support formatting `with`. + +### Breaking changes +- Updated `movingAverage()` to `timedMovingAverage` and added new + `movingAverage()` implementation. + + +## v0.35.1 [2019-07-03] + +### Bug fixes +- Re-add `mergeKey` parameter to `map()` in deprecated state. + +## v0.35.0 [2019-07-02] + +### Breaking changes +- Remove `mergeKey` parameter from the `map()` function. + +### Features +- Add `sql.to()` function. +- Add `movingAverage()` function. +- Add `strlen()` and `substring()` functions to the `strings` package. + +### Bug fixes +- Remove `mergeKey` parameter from the `map()` function. +- Parse float types with PostgreSQL. + +## v0.34.2 [2019-06-27] + +### Bug fixes +- Parse float types with PostgreSQL. + +## v0.34.1 [2019-06-26] + +### Features +- Add custom PostgreSQL type support. +- Added MySQL type support. +- Nulls work in table and row functions. + +### Bug fixes +- Fixed boolean literal type conversion problem and added tests. +- Diff should track memory allocations when it copies the table. +- Copy table will report if it is empty correctly. + +## v0.33.2 [2019-06-25] + +### Bug fixes +- Use `strings.Replace` instead of `strings.ReplaceAll` for compatibility. + +## v0.33.1 [2019-06-20] + +### Bug fixes +- Copy table will report if it is empty correctly. + +## v0.33.0 [2019-06-18] + +### Breaking changes +- Implement nulls in the compiler runtime. + +### Features +- Add Go `regexp` functions to Flux. +- Add the exists operator to the compiler runtime. +- Implement nulls in the compiler runtime. +- Add nullable kind. +- Support "with" syntax for objects in row functions. +- Port several string functions from go `strings` library to Flux. +- Add exists unary operator. + +### Bug fixes +- Add range to map_extension_with.flux. +- Row function resets records map with each call to prepare. +- Fix `joinStr`, including adding an EndToEnd Test. +- Fix `string_trimLeft` and `string_trimRight` so that they pass in InfluxDB. +- Add length check for empty tables in fill. + +## v0.32.1 [2019-06-10] + +### Bug fixes +- Identify memory limit exceeded errors in dispatcher. + +## v0.32.0 [2019-06-05] + +### Breaking changes +- Remove the control package. + +### Bug fixes +- Changelog generator now handles merge commits better. +- Return count of errors when checking AST. + +## v0.31.1 [2019-05-29] + +### Bug fixes +- Do not call done after calling the function. + +## v0.31.0 [2019-05-28] + +### Breaking changes +- Copy the table when a table is used multiple times. + +### Features +- Support for dynamic queries. + +### Bug fixes +- Copy the table when a table is used multiple times. + +## v0.30.0 [2019-05-16] + +### Features +- Support for dynamic queries. + +## v0.29.0 [2019-05-15] + +### Breaking changes +- Make `on` a required parameter to `join()`. + +### Features +- Add stream table index functions ( + [`tableFind()`](/flux/v0.x/stdlib/built-in/transformations/stream-table/tablefind/), + [`getRecord()`](/flux/v0.x/stdlib/built-in/transformations/stream-table/getrecord/), + [`getColumn()`](/flux/v0.x/stdlib/built-in/transformations/stream-table/getcolumn/) + ). +- Construct invalid binary expressions when given multiple expressions. + +### Bug fixes +- Properly use RefCount to reference count tables. +- Remove the race condition within the `(*Query).Done` method. +- Fix table functions test. +- Add `column` parameter to `median()`. +- Modify `median` to work with `aggregateWindow()`. +- `pivot()` now uses the correct column type when filling nulls. +- Add error handling for property list. +- Return the error from the context in the executor. + +## v0.28.3 [2019-05-01] + +### Bug fixes +- Fix request results labels to count runtime errors. +- An error when joining could result in two calls to finish. + +## v0.28.2 [2019-04-26] + +### Bug fixes +- Preallocate data when constructing a new string array. + +## v0.28.1 [2019-04-25] + +### Bug fixes +- Make executor respect memory limit from caller. + +## v0.28.0 [2019-04-24] + +### Features +- Allow choosing sample/population mode in `stddev()`. + +### Bug fixes +- Fix `reduce()` so it resets the reduce value to the neutral element value for each new group key + and reports an error when two reducers write to the same destination group key. + +## v0.27.0 [2019-04-22] + +### Features +- Add `trimSuffix` and `trimPrefix` functions to the strings package. +- Add support for conditional expressions to compiler. +- Add conditional expression handling to interpreter. + +### Bug fixes +- Enforce memory and concurrency limits in controller. +- Format conditional expression. +- `tagKeys` should include a call to `distinct`. + +## v0.26.0 [2019-04-18] + +### Breaking changes +- Aggregates now accept only a `column` parameter. `columns` not used. + +### Features +- Add handling for conditional expressions to type inference. +- Add `if`/`then`/`else` syntax to Flux parser. +- Added a WalkIR function that external programs can use to traverse an opSpec structure. +- Add planner options to compile options. +- Add example on how to use Flux as a library. +- `duplicate()` will now overwrite a column if the as label already exists. + +#### Bug fixes +- Format right child with good parentheses. +- Make staticcheck pass. +- Rename `json` tag so go vet passes. +- The controller pump could reference a nil pointer. +- Create a DependenciesAwareProgram so controller can assign dependencies. +- Make `Program.Start` start execution synchronously. +- Read the metadata channel in a separate goroutine. +- Remove dead code in controller so `staticcheck` passes. +- Allow Flux unit tests to pass. +- Require a Github token to perform a release. +- Change example name to make go vet pass. +- Make `csv.from` return decode error. + +## v0.25.0 [2019-04-08] + +## Breaking changes +- Fix logical operators (`and`, `or`) precedence. + +## Bug fixes +- Omit space between unary operator and operand. +- Format AST preserving operator precedence. + + +{{% note %}} +### Breaking changes since last Flux update +Flux v0.24 is packaged with the InfluxDB v1.7.6. +-B v1.7.3-1.7.5 included Flux v0.12. +The list below is a summary of breaking changes in Flux between those versions. + +- Rename `percentile()` function to `quantile()`. +- Remove unused statistics from the struct. +- Support attaching arbitrary query metadata from the executor. +- Make `window()` parameters match SPEC. +- Split FromProcedureSpec into logical and physical specs. +- Implement and require builtin statements. +- Fix keys to output group key. +- Organizes builtin code into Flux packages. +- Change flux command to be a REPL. +- Add File and Package nodes to the AST. +{{% /note %}} + +## v0.24.0 [2019-04-01] + +_A technical preview of Flux packaged with InfluxDB v1.7.6 and 1.7.7._ + +### Breaking changes +- Rename `percentile()` function to `quantile()`. + +### Bug fixes +- Handle when a non-call expression is parsed as the pipe destination. +- Add error message to Compile methods for empty Spec. + +## v0.23.0 [2019-03-26] + +### Breaking changes +- Remove unused statistics from the struct. + +### Features +- Define comparison operators between time types. +- Parse signed duration. +- Added `reduce()` function and supporting go API for implementation. +- Fix for recognizing locally scoped objects and arrays in a row function. + +### Bug fixes +- Columns in percentile signature and more strict param checking. +- Report the error received when parsing a bad regex literal. +- Remove unused statistics from the struct. + +## v0.22.0 [2019-03-18] + +### Features +- Added a math package and ported all 64 bit go math library functions. + +### Bug fixes +- Make read-like access patterns for objects thread-safe. + +## v0.21.4 [2019-03-06] + +### Bug fixes +- Test union.flux correctly uses sort. +- Pivot orders rowKey and columnKey by the input parameters, rather than the table column order. +- Deterministic sorting of input tables in join. +- Group key comparison works regardless of column ordering. + + +## v0.21.3 [2019-03-05] + +### Bug fixes +- Fix test to pass in InfluxDB. +- Write table and result name in each row of CSV output. +- Make time() function accept any format that parser accepts. +- Return errors when evaluating functions. +- Prevent a deadlock in the array expression parser. + + +## v0.21.2 [2019-03-01] + +### Bug fixes +- Add AST compiler to mappings. + + +## v0.21.1 [2019-03-01] + +### Bug fixes +- Make ASTCompiler marshalable. +- Fix a controller test to be less flaky. +- `from()` must send deep table copies to its downstream transformations. + + +## v0.21.0 [2019-02-25] + +### Breaking changes +- Support attaching arbitrary query metadata from the executor. + +### Features +- Support attaching arbitrary query metadata from the executor. +- Socket source. + +### Bug fixes +- Add locks to make diff threadsafe. + + +## v0.20.0 [2019-02-20] + +### Features +- AST match. +- Generate ASTs from Flux test files for external consumption. +- Add compile subcommand that compiles Flux to spec. + +### Bug fixes +- Change loadStorage and loadMem to be options so that they are modifiable. +- Generate skipped tests; skip in test driver. + + +## v0.19.0 [2019-02-11] + +### Breaking changes +- Make `window()` parameters match SPEC. +- Split FromProcedureSpec into logical and physical specs. + +### Features +- Add `contains()` function to check for membership in lists. +- `test` keyword. + +### Bug fixes +- Raw query test case. + + +## v0.18.0 [2019-02-07] + +### Features +- Add strings package with functions to trim/change string case. +- Make duration conversion public. +- Add assertEmpty method and use it with testing.test. +- Expose literal parsers used within the parser. +- Add testing.diff function. +- Execute command. + +### Bug fixes +- Refactor the controller to remove data races. +- Member expressions using a string literal use the incorrect end bracket. +- Skip lambda evaluation when referencing nulls. +- Options editor should use ast.Expression. +- Fix decoder bug where a default table ID is given when none is required. +- Add close to SourceIterator. + + +## v0.17.0 [2019-01-22] + +### Features +- Checks for option dependencies. +- Add query success and error metrics. +- Track nested blocks in the parser. +- Update `aggregateWindow()` to include `createEmpty` as parameter to allow for null results. +- Add query function count metrics. + +### Bug fixes +- Multiplicative operators are above additive operators in precedence. +- Fix panic when copying lambda. +- Only print a package's public exports. +- Cannot access imports of imports. +- Check for schema collision when appending columns to a table. +- Process test helper had bad logic to check for errors. +- Handle rune errors correctly when decoding an illegal token. + + +## v0.16.1 [2019-01-17] + +### Bug fixes +- Copy packages for importer copy. + + +##v0.16.0 [2019-01-17] + +### Features +- Adds various v1 meta queries helper functions + +### Bug fixes +- Fixes various UX issues. +- Object polytype. +- Fix edge case panic in `assertEquals`. +- Check for equality in time columns correctly. +- Fix bug where `assertEquals` did not check tables without a match in both streams. +- Clear return for each REPL command. + + +## v0.15.0 [2019-01-16] + +### Features +- Add rule to remove filter true nodes. +- Checks for variable reassignment and option declarations below package block. + +### Bug fixes +- Move a test file into the testing/testdata folder. + + +## v0.14.0 [2019-01-14] + +### Breaking changes +- Implement and require builtin statements. +- Fix keys to output group key. +- Organizes builtin code into Flux packages. +- Change flux command to be a REPL. + +### Features +- Implement and require builtin statements. +- Added a new utility library for generating test data. +- `columns()` function. +- Add fill function to set a default value for null values in a column. +- Organizes built-in code into Flux packages. +- Change flux command to be a REPL. +- Refactored the table builder interfaces to support null value creation. +- Aggregates process empty/all-null tables by creating a null row. +- Show nulls in REPL as empty string. +- Add ability to define built-in packages. +- Treat omitted values with no defaults as nil in CSV. +- Build arrow columns with null values. +- Converting limit to use arrow arrays. +- TableBuilder interface and ColListTableBuilder implementation support creation of nil values. + +### Bug fixes +- Count nulls in the count aggregate. +- Fix keys to output group key. +- Adding test for type mismatch in group. +- Nest extern blocks for each level in scope. +- Memory leak in limit when slicing. +- Prettier formatting for package. +- Change Package.Path to be json omitempty. + + +## v0.13.0 [2019-01-07] + +### Breaking changes +- Add File and Package nodes to the AST. + +### Features +- Embed errors into the ast from the parser. +- Add no-points optimization for `from() |> keys()`. +- Add File and Package nodes to the AST. +- Add a function for checking for errors within the AST. + +### Bug fixes +- Remove unneeded use of memory allocator. +- Allow the memory allocator to be nil for arrow arrays. +- Fix several bugs in copy methods add tests. +- Fix a flaky test in the controller shutdown. + + +## v0.12.0 [2019-01-02] +_A technical preview of Flux packaged with InfluxDB v1.7.3._ + +### Features +- Slice utils. +- Parse string literal object keys. +- Add tests for multi-line and escaped strings. +- Arrow helper method. +- Converting all aggregates to use arrow arrays. + +### Bug fixes +- Embed plan.DefaultCost in input and output functions. +- Side effect statements are now copied between related interpreter scopes. + + +## v0.11.0 [2018-12-18] + +### Features +- Add utility methods for converting a slice into an arrow array buffer. + +### Bug fixes +- Do not panic with unbalanced parenthesis. +- Respect positive timeout for toHTTP. + + +## v0.10.0 [2018-12-17] + +### Breaking changes +- Change "label" to "column" for state tracking functions. + +### Features +- Plan validation. +- Testing framework no longer checks output. +- Integrate arrow arrays into the table builder. +- Support packages and imports. + +### Bug fixes +- Cancel all queries after timeout elapses. +- `makefile` for generating the scanner after clean was incorrect. + + +## v0.9.0 [2018-12-11] + +### Features +- Option Editor. + +### Bug fixes +- Return the source attribute in the location correctly. + + +## v0.8.0 [2018-12-11] + +### Features +- Rule to chain group operations. +- Add package and import support to the semantic graph. +- Add `assertEquals` function to transformations. +- Parse import and package statements +- Walk pattern for AST. +- AST formatting. +- Switch over to the new parser. + +### Bug fixes +- Make controller return planner failures. +- Collision between external and fresh type vars. +- fmt for import and package. +- Add import/package nodes to ast.Walk. +- Improve panic message when the wrong column type is used. +- Check nil results when computing stats. +- Suppress group push down for \_time and \_value. +- Terminal output functions must produce results. +- Fix race in interpreter.doCall. +- Fix ast.Walk for Assignemnt rename. +- Improve error message for missing object properties. +- Add unary logical expression to the parser. +- Variable declarator node needs to duplicate the location information. + + +## v0.7.4 (2018-12-04) + +### Bug Fixes +- Add missing comparison operators. + + +## v0.7.3 (2018-12-04) + +### Bug Fixes +- Fix the ident statement to use expression suffix. + + +## v0.7.1 [2018-12-06] + +_A technical preview of Flux packaged with InfluxDB v1.7.2._ + +### Features +- Add support for string comparison operators. +- Add array indexing. +- Add scanned values & bytes to Statistics. +- Remove unused "verbose" flag. +- Log flux.Spec and plans in log level "debug." +- Implement new Flux parser. + +### Bug Fixes +- Return error in `covariance()` when a column doesn't exist. +- Switch the scanner interface for the parser. +- Regular expression scanning would produce the wrong tokens. +- Add arrow (`=>`) token to the scanner and rename the pipe tokens. +- Regular expression escape sequences in the scanner. +- Don't push `group()` into `from()` when group mode is "except." +- Cancelling query context stops execution. +- Add TableIterator.Statistics(). + +### Breaking changes +- Change the `histogram()` function's `buckets` parameter to `bins`. +- Change `linearBuckets()` and `logarithmicBuckets` to `linearBins()` and `logarithmicBins()`. + + +## v0.7.0 [2018-11-06] + +_A technical preview of Flux packaged with InfluxDB v1.7.0 and v1.7.1._ diff --git a/content/flux/v0.x/guides/_index.md b/content/flux/v0.x/guides/_index.md new file mode 100644 index 0000000000..3aabf679fd --- /dev/null +++ b/content/flux/v0.x/guides/_index.md @@ -0,0 +1,27 @@ +--- +title: Flux guides +description: Helpful guides that walk through both common and complex tasks and use cases for Flux. +menu: + flux_0_x: + name: Guides + weight: 3 +--- + +## [Different ways to execute Flux queries](/flux/v0.x/guides/executing-queries) +A guide that covers the different options for executing Flux queries with InfluxDB and Chronograf v1.7+. + +## [How to window and aggregate data with Flux](/flux/v0.x/guides/windowing-aggregating) +This guide walks through windowing and aggregating data with Flux and demonstrates +how data is shaped in the process. + +## [How to group data with Flux](/flux/v0.x/guides/grouping-data) +This guide walks through grouping data in Flux with examples of how data is shaped in the process. + +## [How to join data with Flux](/flux/v0.x/guides/join) +This guide walks through joining data with Flux, illustrating how joined data is output and how it can be used. + +## [How to sort and limit data with Flux](/flux/v0.x/guides/sort-limit) +This guide walks through sorting and limiting data with Flux. + +## [Regular expressions in Flux](/flux/v0.x/guides/regular-expressions) +This guide walks through using regular expressions in evaluation logic in Flux functions. diff --git a/content/flux/v0.x/guides/conditional-logic.md b/content/flux/v0.x/guides/conditional-logic.md new file mode 100644 index 0000000000..f7ae133f62 --- /dev/null +++ b/content/flux/v0.x/guides/conditional-logic.md @@ -0,0 +1,175 @@ +--- +title: Query using conditional logic +description: > + This guide describes how to use Flux conditional expressions, such as `if`, + `else`, and `then`, to query and transform data. +menu: + flux_0_x: + name: Query using conditionals + parent: Guides +weight: 9 +--- + +Flux provides `if`, `then`, and `else` conditional expressions that allow for powerful and flexible Flux queries. + +##### Conditional expression syntax +```js +// Pattern +if then else + +// Example +if color == "green" then "008000" else "ffffff" +``` + +Conditional expressions are most useful in the following contexts: + +- When defining variables. +- When using functions that operate on a single row at a time ( + [`filter()`](/flux/v0.x/stdlib/built-in/transformations/filter/), + [`map()`](/flux/v0.x/stdlib/built-in/transformations/map/), + [`reduce()`](/flux/v0.x/stdlib/built-in/transformations/aggregates/reduce) ). + +## Examples + +- [Conditionally set the value of a variable](#conditionally-set-the-value-of-a-variable) +- [Create conditional filters](#create-conditional-filters) +- [Conditionally transform column values with map()](#conditionally-transform-column-values-with-map) +- [Conditionally increment a count with reduce()](#conditionally-increment-a-count-with-reduce) + +### Conditionally set the value of a variable +The following example sets the `overdue` variable based on the +`dueDate` variable's relation to `now()`. + +```js +dueDate = 2019-05-01 +overdue = if dueDate < now() then true else false +``` + +### Create conditional filters +The following example uses an example `metric` variable to change how the query filters data. +`metric` has three possible values: + +- Memory +- CPU +- Disk + +```js +metric = "Memory" + +from(bucket: "telegraf/autogen") + |> range(start: -1h) + |> filter(fn: (r) => + if v.metric == "Memory" + then r._measurement == "mem" and r._field == "used_percent" + else if v.metric == "CPU" + then r._measurement == "cpu" and r._field == "usage_user" + else if v.metric == "Disk" + then r._measurement == "disk" and r._field == "used_percent" + else r._measurement != "" + ) +``` + + +### Conditionally transform column values with map() +The following example uses the [`map()` function](/flux/v0.x/stdlib/built-in/transformations/map/) +to conditionally transform column values. +It sets the `level` column to a specific string based on `_value` column. + +{{< code-tabs-wrapper >}} +{{% code-tabs %}} +[No Comments](#) +[Comments](#) +{{% /code-tabs %}} +{{% code-tab-content %}} +```js +from(bucket: "telegraf/autogen") + |> range(start: -5m) + |> filter(fn: (r) => r._measurement == "mem" and r._field == "used_percent" ) + |> map(fn: (r) => ({ + r with + level: + if r._value >= 95.0000001 and r._value <= 100.0 then "critical" + else if r._value >= 85.0000001 and r._value <= 95.0 then "warning" + else if r._value >= 70.0000001 and r._value <= 85.0 then "high" + else "normal" + }) + ) +``` +{{% /code-tab-content %}} +{{% code-tab-content %}} +```js +from(bucket: "telegraf/autogen") + |> range(start: -5m) + |> filter(fn: (r) => r._measurement == "mem" and r._field == "used_percent" ) + |> map(fn: (r) => ({ + // Retain all existing columns in the mapped row + r with + // Set the level column value based on the _value column + level: + if r._value >= 95.0000001 and r._value <= 100.0 then "critical" + else if r._value >= 85.0000001 and r._value <= 95.0 then "warning" + else if r._value >= 70.0000001 and r._value <= 85.0 then "high" + else "normal" + }) + ) +``` + +{{% /code-tab-content %}} +{{< /code-tabs-wrapper >}} + +### Conditionally increment a count with reduce() +The following example uses the [`aggregateWindow()`](/flux/v0.x/stdlib/built-in/transformations/aggregates/aggregatewindow/) +and [`reduce()`](/flux/v0.x/stdlib/built-in/transformations/aggregates/reduce/) +functions to count the number of records in every five minute window that exceed a defined threshold. + +{{< code-tabs-wrapper >}} +{{% code-tabs %}} +[No Comments](#) +[Comments](#) +{{% /code-tabs %}} +{{% code-tab-content %}} +```js +threshold = 65.0 + +from(bucket: "telegraf/autogen") + |> range(start: -1h) + |> filter(fn: (r) => r._measurement == "mem" and r._field == "used_percent" ) + |> aggregateWindow( + every: 5m, + fn: (column, tables=<-) => tables |> reduce( + identity: {above_threshold_count: 0.0}, + fn: (r, accumulator) => ({ + above_threshold_count: + if r._value >= threshold then accumulator.above_threshold_count + 1.0 + else accumulator.above_threshold_count + 0.0 + }) + ) + ) +``` +{{% /code-tab-content %}} +{{% code-tab-content %}} +```js +threshold = 65.0 + +from(bucket: "telegraf/autogen") + |> range(start: -1h) + |> filter(fn: (r) => r._measurement == "mem" and r._field == "used_percent" ) + // Aggregate data into 5 minute windows using a custom reduce() function + |> aggregateWindow( + every: 5m, + // Use a custom function in the fn parameter. + // The aggregateWindow fn parameter requires 'column' and 'tables' parameters. + fn: (column, tables=<-) => tables |> reduce( + identity: {above_threshold_count: 0.0}, + fn: (r, accumulator) => ({ + // Conditionally increment above_threshold_count if + // r.value exceeds the threshold + above_threshold_count: + if r._value >= threshold then accumulator.above_threshold_count + 1.0 + else accumulator.above_threshold_count + 0.0 + }) + ) + ) +``` +{{% /code-tab-content %}} +{{< /code-tabs-wrapper >}} diff --git a/content/flux/v0.x/guides/executing-queries.md b/content/flux/v0.x/guides/executing-queries.md new file mode 100644 index 0000000000..e3f18e782d --- /dev/null +++ b/content/flux/v0.x/guides/executing-queries.md @@ -0,0 +1,95 @@ +--- +title: Different ways to execute Flux queries +description: +menu: + flux_0_x: + name: Execute Flux queries + parent: Guides + weight: 1 +--- + +There are multiple ways to execute Flux queries with InfluxDB and Chronograf v1.7+. +This guide covers the different options: + +1. [Chronograf's Data Explorer](#chronograf-s-data-explorer) +2. [Influx CLI in "Flux mode"](#influx-cli-in-flux-mode) +3. [Influx CLI via parameter](#influx-cli-via-parameter) +4. [Influx CLI via STDIN](#influx-cli-via-stdin) +5. [InfluxDB API](#influxdb-api) + +> Before attempting these methods, make sure Flux is enabled by setting +> `flux-enabled = true` in the `[http]` section of your InfluxDB configuration file. + +## Chronograf's Data Explorer +Chronograf v1.7+ supports Flux in its Data Explorer. +Flux queries can be built, executed, and visualized from within the Chronograf user interface. + +![Chronograf Data Explorer with Flux](/img/flux/flux-builder-start.gif) + +## Influx CLI in "Flux mode" +InfluxDB v1.7+'s `influx` CLI includes a `-type` option which allows you specify +what type of interactive session to start. +`-type=flux` will start an interactive read-eval-print-loop (REPL) that supports Flux. + +```bash +influx -type=flux +``` + +Any Flux query can be executed within the REPL. + +## Influx CLI via parameter +Flux queries can also be passed to the Flux REPL as a parameter using the `influx` CLI's `-type=flux` option and the `-execute` parameter. +The accompanying string is executed as a Flux query and results are output in your terminal. + +```bash +influx -type=flux -execute '' +``` + +## Influx CLI via STDIN +Flux queries an be piped into the `influx` CLI via STDIN. +Query results are otuput in your terminal. + +```bash +echo '' | influx -type=flux +``` + +## InfluxDB API +Flux can be used to query InfluxDB through InfluxDB's `/api/v2/query` endpoint. +Queried data is returned in annotated CSV format. + +In your request, set the following: + +- `accept` header to `application/csv` +- `content-type` header to `application/vnd.flux` + +This allows you to POST the Flux query in plain text and receive the annotated CSV response. + +Below is an example `curl` command that queries InfluxDB using Flux: + +{{< tab-labels >}} +{{% tabs %}} +[Multi-line](#) +[Single-line](#) +{{% /tabs %}} + +{{< tab-content-container >}} + +{{% tab-content %}} +```bash +curl localhost:8086/api/v2/query -XPOST -sS \ +-H 'accept:application/csv' \ +-H 'content-type:application/vnd.flux' \ +-d 'from(bucket:"telegraf") + |> range(start:-5m) + |> filter(fn:(r) => r._measurement == "cpu")' +``` +{{% /tab-content %}} + +{{% tab-content %}} +```bash +curl localhost:8086/api/v2/query -XPOST -sS -H 'accept:application/csv' -H 'content-type:application/vnd.flux' -d 'from(bucket:"telegraf") |> range(start:-5m) |> filter(fn:(r) => r._measurement == "cpu")' +``` +{{% /tab-content %}} + +{{< /tab-content-container >}} +{{< /tab-labels >}} diff --git a/content/flux/v0.x/guides/flux-in-dashboards.md b/content/flux/v0.x/guides/flux-in-dashboards.md new file mode 100644 index 0000000000..dfa54c8927 --- /dev/null +++ b/content/flux/v0.x/guides/flux-in-dashboards.md @@ -0,0 +1,148 @@ +--- +title: How to use Flux in Chronograf dashboards +description: This guide walks through using Flux queries in Chronograf dashboard cells, what template variables are available, and how to use them. +menu: + flux_0_x: + name: Use Flux in dashboards + parent: Guides + weight: 7 +--- + +[Chronograf](/chronograf/latest/) is the web user interface for managing for the +InfluxData platform that lest you create and customize dashboards that visualize your data. +Visualized data is retrieved using either an InfluxQL or Flux query. +This guide walks through using Flux queries in Chronograf dashboard cells. + +## Using Flux in dashboard cells + +--- + +_**Chronograf v1.7+** and **InfluxDB v1.7 with [Flux enabled](/flux/v0.x/introduction/installation)** +are required to use Flux in dashboards._ + +--- + +To use Flux in a dashboard cell, either create a new cell or edit an existing cell +by clicking the **pencil** icon in the top right corner of the cell. +To the right of the **Source dropdown** above the graph preview, select **Flux** as the source type. + +![Flux in Chronograf dashboard cells](/img/flux/flux-dashboard-cell.png) + +> The Flux source type is only available if your data source has +> [Flux enabled](/flux/v0.x/introduction/installation). + +This will provide **Schema**, **Script**, and **Functions** panes. + +### Schema pane +The Schema pane allows you to explore your data and add filters for specific +measurements, fields, and tags to your Flux script. + + + +### Script pane +The Script pane is where you write your Flux script. +In its default state, the **Script** pane includes an optional [Script Wizard](/chronograf/v1.7/guides/querying-data/#explore-data-with-flux) +that uses selected options to build a Flux query for you. +The generated query includes all the relevant functions and [template variables](#template-variables-in-flux) +required to return your desired data. + +### Functions pane +The Functions pane provides a list of functions available in your Flux queries. +Clicking on a function will add it to the end of the script in the Script pane. +Hovering over a function provides documentation for the function as well as links +to deep documentation. + +### Dynamic sources +Chronograf can be configured with multiple data sources. +The **Sources dropdown** allows you to select a specific data source to connect to, +but a **Dynamic Source** options is also available. +With a dynamic source, the cell will query data from whatever data source to which +Chronograf is currently connected. +Connections are managed under Chronograf's **Configuration** tab. + +### View raw data +As you're building your Flux scripts, each function processes or transforms your +data is ways specific to the function. +It can be helpful to view the actual data in order to see how it is being shaped. +The **View Raw Data** toggle above the data visualization switches between graphed +data and raw data shown in table form. + +![View raw data](/img/flux/flux-dashboard-view-raw.png) + +_The **View Raw Data** toggle is only available when using Flux._ + +## Template variables in Flux +Chronograf [template variables](/chronograf/latest/guides/dashboard-template-variables/) +allow you to alter specific components of cells’ queries using elements provided in the +Chronograf user interface. + +In your Flux query, reference template variables just as you would reference defined Flux variables. +The following example uses Chronograf's [predefined template variables](#predefined-template-variables), +`dashboardTime`, `upperDashboardTime`, and `autoInterval`: + +```js +from(bucket: "telegraf/autogen") + |> filter(fn: (r) => r._measurement == "cpu") + |> range( + start: dashboardTime, + stop: upperDashboardTime + ) + window(every: autoInterval) +``` + +### Predefined template variables + +#### dashboardTime +The `dashboardTime` template variable represents the lower time bound of ranged data. +It's value is controlled by the time dropdown in your dashboard. +It should be used to define the `start` parameter of the `range()` function. + +```js +dataSet + |> range( + start: dashboardTime + ) +``` + +#### upperDashboardTime +The `upperDashboardTime` template variable represents the upper time bound of ranged data. +It's value is modified by the time dropdown in your dashboard when using an absolute time range. +It should be used to define the `stop` parameter of the `range()` function. + +```js +dataSet + |> range( + start: dashboardTime, + stop: upperDashboardTime + ) +``` +> As a best practice, always set the `stop` parameter of the `range()` function to `upperDashboardTime` in cell queries. +> Without it, `stop` defaults to "now" and the absolute upper range bound selected in the time dropdown is not honored, +> potentially causing unnecessary load on InfluxDB. + +#### autoInterval +The `autoInterval` template variable represents the refresh interval of the dashboard +and is controlled by the refresh interval dropdown. +It's typically used to align window intervals created in +[windowing and aggregation](/flux/v0.x/guides/windowing-aggregating) operations with dashboard refreshes. + +```js +dataSet + |> range( + start: dashboardTime, + stop: upperDashboardTime + ) + |> aggregateWindow( + every: autoInterval, + fn: mean + ) +``` + +### Custom template variables +
+Chronograf does not yet support the use of custom template variables in Flux queries. +
+ +## Using Flux and InfluxQL +Within individual dashboard cells, the use of Flux and InfluxQL is mutually exclusive. +However, a dashboard may consist of different cells, each using Flux or InfluxQL. diff --git a/content/flux/v0.x/guides/grouping-data.md b/content/flux/v0.x/guides/grouping-data.md new file mode 100644 index 0000000000..9f2acc4d3a --- /dev/null +++ b/content/flux/v0.x/guides/grouping-data.md @@ -0,0 +1,668 @@ +--- +title: How to group data with Flux +description: This guide walks through grouping data with Flux by providing examples and illustrating how data is shaped throughout the process. +menu: + flux_0_x: + name: Group data + parent: Guides + weight: 3 +--- + +With Flux, data can be grouped by any column in your queried data set. +"Grouping" is accomplished by partitioning data into tables where each row shares a common value for specified columns. +This guide walks through grouping data in Flux with examples of how data is shaped in the process. + +## Group keys +Every table has a **group key** – a list of columns which for which every row in the table has the same value. + +###### Example group key +```js +[_start, _stop, _field, _measurement, host] +``` + +Grouping data in Flux is essentially defining the group key of output tables. +Understanding how modifying group keys shapes output data is key to successfully +grouping and transforming data into your desired output. + +## group() Function +Flux's [`group()` function](/flux/v0.x/stdlib/built-in/transformations/group) defines the +group key for output tables, i.e. grouping records based on values for specific columns. + +###### group() example +```js +dataStream + |> group(columns: ["cpu", "host"]) +``` + +###### Resulting group key +```js +[cpu, host] +``` + +The `group()` function has the following parameters: + +### by +An explicit method for defining the group key with an array of strings. +Only columns specified are included in the output group key. + +### except +An implicit method for defining the group key with an array of strings. +All columns **except** those specified are included in the output group key. + +### none +A boolean that removes all grouping and outputs everything as a single table. + +--- + +_For more information, see the [`group()` function](/flux/v0.x/stdlib/built-in/transformations/group)._ + +--- + +## Example grouping operations +To illustrate how grouping works, define a `dataSet` variable that queries System +CPU usage from the `telegraf/autogen` bucket. +Filter the `cpu` tag so it only returns results for each numbered CPU core. + +### Data set +CPU used by system operations for all numbered CPU cores. +It uses a regular expression to filter only numbered cores. + +```js +dataSet = from(bucket: "telegraf/autogen") + |> range(start: -2m) + |> filter(fn: (r) => + r._field == "usage_system" and + r.cpu =~ /cpu[0-9*]/ + ) + |> drop(columns: ["host"]) +``` + +> This example drops the `host` column from the returned data since the CPU data +> is only tracked for a single host and it simplifies the output tables. +> Don't drop the `host` column if monitoring multiple hosts. + +{{% truncate %}} +``` +Table: keys: [_start, _stop, _field, _measurement, cpu] + _start:time _stop:time _field:string _measurement:string cpu:string _time:time _value:float +------------------------------ ------------------------------ ---------------------- ---------------------- ---------------------- ------------------------------ ---------------------------- +2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z usage_system cpu cpu0 2018-11-05T21:34:00.000000000Z 7.892107892107892 +2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z usage_system cpu cpu0 2018-11-05T21:34:10.000000000Z 7.2 +2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z usage_system cpu cpu0 2018-11-05T21:34:20.000000000Z 7.4 +2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z usage_system cpu cpu0 2018-11-05T21:34:30.000000000Z 5.5 +2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z usage_system cpu cpu0 2018-11-05T21:34:40.000000000Z 7.4 +2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z usage_system cpu cpu0 2018-11-05T21:34:50.000000000Z 7.5 +2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z usage_system cpu cpu0 2018-11-05T21:35:00.000000000Z 10.3 +2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z usage_system cpu cpu0 2018-11-05T21:35:10.000000000Z 9.2 +2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z usage_system cpu cpu0 2018-11-05T21:35:20.000000000Z 8.4 +2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z usage_system cpu cpu0 2018-11-05T21:35:30.000000000Z 8.5 +2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z usage_system cpu cpu0 2018-11-05T21:35:40.000000000Z 8.6 +2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z usage_system cpu cpu0 2018-11-05T21:35:50.000000000Z 10.2 +2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z usage_system cpu cpu0 2018-11-05T21:36:00.000000000Z 10.6 + +Table: keys: [_start, _stop, _field, _measurement, cpu] + _start:time _stop:time _field:string _measurement:string cpu:string _time:time _value:float +------------------------------ ------------------------------ ---------------------- ---------------------- ---------------------- ------------------------------ ---------------------------- +2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z usage_system cpu cpu1 2018-11-05T21:34:00.000000000Z 0.7992007992007992 +2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z usage_system cpu cpu1 2018-11-05T21:34:10.000000000Z 0.7 +2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z usage_system cpu cpu1 2018-11-05T21:34:20.000000000Z 0.7 +2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z usage_system cpu cpu1 2018-11-05T21:34:30.000000000Z 0.4 +2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z usage_system cpu cpu1 2018-11-05T21:34:40.000000000Z 0.7 +2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z usage_system cpu cpu1 2018-11-05T21:34:50.000000000Z 0.7 +2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z usage_system cpu cpu1 2018-11-05T21:35:00.000000000Z 1.4 +2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z usage_system cpu cpu1 2018-11-05T21:35:10.000000000Z 1.2 +2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z usage_system cpu cpu1 2018-11-05T21:35:20.000000000Z 0.8 +2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z usage_system cpu cpu1 2018-11-05T21:35:30.000000000Z 0.8991008991008991 +2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z usage_system cpu cpu1 2018-11-05T21:35:40.000000000Z 0.8008008008008008 +2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z usage_system cpu cpu1 2018-11-05T21:35:50.000000000Z 0.999000999000999 +2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z usage_system cpu cpu1 2018-11-05T21:36:00.000000000Z 1.1022044088176353 + +Table: keys: [_start, _stop, _field, _measurement, cpu] + _start:time _stop:time _field:string _measurement:string cpu:string _time:time _value:float +------------------------------ ------------------------------ ---------------------- ---------------------- ---------------------- ------------------------------ ---------------------------- +2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z usage_system cpu cpu2 2018-11-05T21:34:00.000000000Z 4.1 +2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z usage_system cpu cpu2 2018-11-05T21:34:10.000000000Z 3.6 +2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z usage_system cpu cpu2 2018-11-05T21:34:20.000000000Z 3.5 +2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z usage_system cpu cpu2 2018-11-05T21:34:30.000000000Z 2.6 +2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z usage_system cpu cpu2 2018-11-05T21:34:40.000000000Z 4.5 +2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z usage_system cpu cpu2 2018-11-05T21:34:50.000000000Z 4.895104895104895 +2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z usage_system cpu cpu2 2018-11-05T21:35:00.000000000Z 6.906906906906907 +2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z usage_system cpu cpu2 2018-11-05T21:35:10.000000000Z 5.7 +2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z usage_system cpu cpu2 2018-11-05T21:35:20.000000000Z 5.1 +2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z usage_system cpu cpu2 2018-11-05T21:35:30.000000000Z 4.7 +2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z usage_system cpu cpu2 2018-11-05T21:35:40.000000000Z 5.1 +2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z usage_system cpu cpu2 2018-11-05T21:35:50.000000000Z 5.9 +2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z usage_system cpu cpu2 2018-11-05T21:36:00.000000000Z 6.4935064935064934 + +Table: keys: [_start, _stop, _field, _measurement, cpu] + _start:time _stop:time _field:string _measurement:string cpu:string _time:time _value:float +------------------------------ ------------------------------ ---------------------- ---------------------- ---------------------- ------------------------------ ---------------------------- +2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z usage_system cpu cpu3 2018-11-05T21:34:00.000000000Z 0.5005005005005005 +2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z usage_system cpu cpu3 2018-11-05T21:34:10.000000000Z 0.5 +2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z usage_system cpu cpu3 2018-11-05T21:34:20.000000000Z 0.5 +2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z usage_system cpu cpu3 2018-11-05T21:34:30.000000000Z 0.3 +2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z usage_system cpu cpu3 2018-11-05T21:34:40.000000000Z 0.6 +2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z usage_system cpu cpu3 2018-11-05T21:34:50.000000000Z 0.6 +2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z usage_system cpu cpu3 2018-11-05T21:35:00.000000000Z 1.3986013986013985 +2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z usage_system cpu cpu3 2018-11-05T21:35:10.000000000Z 0.9 +2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z usage_system cpu cpu3 2018-11-05T21:35:20.000000000Z 0.5005005005005005 +2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z usage_system cpu cpu3 2018-11-05T21:35:30.000000000Z 0.7 +2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z usage_system cpu cpu3 2018-11-05T21:35:40.000000000Z 0.6 +2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z usage_system cpu cpu3 2018-11-05T21:35:50.000000000Z 0.8 +2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z usage_system cpu cpu3 2018-11-05T21:36:00.000000000Z 0.9 +``` +{{% /truncate %}} + +**Note that the group key is output with each table: `Table: keys: `.** + +![Group example data set](/img/flux/grouping-data-set.png) + +### Group by CPU +Group the `dataSet` stream by the `cpu` column. + +```js +dataSet + |> group(columns: ["cpu"]) +``` + +This won't actually change the structure of the data since it already has `cpu` in the group key and is therefore grouped by `cpu`. +However, notice that it does change the group key: + +{{% truncate %}} +###### Group by CPU output tables +``` +Table: keys: [cpu] + cpu:string _stop:time _time:time _value:float _field:string _measurement:string _start:time +---------------------- ------------------------------ ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ + cpu0 2018-11-05T21:36:00.000000000Z 2018-11-05T21:34:00.000000000Z 7.892107892107892 usage_system cpu 2018-11-05T21:34:00.000000000Z + cpu0 2018-11-05T21:36:00.000000000Z 2018-11-05T21:34:10.000000000Z 7.2 usage_system cpu 2018-11-05T21:34:00.000000000Z + cpu0 2018-11-05T21:36:00.000000000Z 2018-11-05T21:34:20.000000000Z 7.4 usage_system cpu 2018-11-05T21:34:00.000000000Z + cpu0 2018-11-05T21:36:00.000000000Z 2018-11-05T21:34:30.000000000Z 5.5 usage_system cpu 2018-11-05T21:34:00.000000000Z + cpu0 2018-11-05T21:36:00.000000000Z 2018-11-05T21:34:40.000000000Z 7.4 usage_system cpu 2018-11-05T21:34:00.000000000Z + cpu0 2018-11-05T21:36:00.000000000Z 2018-11-05T21:34:50.000000000Z 7.5 usage_system cpu 2018-11-05T21:34:00.000000000Z + cpu0 2018-11-05T21:36:00.000000000Z 2018-11-05T21:35:00.000000000Z 10.3 usage_system cpu 2018-11-05T21:34:00.000000000Z + cpu0 2018-11-05T21:36:00.000000000Z 2018-11-05T21:35:10.000000000Z 9.2 usage_system cpu 2018-11-05T21:34:00.000000000Z + cpu0 2018-11-05T21:36:00.000000000Z 2018-11-05T21:35:20.000000000Z 8.4 usage_system cpu 2018-11-05T21:34:00.000000000Z + cpu0 2018-11-05T21:36:00.000000000Z 2018-11-05T21:35:30.000000000Z 8.5 usage_system cpu 2018-11-05T21:34:00.000000000Z + cpu0 2018-11-05T21:36:00.000000000Z 2018-11-05T21:35:40.000000000Z 8.6 usage_system cpu 2018-11-05T21:34:00.000000000Z + cpu0 2018-11-05T21:36:00.000000000Z 2018-11-05T21:35:50.000000000Z 10.2 usage_system cpu 2018-11-05T21:34:00.000000000Z + cpu0 2018-11-05T21:36:00.000000000Z 2018-11-05T21:36:00.000000000Z 10.6 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [cpu] + cpu:string _stop:time _time:time _value:float _field:string _measurement:string _start:time +---------------------- ------------------------------ ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ + cpu1 2018-11-05T21:36:00.000000000Z 2018-11-05T21:34:00.000000000Z 0.7992007992007992 usage_system cpu 2018-11-05T21:34:00.000000000Z + cpu1 2018-11-05T21:36:00.000000000Z 2018-11-05T21:34:10.000000000Z 0.7 usage_system cpu 2018-11-05T21:34:00.000000000Z + cpu1 2018-11-05T21:36:00.000000000Z 2018-11-05T21:34:20.000000000Z 0.7 usage_system cpu 2018-11-05T21:34:00.000000000Z + cpu1 2018-11-05T21:36:00.000000000Z 2018-11-05T21:34:30.000000000Z 0.4 usage_system cpu 2018-11-05T21:34:00.000000000Z + cpu1 2018-11-05T21:36:00.000000000Z 2018-11-05T21:34:40.000000000Z 0.7 usage_system cpu 2018-11-05T21:34:00.000000000Z + cpu1 2018-11-05T21:36:00.000000000Z 2018-11-05T21:34:50.000000000Z 0.7 usage_system cpu 2018-11-05T21:34:00.000000000Z + cpu1 2018-11-05T21:36:00.000000000Z 2018-11-05T21:35:00.000000000Z 1.4 usage_system cpu 2018-11-05T21:34:00.000000000Z + cpu1 2018-11-05T21:36:00.000000000Z 2018-11-05T21:35:10.000000000Z 1.2 usage_system cpu 2018-11-05T21:34:00.000000000Z + cpu1 2018-11-05T21:36:00.000000000Z 2018-11-05T21:35:20.000000000Z 0.8 usage_system cpu 2018-11-05T21:34:00.000000000Z + cpu1 2018-11-05T21:36:00.000000000Z 2018-11-05T21:35:30.000000000Z 0.8991008991008991 usage_system cpu 2018-11-05T21:34:00.000000000Z + cpu1 2018-11-05T21:36:00.000000000Z 2018-11-05T21:35:40.000000000Z 0.8008008008008008 usage_system cpu 2018-11-05T21:34:00.000000000Z + cpu1 2018-11-05T21:36:00.000000000Z 2018-11-05T21:35:50.000000000Z 0.999000999000999 usage_system cpu 2018-11-05T21:34:00.000000000Z + cpu1 2018-11-05T21:36:00.000000000Z 2018-11-05T21:36:00.000000000Z 1.1022044088176353 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [cpu] + cpu:string _stop:time _time:time _value:float _field:string _measurement:string _start:time +---------------------- ------------------------------ ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ + cpu2 2018-11-05T21:36:00.000000000Z 2018-11-05T21:34:00.000000000Z 4.1 usage_system cpu 2018-11-05T21:34:00.000000000Z + cpu2 2018-11-05T21:36:00.000000000Z 2018-11-05T21:34:10.000000000Z 3.6 usage_system cpu 2018-11-05T21:34:00.000000000Z + cpu2 2018-11-05T21:36:00.000000000Z 2018-11-05T21:34:20.000000000Z 3.5 usage_system cpu 2018-11-05T21:34:00.000000000Z + cpu2 2018-11-05T21:36:00.000000000Z 2018-11-05T21:34:30.000000000Z 2.6 usage_system cpu 2018-11-05T21:34:00.000000000Z + cpu2 2018-11-05T21:36:00.000000000Z 2018-11-05T21:34:40.000000000Z 4.5 usage_system cpu 2018-11-05T21:34:00.000000000Z + cpu2 2018-11-05T21:36:00.000000000Z 2018-11-05T21:34:50.000000000Z 4.895104895104895 usage_system cpu 2018-11-05T21:34:00.000000000Z + cpu2 2018-11-05T21:36:00.000000000Z 2018-11-05T21:35:00.000000000Z 6.906906906906907 usage_system cpu 2018-11-05T21:34:00.000000000Z + cpu2 2018-11-05T21:36:00.000000000Z 2018-11-05T21:35:10.000000000Z 5.7 usage_system cpu 2018-11-05T21:34:00.000000000Z + cpu2 2018-11-05T21:36:00.000000000Z 2018-11-05T21:35:20.000000000Z 5.1 usage_system cpu 2018-11-05T21:34:00.000000000Z + cpu2 2018-11-05T21:36:00.000000000Z 2018-11-05T21:35:30.000000000Z 4.7 usage_system cpu 2018-11-05T21:34:00.000000000Z + cpu2 2018-11-05T21:36:00.000000000Z 2018-11-05T21:35:40.000000000Z 5.1 usage_system cpu 2018-11-05T21:34:00.000000000Z + cpu2 2018-11-05T21:36:00.000000000Z 2018-11-05T21:35:50.000000000Z 5.9 usage_system cpu 2018-11-05T21:34:00.000000000Z + cpu2 2018-11-05T21:36:00.000000000Z 2018-11-05T21:36:00.000000000Z 6.4935064935064934 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [cpu] + cpu:string _stop:time _time:time _value:float _field:string _measurement:string _start:time +---------------------- ------------------------------ ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ + cpu3 2018-11-05T21:36:00.000000000Z 2018-11-05T21:34:00.000000000Z 0.5005005005005005 usage_system cpu 2018-11-05T21:34:00.000000000Z + cpu3 2018-11-05T21:36:00.000000000Z 2018-11-05T21:34:10.000000000Z 0.5 usage_system cpu 2018-11-05T21:34:00.000000000Z + cpu3 2018-11-05T21:36:00.000000000Z 2018-11-05T21:34:20.000000000Z 0.5 usage_system cpu 2018-11-05T21:34:00.000000000Z + cpu3 2018-11-05T21:36:00.000000000Z 2018-11-05T21:34:30.000000000Z 0.3 usage_system cpu 2018-11-05T21:34:00.000000000Z + cpu3 2018-11-05T21:36:00.000000000Z 2018-11-05T21:34:40.000000000Z 0.6 usage_system cpu 2018-11-05T21:34:00.000000000Z + cpu3 2018-11-05T21:36:00.000000000Z 2018-11-05T21:34:50.000000000Z 0.6 usage_system cpu 2018-11-05T21:34:00.000000000Z + cpu3 2018-11-05T21:36:00.000000000Z 2018-11-05T21:35:00.000000000Z 1.3986013986013985 usage_system cpu 2018-11-05T21:34:00.000000000Z + cpu3 2018-11-05T21:36:00.000000000Z 2018-11-05T21:35:10.000000000Z 0.9 usage_system cpu 2018-11-05T21:34:00.000000000Z + cpu3 2018-11-05T21:36:00.000000000Z 2018-11-05T21:35:20.000000000Z 0.5005005005005005 usage_system cpu 2018-11-05T21:34:00.000000000Z + cpu3 2018-11-05T21:36:00.000000000Z 2018-11-05T21:35:30.000000000Z 0.7 usage_system cpu 2018-11-05T21:34:00.000000000Z + cpu3 2018-11-05T21:36:00.000000000Z 2018-11-05T21:35:40.000000000Z 0.6 usage_system cpu 2018-11-05T21:34:00.000000000Z + cpu3 2018-11-05T21:36:00.000000000Z 2018-11-05T21:35:50.000000000Z 0.8 usage_system cpu 2018-11-05T21:34:00.000000000Z + cpu3 2018-11-05T21:36:00.000000000Z 2018-11-05T21:36:00.000000000Z 0.9 usage_system cpu 2018-11-05T21:34:00.000000000Z +``` +{{% /truncate %}} + +The visualization remains the same. + +![Group by CPU](/img/flux/grouping-data-set.png) + +### Group by time +Grouping data by the `_time` column is a good illustration of how grouping changes the structure of your data. + +```js +dataSet + |> group(columns: ["_time"]) +``` + +When grouping by `_time`, all records that share a common `_time` value are grouped into individual tables. +So each output table represents a single point in time. + +{{% truncate %}} +###### Group by time output tables +``` +Table: keys: [_time] + _time:time _start:time _stop:time _value:float _field:string _measurement:string cpu:string +------------------------------ ------------------------------ ------------------------------ ---------------------------- ---------------------- ---------------------- ---------------------- +2018-11-05T21:34:00.000000000Z 2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z 7.892107892107892 usage_system cpu cpu0 +2018-11-05T21:34:00.000000000Z 2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z 0.7992007992007992 usage_system cpu cpu1 +2018-11-05T21:34:00.000000000Z 2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z 4.1 usage_system cpu cpu2 +2018-11-05T21:34:00.000000000Z 2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z 0.5005005005005005 usage_system cpu cpu3 + +Table: keys: [_time] + _time:time _start:time _stop:time _value:float _field:string _measurement:string cpu:string +------------------------------ ------------------------------ ------------------------------ ---------------------------- ---------------------- ---------------------- ---------------------- +2018-11-05T21:34:10.000000000Z 2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z 7.2 usage_system cpu cpu0 +2018-11-05T21:34:10.000000000Z 2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z 0.7 usage_system cpu cpu1 +2018-11-05T21:34:10.000000000Z 2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z 3.6 usage_system cpu cpu2 +2018-11-05T21:34:10.000000000Z 2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z 0.5 usage_system cpu cpu3 + +Table: keys: [_time] + _time:time _start:time _stop:time _value:float _field:string _measurement:string cpu:string +------------------------------ ------------------------------ ------------------------------ ---------------------------- ---------------------- ---------------------- ---------------------- +2018-11-05T21:34:20.000000000Z 2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z 7.4 usage_system cpu cpu0 +2018-11-05T21:34:20.000000000Z 2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z 0.7 usage_system cpu cpu1 +2018-11-05T21:34:20.000000000Z 2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z 3.5 usage_system cpu cpu2 +2018-11-05T21:34:20.000000000Z 2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z 0.5 usage_system cpu cpu3 + +Table: keys: [_time] + _time:time _start:time _stop:time _value:float _field:string _measurement:string cpu:string +------------------------------ ------------------------------ ------------------------------ ---------------------------- ---------------------- ---------------------- ---------------------- +2018-11-05T21:34:30.000000000Z 2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z 5.5 usage_system cpu cpu0 +2018-11-05T21:34:30.000000000Z 2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z 0.4 usage_system cpu cpu1 +2018-11-05T21:34:30.000000000Z 2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z 2.6 usage_system cpu cpu2 +2018-11-05T21:34:30.000000000Z 2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z 0.3 usage_system cpu cpu3 + +Table: keys: [_time] + _time:time _start:time _stop:time _value:float _field:string _measurement:string cpu:string +------------------------------ ------------------------------ ------------------------------ ---------------------------- ---------------------- ---------------------- ---------------------- +2018-11-05T21:34:40.000000000Z 2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z 7.4 usage_system cpu cpu0 +2018-11-05T21:34:40.000000000Z 2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z 0.7 usage_system cpu cpu1 +2018-11-05T21:34:40.000000000Z 2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z 4.5 usage_system cpu cpu2 +2018-11-05T21:34:40.000000000Z 2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z 0.6 usage_system cpu cpu3 + +Table: keys: [_time] + _time:time _start:time _stop:time _value:float _field:string _measurement:string cpu:string +------------------------------ ------------------------------ ------------------------------ ---------------------------- ---------------------- ---------------------- ---------------------- +2018-11-05T21:34:50.000000000Z 2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z 7.5 usage_system cpu cpu0 +2018-11-05T21:34:50.000000000Z 2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z 0.7 usage_system cpu cpu1 +2018-11-05T21:34:50.000000000Z 2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z 4.895104895104895 usage_system cpu cpu2 +2018-11-05T21:34:50.000000000Z 2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z 0.6 usage_system cpu cpu3 + +Table: keys: [_time] + _time:time _start:time _stop:time _value:float _field:string _measurement:string cpu:string +------------------------------ ------------------------------ ------------------------------ ---------------------------- ---------------------- ---------------------- ---------------------- +2018-11-05T21:35:00.000000000Z 2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z 10.3 usage_system cpu cpu0 +2018-11-05T21:35:00.000000000Z 2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z 1.4 usage_system cpu cpu1 +2018-11-05T21:35:00.000000000Z 2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z 6.906906906906907 usage_system cpu cpu2 +2018-11-05T21:35:00.000000000Z 2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z 1.3986013986013985 usage_system cpu cpu3 + +Table: keys: [_time] + _time:time _start:time _stop:time _value:float _field:string _measurement:string cpu:string +------------------------------ ------------------------------ ------------------------------ ---------------------------- ---------------------- ---------------------- ---------------------- +2018-11-05T21:35:10.000000000Z 2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z 9.2 usage_system cpu cpu0 +2018-11-05T21:35:10.000000000Z 2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z 1.2 usage_system cpu cpu1 +2018-11-05T21:35:10.000000000Z 2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z 5.7 usage_system cpu cpu2 +2018-11-05T21:35:10.000000000Z 2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z 0.9 usage_system cpu cpu3 + +Table: keys: [_time] + _time:time _start:time _stop:time _value:float _field:string _measurement:string cpu:string +------------------------------ ------------------------------ ------------------------------ ---------------------------- ---------------------- ---------------------- ---------------------- +2018-11-05T21:35:20.000000000Z 2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z 8.4 usage_system cpu cpu0 +2018-11-05T21:35:20.000000000Z 2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z 0.8 usage_system cpu cpu1 +2018-11-05T21:35:20.000000000Z 2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z 5.1 usage_system cpu cpu2 +2018-11-05T21:35:20.000000000Z 2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z 0.5005005005005005 usage_system cpu cpu3 + +Table: keys: [_time] + _time:time _start:time _stop:time _value:float _field:string _measurement:string cpu:string +------------------------------ ------------------------------ ------------------------------ ---------------------------- ---------------------- ---------------------- ---------------------- +2018-11-05T21:35:30.000000000Z 2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z 8.5 usage_system cpu cpu0 +2018-11-05T21:35:30.000000000Z 2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z 0.8991008991008991 usage_system cpu cpu1 +2018-11-05T21:35:30.000000000Z 2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z 4.7 usage_system cpu cpu2 +2018-11-05T21:35:30.000000000Z 2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z 0.7 usage_system cpu cpu3 + +Table: keys: [_time] + _time:time _start:time _stop:time _value:float _field:string _measurement:string cpu:string +------------------------------ ------------------------------ ------------------------------ ---------------------------- ---------------------- ---------------------- ---------------------- +2018-11-05T21:35:40.000000000Z 2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z 8.6 usage_system cpu cpu0 +2018-11-05T21:35:40.000000000Z 2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z 0.8008008008008008 usage_system cpu cpu1 +2018-11-05T21:35:40.000000000Z 2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z 5.1 usage_system cpu cpu2 +2018-11-05T21:35:40.000000000Z 2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z 0.6 usage_system cpu cpu3 + +Table: keys: [_time] + _time:time _start:time _stop:time _value:float _field:string _measurement:string cpu:string +------------------------------ ------------------------------ ------------------------------ ---------------------------- ---------------------- ---------------------- ---------------------- +2018-11-05T21:35:50.000000000Z 2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z 10.2 usage_system cpu cpu0 +2018-11-05T21:35:50.000000000Z 2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z 0.999000999000999 usage_system cpu cpu1 +2018-11-05T21:35:50.000000000Z 2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z 5.9 usage_system cpu cpu2 +2018-11-05T21:35:50.000000000Z 2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z 0.8 usage_system cpu cpu3 + +Table: keys: [_time] + _time:time _start:time _stop:time _value:float _field:string _measurement:string cpu:string +------------------------------ ------------------------------ ------------------------------ ---------------------------- ---------------------- ---------------------- ---------------------- +2018-11-05T21:36:00.000000000Z 2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z 10.6 usage_system cpu cpu0 +2018-11-05T21:36:00.000000000Z 2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z 1.1022044088176353 usage_system cpu cpu1 +2018-11-05T21:36:00.000000000Z 2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z 6.4935064935064934 usage_system cpu cpu2 +2018-11-05T21:36:00.000000000Z 2018-11-05T21:34:00.000000000Z 2018-11-05T21:36:00.000000000Z 0.9 usage_system cpu cpu3 +``` +{{% /truncate %}} + +Because each timestamp is a structured as a separate table, when visualized, they appear as individual, unconnected points. +Even though there are multiple records per timestamp, it will only visualize the last record of the table. + +![Group by time](/img/flux/grouping-by-time.png) + +> With some further processing, you could calculate the average CPU usage across all CPUs per point +> of time and group them into a single table, but we won't cover that in this example. +> If you're interested in running and visualizing this yourself, here's what the query would look like: +> +```js +dataSet + |> group(columns: ["_time"]) + |> mean() + |> group(columns: ["_value", "_time"], mode: "except") +``` + +## Group by CPU and time +Group by the `cpu` and `_time` columns. + +```js +dataSet + |> group(columns: ["cpu", "_time"]) +``` + +This outputs a table for every unique `cpu` and `_time` combination: + +{{% truncate %}} +###### Group by CPU and time output tables +``` +Table: keys: [_time, cpu] + _time:time cpu:string _stop:time _value:float _field:string _measurement:string _start:time +------------------------------ ---------------------- ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ +2018-11-05T21:34:00.000000000Z cpu0 2018-11-05T21:36:00.000000000Z 7.892107892107892 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [_time, cpu] + _time:time cpu:string _stop:time _value:float _field:string _measurement:string _start:time +------------------------------ ---------------------- ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ +2018-11-05T21:34:00.000000000Z cpu1 2018-11-05T21:36:00.000000000Z 0.7992007992007992 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [_time, cpu] + _time:time cpu:string _stop:time _value:float _field:string _measurement:string _start:time +------------------------------ ---------------------- ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ +2018-11-05T21:34:00.000000000Z cpu2 2018-11-05T21:36:00.000000000Z 4.1 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [_time, cpu] + _time:time cpu:string _stop:time _value:float _field:string _measurement:string _start:time +------------------------------ ---------------------- ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ +2018-11-05T21:34:00.000000000Z cpu3 2018-11-05T21:36:00.000000000Z 0.5005005005005005 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [_time, cpu] + _time:time cpu:string _stop:time _value:float _field:string _measurement:string _start:time +------------------------------ ---------------------- ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ +2018-11-05T21:34:10.000000000Z cpu0 2018-11-05T21:36:00.000000000Z 7.2 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [_time, cpu] + _time:time cpu:string _stop:time _value:float _field:string _measurement:string _start:time +------------------------------ ---------------------- ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ +2018-11-05T21:34:10.000000000Z cpu1 2018-11-05T21:36:00.000000000Z 0.7 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [_time, cpu] + _time:time cpu:string _stop:time _value:float _field:string _measurement:string _start:time +------------------------------ ---------------------- ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ +2018-11-05T21:34:10.000000000Z cpu2 2018-11-05T21:36:00.000000000Z 3.6 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [_time, cpu] + _time:time cpu:string _stop:time _value:float _field:string _measurement:string _start:time +------------------------------ ---------------------- ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ +2018-11-05T21:34:10.000000000Z cpu3 2018-11-05T21:36:00.000000000Z 0.5 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [_time, cpu] + _time:time cpu:string _stop:time _value:float _field:string _measurement:string _start:time +------------------------------ ---------------------- ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ +2018-11-05T21:34:20.000000000Z cpu0 2018-11-05T21:36:00.000000000Z 7.4 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [_time, cpu] + _time:time cpu:string _stop:time _value:float _field:string _measurement:string _start:time +------------------------------ ---------------------- ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ +2018-11-05T21:34:20.000000000Z cpu1 2018-11-05T21:36:00.000000000Z 0.7 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [_time, cpu] + _time:time cpu:string _stop:time _value:float _field:string _measurement:string _start:time +------------------------------ ---------------------- ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ +2018-11-05T21:34:20.000000000Z cpu2 2018-11-05T21:36:00.000000000Z 3.5 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [_time, cpu] + _time:time cpu:string _stop:time _value:float _field:string _measurement:string _start:time +------------------------------ ---------------------- ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ +2018-11-05T21:34:20.000000000Z cpu3 2018-11-05T21:36:00.000000000Z 0.5 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [_time, cpu] + _time:time cpu:string _stop:time _value:float _field:string _measurement:string _start:time +------------------------------ ---------------------- ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ +2018-11-05T21:34:30.000000000Z cpu0 2018-11-05T21:36:00.000000000Z 5.5 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [_time, cpu] + _time:time cpu:string _stop:time _value:float _field:string _measurement:string _start:time +------------------------------ ---------------------- ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ +2018-11-05T21:34:30.000000000Z cpu1 2018-11-05T21:36:00.000000000Z 0.4 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [_time, cpu] + _time:time cpu:string _stop:time _value:float _field:string _measurement:string _start:time +------------------------------ ---------------------- ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ +2018-11-05T21:34:30.000000000Z cpu2 2018-11-05T21:36:00.000000000Z 2.6 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [_time, cpu] + _time:time cpu:string _stop:time _value:float _field:string _measurement:string _start:time +------------------------------ ---------------------- ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ +2018-11-05T21:34:30.000000000Z cpu3 2018-11-05T21:36:00.000000000Z 0.3 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [_time, cpu] + _time:time cpu:string _stop:time _value:float _field:string _measurement:string _start:time +------------------------------ ---------------------- ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ +2018-11-05T21:34:40.000000000Z cpu0 2018-11-05T21:36:00.000000000Z 7.4 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [_time, cpu] + _time:time cpu:string _stop:time _value:float _field:string _measurement:string _start:time +------------------------------ ---------------------- ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ +2018-11-05T21:34:40.000000000Z cpu1 2018-11-05T21:36:00.000000000Z 0.7 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [_time, cpu] + _time:time cpu:string _stop:time _value:float _field:string _measurement:string _start:time +------------------------------ ---------------------- ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ +2018-11-05T21:34:40.000000000Z cpu2 2018-11-05T21:36:00.000000000Z 4.5 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [_time, cpu] + _time:time cpu:string _stop:time _value:float _field:string _measurement:string _start:time +------------------------------ ---------------------- ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ +2018-11-05T21:34:40.000000000Z cpu3 2018-11-05T21:36:00.000000000Z 0.6 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [_time, cpu] + _time:time cpu:string _stop:time _value:float _field:string _measurement:string _start:time +------------------------------ ---------------------- ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ +2018-11-05T21:34:50.000000000Z cpu0 2018-11-05T21:36:00.000000000Z 7.5 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [_time, cpu] + _time:time cpu:string _stop:time _value:float _field:string _measurement:string _start:time +------------------------------ ---------------------- ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ +2018-11-05T21:34:50.000000000Z cpu1 2018-11-05T21:36:00.000000000Z 0.7 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [_time, cpu] + _time:time cpu:string _stop:time _value:float _field:string _measurement:string _start:time +------------------------------ ---------------------- ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ +2018-11-05T21:34:50.000000000Z cpu2 2018-11-05T21:36:00.000000000Z 4.895104895104895 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [_time, cpu] + _time:time cpu:string _stop:time _value:float _field:string _measurement:string _start:time +------------------------------ ---------------------- ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ +2018-11-05T21:34:50.000000000Z cpu3 2018-11-05T21:36:00.000000000Z 0.6 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [_time, cpu] + _time:time cpu:string _stop:time _value:float _field:string _measurement:string _start:time +------------------------------ ---------------------- ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ +2018-11-05T21:35:00.000000000Z cpu0 2018-11-05T21:36:00.000000000Z 10.3 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [_time, cpu] + _time:time cpu:string _stop:time _value:float _field:string _measurement:string _start:time +------------------------------ ---------------------- ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ +2018-11-05T21:35:00.000000000Z cpu1 2018-11-05T21:36:00.000000000Z 1.4 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [_time, cpu] + _time:time cpu:string _stop:time _value:float _field:string _measurement:string _start:time +------------------------------ ---------------------- ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ +2018-11-05T21:35:00.000000000Z cpu2 2018-11-05T21:36:00.000000000Z 6.906906906906907 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [_time, cpu] + _time:time cpu:string _stop:time _value:float _field:string _measurement:string _start:time +------------------------------ ---------------------- ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ +2018-11-05T21:35:00.000000000Z cpu3 2018-11-05T21:36:00.000000000Z 1.3986013986013985 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [_time, cpu] + _time:time cpu:string _stop:time _value:float _field:string _measurement:string _start:time +------------------------------ ---------------------- ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ +2018-11-05T21:35:10.000000000Z cpu0 2018-11-05T21:36:00.000000000Z 9.2 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [_time, cpu] + _time:time cpu:string _stop:time _value:float _field:string _measurement:string _start:time +------------------------------ ---------------------- ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ +2018-11-05T21:35:10.000000000Z cpu1 2018-11-05T21:36:00.000000000Z 1.2 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [_time, cpu] + _time:time cpu:string _stop:time _value:float _field:string _measurement:string _start:time +------------------------------ ---------------------- ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ +2018-11-05T21:35:10.000000000Z cpu2 2018-11-05T21:36:00.000000000Z 5.7 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [_time, cpu] + _time:time cpu:string _stop:time _value:float _field:string _measurement:string _start:time +------------------------------ ---------------------- ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ +2018-11-05T21:35:10.000000000Z cpu3 2018-11-05T21:36:00.000000000Z 0.9 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [_time, cpu] + _time:time cpu:string _stop:time _value:float _field:string _measurement:string _start:time +------------------------------ ---------------------- ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ +2018-11-05T21:35:20.000000000Z cpu0 2018-11-05T21:36:00.000000000Z 8.4 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [_time, cpu] + _time:time cpu:string _stop:time _value:float _field:string _measurement:string _start:time +------------------------------ ---------------------- ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ +2018-11-05T21:35:20.000000000Z cpu1 2018-11-05T21:36:00.000000000Z 0.8 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [_time, cpu] + _time:time cpu:string _stop:time _value:float _field:string _measurement:string _start:time +------------------------------ ---------------------- ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ +2018-11-05T21:35:20.000000000Z cpu2 2018-11-05T21:36:00.000000000Z 5.1 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [_time, cpu] + _time:time cpu:string _stop:time _value:float _field:string _measurement:string _start:time +------------------------------ ---------------------- ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ +2018-11-05T21:35:20.000000000Z cpu3 2018-11-05T21:36:00.000000000Z 0.5005005005005005 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [_time, cpu] + _time:time cpu:string _stop:time _value:float _field:string _measurement:string _start:time +------------------------------ ---------------------- ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ +2018-11-05T21:35:30.000000000Z cpu0 2018-11-05T21:36:00.000000000Z 8.5 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [_time, cpu] + _time:time cpu:string _stop:time _value:float _field:string _measurement:string _start:time +------------------------------ ---------------------- ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ +2018-11-05T21:35:30.000000000Z cpu1 2018-11-05T21:36:00.000000000Z 0.8991008991008991 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [_time, cpu] + _time:time cpu:string _stop:time _value:float _field:string _measurement:string _start:time +------------------------------ ---------------------- ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ +2018-11-05T21:35:30.000000000Z cpu2 2018-11-05T21:36:00.000000000Z 4.7 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [_time, cpu] + _time:time cpu:string _stop:time _value:float _field:string _measurement:string _start:time +------------------------------ ---------------------- ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ +2018-11-05T21:35:30.000000000Z cpu3 2018-11-05T21:36:00.000000000Z 0.7 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [_time, cpu] + _time:time cpu:string _stop:time _value:float _field:string _measurement:string _start:time +------------------------------ ---------------------- ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ +2018-11-05T21:35:40.000000000Z cpu0 2018-11-05T21:36:00.000000000Z 8.6 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [_time, cpu] + _time:time cpu:string _stop:time _value:float _field:string _measurement:string _start:time +------------------------------ ---------------------- ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ +2018-11-05T21:35:40.000000000Z cpu1 2018-11-05T21:36:00.000000000Z 0.8008008008008008 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [_time, cpu] + _time:time cpu:string _stop:time _value:float _field:string _measurement:string _start:time +------------------------------ ---------------------- ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ +2018-11-05T21:35:40.000000000Z cpu2 2018-11-05T21:36:00.000000000Z 5.1 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [_time, cpu] + _time:time cpu:string _stop:time _value:float _field:string _measurement:string _start:time +------------------------------ ---------------------- ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ +2018-11-05T21:35:40.000000000Z cpu3 2018-11-05T21:36:00.000000000Z 0.6 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [_time, cpu] + _time:time cpu:string _stop:time _value:float _field:string _measurement:string _start:time +------------------------------ ---------------------- ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ +2018-11-05T21:35:50.000000000Z cpu0 2018-11-05T21:36:00.000000000Z 10.2 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [_time, cpu] + _time:time cpu:string _stop:time _value:float _field:string _measurement:string _start:time +------------------------------ ---------------------- ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ +2018-11-05T21:35:50.000000000Z cpu1 2018-11-05T21:36:00.000000000Z 0.999000999000999 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [_time, cpu] + _time:time cpu:string _stop:time _value:float _field:string _measurement:string _start:time +------------------------------ ---------------------- ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ +2018-11-05T21:35:50.000000000Z cpu2 2018-11-05T21:36:00.000000000Z 5.9 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [_time, cpu] + _time:time cpu:string _stop:time _value:float _field:string _measurement:string _start:time +------------------------------ ---------------------- ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ +2018-11-05T21:35:50.000000000Z cpu3 2018-11-05T21:36:00.000000000Z 0.8 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [_time, cpu] + _time:time cpu:string _stop:time _value:float _field:string _measurement:string _start:time +------------------------------ ---------------------- ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ +2018-11-05T21:36:00.000000000Z cpu0 2018-11-05T21:36:00.000000000Z 10.6 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [_time, cpu] + _time:time cpu:string _stop:time _value:float _field:string _measurement:string _start:time +------------------------------ ---------------------- ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ +2018-11-05T21:36:00.000000000Z cpu1 2018-11-05T21:36:00.000000000Z 1.1022044088176353 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [_time, cpu] + _time:time cpu:string _stop:time _value:float _field:string _measurement:string _start:time +------------------------------ ---------------------- ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ +2018-11-05T21:36:00.000000000Z cpu2 2018-11-05T21:36:00.000000000Z 6.4935064935064934 usage_system cpu 2018-11-05T21:34:00.000000000Z + +Table: keys: [_time, cpu] + _time:time cpu:string _stop:time _value:float _field:string _measurement:string _start:time +------------------------------ ---------------------- ------------------------------ ---------------------------- ---------------------- ---------------------- ------------------------------ +2018-11-05T21:36:00.000000000Z cpu3 2018-11-05T21:36:00.000000000Z 0.9 usage_system cpu 2018-11-05T21:34:00.000000000Z +``` +{{% /truncate %}} + +When visualized, tables appear as individual, unconnected points. + +![Group by CPU and time](/img/flux/grouping-by-cpu-time.png) + +Grouping by `cpu` and `_time` is a good illustration of how grouping works. + +## In conclusion +Grouping is a powerful way to shape your data into your desired output format. +It modifies the group keys of output tables, grouping records into tables that +all share common values within specified columns. diff --git a/content/flux/v0.x/guides/histograms.md b/content/flux/v0.x/guides/histograms.md new file mode 100644 index 0000000000..a8eb1ba559 --- /dev/null +++ b/content/flux/v0.x/guides/histograms.md @@ -0,0 +1,138 @@ +--- +title: How to create histograms with Flux +description: This guide walks through using the histogram() function to create cumulative histograms with Flux. +menu: + flux_0_x: + name: Create histograms + parent: Guides + weight: 7 +--- + + +Histograms provide valuable insight into the distribution of your data. +This guide walks through using Flux's `histogram()` function to transform your data into a **cumulative histogram**. + +## histogram() function +The [`histogram()` function](/flux/v0.x/stdlib/built-in/transformations/histogram) approximates the +cumulative distribution of a dataset by counting data frequencies for a list of "bins." +A **bin** is simply a range in which a data point falls. +All data points that are less than or equal to the bound are counted in the bin. +In the histogram output, a column is added (le) that represents the upper bounds of of each bin. +Bin counts are cumulative. + +```js +from(bucket:"telegraf/autogen") + |> range(start: -5m) + |> filter(fn: (r) => + r._measurement == "mem" and + r._field == "used_percent" + ) + |> histogram(bins: [0.0, 10.0, 20.0, 30.0]) +``` + +> Values output by the `histogram` function represent points of data aggregated over time. +> Since values do not represent single points in time, there is no `_time` column in the output table. + +## Bin helper functions +Flux provides two helper functions for generating histogram bins. +Each generates and outputs an array of floats designed to be used in the `histogram()` function's `bins` parameter. + +### linearBins() +The [`linearBins()` function](/flux/v0.x/stdlib/built-in/misc/linearbins) generates a list of linearly separated floats. + +```js +linearBins(start: 0.0, width: 10.0, count: 10) + +// Generated list: [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, +Inf] +``` + +### logarithmicBins() +The [`logarithmicBins()` function](/flux/v0.x/stdlib/built-in/misc/logarithmicbins) generates a list of exponentially separated floats. + +```js +logarithmicBins(start: 1.0, factor: 2.0, count: 10, infinty: true) + +// Generated list: [1, 2, 4, 8, 16, 32, 64, 128, 256, 512, +Inf] +``` + +## Examples + +### Generating a histogram with linear bins +```js +from(bucket:"telegraf/autogen") + |> range(start: -5m) + |> filter(fn: (r) => + r._measurement == "mem" and + r._field == "used_percent" + ) + |> histogram( + bins: linearBins( + start:65.5, + width: 0.5, + count: 20, + infinity:false + ) + ) +``` + +###### Output table +``` +Table: keys: [_start, _stop, _field, _measurement, host] + _start:time _stop:time _field:string _measurement:string host:string le:float _value:float +------------------------------ ------------------------------ ---------------------- ---------------------- ------------------------ ---------------------------- ---------------------------- +2018-11-07T22:19:58.423658000Z 2018-11-07T22:24:58.423658000Z used_percent mem Scotts-MacBook-Pro.local 65.5 5 +2018-11-07T22:19:58.423658000Z 2018-11-07T22:24:58.423658000Z used_percent mem Scotts-MacBook-Pro.local 66 6 +2018-11-07T22:19:58.423658000Z 2018-11-07T22:24:58.423658000Z used_percent mem Scotts-MacBook-Pro.local 66.5 8 +2018-11-07T22:19:58.423658000Z 2018-11-07T22:24:58.423658000Z used_percent mem Scotts-MacBook-Pro.local 67 9 +2018-11-07T22:19:58.423658000Z 2018-11-07T22:24:58.423658000Z used_percent mem Scotts-MacBook-Pro.local 67.5 9 +2018-11-07T22:19:58.423658000Z 2018-11-07T22:24:58.423658000Z used_percent mem Scotts-MacBook-Pro.local 68 10 +2018-11-07T22:19:58.423658000Z 2018-11-07T22:24:58.423658000Z used_percent mem Scotts-MacBook-Pro.local 68.5 12 +2018-11-07T22:19:58.423658000Z 2018-11-07T22:24:58.423658000Z used_percent mem Scotts-MacBook-Pro.local 69 12 +2018-11-07T22:19:58.423658000Z 2018-11-07T22:24:58.423658000Z used_percent mem Scotts-MacBook-Pro.local 69.5 15 +2018-11-07T22:19:58.423658000Z 2018-11-07T22:24:58.423658000Z used_percent mem Scotts-MacBook-Pro.local 70 23 +2018-11-07T22:19:58.423658000Z 2018-11-07T22:24:58.423658000Z used_percent mem Scotts-MacBook-Pro.local 70.5 30 +2018-11-07T22:19:58.423658000Z 2018-11-07T22:24:58.423658000Z used_percent mem Scotts-MacBook-Pro.local 71 30 +2018-11-07T22:19:58.423658000Z 2018-11-07T22:24:58.423658000Z used_percent mem Scotts-MacBook-Pro.local 71.5 30 +2018-11-07T22:19:58.423658000Z 2018-11-07T22:24:58.423658000Z used_percent mem Scotts-MacBook-Pro.local 72 30 +2018-11-07T22:19:58.423658000Z 2018-11-07T22:24:58.423658000Z used_percent mem Scotts-MacBook-Pro.local 72.5 30 +2018-11-07T22:19:58.423658000Z 2018-11-07T22:24:58.423658000Z used_percent mem Scotts-MacBook-Pro.local 73 30 +2018-11-07T22:19:58.423658000Z 2018-11-07T22:24:58.423658000Z used_percent mem Scotts-MacBook-Pro.local 73.5 30 +2018-11-07T22:19:58.423658000Z 2018-11-07T22:24:58.423658000Z used_percent mem Scotts-MacBook-Pro.local 74 30 +2018-11-07T22:19:58.423658000Z 2018-11-07T22:24:58.423658000Z used_percent mem Scotts-MacBook-Pro.local 74.5 30 +2018-11-07T22:19:58.423658000Z 2018-11-07T22:24:58.423658000Z used_percent mem Scotts-MacBook-Pro.local 75 30 +``` + +### Generating a histogram with logarithmic bins +```js +from(bucket:"telegraf/autogen") + |> range(start: -5m) + |> filter(fn: (r) => + r._measurement == "mem" and + r._field == "used_percent" + ) + |> histogram( + bins: logarithmicBins( + start:0.5, + factor: 2.0, + count: 10, + infinity:false + ) + ) +``` + +###### Output table +``` +Table: keys: [_start, _stop, _field, _measurement, host] + _start:time _stop:time _field:string _measurement:string host:string le:float _value:float +------------------------------ ------------------------------ ---------------------- ---------------------- ------------------------ ---------------------------- ---------------------------- +2018-11-07T22:23:36.860664000Z 2018-11-07T22:28:36.860664000Z used_percent mem Scotts-MacBook-Pro.local 0.5 0 +2018-11-07T22:23:36.860664000Z 2018-11-07T22:28:36.860664000Z used_percent mem Scotts-MacBook-Pro.local 1 0 +2018-11-07T22:23:36.860664000Z 2018-11-07T22:28:36.860664000Z used_percent mem Scotts-MacBook-Pro.local 2 0 +2018-11-07T22:23:36.860664000Z 2018-11-07T22:28:36.860664000Z used_percent mem Scotts-MacBook-Pro.local 4 0 +2018-11-07T22:23:36.860664000Z 2018-11-07T22:28:36.860664000Z used_percent mem Scotts-MacBook-Pro.local 8 0 +2018-11-07T22:23:36.860664000Z 2018-11-07T22:28:36.860664000Z used_percent mem Scotts-MacBook-Pro.local 16 0 +2018-11-07T22:23:36.860664000Z 2018-11-07T22:28:36.860664000Z used_percent mem Scotts-MacBook-Pro.local 32 0 +2018-11-07T22:23:36.860664000Z 2018-11-07T22:28:36.860664000Z used_percent mem Scotts-MacBook-Pro.local 64 2 +2018-11-07T22:23:36.860664000Z 2018-11-07T22:28:36.860664000Z used_percent mem Scotts-MacBook-Pro.local 128 30 +2018-11-07T22:23:36.860664000Z 2018-11-07T22:28:36.860664000Z used_percent mem Scotts-MacBook-Pro.local 256 30 +``` diff --git a/content/flux/v0.x/guides/join.md b/content/flux/v0.x/guides/join.md new file mode 100644 index 0000000000..e8d044805e --- /dev/null +++ b/content/flux/v0.x/guides/join.md @@ -0,0 +1,302 @@ +--- +title: How to join data with Flux +description: This guide walks through joining data with Flux and outlines how it shapes your data in the process. +menu: + flux_0_x: + name: Join data + parent: Guides + weight: 5 +--- + +The [`join()` function](/flux/v0.x/stdlib/built-in/transformations/join) merges two or more +input streams whose values are equal on a set of common columns into a single output stream. +Flux allows you to join on any columns common between two data streams and opens the door +for operations such as cross-measurement joins and math across measurements. + +To illustrate a join operation, use data captured by Telegraf and and stored in +InfluxDB with a default TICK stack installation - memory usage and processes. + +> If using the [InfluxData Sandbox](/platform/install-and-deploy/deploying/sandbox-install/) or other +> "Dockerized" instances of the TICK stack, these measurements may not be available. + +In this guide, we'll join two data streams, one representing memory usage and the other representing the +total number of running processes, then calculate the average memory usage per running process. + +## Define stream variables +In order to perform a join, you must have two streams of data. +Assign a variable to each data stream. + +### Memory used variable +Define a `memUsed` variable that filters on the `mem` measurement and the `used` field. +This returns the amount of memory (in bytes) used. + +###### memUsed stream definition +```js +memUsed = from(bucket: "telegraf/autogen") + |> range(start: -5m) + |> filter(fn: (r) => + r._measurement == "mem" and + r._field == "used" + ) +``` + +{{% truncate %}} +###### memUsed data output +``` +Table: keys: [_start, _stop, _field, _measurement, host] + _start:time _stop:time _field:string _measurement:string host:string _time:time _value:int +------------------------------ ------------------------------ ---------------------- ---------------------- ------------------------ ------------------------------ -------------------------- +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z used mem host1.local 2018-11-06T05:50:00.000000000Z 10956363056 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z used mem host1.local 2018-11-06T05:50:10.000000000Z 11014008832 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z used mem host1.local 2018-11-06T05:50:20.000000000Z 11373428736 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z used mem host1.local 2018-11-06T05:50:30.000000000Z 11001421824 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z used mem host1.local 2018-11-06T05:50:40.000000000Z 10985852928 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z used mem host1.local 2018-11-06T05:50:50.000000000Z 10992279552 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z used mem host1.local 2018-11-06T05:51:00.000000000Z 11053568000 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z used mem host1.local 2018-11-06T05:51:10.000000000Z 11092242432 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z used mem host1.local 2018-11-06T05:51:20.000000000Z 11612774400 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z used mem host1.local 2018-11-06T05:51:30.000000000Z 11131961344 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z used mem host1.local 2018-11-06T05:51:40.000000000Z 11124805632 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z used mem host1.local 2018-11-06T05:51:50.000000000Z 11362464640 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z used mem host1.local 2018-11-06T05:52:00.000000000Z 11176923136 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z used mem host1.local 2018-11-06T05:52:10.000000000Z 11181068288 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z used mem host1.local 2018-11-06T05:52:20.000000000Z 11182579712 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z used mem host1.local 2018-11-06T05:52:30.000000000Z 11238862848 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z used mem host1.local 2018-11-06T05:52:40.000000000Z 11275296768 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z used mem host1.local 2018-11-06T05:52:50.000000000Z 11225411584 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z used mem host1.local 2018-11-06T05:53:00.000000000Z 11252690944 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z used mem host1.local 2018-11-06T05:53:10.000000000Z 11227029504 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z used mem host1.local 2018-11-06T05:53:20.000000000Z 11201646592 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z used mem host1.local 2018-11-06T05:53:30.000000000Z 11227897856 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z used mem host1.local 2018-11-06T05:53:40.000000000Z 11360428928 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z used mem host1.local 2018-11-06T05:53:50.000000000Z 11347976192 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z used mem host1.local 2018-11-06T05:54:00.000000000Z 11368271872 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z used mem host1.local 2018-11-06T05:54:10.000000000Z 11269623808 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z used mem host1.local 2018-11-06T05:54:20.000000000Z 11295637504 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z used mem host1.local 2018-11-06T05:54:30.000000000Z 11354423296 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z used mem host1.local 2018-11-06T05:54:40.000000000Z 11379687424 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z used mem host1.local 2018-11-06T05:54:50.000000000Z 11248926720 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z used mem host1.local 2018-11-06T05:55:00.000000000Z 11292524544 +``` +{{% /truncate %}} + +### Total processes variable +Define a `procTotal` variable that filters on the `processes` measurement and the `total` field. +This returns the number of running processes. + +###### procTotal stream definition +```js +procTotal = from(bucket: "telegraf/autogen") + |> range(start: -5m) + |> filter(fn: (r) => + r._measurement == "processes" and + r._field == "total" + ) +``` + +{{% truncate %}} +###### procTotal data output +``` +Table: keys: [_start, _stop, _field, _measurement, host] + _start:time _stop:time _field:string _measurement:string host:string _time:time _value:int +------------------------------ ------------------------------ ---------------------- ---------------------- ------------------------ ------------------------------ -------------------------- +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z total processes host1.local 2018-11-06T05:50:00.000000000Z 470 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z total processes host1.local 2018-11-06T05:50:10.000000000Z 470 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z total processes host1.local 2018-11-06T05:50:20.000000000Z 471 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z total processes host1.local 2018-11-06T05:50:30.000000000Z 470 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z total processes host1.local 2018-11-06T05:50:40.000000000Z 469 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z total processes host1.local 2018-11-06T05:50:50.000000000Z 471 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z total processes host1.local 2018-11-06T05:51:00.000000000Z 470 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z total processes host1.local 2018-11-06T05:51:10.000000000Z 470 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z total processes host1.local 2018-11-06T05:51:20.000000000Z 470 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z total processes host1.local 2018-11-06T05:51:30.000000000Z 470 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z total processes host1.local 2018-11-06T05:51:40.000000000Z 469 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z total processes host1.local 2018-11-06T05:51:50.000000000Z 471 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z total processes host1.local 2018-11-06T05:52:00.000000000Z 471 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z total processes host1.local 2018-11-06T05:52:10.000000000Z 470 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z total processes host1.local 2018-11-06T05:52:20.000000000Z 470 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z total processes host1.local 2018-11-06T05:52:30.000000000Z 471 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z total processes host1.local 2018-11-06T05:52:40.000000000Z 472 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z total processes host1.local 2018-11-06T05:52:50.000000000Z 471 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z total processes host1.local 2018-11-06T05:53:00.000000000Z 470 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z total processes host1.local 2018-11-06T05:53:10.000000000Z 470 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z total processes host1.local 2018-11-06T05:53:20.000000000Z 470 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z total processes host1.local 2018-11-06T05:53:30.000000000Z 471 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z total processes host1.local 2018-11-06T05:53:40.000000000Z 471 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z total processes host1.local 2018-11-06T05:53:50.000000000Z 471 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z total processes host1.local 2018-11-06T05:54:00.000000000Z 471 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z total processes host1.local 2018-11-06T05:54:10.000000000Z 470 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z total processes host1.local 2018-11-06T05:54:20.000000000Z 471 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z total processes host1.local 2018-11-06T05:54:30.000000000Z 473 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z total processes host1.local 2018-11-06T05:54:40.000000000Z 471 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z total processes host1.local 2018-11-06T05:54:50.000000000Z 471 +2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z total processes host1.local 2018-11-06T05:55:00.000000000Z 471 +``` +{{% /truncate %}} + +## Join the two data streams +With the two data streams defined, use the `join()` function to join them together. +`join()` requires two parameters: + +##### `tables` +A map of tables to join with keys by which they will be aliased. +In the example below, `mem` is the alias for `memUsed` and `proc` is the alias for `procTotal`. + +##### `on` +An array of strings defining the columns on which the tables will be joined. +_**Both tables must have all columns defined in this list.**_ + +```js +join( + tables: {mem:memUsed, proc:procTotal}, + on: ["_time", "_stop", "_start", "host"] +) +``` + +{{% truncate %}} +###### Joined output table +``` +Table: keys: [_field_mem, _field_proc, _measurement_mem, _measurement_proc, _start, _stop, host] + _field_mem:string _field_proc:string _measurement_mem:string _measurement_proc:string _start:time _stop:time host:string _time:time _value_mem:int _value_proc:int +---------------------- ---------------------- ----------------------- ------------------------ ------------------------------ ------------------------------ ------------------------ ------------------------------ -------------------------- -------------------------- + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:50:00.000000000Z 10956363056 470 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:50:10.000000000Z 11014008832 470 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:50:20.000000000Z 11373428736 471 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:50:30.000000000Z 11001421824 470 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:50:40.000000000Z 10985852928 469 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:50:50.000000000Z 10992279552 471 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:51:00.000000000Z 11053568000 470 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:51:10.000000000Z 11092242432 470 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:51:20.000000000Z 11612774400 470 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:51:30.000000000Z 11131961344 470 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:51:40.000000000Z 11124805632 469 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:51:50.000000000Z 11362464640 471 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:52:00.000000000Z 11176923136 471 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:52:10.000000000Z 11181068288 470 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:52:20.000000000Z 11182579712 470 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:52:30.000000000Z 11238862848 471 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:52:40.000000000Z 11275296768 472 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:52:50.000000000Z 11225411584 471 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:53:00.000000000Z 11252690944 470 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:53:10.000000000Z 11227029504 470 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:53:20.000000000Z 11201646592 470 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:53:30.000000000Z 11227897856 471 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:53:40.000000000Z 11360428928 471 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:53:50.000000000Z 11347976192 471 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:54:00.000000000Z 11368271872 471 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:54:10.000000000Z 11269623808 470 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:54:20.000000000Z 11295637504 471 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:54:30.000000000Z 11354423296 473 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:54:40.000000000Z 11379687424 471 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:54:50.000000000Z 11248926720 471 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:55:00.000000000Z 11292524544 471 +``` +{{% /truncate %}} + +Notice the output table includes the following columns: + +- `_field_mem` +- `_field_proc` +- `_measurement_mem` +- `_measurement_proc` +- `_value_mem` +- `_value_proc` + +These represent the columns with values unique to the two input tables. + +## Calculate and create a new table +With the two streams of data joined into a single table, use the [`map()` function](/flux/v0.x/stdlib/built-in/transformations/map) +to build a new table by mapping the existing `_time` column to a new `_time` column and dividing `_value_mem` by `_value_proc` +and mapping it to a new `_value` column. + +```js +join(tables: {mem:memUsed, proc:procTotal}, on: ["_time", "_stop", "_start", "host"]) + |> map(fn: (r) => ({ + _time: r._time, + _value: r._value_mem / r._value_proc + })) +``` + +{{% truncate %}} +###### Mapped table +``` +Table: keys: [_field_mem, _field_proc, _measurement_mem, _measurement_proc, _start, _stop, host] + _field_mem:string _field_proc:string _measurement_mem:string _measurement_proc:string _start:time _stop:time host:string _time:time _value:int +---------------------- ---------------------- ----------------------- ------------------------ ------------------------------ ------------------------------ ------------------------ ------------------------------ -------------------------- + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:50:00.000000000Z 23611346 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:50:10.000000000Z 23434061 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:50:20.000000000Z 24147407 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:50:30.000000000Z 23407280 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:50:40.000000000Z 23423993 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:50:50.000000000Z 23638173 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:51:00.000000000Z 23518229 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:51:10.000000000Z 23600515 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:51:20.000000000Z 24708030 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:51:30.000000000Z 23685024 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:51:40.000000000Z 23720267 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:51:50.000000000Z 24060434 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:52:00.000000000Z 23730197 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:52:10.000000000Z 23789506 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:52:20.000000000Z 23792722 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:52:30.000000000Z 23861704 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:52:40.000000000Z 23888340 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:52:50.000000000Z 23836145 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:53:00.000000000Z 23941895 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:53:10.000000000Z 23887296 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:53:20.000000000Z 23836290 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:53:30.000000000Z 23838424 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:53:40.000000000Z 24056112 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:53:50.000000000Z 24093667 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:54:00.000000000Z 24136458 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:54:10.000000000Z 23977922 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:54:20.000000000Z 23982245 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:54:30.000000000Z 24005123 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:54:40.000000000Z 24160695 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:54:50.000000000Z 23883071 + used total mem processes 2018-11-06T05:50:00.000000000Z 2018-11-06T05:55:00.000000000Z Scotts-MacBook-Pro.local 2018-11-06T05:55:00.000000000Z 23975635 +``` +{{% /truncate %}} + +This table represents the average amount of memory in bytes per running process. + + +## Real world example +The following function calculates the batch sizes written to an InfluxDB cluster by joining +fields from `httpd` and `write` measurements in order to compare `pointReq` and `writeReq`. +The results are grouped by cluster ID so you can make comparisons across clusters. + +```js +batchSize = (cluster_id, start=-1m, interval=10s) => { + httpd = from(bucket:"telegraf") + |> range(start:start) + |> filter(fn:(r) => + r._measurement == "influxdb_httpd" and + r._field == "writeReq" and + r.cluster_id == cluster_id + ) + |> aggregateWindow(every: interval, fn: mean) + |> derivative(nonNegative:true,unit:60s) + + write = from(bucket:"telegraf") + |> range(start:start) + |> filter(fn:(r) => + r._measurement == "influxdb_write" and + r._field == "pointReq" and + r.cluster_id == cluster_id + ) + |> aggregateWindow(every: interval, fn: max) + |> derivative(nonNegative:true,unit:60s) + + return join( + tables:{httpd:httpd, write:write}, + on:["_time","_stop","_start","host"] + ) + |> map(fn:(r) => ({ + _time: r._time, + _value: r._value_httpd / r._value_write, + })) + |> group(columns: cluster_id) +} + +batchSize(cluster_id: "enter cluster id here") +``` diff --git a/content/flux/v0.x/guides/manipulate-timestamps.md b/content/flux/v0.x/guides/manipulate-timestamps.md new file mode 100644 index 0000000000..1bb0ef8961 --- /dev/null +++ b/content/flux/v0.x/guides/manipulate-timestamps.md @@ -0,0 +1,108 @@ +--- +title: Manipulate timestamps with Flux +description: > + Use Flux to process and manipulate timestamps. +menu: + flux_0_x: + name: Manipulate timestamps + parent: Guides +weight: 9 +--- + +Every point stored in InfluxDB has an associated timestamp. +Use Flux to process and manipulate timestamps to suit your needs. + +- [Convert timestamp format](#convert-timestamp-format) +- [Time-related Flux functions](#time-related-flux-functions) + +## Convert timestamp format + +### Convert nanosecond epoch timestamp to RFC3339 +Use the [`time()` function](/flux/v0.x/stdlib/built-in/transformations/type-conversions/time/) +to convert a **nanosecond** epoch timestamp to an RFC3339 timestamp. + +```js +time(v: 1568808000000000000) +// Returns 2019-09-18T12:00:00.000000000Z +``` + +### Convert RFC3339 to nanosecond epoch timestamp +Use the [`uint()` function](/flux/v0.x/stdlib/built-in/transformations/type-conversions/uint/) +to convert an RFC3339 timestamp to a nanosecond epoch timestamp. + +```js +uint(v: 2019-09-18T12:00:00.000000000Z) +// Returns 1568808000000000000 +``` + +### Calculate the duration between two timestamps +Flux doesn't support mathematical operations using [time type](/flux/v0.x/language/types/#time-types) values. +To calculate the duration between two timestamps: + +1. Use the `uint()` function to convert each timestamp to a nanosecond epoch timestamp. +2. Subtract one nanosecond epoch timestamp from the other. +3. Use the `duration()` function to convert the result into a duration. + +```js +time1 = uint(v: 2019-09-17T21:12:05Z) +time2 = uint(v: 2019-09-18T22:16:35Z) + +duration(v: time2 - time1) +// Returns 25h4m30s +``` + +{{% note %}} +Flux doesn't support duration column types. +To store a duration in a column, use the [`string()` function](/flux/v0.x/stdlib/built-in/transformations/type-conversions/string/) +to convert the duration to a string. +{{% /note %}} + +## Time-related Flux functions + +### Retrieve the current time +Use the [`now()` function](/flux/v0.x/stdlib/built-in/misc/now/) to +return the current UTC time in RFC3339 format. + +```js +now() +``` + +### Add a duration to a timestamp +The [`experimental.addDuration()` function](/flux/v0.x/stdlib/experimental/addduration/) +adds a duration to a specified time and returns the resulting time. + +{{% warn %}} +By using `experimental.addDuration()`, you accept the +[risks of experimental functions](/flux/v0.x/stdlib/experimental/#use-experimental-functions-at-your-own-risk). +{{% /warn %}} + +```js +import "experimental" + +experimental.addDuration( + d: 6h, + to: 2019-09-16T12:00:00Z, +) + +// Returns 2019-09-16T18:00:00.000000000Z +``` + +### Subtract a duration from a timestamps +The [`experimental.addDuration()` function](/flux/v0.x/stdlib/experimental/subduration/) +subtracts a duration from a specified time and returns the resulting time. + +{{% warn %}} +By using `experimental.addDuration()`, you accept the +[risks of experimental functions](/flux/v0.x/stdlib/experimental/#use-experimental-functions-at-your-own-risk). +{{% /warn %}} + +```js +import "experimental" + +experimental.subDuration( + d: 6h, + from: 2019-09-16T12:00:00Z, +) + +// Returns 2019-09-16T06:00:00.000000000Z +``` diff --git a/content/flux/v0.x/guides/mathematic-operations.md b/content/flux/v0.x/guides/mathematic-operations.md new file mode 100644 index 0000000000..1885d120e2 --- /dev/null +++ b/content/flux/v0.x/guides/mathematic-operations.md @@ -0,0 +1,250 @@ +--- +title: Transform data with mathematic operations +description: This guide describes how to use Flux to transform data with mathematic operations. +menu: + flux_0_x: + name: Transform data with math + parent: Guides +weight: 9 +--- + +Flux supports mathematic expressions in data transformations. +This article describes how to use [Flux arithmetic operators](/flux/v0.x/language/operators/#arithmetic-operators) +to "map" over data and transform values using mathematic operations. + +##### Basic mathematic operations +```js +// Examples executed using influx -type=flux +> 9 + 9 +18 +> 22 - 14 +8 +> 6 * 5 +30 +> 21 / 7 +3 +``` + +

See Influx CLI in "Flux mode"

+ +{{% note %}} +#### Operands must be the same type +Operands in Flux mathematic operations must be the same data type. +For example, integers cannot be used in operations with floats. +Otherwise, you will get an error similar to: + +``` +Error: type error: float != int +``` + +To convert operands to the same type, use [type-conversion functions](/flux/v0.x/stdlib/built-in/transformations/type-conversions/) +or manually format operands. +The operand data type determines the output data type. +For example: + +```js +100 // Parsed as an integer +100.0 // Parsed as a float + +// Example evaluations +> 20 / 8 +2 + +> 20.0 / 8.0 +2.5 +``` +{{% /note %}} + +## Custom mathematic functions +Flux lets you [create custom functions](/flux/v0.x/stdlib/custom-functions) that use mathematic operations. +View the examples below. + +###### Custom multiplication function +```js +multiply = (x, y) => x * y + +multiply(x: 10, y: 12) +// Returns 120 +``` + +###### Custom percentage function +```js +percent = (sample, total) => (sample / total) * 100.0 + +percent(sample: 20.0, total: 80.0) +// Returns 25.0 +``` + +### Transform values in a data stream +To transform multiple values in an input stream, your function needs to: + +- [Handle piped-forward data](/flux/v0.x/stdlib/custom-functions/#functions-that-manipulate-pipe-forwarded-data). +- Use the [`map()` function](/flux/v0.x/stdlib/built-in/transformations/map) to iterate over each row. + +The example `multiplyByX()` function below includes: + +- A `tables` parameter that represents the input data stream (`<-`). +- An `x` parameter which is the number by which values in the `_value` column are multiplied. +- A `map()` function that iterates over each row in the input stream. + It uses the `with` operator to preserve existing columns in each row. + It also multiples the `_value` column by `x`. + +```js +multiplyByX = (x, tables=<-) => + tables + |> map(fn: (r) => ({ + r with + _value: r._value * x + }) + ) + +data + |> multiplyByX(x: 10) +``` + +## Examples + +### Convert bytes to gigabytes +To convert active memory from bytes to gigabytes (GB), divide the `active` field +in the `mem` measurement by 1,073,741,824. + +The `map()` function iterates over each row in the piped-forward data and defines +a new `_value` by dividing the original `_value` by 1073741824. + +```js +from(bucket: "telegraf/autogen") + |> range(start: -10m) + |> filter(fn: (r) => + r._measurement == "mem" and + r._field == "active" + ) + |> map(fn: (r) => ({ + r with + _value: r._value / 1073741824 + }) + ) +``` + +You could turn that same calculation into a function: + +```js +bytesToGB = (tables=<-) => + tables + |> map(fn: (r) => ({ + r with + _value: r._value / 1073741824 + }) + ) + +data + |> bytesToGB() +``` + +#### Include partial gigabytes +Because the original metric (bytes) is an integer, the output of the operation is an integer and does not include partial GBs. +To calculate partial GBs, convert the `_value` column and its values to floats using the +[`float()` function](/flux/v0.x/stdlib/built-in/transformations/type-conversions/float) +and format the denominator in the division operation as a float. + +```js +bytesToGB = (tables=<-) => + tables + |> map(fn: (r) => ({ + r with + _value: float(v: r._value) / 1073741824.0 + }) + ) +``` + +### Calculate a percentage +To calculate a percentage, use simple division, then multiply the result by 100. + +{{% note %}} +Operands in percentage calculations should always be floats. +{{% /note %}} + +```js +> 1.0 / 4.0 * 100.0 +25.0 +``` + +#### User vs system CPU usage +The example below calculates the percentage of total CPU used by the `user` vs the `system`. + +{{< code-tabs-wrapper >}} +{{% code-tabs %}} +[Comments](#) +[No Comments](#) +{{% /code-tabs %}} + +{{% code-tab-content %}} +```js +// Custom function that converts usage_user and +// usage_system columns to floats +usageToFloat = (tables=<-) => + tables + |> map(fn: (r) => ({ + _time: r._time, + usage_user: float(v: r.usage_user), + usage_system: float(v: r.usage_system) + }) + ) + +// Define the data source and filter user and system CPU usage +// from 'cpu-total' in the 'cpu' measurement +from(bucket: "telegraf/autogen") + |> range(start: -1h) + |> filter(fn: (r) => + r._measurement == "cpu" and + r._field == "usage_user" or + r._field == "usage_system" and + r.cpu == "cpu-total" + ) + + // Pivot the output tables so usage_user and usage_system are in each row + |> pivot(rowKey: ["_time"], columnKey: ["_field"], valueColumn: "_value") + + // Convert usage_user and usage_system to floats + |> usageToFloat() + + // Map over each row and calculate the percentage of + // CPU used by the user vs the system + |> map(fn: (r) => ({ + r with + usage_user: r.usage_user / (r.usage_user + r.usage_system) * 100.0, + usage_system: r.usage_system / (r.usage_user + r.usage_system) * 100.0 + }) + ) +``` +{{% /code-tab-content %}} + +{{% code-tab-content %}} +```js +usageToFloat = (tables=<-) => + tables + |> map(fn: (r) => ({ + _time: r._time, + usage_user: float(v: r.usage_user), + usage_system: float(v: r.usage_system) + }) + ) + +from(bucket: "telegraf/autogen") + |> range(start: timeRangeStart, stop: timeRangeStop) + |> filter(fn: (r) => + r._measurement == "cpu" and + r._field == "usage_user" or + r._field == "usage_system" and + r.cpu == "cpu-total" + ) + |> pivot(rowKey: ["_time"], columnKey: ["_field"], valueColumn: "_value") + |> usageToFloat() + |> map(fn: (r) => ({ + _time: r._time, + usage_user: r.usage_user / (r.usage_user + r.usage_system) * 100.0, + usage_system: r.usage_system / (r.usage_user + r.usage_system) * 100.0 + }) + ) +``` +{{% /code-tab-content %}} +{{< /code-tabs-wrapper >}} diff --git a/content/flux/v0.x/guides/regular-expressions.md b/content/flux/v0.x/guides/regular-expressions.md new file mode 100644 index 0000000000..d21dadf50b --- /dev/null +++ b/content/flux/v0.x/guides/regular-expressions.md @@ -0,0 +1,84 @@ +--- +title: How to use regular expressions in Flux +description: This guide walks through using regular expressions in evaluation logic in Flux functions. +menu: + flux_0_x: + name: Regular expressions + parent: Guides + weight: 7 +--- + +Regular expressions (regexes) are incredibly powerful when matching patterns in large collections of data. +With Flux, regular expressions are primarily used for evaluation logic in operations such as filtering rows, +dropping and keeping columns, state detection, etc. +This guide shows how to use regular expressions in your Flux scripts. + +## Go regular expression syntax +Flux uses Go's [regexp package](https://golang.org/pkg/regexp/) for regular expression search. +The links [below](#helpful-links) provide information about Go's regular expression syntax. + +## Regular expression operators +Flux provides two comparison operators for use with regular expressions. + +#### `=~` +When the expression on the left **MATCHES** the regular expression on the right, this evaluates to `true`. + +#### `!~` +When the expression on the left **DOES NOT MATCH** the regular expression on the right, this evaluates to `true`. + +## Regular expressions in Flux +When using regex matching in your Flux scripts, enclose your regular expressions with `/`. +The following is the basic regex comparison syntax: + +###### Basic regex comparison syntax +```js +expression =~ /regex/ +expression !~ /regex/ +``` +## Examples + +### Use a regex to filter by tag value +The following example filters records by the `cpu` tag. +It only keeps records for which the `cpu` is either `cpu0`, `cpu1`, or `cpu2`. + +```js +from(bucket: "telegraf/autogen") + |> range(start: -15m) + |> filter(fn: (r) => + r._measurement == "cpu" and + r._field == "usage_user" and + r.cpu =~ /cpu[0-2]/ + ) +``` + +### Use a regex to filter by field key +The following example excludes records that have `_percent` in a field key. + +```js +from(bucket: "telegraf/autogen") + |> range(start: -15m) + |> filter(fn: (r) => + r._measurement == "mem" AND + r._field !~ /_percent/ + ) +``` + +### Drop columns matching a regex +The following example drops columns whose names do not being with `_`. + +```js +from(bucket: "telegraf/autogen") + |> range(start: -15m) + |> filter(fn: (r) => r._measurement == "mem") + |> drop(fn: (column) => column !~ /_.*/) +``` + +## Helpful links + +##### Syntax documentation +[regexp Syntax GoDoc](https://godoc.org/regexp/syntax) +[RE2 Syntax Overview](https://github.com/google/re2/wiki/Syntax) + +##### Go regex testers +[Regex Tester - Golang](https://regex-golang.appspot.com/assets/html/index.html) +[Regex101](https://regex101.com/) diff --git a/content/flux/v0.x/guides/sort-limit.md b/content/flux/v0.x/guides/sort-limit.md new file mode 100644 index 0000000000..b59e565e0e --- /dev/null +++ b/content/flux/v0.x/guides/sort-limit.md @@ -0,0 +1,44 @@ +--- +title: How to sort and limit data with Flux +description: This guide walks through sorting and limiting data with Flux and outlines how it shapes your data in the process. +menu: + flux_0_x: + name: Sort and limit data + parent: Guides + weight: 6 +--- + +The [`sort()`function](/flux/v0.x/stdlib/built-in/transformations/sort) orders the records within each table. The following example orders system uptime first by region, then host, then value. + +```js +from(bucket:"telegraf/autogen") + |> range(start:-12h) + |> filter(fn: (r) => + r._measurement == "system" and + r._field == "uptime" + ) + |> sort(columns:["region", "host", "_value"]) +``` + +The [`limit()` function](/flux/v0.x/stdlib/built-in/transformations/limit) limit the number of records in output tables to a fixed number (n). The following example shows up to 10 records from the past hour. + +```js +from(bucket:"telegraf/autogen") + |> range(start:-1h) + |> limit(n:10) +``` + +You can use `sort()` and `limit()` together to show the top N records. The example below returns the 10 top system uptime values sorted first by region, then host, then value. + +```js +from(bucket:"telegraf/autogen") + |> range(start:-12h) + |> filter(fn: (r) => + r._measurement == "system" and + r._field == "uptime" + ) + |> sort(columns:["region", "host", "_value"]) + |> limit(n:10) +``` + +You now have created a Flux query that sorts and limits data. Flux also provides the [`top()](/flux/v0.x/stdlib/built-in/transformations/selectors/top) and [`bottom()`](/flux/v0.x/stdlib/built-in/transformations/selectors/bottom) function to perform both of these functions at the same time. diff --git a/content/flux/v0.x/guides/sql.md b/content/flux/v0.x/guides/sql.md new file mode 100644 index 0000000000..8e2f45d161 --- /dev/null +++ b/content/flux/v0.x/guides/sql.md @@ -0,0 +1,184 @@ +--- +title: Query SQL data sources +seotitle: Query SQL data sources with InfluxDB +description: > + The Flux `sql` package provides functions for working with SQL data sources. + Use `sql.from()` to query SQL databases like PostgreSQL and MySQL +menu: + flux_0_x: + parent: Guides + weight: 7 +--- + +The [Flux](/flux/v0.x) `sql` package provides functions for working with SQL data sources. +[`sql.from()`](/flux/v0.x/stdlib/sql/from/) lets you query SQL data sources +like [PostgreSQL](https://www.postgresql.org/) and [MySQL](https://www.mysql.com/) +and use the results with InfluxDB dashboards and other operations. + +- [Query a SQL data source](#query-a-sql-data-source) +- [Join SQL data with data in InfluxDB](#join-sql-data-with-data-in-influxdb) +- [Sample sensor data](#sample-sensor-data) + +## Query a SQL data source +To query a SQL data source: + +1. Import the `sql` package in your Flux query +2. Use the `sql.from()` function to specify the driver, data source name (DSN), + and query used to query data from your SQL data source: + +{{< code-tabs-wrapper >}} +{{% code-tabs %}} +[PostgreSQL](#) +[MySQL](#) +{{% /code-tabs %}} + +{{% code-tab-content %}} +```js +import "sql" + +sql.from( + driverName: "postgres", + dataSourceName: "postgresql://user:password@localhost", + query: "SELECT * FROM example_table" +) +``` +{{% /code-tab-content %}} + +{{% code-tab-content %}} +```js +import "sql" + +sql.from( + driverName: "mysql", + dataSourceName: "user:password@tcp(localhost:3306)/db", + query: "SELECT * FROM example_table" +) +``` +{{% /code-tab-content %}} +{{< /code-tabs-wrapper >}} + +_See the [`sql.from()` documentation](/flux/v0.x/stdlib/sql/from/) for +information about required function parameters._ + +## Join SQL data with data in InfluxDB +One of the primary benefits of querying SQL data sources from InfluxDB +is the ability to enrich query results with data stored outside of InfluxDB. + +Using the [air sensor sample data](#sample-sensor-data) below, the following query +joins air sensor metrics stored in InfluxDB with sensor information stored in PostgreSQL. +The joined data lets you query and filter results based on sensor information +that isn't stored in InfluxDB. + +```js +// Import the "sql" package +import "sql" + +// Query data from PostgreSQL +sensorInfo = sql.from( + driverName: "postgres", + dataSourceName: "postgresql://localhost?sslmode=disable", + query: "SELECT * FROM sensors" +) + +// Query data from InfluxDB +sensorMetrics = from(bucket: "telegraf/autogen") + |> range(start: -1h) + |> filter(fn: (r) => r._measurement == "airSensors") + +// Join InfluxDB query results with PostgreSQL query results +join(tables: {metric: sensorMetrics, info: sensorInfo}, on: ["sensor_id"]) +``` + +--- + +## Sample sensor data +The [sample data generator](#download-and-run-the-sample-data-generator) and +[sample sensor information](#import-the-sample-sensor-information) simulate a +group of sensors that measure temperature, humidity, and carbon monoxide +in rooms throughout a building. +Each collected data point is stored in InfluxDB with a `sensor_id` tag that identifies +the specific sensor it came from. +Sample sensor information is stored in PostgreSQL. + +**Sample data includes:** + +- Simulated data collected from each sensor and stored in the `airSensors` measurement in **InfluxDB**: + - temperature + - humidity + - co + +- Information about each sensor stored in the `sensors` table in **PostgreSQL**: + - sensor_id + - location + - model_number + - last_inspected + +### Import and generate sample sensor data + +#### Download and run the sample data generator +`air-sensor-data.rb` is a script that generates air sensor data and stores the data in InfluxDB. +To use `air-sensor-data.rb`: + +1. [Create a database](/influxdb/latest/introduction/getting-started/#creating-a-database) to store the data. +2. Download the sample data generator. _This tool requires [Ruby](https://www.ruby-lang.org/en/)._ + + Download Air Sensor Generator + +3. Give `air-sensor-data.rb` executable permissions: + + ``` + chmod +x air-sensor-data.rb + ``` + +4. Start the generator. Specify your database. + + ``` + ./air-sensor-data.rb -d database-name + ``` + + The generator begins to write data to InfluxDB and will continue until stopped. + Use `ctrl-c` to stop the generator. + + _**Note:** Use the `--help` flag to view other configuration options._ + + +5. Query your target database to ensure the generated data is writing successfully. + The generator doesn't catch errors from write requests, so it will continue running + even if data is not writing to InfluxDB successfully. + + ``` + from(bucket: "database-name/autogen") + |> range(start: -1m) + |> filter(fn: (r) => r._measurement == "airSensors") + ``` + +#### Import the sample sensor information +1. [Download and install PostgreSQL](https://www.postgresql.org/download/). +2. Download the sample sensor information CSV. + + Download Sample Data + +3. Use a PostgreSQL client (`psql` or a GUI) to create the `sensors` table: + + ``` + CREATE TABLE sensors ( + sensor_id character varying(50), + location character varying(50), + model_number character varying(50), + last_inspected date + ); + ``` + +4. Import the downloaded CSV sample data. + _Update the `FROM` file path to the path of the downloaded CSV sample data._ + + ``` + COPY sensors(sensor_id,location,model_number,last_inspected) + FROM '/path/to/sample-sensor-info.csv' DELIMITER ',' CSV HEADER; + ``` + +5. Query the table to ensure the data was imported correctly: + + ``` + SELECT * FROM sensors; + ``` diff --git a/content/flux/v0.x/guides/windowing-aggregating.md b/content/flux/v0.x/guides/windowing-aggregating.md new file mode 100644 index 0000000000..3b613e7bb6 --- /dev/null +++ b/content/flux/v0.x/guides/windowing-aggregating.md @@ -0,0 +1,328 @@ +--- +title: How to window and aggregate data with Flux +description: This guide walks through windowing and aggregating data with Flux and outlines how it shapes your data in the process. +menu: + flux_0_x: + name: Window and aggregate data + parent: Guides + weight: 2 +--- + +A common operation performed with time series data is grouping data into windows of time, +or "windowing" data, then aggregating windowed values into a new value. +This guide walks through windowing and aggregating data with Flux and demonstrates +how data is shaped in the process. + +> The following example is an in-depth walk through of the steps required to window and aggregate data. +> The [`aggregateWindow()` function](#summing-up) performs these operations for you, but understanding +> how data is shaped in the process helps to successfully create your desired output. + +## Data set +For the purposes of this guide, define a variable that represents your base data set. +The following example queries the memory usage of the host machine. + +```js +dataSet = from(bucket: "telegraf/autogen") + |> range(start: -5m) + |> filter(fn: (r) => + r._measurement == "mem" and + r._field == "used_percent" + ) + |> drop(columns: ["host"]) +``` + +> This example drops the `host` column from the returned data since the memory data +> is only tracked for a single host and it simplifies the output tables. +> Dropping the `host` column is column is optional and not recommended if monitoring memory +> on multiple hosts. + +`dataSet` can now be used to represent your base data, which will look similar to the following: + +{{% truncate %}} +``` +Table: keys: [_start, _stop, _field, _measurement] + _start:time _stop:time _field:string _measurement:string _time:time _value:float +------------------------------ ------------------------------ ---------------------- ---------------------- ------------------------------ ---------------------------- +2018-11-03T17:50:00.000000000Z 2018-11-03T17:55:00.000000000Z used_percent mem 2018-11-03T17:50:00.000000000Z 71.11611366271973 +2018-11-03T17:50:00.000000000Z 2018-11-03T17:55:00.000000000Z used_percent mem 2018-11-03T17:50:10.000000000Z 67.39630699157715 +2018-11-03T17:50:00.000000000Z 2018-11-03T17:55:00.000000000Z used_percent mem 2018-11-03T17:50:20.000000000Z 64.16666507720947 +2018-11-03T17:50:00.000000000Z 2018-11-03T17:55:00.000000000Z used_percent mem 2018-11-03T17:50:30.000000000Z 64.19951915740967 +2018-11-03T17:50:00.000000000Z 2018-11-03T17:55:00.000000000Z used_percent mem 2018-11-03T17:50:40.000000000Z 64.2122745513916 +2018-11-03T17:50:00.000000000Z 2018-11-03T17:55:00.000000000Z used_percent mem 2018-11-03T17:50:50.000000000Z 64.22209739685059 +2018-11-03T17:50:00.000000000Z 2018-11-03T17:55:00.000000000Z used_percent mem 2018-11-03T17:51:00.000000000Z 64.6366555480957 +2018-11-03T17:50:00.000000000Z 2018-11-03T17:55:00.000000000Z used_percent mem 2018-11-03T17:51:10.000000000Z 64.16516304016113 +2018-11-03T17:50:00.000000000Z 2018-11-03T17:55:00.000000000Z used_percent mem 2018-11-03T17:51:20.000000000Z 64.18349742889404 +2018-11-03T17:50:00.000000000Z 2018-11-03T17:55:00.000000000Z used_percent mem 2018-11-03T17:51:30.000000000Z 64.20474052429199 +2018-11-03T17:50:00.000000000Z 2018-11-03T17:55:00.000000000Z used_percent mem 2018-11-03T17:51:40.000000000Z 68.65062713623047 +2018-11-03T17:50:00.000000000Z 2018-11-03T17:55:00.000000000Z used_percent mem 2018-11-03T17:51:50.000000000Z 67.20139980316162 +2018-11-03T17:50:00.000000000Z 2018-11-03T17:55:00.000000000Z used_percent mem 2018-11-03T17:52:00.000000000Z 70.9143877029419 +2018-11-03T17:50:00.000000000Z 2018-11-03T17:55:00.000000000Z used_percent mem 2018-11-03T17:52:10.000000000Z 64.14549350738525 +2018-11-03T17:50:00.000000000Z 2018-11-03T17:55:00.000000000Z used_percent mem 2018-11-03T17:52:20.000000000Z 64.15379047393799 +2018-11-03T17:50:00.000000000Z 2018-11-03T17:55:00.000000000Z used_percent mem 2018-11-03T17:52:30.000000000Z 64.1592264175415 +2018-11-03T17:50:00.000000000Z 2018-11-03T17:55:00.000000000Z used_percent mem 2018-11-03T17:52:40.000000000Z 64.18190002441406 +2018-11-03T17:50:00.000000000Z 2018-11-03T17:55:00.000000000Z used_percent mem 2018-11-03T17:52:50.000000000Z 64.28837776184082 +2018-11-03T17:50:00.000000000Z 2018-11-03T17:55:00.000000000Z used_percent mem 2018-11-03T17:53:00.000000000Z 64.29731845855713 +2018-11-03T17:50:00.000000000Z 2018-11-03T17:55:00.000000000Z used_percent mem 2018-11-03T17:53:10.000000000Z 64.36963081359863 +2018-11-03T17:50:00.000000000Z 2018-11-03T17:55:00.000000000Z used_percent mem 2018-11-03T17:53:20.000000000Z 64.37397003173828 +2018-11-03T17:50:00.000000000Z 2018-11-03T17:55:00.000000000Z used_percent mem 2018-11-03T17:53:30.000000000Z 64.44413661956787 +2018-11-03T17:50:00.000000000Z 2018-11-03T17:55:00.000000000Z used_percent mem 2018-11-03T17:53:40.000000000Z 64.42906856536865 +2018-11-03T17:50:00.000000000Z 2018-11-03T17:55:00.000000000Z used_percent mem 2018-11-03T17:53:50.000000000Z 64.44573402404785 +2018-11-03T17:50:00.000000000Z 2018-11-03T17:55:00.000000000Z used_percent mem 2018-11-03T17:54:00.000000000Z 64.48912620544434 +2018-11-03T17:50:00.000000000Z 2018-11-03T17:55:00.000000000Z used_percent mem 2018-11-03T17:54:10.000000000Z 64.49522972106934 +2018-11-03T17:50:00.000000000Z 2018-11-03T17:55:00.000000000Z used_percent mem 2018-11-03T17:54:20.000000000Z 64.48652744293213 +2018-11-03T17:50:00.000000000Z 2018-11-03T17:55:00.000000000Z used_percent mem 2018-11-03T17:54:30.000000000Z 64.49949741363525 +2018-11-03T17:50:00.000000000Z 2018-11-03T17:55:00.000000000Z used_percent mem 2018-11-03T17:54:40.000000000Z 64.4949197769165 +2018-11-03T17:50:00.000000000Z 2018-11-03T17:55:00.000000000Z used_percent mem 2018-11-03T17:54:50.000000000Z 64.49787616729736 +2018-11-03T17:50:00.000000000Z 2018-11-03T17:55:00.000000000Z used_percent mem 2018-11-03T17:55:00.000000000Z 64.49816226959229 +``` +{{% /truncate %}} + +## Windowing data +Use the [`window()` function](/flux/v0.x/stdlib/built-in/transformations/window) to group your data based on time bounds. +The most common parameter passed with the `window()` is `every` which defines the duration of time between windows. +Other parameters are available, but for this example, window the base data set into one minute windows. + +```js +dataSet + |> window(every: 1m) +``` + +Each window of time is output in its own table containing all records that fall within the window. + +{{% truncate %}} +###### window() output tables +``` +Table: keys: [_start, _stop, _field, _measurement] + _start:time _stop:time _field:string _measurement:string _time:time _value:float +------------------------------ ------------------------------ ---------------------- ---------------------- ------------------------------ ---------------------------- +2018-11-03T17:50:00.000000000Z 2018-11-03T17:51:00.000000000Z used_percent mem 2018-11-03T17:50:00.000000000Z 71.11611366271973 +2018-11-03T17:50:00.000000000Z 2018-11-03T17:51:00.000000000Z used_percent mem 2018-11-03T17:50:10.000000000Z 67.39630699157715 +2018-11-03T17:50:00.000000000Z 2018-11-03T17:51:00.000000000Z used_percent mem 2018-11-03T17:50:20.000000000Z 64.16666507720947 +2018-11-03T17:50:00.000000000Z 2018-11-03T17:51:00.000000000Z used_percent mem 2018-11-03T17:50:30.000000000Z 64.19951915740967 +2018-11-03T17:50:00.000000000Z 2018-11-03T17:51:00.000000000Z used_percent mem 2018-11-03T17:50:40.000000000Z 64.2122745513916 +2018-11-03T17:50:00.000000000Z 2018-11-03T17:51:00.000000000Z used_percent mem 2018-11-03T17:50:50.000000000Z 64.22209739685059 + + +Table: keys: [_start, _stop, _field, _measurement] + _start:time _stop:time _field:string _measurement:string _time:time _value:float +------------------------------ ------------------------------ ---------------------- ---------------------- ------------------------------ ---------------------------- +2018-11-03T17:51:00.000000000Z 2018-11-03T17:52:00.000000000Z used_percent mem 2018-11-03T17:51:00.000000000Z 64.6366555480957 +2018-11-03T17:51:00.000000000Z 2018-11-03T17:52:00.000000000Z used_percent mem 2018-11-03T17:51:10.000000000Z 64.16516304016113 +2018-11-03T17:51:00.000000000Z 2018-11-03T17:52:00.000000000Z used_percent mem 2018-11-03T17:51:20.000000000Z 64.18349742889404 +2018-11-03T17:51:00.000000000Z 2018-11-03T17:52:00.000000000Z used_percent mem 2018-11-03T17:51:30.000000000Z 64.20474052429199 +2018-11-03T17:51:00.000000000Z 2018-11-03T17:52:00.000000000Z used_percent mem 2018-11-03T17:51:40.000000000Z 68.65062713623047 +2018-11-03T17:51:00.000000000Z 2018-11-03T17:52:00.000000000Z used_percent mem 2018-11-03T17:51:50.000000000Z 67.20139980316162 + + +Table: keys: [_start, _stop, _field, _measurement] + _start:time _stop:time _field:string _measurement:string _time:time _value:float +------------------------------ ------------------------------ ---------------------- ---------------------- ------------------------------ ---------------------------- +2018-11-03T17:52:00.000000000Z 2018-11-03T17:53:00.000000000Z used_percent mem 2018-11-03T17:52:00.000000000Z 70.9143877029419 +2018-11-03T17:52:00.000000000Z 2018-11-03T17:53:00.000000000Z used_percent mem 2018-11-03T17:52:10.000000000Z 64.14549350738525 +2018-11-03T17:52:00.000000000Z 2018-11-03T17:53:00.000000000Z used_percent mem 2018-11-03T17:52:20.000000000Z 64.15379047393799 +2018-11-03T17:52:00.000000000Z 2018-11-03T17:53:00.000000000Z used_percent mem 2018-11-03T17:52:30.000000000Z 64.1592264175415 +2018-11-03T17:52:00.000000000Z 2018-11-03T17:53:00.000000000Z used_percent mem 2018-11-03T17:52:40.000000000Z 64.18190002441406 +2018-11-03T17:52:00.000000000Z 2018-11-03T17:53:00.000000000Z used_percent mem 2018-11-03T17:52:50.000000000Z 64.28837776184082 + + +Table: keys: [_start, _stop, _field, _measurement] + _start:time _stop:time _field:string _measurement:string _time:time _value:float +------------------------------ ------------------------------ ---------------------- ---------------------- ------------------------------ ---------------------------- +2018-11-03T17:53:00.000000000Z 2018-11-03T17:54:00.000000000Z used_percent mem 2018-11-03T17:53:00.000000000Z 64.29731845855713 +2018-11-03T17:53:00.000000000Z 2018-11-03T17:54:00.000000000Z used_percent mem 2018-11-03T17:53:10.000000000Z 64.36963081359863 +2018-11-03T17:53:00.000000000Z 2018-11-03T17:54:00.000000000Z used_percent mem 2018-11-03T17:53:20.000000000Z 64.37397003173828 +2018-11-03T17:53:00.000000000Z 2018-11-03T17:54:00.000000000Z used_percent mem 2018-11-03T17:53:30.000000000Z 64.44413661956787 +2018-11-03T17:53:00.000000000Z 2018-11-03T17:54:00.000000000Z used_percent mem 2018-11-03T17:53:40.000000000Z 64.42906856536865 +2018-11-03T17:53:00.000000000Z 2018-11-03T17:54:00.000000000Z used_percent mem 2018-11-03T17:53:50.000000000Z 64.44573402404785 + + +Table: keys: [_start, _stop, _field, _measurement] + _start:time _stop:time _field:string _measurement:string _time:time _value:float +------------------------------ ------------------------------ ---------------------- ---------------------- ------------------------------ ---------------------------- +2018-11-03T17:54:00.000000000Z 2018-11-03T17:55:00.000000000Z used_percent mem 2018-11-03T17:54:00.000000000Z 64.48912620544434 +2018-11-03T17:54:00.000000000Z 2018-11-03T17:55:00.000000000Z used_percent mem 2018-11-03T17:54:10.000000000Z 64.49522972106934 +2018-11-03T17:54:00.000000000Z 2018-11-03T17:55:00.000000000Z used_percent mem 2018-11-03T17:54:20.000000000Z 64.48652744293213 +2018-11-03T17:54:00.000000000Z 2018-11-03T17:55:00.000000000Z used_percent mem 2018-11-03T17:54:30.000000000Z 64.49949741363525 +2018-11-03T17:54:00.000000000Z 2018-11-03T17:55:00.000000000Z used_percent mem 2018-11-03T17:54:40.000000000Z 64.4949197769165 +2018-11-03T17:54:00.000000000Z 2018-11-03T17:55:00.000000000Z used_percent mem 2018-11-03T17:54:50.000000000Z 64.49787616729736 + + +Table: keys: [_start, _stop, _field, _measurement] + _start:time _stop:time _field:string _measurement:string _time:time _value:float +------------------------------ ------------------------------ ---------------------- ---------------------- ------------------------------ ---------------------------- +2018-11-03T17:55:00.000000000Z 2018-11-03T17:55:00.000000000Z used_percent mem 2018-11-03T17:55:00.000000000Z 64.49816226959229 +``` +{{% /truncate %}} + +When visualized in [Chronograf](/chronograf/latest/), each window table is displayed in a different color. + +![Windowed data](/img/flux/simple-windowed-data.png) + +## Aggregate data +[Aggregate functions](/flux/v0.x/stdlib/built-in/transformations/aggregates) take the values +of all rows in a table and use them to perform an aggregate operation. +The result is output as a new value in a single-row table. + +Since windowed data is split into separate tables, aggregate operations run against +each table separately and output new tables containing only the aggregated value. + +For this example, use the [`mean()` function](/flux/v0.x/stdlib/built-in/transformations/aggregates/mean) +to output the average of each window: + +```js +dataSet + |> window(every: 1m) + |> mean() +``` + +{{% truncate %}} +###### mean() output tables +``` +Table: keys: [_start, _stop, _field, _measurement] + _start:time _stop:time _field:string _measurement:string _value:float +------------------------------ ------------------------------ ---------------------- ---------------------- ---------------------------- +2018-11-03T17:50:00.000000000Z 2018-11-03T17:51:00.000000000Z used_percent mem 65.88549613952637 + + +Table: keys: [_start, _stop, _field, _measurement] + _start:time _stop:time _field:string _measurement:string _value:float +------------------------------ ------------------------------ ---------------------- ---------------------- ---------------------------- +2018-11-03T17:51:00.000000000Z 2018-11-03T17:52:00.000000000Z used_percent mem 65.50651391347249 + + +Table: keys: [_start, _stop, _field, _measurement] + _start:time _stop:time _field:string _measurement:string _value:float +------------------------------ ------------------------------ ---------------------- ---------------------- ---------------------------- +2018-11-03T17:52:00.000000000Z 2018-11-03T17:53:00.000000000Z used_percent mem 65.30719598134358 + + +Table: keys: [_start, _stop, _field, _measurement] + _start:time _stop:time _field:string _measurement:string _value:float +------------------------------ ------------------------------ ---------------------- ---------------------- ---------------------------- +2018-11-03T17:53:00.000000000Z 2018-11-03T17:54:00.000000000Z used_percent mem 64.39360975214641 + + +Table: keys: [_start, _stop, _field, _measurement] + _start:time _stop:time _field:string _measurement:string _value:float +------------------------------ ------------------------------ ---------------------- ---------------------- ---------------------------- +2018-11-03T17:54:00.000000000Z 2018-11-03T17:55:00.000000000Z used_percent mem 64.49386278788249 + + +Table: keys: [_start, _stop, _field, _measurement] + _start:time _stop:time _field:string _measurement:string _value:float +------------------------------ ------------------------------ ---------------------- ---------------------- ---------------------------- +2018-11-03T17:55:00.000000000Z 2018-11-03T17:55:00.000000000Z used_percent mem 64.49816226959229 +``` +{{% /truncate %}} + +Because each data point is contained in its own table, when visualized, +they appear as single, unconnected points. + +![Aggregated windowed data](/img/flux/simple-windowed-aggregate-data.png) + +### Recreate the time column +**Notice the `_time` column is not in the [aggregated output tables](#mean-output-tables).** +Because records in each table are aggregated together, their timestamps no longer +apply and the column is removed from the group key and table. + +Also notice the `_start` and `_stop` columns still exist. +These represent the lower and upper bounds of the time window. + +Many Flux functions rely on the `_time` column. +To further process your data after an aggregate function, you need to add `_time` back in. +Use the [`duplicate()` function](/flux/v0.x/stdlib/built-in/transformations/duplicate) to +duplicate either the `_start` or `_stop` column as a new `_time` column. + +```js +dataSet + |> window(every: 1m) + |> mean() + |> duplicate(column: "_stop", as: "_time") +``` + +{{% truncate %}} +###### duplicate() output tables +``` +Table: keys: [_start, _stop, _field, _measurement] + _start:time _stop:time _field:string _measurement:string _time:time _value:float +------------------------------ ------------------------------ ---------------------- ---------------------- ------------------------------ ---------------------------- +2018-11-03T17:50:00.000000000Z 2018-11-03T17:51:00.000000000Z used_percent mem 2018-11-03T17:51:00.000000000Z 65.88549613952637 + + +Table: keys: [_start, _stop, _field, _measurement] + _start:time _stop:time _field:string _measurement:string _time:time _value:float +------------------------------ ------------------------------ ---------------------- ---------------------- ------------------------------ ---------------------------- +2018-11-03T17:51:00.000000000Z 2018-11-03T17:52:00.000000000Z used_percent mem 2018-11-03T17:52:00.000000000Z 65.50651391347249 + + +Table: keys: [_start, _stop, _field, _measurement] + _start:time _stop:time _field:string _measurement:string _time:time _value:float +------------------------------ ------------------------------ ---------------------- ---------------------- ------------------------------ ---------------------------- +2018-11-03T17:52:00.000000000Z 2018-11-03T17:53:00.000000000Z used_percent mem 2018-11-03T17:53:00.000000000Z 65.30719598134358 + + +Table: keys: [_start, _stop, _field, _measurement] + _start:time _stop:time _field:string _measurement:string _time:time _value:float +------------------------------ ------------------------------ ---------------------- ---------------------- ------------------------------ ---------------------------- +2018-11-03T17:53:00.000000000Z 2018-11-03T17:54:00.000000000Z used_percent mem 2018-11-03T17:54:00.000000000Z 64.39360975214641 + + +Table: keys: [_start, _stop, _field, _measurement] + _start:time _stop:time _field:string _measurement:string _time:time _value:float +------------------------------ ------------------------------ ---------------------- ---------------------- ------------------------------ ---------------------------- +2018-11-03T17:54:00.000000000Z 2018-11-03T17:55:00.000000000Z used_percent mem 2018-11-03T17:55:00.000000000Z 64.49386278788249 + + +Table: keys: [_start, _stop, _field, _measurement] + _start:time _stop:time _field:string _measurement:string _time:time _value:float +------------------------------ ------------------------------ ---------------------- ---------------------- ------------------------------ ---------------------------- +2018-11-03T17:55:00.000000000Z 2018-11-03T17:55:00.000000000Z used_percent mem 2018-11-03T17:55:00.000000000Z 64.49816226959229 +``` +{{% /truncate %}} + +## "Unwindow" aggregate tables +Keeping aggregate values in separate tables generally isn't the format in which you want your data. +Use the `window()` function to "unwindow" your data into a single infinite (`inf`) window. + +```js +dataSet + |> window(every: 1m) + |> mean() + |> duplicate(column: "_stop", as: "_time") + |> window(every: inf) +``` + +> Windowing requires a `_time` column which is why it's necessary to +> [recreate the `_time` column](#recreate-the-time-column) after an aggregation. + +###### Unwindowed output table +``` +Table: keys: [_start, _stop, _field, _measurement] + _start:time _stop:time _field:string _measurement:string _time:time _value:float +------------------------------ ------------------------------ ---------------------- ---------------------- ------------------------------ ---------------------------- +2018-11-03T17:50:00.000000000Z 2018-11-03T17:55:00.000000000Z used_percent mem 2018-11-03T17:51:00.000000000Z 65.88549613952637 +2018-11-03T17:50:00.000000000Z 2018-11-03T17:55:00.000000000Z used_percent mem 2018-11-03T17:52:00.000000000Z 65.50651391347249 +2018-11-03T17:50:00.000000000Z 2018-11-03T17:55:00.000000000Z used_percent mem 2018-11-03T17:53:00.000000000Z 65.30719598134358 +2018-11-03T17:50:00.000000000Z 2018-11-03T17:55:00.000000000Z used_percent mem 2018-11-03T17:54:00.000000000Z 64.39360975214641 +2018-11-03T17:50:00.000000000Z 2018-11-03T17:55:00.000000000Z used_percent mem 2018-11-03T17:55:00.000000000Z 64.49386278788249 +2018-11-03T17:50:00.000000000Z 2018-11-03T17:55:00.000000000Z used_percent mem 2018-11-03T17:55:00.000000000Z 64.49816226959229 +``` + +With the aggregate values in a single table, data points in the visualization are connected. + +![Unwindowed aggregate data](/img/flux/simple-unwindowed-data.png) + +## Summing up +You have now created a Flux query that windows and aggregates data. +The data transformation process outlined in this guide should be used for all aggregation operations. + +Flux also provides the [`aggregateWindow()` function](/flux/v0.x/stdlib/built-in/transformations/aggregates/aggregatewindow) +which performs all these separate functions for you. + +The following Flux query will return the same results: + +###### aggregateWindow function +```js +dataSet + |> aggregateWindow(every: 1m, fn: mean) +``` diff --git a/content/flux/v0.x/introduction/_index.md b/content/flux/v0.x/introduction/_index.md new file mode 100644 index 0000000000..2447fc6b4d --- /dev/null +++ b/content/flux/v0.x/introduction/_index.md @@ -0,0 +1,42 @@ +--- +title: Introduction to Flux +description: Flux is InfluxData's new functional data scripting language designed for querying, analyzing, and acting on time series data. +menu: + flux_0_x: + name: Introduction + weight: 2 +--- + +Flux is InfluxData's new functional data scripting language designed for querying, analyzing, and acting on time series data. +Its takes the power of [InfluxQL](/influxdb/latest/query_language/spec/) and the functionality of [TICKscript](https://docs.influxdata.com/kapacitor/v1.5/tick/introduction/) and combines them into a single, unified syntax. + +> Flux v0.x is a technical preview included with [InfluxDB v1.7](/influxdb/latest). +> It is still in active development and many functions provided by InfluxQL and TICKscript +> have yet to be implemented. + +## Flux design principles +Flux is designed to be usable, readable, flexible, composable, testable, contributable, and shareable. +Its syntax is largely inspired by [2018's most popular scripting language](https://insights.stackoverflow.com/survey/2018#technology), +Javascript, and takes a functional approach to data exploration and processing. + +The following example illustrates pulling data from a bucket (similar to an InfluxQL database) for the last five minutes, +filtering that data by the `cpu` measurement and the `cpu=cpu-total` tag, windowing the data in 1 minute intervals, +and calculating the average of each window: + +```js +from(bucket:"telegraf/autogen") + |> range(start:-1h) + |> filter(fn:(r) => + r._measurement == "cpu" and + r.cpu == "cpu-total" + ) + |> aggregateWindow(every: 1m, fn: mean) +``` + +## [Enable Flux](/flux/v0.x/introduction/installation) +Flux is packaged with InfluxDB v1.7+ and does not require any additional installation, +however it does need to be enabled. + +## [Get started with Flux](/flux/v0.x/introduction/getting-started) +The best way to familiarize yourself with Flux is to walk through creating a simple Flux query. +The getting started documentation does just that. diff --git a/content/flux/v0.x/introduction/flux-vs-influxql.md b/content/flux/v0.x/introduction/flux-vs-influxql.md new file mode 100644 index 0000000000..6c803ceb3e --- /dev/null +++ b/content/flux/v0.x/introduction/flux-vs-influxql.md @@ -0,0 +1,272 @@ +--- +title: Flux vs InfluxQL +description: +menu: + flux_0_x: + name: Flux vs InfluxQL + parent: Introduction + weight: 5 +--- + +[InfluxQL](/influxdb/latest/query_language/) is InfluxData's SQL-like query language for interacting with data in InfluxDB. +Flux is an alternative to InfluxQL and other SQL-like query languages for querying and analyzing data. +It uses functional language patterns making it incredibly powerful, flexible, and able to overcome many of the limitations of InfluxQL. +This article outlines many of the tasks possible with Flux but not InfluxQL and provides information about Flux and InfluxQL parity. + +## Possible with Flux + +### Joins +InfluxQL has never supported joins. They can be accomplished using [TICKscript](/kapacitor/latest/tick/introduction/), +but even TICKscript's join capabilities are limited. +Flux's [`join()` function](/flux/v0.x/stdlib/built-in/transformations/join/) allows you +to join data **from any bucket, any measurement, and on any columns** as long as +each data set includes the columns on which they are to be joined. +This opens the door for really powerful and useful operations. + +--- + +_For an in-depth walkthrough of using the `join()` function, +see [How to join data with Flux](/flux/v0.x/guides/join)._ + +--- + +###### Example join operation +```js +dataStream1 = from(bucket: "bucket1") + |> range(start: -1h) + |> filter(fn: (r) => + r._measurement == "network" and + r._field == "bytes-transferred" + ) + +dataStream2 = from(bucket: "bucket1") + |> range(start: -1h) + |> filter(fn: (r) => + r._measurement == "httpd" and + r._field == "requests-per-sec" + ) + +join( + tables: {d1:dataStream1, d2:dataStream2}, + on: ["_time", "_stop", "_start", "host"] + ) +``` + +### Math across measurements +Being able to perform cross-measurement joins also allows you to run calculations using +data from separate measurements – a highly requested feature from the InfluxData community. +The example below takes two data streams from separate measurements, `mem` and `processes`, +joins them, then calculates the average amount of memory used per running process: + +###### Example of math across measurements +```js +// Memory used (in bytes) +memUsed = from(bucket: "telegraf/autogen") + |> range(start: -1h) + |> filter(fn: (r) => + r._measurement == "mem" and + r._field == "used" + ) + +// Total processes running +procTotal = from(bucket: "telegraf/autogen") + |> range(start: -1h) + |> filter(fn: (r) => + r._measurement == "processes" and + r._field == "total" + ) + +// Join memory used with total processes and calculate +// the average memory (in MB) used for running processes. +join( + tables: {mem:memUsed, proc:procTotal}, + on: ["_time", "_stop", "_start", "host"] + ) + |> map(fn: (r) => ({ + _time: r._time, + _value: (r._value_mem / r._value_proc) / 1000000 + }) +) +``` + +### Sort on any column +InfluxQL's sorting capabilities are very limited, allowing you only to control the +sort order of `time` using the `ORDER BY time` clause. +Flux's [`sort()` function](/flux/v0.x/stdlib/built-in/transformations/sort) sorts records based on list of columns. +Depending on the column type, records are sorted alphabetically, numerically, or chronologically. + +###### Example sort operation +```js +from(bucket:"telegraf/autogen") + |> range(start:-12h) + |> filter(fn: (r) => + r._measurement == "system" and + r._field == "uptime" + ) + |> sort(columns:["region", "host", "_value"]) +``` + +### Pivot +Pivoting data tables has never been supported in InfluxQL. +Flux's [`pivot()` function](/flux/v0.x/stdlib/built-in/transformations/pivot) provides the ability +to pivot data tables by specifying `rowKey`, `columnKey`, and `valueColumn` parameters. + +###### Example pivot operation +```js +from(bucket: "telegraf/autogen") + |> range(start: -1h) + |> filter(fn: (r) => + r._measurement == "cpu" and + r.cpu == "cpu-total" + ) + |> pivot( + rowKey:["_time"], + columnKey: ["_field"], + valueColumn: "_value" + ) +``` + +### Histograms +The ability to generate histograms has been a highly requested feature for InfluxQL, but has never been supported. +Flux's [`histogram()` function](/flux/v0.x/stdlib/built-in/transformations/histogram) uses input +data to generate a cumulative histogram with support for other histogram types coming in the future. + +--- + +_For an example of using Flux to create a cumulative histogram, see [Create histograms](/flux/v0.x/guides/histograms)._ + +--- + +###### Example histogram function +```js +from(bucket: "telegraf/autogen") + |> range(start: -1h) + |> filter(fn: (r) => + r._measurement == "mem" and + r._field == "used_percent" + ) + |> histogram( + buckets: [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] + ) +``` + +### Covariance +Flux provides functions for simple covariance calculation. +The [`covariance()` function](/flux/v0.x/stdlib/built-in/transformations/aggregates/covariance) +calculates the covariance between two columns and the [`cov()` function](/flux/v0.x/stdlib/built-in/transformations/aggregates/cov) +calculates the covariance between two data streams. + +###### Example covariance between two columns +```js +from(bucket: "telegraf/autogen") + |> range(start:-5m) + |> covariance(columns: ["x", "y"]) +``` + +###### Example covariance between two streams of data +```js +table1 = from(bucket: "telegraf/autogen") + |> range(start: -15m) + |> filter(fn: (r) => + r._measurement == "measurement_1" + ) + +table2 = from(bucket: "telegraf/autogen") + |> range(start: -15m) + |> filter(fn: (r) => + r._measurement == "measurement_2" + ) + +cov(x: table1, y: table2, on: ["_time", "_field"]) +``` + +## Not yet supported in Flux +Flux is working towards complete parity with InfluxQL and new functions are being added to that end. +The table below shows InfluxQL statements, clauses, and functions along with their equivalent Flux functions. + +> The current version of Flux included with InfluxDB is a technical preview and is still in active development. +> New functions are added often and the following table may not represent the current state of Flux. + +### InfluxQL and Flux parity + +| InfluxQL | Flux Functions | +| -------- | -------------- | +| SELECT | [filter()](/flux/v0.x/stdlib/built-in/transformations/filter/) | +| WHERE | [filter()](/flux/v0.x/stdlib/built-in/transformations/filter/), [range()](/flux/v0.x/stdlib/built-in/transformations/range/) | +| GROUP BY | [group()](/flux/v0.x/stdlib/built-in/transformations/group/) | +| INTO | [to()](/flux/v0.x/stdlib/built-in/outputs/to/) * | +| ORDER BY | [sort()](/flux/v0.x/stdlib/built-in/transformations/sort/) | +| LIMIT | [limit()](/flux/v0.x/stdlib/built-in/transformations/limit/) | +| SLIMIT | -- | +| OFFSET | -- | +| SOFFSET | -- | +| SHOW DATABASES | [buckets()](/flux/v0.x/stdlib/built-in/inputs/buckets/) | +| SHOW MEASUREMENTS | [v1.measurements](/flux/v0.x/stdlib/influxdb-v1/measurements) | +| SHOW FIELD KEYS | [keys()](/flux/v0.x/stdlib/built-in/transformations/keys/) | +| SHOW RETENTION POLICIES | [buckets()](/flux/v0.x/stdlib/built-in/inputs/buckets/) | +| SHOW TAG KEYS | [v1.tagKeys()](/flux/v0.x/stdlib/influxdb-v1/tagkeys), [v1.measurementTagKeys()](/flux/v0.x/stdlib/influxdb-v1/measurementtagkeys) | +| SHOW TAG VALUES | [v1.tagValues()](/flux/v0.x/stdlib/influxdb-v1/tagvalues), [v1.measurementTagValues()](/flux/v0.x/stdlib/influxdb-v1/measurementtagvalues) | +| SHOW SERIES | -- | +| CREATE DATABASE | -- | +| DROP DATABASE | -- | +| DROP SERIES | -- | +| DELETE | -- | +| DROP MEASUREMENT | -- | +| DROP SHARD | -- | +| CREATE RETENTION POLICY | -- | +| ALTER RETENTION POLICY | -- | +| DROP RETENTION POLICY | -- | +| COUNT | [count()](/flux/v0.x/stdlib/built-in/transformations/aggregates/count/) | +| DISTINCT | [distinct()](/flux/v0.x/stdlib/built-in/transformations/selectors/distinct/) | +| INTEGRAL | [integral()](/flux/v0.x/stdlib/built-in/transformations/aggregates/integral/) | +| MEAN | [mean()](/flux/v0.x/stdlib/built-in/transformations/aggregates/mean/) | +| MEDIAN | [median()](/flux/v0.x/stdlib/built-in/transformations/aggregates/median/) | +| MODE | [mode()](/flux/v0.x/stdlib/built-in/transformations/aggregates/mode/) | +| SPREAD | [spread()](/flux/v0.x/stdlib/built-in/transformations/aggregates/spread/) | +| STDDEV | [stddev()](/flux/v0.x/stdlib/built-in/transformations/aggregates/stddev/) | +| SUM | [sum()](/flux/v0.x/stdlib/built-in/transformations/aggregates/sum/) | +| BOTTOM | [bottom()](/flux/v0.x/stdlib/built-in/transformations/selectors/bottom/) | +| FIRST | [first()](/flux/v0.x/stdlib/built-in/transformations/selectors/first/) | +| LAST | [last()](/flux/v0.x/stdlib/built-in/transformations/selectors/last/) | +| MAX | [max()](/flux/v0.x/stdlib/built-in/transformations/selectors/max/) | +| MIN | [min()](/flux/v0.x/stdlib/built-in/transformations/selectors/min/) | +| PERCENTILE | [quantile()](/flux/v0.x/stdlib/built-in/transformations/aggregates/quantile/) | +| SAMPLE | [sample()](/flux/v0.x/stdlib/built-in/transformations/selectors/sample/) | +| TOP | [top()](/flux/v0.x/stdlib/built-in/transformations/selectors/top/) | +| ABS | [math.abs()](/flux/v0.x/stdlib/math/abs/) | +| ACOS | [math.acos()](/flux/v0.x/stdlib/math/acos/) | +| ASIN | [math.asin()](/flux/v0.x/stdlib/math/asin/) | +| ATAN | [math.atan()](/flux/v0.x/stdlib/math/atan/) | +| ATAN2 | [math.atan2()](/flux/v0.x/stdlib/math/atan2/) | +| CEIL | [math.ceil()](/flux/v0.x/stdlib/math/ceil/) | +| COS | [math.cos()](/flux/v0.x/stdlib/math/cos/) | +| CUMULATIVE_SUM | [cumulativeSum()](/flux/v0.x/stdlib/built-in/transformations/cumulativesum/) | +| DERIVATIVE | [derivative()](/flux/v0.x/stdlib/built-in/transformations/aggregates/derivative/) | +| DIFFERENCE | [difference()](/flux/v0.x/stdlib/built-in/transformations/aggregates/difference/) | +| ELAPSED | [elapsed()](/flux/v0.x/stdlib/built-in/transformations/elapsed/) | +| EXP | [math.exp()](/flux/v0.x/stdlib/math/exp/) | +| FLOOR | [math.floor()](/flux/v0.x/stdlib/math/floor/) | +| HISTOGRAM | [histogram()](/flux/v0.x/stdlib/built-in/transformations/histogram/) | +| LN | [math.log()](/flux/v0.x/stdlib/math/log/) | +| LOG | [math.logb()](/flux/v0.x/stdlib/math/logb/) | +| LOG2 | [math.log2()](/flux/v0.x/stdlib/math/log2/) | +| LOG10 | [math.log10()](/flux/v0.x/stdlib/math/log10/) | +| MOVING_AVERAGE | [movingAverage()](/flux/v0.x/stdlib/built-in/transformations/aggregates/movingaverage/) | +| NON_NEGATIVE_DERIVATIVE | [derivative(nonNegative:true)](/flux/v0.x/stdlib/built-in/transformations/aggregates/derivative/) | +| NON_NEGATIVE_DIFFERENCE | [difference(nonNegative:true)](/flux/v0.x/stdlib/built-in/transformations/aggregates/derivative/) | +| POW | [math.pow()](/flux/v0.x/stdlib/math/pow/) | +| ROUND | [math.round()](/flux/v0.x/stdlib/math/round/) | +| SIN | [math.sin()](/flux/v0.x/stdlib/math/sin/) | +| SQRT | [math.sqrt()](/flux/v0.x/stdlib/math/sqrt/) | +| TAN | [math.tan()](/flux/v0.x/stdlib/math/tan/) | +| HOLT_WINTERS | [holtWinters()](/flux/v0.x/stdlib/built-in/transformations/aggregates/holtwinters/) | +| CHANDE_MOMENTUM_OSCILLATOR | [chandeMomentumOscillator()](/flux/v0.x/stdlib/built-in/transformations/aggregates/chandemomentumoscillator/) | +| EXPONENTIAL_MOVING_AVERAGE | [exponentialMovingAverage()](/flux/v0.x/stdlib/built-in/transformations/aggregates/exponentialmovingaverage/) | +| DOUBLE_EXPONENTIAL_MOVING_AVERAGE | [doubleEMA()](/flux/v0.x/stdlib/built-in/transformations/aggregates/doubleema/) | +| KAUFMANS_EFFICIENCY_RATIO | [kaufmansER()](/flux/v0.x/stdlib/built-in/transformations/aggregates/kaufmanser/) | +| KAUFMANS_ADAPTIVE_MOVING_AVERAGE | [kaufmansAMA()](/flux/v0.x/stdlib/built-in/transformations/aggregates/kaufmansama/) | +| TRIPLE_EXPONENTIAL_MOVING_AVERAGE | [tripleEMA()](/flux/v0.x/stdlib/built-in/transformations/aggregates/tripleema/) | +| TRIPLE_EXPONENTIAL_DERIVATIVE | [tripleExponentialDerivative()](/flux/v0.x/stdlib/built-in/transformations/aggregates/tripleexponentialderivative/) | +| RELATIVE_STRENGTH_INDEX | [relativeStrengthIndex()](/flux/v0.x/stdlib/built-in/transformations/aggregates/relativestrengthindex/) | + +_* The to() function only writes to InfluxDB 2.0._ diff --git a/content/flux/v0.x/introduction/getting-started/_index.md b/content/flux/v0.x/introduction/getting-started/_index.md new file mode 100644 index 0000000000..4427ad14c9 --- /dev/null +++ b/content/flux/v0.x/introduction/getting-started/_index.md @@ -0,0 +1,130 @@ +--- +title: Get started with Flux +description: Get started with Flux, InfluxData's new functional data scripting language. This step-by-step guide will walk you through the basics and get you on your way. +menu: + flux_0_x: + name: Get started with Flux + identifier: get-started + parent: Introduction + weight: 2 +--- + +Flux is InfluxData's new functional data scripting language designed for querying, +analyzing, and acting on data. + +This multi-part getting started guide walks through important concepts related to Flux. +It covers querying time series data from InfluxDB using Flux, and introduces Flux syntax and functions. + +## What you will need + +##### InfluxDB v1.7+ +Flux v0.x (technical preview) is built into InfluxDB v1.7 and can be used to query data stored in InfluxDB. +InfluxDB v1.7's `influx` CLI also includes a new `-type=` option that, when set to `flux`, will start an +interactive Flux Read-Eval-Print-Loop (REPL) allowing you to write and run Flux queries from the command line. + +--- + +_For information about downloading and installing InfluxDB v1.7, see [InfluxDB installation](/influxdb/latest/introduction/installation)._ + +--- + +##### Chronograf v1.7+ +**Not required but strongly recommended**. +Chronograf v1.7's Data Explorer provides a user interface (UI) for writing Flux scripts and visualizing results. +Dashboards in Chronograf v1.7+ also support Flux queries. + +--- + +_For information about downloading and installing Chronograf v1.7, see [Chronograf installation](/chronograf/v1.7/introduction/installation)._ + +--- + +![Flux Builder](/img/flux/flux-builder.png) + +--- + +_If your are using Docker, the [InfluxData Sandbox](/platform/install-and-deploy/deploying/sandbox-install) +will install the latest version of each component of the TICK stack._ + +--- + + +## Key concepts +Flux introduces important new concepts you should understand as you get started. + +### Buckets +Flux introduces "buckets," a new data storage concept for InfluxDB. +A **bucket** is a named location where data is stored that has a retention policy. +It's similar to an InfluxDB v1.x "database," but is a combination of both a database and a retention policy. +When using multiple retention policies, each retention policy is treated as is its own bucket. + +Flux's [`from()` function](/flux/v0.x/stdlib/built-in/inputs/from), which defines an InfluxDB data source, requires a `bucket` parameter. +When using Flux with InfluxDB v1.x, use the following bucket naming convention which combines +the database name and retention policy into a single bucket name: + +###### InfluxDB v1.x bucket naming convention +```js +// Pattern +from(bucket:"/") + +// Example +from(bucket:"telegraf/autogen") +``` + +### Pipe-forward operator +Flux uses pipe-forward operators (`|>`) extensively to chain operations together. +After each function or operation, Flux returns a table or collection of tables containing data. +The pipe-forward operator pipes those tables into the next function or operation where +they are further processed or manipulated. + +### Tables +Flux structures all data in tables. +When data is streamed from data sources, Flux formats it as annotated comma-separated values (CSV), representing tables. +Functions then manipulate or process them and output new tables. +This makes it easy to chain together functions to build sophisticated queries. + +#### Group keys +Every table has a **group key** which describes the contents of the table. +It's a list of columns for which every row in the table will have the same value. +Columns with unique values in each row are **not** part of the group key. + +As functions process and transform data, each modifies the group keys of output tables. +Understanding how tables and group keys are modified by functions is key to properly +shaping your data for the desired output. + +###### Example group key +```js +[_start, _stop, _field, _measurement, host] +``` + +Note that `_time` and `_value` are excluded from the example group key because they +are unique to each row. + +## Tools for working with Flux + +You have multiple [options for writing and running Flux queries](/flux/v0.x/guides/executing-queries), +but as you're getting started, we recommend using the following: + +### 1. Chronograf's Data Explorer +Chronograf's Data Explorer makes it easy to write your first Flux script and visualize the results. +To use Chronograf's Flux UI, open the **Data Explorer** and to the right of the source +dropdown above the graph placeholder, select **Flux** as the source type. + +![Flux in the Data Explorer](/img/flux/flux-builder-start.gif) + +This will provide **Schema**, **Script**, and **Functions** panes. +The Schema pane allows you to explore your data. +The Script pane is where you write your Flux script. +The Functions pane provides a list of functions available in your Flux queries. + +### 2. influx CLI +The `influx` CLI is an interactive shell for querying InfluxDB. +With InfluxDB v1.7+, use the `-type=flux` option to open a Flux REPL where you write and run Flux queries. + +```bash +influx -type=flux +``` + + diff --git a/content/flux/v0.x/introduction/getting-started/query-influxdb.md b/content/flux/v0.x/introduction/getting-started/query-influxdb.md new file mode 100644 index 0000000000..a5804dfb83 --- /dev/null +++ b/content/flux/v0.x/introduction/getting-started/query-influxdb.md @@ -0,0 +1,130 @@ +--- +title: Query InfluxDB with Flux +description: Learn the basics of using Flux to query data from InfluxDB. +menu: + flux_0_x: + name: Query InfluxDB + parent: get-started + weight: 1 +--- + +This guide walks through the basics of using Flux to query data from InfluxDB. +_**If you haven't already, make sure to install InfluxDB v1.7+, [enable Flux](/flux/v0.x/introduction/installation), +and choose a [tool for writing Flux queries](/flux/v0.x/introduction/getting-started#tools-for-working-with-flux).**_ + +Every Flux query needs the following: + +1. [A data source](#1-define-your-data-source) +2. [A time range](#2-specify-a-time-range) +3. [Data filters](#3-filter-your-data) + + +## 1. Define your data source +Flux's [`from()`](/flux/v0.x/stdlib/built-in/inputs/from) function defines an InfluxDB data source. +It requires a [`bucket`](/flux/v0.x/introduction/getting-started/#buckets) parameter. +For this example, use `telegraf/autogen`, a combination of the default database and retention policy provided by the TICK stack. + +```js +from(bucket:"telegraf/autogen") +``` + +## 2. Specify a time range +Flux requires a time range when querying time series data. +"Unbounded" queries are very resource-intensive and as a protective measure, +Flux will not query the database without a specified range. + +Use the pipe-forward operator (`|>`) to pipe data from your data source into the [`range()`](/flux/v0.x/stdlib/built-in/transformations/range) +function, which specifies a time range for your query. +It accepts two properties: `start` and `stop`. +Ranges can be **relative** using negative [durations](/flux/v0.x/language/lexical-elements#duration-literals) +or **absolute** using [timestamps](/flux/v0.x/language/lexical-elements#date-and-time-literals). + +###### Example relative time ranges +```js +// Relative time range with start only. Stop defaults to now. +from(bucket:"telegraf/autogen") + |> range(start: -1h) + +// Relative time range with start and stop +from(bucket:"telegraf/autogen") + |> range(start: -1h, stop: -10m) +``` + +> Relative ranges are relative to "now." + +###### Example absolute time range +```js +from(bucket:"telegraf/autogen") + |> range(start: 2018-11-05T23:30:00Z, stop: 2018-11-06T00:00:00Z) +``` + +#### Use the following: +For this guide, use the relative time range, `-15m`, to limit query results to data from the last 15 minutes: + +```js +from(bucket:"telegraf/autogen") + |> range(start: -15m) +``` + +## 3. Filter your data +Pass your ranged data into the `filter()` function to narrow results based on data attributes or columns. +The `filter()` function has one parameter, `fn`, which expects an anonymous function +with logic that filters data based on columns or attributes. + +Flux's anonymous function syntax is very similar to Javascript's. +Records or rows are passed into the `filter()` function as an object (`r`). +The anonymous function takes the object and evaluates it to see if it matches the defined filters. +Use the `AND` relational operator to chain multiple filters. + +```js +// Pattern +(r) => (r.objectProperty comparisonOperator comparisonExpression) + +// Example with single filter +(r) => (r._measurement == "cpu") + +// Example with multiple filters +(r) => (r._measurement == "cpu") and (r._field != "usage_system" ) +``` + +#### Use the following: +For this example, filter by the `cpu` measurement, the `usage_system` field, and the `cpu-total` tag value: + +```js +from(bucket:"telegraf/autogen") + |> range(start: -15m) + |> filter(fn: (r) => + r._measurement == "cpu" and + r._field == "usage_system" and + r.cpu == "cpu-total" + ) +``` + +## 4. Yield your queried data +Use Flux's `yield()` function to output the filtered tables as the result of the query. + +```js +from(bucket:"telegraf/autogen") + |> range(start: -15m) + |> filter(fn: (r) => + r._measurement == "cpu" and + r._field == "usage_system" and + r.cpu == "cpu-total" + ) + |> yield() +``` + +> Chronograf and the `influx` CLI automatically assume a `yield()` function at +> the end of each script in order to output and visualize the data. +> Best practice is to include a `yield()` function, but it is not always necessary. + +## Congratulations! +You have now queried data from InfluxDB using Flux. + +The query shown here is a barebones example. +Flux queries can be extended in many ways to form powerful scripts. + + diff --git a/content/flux/v0.x/introduction/getting-started/syntax-basics.md b/content/flux/v0.x/introduction/getting-started/syntax-basics.md new file mode 100644 index 0000000000..5344269b39 --- /dev/null +++ b/content/flux/v0.x/introduction/getting-started/syntax-basics.md @@ -0,0 +1,221 @@ +--- +title: Flux syntax basics +description: An introduction to the basic elements of the Flux syntax with real-world application examples. +menu: + flux_0_x: + name: Syntax basics + parent: get-started + weight: 3 +--- + + +Flux, at its core, is a scripting language designed specifically for working with data. +This guide walks through a handful of simple expressions and how they are handled in Flux. + +## Use the influx CLI +Use the `influx` CLI in "Flux mode" as you follow this guide. +When started with `-type=flux`, the `influx` CLI is an interactive read-eval-print-loop (REPL) that supports Flux syntax. + +##### Start in the influx CLI in Flux mode +```bash +influx -type=flux +``` + +> If using the [InfluxData Sandbox](/platform/install-and-deploy/deploying/sandbox-install), use the `./sandbox enter` +> command to enter the `influxdb` container, where you can start the `influx` CLI in Flux mode. +> You will also need to specify the `host` as `influxdb` to connect to InfluxDB over the Docker network. +> +```bash +./sandbox enter influxdb + +root@9bfc3c08579c:/# influx -host influxdb -type=flux +``` + +## Basic Flux syntax +The code blocks below provide commands that illustrate the basic syntax of Flux. +Run these commands in the `influx` CLI's Flux REPL. + +### Simple expressions +Flux is a scripting language that supports basic expressions. +For example, simple addition: + +```js +> 1 + 1 +2 +``` + +### Variables +Assign an expression to a variable using the assignment operator, `=`. + +```js +> s = "this is a string" +> i = 1 // an integer +> f = 2.0 // a floating point number +``` + +Type the name of a variable to print its value: + +```js +> s +this is a string +> i +1 +> f +2 +``` + +### Objects +Flux also supports objects. Each value in an object can be a different data type. + +```js +> o = {name:"Jim", age: 42} +``` + +Use dot notation to access a properties of an object : + +```js +> o.name +Jim +> o.age +42 +``` + +### Lists +Flux supports lists. List values must be the same type. + +```js +> n = 4 +> l = [1,2,3,n] +> l +[1, 2, 3, 4] +``` + +### Functions +Flux uses functions for most of its heavy lifting. +Below is a simple function that squares a number, `n`. + +```js +> square = (n) => n * n +> square(n:3) +9 +``` + +> Flux does not support positional arguments or parameters. +> Parameters must always be named when calling a function. + +### Pipe-forward operator +Flux uses the pipe-forward operator (`|>`) extensively to chain operations together. +After each function or operation, Flux returns a table or collection of tables containing data. +The pipe-forward operator pipes those tables into the next function where they are further processed or manipulated. + +```js +data |> someFunction() |> anotherFunction() +``` + +## Real-world application of basic syntax +This likely seems familiar if you've already been through through the other [getting started guides](/flux/v0.x/introduction/getting-started). +Flux's syntax is inspired by Javascript and other functional scripting languages. +As you begin to apply these basic principles in real-world use cases such as creating data stream variables, +custom functions, etc., the power of Flux and its ability to query and process data will become apparent. + +The examples below provide both multi-line and single-line versions of each input command. +Carriage returns in Flux aren't necessary, but do help with readability. +Both single- and multi-line commands can be copied and pasted into the `influx` CLI running in Flux mode. + +{{< tab-labels >}} + {{% tabs %}} + [Multi-line inputs](#) + [Single-line inputs](#) + {{% /tabs %}} +{{< tab-content-container >}} + +{{% tab-content %}} +### Define data stream variables +A common use case for variable assignments in Flux is creating variables for one +or more input data streams. + +```js +timeRange = -1h + +cpuUsageUser = + from(bucket:"telegraf/autogen") + |> range(start: timeRange) + |> filter(fn: (r) => + r._measurement == "cpu" and + r._field == "usage_user" and + r.cpu == "cpu-total" + ) + +memUsagePercent = + from(bucket:"telegraf/autogen") + |> range(start: timeRange) + |> filter(fn: (r) => + r._measurement == "mem" and + r._field == "used_percent" + ) +``` + +These variables can be used in other functions, such as `join()`, while keeping the syntax minimal and flexible. + +### Define custom functions +Create a function that returns the `N` number rows in the input stream with the highest `_value`s. +To do this, pass the input stream (`tables`) and the number of results to return (`n`) into a custom function. +Then using Flux's `sort()` and `limit()` functions to find the top `n` results in the data set. + +```js +topN = (tables=<-, n) => + tables + |> sort(desc: true) + |> limit(n: n) +``` + +_More information about creating custom functions is available in the [Custom functions](/flux/v0.x/stdlib/custom-functions) documentation._ + +Using this new custom function `topN` and the `cpuUsageUser` data stream variable defined above, +find the top five data points and yield the results. + +```js +cpuUsageUser + |> topN(n:5) + |> yield() +``` +{{% /tab-content %}} + +{{% tab-content %}} +### Define data stream variables +A common use case for variable assignments in Flux is creating variables for multiple filtered input data streams. + +```js +timeRange = -1h +cpuUsageUser = from(bucket:"telegraf/autogen") |> range(start: timeRange) |> filter(fn: (r) => r._measurement == "cpu" and r._field == "usage_user" and r.cpu == "cpu-total") +memUsagePercent = from(bucket:"telegraf/autogen") |> range(start: timeRange) |> filter(fn: (r) => r._measurement == "mem" and r._field == "used_percent") +``` + +These variables can be used in other functions, such as `join()`, while keeping the syntax minimal and flexible. + +### Define custom functions +Let's create a function that returns the `N` number rows in the input data stream with the highest `_value`s. +To do this, pass the input stream (`tables`) and the number of results to return (`n`) into a custom function. +Then using Flux's `sort()` and `limit()` functions to find the top `n` results in the data set. + +```js +topN = (tables=<-, n) => tables |> sort(desc: true) |> limit(n: n) +``` + +_More information about creating custom functions is available in the [Custom functions](/flux/v0.x/stdlib/custom-functions) documentation._ + +Using the `cpuUsageUser` data stream variable defined [above](#define-data-stream-variables), +find the top five data points with the custom `topN` function and yield the results. + +```js +cpuUsageUser |> topN(n:5) |> yield() +``` +{{% /tab-content %}} +{{< /tab-content-container >}} +{{< /tab-labels >}} + +This query will return the five data points with the highest user CPU usage over the last hour. + + diff --git a/content/flux/v0.x/introduction/getting-started/transform-data.md b/content/flux/v0.x/introduction/getting-started/transform-data.md new file mode 100644 index 0000000000..5542bb120e --- /dev/null +++ b/content/flux/v0.x/introduction/getting-started/transform-data.md @@ -0,0 +1,174 @@ +--- +title: Transform data with Flux +description: Learn the basics of using Flux to transform data queried from InfluxDB. +menu: + flux_0_x: + name: Transform your data + parent: get-started + weight: 2 +--- + +When [querying data from InfluxDB](/flux/v0.x/introduction/getting-started/query-influxdb), +you often need to transform that data in some way. +Common examples are aggregating data into averages, downsampling data, etc. + +This guide demonstrates using [Flux functions](/flux/v0.x/stdlib) to transform your data. +It walks through creating a Flux script that partitions data into windows of time, +averages the `_value`s in each window, and outputs the averages as a new table. + +It's important to understand how the "shape" of your data changes through each of these operations. + +## Query data +Use the query built in the previous [Query data from InfluxDB](/flux/v0.x/introduction/getting-started/query-influxdb) +guide, but update the range to pull data from the last hour: + +```js +from(bucket:"telegraf/autogen") + |> range(start: -1h) + |> filter(fn: (r) => + r._measurement == "cpu" and + r._field == "usage_system" and + r.cpu == "cpu-total" + ) +``` + +## Flux functions +Flux provides a number of functions that perform specific operations, transformations, and tasks. +You can also [create custom functions](/flux/v0.x/stdlib/custom-functions) in your Flux queries. +_Functions are covered in detail in the [Flux functions](/flux/v0.x/stdlib) documentation._ + +A common type of function used when transforming data queried from InfluxDB is an aggregate function. +Aggregate functions take a set of `_value`s in a table, aggregate them, and transform +them into a new value. + +This example uses the [`mean()` function](/flux/v0.x/stdlib/built-in/transformations/aggregates/mean) +to average values within time windows. + +> The following example walks through the steps required to window and aggregate data, +> but there is a [`aggregateWindow()` helper function](#helper-functions) that does it for you. +> It's just good to understand the steps in the process. + +## Window your data +Flux's [`window()` function](/flux/v0.x/stdlib/built-in/transformations/window) partitions records based on a time value. +Use the `every` parameter to define a duration of time for each window. + +For this example, window data in five minute intervals (`5m`). + +```js +from(bucket:"telegraf/autogen") + |> range(start: -1h) + |> filter(fn: (r) => + r._measurement == "cpu" and + r._field == "usage_system" and + r.cpu == "cpu-total" + ) + |> window(every: 5m) +``` + +As data is gathered into windows of time, each window is output as its own table. +When visualized, each table is assigned a unique color. + +![Windowed data tables](/img/flux/flux-windowed-data.png) + +## Aggregate windowed data +Flux aggregate functions take the `_value`s in each table and aggregate them in some way. +Use the [`mean()` function](/flux/v0.x/stdlib/built-in/transformations/aggregates/mean) to average the `_value`s of each table. + +```js +from(bucket:"telegraf/autogen") + |> range(start: -1h) + |> filter(fn: (r) => + r._measurement == "cpu" and + r._field == "usage_system" and + r.cpu == "cpu-total" + ) + |> window(every: 5m) + |> mean() +``` + +As rows in each window are aggregated, their output table contains only a single row with the aggregate value. +Windowed tables are all still separate and, when visualized, will appear as single, unconnected points. + +![Windowed aggregate data](/img/flux/flux-windowed-aggregates.png) + +## Add times to your aggregates +As values are aggregated, the resulting tables do not have a `_time` column because +the records used for the aggregation all have different timestamps. +Aggregate functions don't infer what time should be used for the aggregate value. +Therefore the `_time` column is dropped. + +A `_time` column is required in the [next operation](#unwindow-aggregate-tables). +To add one, use the [`duplicate()` function](/flux/v0.x/stdlib/built-in/transformations/duplicate) +to duplicate the `_stop` column as the `_time` column for each windowed table. + +```js +from(bucket:"telegraf/autogen") + |> range(start: -1h) + |> filter(fn: (r) => + r._measurement == "cpu" and + r._field == "usage_system" and + r.cpu == "cpu-total" + ) + |> window(every: 5m) + |> mean() + |> duplicate(column: "_stop", as: "_time") +``` + +## Unwindow aggregate tables + +Use the `window()` function with the `every: inf` parameter to gather all points +into a single, infinite window. + +```js +from(bucket:"telegraf/autogen") + |> range(start: -1h) + |> filter(fn: (r) => + r._measurement == "cpu" and + r._field == "usage_system" and + r.cpu == "cpu-total" + ) + |> window(every: 5m) + |> mean() + |> duplicate(column: "_stop", as: "_time") + |> window(every: inf) +``` + +Once ungrouped and combined into a single table, the aggregate data points will appear connected in your visualization. + +![Unwindowed aggregate data](/img/flux/flux-windowed-aggregates-ungrouped.png) + +## Helper functions +This may seem like a lot of coding just to build a query that aggregates data, however going through the +process helps to understand how data changes "shape" as it is passed through each function. + +Flux provides (and allows you to create) "helper" functions that abstract many of these steps. +The same operation performed in this guide can be accomplished using the +[`aggregateWindow()` function](/flux/v0.x/stdlib/built-in/transformations/aggregates/aggregatewindow). + +```js +from(bucket:"telegraf/autogen") + |> range(start: -1h) + |> filter(fn: (r) => + r._measurement == "cpu" and + r._field == "usage_system" and + r.cpu == "cpu-total" + ) + |> aggregateWindow(every: 5m, fn: mean) +``` + +## Congratulations! +You have now constructed a Flux query that uses Flux functions to transform your data. +There are many more ways to manipulate your data using both Flux's primitive functions +and your own custom functions, but this is a good introduction into the basic syntax and query structure. + +--- + +_For a deeper dive into windowing and aggregating data with example data output for each transformation, +view the [Windowing and aggregating data](/flux/v0.x/guides/windowing-aggregating) guide._ + +--- + + diff --git a/content/flux/v0.x/introduction/installation.md b/content/flux/v0.x/introduction/installation.md new file mode 100644 index 0000000000..2926487b09 --- /dev/null +++ b/content/flux/v0.x/introduction/installation.md @@ -0,0 +1,37 @@ +--- +title: Enable Flux +description: Instructions for enabling Flux in your InfluxDB configuration. +menu: + flux_0_x: + name: Enable Flux + parent: Introduction + weight: 1 +--- + +Flux is packaged with InfluxDB v1.7+ and does not require any additional installation, +however it is **disabled by default and needs to be enabled**. + +## Enable Flux +Enable Flux by setting the `flux-enabled` option to `true` under the `[http]` section of your `influxdb.conf`: + +###### influxdb.conf +```toml +# ... + +[http] + + # ... + + flux-enabled = true + + # ... +``` + +> The default location of your `influxdb.conf` depends on your operating system. +> More information is available in the [Configuring InfluxDB](/influxdb/latest/administration/config/#using-the-configuration-file) guide. + +When InfluxDB starts, the Flux daemon starts as well and data can be queried using Flux. + + diff --git a/content/flux/v0.x/language/_index.md b/content/flux/v0.x/language/_index.md new file mode 100644 index 0000000000..72f89bc3aa --- /dev/null +++ b/content/flux/v0.x/language/_index.md @@ -0,0 +1,38 @@ +--- +title: Flux language reference +description: Covers the current and future Flux functional data scripting language, which is designed for querying, analyzing, and acting on time series data. +menu: + flux_0_x: + name: Language reference + weight: 5 +--- + +The following document specifies the Flux language and query execution. + +> **Note:** This document is a living document and may not represent the current implementation of Flux. +Any section that is not currently implemented is commented with a `[IMPL#XXX]` where `XXX` is an issue number tracking discussion and progress towards implementation. + + +The Flux language is centered on querying and manipulating time series data. + +### Notation +The syntax of the language is specified using [Extended Backus-Naur Form (EBNF)](https://en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_form): + + Production = production_name "=" [ Expression ] "." . + Expression = Alternative { "|" Alternative } . + Alternative = Term { Term } . + Term = production_name | token [ "…" token ] | Group | Option | Repetition . + Group = "(" Expression ")" . + Option = "[" Expression "]" . + Repetition = "{" Expression "}" . + +Productions are expressions constructed from terms and the following operators, in increasing precedence: + + | alternation + () grouping + [] option (0 or 1 times) + {} repetition (0 to n times) + +Lower-case production names are used to identify lexical tokens. +Non-terminals are in Camel case. +Lexical tokens are enclosed in double quotes (`""`) or back quotes (``). diff --git a/content/flux/v0.x/language/assignment-scope.md b/content/flux/v0.x/language/assignment-scope.md new file mode 100644 index 0000000000..0c27fceef0 --- /dev/null +++ b/content/flux/v0.x/language/assignment-scope.md @@ -0,0 +1,80 @@ +--- +title: Assignment and scope +description: An assignment binds an identifier to a variable, option, or function. Every identifier in a program must be assigned. +menu: + flux_0_x: + parent: Language reference + name: Assignment and scope + weight: +--- + +> **Note:** This document is a living document and may not represent the current implementation of Flux. +Any section that is not currently implemented is commented with a `[IMPL#XXX]` where `XXX` is an issue number tracking discussion and progress towards implementation. + + +An assignment binds an identifier to a variable, option, or function. +Every identifier in a program must be assigned. + +Flux is lexically scoped using blocks: + +1. The scope of a preassigned identifier is in the universe block. +2. The scope of an identifier denoting a variable, option, or function at the top level (outside any function) is the package block. +3. The scope of the name of an imported package is the file block of the file containing the import declaration. +4. The scope of an identifier denoting a function argument is the function body. +5. The scope of an identifier assigned inside a function is the innermost containing block. + +An identifier assigned in a block may be reassigned in an inner block with the exception of option identifiers. +While the identifier of the inner assignment is in scope, it denotes the entity assigned by the inner assignment. + +Note that the package clause is not an assignment. +The package name does not appear in any scope. +Its purpose is to identify the files belonging to the same package and to specify the default package name for import declarations. + +> [IMPL#247](https://github.com/influxdata/platform/issues/247) Add package/namespace support. + +## Variable assignment +A variable assignment creates a variable bound to an identifier and gives it a type and value. +A variable keeps the same type and value for the remainder of its lifetime. +An identifier assigned to a variable in a block cannot be reassigned in the same block. +An identifier can be reassigned or shadowed in an inner block. + +```js +VariableAssignment = identifier "=" Expression +``` + +##### Examples of variable assignment + +```js +n = 1 +m = 2 +x = 5.4 +f = () => { + n = "a" + m = "b" + return n + m +} +``` + +## Option assignment +```js +OptionAssignment = "option" [ identifier "." ] identifier "=" Expression +``` + +An option assignment creates an option bound to an identifier and gives it a type and a value. +Options may only be assigned in a package block. +Once declared, an option may not be redeclared in the same package block. +An option declared in one package may be reassigned a new value in another. +An option keeps the same type for the remainder of its lifetime. + +###### Examples +```js +// alert package +option severity = ["low", "moderate", "high"] +// foo package +import "alert" +option alert.severity = ["low", "critical"] // qualified option +option n = 1 +option n = 2 +f = (a, b) => a + b + n +x = f(a:1, b:1) // x = 4 +``` diff --git a/content/flux/v0.x/language/blocks.md b/content/flux/v0.x/language/blocks.md new file mode 100644 index 0000000000..12fa5f240b --- /dev/null +++ b/content/flux/v0.x/language/blocks.md @@ -0,0 +1,27 @@ +--- +title: Blocks +description: A block is a possibly empty sequence of statements within matching braces ({}). +menu: + flux_0_x: + parent: Language reference + name: Blocks + weight: 30 +--- + +> **Note:** This document is a living document and may not represent the current implementation of Flux. + +A _block_ is a possibly empty sequence of statements within matching braces (`{}`). + +``` +Block = "{" StatementList "} . +StatementList = { Statement } . +``` + +In addition to _explicit blocks_ in the source code, there are _implicit blocks_: + +1. The _universe block_ encompasses all Flux source text. +2. Each package has a _package block_ containing all Flux source text for that package. +3. Each file has a _file block_ containing all Flux source text in that file. +4. Each function literal has its own _function block_ even if not explicitly declared. + +Blocks nest and influence scoping. diff --git a/content/flux/v0.x/language/data-model.md b/content/flux/v0.x/language/data-model.md new file mode 100644 index 0000000000..dd5c37b8fd --- /dev/null +++ b/content/flux/v0.x/language/data-model.md @@ -0,0 +1,131 @@ +--- +title: Flux data model +description: Flux employs a basic data model built from basic data types. The data model consists of tables, records, columns and streams. +menu: + flux_0_x: + name: Data model + parent: Language reference + weight: 1 +--- + +> **Note:** This document is a living document and may not represent the current implementation of Flux. +> Any section that is not currently implemented is commented with a `[IMPL#XXX]` where `XXX` +> is an issue number tracking discussion and progress towards implementation. + +Flux employs a basic data model built from basic data types. +The data model consists of tables, records, columns and streams. + +## Record +A **record** is a tuple of named values and is represented using an object type. + +## Column +A **column** has a label and a data type. +The available data types for a column are: + +| Data type | Description | +| --------- |:----------- | +| bool | A boolean value, true or false. | +| uint | An unsigned 64-bit integer. | +| int | A signed 64-bit integer. | +| float | An IEEE-754 64-bit floating-point number. | +| string | A sequence of unicode characters. | +| bytes | A sequence of byte values. | +| time | A nanosecond precision instant in time. | +| duration | A nanosecond precision duration of time. | + +## Table +A **table** is set of records with a common set of columns and a group key. + +The group key is a list of columns. +A table's group key denotes which subset of the entire dataset is assigned to the table. +All records within a table will have the same values for each column that is part of the group key. +These common values are referred to as the "group key value" and can be represented as a set of key value pairs. + +A tables schema consists of its group key and its columns' labels and types. + + +> [IMPL#463](https://github.com/influxdata/flux/issues/463) Specify the primitive types that make up stream and table types + +## Stream of tables +A **stream** represents a potentially unbounded set of tables. +A stream is grouped into individual tables using their respective group keys. +Tables within a stream each have a unique group key value. + + +> [IMPL#463](https://github.com/influxdata/flux/issues/463) Specify the primitive types that make up stream and table types + +## Missing values (null) +`null` is a predeclared identifier representing a missing or unknown value. +`null` is the only value comprising the _null type_. +Any non-boolean operator that operates on basic types returns _null_ when at least one of its operands is _null_. + +Think of _null_ as an unknown value. +The following table explains how _null_ values behave in expressions: + +| Expression | Evaluates To | Because | +| ---------------- | ------------ | ----------------------------------------------------------------------------------- | +| `null + 5` | `null` | Adding 5 to an unknown value is still unknown | +| `null * 5` | `null` | Multiplying an unknown value by 5 is still unknown | +| `null == 5` | `null` | We don't know if an unknown value is equal to 5 | +| `null < 5` | `null` | We don't know if an unknown value is less than 5 | +| `null == null` | `null` | We don't know if something unknown is equal to something else that is also unknown | + +Operating on something unknown produces something that is still unknown. +The only place where this is not the case is in boolean logic. +Because boolean types are nullable, Flux implements ternary logic as a way of handling boolean operators with _null_ operands. +By interpreting a _null_ operand as an unknown value, we have the following definitions: + +- not _null_ = _null_ +- _null_ or false = _null_ +- _null_ or true = true +- _null_ or _null_ = _null_ +- _null_ and false = false +- _null_ and true = _null_ +- _null_ and _null_ = _null_ + +Because records are represented using object types, attempting to access a column +whose value is unknown or missing from a record will also return _null_. + +{{% note %}} +[IMPL#723](https://github.com/influxdata/platform/issues/723) Design how nulls behave +According to the definitions above, it is not possible to check if an expression is _null_ using the `==` and `!=` operators. +These operators will return _null_ if any of their operands are _null_. +In order to perform such a check, Flux provides a built-in `exists` operator: + +- `exists x` returns false if `x` is _null_ +- `exists x` returns true if `x` is not _null_ +{{% /note %}} + +## Transformations +Transformations define a change to a stream. +Transformations may consume an input stream and always produce a new output stream. +The output stream group keys have a stable output order based on the input stream. +Specific ordering may change between releases, but is not considered a breaking change. + +Most transformations output one table for every table they receive from the input stream. +Transformations that modify group keys or values regroup the tables in the output stream. +A transformation produces side effects when constructed from a function that produces side effects. + +Transformations are represented using function types. + +### Match parameter names + +Some transformations (for example, `map` and `filter`) are represented using higher-order functions (functions that accept other functions). +Each argument passed into a function must match the parameter name defined for the function. + +For example, `filter` accepts `fn`, which takes one argument named `r`: + + ```js +from(bucket: "db") + |> filter(fn: (r) => ...) +``` + + If a parameter is renamed from `r` to `v`, the script fails: + +```js +from(bucket: "db") + |> filter(fn: (v) => ...) + // FAILS!: 'v' != 'r'. +``` + +Because Flux does not support positional arguments, parameter names matter. The transformation (in this case, `filter`) must know `r` is the parameter name to successfully invoke the function. diff --git a/content/flux/v0.x/language/expressions.md b/content/flux/v0.x/language/expressions.md new file mode 100644 index 0000000000..9e9453d757 --- /dev/null +++ b/content/flux/v0.x/language/expressions.md @@ -0,0 +1,268 @@ +--- +title: Expressions +description: An expression specifies the computation of a value by applying the operators and functions to operands. +menu: + flux_0_x: + parent: Language reference + name: Expressions + weight: 40 +--- + +An _expression_ specifies the computation of a value by applying the operators and functions to operands. + +## Operands and primary expressions + +Operands denote the elementary values in an expression. + +Primary expressions are the operands for unary and binary expressions. +A primary expressions may be a literal, an identifier denoting a variable, or a parenthesized expression. + +```js +PrimaryExpression = identifier | Literal | "(" Expression ")" . +``` + +## Literals +Literals construct a value. + +```js +Literal = int_lit + | float_lit + | string_lit + | regex_lit + | duration_lit + | pipe_receive_lit + | ObjectLiteral + | ArrayLiteral + | FunctionLiteral . +``` + +### Object literals +Object literals construct a value with the object type. + +``` +ObjectLiteral = "{" ObjectBody "}" . +ObjectBody = WithProperties | PropertyList . +WithProperties = identifier "with" PropertyList . +PropertyList = [ Property { "," Property } ] . +Property = identifier [ ":" Expression ] + | string_lit ":" Expression . +``` + +**Examples** +```js +{a: 1, b: 2, c: 3} +{a, b, c} +{o with x: 5, y: 5} +{o with a, b} +``` + +### Array literals + +Array literals construct a value with the array type. + +```js +ArrayLiteral = "[" ExpressionList "]" . +ExpressionList = [ Expression { "," Expression } ] . +``` + +### Function literals + +A _function literal_ defines a new function with a body and parameters. +The function body may be a block or a single expression. +The function body must have a return statement if it is an explicit block, otherwise the expression is the return value. + +```js +FunctionLiteral = FunctionParameters "=>" FunctionBody . +FunctionParameters = "(" [ ParameterList [ "," ] ] ")" . +ParameterList = Parameter { "," Parameter } . +Parameter = identifier [ "=" Expression ] . +FunctionBody = Expression | Block . +``` + +##### Examples of function literals + +```js +() => 1 // function returns the value 1 +(a, b) => a + b // function returns the sum of a and b +(x=1, y=1) => x * y // function with default values +(a, b, c) => { // function with a block body + d = a + b + return d / c +} + +``` +All function literals are anonymous. +A function may be given a name using a variable assignment. + +``` +add = (a,b) => a + b +mul = (a,b) => a * b +``` + +Function literals are _closures_ and may refer to variables defined in a surrounding block. +Those variables are shared between the function literal and the surrounding block. + +## Call expressions + +A _call expression_ invokes a function with the provided arguments. +Arguments must be specified using the argument name. +Positional arguments are not supported. +Argument order does not matter. +When an argument has a default value, it is not required to be specified. + +```js +CallExpression = "(" PropertyList ")" . +``` + +##### Examples of call expressions + +```js +f(a:1, b:9.6) +float(v:1) +``` + +Use short notation in a call expression when the name of every argument matches the name of every parameter. + +##### Examples of short notation in call expressions + +```js +add(a: a, b: b) //long notation +add(a, b) // short notation equivalent +add = (a,b) => a + b +a = 1 +b = 2 +// Don't mix short and long notation. +add(a: a, b) +add(a, b: b) +``` + +## Pipe expressions + +A _pipe expression_ is a call expression with an implicit piped argument. +Pipe expressions simplify creating long nested call chains. + +Pipe expressions pass the result of the left hand expression as the _pipe argument_ to the right hand call expression. +Function literals specify which if any argument is the pipe argument using the _pipe literal_ as the argument's default value. +It is an error to use a pipe expression if the function does not declare a pipe argument. + +```js +pipe_receive_lit = "<-" . +``` + +##### Examples of pipe expressions + +```js +foo = () => // function body elided +bar = (x=<-) => // function body elided +baz = (y=<-) => // function body elided +foo() |> bar() |> baz() // equivalent to baz(x:bar(y:foo())) +``` + +## Index expressions +Index expressions access a value from an array based on a numeric index. + +```js +IndexExpression = "[" Expression "]" . +``` + +## Member expressions +Member expressions access a property of an object. +They are specified using an expression in one of the following forms: + +```js +obj.k +// or +obj["k"] +``` + +The property being accessed must be either an identifier or a string literal. +In either case the literal value is the name of the property being accessed, the identifier is not evaluated. +It is not possible to access an object's property using an arbitrary expression. + +If `obj` contains an entry with property `k`, both `obj.k` and `obj["k"]` return the value associated with `k`. +If `obj` does **not** contain an entry with property `k`, both `obj.k` and `obj["k"]` return _null_. + +```js +MemberExpression = DotExpression | MemberBracketExpression +DotExpression = "." identifer +MemberBracketExpression = "[" string_lit "]" . +``` + +## Conditional expressions +Conditional expressions evaluate a boolean-valued condition. +If the result is _true_, the expression that follows the `then` keyword is evaluated and returned. +If the result is _false_, the expression that follows the `else` keyword is evaluated and returned. +In either case, only the branch taken is evaluated and only side effects associated this branch will occur. + +```js +ConditionalExpression = "if" Expression "then" Expression "else" Expression . +``` + +##### Conditional expression example +```js +color = if code == 0 then "green" else if code == 1 then "yellow" else "red" +``` + +{{% note %}} +According to the definition above, if a condition evaluates to a _null_ or unknown value, +the _else_ branch is evaluated. +{{% /note %}} + +## Operators +Operators combine operands into expressions. +The precedence of the operators is given in the table below. +Operators with a lower number have higher precedence. + +| Precedence | Operator | Description | +|:----------:|:--------: |:-------------------------- | +| 1 | `a()` | Function call | +| | `a[]` | Member or index access | +| | `.` | Member access | +| 2 | `^` | Exponentiation | +| 3 | `*` `/` `%` | Multiplication, division, and modulo | +| 4 | `+` `-` | Addition and subtraction | +| 5 |`==` `!=` | Comparison operators | +| | `<` `<=` | | +| | `>` `>=` | | +| |`=~` `!~` | | +| 6 | `not` | Unary logical operator | +| | `exists` | Null check operator | +| 7 | `and` | Logical AND | +| 8 | `or` | Logical OR | +| 9 | `if` `then` `else` | Conditional | + +The operator precedence is encoded directly into the grammar as the following. + +```js +Expression = ConditionalExpression . +ConditionalExpression = LogicalExpression + | "if" Expression "then" Expression "else" Expression . +LogicalExpression = UnaryLogicalExpression + | LogicalExpression LogicalOperator UnaryLogicalExpression . +LogicalOperator = "and" | "or" . +UnaryLogicalExpression = ComparisonExpression + | UnaryLogicalOperator UnaryLogicalExpression . +UnaryLogicalOperator = "not" | "exists". +ComparisonExpression = MultiplicativeExpression + | ComparisonExpression ComparisonOperator MultiplicativeExpression . +ComparisonOperator = "==" | "!=" | "<" | "<=" | ">" | ">=" | "=~" | "!~" . +AdditiveExpression = MultiplicativeExpression + | AdditiveExpression AdditiveOperator MultiplicativeExpression . +AdditiveOperator = "+" | "-" . +MultiplicativeExpression = PipeExpression + | MultiplicativeExpression MultiplicativeOperator PipeExpression . +MultiplicativeOperator = "*" | "/" | "%" | "^" . +PipeExpression = PostfixExpression + | PipeExpression PipeOperator UnaryExpression . +PipeOperator = "|>" . +UnaryExpression = PostfixExpression + | PrefixOperator UnaryExpression . +PrefixOperator = "+" | "-" . +PostfixExpression = PrimaryExpression + | PostfixExpression PostfixOperator . +PostfixOperator = MemberExpression + | CallExpression + | IndexExpression . +``` + +_Also see [Flux Operators](/flux/v0.x/language/operators)._ diff --git a/content/flux/v0.x/language/lexical-elements.md b/content/flux/v0.x/language/lexical-elements.md new file mode 100644 index 0000000000..3327daf4ff --- /dev/null +++ b/content/flux/v0.x/language/lexical-elements.md @@ -0,0 +1,337 @@ +--- +title: Lexical elements +description: Descriptions of Flux comments, tokens, identifiers, keywords, and other lexical elements. +menu: + flux_0_x: + parent: Language reference + name: Lexical elements + weight: 50 +--- + +> **Note:** This document is a living document and may not represent the current implementation of Flux. +Any section that is not currently implemented is commented with a `[IMPL#XXX]` where `XXX` is an issue number tracking discussion and progress towards implementation. + +## Comments + +Comment serve as documentation. +Comments begin with the character sequence `//` and stop at the end of the line. + +Comments cannot start inside string or regexp literals. +Comments act like newlines. + +## Tokens + +Flux is built up from tokens. +There are four classes of tokens: + +* _identifiers_ +* _keywords_ +* _operators_ +* _literals_ + + +_White space_ formed from spaces, horizontal tabs, carriage returns, and newlines is ignored except as it separates tokens that would otherwise combine into a single token. +While breaking the input into tokens, the next token is the longest sequence of characters that form a valid token. + +## Identifiers + +Identifiers name entities within a program. +An _identifier_ is a sequence of one or more letters and digits. +An identifier must start with a letter. + +```js + identifier = letter { letter | unicode_digit } . +``` + +##### Examples of identifiers + +``` +a +_x +longIdentifierName +αβ +``` + +## Keywords + +The following keywords are reserved and may not be used as identifiers: + +``` +and import not return option test +empty in or package builtin +``` + +> [IMPL#256](https://github.com/influxdata/platform/issues/256) Add in and empty operator support. + +## Operators + +The following character sequences represent operators: + +``` ++ == != ( ) +- < !~ [ ] +* > =~ { } +/ <= = , : +% >= <- . |> +``` + +## Numeric literals + +Numeric literals may be integers or floating point values. +Literals have arbitrary precision and are coerced to a specific type when used. + +The following coercion rules apply to numeric literals: + +* An integer literal can be coerced to an "int", "uint", or "float" type, +* A float literal can be coerced to a "float" type. +* An error will occur if the coerced type cannot represent the literal value. + + +> [IMPL#255](https://github.com/influxdata/platform/issues/255) Allow numeric literal coercion. + +### Integer literals + +An integer literal is a sequence of digits representing an integer value. +Only decimal integers are supported. + +```js + int_lit = "0" | decimal_lit . + decimal_lit = ( "1" … "9" ) { decimal_digit } . +``` + +##### Examples of integer literals + +``` +0 +42 +317316873 +``` + +## Floating-point literals + +A _floating-point literal_ is a decimal representation of a floating-point value. +It has an integer part, a decimal point, and a fractional part. +The integer and fractional part comprise decimal digits. +One of the integer part or the fractional part may be elided. + +```js +float_lit = decimals "." [ decimals ] + | "." decimals . +decimals = decimal_digit { decimal_digit } . +``` + +##### Examples of floating-point literals + +```js +0. +72.40 +072.40 // == 72.40 +2.71828 +.26 +``` + +> [IMPL#254](https://github.com/influxdata/platform/issues/254) Parse float literals. + +### Duration literals + +A _duration literal_ is a representation of a length of time. +It has an integer part and a duration unit part. +Multiple durations may be specified together and the resulting duration is the sum of each smaller part. +When several durations are specified together, larger units must appear before smaller ones, and there can be no repeated units. + +```js +duration_lit = { int_lit duration_unit } . +duration_unit = "y" | "mo" | "w" | "d" | "h" | "m" | "s" | "ms" | "us" | "µs" | "ns" . +``` + +| Units | Meaning | +| ----- | ------- | +| y | year (12 months) | +| mo | month | +| w | week (7 days) | +| d | day | +| h | hour (60 minutes) | +| m | minute (60 seconds) | +| s | second | +| ms | milliseconds (1 thousandth of a second) | +| us or µs | microseconds (1 millionth of a second) | +| ns | nanoseconds (1 billionth of a second) | + +Durations represent a length of time. +Lengths of time are dependent on specific instants in time they occur and as such, durations do not represent a fixed amount of time. +No amount of seconds is equal to a day, as days vary in their number of seconds. +No amount of days is equal to a month, as months vary in their number of days. +A duration consists of three basic time units: seconds, days and months. + +Durations can be combined via addition and subtraction. +Durations can be multiplied by an integer value. +These operations are performed on each time unit independently. + +##### Examples of duration literals + +```js +1s +10d +1h15m // 1 hour and 15 minutes +5w +1mo5d // 1 month and 5 days +``` +Durations can be added to date times to produce a new date time. + +Addition and subtraction of durations to date times do not commute and are left associative. +Addition and subtraction of durations to date times applies months, days and seconds in that order. +When months are added to a date times and the resulting date is past the end of the month, the day is rolled back to the last day of the month. + +##### Examples of duration literals + +```js +2018-01-01T00:00:00Z + 1d // 2018-01-02T00:00:00Z +2018-01-01T00:00:00Z + 1mo // 2018-02-01T00:00:00Z +2018-01-01T00:00:00Z + 2mo // 2018-03-01T00:00:00Z +2018-01-31T00:00:00Z + 2mo // 2018-03-31T00:00:00Z +2018-02-28T00:00:00Z + 2mo // 2018-04-28T00:00:00Z +2018-01-31T00:00:00Z + 1mo // 2018-02-28T00:00:00Z, February 31th is rolled back to the last day of the month, February 28th in 2018. + +// Addition and subtraction of durations to date times does not commute +2018-02-28T00:00:00Z + 1mo + 1d // 2018-03-29T00:00:00Z +2018-02-28T00:00:00Z + 1d + 1mo // 2018-04-01T00:00:00Z +2018-01-01T00:00:00Z + 2mo - 1d // 2018-02-28T00:00:00Z +2018-01-01T00:00:00Z - 1d + 3mo // 2018-03-31T00:00:00Z + +// Addition and subtraction of durations to date times applies months, days and seconds in that order. +2018-01-28T00:00:00Z + 1mo + 2d // 2018-03-02T00:00:00Z +2018-01-28T00:00:00Z + 1mo2d // 2018-03-02T00:00:00Z +2018-01-28T00:00:00Z + 2d + 1mo // 2018-02-28T00:00:00Z, explicit left associative add of 2d first changes the result +2018-02-01T00:00:00Z + 2mo2d // 2018-04-03T00:00:00Z +2018-01-01T00:00:00Z + 1mo30d // 2018-03-02T00:00:00Z, Months are applied first to get February 1st, then days are added resulting in March 2 in 2018. +2018-01-31T00:00:00Z + 1mo1d // 2018-03-01T00:00:00Z, Months are applied first to get February 28th, then days are added resulting in March 1 in 2018. +``` + +> To be added: [IMPL#657](https://github.com/influxdata/platform/issues/657) Implement Duration vectors. + +## Date and time literals + +A _date and time literal_ represents a specific moment in time. +It has a date part, a time part and a time offset part. +The format follows the [RFC 3639](https://tools.ietf.org/html/rfc3639) specification. +The time is optional. +When it is omitted, the time is assumed to be midnight for the default location. +The `time_offset` is optional. +When it is omitted, the location option is used to determine the offset. + +```js +date_time_lit = date [ "T" time ] . +date = year_lit "-" month "-" day . +year = decimal_digit decimal_digit decimal_digit decimal_digit . +month = decimal_digit decimal_digit . +day = decimal_digit decimal_digit . +time = hour ":" minute ":" second [ fractional_second ] [ time_offset ] . +hour = decimal_digit decimal_digit . +minute = decimal_digit decimal_digit . +second = decimal_digit decimal_digit . +fractional_second = "." { decimal_digit } . +time_offset = "Z" | ("+" | "-" ) hour ":" minute . +``` + +##### Examples of date and time literals + +```js +1952-01-25T12:35:51Z +2018-08-15T13:36:23-07:00 +2009-10-15T09:00:00 // October 15th 2009 at 9 AM in the default location +2018-01-01 // midnight on January 1st 2018 in the default location +``` + +> [IMPL#152](https://github.com/influxdata/flux/issues/152) Implement shorthand time literals. + +### String literals + +A _string literal_ represents a sequence of characters enclosed in double quotes. +Within the quotes any character may appear except an unescaped double quote. +String literals support several escape sequences. + +``` +\n U+000A line feed or newline +\r U+000D carriage return +\t U+0009 horizontal tab +\" U+0022 double quote +\\ U+005C backslash +\${ U+0024 U+007B dollar sign and opening curly bracket +``` + +Additionally, any byte value may be specified via a hex encoding using `\x` as the prefix. + +``` +string_lit = `"` { unicode_value | byte_value | StringExpression | newline } `"` . +byte_value = `\` "x" hex_digit hex_digit . +hex_digit = "0" … "9" | "A" … "F" | "a" … "f" . +unicode_value = unicode_char | escaped_char . +escaped_char = `\` ( "n" | "r" | "t" | `\` | `"` ) . +StringExpression = "${" Expression "}" . +``` + +> To be added: TODO: With string interpolation `string_lit` is not longer a lexical token as part of a literal, but an entire expression in and of itself. + +> [IMPL#252](https://github.com/influxdata/platform/issues/252) Parse string literals. + + +##### Examples of string literals + +```js +"abc" +"string with double \" quote" +"string with backslash \\" +"日本語" +"\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e" // the explicit UTF-8 encoding of the previous line +``` + +String literals are also interpolated for embedded expressions to be evaluated as strings. +Embedded expressions are enclosed in a dollar sign and curly braces (`${}`). +The expressions are evaluated in the scope containing the string literal. +The result of an expression is formatted as a string and replaces the string content between the braces. +All types are formatted as strings according to their literal representation. +A function `printf` exists to allow more precise control over formatting of various types. +To include the literal curly brackets within a string they must be escaped. + + +> [IMPL#248](https://github.com/influxdata/platform/issues/248) Add printf function. + +##### Example: Interpolation + +```js +n = 42 +"the answer is ${n}" // the answer is 42 +"the answer is not ${n+1}" // the answer is not 43 +"dollar sign opening curly bracket \${" // dollar sign opening curly bracket ${ +``` + + +### Regular expression literals + +A _regular expression literal_ represents a regular expression pattern, enclosed in forward slashes. +Within the forward slashes, any unicode character may appear except for an unescaped forward slash. +The `\x` hex byte value representation from string literals may also be present. + +Regular expression literals support only the following escape sequences: + +``` + \/ U+002f forward slash + \\ U+005c backslash +``` + +``` +regexp_lit = "/" { unicode_char | byte_value | regexp_escape_char } "/" . +regexp_escape_char = `\` (`/` | `\`) +``` + +##### Examples of regular expression literals + +```js +/.*/ +/http:\/\/localhost:9999/ +/^\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e(ZZ)?$/ +/^日本語(ZZ)?$/ // the above two lines are equivalent +/\\xZZ/ // this becomes the literal pattern "\xZZ" +``` + +The regular expression syntax is defined by [RE2](https://github.com/google/re2/wiki/Syntax). diff --git a/content/flux/v0.x/language/notation.md b/content/flux/v0.x/language/notation.md new file mode 100644 index 0000000000..b306181f2d --- /dev/null +++ b/content/flux/v0.x/language/notation.md @@ -0,0 +1,36 @@ +--- +title: Notation +description: Notation principles for the Flux functional data scripting language. +menu: + flux_0_x: + parent: Language reference + name: Notation + weight: 60 +--- + +> **Note:** This document is a living document and may not represent the current implementation of Flux. + +The syntax of the language is specified using [Extended Backus-Naur Form (EBNF)](https://en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_form): + +``` +Production = production_name "=" [ Expression ] "." . +Expression = Alternative { "|" Alternative } . +Alternative = Term { Term } . +Term = production_name | token [ "…" token ] | Group | Option | Repetition . +Group = "(" Expression ")" . +Option = "[" Expression "]" . +Repetition = "{" Expression "}" . +``` + +A _production_ is an expression constructed from terms and the following operators, in increasing precedence: + +``` +| alternation +() grouping +[] option (0 or 1 times) +{} repetition (0 to n times) +``` + +Lowercase production names are used to identify lexical tokens. +Non-terminals are in [camel case](https://en.wikipedia.org/wiki/Camel_case). +Lexical tokens are enclosed in double quotes (`""`) or back quotes (``). diff --git a/content/flux/v0.x/language/operators.md b/content/flux/v0.x/language/operators.md new file mode 100644 index 0000000000..70681ecd1f --- /dev/null +++ b/content/flux/v0.x/language/operators.md @@ -0,0 +1,147 @@ +--- +title: Operators in the Flux language +description: Flux supports many types of operators including arithmetic operators, comparison operators, function operators, and others. +menu: + flux_0_x: + name: Operators + parent: Language reference + weight: 130 +--- + +Flux includes the following types of operators: + +- [Arithmetic operators](#arithmetic-operators) +- [Comparison operators](#comparison-operators) +- [Logical operators](#logical-operators) +- [Assignment operators](#assignment-operators) +- [Function operators](#function-operators) +- [String Operators](#string-operators) +- [Literal constructors](#literal-constructors) +- [Miscellaneous operators](#miscellaneous-operators) + +_Also see:_ + +- [Operator precedence](#operator-precedence) + +## Arithmetic operators +Arithmetic operators take two numerical values (either literals or variables) and +perform a calculation that returns a single numerical value. + +| Operator | Description | Example | Result | +|:--------:|:----------- | ------- | ------ | +| `+` | Addition | `1 + 1` | `2` | +| `-` | Subtraction | `3 - 2` | `1` | +| `*` | Multiplication | `2 * 3` | `6` | +| `/` | Division | `9 / 3` | `3` | +| `^` | Exponentiation | `2 ^ 3` | `8` | +| `%` | Modulo | `10 % 5` | `0` | + +{{% note %}} +In the current version of Flux, values used in arithmetic operations must +be of the same numeric type (integer or float). +Operations with values of different numeric types will result in a type error. +{{% /note %}} + +## Comparison operators +Comparison operators compare expressions and return true or false based on the comparison. + +| Operator | Description | Example | Result | +|:--------:|:----------- | ------- | ------ | +| `==` | Equal to | `"abc" == "abc"` | `true` | +| `!=` | Not equal to | `"abc" != "def"` | `true` | +| `<` | Less than | `1 < 2` | `true` | +| `>` | Greater than | `1 > 2` | `false` | +| `<=` | Less than or equal | `1 <= 2` | `true` | +| `>=` | Greater than or equal | `1 >= 2` | `false` | +| `=~` | Equal to regular expression | `"abc" =~ /[a-z]*/` | `true` | +| `!~` | Not equal to regular expression | `"abc" !~ /[0-9]*/` | `true` | + +{{% note %}} +The `>` and `<` operators also [compare the lexicographic order of strings](#string-operators). +{{% /note %}} + +## Logical operators +| Operator | Description | +|:--------:|:----------- | +| `and` | Returns `true` if both operands are true. Otherwise, returns `false`. | +| `or` | Returns `true` if any operand is true. Otherwise, returns `false`. | + +#### Short-circuit evaluation +Flux logical operators observe the short-circuiting behavior seen in other programming languages. +The evaluation of the left-hand (LH) operand determines if the right-hand (RH) operand is evaluated. + +- When the operator is `and` and the LH operand evaluates to `false`, the evaluation + returns `false` without evaluating the RH operand. +- When the operator is `or` and the LH operand evaluates to `true`, the evaluation + returns `true` without evaluating the RH operand. + +## Assignment operators +An assignment operator assigns a value to its left operand based on the value of its right operand. + +| Operator | Description | Example | Meaning | +|:--------:|:----------- | ------- | ------- | +| `=` | Assign value of left expression to right expression | `x = y` | x = y | + + +## Function operators +Function operators facilitate the creation of functions and control the flow of data through operations. + +| Operator | Description | Examples | Meaning | +|:--------: |:----------- | -------- | ------- | +| |> | Pipe‑forward | data |> function() | Tables contained in the "data" variable are piped into the function. | +| `<-` | Pipe‑receive | `tables=<-` | The "tables" variable or parameter is assigned to data piped into the operation. _This operator is used for any data type passed into a function; not just table data._ | +| `=>` | Arrow | `(r) => r.tag1 == "tagvalue"` | The arrow passes an object or parameters into function operations. | +| `()` | Function call | `top(n:10)` | Call the `top` function setting the `n` parameter to `10` and perform the associated operations. | + +--- + +_See [Custom functions](/v2.0/query-data/guides/custom-functions) for examples of function operators is use._ + +--- + +## String Operators +String operators concatenate or compare string values. + +| Operator | Description | Examples | Result | +|:--------:|:----------- | -------- | ------ | +| `+` | Concatenation | `"ab" + "c"` | `"abc"` | +| `<` | Less than in lexicographic order | `"ant" < "bee"` | `true` | +| `>` | Greater than in lexicographic order | `"ant" > "bee"` | `false` | + +## Literal constructors +Literal constructors define fixed values. + +| Operator | Description | +|:--------:| ----------- | +| `[ ]` | List / array | +| `{ }` | Object | +| `""` | String | + +## Miscellaneous operators +| Operator | Description | Example | +|:--------:|:----------- | ------- | +| `( )` | Logical grouping | `r._value / (r._value * 2)` | +| `,` | Sequence delimiter | `item1, item2, item3` | +| `:` | Key-value separator | `{name: "Bob"}` | +| `.` | Member access / dot reference | `r._measurement` | + +## Operator precedence +The table below outlines operator precedence. +Operators with a lower number have higher precedence. + +| Precedence | Operator | Description | +|:----------:|:--------: |:--------------------------| +| 1 | `a()` | Function call | +| | `a[]` | Member or index access | +| | `.` | Member access | +| 2 | `*` `/` |Multiplication and division| +| 3 | `+` `-` | Addition and subtraction | +| 4 |`==` `!=` | Comparison operators | +| | `<` `<=` | | +| | `>` `>=` | | +| |`=~` `!~` | | +| 5 | `not` | Unary logical operator | +| | `exists` | Null check operator | +| 6 | `and` | Logical AND | +| 7 | `or` | Logical OR | +| 8 | `if` `then` `else` | Conditional | diff --git a/content/flux/v0.x/language/options.md b/content/flux/v0.x/language/options.md new file mode 100644 index 0000000000..2672c2e9d3 --- /dev/null +++ b/content/flux/v0.x/language/options.md @@ -0,0 +1,55 @@ +--- +title: Options +description: placeholder +menu: + flux_0_x: + parent: Language reference + name: Options + weight: 110 +--- + +> **Note:** This document is a living document and may not represent the current implementation of Flux. +Any section that is not currently implemented is commented with a `[IMPL#XXX]` where `XXX` is an issue number tracking discussion and progress towards implementation. + +An option represents a storage location for any value of a specified type. +Options are mutable. +An option can hold different values during its lifetime. + +Below is a list of built-in options currently implemented in the Flux language: + +- now +- task +- location + +##### now +The `now` option is a function that returns a time value used as a proxy for the current system time. + +```js +// Query should execute as if the below time is the current system time +option now = () => 2006-01-02T15:04:05-07:00 +``` + +##### task +The `task` option schedules the execution of a Flux query. + +```js +option task = { + name: "foo", // Name is required. + every: 1h, // Task should be run at this interval. + delay: 10m, // Delay scheduling this task by this duration. + cron: "0 2 * * *", // Cron is a more sophisticated way to schedule. 'every' and 'cron' are mutually exclusive. + retry: 5, // Number of times to retry a failed query. +} +``` + +##### location +The `location` option sets the default time zone of all times in the script. +The location maps the UTC offset in use at that location for a given time. +The default value is set using the time zone of the running process. + +```js +option location = fixedZone(offset:-5h) // Set timezone to be 5 hours west of UTC. +option location = loadLocation(name:"America/Denver") // Set location to be America/Denver. +``` + +> [IMPL#660](https://github.com/influxdata/platform/issues/660) Implement Location option diff --git a/content/flux/v0.x/language/packages.md b/content/flux/v0.x/language/packages.md new file mode 100644 index 0000000000..38dd0c898c --- /dev/null +++ b/content/flux/v0.x/language/packages.md @@ -0,0 +1,65 @@ +--- +title: Packages +description: > + Flux source is organized into packages. + A package consists of one or more source files. + Each source file is parsed individually and composed into a single package. +aliases: + - /flux/v0.x/language/programs +menu: + flux_0_x: + parent: Language reference + name: Packages + weight: 70 +--- + +> **Note:** This document is a living document and may not represent the current implementation of Flux. + +Flux source is organized into packages. +A package consists of one or more source files. +Each source file is parsed individually and composed into a single package. + +```js +File = [ PackageClause ] [ ImportList ] StatementList . +ImportList = { ImportDeclaration } . +``` + +## Package clause + +```js +PackageClause = "package" identifier . +``` + +A _package clause_ defines the name for the current package. +Package names must be valid Flux identifiers. +The package clause must be at the beginning of any Flux source file. +All files in the same package must declare the same package name. +When a file does not declare a package clause, all identifiers in that +file will belong to the special `main` package. + +> [IMPL#247](https://github.com/influxdata/platform/issues/247) Add package/namespace support. + +### Package main + +The `main` package is special for a few reasons: + +1. It defines the entry point of a Flux program. +2. It cannot be imported. +3. All statements are marked as producing side effects. + +## Package initialization + +Packages are initialized in the following order: + +1. All imported packages are initialized and assigned to their package identifier. +2. All option declarations are evaluated and assigned regardless of order. An option cannot have a dependency on another option assigned in the same package block. +3. All variable declarations are evaluated and assigned regardless of order. A variable cannot have a direct or indirect dependency on itself. +4. Any package side effects are evaluated. + +A package will only be initialized once across all file blocks and across all packages blocks regardless of how many times it is imported. + +Initializing imported packages must be deterministic. +Specifically after all imported packages are initialized, each option must be assigned the same value. +Packages imported in the same file block are initialized in declaration order. +Packages imported across different file blocks have no known order. +When a set of imports modify the same option, they must be ordered by placing them in the same file block. diff --git a/content/flux/v0.x/language/representation.md b/content/flux/v0.x/language/representation.md new file mode 100644 index 0000000000..7b36b9adf4 --- /dev/null +++ b/content/flux/v0.x/language/representation.md @@ -0,0 +1,40 @@ +--- +title: Representation +description: Source code is encoded in UTF-8. The text need not be canonicalized. +menu: + flux_0_x: + parent: Language reference + name: Representation + weight: 80 +--- + +> **Note:** This document is a living document and may not represent the current implementation of Flux. + + +Source code is encoded in UTF-8. +The text need not be canonicalized. + +## Characters + +This document will use the term _character_ to refer to a Unicode code point. + +The following terms are used to denote specific Unicode character classes: + +``` +newline = /* the Unicode code point U+000A */ . +unicode_char = /* an arbitrary Unicode code point except newline */ . +unicode_letter = /* a Unicode code point classified as "Letter" */ . +unicode_digit = /* a Unicode code point classified as "Number, decimal digit" */ . +``` + +In The Unicode Standard 8.0, Section 4.5, "General Category" defines a set of character categories. +Flux treats all characters in any of the Letter categories (Lu, Ll, Lt, Lm, or Lo) as Unicode letters, and those in the Number category (Nd) as Unicode digits. + +### Letters and digits + +The underscore character `_` (`U+005F`) is considered a letter. + +``` +letter = unicode_letter | "_" . +decimal_digit = "0" … "9" . +``` diff --git a/content/flux/v0.x/language/side-effects.md b/content/flux/v0.x/language/side-effects.md new file mode 100644 index 0000000000..85bb2cf0d9 --- /dev/null +++ b/content/flux/v0.x/language/side-effects.md @@ -0,0 +1,18 @@ +--- +title: Side effects +description: A summary of side effects in the Flux functional data scripting language. +menu: + flux_0_x: + parent: Language reference + name: Side effects + weight: 90 +--- + +> **Note:** This document is a living document and may not represent the current implementation of Flux. + +Side effects can occur in one of two ways. + +1. By reassigning built-in options +2. By calling a function that produces side effects + +A function produces side effects when it is explicitly declared to have side effects or when it calls a function that itself produces side effects. diff --git a/content/flux/v0.x/language/statements.md b/content/flux/v0.x/language/statements.md new file mode 100644 index 0000000000..e740ab188e --- /dev/null +++ b/content/flux/v0.x/language/statements.md @@ -0,0 +1,158 @@ +--- +title: Statements +description: Statements control execution in the Flux functional data scripting language. +menu: + flux_0_x: + parent: Language reference + name: Statements + weight: 100 +--- + +> **Note:** This document is a living document and may not represent the current implementation of Flux. +Any section that is not currently implemented is commented with a `[IMPL#XXX]` where `XXX` is an issue number tracking discussion and progress towards implementation. + +A _statement_ controls execution. + +```js +Statement = OptionAssignment + | BuiltinStatement + | VariableAssignment + | ReturnStatement + | ExpressionStatement . +``` + +## Import declaration + +```js +ImportDeclaration = "import" [identifier] string_lit +``` + +A package name and an import path is associated with every package. +The import statement takes a package's import path and brings all of the identifiers +defined in that package into the current scope under a namespace. +The import statement defines the namespace through which to access the imported identifiers. +By default the identifier of this namespace is the package name unless otherwise specified. +For example, given a variable `x` declared in package `foo`, importing `foo` and referencing `x` would look like this: + +```js +import "import/path/to/package/foo" + +foo.x +``` + +Or this: + +```js +import bar "import/path/to/package/foo" + +bar.x +``` + +A package's import path is always absolute. +A package may reassign a new value to an option identifier declared in one of its imported packages. +A package cannot access nor modify the identifiers belonging to the imported packages of its imported packages. +Every statement contained in an imported package is evaluated. + +## Return statements + +A terminating statement prevents execution of all statements that appear after it in the same block. +A return statement is a terminating statement. + +``` +ReturnStatement = "return" Expression . +``` +## Expression statements + +An _expression statement_ is an expression where the computed value is discarded. + +``` +ExpressionStatement = Expression . +``` + +##### Examples of expression statements + +```js +1 + 1 +f() +a +``` + +## Named types + +A named type can be created using a type assignment statement. +A named type is equivalent to the type it describes and may be used interchangeably. + +```js +TypeAssignement = "type" identifier "=" TypeExpression +TypeExpression = identifier + | TypeParameter + | ObjectType + | ArrayType + | GeneratorType + | FunctionType . +TypeParameter = "'" identifier . +ObjectType = "{" PropertyTypeList [";" ObjectUpperBound ] "}" . +ObjectUpperBound = "any" | PropertyTypeList . +PropertyTypeList = PropertyType [ "," PropertyType ] . +PropertyType = identifier ":" TypeExpression + | string_lit ":" TypeExpression . +ArrayType = "[]" TypeExpression . +GeneratorType = "[...]" TypeExpression . +FunctionType = ParameterTypeList "->" TypeExpression +ParameterTypeList = "(" [ ParameterType { "," ParameterType } ] ")" . +ParameterType = identifier ":" [ pipe_receive_lit ] TypeExpression . +``` + +Named types are a separate namespace from values. +It is possible for a value and a type to have the same identifier. +The following named types are built-in. + +```js +bool // boolean +int // integer +uint // unsigned integer +float // floating point number +duration // duration of time +time // time +string // utf-8 encoded string +regexp // regular expression +type // a type that itself describes a type +``` + +When an object's upper bound is not specified, it is assumed to be equal to its lower bound. + +Parameters to function types define whether the parameter is a pipe forward +parameter and whether the parameter has a default value. +The `<-` indicates the parameter is the pipe forward parameter. + +###### Examples +```js + // alias the bool type + type boolean = bool + + // define a person as an object type + type person = { + name: string, + age: int, + } + + // Define addition on ints + type intAdd = (a: int, b: int) -> int + + // Define polymorphic addition + type add = (a: 'a, b: 'a) -> 'a + + // Define funcion with pipe parameter + type bar = (foo: <-string) -> string + + // Define object type with an empty lower bound and an explicit upper bound + type address = { + ; + street: string, + city: string, + state: string, + country: string, + province: string, + zip: int, + } +``` diff --git a/content/flux/v0.x/language/string-interpolation.md b/content/flux/v0.x/language/string-interpolation.md new file mode 100644 index 0000000000..068ce11394 --- /dev/null +++ b/content/flux/v0.x/language/string-interpolation.md @@ -0,0 +1,86 @@ +--- +title: String interpolation +description: > + Flux string interpolation evaluates string literals containing one or more placeholders + and returns a result with placeholders replaced with their corresponding values. +menu: + flux_0_x: + parent: Language reference + name: String interpolation + weight: 11 +--- + +Flux string interpolation evaluates string literals containing one or more placeholders +and returns a result with placeholders replaced with their corresponding values. + +## String interpolation syntax +To use Flux string interpolation, enclose embedded [expressions](/flux/v0.x/language/expressions/) +in a dollar sign and curly braces `${}`. +Flux replaces the content between the braces with the result of the expression and +returns a string literal. + +```js +name = "John" +"My name is ${name}." +// My name is John. +``` + +{{% note %}} +#### Flux only interpolates string values +Flux currently interpolates only string values ([IMP#1775](https://github.com/influxdata/flux/issues/1775)). +Use the [string() function](/flux/v0.x/stdlib/built-in/transformations/type-conversions/string/) +to convert non-string values to strings. + +```js +count = 12 +"I currently have ${string(v: count)} cats." +``` +{{% /note %}} + + +## Use dot notation to interpolate object values +[Objects](/flux/v0.x/language/expressions/#object-literals) consist of key-value pairs. +Use [dot notation](/flux/v0.x/language/expressions/#member-expressions) +to interpolate values from an object. + +```js +person = { + name: "John", + age: 42 +} +"My name is ${person.name} and I'm ${string(v: person.age)} years old." +// My name is John and I'm 42 years old. +``` + +Flux returns each record in query results as an object. +In Flux row functions, each row object is represented by `r`. +Use dot notation to interpolate specific column values from the `r` object. + +##### Use string interpolation to add a human-readable message +```js +from(bucket: "telegraf/autogen") + |> range(start: -30m) + |> map(fn: (r) => ({ + r with + human-readable: "${r._field} is ${r._value} at ${string(v: r._time)}." + })) +``` + +## String interpolation versus concatenation +Flux supports both string interpolation and string concatenation. +String interpolation is a more concise method for achieving the same result. + +```js +person = { + name: "John", + age: 42 +} + +// String interpolation +"My name is ${person.name} and I'm ${string(v: person.age)} years old." + +// String concatenation +"My name is " + person.name + " and I'm " + string(v: person.age) + " years old." + +// Both return: My name is John and I'm 42 years old. +``` diff --git a/content/flux/v0.x/language/system-built-ins.md b/content/flux/v0.x/language/system-built-ins.md new file mode 100644 index 0000000000..6a97792fe7 --- /dev/null +++ b/content/flux/v0.x/language/system-built-ins.md @@ -0,0 +1,26 @@ +--- +title: System built-ins +description: > + When a built-in value is not expressible in Flux, its value may be defined by the hosting environment. + All such values must have a corresponding builtin statement to declare the existence and type of the built-in value. +aliases: + - /flux/v0.x/language/built-ins/system-built-ins/ +menu: + flux_0_x: + name: System built-ins + parent: Language reference + weight: 6 +--- + +When a built-in value is not expressible in Flux, its value may be defined by the hosting environment. +All such values must have a corresponding builtin statement to declare the existence and type of the built-in value. + +```js +BuiltinStatement = "builtin" identifer ":" TypeExpression +``` + +##### Example + +```js +builtin from : (bucket: string, bucketID: string) -> stream +``` diff --git a/content/flux/v0.x/language/types.md b/content/flux/v0.x/language/types.md new file mode 100644 index 0000000000..c1913d87d4 --- /dev/null +++ b/content/flux/v0.x/language/types.md @@ -0,0 +1,135 @@ +--- +title: Types +description: A type defines the set of values and operations on those values. Types are never explicitly declared as part of the syntax. Types are always inferred from the usage of the value. +menu: + flux_0_x: + parent: Language reference + name: Types + weight: 110 +--- + +> **Note:** This document is a living document and may not represent the current implementation of Flux. +Any section that is not currently implemented is commented with a `[IMPL#XXX]` where `XXX` is an issue number tracking discussion and progress towards implementation. + +A _type_ defines the set of values and operations on those values. +Types are never explicitly declared as part of the syntax. +Types are always inferred from the usage of the value. + +## Union types +A union type defines a set of types. +In the examples below, a union type is specified as follows: + +```js +T = t1 | t2 | ... | tn +``` + +where `t1`, `t2`, ..., and `tn` are types. + +In the example above a value of type `T` is either of type `t1`, type `t2`, ..., or type `tn`. + +## Basic types +All Flux data types are constructed from the following types: + +### Null types +The **null type** represents a missing or unknown value. +The **null type** name is `null`. +There is only one value that comprises the _null type_ and that is the _null_ value. +A type `t` is nullable if it can be expressed as follows: + +```js +t = {s} | null +``` + +where `{s}` defines a set of values. + +### Boolean types +A _boolean type_ represents a truth value, corresponding to the preassigned variables `true` and `false`. +The boolean type name is `bool`. +The boolean type is nullable and can be formally specified as follows: + +```js +bool = {true, false} | null +``` + +### Numeric types +A _numeric type_ represents sets of integer or floating-point values. + +The following numeric types exist: + +``` +uint the set of all unsigned 64-bit integers | null +int the set of all signed 64-bit integers | null +float the set of all IEEE-754 64-bit floating-point numbers | null +``` + +{{% note %}} +All numeric types are nullable. +{{% /note %}} + +### Time types +A _time type_ represents a single point in time with nanosecond precision. +The time type name is `time`. +The time type is nullable. + +#### Timestamp format +Flux supports [RFC3639](https://tools.ietf.org/html/rfc3639#section-5.6) timestamps: + +- `YYYY-MM-DD` +- `YYYY-MM-DDT00:00:00Z` +- `YYYY-MM-DDT00:00:00.000Z` + +### Duration types +A _duration type_ represents a length of time with nanosecond precision. +The duration type name is `duration`. +The duration type is nullable. + +Durations can be added to times to produce a new time. + +##### Examples of duration types +```js +2018-07-01T00:00:00Z + 1mo // 2018-08-01T00:00:00Z +2018-07-01T00:00:00Z + 2y // 2020-07-01T00:00:00Z +2018-07-01T00:00:00Z + 5h // 2018-07-01T05:00:00Z +``` + +### String types +A _string type_ represents a possibly empty sequence of characters. +Strings are immutable and cannot be modified once created. +The string type name is `string`. +The string type is nullable. + +{{% note %}} +An empty string is **not** a _null_ value. +{{% /note %}} + +The length of a string is its size in bytes, not the number of characters, since a single character may be multiple bytes. + +## Regular expression types +A _regular expression type_ represents the set of all patterns for regular expressions. +The regular expression type name is `regexp`. +The regular expression type is **not** nullable. + +## Composite types +These are types constructed from basic types. +Composite types are not nullable. + +### Array types +An _array type_ represents a sequence of values of any other type. +All values in the array must be of the same type. +The length of an array is the number of elements in the array. + +### Object types +An _object type_ represents a set of unordered key and value pairs. +The key must always be a string. +The value may be any other type, and need not be the same as other values within the object. + +### Function types +A _function type_ represents a set of all functions with the same argument and result types. + +> [IMPL#249](https://github.com/influxdata/platform/issues/249) Specify type inference rules. + +### Generator types +A _generator type_ represents a value that produces an unknown number of other values. +The generated values may be of any other type, but must all be the same type. + +[IMPL#658](https://github.com/influxdata/platform/query/issues/658) Implement Generators types. diff --git a/content/flux/v0.x/language/variables.md b/content/flux/v0.x/language/variables.md new file mode 100644 index 0000000000..46edbcb7c7 --- /dev/null +++ b/content/flux/v0.x/language/variables.md @@ -0,0 +1,15 @@ +--- +title: Variables +description: Flux variables are immutable storage locations for single values. +menu: + flux_0_x: + parent: Language reference + name: Variables + weight: 120 +--- + +> **Note:** This document is a living document and may not represent the current implementation of Flux. + +A **variable** represents a storage location for a single value. +Variables are immutable. +Once a variable is given a value, it holds that value for the remainder of its lifetime. diff --git a/content/flux/v0.x/stdlib/_index.md b/content/flux/v0.x/stdlib/_index.md new file mode 100644 index 0000000000..ed074ee2b1 --- /dev/null +++ b/content/flux/v0.x/stdlib/_index.md @@ -0,0 +1,16 @@ +--- +title: Flux standard library +description: > + The Flux standard library includes packages and functions that retrieve, transform, process, and output data. +menu: + flux_0_x: + name: Standard library + weight: 4 +aliases: + - /flux/v0.x/functions/ +--- + +The Flux standard library includes packages and functions that retrieve, transform, process, and output data. +You can also create your own custom functions to perform operations that suit your needs. + +{{< children >}} diff --git a/content/flux/v0.x/stdlib/built-in/_index.md b/content/flux/v0.x/stdlib/built-in/_index.md new file mode 100644 index 0000000000..5e27bd3261 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/_index.md @@ -0,0 +1,21 @@ +--- +title: Flux built-in functions +description: > + Built-in functions provide a foundation for working with data using + Flux. Because these functions are "built-in," they do not require an `import` statement + and are usable without any extra setup. +menu: + flux_0_x: + name: Built-in + parent: Standard library +weight: 1 +aliases: + - /flux/v0.x/functions/built-in/ +--- + +Built-in functions provide a foundation for working with data using Flux. +Because these functions are "built-in," they do not require an `import` statement and are usable without any extra setup. + +Built-in functions are grouped into the following categories: + +{{< children >}} diff --git a/content/flux/v0.x/stdlib/built-in/inputs/_index.md b/content/flux/v0.x/stdlib/built-in/inputs/_index.md new file mode 100644 index 0000000000..dcfdeb1d6e --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/inputs/_index.md @@ -0,0 +1,18 @@ +--- +title: Flux built-in input functions +description: Flux's built-in input functions define sources of data or or display + information about data sources. +aliases: + - /flux/v0.x/functions/inputs + - /flux/v0.x/functions/built-in/inputs/ +menu: + flux_0_x: + parent: Built-in + name: Inputs +weight: 1 +--- + +Flux's built-in input functions define sources of data or display information about data sources. +The following input functions are available: + +{{< function-list >}} diff --git a/content/flux/v0.x/stdlib/built-in/inputs/buckets.md b/content/flux/v0.x/stdlib/built-in/inputs/buckets.md new file mode 100644 index 0000000000..1e16e3eef6 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/inputs/buckets.md @@ -0,0 +1,25 @@ +--- +title: buckets() function +description: The buckets() function returns a list of buckets in the organization. +aliases: + - /flux/v0.x/functions/inputs/buckets + - /flux/v0.x/functions/built-in/inputs/buckets/ +menu: + flux_0_x: + name: buckets + parent: Inputs + weight: 1 +--- + +The `buckets()` function returns a list of buckets in the organization. + +_**Function type:** Input_ + +```js +buckets() +``` + +
+ +##### Related InfluxQL functions and statements: +[SHOW DATABASES](/influxdb/latest/query_language/schema_exploration/#show-databases) diff --git a/content/flux/v0.x/stdlib/built-in/inputs/from.md b/content/flux/v0.x/stdlib/built-in/inputs/from.md new file mode 100644 index 0000000000..3b04fb5d09 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/inputs/from.md @@ -0,0 +1,53 @@ +--- +title: from() function +description: The from() function retrieves data from an InfluxDB data source. +aliases: + - /flux/v0.x/functions/inputs/from + - /flux/v0.x/functions/built-in/inputs/from/ +menu: + flux_0_x: + name: from + parent: Inputs + weight: 1 +--- + +The `from()` function retrieves data from an InfluxDB data source. +It returns a stream of tables from the specified [bucket](#parameters). +Each unique series is contained within its own table. +Each record in the table represents a single point in the series. + +_**Function type:** Input_ +_**Output data type:** Object_ + +```js +from(bucket: "telegraf/autogen") + +// OR + +from(bucketID: "0261d8287f4d6000") +``` + +## Parameters + +### bucket +The name of the bucket to query. + +_**Data type:** String_ + +### bucketID +The string-encoded ID of the bucket to query. + +_**Data type:** String_ + +## Examples +```js +from(bucket: "telegraf/autogen") +``` +```js +from(bucketID: "0261d8287f4d6000") +``` + +
+ +##### Related InfluxQL functions and statements: +[FROM](/influxdb/latest/query_language/data_exploration/#from-clause) diff --git a/content/flux/v0.x/stdlib/built-in/misc/_index.md b/content/flux/v0.x/stdlib/built-in/misc/_index.md new file mode 100644 index 0000000000..3b23f005f7 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/misc/_index.md @@ -0,0 +1,19 @@ +--- +title: Flux built-in miscellaneous functions +description: Flux provides built-in miscellaneous functions that serve purposes other + than retrieving, transforming, or outputting data. +aliases: + - /flux/v0.x/functions/misc + - /flux/v0.x/functions/built-in/misc/ +menu: + flux_0_x: + parent: Built-in + name: Miscellaneous +weight: 5 +--- + +Flux functions primarily retrieve, shape and transform, then output data, however +there are functions available that serve other purposes. +The following functions are are available but don't fit within other function categories: + +{{< function-list >}} diff --git a/content/flux/v0.x/stdlib/built-in/misc/intervals.md b/content/flux/v0.x/stdlib/built-in/misc/intervals.md new file mode 100644 index 0000000000..b4b0d0c321 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/misc/intervals.md @@ -0,0 +1,166 @@ +--- +title: intervals() function +description: The intervals() function generates a set of time intervals over a range + of time. +aliases: + - /flux/v0.x/functions/misc/intervals + - /flux/v0.x/functions/built-in/misc/intervals/ +menu: + flux_0_x: + name: intervals + parent: Miscellaneous + weight: 1 +draft: true +--- + +The `intervals()` function generates a set of time intervals over a range of time. + +An interval is an object with `start` and `stop` properties that correspond to the inclusive start and exclusive stop times of the time interval. +The return value of intervals is another function that accepts start and stop time parameters and returns an interval generator. +The generator is then used to produce the set of intervals. +The set of intervals includes all intervals that intersect with the initial range of time. + +> The `intervals()` function is designed to be used with the `intervals` parameter of the [`window()` function](/flux/v0.x/stdlib/built-in/transformations/window). + +By default the end boundary of an interval will align with the Unix epoch (zero time) +modified by the offset of the `location` option. + +_**Function type:** Miscellaneous_ +_**Output data type:** Object_ + +```js +intervals( + every: 1h, + period: 2h, + offset:30m, + filter:(interval) => + !(weekday(time: interval.start) in [Sunday, Saturday]) +) +``` + +## Parameters + +### every +The duration between starts of each of the intervals. +The Nth interval start time is the initial start time plus the offset plus an Nth multiple of the every parameter. +Defaults to the value of the `period` duration. + +_**Data type:** Duration_ + +### period +The length of each interval. +Each interval's stop time is equal to the interval start time plus the period duration. +It can be negative, indicating the start and stop boundaries are reversed. +Defaults to the value of the `every` duration. + +_**Data type:** Duration_ + +### offset +The duration by which to shift the window boundaries. +It can be negative, indicating that the offset goes backwards in time. +Defaults to `0`, which aligns window end boundaries with the `every` duration. + +_**Data type:** Duration_ + +### filter +A function that accepts an interval object and returns a boolean value. +Each potential interval is passed to the filter function. +When the function returns false, that interval is excluded from the set of intervals. +Defaults to include all intervals. + +_**Data type:** Function_ + +## Examples + +##### Basic intervals +```js +// 1 hour intervals +intervals(every:1h) + +// 2 hour long intervals every 1 hour +intervals(every:1h, period:2h) + +// 2 hour long intervals every 1 hour starting at 30m past the hour +intervals(every:1h, period:2h, offset:30m) + +// 1 week intervals starting on Monday (by default weeks start on Sunday) +intervals(every:1w, offset:1d) + +// the hour from 11PM - 12AM every night +intervals(every:1d, period:-1h) + +// the last day of each month +intervals(every:1mo, period:-1d) +``` + +##### Using a predicate +```js +// 1 day intervals excluding weekends +intervals( + every:1d, + filter: (interval) => !(weekday(time: interval.start) in [Sunday, Saturday]), +) + +// Work hours from 9AM - 5PM on work days. +intervals( + every:1d, + period:8h, + offset:9h, + filter:(interval) => !(weekday(time: interval.start) in [Sunday, Saturday]), +) +``` + +##### Using known start and stop dates +```js +// Every hour for six hours on Sep 5th. +intervals(every:1h)(start:2018-09-05T00:00:00-07:00, stop: 2018-09-05T06:00:00-07:00) + +// Generates +// [2018-09-05T00:00:00-07:00, 2018-09-05T01:00:00-07:00) +// [2018-09-05T01:00:00-07:00, 2018-09-05T02:00:00-07:00) +// [2018-09-05T02:00:00-07:00, 2018-09-05T03:00:00-07:00) +// [2018-09-05T03:00:00-07:00, 2018-09-05T04:00:00-07:00) +// [2018-09-05T04:00:00-07:00, 2018-09-05T05:00:00-07:00) +// [2018-09-05T05:00:00-07:00, 2018-09-05T06:00:00-07:00) + +// Every hour for six hours with 1h30m periods on Sep 5th +intervals(every:1h, period:1h30m)(start:2018-09-05T00:00:00-07:00, stop: 2018-09-05T06:00:00-07:00) + +// Generates +// [2018-09-05T00:00:00-07:00, 2018-09-05T01:30:00-07:00) +// [2018-09-05T01:00:00-07:00, 2018-09-05T02:30:00-07:00) +// [2018-09-05T02:00:00-07:00, 2018-09-05T03:30:00-07:00) +// [2018-09-05T03:00:00-07:00, 2018-09-05T04:30:00-07:00) +// [2018-09-05T04:00:00-07:00, 2018-09-05T05:30:00-07:00) +// [2018-09-05T05:00:00-07:00, 2018-09-05T06:30:00-07:00) + +// Every hour for six hours using the previous hour on Sep 5th +intervals(every:1h, period:-1h)(start:2018-09-05T12:00:00-07:00, stop: 2018-09-05T18:00:00-07:00) + +// Generates +// [2018-09-05T11:00:00-07:00, 2018-09-05T12:00:00-07:00) +// [2018-09-05T12:00:00-07:00, 2018-09-05T13:00:00-07:00) +// [2018-09-05T13:00:00-07:00, 2018-09-05T14:00:00-07:00) +// [2018-09-05T14:00:00-07:00, 2018-09-05T15:00:00-07:00) +// [2018-09-05T15:00:00-07:00, 2018-09-05T16:00:00-07:00) +// [2018-09-05T16:00:00-07:00, 2018-09-05T17:00:00-07:00) +// [2018-09-05T17:00:00-07:00, 2018-09-05T18:00:00-07:00) + +// Every month for 4 months starting on Jan 1st +intervals(every:1mo)(start:2018-01-01, stop: 2018-05-01) + +// Generates +// [2018-01-01, 2018-02-01) +// [2018-02-01, 2018-03-01) +// [2018-03-01, 2018-04-01) +// [2018-04-01, 2018-05-01) + +// Every month for 4 months starting on Jan 15th +intervals(every:1mo)(start:2018-01-15, stop: 2018-05-15) + +// Generates +// [2018-01-15, 2018-02-15) +// [2018-02-15, 2018-03-15) +// [2018-03-15, 2018-04-15) +// [2018-04-15, 2018-05-15) +``` diff --git a/content/flux/v0.x/stdlib/built-in/misc/linearbins.md b/content/flux/v0.x/stdlib/built-in/misc/linearbins.md new file mode 100644 index 0000000000..0e79d60518 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/misc/linearbins.md @@ -0,0 +1,54 @@ +--- +title: linearBins() function +description: The linearBins() function generates a list of linearly separated floats. +aliases: + - /flux/v0.x/functions/misc/linearbins + - /flux/v0.x/functions/built-in/misc/linearbins/ +menu: + flux_0_x: + name: linearBins + parent: Miscellaneous + weight: 1 +--- + +The `linearBins()` function generates a list of linearly separated floats. +It is a helper function meant to generate bin bounds for the +[`histogram()` function](/flux/v0.x/stdlib/built-in/transformations/histogram). + +_**Function type:** Miscellaneous_ +_**Output data type:** Array of floats_ + +```js +linearBins(start: 0.0, width: 5.0, count: 20, infinity: true) +``` + +## Parameters + +### start +The first value in the returned list. + +_**Data type:** Float_ + +### width +The distance between subsequent bin values. + +_**Data type:** Float_ + +### count +The number of bins to create. + +_**Data type:** Integer_ + +### infinity +When `true`, adds an additional bin with a value of positive infinity. +Defaults to `true`. + +_**Data type:** Boolean_ + +## Examples + +```js +linearBins(start: 0.0, width: 10.0, count: 10) + +// Generated list: [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, +Inf] +``` diff --git a/content/flux/v0.x/stdlib/built-in/misc/logarithmicbins.md b/content/flux/v0.x/stdlib/built-in/misc/logarithmicbins.md new file mode 100644 index 0000000000..27b9162fb1 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/misc/logarithmicbins.md @@ -0,0 +1,54 @@ +--- +title: logarithmicBins() function +description: The logarithmicBins() function generates a list of exponentially separated + floats. +aliases: + - /flux/v0.x/functions/misc/logarithmicbins + - /flux/v0.x/functions/built-in/misc/logarithmicbins/ +menu: + flux_0_x: + name: logarithmicBins + parent: Miscellaneous + weight: 1 +--- + +The `logarithmicBins()` function generates a list of exponentially separated floats. +It is a helper function meant to generate bin bounds for the +[`histogram()` function](/flux/v0.x/stdlib/built-in/transformations/histogram). + +_**Function type:** Miscellaneous_ +_**Output data type:** Array of floats_ + +```js +logarithmicBins(start:1.0, factor: 2.0, count: 10, infinity: true) +``` + +## Parameters + +### start +The first value in the returned bin list. + +_**Data type:** Float_ + +### factor +The multiplier applied to each subsequent bin. + +_**Data type:** Float_ + +### count +The number of bins to create. + +_**Data type:** Integer_ + +### infinity +When `true`, adds an additional bin with a value of positive infinity. +Defaults to `true`. + +_**Data type:** Boolean_ + +## Examples +```js +logarithmicBins(start: 1.0, factor: 2.0, count: 10, infinty: true) + +// Generated list: [1, 2, 4, 8, 16, 32, 64, 128, 256, 512, +Inf] +``` diff --git a/content/flux/v0.x/stdlib/built-in/misc/now.md b/content/flux/v0.x/stdlib/built-in/misc/now.md new file mode 100644 index 0000000000..ea20888e3e --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/misc/now.md @@ -0,0 +1,36 @@ +--- +title: now() function +description: The `now()` function returns the current time (UTC). +menu: + flux_0_x: + name: now + parent: Miscellaneous +weight: 1 +--- + +The `now()` function returns the current time (UTC). + +_**Function type:** Date/Time_ +_**Output data type:** Time_ + +```js +now() +``` + +## Examples +```js +data + |> range(start: -10h, stop: now()) +``` + +{{% note %}} +#### now() vs system.time() +`now()` returns the current UTC time. +`now()` is cached at runtime, so all instances of `now()` in a Flux script +return the same value. + +[`system.time()`](/flux/v0.x/stdlib/system/time/) returns the current +system time of the host machine, which typically accounts for the local time zone. +This time represents the time at which `system.time()` it is executed, so each +instance of `system.time()` in a Flux script returns a unique value. +{{% /note %}} diff --git a/content/flux/v0.x/stdlib/built-in/misc/sleep.md b/content/flux/v0.x/stdlib/built-in/misc/sleep.md new file mode 100644 index 0000000000..86eb631e56 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/misc/sleep.md @@ -0,0 +1,55 @@ +--- +title: sleep() function +description: The `sleep()` function delays execution by a specified duration. +menu: + flux_0_x: + name: sleep + parent: Miscellaneous +weight: 401 +aliases: + - /flux/v0.x/functions/built-in/misc/sleep/ +--- + +The `sleep()` function delays execution by a specified duration. + +_**Function type:** Miscellaneous_ + +```js +sleep( + v: x, + duration: 10s +) +``` + +## Parameters + +### v +Defines input tables. +`sleep()` accepts piped-forward data and passes it on unmodified after the +specified [duration](#duration). +If data is not piped-forward into `sleep()`, set `v` to specify a stream object. +The examples [below](#examples) illustrate how. + +_**Data type:** Object_ + +### duration +The length of time to delay execution. + +_**Data type:** Duration_ + +## Examples + +### Delay execution in a chained query +```js +from(bucket: "telegraf/autogen") + |> range(start: -1h) + |> sleep(duration: 10s) +``` + +### Delay execution using a stream variable +```js +x = from(bucket: "telegraf/autogen") + |> range(start: -1h) + +sleep(v: x, duration: 10s) +``` diff --git a/content/flux/v0.x/stdlib/built-in/outputs/_index.md b/content/flux/v0.x/stdlib/built-in/outputs/_index.md new file mode 100644 index 0000000000..001cebe03c --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/outputs/_index.md @@ -0,0 +1,18 @@ +--- +title: Flux built-in output functions +description: Flux's built-in output functions yield results or send data to a specified + output destination. +aliases: + - /flux/v0.x/functions/outputs + - /flux/v0.x/functions/built-in/outputs/ +menu: + flux_0_x: + parent: Built-in + name: Outputs +weight: 2 +--- + +Flux's built-in output functions yield results or send data to a specified output destination. +The following output functions are are available: + +{{< function-list >}} diff --git a/content/flux/v0.x/stdlib/built-in/outputs/to.md b/content/flux/v0.x/stdlib/built-in/outputs/to.md new file mode 100644 index 0000000000..b6ead241d3 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/outputs/to.md @@ -0,0 +1,163 @@ +--- +title: to() function +description: The to() function writes data to an InfluxDB v2.0 bucket. +aliases: + - /flux/v0.x/functions/outputs/to + - /flux/v0.x/functions/built-in/outputs/to/ +menu: + flux_0_x: + name: to + parent: Outputs + weight: 1 +--- + +The `to()` function writes data to an **InfluxDB v2.0** bucket. + +_**Function type:** Output_ +_**Output data type:** Object_ + +```js +to( + bucket: "my-bucket", + org: "my-org", + timeColumn: "_time", + tagColumns: ["tag1", "tag2", "tag3"], + fieldFn: (r) => ({ [r._field]: r._value }) +) + +// OR + +to( + bucketID: "1234567890", + orgID: "0987654321", + timeColumn: "_time", + tagColumns: ["tag1", "tag2", "tag3"], + fieldFn: (r) => ({ [r._field]: r._value }) +) +``` + +## Parameters + +{{% note %}} +You must provide a `bucket` or `bucketID` and an `org` or `orgID`. +{{% /note %}} + +### bucket +The bucket to write data to. +`bucket` and `bucketID` are mutually exclusive. + +_**Data type:** String_ + +### bucketID +The ID of the bucket to write data to. +`bucketID` and `bucket` are mutually exclusive. + + +_**Data type:** String_ + +### org +The organization name of the specified [`bucket`](#bucket). +`org` and `orgID` are mutually exclusive. + +_**Data type:** String_ + +### orgID +The organization ID of the specified [`bucket`](#bucket). +Only required when writing to a remote host. +Mutually exclusive with `org`. + +_**Data type:** String_ + + + +### timeColumn +The time column of the output. +Default is `"_time"`. + +_**Data type:** String_ + +### tagColumns +The tag columns of the output. +Defaults to all columns with type `string`, excluding all value columns and the +`_field` column if present. + +_**Data type:** Array of strings_ + +### fieldFn +Function that takes a record from the input table and returns an object. +For each record from the input table, `fieldFn` returns an object that maps output +the field key to the output value. +Default is `(r) => ({ [r._field]: r._value })`. + +_**Data type:** Function_ +_**Output data type:** Object_ + +{{% note %}} +Make sure `fieldFn` parameter names match each specified parameter. +To learn why, see [Match parameter names](/flux/v0.x/language/data-model/#match-parameter-names). +{{% /note %}} + +## Examples + +### Default to() operation +Given the following table: + +| _time | _start | _stop | _measurement | _field | _value | +| ----- | ------ | ----- | ------------ | ------ | ------ | +| 0005 | 0000 | 0009 | "a" | "temp" | 100.1 | +| 0006 | 0000 | 0009 | "a" | "temp" | 99.3 | +| 0007 | 0000 | 0009 | "a" | "temp" | 99.9 | + +The default `to` operation: + +```js +// ... +|> to(bucket:"my-bucket", org:"my-org") +``` + +is equivalent to writing the above data using the following line protocol: + +``` +_measurement=a temp=100.1 0005 +_measurement=a temp=99.3 0006 +_measurement=a temp=99.9 0007 +``` + +### Custom to() operation +The `to()` functions default operation can be overridden. For example, given the following table: + +| _time | _start | _stop | tag1 | tag2 | hum | temp | +| ----- | ------ | ----- | ---- | ---- | ---- | ----- | +| 0005 | 0000 | 0009 | "a" | "b" | 55.3 | 100.1 | +| 0006 | 0000 | 0009 | "a" | "b" | 55.4 | 99.3 | +| 0007 | 0000 | 0009 | "a" | "b" | 55.5 | 99.9 | + +The operation: + +```js +// ... +|> to(bucket:"my-bucket", org:"my-org", tagColumns:["tag1"], fieldFn: (r) => return {"hum": r.hum, "temp": r.temp}) +``` + +is equivalent to writing the above data using the following line protocol: + +``` +_tag1=a hum=55.3,temp=100.1 0005 +_tag1=a hum=55.4,temp=99.3 0006 +_tag1=a hum=55.5,temp=99.9 0007 +``` + +
+ +##### Related InfluxQL functions and statements: +[SELECT INTO](/influxdb/latest/query_language/data_exploration/#the-into-clause) diff --git a/content/flux/v0.x/stdlib/built-in/outputs/yield.md b/content/flux/v0.x/stdlib/built-in/outputs/yield.md new file mode 100644 index 0000000000..2f8341f561 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/outputs/yield.md @@ -0,0 +1,47 @@ +--- +title: yield() function +description: The yield() function indicates the input tables received should be delivered + as a result of the query. +aliases: + - /flux/v0.x/functions/outputs/yield + - /flux/v0.x/functions/built-in/outputs/yield/ +menu: + flux_0_x: + name: yield + parent: Outputs + weight: 1 +--- + +The `yield()` function indicates the input tables received should be delivered as a result of the query. +Yield outputs the input stream unmodified. +A query may have multiple results, each identified by the name provided to the `yield()` function. + +_**Function type:** Output_ +_**Output data type:** Object_ + +```js +yield(name: "custom-name") +``` + +> `yield()` is implicit for queries that do only one thing and are only needed when using multiple sources in a query. +> With multiple sources, `yield()` is required to specify what is returned, and what name to give it. + +## Parameters + +### name +A unique name for the yielded results. +Defaults to `"_results"`. + +_**Data type:** String_ + +## Examples +```js +from(bucket: "telegraf/autogen") + |> range(start: -5m) + |> yield(name: "1") +``` + +
+ +##### Related InfluxQL functions and statements: +[SELECT AS](/influxdb/latest/query_language/data_exploration/#the-basic-select-statement) diff --git a/content/flux/v0.x/stdlib/built-in/tests/_index.md b/content/flux/v0.x/stdlib/built-in/tests/_index.md new file mode 100644 index 0000000000..f9dd75980f --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/tests/_index.md @@ -0,0 +1,18 @@ +--- +title: Flux built-in testing functions +description: Flux's built-in testing functions test various aspects of piped-forward + data. +aliases: + - /flux/v0.x/functions/tests + - /flux/v0.x/functions/built-in/tests/ +menu: + flux_0_x: + name: Tests + parent: Built-in +weight: 5 +--- + +Flux's built-in testing functions test various aspects of piped-forward data. +The following built-in testing functions are available: + +{{< function-list >}} diff --git a/content/flux/v0.x/stdlib/built-in/tests/contains.md b/content/flux/v0.x/stdlib/built-in/tests/contains.md new file mode 100644 index 0000000000..b1c751ba45 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/tests/contains.md @@ -0,0 +1,48 @@ +--- +title: contains() function +description: The contains() function tests whether a value is a member of a set. +menu: + flux_0_x: + name: contains + parent: Tests +weight: 1 +aliases: + - /flux/v0.x/functions/built-in/tests/contains/ +--- + +The `contains()` function tests whether a value is a member of a set. +If the value is a member of the set, the function returns `true`. +If the value is not a member of the set, the functions returns `false`. + +```js +contains( + value: 1, + set: [1,2,3] +) +``` + +## Parameters + +### value +The value for which to search. + +_**Data type:** Boolean | Integer | UInteger | Float | String | Time_ + +### set +The set of values in which to search. + +_**Data type:** Array of Booleans | Integers | UIntegers | Floats | Strings | Times_ + +## Examples + +###### Filter on a set of specific fields +```js +fields = ["load1", "load5", "load15"] + +from(bucket: "telegraf/autogen") + |> range(start:start, stop: stop) + |> filter(fn: (r) => + r._measurement == "system" and + contains(value: r._field, set: fields) + ) +``` diff --git a/content/flux/v0.x/stdlib/built-in/transformations/_index.md b/content/flux/v0.x/stdlib/built-in/transformations/_index.md new file mode 100644 index 0000000000..e2e154f7c8 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/_index.md @@ -0,0 +1,22 @@ +--- +title: Flux built-in transformation functions +description: Flux's built-in transformation functions transform and shape your data + in specific ways. +aliases: + - /flux/v0.x/functions/transformations + - /flux/v0.x/functions/built-in/transformations/ +menu: + flux_0_x: + parent: Built-in + name: Transformations +weight: 3 +--- + +Flux's built-in transformation functions transform or shape your data in specific ways. +There are different types of transformations categorized below: + +{{< children show="sections" >}} + +## Generic transformations + +{{< function-list >}} diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/_index.md b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/_index.md new file mode 100644 index 0000000000..f91e6a154c --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/_index.md @@ -0,0 +1,50 @@ +--- +title: Flux aggregate functions +description: Flux aggregate functions take values from an input table and aggregate + them in some way. +aliases: + - /flux/v0.x/functions/transformations/aggregates + - /flux/v0.x/functions/built-in/transformations/aggregates/ +menu: + flux_0_x: + parent: Transformations + name: Aggregates + weight: 1 +--- + +Flux aggregate functions take values from an input table and aggregate them in some way. +The output table contains is a single row with the aggregated value. + +Aggregate operations output a table for every input table they receive. +A column to aggregate must be provided to the operation. +Any output table will have the following properties: + +- It always contains a single record. +- It will have the same group key as the input table. +- It will contain a column for the provided aggregate column. + The column label will be the same as the input table. + The type of the column depends on the specific aggregate operation. + The value of the column will be `null` if the input table is empty or the input column has only `null` values. +- It will not have a `_time` column. + +### aggregateWindow helper function +The [`aggregateWindow()` function](/flux/v0.x/stdlib/built-in/transformations/aggregates/aggregatewindow) +does most of the work needed when aggregating data. +It windows and aggregates the data, then combines windowed tables into a single output table. + +### Aggregate functions +The following aggregate functions are available: + +{{< function-list >}} + +### Aggregate selectors +The following functions are both aggregates and selectors. +Each returns `n` values after performing an aggregate operation. +They are categorized as selector functions in this documentation: + +- [highestAverage()](/flux/v0.x/stdlib/built-in/transformations/selectors/highestaverage) +- [highestCurrent()](/flux/v0.x/stdlib/built-in/transformations/selectors/highestcurrent) +- [highestMax()](/flux/v0.x/stdlib/built-in/transformations/selectors/highestmax) +- [lowestAverage()](/flux/v0.x/stdlib/built-in/transformations/selectors/lowestaverage) +- [lowestCurrent()](/flux/v0.x/stdlib/built-in/transformations/selectors/lowestcurrent) +- [lowestMin()](/flux/v0.x/stdlib/built-in/transformations/selectors/lowestmin) diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/aggregatewindow.md b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/aggregatewindow.md new file mode 100644 index 0000000000..2d90edecb1 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/aggregatewindow.md @@ -0,0 +1,126 @@ +--- +title: aggregateWindow() function +description: The aggregateWindow() function applies an aggregate function to fixed + windows of time. +aliases: + - /flux/v0.x/functions/transformations/aggregates/aggregatewindow + - /flux/v0.x/functions/built-in/transformations/aggregates/aggregatewindow/ +menu: + flux_0_x: + name: aggregateWindow + parent: Aggregates + weight: 1 +--- + +The `aggregateWindow()` function applies an aggregate or selector function +(any function with a `column` parameter) to fixed windows of time. + +_**Function type:** Aggregate_ + +```js +aggregateWindow( + every: 1m, + fn: mean, + column: "_value", + timeColumn: "_stop", + timeDst: "_time", + createEmpty: true +) +``` + +As data is windowed into separate tables and processed, the `_time` column is dropped from each group key. +This function copies the timestamp from a remaining column into the `_time` column. +View the [function definition](#function-definition). + +## Parameters + +{{% note %}} +Make sure `fn` parameter names match each specified parameter. +To learn why, see [Match parameter names](/flux/v0.x/language/data-model/#match-parameter-names). +{{% /note %}} + +### every +The duration of windows. + +_**Data type:** Duration_ + +### fn +The aggregate function used in the operation. + +_**Data type:** Function_ + +{{% note %}} +Only aggregate and selector functions with a `column` parameter (singular) work with `aggregateWindow()`. +{{% /note %}} + +### column +Columns on which to operate. +Defaults to `"_value"`. + +_**Data type:** String_ + +### timeColumn +The time column from which time is copied for the aggregate record. +Defaults to `"_stop"`. + +_**Data type:** String_ + +### timeDst +The "time destination" column to which time is copied for the aggregate record. +Defaults to `"_time"`. + +_**Data type:** String_ + +### createEmpty +For windows without data, this will create an empty window and fill +it with a `null` aggregate value. +Defaults to `true`. + +_**Data type:** Boolean_ + +## Examples + +###### Using an aggregate function with default parameters +```js +from(bucket: "telegraf/autogen") + |> range(start: 1h) + |> filter(fn: (r) => + r._measurement == "mem" and + r._field == "used_percent") + |> aggregateWindow( + every: 5m, + fn: mean + ) +``` +###### Specify parameters of the aggregate function +To use functions that don't provide defaults for required parameters with `aggregateWindow()`, +define an anonymous function with `column` and `tables` parameters that pipe-forward +tables into the aggregate or selector function with all required parameters defined: + +```js +from(bucket: "telegraf/autogen") + |> range(start: 1h) + |> filter(fn: (r) => + r._measurement == "mem" and + r._field == "used_percent") + |> aggregateWindow( + every: 5m, + fn: (column, tables=<-) => tables |> quantile(q: 0.99, column:column) + ) +``` + +## Function definition +```js +aggregateWindow = (every, fn, columns=["_value"], timeColumn="_stop", timeDst="_time", tables=<-) => + tables + |> window(every:every) + |> fn(column:column) + |> duplicate(column:timeColumn, as:timeDst) + |> window(every:inf, timeColumn:timeDst) +``` + +
+ +##### Related InfluxQL functions and statements: +[InfluxQL aggregate functions](/influxdb/latest/query_language/functions/#aggregations) +[GROUP BY time()](/influxdb/latest/query_language/data_exploration/#the-group-by-clause) diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/chandemomentumoscillator.md b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/chandemomentumoscillator.md new file mode 100644 index 0000000000..4f307adfcc --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/chandemomentumoscillator.md @@ -0,0 +1,114 @@ +--- +title: chandeMomentumOscillator() function +description: > + The `chandeMomentumOscillator()` function applies the technical momentum + indicator developed by Tushar Chande. +menu: + flux_0_x: + name: chandeMomentumOscillator + parent: Aggregates + weight: 1 +aliases: + - /flux/v0.x/functions/built-in/transformations/aggregates/chandemomentumoscillator/ +--- + +The `chandeMomentumOscillator()` function applies the technical momentum indicator +developed by Tushar Chande. + +_**Function type:** Aggregate_ + +```js +chandeMomentumOscillator( + n: 10, + columns: ["_value"] +) +``` + +The Chande Momentum Oscillator (CMO) indicator calculates the difference between +the sum of all recent data points with values greater than the median value of the data set +and the sum of all recent data points with values lower than the median value of the data set, +then divides the result by the sum of all data movement over a given time period. +It then multiplies the result by 100 and returns a value between -100 and +100. + +## Parameters + +### n +The period or number of points to use in the calculation. + +_**Data type:** Integer_ + +### columns +The columns to operate on. +Defaults to `["_value"]`. + +_**Data type:** Array of Strings_ + +## Examples + +#### Table transformation with a ten point Chande Momentum Oscillator +###### Input table +| _time | _value | +|:-----:|:------:| +| 0001 | 1 | +| 0002 | 2 | +| 0003 | 3 | +| 0004 | 4 | +| 0005 | 5 | +| 0006 | 6 | +| 0007 | 7 | +| 0008 | 8 | +| 0009 | 9 | +| 0010 | 10 | +| 0011 | 11 | +| 0012 | 12 | +| 0013 | 13 | +| 0014 | 14 | +| 0015 | 15 | +| 0016 | 14 | +| 0017 | 13 | +| 0018 | 12 | +| 0019 | 11 | +| 0020 | 10 | +| 0021 | 9 | +| 0022 | 8 | +| 0023 | 7 | +| 0024 | 6 | +| 0025 | 5 | +| 0026 | 4 | +| 0027 | 3 | +| 0028 | 2 | +| 0029 | 1 | + +###### Query +```js +// ... + |> chandeMomentumOscillator(n: 10) +``` + +###### Output table +| _time | _value | +|:-----:|:------:| +| 0011 | 100 | +| 0012 | 100 | +| 0013 | 100 | +| 0014 | 100 | +| 0015 | 100 | +| 0016 | 80 | +| 0017 | 60 | +| 0018 | 40 | +| 0019 | 20 | +| 0020 | 0 | +| 0021 | -20 | +| 0022 | -40 | +| 0023 | -60 | +| 0024 | -80 | +| 0025 | -100 | +| 0026 | -100 | +| 0027 | -100 | +| 0028 | -100 | +| 0029 | -100 | + +
+ +##### Related InfluxQL functions and statements: +[CHANDE_MOMENTUM_OSCILLATOR](/influxdb/latest/query_language/functions/#chande-momentum-oscillator) diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/count.md b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/count.md new file mode 100644 index 0000000000..3dd4694131 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/count.md @@ -0,0 +1,49 @@ +--- +title: count() function +description: The count() function outputs the number of non-null records in each aggregated + column. +aliases: + - /flux/v0.x/functions/transformations/aggregates/count + - /flux/v0.x/functions/built-in/transformations/aggregates/count/ +menu: + flux_0_x: + name: count + parent: Aggregates + weight: 1 +--- + +The `count()` function outputs the number of records in each aggregated column. +It counts both null and non-null records. + +_**Function type:** Aggregate_ +_**Output data type:** Integer_ + +```js +count(column: "_value") +``` + +## Parameters + +### column +Column on which to operate. +Defaults to `"_value"`. + +_**Data type:** String_ + +## Examples +```js +from(bucket: "telegraf/autogen") + |> range(start: -5m) + |> count() +``` + +```js +from(bucket: "telegraf/autogen") + |> range(start: -5m) + |> count(column: "_value") +``` + +
+ +##### Related InfluxQL functions and statements: +[COUNT()](/influxdb/latest/query_language/functions/#count) diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/cov.md b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/cov.md new file mode 100644 index 0000000000..b601651383 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/cov.md @@ -0,0 +1,71 @@ +--- +title: cov() function +description: The cov() function computes the covariance between two streams by first + joining the streams, then performing the covariance operation. +aliases: + - /flux/v0.x/functions/transformations/aggregates/cov + - /flux/v0.x/functions/built-in/transformations/aggregates/cov/ +menu: + flux_0_x: + name: cov + parent: Aggregates + weight: 1 +--- + +The `cov()` function computes the covariance between two streams by first joining the streams, +then performing the covariance operation. + +_**Function type:** Aggregate +_**Output data type:** Float_ + +```js +cov(x: table1, y: table2, on: ["_time", "_field"], pearsonr: false) +``` + +## Parameters + +### x +One input stream used to calculate the covariance. + +_**Data type:** Object_ + +### y +The other input table used to calculate the covariance. + +_**Data type:** Object_ + +### on +The list of columns on which to join. + +_**Data type:** Array of strings_ + +### pearsonr +Indicates whether the result should be normalized to be the Pearson R coefficient. + +_**Data type:** Boolean_ + + +## Examples + +```js +table1 = from(bucket: "telegraf/autogen") + |> range(start: -15m) + |> filter(fn: (r) => + r._measurement == "measurement_1" + ) + +table2 = from(bucket: "telegraf/autogen") + |> range(start: -15m) + |> filter(fn: (r) => + r._measurement == "measurement_2" + ) + +cov(x: table1, y: table2, on: ["_time", "_field"]) +``` + +## Function definition +```js +cov = (x,y,on,pearsonr=false) => + join( tables:{x:x, y:y}, on:on ) + |> covariance(pearsonr:pearsonr, columns:["_value_x","_value_y"]) +``` diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/covariance.md b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/covariance.md new file mode 100644 index 0000000000..f9b24aba86 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/covariance.md @@ -0,0 +1,45 @@ +--- +title: covariance() function +description: The covariance() function computes the covariance between two columns. +aliases: + - /flux/v0.x/functions/transformations/aggregates/covariance + - /flux/v0.x/functions/built-in/transformations/aggregates/covariance/ +menu: + flux_0_x: + name: covariance + parent: Aggregates + weight: 1 +--- + +The `covariance()` function computes the covariance between two columns. + +_**Function type:** Aggregate_ +_**Output data type:** Float_ + +```js +covariance(columns: ["column_x", "column_y"], pearsonr: false, valueDst: "_value") +``` + +## Parameters + +### columns +A list of **two columns** on which to operate. Required + +_**Data type:** Array of strings_ + +### pearsonr +Indicates whether the result should be normalized to be the Pearson R coefficient. + +_**Data type:** Boolean_ + +### valueDst +The column into which the result will be placed. Defaults to `"_value"`. + +_**Data type:** String_ + +## Examples +```js +from(bucket: "telegraf/autogen") + |> range(start:-5m) + |> covariance(columns: ["x", "y"]) +``` diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/derivative.md b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/derivative.md new file mode 100644 index 0000000000..8783a403f4 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/derivative.md @@ -0,0 +1,67 @@ +--- +title: derivative() function +description: The derivative() function computes the rate of change per unit of time + between subsequent non-null records. +aliases: + - /flux/v0.x/functions/transformations/aggregates/derivative + - /flux/v0.x/functions/built-in/transformations/aggregates/derivative/ +menu: + flux_0_x: + name: derivative + parent: Aggregates + weight: 1 +--- + +The `derivative()` function computes the rate of change per [`unit`](#unit) of time between subsequent non-null records. +It assumes rows are ordered by the `_time` column. +The output table schema is the same as the input table. + +_**Function type:** Aggregate_ +_**Output data type:** Float_ + +```js +derivative( + unit: 1s, + nonNegative: false, + column: "_value", + timeSrc: "_time" +) +``` + +## Parameters + +### unit +The time duration used when creating the derivative. +Defaults to `1s`. + +_**Data type:** Duration_ + +### nonNegative +Indicates if the derivative is allowed to be negative. +When set to `true`, if a value is less than the previous value, it is assumed the previous value should have been a zero. + +_**Data type:** Boolean_ + +### column +The column to use to compute the derivative. +Defaults to `"_value"`. + +_**Data type:** String_ + +### timeSrc +The column containing time values. +Defaults to `"_time"`. + +_**Data type:** String_ + +## Examples +```js +from(bucket: "telegraf/autogen") + |> range(start: -5m) + |> derivative(unit: 1s, nonNegative: true) +``` + +
+ +##### Related InfluxQL functions and statements: +[DERIVATIVE()](/influxdb/latest/query_language/functions/#derivative) diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/difference.md b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/difference.md new file mode 100644 index 0000000000..e541d22c66 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/difference.md @@ -0,0 +1,122 @@ +--- +title: difference() function +description: The difference() function computes the difference between subsequent + non-null records. +aliases: + - /flux/v0.x/functions/transformations/aggregates/difference + - /flux/v0.x/functions/built-in/transformations/aggregates/difference/ +menu: + flux_0_x: + name: difference + parent: Aggregates + weight: 1 +--- + +The `difference()` function computes the difference between subsequent records. +The user-specified columns of numeric type are subtracted while others are kept intact. + +_**Function type:** Aggregate_ +_**Output data type:** Float_ + +```js +difference( + nonNegative: false, + column: "_value", + keepFirst: false +) +``` + +## Parameters + +### nonNegative +Indicates if the difference is allowed to be negative. +When set to `true`, if a value is less than the previous value, it is assumed the previous value should have been a zero. + +_**Data type:** Boolean_ + +### columns +The columns to use to compute the difference. +Defaults to `["_value"]`. + +_**Data type:** Array of Strings_ + +### keepFirst +Indicates the first row should be kept. +If `true`, the difference will be `null`. +Defaults to `false`. + +_**Data type:** Boolean_ + +## Subtraction rules for numeric types +- The difference between two non-null values is their algebraic difference; + or `null`, if the result is negative and `nonNegative: true`; +- `null` minus some value is always `null`; +- Some value `v` minus `null` is `v` minus the last non-null value seen before `v`; + or `null` if `v` is the first non-null value seen. + + +## Examples + +```js +from(bucket: "telegraf/autogen") + |> range(start: -5m) + |> difference() +``` +```js +from(bucket: "telegraf/autogen") + |> range(start: -5m) + |> difference(nonNegative: true) +``` + +### Example data transformation + +###### Input table +| _time | _value | tag | +|:-----:|:------:|:---:| +| 0001 | null | tv | +| 0002 | 6 | tv | +| 0003 | 4 | tv | +| 0004 | 10 | tv | +| 0005 | null | tv | + +#### With nonNegative set to false +```js +|> difference(nonNegative: false) +``` +###### Output table +| _time | _value | tag | +|:-----:|:------:|:---:| +| 0002 | null | tv | +| 0003 | -2 | tv | +| 0004 | 6 | tv | +| 0005 | null | tv | + +#### With nonNegative set to true +```js +|> difference(nonNegative: true): +``` +###### Output table +| _time | _value | tag | +|:-----:|:------:|:---:| +| 0002 | null | tv | +| 0003 | null | tv | +| 0004 | 6 | tv | +| 0005 | null | tv | + +#### With keepFirst set to true +```js +|> difference(nonNegative: false, keepfirst: true): +``` +###### Output table +| _time | _value | tag | +|:-----:|:------:|:---:| +| 0001 | null | tv | +| 0002 | null | tv | +| 0003 | -2 | tv | +| 0004 | 6 | tv | +| 0005 | null | tv | + +
+ +##### Related InfluxQL functions and statements: +[DIFFERENCE()](/influxdb/latest/query_language/functions/#difference) diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/doubleema.md b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/doubleema.md new file mode 100644 index 0000000000..dc74ed734f --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/doubleema.md @@ -0,0 +1,64 @@ +--- +title: doubleEMA() function +description: > + The `doubleEMA()` function calculates the exponential moving average + of values grouped into `n` number of points, giving more weight to recent data at + double the rate of `exponentialMovingAverage()`. +menu: + flux_0_x: + name: doubleEMA + parent: Aggregates + weight: 1 +aliases: + - /flux/v0.x/functions/built-in/transformations/aggregates/doubleema/ +--- + +The `doubleEMA()` function calculates the exponential moving average of values in +the `_value` column grouped into `n` number of points, giving more weight to recent +data at double the rate of [`exponentialMovingAverage()`](/flux/v0.x/stdlib/built-in/transformations/aggregates/exponentialmovingaverage/). + +_**Function type:** Aggregate_ + +```js +doubleEMA(n: 5) +``` + +##### Double exponential moving average rules: +- A double exponential moving average is defined as `doubleEMA = 2 * EMA_N - EMA of EMA_N`. + - `EMA` is an exponential moving average. + - `N = n` is the period used to calculate the EMA. +- A true double exponential moving average requires at least `2 * n - 1` values. + If not enough values exist to calculate the double EMA, it returns a `NaN` value. +- `doubleEMA()` inherits all [exponential moving average rules](/flux/v0.x/stdlib/built-in/transformations/aggregates/exponentialmovingaverage/#exponential-moving-average-rules). + +## Parameters + +### n +The number of points to average. + +_**Data type:** Integer_ + +## Examples + +#### Calculate a five point double exponential moving average +```js +from(bucket: "telegraf/autogen"): + |> range(start: -12h) + |> doubleEMA(n: 5) +``` + +## Function definition +```js +doubleEMA = (n, tables=<-) => + tables + |> exponentialMovingAverage(n:n) + |> duplicate(column:"_value", as:"ema") + |> exponentialMovingAverage(n:n) + |> map(fn: (r) => ({r with _value: 2.0 * r.ema - r._value})) + |> drop(columns: ["ema"]) +``` + +
+ +##### Related InfluxQL functions and statements: +[DOUBLE_EXPONENTIAL_MOVING_AVERAGE](/influxdb/latest/query_language/functions/#double-exponential-moving-average) diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/exponentialmovingaverage.md b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/exponentialmovingaverage.md new file mode 100644 index 0000000000..3f009a9c2b --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/exponentialmovingaverage.md @@ -0,0 +1,75 @@ +--- +title: exponentialMovingAverage() function +description: > + The `exponentialMovingAverage()` function calculates the exponential + moving average of values in the `_value` column grouped into `n` number of points, + giving more weight to recent data. +menu: + flux_0_x: + name: exponentialMovingAverage + parent: Aggregates + weight: 1 +aliases: + - /flux/v0.x/functions/built-in/transformations/aggregates/exponentialmovingaverage/ +--- + +The `exponentialMovingAverage()` function calculates the exponential moving average of values +in the `_value` column grouped into `n` number of points, giving more weight to recent data. + +_**Function type:** Aggregate_ + +```js +exponentialMovingAverage(n: 5) +``` + +##### Exponential moving average rules +- The first value of an exponential moving average over `n` values is the + algebraic mean of `n` values. +- Subsequent values are calculated as `y(t) = x(t) * k + y(t-1) * (1 - k)`, where: + - `y(t)` is the exponential moving average at time `t`. + - `x(t)` is the value at time `t`. + - `k = 2 / (1 + n)`. +- The average over a period populated by only `null` values is `null`. +- Exponential moving averages skip `null` values. + +## Parameters + +### n +The number of points to average. + +_**Data type:** Integer_ + +## Examples + +#### Calculate a five point exponential moving average +```js +from(bucket: "telegraf/autogen"): + |> range(start: -12h) + |> exponentialMovingAverage(n: 5) +``` + +#### Table transformation with a two point exponential moving average + +###### Input table: +| _time | tag | _value | +|:-----:|:---:|:------:| +| 0001 | tv | null | +| 0002 | tv | 10 | +| 0003 | tv | 20 | + +###### Query: +```js +// ... + |> exponentialMovingAverage(n: 2) +``` + +###### Output table: +| _time | tag | _value | +|:-----:|:---:|:------:| +| 0002 | tv | 10 | +| 0003 | tv | 16.67 | + +
+ +##### Related InfluxQL functions and statements: +[EXPONENTIAL_MOVING_AVERAGE](/influxdb/latest/query_language/functions/#exponential-moving-average) diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/histogramquantile.md b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/histogramquantile.md new file mode 100644 index 0000000000..c514071095 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/histogramquantile.md @@ -0,0 +1,91 @@ +--- +title: histogramQuantile() function +description: The `histogramQuantile()` function approximates a quantile given a histogram + that approximates the cumulative distribution of the dataset. +aliases: + - /flux/v0.x/functions/transformations/aggregates/histogramquantile + - /flux/v0.x/functions/built-in/transformations/aggregates/histogramquantile/ +menu: + flux_0_x: + name: histogramQuantile + parent: Aggregates + weight: 1 +--- + +The `histogramQuantile()` function approximates a quantile given a histogram that +approximates the cumulative distribution of the dataset. +Each input table represents a single histogram. +The histogram tables must have two columns – a count column and an upper bound column. + +The count is the number of values that are less than or equal to the upper bound value. +The table can have any number of records, each representing an entry in the histogram. +The counts must be monotonically increasing when sorted by upper bound. +If any values in the count column or upper bound column are `null`, it returns an error. + +Linear interpolation between the two closest bounds is used to compute the quantile. +If the either of the bounds used in interpolation are infinite, +then the other finite bound is used and no interpolation is performed. + +The output table has the same group key as the input table. +Columns not part of the group key are removed and a single value column of type float is added. +The count and upper bound columns must not be part of the group key. +The value column represents the value of the desired quantile from the histogram. + +_**Function type:** Aggregate_ +_**Output data type:** Float_ + +```js +histogramQuantile( + quantile: 0.5, + countColumn: "_value", + upperBoundColumn: "le", + valueColumn: "_value", + minValue: 0.0 +) +``` + +## Parameters + +### quantile +A value between 0 and 1 indicating the desired quantile to compute. + +_**Data type:** Float_ + +### countColumn +The name of the column containing the histogram counts. +The count column type must be float. +Defaults to `"_value"`. + +_**Data type:** String_ + +### upperBoundColumn +The name of the column containing the histogram upper bounds. +The upper bound column type must be float. +Defaults to `"le"`. + +_**Data type:** String_ + +### valueColumn +The name of the output column which will contain the computed quantile. +Defaults to `"_value"`. + +_**Data type:** String_ + +### minValue +The assumed minimum value of the dataset. +When the quantile falls below the lowest upper bound, interpolation is performed between `minValue` and the lowest upper bound. +When `minValue` is equal to negative infinity, the lowest upper bound is used. +Defaults to `0.0`. + +_**Data type:** Float_ + +> When the quantile falls below the lowest upper bound, +> interpolation is performed between `minValue` and the lowest upper bound. +> When `minValue` is equal to negative infinity, the lowest upper bound is used. + +## Examples + +##### Compute the 90th quantile +```js +histogramQuantile(quantile: 0.9) +``` diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/holtwinters.md b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/holtwinters.md new file mode 100644 index 0000000000..e1776364c6 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/holtwinters.md @@ -0,0 +1,118 @@ +--- +title: holtWinters() function +description: > + The `holtWinters()` function applies the Holt-Winters forecasting method + to input tables. +menu: + flux_0_x: + name: holtWinters + parent: Aggregates + weight: 1 +aliases: + - /flux/v0.x/functions/built-in/transformations/aggregates/holtwinters/ +--- + +The `holtWinters()` function applies the Holt-Winters forecasting method to input tables. + +_**Function type:** Aggregate_ +_**Output data type:** Float_ + +```js +holtWinters( + n: 10, + seasonality: 4, + interval: 30d, + withFit: false, + timeColumn: "_time", + column: "_value", +) +``` + +The Holt-Winters method predicts [`n`](#n) seasonally-adjusted values for the +specified [`column`](#column) at the specified [`interval`](#interval). +For example, if `interval` is `6m` and `n` is `3`, results include three predicted +values six minutes apart. + +#### Seasonality +[`seasonality`](#seasonality) delimits the length of a seasonal pattern according to `interval`. +If your `interval` is `2m` and `seasonality` is `4`, then the seasonal pattern occurs every +eight minutes or every four data points. +If data doesn't have a seasonal pattern, set `seasonality` to `0`. + +#### Space values evenly in time +`holtWinters()` expects values evenly spaced in time. +To ensure `holtWinters()` values are spaced evenly in time, the following rules apply: + +- Data is grouped into time-based "buckets" determined by the `interval`. +- If a bucket includes many values, the first value is used. +- If a bucket includes no values, a missing value (`null`) is added for that bucket. + +By default, `holtWinters()` uses the first value in each time bucket to run the Holt-Winters calculation. +To specify other values to use in the calculation, use: + +- [`window()`](/flux/v0.x/stdlib/built-in/transformations/window/) + with [selectors](/flux/v0.x/stdlib/built-in/transformations/selectors/) + or [aggregates](/flux/v0.x/stdlib/built-in/transformations/aggregates/) +- [`aggregateWindow()`](/flux/v0.x/stdlib/built-in/transformations/aggregates/aggregatewindow) + +#### Fitted model +The `holtWinters()` function applies the [Nelder-Mead optimization](https://en.wikipedia.org/wiki/Nelder%E2%80%93Mead_method) +to include "fitted" data points in results when [`withFit`](#withfit) is set to `true`. + +#### Null timestamps +`holtWinters()` discards rows with `null` timestamps before running the Holt-Winters calculation. + +#### Null values +`holtWinters()` treats `null` values as missing data points and includes them in the Holt-Winters calculation. + +## Parameters + +### n +The number of values to predict. + +_**Data type:** Integer_ + +### seasonality +The number of points in a season. +Defaults to `0`. + +_**Data type:** Integer_ + +### interval +The interval between two data points. + +_**Data type:** Duration_ + +### withFit +Return [fitted data](#fitted-model) in results. +Defaults to `false`. + +_**Data type:** Boolean_ + +### timeColumn +The time column to use. +Defaults to `"_time"`. + +_**Data type:** String_ + +### column +The column to operate on. +Defaults to `"_value"`. + +_**Data type:** String_ + +## Examples + +##### Use aggregateWindow to prepare data for holtWinters +```js +from(bucket: "telegraf/autogen") + |> range(start: -7y) + |> filter(fn: (r) => r._field == "water_level") + |> aggregateWindow(every: 379m, fn: first). + |> holtWinters(n: 10, seasonality: 4, interval: 379m) +``` + +
+ +##### Related InfluxQL functions and statements: +[HOLT_WINTERS](/influxdb/latest/query_language/functions/#holt-winters) diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/increase.md b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/increase.md new file mode 100644 index 0000000000..e4acfb2f7e --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/increase.md @@ -0,0 +1,70 @@ +--- +title: increase() function +description: The increase() function calculates the total non-negative difference + between values in a table. +aliases: + - /flux/v0.x/functions/transformations/aggregates/increase + - /flux/v0.x/functions/built-in/transformations/aggregates/increase/ +menu: + flux_0_x: + name: increase + parent: Aggregates + weight: 1 +--- + +The `increase()` function calculates the total non-negative difference between subsequent values. +A main use case is tracking changes in counter values which may wrap over time +when they hit a threshold or are reset. +In the case of a wrap/reset, we can assume that the absolute delta between two +points will be at least their non-negative difference. + +_**Function type:** Aggregate_ +_**Output data type:** Float_ + +```js +increase(columns: ["_value"]) +``` + +## Parameters + +### columns +The columns to use in the operation. +Defaults to `["_value"]`. + +_**Data type:** Array of Strings_ + +## Examples +```js +from(bucket: "telegraf/autogen") + |> range(start: -24h) + |> filter(fn: (r) => + r._measurement == "system" and + r._field == "n_users" + ) + |> increase() +``` + +Given the following input table: + +| _time | _value | +| ----- | ------ | +| 00001 | 1 | +| 00002 | 5 | +| 00003 | 3 | +| 00004 | 4 | + +`increase()` produces the following table: + +| _time | _value | +| ----- | ------ | +| 00002 | 4 | +| 00003 | 7 | +| 00004 | 8 | + +## Function definition +```js +increase = (tables=<-, column="_value") => + tables + |> difference(nonNegative: true, column:column) + |> cumulativeSum() +``` diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/integral.md b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/integral.md new file mode 100644 index 0000000000..d363c8ff83 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/integral.md @@ -0,0 +1,52 @@ +--- +title: integral() function +description: The integral() function computes the area under the curve per unit of + time of subsequent non-null records. +aliases: + - /flux/v0.x/functions/transformations/aggregates/integral + - /flux/v0.x/functions/built-in/transformations/aggregates/integral/ +menu: + flux_0_x: + name: integral + parent: Aggregates + weight: 1 +--- + +The `integral()` function computes the area under the curve per [`unit`](#unit) of time of subsequent non-null records. +The curve is defined using `_time` as the domain and record values as the range. + +_**Function type:** Aggregate_ +_**Output data type:** Float_ + +```js +integral(unit: 10s, column: "_value") +``` + +## Parameters + +### unit +The time duration used when computing the integral. + +_**Data type:** Duration_ + +### column +The column on which to operate. +Defaults to `"_value"`. + +_**Data type:** String_ + +## Examples +```js +from(bucket: "telegraf/autogen") + |> range(start: -5m) + |> filter(fn: (r) => + r._measurement == "cpu" and + r._field == "usage_system" + ) + |> integral(unit:10s) +``` + +
+ +##### Related InfluxQL functions and statements: +[INTEGRAL()](/influxdb/latest/query_language/functions/#integral) diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/kaufmansama.md b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/kaufmansama.md new file mode 100644 index 0000000000..4b7dbc746e --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/kaufmansama.md @@ -0,0 +1,56 @@ +--- +title: kaufmansAMA() function +description: > + The `kaufmansAMA()` function calculates the Kaufman''s Adaptive Moving + Average (KAMA) using values in an input table. +menu: + flux_0_x: + name: kaufmansAMA + parent: Aggregates + weight: 1 +aliases: + - /flux/v0.x/functions/built-in/transformations/aggregates/kaufmansama/ +--- + +The `kaufmansAMA()` function calculates the Kaufman's Adaptive Moving Average (KAMA) +using values in an input table. + +_**Function type:** Aggregate_ + +```js +kaufmansAMA( + n: 10, + columns: ["_value"] +) +``` + +Kaufman's Adaptive Moving Average is a trend-following indicator designed to account +for market noise or volatility. + +## Parameters + +### n +The period or number of points to use in the calculation. + +_**Data type:** Integer_ + +### column +The column to operate on. +Defaults to `"_value"`. + +_**Data type:** String_ + +## Examples +```js +from(bucket: "telegraf/autogen"): + |> range(start: -7d) + |> kaufmansAMA( + n: 10, + column: "_value" + ) +``` + +
+ +##### Related InfluxQL functions and statements: +[KAUFMANS_ADAPTIVE_MOVING_AVERAGE](/influxdb/latest/query_language/functions/#kaufmans-adaptive-moving-average) diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/kaufmanser.md b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/kaufmanser.md new file mode 100644 index 0000000000..e278bf117d --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/kaufmanser.md @@ -0,0 +1,46 @@ +--- +title: kaufmansER() function +description: > + The `kaufmansER()` function calculates the Kaufman''s Efficiency Ratio + (KER) using values in an input table. +menu: + flux_0_x: + name: kaufmansER + parent: Aggregates + weight: 1 +aliases: + - /flux/v0.x/functions/built-in/transformations/aggregates/kaufmanser/ +--- + +The `kaufmansER()` function calculates the Kaufman's Efficiency Ratio (KER) using +values in an input table. +The function operates on the `_value` column. + +_**Function type:** Aggregate_ + +```js +kaufmansER(n: 10) +``` + +Kaufman's Efficiency Ratio indicator divides the absolute value of the +Chande Momentum Oscillator by 100 to return a value between 0 and 1. +Higher values represent a more efficient or trending market. + +## Parameters + +### n +The period or number of points to use in the calculation. + +_**Data type:** Integer_ + +## Examples +```js +from(bucket: "telegraf/autogen") + |> range(start: -7d) + |> kaufmansER(n: 10) +``` + +
+ +##### Related InfluxQL functions and statements: +[KAUFMANS_EFFICIENCY_RATIO](/influxdb/latest/query_language/functions/#kaufmans-efficiency-ratio) diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/mean.md b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/mean.md new file mode 100644 index 0000000000..4fc978cd5a --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/mean.md @@ -0,0 +1,46 @@ +--- +title: mean() function +description: The mean() function computes the mean or average of non-null records + in the input table. +aliases: + - /flux/v0.x/functions/transformations/aggregates/mean + - /flux/v0.x/functions/built-in/transformations/aggregates/mean/ +menu: + flux_0_x: + name: mean + parent: Aggregates + weight: 1 +--- + +The `mean()` function computes the mean or average of non-null records in the input table. + +_**Function type:** Aggregate_ +_**Output data type:** Float_ + +```js +mean(column: "_value") +``` + +## Parameters + +### column +The column to use to compute the mean. +Defaults to `"_value"`. + +_**Data type:** String_ + +## Examples +```js +from(bucket:"telegraf/autogen") + |> filter(fn: (r) => + r._measurement == "mem" and + r._field == "used_percent") + |> range(start:-12h) + |> window(every:10m) + |> mean() +``` + +
+ +##### Related InfluxQL functions and statements: +[MEAN()](/influxdb/latest/query_language/functions/#mean) diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/median.md b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/median.md new file mode 100644 index 0000000000..13976d264d --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/median.md @@ -0,0 +1,115 @@ +--- +title: median() function +description: > + The `median()` function returns the median `_value` of an input table + or all non-null records in the input table with values that fall within the `0.5` + quantile (50th percentile). +aliases: + - /flux/v0.x/functions/transformations/aggregates/median + - /flux/v0.x/functions/built-in/transformations/aggregates/median/ +menu: + flux_0_x: + name: median + parent: Aggregates + weight: 1 +--- + +The `median()` function is a special application of the [`quantile()` function](/flux/v0.x/stdlib/built-in/transformations/aggregates/quantile) +that returns the median `_value` of an input table or all non-null records in the input table +with values that fall within the `0.5` quantile (50th percentile) depending on the [method](#method) used. + +_**Function type:** Selector or Aggregate_ +_**Output data type:** Object_ + + +```js +median( + column: "_value", + method: "estimate_tdigest", + compression: 0.0 +) +``` + +When using the `estimate_tdigest` or `exact_mean` methods, it outputs non-null +records with values that fall within the `0.5` quantile. + +When using the `exact_selector` method, it outputs the non-null record with the +value that represents the `0.5` quantile. + +> The `median()` function can only be used with float value types. +> It is a special application of the [`quantile()` function](/flux/v0.x/stdlib/built-in/transformations/aggregates/quantile) which +> uses an approximation implementation that requires floats. +> You can convert your value column to a float column using the [`toFloat()` function](/flux/v0.x/stdlib/built-in/transformations/type-conversions/tofloat). + +## Parameters + +### column +The column used to calculate the median. +Defaults to `"_value"`. + +_**Data type:** String_ + +### method +Defines the method of computation. Defaults to `"estimate_tdigest"`. + +_**Data type:** String_ + +The available options are: + +##### estimate_tdigest +An aggregate method that uses a [t-digest data structure](https://github.com/tdunning/t-digest) +to compute an accurate quantile estimate on large data sources. + +##### exact_mean +An aggregate method that takes the average of the two points closest to the quantile value. + +##### exact_selector +A selector method that returns the data point for which at least quantile points are less than. + +### compression +Indicates how many centroids to use when compressing the dataset. +A larger number produces a more accurate result at the cost of increased memory requirements. +Defaults to `1000.0`. + +_**Data type:** Float_ + +## Examples + +###### Median as an aggregate +```js +from(bucket: "telegraf/autogen") + |> filter(fn: (r) => + r._measurement == "mem" and + r._field == "used_percent" + ) + |> range(start:-12h) + |> window(every:10m) + |> median() +``` + +###### Median as a selector +```js +from(bucket: "telegraf/autogen") + |> filter(fn: (r) => + r._measurement == "mem" and + r._field == "used_percent" + ) + |> range(start:-12h) + |> window(every:10m) + |> median(method: "exact_selector") +``` + +## Function definition +```js +median = (method="estimate_tdigest", compression=0.0, tables=<-) => + quantile( + q:0.5, + method:method, + compression:compression + ) +``` + +
+ +##### Related InfluxQL functions and statements: +[MEDIAN()](/influxdb/latest/query_language/functions/#median) diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/mode.md b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/mode.md new file mode 100644 index 0000000000..3077bc0ce9 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/mode.md @@ -0,0 +1,61 @@ +--- +title: mode() function +description: > + The `mode()` function computes the mode or value that occurs most often + in a specified column in the input table. +menu: + flux_0_x: + name: mode + parent: Aggregates +weight: 501 +aliases: + - /flux/v0.x/functions/built-in/transformations/aggregates/mode/ +--- + +The `mode()` function computes the mode or value that occurs most often in a +specified column in the input table. + +_**Function type:** Aggregate_ + +```js +mode(column: "_value") +``` + +Multiple modes are returned in a sorted table. +If there is no mode, `mode()` returns `null`. + +##### Supported data types + +- String +- Float +- Integer +- UInteger +- Boolean +- Time + +## Parameters + +### column +The column to use to compute the mode. +Defaults to `"_value"`. + +_**Data type:** String_ + +## Examples + +###### Return the mode of windowed data +```js +from(bucket: "telegraf/autogen") + |> filter(fn: (r) => + r._measurement == "errors" and + r._field == "count_per_minute" + ) + |> range(start:-12h) + |> window(every:10m) + |> mode() +``` + +
+ +##### Related InfluxQL functions and statements: +[MODE()](https://docs.influxdata.com/influxdb/latest/query_language/functions/#mode) diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/movingaverage.md b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/movingaverage.md new file mode 100644 index 0000000000..66484ee82e --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/movingaverage.md @@ -0,0 +1,71 @@ +--- +title: movingAverage() function +description: > + The `movingAverage()` function calculates the mean of values grouped + into `n` number of points. +menu: + flux_0_x: + name: movingAverage + parent: Aggregates + weight: 1 +aliases: + - /flux/v0.x/functions/built-in/transformations/aggregates/movingaverage/ +--- + +The `movingAverage()` function calculates the mean of values in the `_values` column +grouped into `n` number of points. + +_**Function type:** Aggregate_ + +```js +movingAverage(n: 5) +``` + +##### Moving average rules +- The average over a period populated by `n` values is equal to their algebraic mean. +- The average over a period populated by only `null` values is `null`. +- Moving averages skip `null` values. +- If `n` is less than the number of records in a table, `movingAverage` returns + the average of the available values. + +## Parameters + +### n +The number of points to average. + +_**Data type:** Integer_ + +## Examples + +#### Calculate a five point moving average +```js +from(bucket: "telegraf/autogen"): + |> range(start: -12h) + |> movingAverage(n: 5) +``` + +#### Table transformation with a two point moving average + +###### Input table: +| _time | tag | _value | +|:-----:|:---:|:------:| +| 0001 | tv | null | +| 0002 | tv | 6 | +| 0003 | tv | 4 | + +###### Query: +```js +// ... + |> movingAverage(n: 2 ) +``` + +###### Output table: +| _time | tag | _value | +|:-----:|:---:|:------:| +| 0002 | tv | 6 | +| 0003 | tv | 5 | + +
+ +##### Related InfluxQL functions and statements: +[MOVING_AVERAGE](/influxdb/latest/query_language/functions/#moving-average) diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/pearsonr.md b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/pearsonr.md new file mode 100644 index 0000000000..74db92ee97 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/pearsonr.md @@ -0,0 +1,66 @@ +--- +title: pearsonr() function +description: The pearsonr() function computes the Pearson R correlation coefficient + between two streams by first joining the streams, then performing the covariance + operation normalized to compute R. +aliases: + - /flux/v0.x/functions/transformations/aggregates/pearsonr + - /flux/v0.x/functions/built-in/transformations/aggregates/pearsonr/ +menu: + flux_0_x: + name: pearsonr + parent: Aggregates + weight: 1 +--- + +The `pearsonr()` function computes the Pearson R correlation coefficient between two streams +by first joining the streams, then performing the covariance operation normalized to compute R. + +_**Function type:** Aggregate_ +_**Output data type:** Float_ + +```js +pearsonr(x: stream1, y: stream2, on: ["_time", "_field"]) +``` + +## Parameters + +### x +First input stream used in the operation. + +_**Data type:** Object_ + +### y +Second input stream used in the operation. + +_**Data type:** Object_ + +### on +The list of columns on which to join. + +_**Data type:** Array of strings_ + +## Examples +```js +stream1 = from(bucket:"telegraf/autogen") + |> range(start:-15m) + |> filter(fn: (r) => + r._measurement == "mem" and + r._field == "used" + ) + +stream2 = from(bucket:"telegraf/autogen") + |> range(start:-15m) + |> filter(fn: (r) => r + ._measurement == "mem" and + r._field == "available" + ) + +pearsonr(x: stream1, y: stream2, on: ["_time", "_field"]) +``` + +## Function definition +```js +pearsonr = (x,y,on) => + cov(x:x, y:y, on:on, pearsonr:true) +``` diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/quantile.md b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/quantile.md new file mode 100644 index 0000000000..c968fb1197 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/quantile.md @@ -0,0 +1,109 @@ +--- +title: quantile() function +description: > + The quantile() function outputs non-null records with values that fall + within the specified quantile or the non-null record with the value that represents + the specified quantile. +aliases: + - /flux/v0.x/functions/transformations/aggregates/percentile + - /flux/v0.x/functions/built-in/transformations/aggregates/percentile + - /flux/v0.x/functions/built-in/transformations/aggregates/quantile/ +menu: + flux_0_x: + name: quantile + parent: Aggregates + weight: 1 +--- + +The `quantile()` function returns records from an input table with `_value`s that fall within +a specified quantile or it returns the record with the `_value` that represents the specified quantile. +Which it returns depends on the [method](#method) used. + +_**Function type:** Aggregate or Selector_ +_**Output data type:** Float or Object_ + +```js +quantile( + column: "_value", + q: 0.99, + method: "estimate_tdigest", + compression: 1000.0 +) +``` + +When using the `estimate_tdigest` or `exact_mean` methods, it outputs non-null +records with values that fall within the specified quantile. + +When using the `exact_selector` method, it outputs the non-null record with the +value that represents the specified quantile. + +## Parameters + +### column +The column to use to compute the quantile. +Defaults to `"_value"`. + +_**Data type:** String_ + +### q +A value between 0 and 1 indicating the desired quantile. + +_**Data type:** Float_ + +### method +Defines the method of computation. + +_**Data type:** String_ + +The available options are: + +##### estimate_tdigest +An aggregate method that uses a [t-digest data structure](https://github.com/tdunning/t-digest) +to compute an accurate quantile estimate on large data sources. + +##### exact_mean +An aggregate method that takes the average of the two points closest to the quantile value. + +##### exact_selector +A selector method that returns the data point for which at least `q` points are less than. + +### compression +Indicates how many centroids to use when compressing the dataset. +A larger number produces a more accurate result at the cost of increased memory requirements. +Defaults to `1000.0`. + +_**Data type:** Float_ + +## Examples + +###### Quantile as an aggregate +```js +from(bucket: "telegraf/autogen") + |> range(start: -5m) + |> filter(fn: (r) => + r._measurement == "cpu" and + r._field == "usage_system") + |> quantile( + q: 0.99, + method: "estimate_tdigest", + compression: 1000.0 + ) +``` + +###### Quantile as a selector +```js +from(bucket: "telegraf/autogen") + |> range(start: -5m) + |> filter(fn: (r) => + r._measurement == "cpu" and + r._field == "usage_system") + |> quantile( + q: 0.99, + method: "exact_selector" + ) +``` + +
+ +##### Related InfluxQL functions and statements: +[PERCENTILE()](/influxdb/latest/query_language/functions/#percentile) diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/reduce.md b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/reduce.md new file mode 100644 index 0000000000..332a4d4e87 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/reduce.md @@ -0,0 +1,170 @@ +--- +title: reduce() function +description: > + The `reduce()` function aggregates records in each table according to + the reducer, `fn`, providing a way to create custom table aggregations. +menu: + flux_0_x: + name: reduce + parent: Aggregates +weight: 1 +aliases: + - /flux/v0.x/functions/built-in/transformations/aggregates/reduce/ +--- + +The `reduce()` function aggregates records in each table according to the reducer, +`fn`, providing a way to create custom aggregations. +The output for each table is the group key of the table with columns corresponding +to each field in the reducer object. + +_**Function type:** Transformation_ + +```js +reduce( + fn: (r, accumulator) => ({ sum: r._value + accumulator.sum }), + identity: {sum: 0.0} +) +``` + +If the reducer record contains a column with the same name as a group key column, +the group key column's value is overwritten, and the outgoing group key is changed. +However, if two reduced tables write to the same destination group key, the function will error. + +## Parameters + +### fn +Function to apply to each record with a reducer object ([`identity`](#identity)). + +_**Data type:** Function_ + +{{% note %}} +Make sure `fn` parameter names match each specified parameter. +To learn why, see [Match parameter names](/flux/v0.x/language/data-model/#match-parameter-names). +{{% /note %}} + +###### fn syntax +```js +// Pattern +fn: (r, accumulator) => ({ identityKey: r.column + accumulator.identityKey }) + +// Example +fn: (r, accumulator) => ({ sum: r._value + accumulator.sum }) +``` + +{{% note %}} +#### Matching output object keys and types +The output object from `fn` must have the same key names and value types as the [`identity`](#identity). +After operating on a record, the output object is given back to `fn` as the input accumulator. +If the output object keys and value types do not match the `identity` keys and value types, +it will return a type error. +{{% /note %}} + +#### r +Object representing each row or record. + +#### accumulator +Reducer object defined by [`identity`](#identity). + +### identity +Defines the reducer object and provides initial values to use when creating a reducer. +May be used more than once in asynchronous processing use cases. +_The data type of values in the `identity` object determine the data type of output values._ + +_**Data type:** Object_ + +###### identity object syntax +```js +// Pattern +identity: {identityKey1: value1, identityKey2: value2} + +// Example +identity: {sum: 0.0, count: 0.0} +``` + +## Important notes + +#### Preserve columns +By default, `reduce()` drops any columns that: + +1. Are not part of the input table's group key. +2. Are not explicitly mapped in the `reduce()` function. + +This often results in the `_time` column being dropped. +To preserve the `_time` column and other columns that do not meet the criteria above, +use the `with` operator to map values in the `r` object. +The `with` operator updates a column if it already exists, +creates a new column if it doesn't exist, and includes all existing columns in +the output table. + +```js +reduce(fn: (r) => ({ r with newColumn: r._value * 2 })) +``` + +## Examples + +##### Compute the sum of the value column +```js +from(bucket:"telegraf/autogen") + |> filter(fn: (r) => + r._measurement == "cpu" and + r._field == "usage_system" and + r.service == "app-server" + ) + |> range(start:-12h) + |> reduce( + fn: (r, accumulator) => ({ + sum: r._value + accumulator.sum + }), + identity: {sum: 0.0} + ) +``` + +##### Compute the sum and count in a single reducer +```js +from(bucket:"telegraf/autogen") + |> filter(fn: (r) => + r._measurement == "cpu" and + r._field == "usage_system" and + r.service == "app-server" + ) + |> range(start:-12h) + |> reduce( + fn: (r, accumulator) => ({ + sum: r._value + accumulator.sum, + count: accumulator.count + 1.0 + }), + identity: {sum: 0.0, count: 0.0} + ) +``` + +##### Compute the product of all values +```js +from(bucket:"telegraf/autogen") + |> filter(fn: (r) => + r._measurement == "cpu" and + r._field == "usage_system" and + r.service == "app-server") + |> range(start:-12h) + |> reduce( + fn: (r, accumulator) => ({ + prod: r._value * accumulator.prod + }), + identity: {prod: 1.0} + ) +``` + +##### Calculate the average and preserve existing columns +```js +from(bucket: "telegraf/autogen") + |> range(start: v.timeRangeStart, stop: v.timeRangeStop) + |> filter(fn: (r) => r._measurement == "mem" and r._field == "used_percent") + |> window(every: 5m) + |> reduce(fn: (r, accumulator) => ({ + r with + count: accumulator.count + 1, + total: accumulator.total + r._value, + avg: (accumulator.total + r._value) / float(v: accumulator.count) + }), + identity: {count: 1, total: 0.0, avg: 0.0} + ) +``` diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/relativestrengthindex.md b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/relativestrengthindex.md new file mode 100644 index 0000000000..467ce0a536 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/relativestrengthindex.md @@ -0,0 +1,105 @@ +--- +title: relativeStrengthIndex() function +description: > + The `relativeStrengthIndex()` function measures the relative speed and + change of values in an input table. +menu: + flux_0_x: + name: relativeStrengthIndex + parent: Aggregates +weight: 1 +aliases: + - /flux/v0.x/functions/built-in/transformations/aggregates/relativestrengthindex/ +--- + +The `relativeStrengthIndex()` function measures the relative speed and change of +values in an input table. + +_**Function type:** Aggregate_ + +```js +relativeStrengthIndex( + n: 5, + columns: ["_value"] +) +``` + +##### Relative strength index rules: +- The general equation for calculating a relative strength index (RSI) is + `RSI = 100 - (100 / (1 + (AVG GAIN / AVG LOSS)))`. +- For the first value of the RSI, `AVG GAIN` and `AVG LOSS` are averages of the `n` period. +- For subsequent calculations: + - `AVG GAIN` = `((PREVIOUS AVG GAIN) * (n - 1)) / n` + - `AVG LOSS` = `((PREVIOUS AVG LOSS) * (n - 1)) / n` +- `relativeStrengthIndex()` ignores `null` values. + +## Parameters + +### n +The number of values to use to calculate the RSI. + +_**Data type:** Integer_ + +### columns +Columns to operate on. _Defaults to `["_value"]`_. + +_**Data type:** Array of Strings_ + +## Examples + +#### Calculate a five point relative strength index +```js +from(bucket: "telegraf/autogen"): + |> range(start: -12h) + |> relativeStrengthIndex(n: 5) +``` + +#### Table transformation with a ten point RSI + +###### Input table: +| _time | A | B | tag | +|:-----:|:----:|:----:|:---:| +| 0001 | 1 | 1 | tv | +| 0002 | 2 | 2 | tv | +| 0003 | 3 | 3 | tv | +| 0004 | 4 | 4 | tv | +| 0005 | 5 | 5 | tv | +| 0006 | 6 | 6 | tv | +| 0007 | 7 | 7 | tv | +| 0008 | 8 | 8 | tv | +| 0009 | 9 | 9 | tv | +| 0010 | 10 | 10 | tv | +| 0011 | 11 | 11 | tv | +| 0012 | 12 | 12 | tv | +| 0013 | 13 | 13 | tv | +| 0014 | 14 | 14 | tv | +| 0015 | 15 | 15 | tv | +| 0016 | 16 | 16 | tv | +| 0017 | 17 | null | tv | +| 0018 | 18 | 17 | tv | + +###### Query: +```js +// ... + |> relativeStrengthIndex( + n: 10, + columns: ["A", "B"] + ) +``` + +###### Output table: +| _time | A | B | tag | +|:-----:|:----:|:----:|:---:| +| 0011 | 100 | 100 | tv | +| 0012 | 100 | 100 | tv | +| 0013 | 100 | 100 | tv | +| 0014 | 100 | 100 | tv | +| 0015 | 100 | 100 | tv | +| 0016 | 90 | 90 | tv | +| 0017 | 81 | 90 | tv | +| 0018 | 72.9 | 81 | tv | + +
+ +##### Related InfluxQL functions and statements: +[RELATIVE_STRENGTH_INDEX](/influxdb/latest/query_language/functions/#relative-strength-index) diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/skew.md b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/skew.md new file mode 100644 index 0000000000..4a636a9f94 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/skew.md @@ -0,0 +1,40 @@ +--- +title: skew() function +description: The skew() function outputs the skew of non-null records as a float. +aliases: + - /flux/v0.x/functions/transformations/aggregates/skew + - /flux/v0.x/functions/built-in/transformations/aggregates/skew/ +menu: + flux_0_x: + name: skew + parent: Aggregates + weight: 1 +--- + +The `skew()` function outputs the skew of non-null records as a float. + +_**Function type:** Aggregate_ +_**Output data type:** Float_ + +```js +skew(column: "_value") +``` + +## Parameters + +### column +The column on which to operate. +Defaults to `"_value"`. + +_**Data type:** String_ + +## Examples +```js +from(bucket: "telegraf/autogen") + |> range(start: -5m) + |> filter(fn: (r) => + r._measurement == "cpu" and + r._field == "usage_system" + ) + |> skew() +``` diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/spread.md b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/spread.md new file mode 100644 index 0000000000..f13f653b6f --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/spread.md @@ -0,0 +1,50 @@ +--- +title: spread() function +description: The spread() function outputs the difference between the minimum and + maximum values in a specified column. +aliases: + - /flux/v0.x/functions/transformations/aggregates/spread + - /flux/v0.x/functions/built-in/transformations/aggregates/spread/ +menu: + flux_0_x: + name: spread + parent: Aggregates + weight: 1 +--- + +The `spread()` function outputs the difference between the minimum and maximum values in a specified column. +Only `uint`, `int`, and `float` column types can be used. +The type of the output column depends on the type of input column: + +- For columns with type `uint` or `int`, the output is an `int` +- For columns with type `float`, the output is a float. + +_**Function type:** Aggregate_ +_**Output data type:** Integer or Float (inherited from input column type)_ + +```js +spread(column: "_value") +``` + +## Parameters + +### column +The column on which to operate. Defaults to `"_value"`. + +_**Data type:** String_ + +## Examples +```js +from(bucket: "telegraf/autogen") + |> range(start: -5m) + |> filter(fn: (r) => + r._measurement == "cpu" and + r._field == "usage_system" + ) + |> spread() +``` + +
+ +##### Related InfluxQL functions and statements: +[SPREAD()](/influxdb/latest/query_language/functions/#spread) diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/stddev.md b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/stddev.md new file mode 100644 index 0000000000..6f3eddab9b --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/stddev.md @@ -0,0 +1,63 @@ +--- +title: stddev() function +description: The stddev() function computes the standard deviation of non-null records + in a specified column. +aliases: + - /flux/v0.x/functions/transformations/aggregates/stddev + - /flux/v0.x/functions/built-in/transformations/aggregates/stddev/ +menu: + flux_0_x: + name: stddev + parent: Aggregates + weight: 1 +--- + +The `stddev()` function computes the standard deviation of non-null records in a specified column. + +_**Function type:** Aggregate_ +_**Output data type:** Float_ + +```js +stddev( + column: "_value", + mode: "sample" +) +``` + +## Parameters + +### column +The column on which to operate. +Defaults to `"_value"`. + +_**Data type:** String_ + +### mode +The standard deviation mode or type of standard deviation to calculate. +Defaults to `"sample"`. + +_**Data type:** String_ + +The available options are: + +##### sample +Calculates the sample standard deviation where the data is considered to be part of a larger population. + +##### population +Calculates the population standard deviation where the data is considered a population of its own. + +## Examples +```js +from(bucket: "telegraf/autogen") + |> range(start: -5m) + |> filter(fn: (r) => + r._measurement == "cpu" and + r._field == "usage_system" + ) + |> stddev() +``` + +
+ +##### Related InfluxQL functions and statements: +[STDDEV()](/influxdb/latest/query_language/functions/#stddev) diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/sum.md b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/sum.md new file mode 100644 index 0000000000..3298b794ae --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/sum.md @@ -0,0 +1,46 @@ +--- +title: sum() function +description: The sum() function computes the sum of non-null records in a specified + column. +aliases: + - /flux/v0.x/functions/transformations/aggregates/sum + - /flux/v0.x/functions/built-in/transformations/aggregates/sum/ +menu: + flux_0_x: + name: sum + parent: Aggregates + weight: 1 +--- + +The `sum()` function computes the sum of non-null records in a specified column. + +_**Function type:** Aggregate_ +_**Output data type:** Integer, UInteger, or Float (inherited from column type)_ + +```js +sum(column: "_value") +``` + +## Parameters + +### column +The column on which to operate. +Defaults to `"_value"`. + +_**Data type:** String_ + +## Examples +```js +from(bucket: "telegraf/autogen") + |> range(start: -5m) + |> filter(fn: (r) => + r._measurement == "cpu" and + r._field == "usage_system" + ) + |> sum() +``` + +
+ +##### Related InfluxQL functions and statements: +[SUM()](/influxdb/latest/query_language/functions/#sum) diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/timedmovingaverage.md b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/timedmovingaverage.md new file mode 100644 index 0000000000..4de7c80cd9 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/timedmovingaverage.md @@ -0,0 +1,84 @@ +--- +title: timedMovingAverage() function +description: > + The `timedMovingAverage()` function calculates the mean of values in + a defined time range at a specified frequency. +menu: + flux_0_x: + name: timedMovingAverage + parent: Aggregates +weight: 501 +aliases: + - /flux/v0.x/functions/built-in/transformations/aggregates/timedmovingaverage/ +--- + +The `timedMovingAverage()` function calculates the mean of values in a defined time +range at a specified frequency. + +_**Function type:** Aggregate_ + +```js +timedMovingAverage( + every: 1d, + period: 5d, + column="_value" +) +``` + +## Parameters + +### every +The frequency of time windows. + +_**Data type:** Duration_ + +### period +The length of each averaged time window. +_A negative duration indicates start and stop boundaries are reversed._ + +_**Data type:** Duration_ + +### column +The column used to compute the moving average. +Defaults to `"_value"`. + +_**Data type:** String_ + +## Examples + +###### Calculate a seven day moving average every day +```js +from(bucket: "telegraf/autogen"): + |> range(start: -7y) + |> filter(fn: (r) => + r._measurement == "financial" and + r._field == "closing_price" + ) + |> timedMovingAverage(every: 1y, period: 5y) +``` + +###### Calculate a five year moving average every year +```js +from(bucket: "telegraf/autogen"): + |> range(start: -50d) + |> filter(fn: (r) => + r._measurement == "financial" and + r._field == "closing_price" + ) + |> timedMovingAverage(every: 1d, period: 7d) +``` + +## Function definition +```js +timedMovingAverage = (every, period, column="_value", tables=<-) => + tables + |> window(every: every, period: period) + |> mean(column:column) + |> duplicate(column: "_stop", as: "_time") + |> window(every: inf) +``` + +
+ +##### Related InfluxQL functions and statements: +[MOVING_AVERAGE()](/influxdb/latest/query_language/functions/#moving-average) diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/tripleema.md b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/tripleema.md new file mode 100644 index 0000000000..883d0d1566 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/tripleema.md @@ -0,0 +1,69 @@ +--- +title: tripleEMA() function +description: > + The `tripleEMA()` function calculates the exponential moving average + of values grouped into `n` number of points, giving more weight to recent data with + less lag than `exponentialMovingAverage()` and `doubleEMA()`. +menu: + flux_0_x: + name: tripleEMA + parent: Aggregates + weight: 1 +aliases: + - /flux/v0.x/functions/built-in/transformations/aggregates/tripleema/ +--- + +The `tripleEMA()` function calculates the exponential moving average of values in +the `_value` column grouped into `n` number of points, giving more weight to recent +data with less lag than +[`exponentialMovingAverage()`](/flux/v0.x/stdlib/built-in/transformations/aggregates/exponentialmovingaverage/) +and [`doubleEMA()`](/flux/v0.x/stdlib/built-in/transformations/aggregates/doubleema/). + +_**Function type:** Aggregate_ + +```js +tripleEMA(n: 5) +``` + +##### Triple exponential moving average rules: +- A triple exponential moving average is defined as `tripleEMA = (3 * EMA_1) - (3 * EMA_2) + EMA_3`. + - `EMA_1` is the exponential moving average of the original data. + - `EMA_2` is the exponential moving average of `EMA_1`. + - `EMA_3` is the exponential moving average of `EMA_2`. +- A true triple exponential moving average requires at least requires at least `3 * n - 2` values. + If not enough values exist to calculate the triple EMA, it returns a `NaN` value. +- `tripleEMA()` inherits all [exponential moving average rules](/flux/v0.x/stdlib/built-in/transformations/aggregates/exponentialmovingaverage/#exponential-moving-average-rules). + +## Parameters + +### n +The number of points to average. + +_**Data type:** Integer_ + +## Examples + +#### Calculate a five point triple exponential moving average +```js +from(bucket: "telegraf/autogen"): + |> range(start: -12h) + |> tripleEMA(n: 5) +``` + +## Function definition +```js +tripleEMA = (n, tables=<-) => + tables + |> exponentialMovingAverage(n:n) + |> duplicate(column:"_value", as:"ema1") + |> exponentialMovingAverage(n:n) + |> duplicate(column:"_value", as:"ema2") + |> exponentialMovingAverage(n:n) + |> map(fn: (r) => ({r with _value: 3.0 * r.ema1 - 3.0 * r.ema2 + r._value})) + |> drop(columns: ["ema1", "ema2"]) +``` + +
+ +##### Related InfluxQL functions and statements: +[TRIPLE_EXPONENTIAL_MOVING_AVERAGE](/influxdb/latest/query_language/functions/#triple-exponential-moving-average) diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/tripleexponentialderivative.md b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/tripleexponentialderivative.md new file mode 100644 index 0000000000..300a7d60a2 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/tripleexponentialderivative.md @@ -0,0 +1,66 @@ +--- +title: tripleExponentialDerivative() function +description: > + The `tripleExponentialDerivative()` function calculates a triple exponential + derivative (TRIX) of input tables using `n` points. +menu: + flux_0_x: + name: tripleExponentialDerivative + parent: Aggregates + weight: 1 +aliases: + - /flux/v0.x/functions/built-in/transformations/aggregates/tripleexponentialderivative/ +--- + +The `tripleExponentialDerivative()` function calculates a triple exponential +derivative ([TRIX](https://en.wikipedia.org/wiki/Trix_(technical_analysis)) of +input tables using `n` points. + +_**Function type:** Aggregate_ + +```js +tripleExponentialDerivative(n: 5) +``` + +Triple exponential derivative, commonly referred to as “TRIX,” is a momentum indicator and oscillator. +A triple exponential derivative uses the natural logarithm (log) of input data to +calculate a triple exponential moving average over the period of time. +The calculation prevents cycles shorter than the defined period from being considered by the indicator. +`tripleExponentialDerivative()` uses the time between `n` points to define the period. + +Triple exponential derivative oscillates around a zero line. +A positive momentum **oscillator** value indicates an overbought market; +a negative value indicates an oversold market. +A positive momentum **indicator** value indicates increasing momentum; +a negative value indicates decreasing momentum. + +##### Triple exponential moving average rules +- A triple exponential derivative is defined as: + - `TRIX[i] = ((EMA3[i] / EMA3[i - 1]) - 1) * 100`: + - `EMA_3 = EMA(EMA(EMA(data)))` +- If there are not enough values to calculate a triple exponential derivative, + the output `_value` is `NaN`; all other columns are the same as the _last_ record of the input table. +- The function behaves the same way as the [`exponentialMovingAverage()`](/flux/v0.x/stdlib/built-in/transformations/aggregates/exponentialmovingaverage/) function: + - The function does not include `null` values in the calculation. + - The function acts only on the `_value` column. + +## Parameters + +### n +The number of points to use in the calculation. + +_**Data type:** Integer_ + +## Examples + +#### Calculate a five point triple exponential derivative +```js +from(bucket: "telegraf/autogen"): + |> range(start: -12h) + |> tripleExponentialDerivative(n: 5) +``` + +
+ +##### Related InfluxQL functions and statements: +[TRIPLE_EXPONENTIAL_DERIVATIVE](/influxdb/latest/query_language/functions/#triple-exponential-derivative) diff --git a/content/flux/v0.x/stdlib/built-in/transformations/columns.md b/content/flux/v0.x/stdlib/built-in/transformations/columns.md new file mode 100644 index 0000000000..632c6c89fa --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/columns.md @@ -0,0 +1,60 @@ +--- +title: columns() function +description: > + The columns() function lists the column labels of input tables. For + each input table, it outputs a table with the same group key columns, plus a new + column containing the labels of the input table''s columns. +aliases: + - /flux/v0.x/functions/transformations/columns + - /flux/v0.x/functions/built-in/transformations/columns/ +menu: + flux_0_x: + name: columns + parent: Transformations + weight: 1 +--- + +The `columns()` function lists the column labels of input tables. +For each input table, it outputs a table with the same group key columns, +plus a new column containing the labels of the input table's columns. +Each row in an output table contains the group key value and the label of one column of the input table. +Each output table has the same number of rows as the number of columns of the input table. + +_**Function type:** Transformation_ + +```js +columns(column: "_value") +``` + +## Parameters + +### column +The name of the output column in which to store the column labels. +Defaults to `"_value"`. + +_**Data type:** String_ + +## Examples +```js +from(bucket: "telegraf/autogen") + |> range(start: -30m) + |> columns(column: "labels") +``` + +##### Get every possible column label in a single table +```js +from(bucket: "telegraf/autogen") + |> range(start: -30m) + |> columns() + |> keep(columns: ["_value"]) + |> group() + |> distinct() +``` + +
+ +##### Related InfluxQL functions and statements: +[SHOW MEASUREMENTS](/influxdb/latest/query_language/schema_exploration/#show-measurements) +[SHOW FIELD KEYS](/influxdb/latest/query_language/schema_exploration/#show-field-keys) +[SHOW TAG KEYS](/influxdb/latest/query_language/schema_exploration/#show-tag-keys) +[SHOW SERIES](/influxdb/latest/query_language/schema_exploration/#show-tag-keys) diff --git a/content/flux/v0.x/stdlib/built-in/transformations/cumulativesum.md b/content/flux/v0.x/stdlib/built-in/transformations/cumulativesum.md new file mode 100644 index 0000000000..bbb1142d05 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/cumulativesum.md @@ -0,0 +1,47 @@ +--- +title: cumulativeSum() function +description: The cumulativeSum() function computes a running sum for non-null records + in the table. +aliases: + - /flux/v0.x/functions/transformations/cumulativesum + - /flux/v0.x/functions/built-in/transformations/cumulativesum/ +menu: + flux_0_x: + name: cumulativeSum + parent: Transformations + weight: 1 +--- + +The `cumulativeSum()` function computes a running sum for non-null records in the table. +The output table schema will be the same as the input table. + +_**Function type:** Transformation +_**Output data type:** Float_ + +```js +cumulativeSum(columns: ["_value"]) +``` + +## Parameters + +### columns +A list of columns on which to operate. +Defaults to `["_value"]`. + +_**Data type:** Array of strings_ + +## Examples +```js +from(bucket: "telegraf/autogen") + |> range(start: -5m) + |> filter(fn: (r) => + r._measurement == "disk" and + r._field == "used_percent" + ) + |> cumulativeSum(columns: ["_value"]) +``` + +
+ +##### Related InfluxQL functions and statements: +[CUMULATIVE_SUM()](/influxdb/latest/query_language/functions/#cumulative-sum) diff --git a/content/flux/v0.x/stdlib/built-in/transformations/drop.md b/content/flux/v0.x/stdlib/built-in/transformations/drop.md new file mode 100644 index 0000000000..7bd0450966 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/drop.md @@ -0,0 +1,69 @@ +--- +title: drop() function +description: The drop() function removes specified columns from a table. +aliases: + - /flux/v0.x/functions/transformations/drop + - /flux/v0.x/functions/built-in/transformations/drop/ +menu: + flux_0_x: + name: drop + parent: Transformations + weight: 1 +--- + +The `drop()` function removes specified columns from a table. +Columns are specified either through a list or a predicate function. +When a dropped column is part of the group key, it will be removed from the key. +If a specified column is not present in a table, it will return an error. + +_**Function type:** Transformation_ +_**Output data type:** Object_ + +```js +drop(columns: ["col1", "col2"]) + +// OR + +drop(fn: (column) => column =~ /usage*/) +``` + +## Parameters + +### columns +Columns to be removed from the table. +Cannot be used with `fn`. + +_**Data type:** Array of strings_ + +### fn +A predicate function which takes a column name as a parameter (`column`) and returns +a boolean indicating whether or not the column should be removed from the table. +Cannot be used with `columns`. + +_**Data type:** Function_ + +{{% note %}} +Make sure `fn` parameter names match each specified parameter. +To learn why, see [Match parameter names](/flux/v0.x/language/data-model/#match-parameter-names). +{{% /note %}} + +## Examples + +##### Drop a list of columns +```js +from(bucket: "telegraf/autogen") + |> range(start: -5m) + |> drop(columns: ["host", "_measurement"]) +``` + +##### Drop columns matching a predicate +```js +from(bucket: "telegraf/autogen") + |> range(start: -5m) + |> drop(fn: (column) => column =~ /usage*/) +``` + +
+ +##### Related InfluxQL functions and statements: +[DROP MEASUREMENT](/influxdb/latest/query_language/database_management/#delete-measurements-with-drop-measurement) diff --git a/content/flux/v0.x/stdlib/built-in/transformations/duplicate.md b/content/flux/v0.x/stdlib/built-in/transformations/duplicate.md new file mode 100644 index 0000000000..04af5d8fb5 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/duplicate.md @@ -0,0 +1,47 @@ +--- +title: duplicate() function +description: The duplicate() function duplicates a specified column in a table. +aliases: + - /flux/v0.x/functions/transformations/duplicate + - /flux/v0.x/functions/built-in/transformations/duplicate/ +menu: + flux_0_x: + name: duplicate + parent: Transformations + weight: 1 +--- + +The `duplicate()` function duplicates a specified column in a table. +If the specified column is part of the group key, it will be duplicated, but will +not be part of the output table's group key. + +_**Function type:** Transformation_ +_**Output data type:** Object_ + +```js +duplicate(column: "column-name", as: "duplicate-name") +``` + +## Parameters + +### column +The column to duplicate. + +_**Data type:** String_ + +### as +The name assigned to the duplicate column. + +_**Data type:** String_ + +{{% note %}} +If the `as` column already exists, this function will overwrite the existing values. +{{% /note %}} + +## Examples +```js +from(bucket: "telegraf/autogen") + |> range(start:-5m) + |> filter(fn: (r) => r._measurement == "cpu") + |> duplicate(column: "host", as: "server") +``` diff --git a/content/flux/v0.x/stdlib/built-in/transformations/elapsed.md b/content/flux/v0.x/stdlib/built-in/transformations/elapsed.md new file mode 100644 index 0000000000..7483d3c168 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/elapsed.md @@ -0,0 +1,56 @@ +--- +title: elapsed() function +description: The `elapsed()` function returns the time between subsequent records. +menu: + flux_0_x: + name: elapsed + parent: Transformations +weight: 401 +aliases: + - /flux/v0.x/functions/built-in/transformations/elapsed/ +--- + +The `elapsed()` function returns the time between subsequent records. +Given an input table, `elapsed()` returns the same table without the first record +(as elapsed time is not defined) and an additional column containing the elapsed time. + +_**Function type:** Transformation_ + +```js +elapsed( + unit: 1s, + timeColumn: "_time", + columnName: "elapsed" +) +``` + +_`elapsed()` returns an errors if the `timeColumn` is not present in the input table._ + +## Parameters + +### unit +The unit time to returned. +_Defaults to `1s`._ + +_**Data type:** Duration_ + +### timeColumn +The column to use to compute the elapsed time. +_Defaults to `"_time"`._ + +_**Data type:** String_ + +### columnName +The column to store elapsed times. +_Defaults to `"elapsed"`._ + +_**Data type:** String_ + +## Examples + +##### Calculate the time between points in seconds +```js +from(bucket: "telegraf/autogen") + |> range(start: -5m) + |> elapsed(unit: 1s) +``` diff --git a/content/flux/v0.x/stdlib/built-in/transformations/fill.md b/content/flux/v0.x/stdlib/built-in/transformations/fill.md new file mode 100644 index 0000000000..f4a955b674 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/fill.md @@ -0,0 +1,76 @@ +--- +title: fill() function +description: The fill() function filters data based on conditions defined in a predicate + function (fn). +aliases: + - /flux/v0.x/functions/transformations/fill + - /flux/v0.x/functions/built-in/transformations/fill/ +menu: + flux_0_x: + name: fill + parent: Transformations + weight: 1 +--- + + +The `fill()` function replaces all null values in an input stream with a non-null value. + +_**Function type:** Transformation_ + +```js +fill(column: "_value", value: 0.0) + +// OR + +fill(column: "_value", usePrevious: true) +``` + +## Parameters + +### column +The column in which to replace null values. Defaults to `"_value"`. + +_**Data type:** String_ + +### value +The constant value to use in place of nulls. +The value type must match the value type of the `column`. + +_**Data type:** Boolean | Integer | UInteger | Float | String | Time | Duration_ + +### usePrevious +When `true`, assigns the value set in the previous non-null row. + +> Cannot be used with `value`. + +_**Data type:** Boolean | Integer | UInteger | Float | String | Time | Duration_ + + +## Examples + +##### Fill null values with a specified non-null value +```js +from(bucket: "telegraf/autogen") + |> range(start: -1h) + |> filter(fn: (r) => + r._measurement == "cpu" and + r.cpu == "cpu-total" + ) + |> fill(value: 0.0) +``` + +##### Fill null values with the previous non-null value +```js +from(bucket: "telegraf/autogen") + |> range(start: -1h) + |> filter(fn: (r) => + r._measurement == "cpu" and + r.cpu == "cpu-total" + ) + |> fill(usePrevious: true) +``` + +
+ +##### Related InfluxQL functions and statements: +[FILL](/influxdb/latest/query_language/data_exploration/#group-by-time-intervals-and-fill) diff --git a/content/flux/v0.x/stdlib/built-in/transformations/filter.md b/content/flux/v0.x/stdlib/built-in/transformations/filter.md new file mode 100644 index 0000000000..c26f2dc42c --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/filter.md @@ -0,0 +1,56 @@ +--- +title: filter() function +description: The filter() function filters data based on conditions defined in a predicate + function (fn). +aliases: + - /flux/v0.x/functions/transformations/filter + - /flux/v0.x/functions/built-in/transformations/filter/ +menu: + flux_0_x: + name: filter + parent: Transformations + weight: 1 +--- + +The `filter()` function filters data based on conditions defined in a predicate function ([`fn`](#fn)). +The output tables have the same schema as the corresponding input tables. + +_**Function type:** Transformation_ +_**Output data type:** Object_ + +```js +filter(fn: (r) => r._measurement == "cpu") +``` + +## Parameters + +### fn +A single argument predicate function that evaluates true or false. +Records are passed to the function. +Those that evaluate to true are included in the output tables. +Records that evaluate to _null_ or false are not included in the output tables. + +_**Data type:** Function_ + +> Objects evaluated in `fn` functions are represented by `r`, short for "record" or "row". + +{{% note %}} +Make sure `fn` parameter names match each specified parameter. +To learn why, see [Match parameter names](/flux/v0.x/language/data-model/#match-parameter-names). +{{% /note %}} + +## Examples +```js +from(bucket:"telegraf/autogen") + |> range(start:-1h) + |> filter(fn: (r) => + r._measurement == "cpu" and + r._field == "usage_system" and + r.cpu == "cpu-total" + ) +``` + +
+ +##### Related InfluxQL functions and statements: +[SELECT](/influxdb/latest/query_language/data_exploration/#the-basic-select-statement) diff --git a/content/flux/v0.x/stdlib/built-in/transformations/group.md b/content/flux/v0.x/stdlib/built-in/transformations/group.md new file mode 100644 index 0000000000..ce6d38db20 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/group.md @@ -0,0 +1,84 @@ +--- +title: group() function +description: The group() function groups records based on their values for specific + columns. +aliases: + - /flux/v0.x/functions/transformations/group + - /flux/v0.x/functions/built-in/transformations/group/ +menu: + flux_0_x: + name: group + parent: Transformations + weight: 1 +--- + +The `group()` function groups records based on their values for specific columns. +It produces tables with new group keys based on provided properties. + +_**Function type:** Transformation_ + +```js +group(columns: ["host", "_measurement"], mode:"by") + +// OR + +group(columns: ["_time"], mode:"except") + +// OR + +group() +``` + +## Parameters + +### columns +List of columns to use in the grouping operation. +Defaults to `[]`. + +_**Data type:** Array of strings_ + +### mode +The mode used to group columns. + +_**Data type:** String_ + +The following options are available: + +- by +- except + +Defaults to `"by"`. + +#### by +Groups records by columns defined in the [`columns`](#columns) parameter. + +#### except +Groups records by all columns **except** those defined in the [`columns`](#columns) parameter. + +## Examples + +###### Group by host and measurement +```js +from(bucket: "telegraf/autogen") + |> range(start: -30m) + |> group(columns: ["host", "_measurement"]) +``` + +###### Group by everything except time +```js +from(bucket: "telegraf/autogen") + |> range(start: -30m) + |> group(columns: ["_time"], mode: "except") +``` + +###### Remove all grouping +```js +from(bucket: "telegraf/autogen") + |> range(start: -30m) + |> group() +``` + +
+ +##### Related InfluxQL functions and statements: +[GROUP BY](/influxdb/latest/query_language/data_exploration/#the-group-by-clause) _(similar but different)_ diff --git a/content/flux/v0.x/stdlib/built-in/transformations/histogram.md b/content/flux/v0.x/stdlib/built-in/transformations/histogram.md new file mode 100644 index 0000000000..661c816922 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/histogram.md @@ -0,0 +1,80 @@ +--- +title: histogram() function +description: The histogram() function approximates the cumulative distribution of + a dataset by counting data frequencies for a list of bins. +aliases: + - /flux/v0.x/functions/transformations/histogram + - /flux/v0.x/functions/built-in/transformations/histogram/ +menu: + flux_0_x: + name: histogram + parent: Transformations + weight: 1 +--- + +The `histogram()` function approximates the cumulative distribution of a dataset by counting data frequencies for a list of bins. +A bin is defined by an upper bound where all data points that are less than or equal to the bound are counted in the bin. +The bin counts are cumulative. + +Each input table is converted into a single output table representing a single histogram. +The output table has a the same group key as the input table. +Columns not part of the group key are removed and an upper bound column and a count column are added. + +_**Function type:** Transformation_ +_**Output data type:** Object_ + +```js +histogram(column: "_value", upperBoundColumn: "le", countColumn: "_value", bins: [50.0, 75.0, 90.0], normalize: false) +``` + +## Parameters + +### column +The name of a column containing input data values. +The column type must be float. +Defaults to `"_value"`. + +_**Data type:** String_ + +### upperBoundColumn +The name of the column in which to store the histogram's upper bounds. +Defaults to `"le"`. + +_**Data type:** String_ + +### countColumn +The name of the column in which to store the histogram counts. +Defaults to `"_value"`. + +_**Data type:** String_ + +### bins +A list of upper bounds to use when computing the histogram frequencies. +Bins should contain a bin whose bound is the maximum value of the data set. +This value can be set to positive infinity if no maximum is known. + +_**Data type:** Array of floats_ + +#### Bin helper functions +The following helper functions can be used to generated bins. + +[linearBins()](/flux/v0.x/stdlib/built-in/misc/linearbins) +[logarithmicBins()](/flux/v0.x/stdlib/built-in/misc/logarithmicbins) + +### normalize +When `true`, will convert the counts into frequency values between 0 and 1. +Defaults to `false`. + +_**Data type:** Boolean_ + +> Normalized histograms cannot be aggregated by summing their counts. + +## Examples + +##### Histogram with dynamically generated bins +```js +// Dynamically generate 10 bins from 0,10,20,...,100 +histogram( + bins: linearBins(start:0.0, width:10.0, count:10) +) +``` diff --git a/content/flux/v0.x/stdlib/built-in/transformations/hourselection.md b/content/flux/v0.x/stdlib/built-in/transformations/hourselection.md new file mode 100644 index 0000000000..425d8064b2 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/hourselection.md @@ -0,0 +1,55 @@ +--- +title: hourSelection() function +description: > + The `hourSelection()` function retains all rows with time values in + a specified hour range. Hours are specified in military time. +menu: + flux_0_x: + name: hourSelection + parent: Transformations + weight: 1 +aliases: + - /flux/v0.x/functions/built-in/transformations/hourselection/ +--- + +The `hourSelection()` function retains all rows with time values in a specified hour range. + +_**Function type:** Transformation_ + +```js +hourSelection( + start: 9, + stop: 17, + timeColumn: "_time" +) +``` + +## Parameters + +### start +The first hour of the hour range (inclusive). +Hours range from `[0-23]`. + +_**Data type:** Integer_ + +### stop +The last hour of the hour range (inclusive). +Hours range from `[0-23]`. + +_**Data type:** Integer_ + +### timeColumn +The column that contains the time value. +Default is `"_time"`. + +_**Data type:** String_ + +## Examples + +##### Use only data from 9am to 5pm +```js +from(bucket:"telegraf/autogen") + |> range(start:-90d) + |> filter(fn: (r) => r._measurement == "foot-traffic" ) + |> hourSelection(start: 9, stop: 17) +``` diff --git a/content/flux/v0.x/stdlib/built-in/transformations/influxfieldsascols.md b/content/flux/v0.x/stdlib/built-in/transformations/influxfieldsascols.md new file mode 100644 index 0000000000..15c13694d2 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/influxfieldsascols.md @@ -0,0 +1,43 @@ +--- +title: influxFieldsAsCols() function +description: The influxFieldsAsCols() function is pivots a table and automatically + aligns fields within each input table that have the same timestamp. +aliases: + - /flux/v0.x/functions/inputs/fromrows + - /flux/v0.x/functions/transformations/influxfieldsascols + - /flux/v0.x/functions/built-in/transformations/influxfieldsascols/ +menu: + flux_0_x: + name: influxFieldsAsCols + parent: Transformations + weight: 1 +--- + +The `influxFieldsAsCols()` function is a special application of the `pivot()` function that +automatically aligns fields within each input table that have the same timestamp. + +_**Function type:** Transformation_ + +```js +influxFieldsAsCols() +``` + +## Examples +```js +from(bucket:"telegraf/autogen") + |> range(start: -1h) + |> filter(fn: (r) => r._measurement == "cpu") + |> influxFieldsAsCols() + |> keep(columns: ["_time", "cpu", "usage_idle", "usage_user"]) +``` + +## Function definition +```js +influxFieldsAsCols = (tables=<-) => + tables + |> pivot( + rowKey:["_time"], + columnKey: ["_field"], + valueColumn: "_value" + ) +``` diff --git a/content/flux/v0.x/stdlib/built-in/transformations/join.md b/content/flux/v0.x/stdlib/built-in/transformations/join.md new file mode 100644 index 0000000000..a462f4729a --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/join.md @@ -0,0 +1,135 @@ +--- +title: join() function +description: The join() function merges two or more input streams whose values are + equal on a set of common columns into a single output stream. +aliases: + - /flux/v0.x/functions/transformations/join + - /flux/v0.x/functions/built-in/transformations/join/ +menu: + flux_0_x: + name: join + parent: Transformations + weight: 1 +--- + +The `join()` function merges two or more input streams whose values are equal on +a set of common columns into a single output stream. +Null values are not considered equal when comparing column values. +The resulting schema is the union of the input schemas. +The resulting group key is the union of the input group keys. + +_**Function type:** Transformation_ +_**Output data type:** Object_ + +```js +join(tables: {key1: table1, key2: table2}, on: ["_time", "_field"], method: "inner") +``` + +#### Output schema +The column schema of the output stream is the union of the input schemas. +It is also the same for the output group key. +Columns are renamed using the pattern `_` to prevent ambiguity in joined tables. + +##### Example: +If you have two streams of data, **data_1** and **data_2**, with the following group keys: + +**data_1**: `[_time, _field]` +**data_2**: `[_time, _field]` + +And join them with: + +```js +join(tables: {d1: data_1, d2: data_2}, on: ["_time"]) +``` + +The resulting group keys for all tables will be: `[_time, _field_d1, _field_d2]` + + +## Parameters + +### tables +The map of streams to be joined. Required. + +_**Data type:** Object_ + +> `join()` currently only supports two input streams. + +### on +The list of columns on which to join. Required. + +_**Data type:** Array of strings_ + +### method +The method used to join. Defaults to `"inner"`. + +_**Data type:** String_ + +###### Possible Values: +- `inner` +- `cross` +- `left` +- `right` +- `full` + +> The `on` parameter and the cross method are mutually exclusive. + +## Examples + +#### Example join with sample data + +Given the following two streams of data: + +##### SF_Temp** + +| _time | _field | _value | +| ------ |:------:| -------:| +| 0001 | "temp" | 70 | +| 0002 | "temp" | 75 | +| 0003 | "temp" | 72 | + +##### NY_Temp** + +| _time | _field | _value | +| ------ |:------:| -------:| +| 0001 | "temp" | 55 | +| 0002 | "temp" | 56 | +| 0003 | "temp" | 55 | + +And the following join query: + +```js +join( + tables: {sf: SF_Temp, ny: NY_Temp}, + on: ["_time", "_field"] +) +``` + +The output will be: + +| _time | _field | _value_ny | _value_sf | +| ----- | ------ | ---------:| ---------:| +| 0001 | "temp" | 55 | 70 | +| 0002 | "temp" | 56 | 75 | +| 0003 | "temp" | 55 | 72 | + +#### Cross-measurement join +```js +data_1 = from(bucket:"telegraf/autogen") + |> range(start:-15m) + |> filter(fn: (r) => + r._measurement == "cpu" and + r._field == "usage_system" + ) + +data_2 = from(bucket:"telegraf/autogen") + |> range(start:-15m) + |> filter(fn: (r) => + r._measurement == "mem" and + r._field == "used_percent" + ) + +join( + tables: {d1: data_1, d2: data_2}, + on: ["_time", "host"] +) +``` diff --git a/content/flux/v0.x/stdlib/built-in/transformations/keep.md b/content/flux/v0.x/stdlib/built-in/transformations/keep.md new file mode 100644 index 0000000000..bb1fd47efa --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/keep.md @@ -0,0 +1,63 @@ +--- +title: keep() function +description: The keep() function returns a table containing only the specified columns. +aliases: + - /flux/v0.x/functions/transformations/keep + - /flux/v0.x/functions/built-in/transformations/keep/ +menu: + flux_0_x: + name: keep + parent: Transformations + weight: 1 +--- + +The `keep()` function returns a table containing only the specified columns, ignoring all others. +Only columns in the group key that are also specified in the `keep()` function will be kept in the resulting group key. +_It is the inverse of [`drop`](/flux/v0.x/stdlib/built-in/transformations/drop)._ + +_**Function type:** Transformation_ +_**Output data type:** Object_ + +```js +keep(columns: ["col1", "col2"]) + +// OR + +keep(fn: (column) => column =~ /inodes*/) +``` + +## Parameters + +### columns +Columns that should be included in the resulting table. +Cannot be used with `fn`. + +_**Data type:** Array of strings_ + +### fn +A predicate function which takes a column name as a parameter (`column`) and returns +a boolean indicating whether or not the column should be included in the resulting table. +Cannot be used with `columns`. + +_**Data type:** Function_ + +{{% note %}} +Make sure `fn` parameter names match each specified parameter. +To learn why, see [Match parameter names](/flux/v0.x/language/data-model/#match-parameter-names). +{{% /note %}} + +## Examples + +##### Keep a list of columns +```js +from(bucket: "telegraf/autogen") + |> range(start: -5m) + |> keep(columns: ["_time", "_value"]) +``` + +##### Keep all columns matching a predicate +```js +from(bucket: "telegraf/autogen") + |> range(start: -5m) + |> keep(fn: (column) => column =~ /inodes*/) +``` diff --git a/content/flux/v0.x/stdlib/built-in/transformations/keys.md b/content/flux/v0.x/stdlib/built-in/transformations/keys.md new file mode 100644 index 0000000000..55fc3e2c4b --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/keys.md @@ -0,0 +1,60 @@ +--- +title: keys() function +description: > + The keys() function outputs the group key of input tables. For each + input table, it outputs a table with the same group key columns, plus a _value column + containing the labels of the input table''s group key. +aliases: + - /flux/v0.x/functions/transformations/keys + - /flux/v0.x/functions/built-in/transformations/keys/ +menu: + flux_0_x: + name: keys + parent: Transformations + weight: 1 +--- + +The `keys()` function outputs the group key of input tables. +For each input table, it outputs a table with the same group key columns, plus a +`_value` column containing the labels of the input table's group key. +Each row in an output table contains the group key value and the label of one column in the group key of the input table. +Each output table has the same number of rows as the size of the group key of the input table. + +_**Function type:** Transformation_ + +```js +keys(column: "_value") +``` + +## Parameters + +### column +The name of the output column in which to store the group key labels. +Defaults to `"_value"`. + +_**Data type:** String_ + +## Examples +```js +from(bucket: "telegraf/autogen") + |> range(start: -30m) + |> keys(column: "keys") +``` + +##### Return every possible key in a single table +```js +from(bucket: "telegraf/autogen") + |> range(start: -30m) + |> keys() + |> keep(columns: ["_value"]) + |> group() + |> distinct() +``` + +
+ +##### Related InfluxQL functions and statements: +[SHOW MEASUREMENTS](/influxdb/latest/query_language/schema_exploration/#show-measurements) +[SHOW FIELD KEYS](/influxdb/latest/query_language/schema_exploration/#show-field-keys) +[SHOW TAG KEYS](/influxdb/latest/query_language/schema_exploration/#show-tag-keys) +[SHOW SERIES](/influxdb/latest/query_language/schema_exploration/#show-tag-keys) diff --git a/content/flux/v0.x/stdlib/built-in/transformations/keyvalues.md b/content/flux/v0.x/stdlib/built-in/transformations/keyvalues.md new file mode 100644 index 0000000000..e3b56d4c9f --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/keyvalues.md @@ -0,0 +1,83 @@ +--- +title: keyValues() function +description: The keyValues() function returns a table with the input table's group + key plus two columns, _key and _value, that correspond to unique column + value + pairs from the input table. +aliases: + - /flux/v0.x/functions/transformations/keyvalues + - /flux/v0.x/functions/built-in/transformations/keyvalues/ +menu: + flux_0_x: + name: keyValues + parent: Transformations + weight: 1 +--- + +The `keyValues()` function returns a table with the input table's group key plus two columns, +`_key` and `_value`, that correspond to unique column + value pairs from the input table. + +_**Function type:** Transformation_ +_**Output data type:** Object_ + +```js +keyValues(keyColumns: ["usage_idle", "usage_user"]) + +// OR + +keyValues(fn: (schema) => schema.columns |> filter(fn: (r) => r.label =~ /usage_.*/)) +``` + +## Parameters + +> `keyColumns` and `fn` are mutually exclusive. Only one may be used at a time. + +### keyColumns +A list of columns from which values are extracted. +All columns indicated must be of the same type. +Each input table must have all of the columns listed by the `keyColumns` parameter. + +_**Data type:** Array of strings_ + +### fn +Function used to identify a set of columns. +All columns indicated must be of the same type. + +_**Data type:** Function_ + +{{% note %}} +Make sure `fn` parameter names match each specified parameter. +To learn why, see [Match parameter names](/flux/v0.x/language/data-model/#match-parameter-names). +{{% /note %}} + +## Additional requirements + +- Only one of `keyColumns` or `fn` may be used in a single call. +- All columns indicated must be of the same type. +- Each input table must have all of the columns listed by the `keyColumns` parameter. + +## Examples + +##### Get key values from explicitly defined columns +```js +from(bucket: "telegraf/autogen") + |> range(start: -30m) + |> filter(fn: (r) => r._measurement == "cpu") + |> keyValues(keyColumns: ["usage_idle", "usage_user"]) +``` + +##### Get key values from columns matching a regular expression +```js +from(bucket: "telegraf/autogen") + |> range(start: -30m) + |> filter(fn: (r) => r._measurement == "cpu") + |> keyValues(fn: (schema) => schema.columns |> filter(fn: (r) => r.label =~ /usage_.*/)) +``` + +
+ +##### Related InfluxQL functions and statements: +[SHOW MEASUREMENTS](/influxdb/latest/query_language/schema_exploration/#show-measurements) +[SHOW FIELD KEYS](/influxdb/latest/query_language/schema_exploration/#show-field-keys) +[SHOW TAG KEYS](/influxdb/latest/query_language/schema_exploration/#show-tag-keys) +[SHOW TAG VALUES](/influxdb/latest/query_language/schema_exploration/#show-tag-values) +[SHOW SERIES](/influxdb/latest/query_language/schema_exploration/#show-series) diff --git a/content/flux/v0.x/stdlib/built-in/transformations/limit.md b/content/flux/v0.x/stdlib/built-in/transformations/limit.md new file mode 100644 index 0000000000..dc6151197c --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/limit.md @@ -0,0 +1,53 @@ +--- +title: limit() function +description: The `limit()` function limits each output table to the first `n` records. +aliases: + - /flux/v0.x/functions/transformations/limit + - /flux/v0.x/functions/built-in/transformations/limit/ +menu: + flux_0_x: + name: limit + parent: Transformations + weight: 1 +--- + +The `limit()` function limits each output table to the first [`n`](#n) records. +The function produces one output table for each input table. +Each output table contains the first `n` records after the [`offset`](#offset). +If the input table has less than `offset + n` records, `limit()` outputs all records after the `offset`. + +_**Function type:** Filter_ + +```js +limit( + n:10, + offset: 0 +) +``` + +## Parameters + +### n +The maximum number of records to output. + +_**Data type:** Integer_ + +### offset +The number of records to skip per table before limiting to `n`. +Defaults to `0`. + +_**Data type:** Integer_ + +## Examples + +##### Output the first ten records in each table +```js +from(bucket:"telegraf/autogen") + |> range(start:-1h) + |> limit(n:10) +``` + +
+ +##### Related InfluxQL functions and statements: +[LIMIT](/influxdb/latest/query_language/data_exploration/#the-limit-and-slimit-clauses) diff --git a/content/flux/v0.x/stdlib/built-in/transformations/map.md b/content/flux/v0.x/stdlib/built-in/transformations/map.md new file mode 100644 index 0000000000..737279d4a2 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/map.md @@ -0,0 +1,105 @@ +--- +title: map() function +description: The map() function applies a function to each record in the input tables. +aliases: + - /flux/v0.x/functions/transformations/map + - /flux/v0.x/functions/built-in/transformations/map/ +menu: + flux_0_x: + name: map + parent: Transformations + weight: 1 +--- + +The `map()` function applies a function to each record in the input tables. +The modified records are assigned to new tables based on the group key of the input table. +The output tables are the result of applying the map function to each record of the input tables. + +When the output record contains a different value for the group key, the record is regrouped into the appropriate table. +When the output record drops a column that was part of the group key, that column is removed from the group key. + +_**Function type:** Transformation_ +_**Output data type:** Object_ + +```js +map(fn: (r) => ({ _value: r._value * r._value })) +``` + +## Parameters + +### fn +A single argument function that to apply to each record. +The return value must be an object. + +_**Data type:** Function_ + +> Objects evaluated in `fn` functions are represented by `r`, short for "record" or "row". + +{{% note %}} +Make sure `fn` parameter names match each specified parameter. +To learn why, see [Match parameter names](/flux/v0.x/language/data-model/#match-parameter-names). +{{% /note %}} + +## Important notes + +#### Preserve columns +By default, `map()` drops any columns that: + +1. Are not part of the input table's group key. +2. Are not explicitly mapped in the `map()` function. + +This often results in the `_time` column being dropped. +To preserve the `_time` column and other columns that do not meet the criteria above, +use the `with` operator to map values in the `r` object. +The `with` operator updates a column if it already exists, +creates a new column if it doesn't exist, and includes all existing columns in +the output table. + +```js +map(fn: (r) => ({ r with newColumn: r._value * 2 })) +``` + +## Examples + +###### Square the value of each record +```js +from(bucket:"telegraf/autogen") + |> filter(fn: (r) => + r._measurement == "cpu" and + r._field == "usage_system" and + r.cpu == "cpu-total" + ) + |> range(start:-12h) + |> map(fn: (r) => ({ r with _value: r._value * r._value })) +``` + +###### Create a new table with new format +```js +from(bucket:"telegraf/autogen") + |> filter(fn: (r) => + r._measurement == "cpu" and + r._field == "usage_system" + ) + |> range(start:-12h) + // create a new table by copying each row into a new format + |> map(fn: (r) => ({ + time: r._time, + app_server: r.host + })) +``` + +###### Add new columns and preserve existing columns +```js +from(bucket:"telegraf/autogen") + |> filter(fn: (r) => + r._measurement == "cpu" and + r._field == "usage_system" + ) + |> range(start:-12h) + // create a new table by copying each row into a new format + |> map(fn: (r) => ({ + r with + app_server: r.host, + valueInt: int(v: r._value) + })) +``` diff --git a/content/flux/v0.x/stdlib/built-in/transformations/pivot.md b/content/flux/v0.x/stdlib/built-in/transformations/pivot.md new file mode 100644 index 0000000000..4de6a20d7d --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/pivot.md @@ -0,0 +1,149 @@ +--- +title: pivot() function +description: The pivot() function collects values stored vertically (column-wise) + in a table and aligns them horizontally (row-wise) into logical sets. +aliases: + - /flux/v0.x/functions/transformations/pivot + - /flux/v0.x/functions/built-in/transformations/pivot/ +menu: + flux_0_x: + name: pivot + parent: Transformations + weight: 1 +--- + +The `pivot()` function collects values stored vertically (column-wise) in a table +and aligns them horizontally (row-wise) into logical sets. + +_**Function type:** Transformation_ +_**Output data type:** Object_ + +```js +pivot(rowKey:["_time"], columnKey: ["_field"], valueColumn: "_value") +``` + +The group key of the resulting table is the same as the input tables, excluding columns found in the [`columnKey`](#columnkey) and [`valueColumn`](#valuecolumn) parameters. +This is because these columns are not part of the resulting output table. + +Every input row should have a 1:1 mapping to a particular row + column in the output table, determined by its values for the [`rowKey`](#rowkey) and [`columnKey`](#columnkey) parameters. +In cases where more than one value is identified for the same row + column pair, the last value +encountered in the set of table rows is used as the result. + +Every input row should have a 1:1 mapping to a particular row/column pair in the output table, +determined by its values for the `rowKey` and `columnKey`. +In cases where more than one value is identified for the same row/column pair in the output, +the last value encountered in the set of table rows is used as the result. + +The output is constructed as follows: + +- The set of columns for the new table is the `rowKey` unioned with the group key, + but excluding the columns indicated by the `columnKey` and the `valueColumn`. +- A new column is added to the set of columns for each unique value identified + in the input by the `columnKey` parameter. +- The label of a new column is the concatenation of the values of `columnKey` using `_` as a separator. + If the value is `null`, `"null"` is used. +- A new row is created for each unique value identified in the input by the `rowKey` parameter. +- For each new row, values for group key columns stay the same, while values for new columns are + determined from the input tables by the value in `valueColumn` at the row identified by the + `rowKey` values and the new column's label. + If no value is found, the value is set to `null`. + + +## Parameters + +### rowKey +List of columns used to uniquely identify a row for the output. + +_**Data type:** Array of strings_ + +### columnKey +List of columns used to pivot values onto each row identified by the rowKey. + +_**Data type:** Array of strings_ + +### valueColumn +The single column that contains the value to be moved around the pivot. + +_**Data type:** String_ + +## Examples + +### Align fields within each measurement that have the same timestamp + +```js +from(bucket:"test") + |> range(start: 1970-01-01T00:00:00.000000000Z) + |> pivot( + rowKey:["_time"], + columnKey: ["_field"], + valueColumn: "_value" + ) +``` + +###### Input +| _time | _value | _measurement | _field | +|:------------------------------:|:------:|:------------:|:------:| +| 1970-01-01T00:00:00.000000001Z | 1.0 | "m1" | "f1" | +| 1970-01-01T00:00:00.000000001Z | 2.0 | "m1" | "f2" | +| 1970-01-01T00:00:00.000000001Z | null | "m1" | "f3" | +| 1970-01-01T00:00:00.000000001Z | 3.0 | "m1" | null | +| 1970-01-01T00:00:00.000000002Z | 4.0 | "m1" | "f1" | +| 1970-01-01T00:00:00.000000002Z | 5.0 | "m1" | "f2" | +| null | 6.0 | "m1" | "f2" | +| 1970-01-01T00:00:00.000000002Z | null | "m1" | "f3" | +| 1970-01-01T00:00:00.000000003Z | null | "m1" | "f1" | +| 1970-01-01T00:00:00.000000003Z | 7.0 | "m1" | null | +| 1970-01-01T00:00:00.000000004Z | 8.0 | "m1" | "f3" | + +###### Output +| _time | _measurement | f1 | f2 | f3 | null | +|:------------------------------:|:------------:|:----:|:----:|:----:|:----:| +| 1970-01-01T00:00:00.000000001Z | "m1" | 1.0 | 2.0 | null | 3.0 | +| 1970-01-01T00:00:00.000000002Z | "m1" | 4.0 | 5.0 | null | null | +| null | "m1" | null | 6.0 | null | null | +| 1970-01-01T00:00:00.000000003Z | "m1" | null | null | null | 7.0 | +| 1970-01-01T00:00:00.000000004Z | "m1" | null | null | 8.0 | null | + +### Align fields and measurements that have the same timestamp +> Note the effects of: +> +> - Having null values in some `columnKey` value; +> - Having more values for the same `rowKey` and `columnKey` value + (the 11th row overrides the 10th, and so does the 15th with the 14th). + +```js +from(bucket:"test") + |> range(start: 1970-01-01T00:00:00.000000000Z) + |> pivot( + rowKey:["_time"], + columnKey: ["_measurement", "_field"], + valueColumn: "_value" + ) +``` + +###### Input +| _time | _value | _measurement | _field | +|:------------------------------:|:------:|:------------:|:------:| +| 1970-01-01T00:00:00.000000001Z | 1.0 | "m1" | "f1" | +| 1970-01-01T00:00:00.000000001Z | 2.0 | "m1" | "f2" | +| 1970-01-01T00:00:00.000000001Z | 3.0 | null | "f3" | +| 1970-01-01T00:00:00.000000001Z | 4.0 | null | null | +| 1970-01-01T00:00:00.000000002Z | 5.0 | "m1" | "f1" | +| 1970-01-01T00:00:00.000000002Z | 6.0 | "m1" | "f2" | +| 1970-01-01T00:00:00.000000002Z | 7.0 | "m1" | "f3" | +| 1970-01-01T00:00:00.000000002Z | 8.0 | null | null | +| null | 9.0 | "m1" | "f3" | +| 1970-01-01T00:00:00.000000003Z | 10.0 | "m1" | null | +| 1970-01-01T00:00:00.000000003Z | 11.0 | "m1" | null | +| 1970-01-01T00:00:00.000000003Z | 12.0 | "m1" | "f3" | +| 1970-01-01T00:00:00.000000003Z | 13.0 | null | null | +| null | 14.0 | "m1" | null | +| null | 15.0 | "m1" | null | + +###### Output +| _time | m1_f1 | m1_f2 | null_f3 | null_null | m1_f3 | m1_null | +|:------------------------------:|:-----:|:-----:|:---------:|:---------:|:-----:|:-------:| +| 1970-01-01T00:00:00.000000001Z | 1.0 | 2.0 | 3.0 | 4.0 | null | null | +| 1970-01-01T00:00:00.000000002Z | 5.0 | 6.0 | null | 8.0 | 7.0 | null | +| null | null | null | null | null | 9.0 | 15.0 | +| 1970-01-01T00:00:00.000000003Z | null | null | null | 13.0 | 12.0 | 11.0 | diff --git a/content/flux/v0.x/stdlib/built-in/transformations/range.md b/content/flux/v0.x/stdlib/built-in/transformations/range.md new file mode 100644 index 0000000000..4b41e9b3ea --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/range.md @@ -0,0 +1,74 @@ +--- +title: range() function +description: The range() function filters records based on time bounds. +aliases: + - /flux/v0.x/functions/transformations/range + - /flux/v0.x/functions/built-in/transformations/range/ +menu: + flux_0_x: + name: range + parent: Transformations + weight: 1 +--- + +The `range()` function filters records based on time bounds. +Each input table's records are filtered to contain only records that exist within the time bounds. +Records with a `null` value for their time are filtered. +Each input table's group key value is modified to fit within the time bounds. +Tables where all records exists outside the time bounds are filtered entirely. + +_**Function type:** Transformation_ +_**Output data type:* Object_ + +```js +range(start: -15m, stop: now) +``` + +## Parameters + +### start +The earliest time to include in results. +Use a relative duration or absolute time. +For example, `-1h` or `2019-08-28T22:00:00Z`. +Durations are relative to `now()`. + +_**Data type:** Duration | Time_ + +### stop +The latest time to include in results. +Use a relative duration or absolute time. +For example, `-1h` or `2019-08-28T22:00:00Z`. +Durations are relative to `now()`. +Defaults to `now()`. + +_**Data type:** Duration | Time_ + +> Time values in Flux must be in [RFC3339 format](/flux/v0.x/language/types#timestamp-format). + +## Examples + +###### Time range relative to now +```js +from(bucket:"telegraf/autogen") + |> range(start:-12h) + // ... +``` + +###### Relative time range +```js +from(bucket:"telegraf/autogen") + |> range(start:-12h, stop: -15m) + // ... +``` + +###### Absolute time range +```js +from(bucket:"telegraf/autogen") + |> range(start:2018-05-22T23:30:00Z, stop: 2018-05-23T00:00:00Z) + // ... +``` + +
+ +##### Related InfluxQL functions and statements: +[WHERE](/influxdb/latest/query_language/data_exploration/#the-where-clause) diff --git a/content/flux/v0.x/stdlib/built-in/transformations/rename.md b/content/flux/v0.x/stdlib/built-in/transformations/rename.md new file mode 100644 index 0000000000..204c8bb4fd --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/rename.md @@ -0,0 +1,65 @@ +--- +title: rename() function +description: The rename() function renames specified columns in a table. +aliases: + - /flux/v0.x/functions/transformations/rename + - /flux/v0.x/functions/built-in/transformations/rename/ +menu: + flux_0_x: + name: rename + parent: Transformations + weight: 1 +--- + +The `rename()` function renames specified columns in a table. +If a column is renamed and is part of the group key, the column name in the group key will be updated. + +There are two variants: + +- one which maps old column names to new column names +- one which takes a mapping function. + +_**Function type:** Transformation_ + +```js +rename(columns: {host: "server", facility: "datacenter"}) + +// OR + +rename(fn: (column) => "{column}_new") +``` + +## Parameters + +### columns +A map of columns to rename and their corresponding new names. +Cannot be used with `fn`. + +_**Data type:** Object_ + +### fn +A function mapping between old and new column names. +Cannot be used with `columns`. + +_**Data type:** Function_ + +{{% note %}} +Make sure `fn` parameter names match each specified parameter. +To learn why, see [Match parameter names](/flux/v0.x/language/data-model/#match-parameter-names). +{{% /note %}} + +## Examples + +##### Rename a single column +```js +from(bucket: "telegraf/autogen") + |> range(start: -5m) + |> rename(columns: {host: "server"}) +``` + +##### Rename all columns using a function +```js +from(bucket: "telegraf/autogen") + |> range(start: -5m) + |> rename(fn: (column) => column + "_new") +``` diff --git a/content/flux/v0.x/stdlib/built-in/transformations/selectors/_index.md b/content/flux/v0.x/stdlib/built-in/transformations/selectors/_index.md new file mode 100644 index 0000000000..bf4e89057e --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/selectors/_index.md @@ -0,0 +1,28 @@ +--- +title: Flux selector functions +description: Flux selector functions return one or more records based on function + logic. +aliases: + - /flux/v0.x/functions/transformations/selectors + - /flux/v0.x/functions/built-in/transformations/selectors/ +menu: + flux_0_x: + parent: Transformations + name: Selectors + weight: 1 +--- + +Flux selector functions return one or more records based on function logic. +The output table is different than the input table, but individual row values are not. + +The following selector functions are available: + +{{< function-list >}} + + +### Selectors and aggregates +The following functions can be used as both selectors or aggregates, but they are +categorized as aggregate functions in this documentation: + +- [median()](/flux/v0.x/stdlib/built-in/transformations/aggregates/median) +- [quantile()](/flux/v0.x/stdlib/built-in/transformations/aggregates/quantile) diff --git a/content/flux/v0.x/stdlib/built-in/transformations/selectors/bottom.md b/content/flux/v0.x/stdlib/built-in/transformations/selectors/bottom.md new file mode 100644 index 0000000000..e1ecf6017a --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/selectors/bottom.md @@ -0,0 +1,64 @@ +--- +title: bottom() function +description: The bottom() function sorts a table by columns and keeps only the bottom + n records. +aliases: + - /flux/v0.x/functions/transformations/selectors/bottom + - /flux/v0.x/functions/built-in/transformations/selectors/bottom/ +menu: + flux_0_x: + name: bottom + parent: Selectors + weight: 1 +--- + +The `bottom()` function sorts a table by columns and keeps only the bottom `n` records. + +_**Function type:** Selector_ +_**Output data type:** Object_ + +```js +bottom(n:10, columns: ["_value"]) +``` + +## Parameters + +### n +Number of records to return. + +_**Data type:** Integer_ + +### columns +List of columns by which to sort. +Sort precedence is determined by list order (left to right). +Default is `["_value"]`. + +_**Data type:** Array of strings_ + +## Examples +```js +from(bucket:"telegraf/autogen") + |> range(start:-1h) + |> filter(fn: (r) => + r._measurement == "mem" and + r._field == "used_percent" + ) + |> bottom(n:10) +``` + +## Function definition +```js +// _sortLimit is a helper function, which sorts and limits a table. +_sortLimit = (n, desc, columns=["_value"], tables=<-) => + tables + |> sort(columns:columns, desc:desc) + |> limit(n:n) + +bottom = (n, columns=["_value"], tables=<-) => + _sortLimit(n:n, columns:columns, desc:false) +``` + +
+ +##### Related InfluxQL functions and statements: +[BOTTOM()](/influxdb/latest/query_language/functions/#bottom) diff --git a/content/flux/v0.x/stdlib/built-in/transformations/selectors/distinct.md b/content/flux/v0.x/stdlib/built-in/transformations/selectors/distinct.md new file mode 100644 index 0000000000..e5b7ce6656 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/selectors/distinct.md @@ -0,0 +1,42 @@ +--- +title: distinct() function +description: The distinct() function returns the unique values for a given column. +aliases: + - /flux/v0.x/functions/transformations/selectors/distinct + - /flux/v0.x/functions/built-in/transformations/selectors/distinct/ +menu: + flux_0_x: + name: distinct + parent: Selectors + weight: 1 +--- + +The `distinct()` function returns the unique values for a given column. +`null` is considered its own distinct value if it is present. + +_**Function type:** Selector_ +_**Output data type:** Object_ + +```js +distinct(column: "host") +``` + +## Parameters + +### column +Column on which to track unique values. + +_**Data type:** string_ + +## Examples +```js +from(bucket: "telegraf/autogen") + |> range(start: -5m) + |> filter(fn: (r) => r._measurement == "cpu") + |> distinct(column: "host") +``` + +
+ +##### Related InfluxQL functions and statements: +[DISTINCT()](/influxdb/latest/query_language/functions/#distinct) diff --git a/content/flux/v0.x/stdlib/built-in/transformations/selectors/first.md b/content/flux/v0.x/stdlib/built-in/transformations/selectors/first.md new file mode 100644 index 0000000000..8f63f88cdb --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/selectors/first.md @@ -0,0 +1,38 @@ +--- +title: first() function +description: The first() function selects the first non-null record from an input + table. +aliases: + - /flux/v0.x/functions/transformations/selectors/first + - /flux/v0.x/functions/built-in/transformations/selectors/first/ +menu: + flux_0_x: + name: first + parent: Selectors + weight: 1 +--- + +The `first()` function selects the first non-null record from an input table. + +_**Function type:** Selector_ +_**Output data type:** Object_ + +```js +first() +``` + +## Examples +```js +from(bucket:"telegraf/autogen") + |> range(start:-1h) + |> filter(fn: (r) => + r._measurement == "cpu" and + r._field == "usage_system" + ) + |> first() +``` + +
+ +##### Related InfluxQL functions and statements: +[FIRST()](/influxdb/latest/query_language/functions/#first) diff --git a/content/flux/v0.x/stdlib/built-in/transformations/selectors/highestaverage.md b/content/flux/v0.x/stdlib/built-in/transformations/selectors/highestaverage.md new file mode 100644 index 0000000000..9081aed4ab --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/selectors/highestaverage.md @@ -0,0 +1,85 @@ +--- +title: highestAverage() function +description: The highestAverage() function returns the top 'n' records from all groups + using the average of each group. +aliases: + - /flux/v0.x/functions/transformations/selectors/highestaverage + - /flux/v0.x/functions/built-in/transformations/selectors/highestaverage/ +menu: + flux_0_x: + name: highestAverage + parent: Selectors + weight: 1 +--- + +The `highestAverage()` function returns the top `n` records from all groups using the average of each group. + +_**Function type:** Selector, Aggregate_ + +```js +highestAverage( + n:10, + column: "_value", + groupColumns: [] +) +``` + +## Parameters + +### n +Number of records to return. + +_**Data type:** Integer_ + +### column +Column by which to sort. +Default is `"_value"`. + +_**Data type:** String_ + +### groupColumns +The columns on which to group before performing the aggregation. +Default is `[]`. + +_**Data type:** Array of strings_ + +## Examples +```js +from(bucket:"telegraf/autogen") + |> range(start:-1h) + |> filter(fn: (r) => + r._measurement == "mem" and + r._field == "used_percent" + ) + |> highestAverage(n:10, groupColumns: ["host"]) +``` + +## Function definition +```js +// _sortLimit is a helper function, which sorts and limits a table. +_sortLimit = (n, desc, columns=["_value"], tables=<-) => + tables + |> sort(columns:columns, desc:desc) + |> limit(n:n) + +// _highestOrLowest is a helper function which reduces all groups into a single +// group by specific tags and a reducer function. It then selects the highest or +// lowest records based on the column and the _sortLimit function. +// The default reducer assumes no reducing needs to be performed. +_highestOrLowest = (n, _sortLimit, reducer, column="_value", groupColumns=[], tables=<-) => + tables + |> group(columns:groupColumns) + |> reducer() + |> group(columns:[]) + |> _sortLimit(n:n, columns:[column]) + +highestAverage = (n, column="_value", groupColumns=[], tables=<-) => + tables + |> _highestOrLowest( + n:n, + columns:columns, + groupColumns:groupColumns, + reducer: (tables=<-) => tables |> mean(column:column), + _sortLimit: top, + ) +``` diff --git a/content/flux/v0.x/stdlib/built-in/transformations/selectors/highestcurrent.md b/content/flux/v0.x/stdlib/built-in/transformations/selectors/highestcurrent.md new file mode 100644 index 0000000000..6394b95b91 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/selectors/highestcurrent.md @@ -0,0 +1,85 @@ +--- +title: highestCurrent() function +description: The highestCurrent() function returns the top 'n' records from all groups + using the last value of each group. +aliases: + - /flux/v0.x/functions/transformations/selectors/highestcurrent + - /flux/v0.x/functions/built-in/transformations/selectors/highestcurrent/ +menu: + flux_0_x: + name: highestCurrent + parent: Selectors + weight: 1 +--- + +The `highestCurrent()` function returns the top `n` records from all groups using the last value of each group. + +_**Function type:** Selector, Aggregate_ + +```js +highestCurrent( + n:10, + column: "_value", + groupColumns: [] +) +``` + +## Parameters + +### n +Number of records to return. + +_**Data type:** Integer_ + +### column +Column by which to sort. +Default is `"_value"`. + +_**Data type:** String_ + +### groupColumns +The columns on which to group before performing the aggregation. +Default is `[]`. + +_**Data type:** Array of strings_ + +## Examples +```js +from(bucket:"telegraf/autogen") + |> range(start:-1h) + |> filter(fn: (r) => + r._measurement == "mem" and + r._field == "used_percent" + ) + |> highestCurrent(n:10, groupColumns: ["host"]) +``` + +## Function definition +```js +// _sortLimit is a helper function, which sorts and limits a table. +_sortLimit = (n, desc, columns=["_value"], tables=<-) => + tables + |> sort(columns:columns, desc:desc) + |> limit(n:n) + +// _highestOrLowest is a helper function which reduces all groups into a single +// group by specific tags and a reducer function. It then selects the highest or +// lowest records based on the column and the _sortLimit function. +// The default reducer assumes no reducing needs to be performed. +_highestOrLowest = (n, _sortLimit, reducer, column="_value", groupColumns=[], tables=<-) => + tables + |> group(columns:groupColumns) + |> reducer() + |> group(columns:[]) + |> _sortLimit(n:n, columns:[column]) + +highestCurrent = (n, column="_value", groupColumns=[], tables=<-) => + tables + |> _highestOrLowest( + n:n, + column:column, + groupColumns:groupColumns, + reducer: (tables=<-) => tables |> last(column:column), + _sortLimit: top, + ) +``` diff --git a/content/flux/v0.x/stdlib/built-in/transformations/selectors/highestmax.md b/content/flux/v0.x/stdlib/built-in/transformations/selectors/highestmax.md new file mode 100644 index 0000000000..fa3dd40d19 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/selectors/highestmax.md @@ -0,0 +1,85 @@ +--- +title: highestMax() function +description: The highestMax() function returns the top 'n' records from all groups + using the maximum of each group. +aliases: + - /flux/v0.x/functions/transformations/selectors/highestmax + - /flux/v0.x/functions/built-in/transformations/selectors/highestmax/ +menu: + flux_0_x: + name: highestMax + parent: Selectors + weight: 1 +--- + +The `highestMax()` function returns the top `n` records from all groups using the maximum of each group. + +_**Function type:** Selector, Aggregate_ + +```js +highestMax( + n:10, + column: "_value", + groupColumns: [] +) +``` + +## Parameters + +### n +Number of records to return. + +_**Data type:** Integer_ + +### column +Column by which to sort. +Default is `"_value"`. + +_**Data type:** String_ + +### groupColumns +The columns on which to group before performing the aggregation. +Default is `[]`. + +_**Data type:** Array of strings_ + +## Examples +```js +from(bucket:"telegraf/autogen") + |> range(start:-1h) + |> filter(fn: (r) => + r._measurement == "mem" and + r._field == "used_percent" + ) + |> highestMax(n:10, groupColumns: ["host"]) +``` + +## Function definition +```js +// _sortLimit is a helper function, which sorts and limits a table. +_sortLimit = (n, desc, columns=["_value"], tables=<-) => + tables + |> sort(columns:columns, desc:desc) + |> limit(n:n) + +// _highestOrLowest is a helper function which reduces all groups into a single +// group by specific tags and a reducer function. It then selects the highest or +// lowest records based on the column and the _sortLimit function. +// The default reducer assumes no reducing needs to be performed. +_highestOrLowest = (n, _sortLimit, reducer, column="_value", groupColumns=[], tables=<-) => + tables + |> group(columns:groupColumns) + |> reducer() + |> group(columns:[]) + |> _sortLimit(n:n, columns:[column]) + +highestMax = (n, column="_value", groupColumns=[], tables=<-) => + tables + |> _highestOrLowest( + n:n, + column:column, + groupColumns:groupColumns, + reducer: (tables=<-) => tables |> max(column:column), + _sortLimit: top + ) +``` diff --git a/content/flux/v0.x/stdlib/built-in/transformations/selectors/last.md b/content/flux/v0.x/stdlib/built-in/transformations/selectors/last.md new file mode 100644 index 0000000000..29252dd119 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/selectors/last.md @@ -0,0 +1,37 @@ +--- +title: last() function +description: The last() function selects the last non-null record from an input table. +aliases: + - /flux/v0.x/functions/transformations/selectors/last + - /flux/v0.x/functions/built-in/transformations/selectors/last/ +menu: + flux_0_x: + name: last + parent: Selectors + weight: 1 +--- + +The `last()` function selects the last non-null record from an input table. + +_**Function type:** Selector_ +_**Output data type:** Object_ + +```js +last() +``` + +## Examples +```js +from(bucket:"telegraf/autogen") + |> range(start:-1h) + |> filter(fn: (r) => + r._measurement == "cpu" and + r._field == "usage_system" + ) + |> last() +``` + +
+ +##### Related InfluxQL functions and statements: +[LAST()](/influxdb/latest/query_language/functions/#last) diff --git a/content/flux/v0.x/stdlib/built-in/transformations/selectors/lowestaverage.md b/content/flux/v0.x/stdlib/built-in/transformations/selectors/lowestaverage.md new file mode 100644 index 0000000000..683ecbeb05 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/selectors/lowestaverage.md @@ -0,0 +1,86 @@ +--- +title: lowestAverage() function +description: The lowestAverage() function returns the bottom 'n' records from all + groups using the average of each group. +aliases: + - /flux/v0.x/functions/transformations/selectors/lowestaverage + - /flux/v0.x/functions/built-in/transformations/selectors/lowestaverage/ +menu: + flux_0_x: + name: lowestAverage + parent: Selectors + weight: 1 +--- + +The `lowestAverage()` function returns the bottom `n` records from all groups using the average of each group. + +_**Function type:** Selector, Aggregate_ + +```js +lowestAverage( + n:10, + column: "_value", + groupColumns: [] +) +``` + +## Parameters + +### n +Number of records to return. + +_**Data type:** Integer_ + +### column +Column by which to sort. +Default is `"_value"`. + +_**Data type:** String_ + +### groupColumns +The columns on which to group before performing the aggregation. +Default is `[]`. + +_**Data type:** Array of strings_ + +## Examples +```js +from(bucket:"telegraf/autogen") + |> range(start:-1h) + |> filter(fn: (r) => + r._measurement == "mem" and + r._field == "used_percent" + ) + |> lowestAverage(n:10, groupColumns: ["host"]) +``` + +## Function definition +```js +// _sortLimit is a helper function, which sorts and limits a table. +_sortLimit = (n, desc, columns=["_value"], tables=<-) => + tables + |> sort(columns:columns, desc:desc) + |> limit(n:n) + +// _highestOrLowest is a helper function which reduces all groups into a single +// group by specific tags and a reducer function. It then selects the highest or +// lowest records based on the column and the _sortLimit function. +// The default reducer assumes no reducing needs to be performed. +_highestOrLowest = (n, _sortLimit, reducer, column="_value", groupColumns=[], tables=<-) => + tables + |> group(columns:groupColumns) + |> reducer() + |> group(columns:[]) + |> _sortLimit(n:n, columns:[column]) + +lowestAverage = (n, column="_value", groupColumns=[], tables=<-) => + tables + |> _highestOrLowest( + n:n, + column:column, + groupColumns:groupColumns, + reducer: (tables=<-) => tables |> mean(column:column]), + _sortLimit: bottom, + ) + +``` diff --git a/content/flux/v0.x/stdlib/built-in/transformations/selectors/lowestcurrent.md b/content/flux/v0.x/stdlib/built-in/transformations/selectors/lowestcurrent.md new file mode 100644 index 0000000000..7958196908 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/selectors/lowestcurrent.md @@ -0,0 +1,85 @@ +--- +title: lowestCurrent() function +description: The lowestCurrent() function returns the bottom 'n' records from all + groups using the last value of each group. +aliases: + - /flux/v0.x/functions/transformations/selectors/lowestcurrent + - /flux/v0.x/functions/built-in/transformations/selectors/lowestcurrent/ +menu: + flux_0_x: + name: lowestCurrent + parent: Selectors + weight: 1 +--- + +The `lowestCurrent()` function returns the bottom `n` records from all groups using the last value of each group. + +_**Function type:** Selector, Aggregate_ + +```js +lowestCurrent( + n:10, + column: "_value", + groupColumns: [] +) +``` + +## Parameters + +### n +Number of records to return. + +_**Data type:** Integer_ + +### column +Column by which to sort. +Default is `"_value"`. + +_**Data type:** String_ + +### groupColumns +The columns on which to group before performing the aggregation. +Default is `[]`. + +_**Data type:** Array of strings_ + +## Examples +```js +from(bucket:"telegraf/autogen") + |> range(start:-1h) + |> filter(fn: (r) => + r._measurement == "mem" and + r._field == "used_percent" + ) + |> lowestCurrent(n:10, groupColumns: ["host"]) +``` + +## Function definition +```js +// _sortLimit is a helper function, which sorts and limits a table. +_sortLimit = (n, desc, columns=["_value"], tables=<-) => + tables + |> sort(columns:columns, desc:desc) + |> limit(n:n) + +// _highestOrLowest is a helper function which reduces all groups into a single +// group by specific tags and a reducer function. It then selects the highest or +// lowest records based on the column and the _sortLimit function. +// The default reducer assumes no reducing needs to be performed. +_highestOrLowest = (n, _sortLimit, reducer, column="_value", groupColumns=[], tables=<-) => + tables + |> group(columns:groupColumns) + |> reducer() + |> group(columns:[]) + |> _sortLimit(n:n, columns:[column]) + +lowestCurrent = (n, column="_value", groupColumns=[], tables=<-) => + tables + |> _highestOrLowest( + n:n, + column:column, + groupColumns:groupColumns, + reducer: (tables=<-) => tables |> last(column:column), + _sortLimit: bottom, + ) +``` diff --git a/content/flux/v0.x/stdlib/built-in/transformations/selectors/lowestmin.md b/content/flux/v0.x/stdlib/built-in/transformations/selectors/lowestmin.md new file mode 100644 index 0000000000..8f39d16342 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/selectors/lowestmin.md @@ -0,0 +1,85 @@ +--- +title: lowestMin() function +description: The lowestMin() function returns the bottom 'n' records from all groups + using the minimum of each group. +aliases: + - /flux/v0.x/functions/transformations/selectors/lowestmin + - /flux/v0.x/functions/built-in/transformations/selectors/lowestmin/ +menu: + flux_0_x: + name: lowestMin + parent: Selectors + weight: 1 +--- + +The `lowestMin()` function returns the bottom `n` records from all groups using the minimum of each group. + +_**Function type:** Selector, Aggregate_ + +```js +lowestMin( + n:10, + column: "_value", + groupColumns: [] +) +``` + +## Parameters + +### n +Number of records to return. + +_**Data type:** Integer_ + +### column +Column by which to sort. +Default is `"_value"`. + +_**Data type:** String_ + +### groupColumns +The columns on which to group before performing the aggregation. +Default is `[]`. + +_**Data type:** Array of strings_ + +## Examples +```js +from(bucket:"telegraf/autogen") + |> range(start:-1h) + |> filter(fn: (r) => + r._measurement == "mem" and + r._field == "used_percent" + ) + |> lowestMin(n:10, groupColumns: ["host"]) +``` + +## Function definition +```js +// _sortLimit is a helper function, which sorts and limits a table. +_sortLimit = (n, desc, columns=["_value"], tables=<-) => + tables + |> sort(columns:columns, desc:desc) + |> limit(n:n) + +// _highestOrLowest is a helper function which reduces all groups into a single +// group by specific tags and a reducer function. It then selects the highest or +// lowest records based on the column and the _sortLimit function. +// The default reducer assumes no reducing needs to be performed. +_highestOrLowest = (n, _sortLimit, reducer, column="_value", groupColumns=[], tables=<-) => + tables + |> group(columns:groupColumns) + |> reducer() + |> group(columns:[]) + |> _sortLimit(n:n, columns:[column]) + +lowestMin = (n, column="_value", groupColumns=[], tables=<-) => + tables + |> _highestOrLowest( + n:n, + column:column, + groupColumns:groupColumns, + reducer: (tables=<-) => tables |> min(column:column), + _sortLimit: bottom, + ) +``` diff --git a/content/flux/v0.x/stdlib/built-in/transformations/selectors/max.md b/content/flux/v0.x/stdlib/built-in/transformations/selectors/max.md new file mode 100644 index 0000000000..1915317ea6 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/selectors/max.md @@ -0,0 +1,46 @@ +--- +title: max() function +description: The max() function selects record with the highest _value from the input + table. +aliases: + - /flux/v0.x/functions/transformations/selectors/max + - /flux/v0.x/functions/built-in/transformations/selectors/max/ +menu: + flux_0_x: + name: max + parent: Selectors + weight: 1 +--- + +The `max()` function selects record with the highest `_value` from the input table. + +_**Function type:** Selector_ +_**Output data type:** Object_ + +```js +max(column: "_value") +``` + +## Parameters + +### column +The column to use to calculate the maximum value. +Default is `"_value"`. + +_**Data type:** String_ + +## Examples +```js +from(bucket:"telegraf/autogen") + |> range(start:-1h) + |> filter(fn: (r) => + r._measurement == "cpu" and + r._field == "usage_system" + ) + |> max() +``` + +
+ +##### Related InfluxQL functions and statements: +[MAX()](/influxdb/latest/query_language/functions/#max) diff --git a/content/flux/v0.x/stdlib/built-in/transformations/selectors/min.md b/content/flux/v0.x/stdlib/built-in/transformations/selectors/min.md new file mode 100644 index 0000000000..0401c4349a --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/selectors/min.md @@ -0,0 +1,46 @@ +--- +title: min() function +description: The min() function selects record with the lowest _value from the input + table. +aliases: + - /flux/v0.x/functions/transformations/selectors/min + - /flux/v0.x/functions/built-in/transformations/selectors/min/ +menu: + flux_0_x: + name: min + parent: Selectors + weight: 1 +--- + +The `min()` function selects record with the lowest `_value` from the input table. + +_**Function type:** Selector_ +_**Output data type:** Object_ + +```js +min(column: "_value") +``` + +## Parameters + +### column +The column to use to calculate the minimum value. +Default is `"_value"`. + +_**Data type:** String_ + +## Examples +```js +from(bucket:"telegraf/autogen") + |> range(start:-1h) + |> filter(fn: (r) => + r._measurement == "cpu" and + r._field == "usage_system" + ) + |> min() +``` + +
+ +##### Related InfluxQL functions and statements: +[MIN()](/influxdb/latest/query_language/functions/#min) diff --git a/content/flux/v0.x/stdlib/built-in/transformations/selectors/sample.md b/content/flux/v0.x/stdlib/built-in/transformations/selectors/sample.md new file mode 100644 index 0000000000..7c05c43392 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/selectors/sample.md @@ -0,0 +1,53 @@ +--- +title: sample() function +description: The sample() function selects a subset of the records from the input + table. +aliases: + - /flux/v0.x/functions/transformations/selectors/sample + - /flux/v0.x/functions/built-in/transformations/selectors/sample/ +menu: + flux_0_x: + name: sample + parent: Selectors + weight: 1 +--- + +The `sample()` function selects a subset of the records from the input table. + +_**Function type:** Selector_ +_**Output data type:** Object_ + +```js +sample(n:5, pos: -1) +``` + +## Parameters + +### n +Sample every Nth element. + +_**Data type:** Integer_ + +### pos +The position offset from the start of results where sampling begins. +`pos` must be less than `n`. +If `pos` is less than 0, a random offset is used. +Defaults to `-1` (random offset). + +_**Data type:** Integer_ + +## Examples +```js +from(bucket:"telegraf/autogen") + |> range(start:-1d) + |> filter(fn: (r) => + r._measurement == "cpu" and + r._field == "usage_system" + ) + |> sample(n: 5, pos: 1) +``` + +
+ +##### Related InfluxQL functions and statements: +[SAMPLE()](/influxdb/latest/query_language/functions/#sample) diff --git a/content/flux/v0.x/stdlib/built-in/transformations/selectors/top.md b/content/flux/v0.x/stdlib/built-in/transformations/selectors/top.md new file mode 100644 index 0000000000..b344635134 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/selectors/top.md @@ -0,0 +1,58 @@ +--- +title: top() function +description: The top() function sorts a table by columns and keeps only the top n + records. +aliases: + - /flux/v0.x/functions/transformations/selectors/top + - /flux/v0.x/functions/built-in/transformations/selectors/top/ +menu: + flux_0_x: + name: top + parent: Selectors + weight: 1 +--- + +The `top()` function sorts a table by columns and keeps only the top `n` records. + +_**Function type:** Selector_ +_**Output data type:** Object_ + +```js +top(n:10, columns: ["_value"]) +``` + +## Parameters + +### n +Number of records to return. + +_**Data type:** Integer_ + +### columns +List of columns by which to sort. +Sort precedence is determined by list order (left to right). +Default is `["_value"]`. + +_**Data type:** Array of strings_ + +## Examples +```js +from(bucket:"telegraf/autogen") + |> range(start:-1h) + |> filter(fn: (r) => + r._measurement == "mem" and + r._field == "used_percent" + ) + |> top(n:10) +``` + +## Function definition +```js +// _sortLimit is a helper function, which sorts and limits a table. +_sortLimit = (n, desc, columns=["_value"], tables=<-) => + tables + |> sort(columns:columns, desc:desc) + |> limit(n:n) + +top = (n, columns=["_value"], tables=<-) => _sortLimit(n:n, columns:columns, desc:true) +``` diff --git a/content/flux/v0.x/stdlib/built-in/transformations/selectors/unique.md b/content/flux/v0.x/stdlib/built-in/transformations/selectors/unique.md new file mode 100644 index 0000000000..83e00efe4a --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/selectors/unique.md @@ -0,0 +1,38 @@ +--- +title: unique() function +description: The unique() function returns all records containing unique values in + a specified column. +aliases: + - /flux/v0.x/functions/transformations/selectors/unique + - /flux/v0.x/functions/built-in/transformations/selectors/unique/ +menu: + flux_0_x: + name: unique + parent: Selectors + weight: 1 +--- + +The `unique()` function returns all records containing unique values in a specified column. + +_**Function type:** Selector_ +_**Output data type:** Object_ + +```js +unique(column: "_value") +``` + +## Parameters + +### column +The column searched for unique values. +Defaults to `"_value"`. + +_**Data type:** String_ + +## Examples +```js +from("telegraf/autogen") + |> range(start: -15m) + |> filter(fn: (r) => r._measurement == "syslog") + |> unique(column: "message") +``` diff --git a/content/flux/v0.x/stdlib/built-in/transformations/set.md b/content/flux/v0.x/stdlib/built-in/transformations/set.md new file mode 100644 index 0000000000..d156f85828 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/set.md @@ -0,0 +1,42 @@ +--- +title: set() function +description: The set() function assigns a static value to each record in the input + table. +aliases: + - /flux/v0.x/functions/transformations/set + - /flux/v0.x/functions/built-in/transformations/set/ +menu: + flux_0_x: + name: set + parent: Transformations + weight: 1 +--- + +The `set()` function assigns a static value to each record in the input table. +The key may modify an existing column or add a new column to the tables. +If the modified column is part of the group key, the output tables are regrouped as needed. + +_**Function type:** Transformation_ +_**Output data type:** Object_ + +```js +set(key: "myKey",value: "myValue") +``` + +## Parameters + +### key +The label of the column to modify or set. + +_**Data type:** String_ + +### value +The string value to set. + +_**Data type:** String_ + +## Examples +```js +from(bucket: "telegraf/autogen") + |> set(key: "host", value: "prod-node-1") +``` diff --git a/content/flux/v0.x/stdlib/built-in/transformations/sort.md b/content/flux/v0.x/stdlib/built-in/transformations/sort.md new file mode 100644 index 0000000000..89adb47e7d --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/sort.md @@ -0,0 +1,54 @@ +--- +title: sort() function +description: The sort() function orders the records within each table. +aliases: + - /flux/v0.x/functions/transformations/sort + - /flux/v0.x/functions/built-in/transformations/sort/ +menu: + flux_0_x: + name: sort + parent: Transformations + weight: 1 +--- + +The `sort()` function orders the records within each table. +One output table is produced for each input table. +The output tables will have the same schema as their corresponding input tables. + +_**Function type:** Transformation_ +_**Output data type:** Object_ + +#### Sorting with null values +When sorting, `null` values will always be first. +When `desc: false`, nulls are less than every other value. +When `desc: true`, nulls are greater than every value. + +```js +sort(columns: ["_value"], desc: false) +``` + +## Parameters + +### columns +List of columns by which to sort. +Sort precedence is determined by list order (left to right). +Default is `["_value"]`. + +_**Data type:** Array of strings_ + +### desc +Sort results in descending order. +Default is `false`. + +_**Data type:** Boolean_ + +## Examples +```js +from(bucket:"telegraf/autogen") + |> range(start:-12h) + |> filter(fn: (r) => + r._measurement == "system" and + r._field == "uptime" + ) + |> sort(columns:["region", "host", "_value"]) +``` diff --git a/content/flux/v0.x/stdlib/built-in/transformations/statecount.md b/content/flux/v0.x/stdlib/built-in/transformations/statecount.md new file mode 100644 index 0000000000..28ae1352ca --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/statecount.md @@ -0,0 +1,60 @@ +--- +title: stateCount() function +description: The stateCount() function computes the number of consecutive records + in a given state. +aliases: + - /flux/v0.x/functions/transformations/statecount + - /flux/v0.x/functions/built-in/transformations/statecount/ +menu: + flux_0_x: + name: stateCount + parent: Transformations + weight: 1 +--- + +The `stateCount()` function computes the number of consecutive records in a given state. +The state is defined via the function `fn`. +For each consecutive point that evaluates as `true`, the state count will be incremented. +When a point evaluates as `false`, the state count is reset. +The state count is added as an additional column to each record. + +_**Function type:** Transformation_ +_**Output data type:** Integer_ + +```js +stateCount(fn: (r) => r._field == "state", column: "stateCount") +``` + +_If the expression generates an error during evaluation, the point is discarded +and does not affect the state count._ + +## Parameters + +### fn +A single argument function that evaluates true or false to identify the state of the record. +Records are passed to the function. +Those that evaluate to `true` increment the state count. +Those that evaluate to `false` reset the state count. + +_**Data type:** Function_ + +{{% note %}} +Make sure `fn` parameter names match each specified parameter. +To learn why, see [Match parameter names](/flux/v0.x/language/data-model/#match-parameter-names). +{{% /note %}} + +### column +The name of the column added to each record that contains the incremented state count. + +_**Data type:** String_ + +## Examples +```js +from("monitor/autogen") + |> range(start: -1h) + |> filter(fn: (r) => r._measurement == "http") + |> stateCount( + fn: (r) => r.http_response_code == "500", + column: "server_error_count" + ) +``` diff --git a/content/flux/v0.x/stdlib/built-in/transformations/stateduration.md b/content/flux/v0.x/stdlib/built-in/transformations/stateduration.md new file mode 100644 index 0000000000..f24d4badac --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/stateduration.md @@ -0,0 +1,74 @@ +--- +title: stateDuration() function +description: The stateDuration() function computes the duration of a given state. +aliases: + - /flux/v0.x/functions/transformations/stateduration + - /flux/v0.x/functions/built-in/transformations/stateduration/ +menu: + flux_0_x: + name: stateDuration + parent: Transformations + weight: 1 +--- + +The `stateDuration()` function computes the duration of a given state. +The state is defined via the function `fn`. +For each consecutive point for that evaluates as `true`, the state duration will be +incremented by the duration between points. +When a point evaluates as `false`, the state duration is reset. +The state duration is added as an additional column to each record. + +_**Function type:** Transformation_ +_**Output data type:** Duration_ + +> As the first point in the given state has no previous point, its +> state duration will be 0. + +```js +stateDuration( + fn: (r) => r._field == "state" and r._value == "down", + column: "stateDuration", + unit: 1s +) +``` + +_If the expression generates an error during evaluation, the point is discarded, +and does not affect the state duration._ + +## Parameters + +### fn +A single argument function that evaluates true or false to identify the state of the record. +Records are passed to the function. +Those that evaluate to `true` increment the state duration. +Those that evaluate to `false` reset the state duration. + +_**Data type:** Function_ + +{{% note %}} +Make sure `fn` parameter names match each specified parameter. +To learn why, see [Match parameter names](/flux/v0.x/language/data-model/#match-parameter-names). +{{% /note %}} + +### column +The name of the column added to each record that contains the state duration. + +_**Data type:** String_ + +### unit +The unit of time in which the state duration is incremented. +For example: `1s`, `1m`, `1h`, etc. +Default is `1s`. + +_**Data type:** Duration_ + +## Examples +```js +from("monitor/autogen") + |> range(start: -1h) + |> filter(fn: (r) => r._measurement == "http") + |> stateDuration( + fn: (r) => r.http_response_code == "500", + column: "server_error_duration" + ) +``` diff --git a/content/flux/v0.x/stdlib/built-in/transformations/stream-table/_index.md b/content/flux/v0.x/stdlib/built-in/transformations/stream-table/_index.md new file mode 100644 index 0000000000..da161f83ab --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/stream-table/_index.md @@ -0,0 +1,34 @@ +--- +title: Flux stream and table functions +description: > + Use stream and table functions to extract a table from a stream of tables + and access its columns and records. +weight: 1 +menu: + flux_0_x: + name: Stream & table + parent: Transformations +aliases: + - /flux/v0.x/functions/built-in/transformations/stream-table/ +--- + +Use stream and table functions to extract a table from a stream of tables and access its +columns and records. + +{{< function-list >}} + +##### Example stream and table functions +```js +data = from(bucket:"telegraf/autogen") + |> range(start: -5m) + |> filter(fn:(r) => r._measurement == "cpu") + +// Extract the first available table for which "_field" is equal to "usage_idle" +t = data |> tableFind(fn: (key) => key._field == "usage_idle") + +// Extract the "_value" column from the table +values = t |> getColumn(column: "_value") + +// Extract the first record from the table +r0 = t |> getRecord(idx: 0) +``` diff --git a/content/flux/v0.x/stdlib/built-in/transformations/stream-table/getcolumn.md b/content/flux/v0.x/stdlib/built-in/transformations/stream-table/getcolumn.md new file mode 100644 index 0000000000..04a86a6acb --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/stream-table/getcolumn.md @@ -0,0 +1,41 @@ +--- +title: getColumn() function +description: > + The `getColumn()` function extracts a column from a table given its + label. If the label is not present in the set of columns, the function errors. +menu: + flux_0_x: + name: getColumn + parent: Stream & table +weight: 1 +aliases: + - /flux/v0.x/functions/built-in/transformations/stream-table/getcolumn/ +--- + +The `getColumn()` function extracts a column from a table given its label. +If the label is not present in the set of columns, the function errors. + +_**Function type:** Stream and table_ + +```js +getColumn(column: "_value") +``` + +## Parameters + +### column +The name of the column to extract. + +_**Data type:** String_ + +## Example +```js +vs = from(bucket:"telegraf/autogen") + |> range(start: -5m) + |> filter(fn:(r) => r._measurement == "cpu") + |> tableFind(fn: (key) => key._field == "usage_idle") + |> getColumn(column: "_value") + +// Use column values +x = vs[0] + vs[1] +``` diff --git a/content/flux/v0.x/stdlib/built-in/transformations/stream-table/getrecord.md b/content/flux/v0.x/stdlib/built-in/transformations/stream-table/getrecord.md new file mode 100644 index 0000000000..8384722ab2 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/stream-table/getrecord.md @@ -0,0 +1,41 @@ +--- +title: getRecord() function +description: > + The `getRecord()` function extracts a record from a table given its + index. If the index is out of bounds, the function errors. +menu: + flux_0_x: + name: getRecord + parent: Stream & table +weight: 1 +aliases: + - /flux/v0.x/functions/built-in/transformations/stream-table/getrecord/ +--- + +The `getRecord()` function extracts a record from a table given the record's index. +If the index is out of bounds, the function errors. + +_**Function type:** Stream and table_ + +```js +getRecord(idx: 0) +``` + +## Parameters + +### idx +The index of the record to extract. + +_**Data type:** Integer_ + +## Example +```js +r0 = from(bucket:"telegraf/autogen") + |> range(start: -5m) + |> filter(fn:(r) => r._measurement == "cpu") + |> tableFind(fn: (key) => key._field == "usage_idle") + |> getRecord(idx: 0) + +// Use record values +x = r0._field + "--" + r0._measurement +``` diff --git a/content/flux/v0.x/stdlib/built-in/transformations/stream-table/tablefind.md b/content/flux/v0.x/stdlib/built-in/transformations/stream-table/tablefind.md new file mode 100644 index 0000000000..d0e4f7de43 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/stream-table/tablefind.md @@ -0,0 +1,57 @@ +--- +title: tableFind() function +description: > + The `tableFind()` function extracts the first table in a stream of tables + whose group key values match a predicate. If no table is found, the function errors. +menu: + flux_0_x: + name: tableFind + parent: Stream & table +weight: 1 +aliases: + - /flux/v0.x/functions/built-in/transformations/stream-table/tablefind/ +--- + +The `tableFind()` function extracts the first table in a stream of tables whose +group key values match a predicate. If no table is found, the function errors. + +_**Function type:** Stream and table_ + +```js +tableFind(column: "_value") +``` + +## Parameters + +### fn +A predicate function for matching keys in a table's group key. +`tableFind` returns the first table that resolves as `true`. +It expects a `key` argument which represents a group key in the input stream. + +_**Data type:** Function_ + +{{% note %}} +Make sure `fn` parameter names match each specified parameter. +To learn why, see [Match parameter names](/flux/v0.x/language/data-model/#match-parameter-names). +{{% /note %}} + +##### Example fn function +```js +(key) => key._field == "fieldName" +``` + +## Example +```js +t = from(bucket:"telegraf/autogen") + |> range(start: -5m) + |> filter(fn:(r) => r._measurement == "cpu") + |> tableFind(fn: (key) => key._field == "usage_idle") + +// t represents the first table in a stream whose group key +// contains "_field" with a value of "usage_idle". +``` + +{{% note %}} +You can use `t` from the example above as input for [`getColumn()`](/flux/v0.x/stdlib/built-in/transformations/stream-table/getcolumn/) +and [`getRecord()`](/flux/v0.x/stdlib/built-in/transformations/stream-table/getrecord/). +{{% /note %}} diff --git a/content/flux/v0.x/stdlib/built-in/transformations/tail.md b/content/flux/v0.x/stdlib/built-in/transformations/tail.md new file mode 100644 index 0000000000..eee6eebe41 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/tail.md @@ -0,0 +1,47 @@ +--- +title: tail() function +description: The `tail()` function limits each output table to the last `n` records. +menu: + flux_0_x: + name: tail + parent: Transformations + weight: 1 +aliases: + - /flux/v0.x/functions/built-in/transformations/tail/ +--- + +The `tail()` function limits each output table to the last [`n`](#n) records. +The function produces one output table for each input table. +Each output table contains the last `n` records before the [`offset`](#offset). +If the input table has less than `offset + n` records, `tail()` outputs all records before the `offset`. + +_**Function type:** Filter_ + +```js +tail( + n:10, + offset: 0 +) +``` + +## Parameters + +### n +The maximum number of records to output. + +_**Data type:** Integer_ + +### offset +The number of records to skip at the end of a table table before limiting to `n`. +Defaults to `0`. + +_**Data type:** Integer_ + +## Examples + +##### Output the last ten records in each table +```js +from(bucket:"telegraf/autogen") + |> range(start:-1h) + |> tail(n:10) +``` diff --git a/content/flux/v0.x/stdlib/built-in/transformations/timeshift.md b/content/flux/v0.x/stdlib/built-in/transformations/timeshift.md new file mode 100644 index 0000000000..060b645484 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/timeshift.md @@ -0,0 +1,53 @@ +--- +title: timeShift() function +description: The timeShift() function adds a fixed duration to time columns. +aliases: + - /flux/v0.x/functions/transformations/shift + - /flux/v0.x/functions/built-in/transformations/shift + - /flux/v0.x/functions/built-in/transformations/timeshift/ +menu: + flux_0_x: + name: shift + parent: Transformations + weight: 1 +--- + +The `timeShift()` function adds a fixed duration to time columns. +The output table schema is the same as the input table. +If the time is `null`, the time will continue to be `null`. + +_**Function type:** Transformation_ + +```js +timeShift(duration: 10h, columns: ["_start", "_stop", "_time"]) +``` + +## Parameters + +### duration +The amount of time to add to each time value. +May be a negative duration. + +_**Data type:** Duration_ + +### columns +The list of all columns to be shifted. +Defaults to `["_start", "_stop", "_time"]`. + +_**Data type:** Array of strings_ + +## Examples + +###### Shift forward in time +```js +from(bucket: "telegraf/autogen") + |> range(start: -5m) + |> timeShift(duration: 12h) +``` + +###### Shift backward in time +```js +from(bucket: "telegraf/autogen") + |> range(start: -5m) + |> timeShift(duration: -12h) +``` diff --git a/content/flux/v0.x/stdlib/built-in/transformations/truncatetimecolumn.md b/content/flux/v0.x/stdlib/built-in/transformations/truncatetimecolumn.md new file mode 100644 index 0000000000..41cbcaed79 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/truncatetimecolumn.md @@ -0,0 +1,54 @@ +--- +title: truncateTimeColumn() function +description: > + The `truncateTimeColumn()` function truncates all input table `_time` + values to a specified unit. +menu: + flux_0_x: + name: truncateTimeColumn + parent: Transformations + weight: 1 +aliases: + - /flux/v0.x/functions/built-in/transformations/truncatetimecolumn/ +--- + +The `truncateTimeColumn()` function truncates all input table `_time` values to a specified unit. + +_**Function type:** Transformation_ + +```js +truncateTimeColumn(unit: 1s) +``` + +## Parameters + +### unit +The unit of time to truncate to. + +_**Data type:** Duration_ + +{{% note %}} +Only use `1` and the unit of time to specify the `unit`. +For example: `1s`, `1m`, `1h`. +{{% /note %}} + +## Examples + +##### Truncate all time values to seconds +```js +from(bucket:"telegraf/autogen") + |> range(start:-1h) + |> truncateTimeColumn(unit: 1s) +``` + +## Function definition +```js +import "date" + +truncateTimeColumn = (unit, tables=<-) => + tables + |> map(fn: (r) => ({ + r with _time: date.truncate(t: r._time, unit:unit) + }) + ) +``` diff --git a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/_index.md b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/_index.md new file mode 100644 index 0000000000..dfac514206 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/_index.md @@ -0,0 +1,19 @@ +--- +title: Flux type conversion functions +description: Flux type conversion functions convert columns of the input table into + a specific data type. +aliases: + - /flux/v0.x/functions/transformations/type-conversions + - /flux/v0.x/functions/built-in/transformations/type-conversions/ +menu: + flux_0_x: + parent: Transformations + name: Type conversions + identifier: built-in-type-conversions + weight: 1 +--- + +Flux type conversion functions convert columns of the input table into a specific data type. +The following type conversion functions are available: + +{{< function-list >}} diff --git a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/bool.md b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/bool.md new file mode 100644 index 0000000000..826ac231b2 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/bool.md @@ -0,0 +1,33 @@ +--- +title: bool() function +description: The `bool()` function converts a single value to a boolean. +menu: + flux_0_x: + name: bool + parent: built-in-type-conversions +weight: 2 +aliases: + - /flux/v0.x/functions/built-in/transformations/type-conversions/bool/ +--- + +The `bool()` function converts a single value to a boolean. + +_**Function type:** Type conversion_ +_**Output data type:** Boolean_ + +```js +bool(v: "true") +``` + +## Parameters + +### v +The value to convert. + +## Examples +```js +from(bucket: "sensor-data") + |> range(start: -1m) + |> filter(fn:(r) => r._measurement == "system" ) + |> map(fn:(r) => ({ r with responsive: bool(v: r.responsive) })) +``` diff --git a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/bytes.md b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/bytes.md new file mode 100644 index 0000000000..45334309b0 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/bytes.md @@ -0,0 +1,32 @@ +--- +title: bytes() function +description: The `bytes()` function converts a single value to bytes. +menu: + flux_0_x: + name: bytes + parent: built-in-type-conversions + weight: 2 +aliases: + - /flux/v0.x/functions/built-in/transformations/type-conversions/bytes/ +--- + +The `bytes()` function converts a single value to bytes. + +_**Function type:** Type conversion_ +_**Output data type:** Bytes_ + +```js +bytes(v: "1m") +``` + +## Parameters + +### v +The value to convert. + +## Examples +```js +from(bucket: "sensor-data") + |> range(start: -1m) + |> map(fn:(r) => ({ r with _value: bytes(v: r._value) })) +``` diff --git a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/duration.md b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/duration.md new file mode 100644 index 0000000000..11de095a6a --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/duration.md @@ -0,0 +1,33 @@ +--- +title: duration() function +description: The `duration()` function converts a single value to a duration. +menu: + flux_0_x: + name: duration + parent: built-in-type-conversions +weight: 2 +aliases: + - /flux/v0.x/functions/built-in/transformations/type-conversions/duration/ +--- + +The `duration()` function converts a single value to a duration. + +_**Function type:** Type conversion_ +_**Output data type:** Duration_ + +```js +duration(v: "1m") +``` + +## Parameters + +### v +The value to convert. + +## Examples +```js +from(bucket: "sensor-data") + |> range(start: -1m) + |> filter(fn:(r) => r._measurement == "system" ) + |> map(fn:(r) => ({ r with uptime: duration(v: r.uptime) })) +``` diff --git a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/float.md b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/float.md new file mode 100644 index 0000000000..68aea2c72f --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/float.md @@ -0,0 +1,33 @@ +--- +title: float() function +description: The `float()` function converts a single value to a float. +menu: + flux_0_x: + name: float + parent: built-in-type-conversions +weight: 2 +aliases: + - /flux/v0.x/functions/built-in/transformations/type-conversions/float/ +--- + +The `float()` function converts a single value to a float. + +_**Function type:** Type conversion_ +_**Output data type:** Float_ + +```js +float(v: "3.14") +``` + +## Parameters + +### v +The value to convert. + +## Examples +```js +from(bucket: "sensor-data") + |> range(start: -1m) + |> filter(fn:(r) => r._measurement == "camera" ) + |> map(fn:(r) => ({ r with aperature: float(v: r.aperature) })) +``` diff --git a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/int.md b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/int.md new file mode 100644 index 0000000000..76224942d1 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/int.md @@ -0,0 +1,33 @@ +--- +title: int() function +description: The `int()` function converts a single value to an integer. +menu: + flux_0_x: + name: int + parent: built-in-type-conversions +weight: 2 +aliases: + - /flux/v0.x/functions/built-in/transformations/type-conversions/int/ +--- + +The `int()` function converts a single value to an integer. + +_**Function type:** Type conversion_ +_**Output data type:** Integer_ + +```js +int(v: "4") +``` + +## Parameters + +### v +The value to convert. + +## Examples +```js +from(bucket: "sensor-data") + |> range(start: -1m) + |> filter(fn:(r) => r._measurement == "camera" ) + |> map(fn:(r) => ({ r with exposures: int(v: r.exposures) })) +``` diff --git a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/string.md b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/string.md new file mode 100644 index 0000000000..a49b308331 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/string.md @@ -0,0 +1,33 @@ +--- +title: string() function +description: The `string()` function converts a single value to a string. +menu: + flux_0_x: + name: string + parent: built-in-type-conversions +weight: 2 +aliases: + - /flux/v0.x/functions/built-in/transformations/type-conversions/string/ +--- + +The `string()` function converts a single value to a string. + +_**Function type:** Type conversion_ +_**Output data type:** String_ + +```js +string(v: 123456789) +``` + +## Parameters + +### v +The value to convert. + +## Examples +```js +from(bucket: "sensor-data") + |> range(start: -1m) + |> filter(fn:(r) => r._measurement == "system" ) + |> map(fn:(r) => ({ r with model_number string(v: r.model_number) })) +``` diff --git a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/time.md b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/time.md new file mode 100644 index 0000000000..5d3015cb0b --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/time.md @@ -0,0 +1,33 @@ +--- +title: time() function +description: The `time()` function converts a single value to a time. +menu: + flux_0_x: + name: time + parent: built-in-type-conversions +weight: 2 +aliases: + - /flux/v0.x/functions/built-in/transformations/type-conversions/time/ +--- + +The `time()` function converts a single value to a time. + +_**Function type:** Type conversion_ +_**Output data type:** Time_ + +```js +time(v: "2016-06-13T17:43:50.1004002Z") +``` + +## Parameters + +### v +The value to convert. + +## Examples +```js +from(bucket: "sensor-data") + |> range(start: -1m) + |> filter(fn:(r) => r._measurement == "system" ) + |> map(fn:(r) => ({ r with timestamp: time(v: r.timestamp) })) +``` diff --git a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/tobool.md b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/tobool.md new file mode 100644 index 0000000000..2a3f586ca5 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/tobool.md @@ -0,0 +1,38 @@ +--- +title: toBool() function +description: The toBool() function converts a value to a boolean. +aliases: + - /flux/v0.x/functions/transformations/type-conversions/tobool + - /flux/v0.x/functions/built-in/transformations/type-conversions/tobool/ +menu: + flux_0_x: + name: toBool + parent: built-in-type-conversions + weight: 1 +--- + +The `toBool()` function converts a value to a boolean. + +_**Function type:** Type conversion_ +_**Output data type:** Boolean_ + +```js +toBool() +``` + +## Examples +```js +from(bucket: "telegraf") + |> filter(fn:(r) => + r._measurement == "mem" and + r._field == "used" + ) + |> toBool() +``` + +## Function definition +```js +toBool = (tables=<-) => + tables + |> map(fn:(r) => ({ r with _value: bool(v: r._value) })) +``` diff --git a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/toduration.md b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/toduration.md new file mode 100644 index 0000000000..e7d3a2e074 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/toduration.md @@ -0,0 +1,48 @@ +--- +title: toDuration() function +description: The toDuration() function converts a value to a duration. +aliases: + - /flux/v0.x/functions/transformations/type-conversions/toduration + - /flux/v0.x/functions/built-in/transformations/type-conversions/toduration/ +menu: + flux_0_x: + name: toDuration + parent: built-in-type-conversions + weight: 1 +--- + +{{% warn %}} +**`toDuration()` was removed in Flux 0.37.** +{{% /warn %}} + +The `toDuration()` function converts a value to a duration. + +_**Function type:** Type conversion_ +_**Output data type:** Duration_ + +```js +toDuration() +``` + +{{% note %}} +To convert values in a column other than `_value`, define a custom function +patterned after the [function definition](#function-definition), +but replace `_value` with your desired column. +{{% /note %}} + +## Examples +```js +from(bucket: "telegraf") + |> filter(fn:(r) => + r._measurement == "mem" and + r._field == "used" + ) + |> toDuration() +``` + +## Function definition +```js +toDuration = (tables=<-) => + tables + |> map(fn:(r) => ({ r with _value: duration(v: r._value) })) +``` diff --git a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/tofloat.md b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/tofloat.md new file mode 100644 index 0000000000..a4d36c2a1c --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/tofloat.md @@ -0,0 +1,44 @@ +--- +title: toFloat() function +description: The toFloat() function converts a value to a float. +aliases: + - /flux/v0.x/functions/transformations/type-conversions/tofloat + - /flux/v0.x/functions/built-in/transformations/type-conversions/tofloat/ +menu: + flux_0_x: + name: toFloat + parent: built-in-type-conversions + weight: 1 +--- + +The `toFloat()` function converts a value to a float. + +_**Function type:** Type conversion_ +_**Output data type:** Float_ + +```js +toFloat() +``` + +{{% note %}} +To convert values in a column other than `_value`, define a custom function +patterned after the [function definition](#function-definition), +but replace `_value` with your desired column. +{{% /note %}} + +## Examples +```js +from(bucket: "telegraf") + |> filter(fn:(r) => + r._measurement == "mem" and + r._field == "used" + ) + |> toFloat() +``` + +## Function definition +```js +toFloat = (tables=<-) => + tables + |> map(fn:(r) => ({ r with _value: float(v: r._value) })) +``` diff --git a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/toint.md b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/toint.md new file mode 100644 index 0000000000..507c490bbe --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/toint.md @@ -0,0 +1,44 @@ +--- +title: toInt() function +description: The toInt() function converts a value to an integer. +aliases: + - /flux/v0.x/functions/transformations/type-conversions/toint + - /flux/v0.x/functions/built-in/transformations/type-conversions/toint/ +menu: + flux_0_x: + name: toInt + parent: built-in-type-conversions + weight: 1 +--- + +The `toInt()` function converts a value to an integer. + +_**Function type:** Type conversion_ +_**Output data type:** Integer_ + +```js +toInt() +``` + +{{% note %}} +To convert values in a column other than `_value`, define a custom function +patterned after the [function definition](#function-definition), +but replace `_value` with your desired column. +{{% /note %}} + +## Examples +```js +from(bucket: "telegraf") + |> filter(fn:(r) => + r._measurement == "mem" and + r._field == "used" + ) + |> toInt() +``` + +## Function definition +```js +toInt = (tables=<-) => + tables + |> map(fn:(r) => ({ r with _value: int(v: r._value) })) +``` diff --git a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/tostring.md b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/tostring.md new file mode 100644 index 0000000000..9022676552 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/tostring.md @@ -0,0 +1,44 @@ +--- +title: toString() function +description: The toString() function converts a value to a string. +aliases: + - /flux/v0.x/functions/transformations/type-conversions/tostring + - /flux/v0.x/functions/built-in/transformations/type-conversions/tostring/ +menu: + flux_0_x: + name: toString + parent: built-in-type-conversions + weight: 1 +--- + +The `toString()` function converts a value to a string. + +_**Function type:** Type conversion_ +_**Output data type:** String_ + +```js +toString() +``` + +{{% note %}} +To convert values in a column other than `_value`, define a custom function +patterned after the [function definition](#function-definition), +but replace `_value` with your desired column. +{{% /note %}} + +## Examples +```js +from(bucket: "telegraf") + |> filter(fn:(r) => + r._measurement == "mem" and + r._field == "used" + ) + |> toString() +``` + +## Function definition +```js +toString = (tables=<-) => + tables + |> map(fn:(r) => ({ r with _value: string(v: r._value) })) +``` diff --git a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/totime.md b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/totime.md new file mode 100644 index 0000000000..da4b79e6b6 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/totime.md @@ -0,0 +1,44 @@ +--- +title: toTime() function +description: The toTime() function converts a value to a time. +aliases: + - /flux/v0.x/functions/transformations/type-conversions/totime + - /flux/v0.x/functions/built-in/transformations/type-conversions/totime/ +menu: + flux_0_x: + name: toTime + parent: built-in-type-conversions + weight: 1 +--- + +The `toTime()` function converts a value to a time. + +_**Function type:** Type conversion_ +_**Output data type:** Time_ + +```js +toTime() +``` + +{{% note %}} +To convert values in a column other than `_value`, define a custom function +patterned after the [function definition](#function-definition), +but replace `_value` with your desired column. +{{% /note %}} + +## Examples +```js +from(bucket: "telegraf") + |> filter(fn:(r) => + r._measurement == "mem" and + r._field == "used" + ) + |> toTime() +``` + +## Function definition +```js +toTime = (tables=<-) => + tables + |> map(fn:(r) => ({ r with _value: time(v:r._value) })) +``` diff --git a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/touint.md b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/touint.md new file mode 100644 index 0000000000..8c204f65d3 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/touint.md @@ -0,0 +1,44 @@ +--- +title: toUInt() function +description: The toUInt() function converts a value to an uinteger. +aliases: + - /flux/v0.x/functions/transformations/type-conversions/touint + - /flux/v0.x/functions/built-in/transformations/type-conversions/touint/ +menu: + flux_0_x: + name: toUInt + parent: built-in-type-conversions + weight: 1 +--- + +The `toUInt()` function converts a value to an UInteger. + +_**Function type:** Type conversion_ +_**Output data type:** UInteger_ + +```js +toUInt() +``` + +{{% note %}} +To convert values in a column other than `_value`, define a custom function +patterned after the [function definition](#function-definition), +but replace `_value` with your desired column. +{{% /note %}} + +## Examples +```js +from(bucket: "telegraf") + |> filter(fn:(r) => + r._measurement == "mem" and + r._field == "used" + ) + |> toUInt() +``` + +## Function definition +```js +toUInt = (tables=<-) => + tables + |> map(fn:(r) => ({ r with _value: uint(v:r._value) })) +``` diff --git a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/uint.md b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/uint.md new file mode 100644 index 0000000000..865dff12b3 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/uint.md @@ -0,0 +1,33 @@ +--- +title: uint() function +description: The `uint()` function converts a single value to a UInteger. +menu: + flux_0_x: + name: uint + parent: built-in-type-conversions +weight: 2 +aliases: + - /flux/v0.x/functions/built-in/transformations/type-conversions/uint/ +--- + +The `uint()` function converts a single value to a UInteger. + +_**Function type:** Type conversion_ +_**Output data type:** UInteger_ + +```js +uint(v: "4") +``` + +## Parameters + +### v +The value to convert. + +## Examples +```js +from(bucket: "sensor-data") + |> range(start: -1m) + |> filter(fn:(r) => r._measurement == "camera" ) + |> map(fn:(r) => ({ r with exposures: uint(v: r.exposures) })) +``` diff --git a/content/flux/v0.x/stdlib/built-in/transformations/union.md b/content/flux/v0.x/stdlib/built-in/transformations/union.md new file mode 100644 index 0000000000..ecb2d3ca69 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/union.md @@ -0,0 +1,56 @@ +--- +title: union() function +description: The union() function concatenates two or more input streams into a single + output stream. +aliases: + - /flux/v0.x/functions/transformations/union + - /flux/v0.x/functions/built-in/transformations/union/ +menu: + flux_0_x: + name: union + parent: Transformations + weight: 1 +--- + +The `union()` function concatenates two or more input streams into a single output stream. +In tables that have identical schemas and group keys, contents of the tables will be concatenated in the output stream. +The output schemas of the `union()` function is the union of all input schemas. + +`union()` does not preserve the sort order of the rows within tables. +A sort operation may be added if a specific sort order is needed. + +_**Function type:** Transformation_ +_**Output data type:** Object_ + +```js +union(tables: ["table1", "table2"]) +``` + +## Parameters + +### tables +Specifies the streams to union together. +There must be at least two streams. + +_**Data type:** Array of streams_ + +## Examples +```js +left = from(bucket: "test") + |> range(start: 2018-05-22T19:53:00Z, stop: 2018-05-22T19:53:50Z) + |> filter(fn: (r) => + r._field == "usage_guest" or + r._field == "usage_guest_nice" + ) + |> drop(columns: ["_start", "_stop"]) + +right = from(bucket: "test") + |> range(start: 2018-05-22T19:53:50Z, stop: 2018-05-22T19:54:20Z) + |> filter(fn: (r) => + r._field == "usage_guest" or + r._field == "usage_idle" + ) + |> drop(columns: ["_start", "_stop"]) + +union(tables: [left, right]) +``` diff --git a/content/flux/v0.x/stdlib/built-in/transformations/window.md b/content/flux/v0.x/stdlib/built-in/transformations/window.md new file mode 100644 index 0000000000..c3c2f9c8c3 --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/transformations/window.md @@ -0,0 +1,130 @@ +--- +title: window() function +description: The window() function groups records based on a time value. +aliases: + - /flux/v0.x/functions/transformations/window + - /flux/v0.x/functions/built-in/transformations/window/ +menu: + flux_0_x: + name: window + parent: Transformations + weight: 1 +--- + +The `window()` function groups records based on a time value. +New columns are added to uniquely identify each window. +Those columns are added to the group key of the output tables. + +A single input record will be placed into zero or more output tables, depending on the specific windowing function. + +By default the start boundary of a window will align with the Unix epoch (zero time) +modified by the offset of the `location` option. + +_**Function type:** Transformation_ +_**Output data type:** Object_ + +```js +window( + every: 5m, + period: 5m, + offset: 12h, + timeColumn: "_time", + startColumn: "_start", + stopColumn: "_stop", + createEmpty: false +) + +// OR + +window( + intervals: intervals(every: 5m, period: 5m, offset: 12h), + timeColumn: "_time", + startColumn: "_start", + stopColumn: "_stop", + createEmpty: false +) +``` + +## Parameters + +> `every`,`period` or `intervals` is required. + +### every +Duration of time between windows. +Defaults to `period` value. + +_**Data type:** Duration_ + +### period +Duration of the window. +Period is the length of each interval. +It can be negative, indicating the start and stop boundaries are reversed. +Defaults to `every` value. + +_**Data type:** Duration_ + +### offset +Offset is the duration by which to shift the window boundaries. +It can be negative, indicating that the offset goes backwards in time. +Defaults to 0, which will align window end boundaries with the `every` duration. + +_**Data type:** Duration_ + +### intervals +A function that returns an interval generator, a set of intervals used as windows. + +_**Data type:** Function_ + +###### Example interval generator function +```js +intervals(every:1d, period:8h, offset:9h) +``` + +> When `intervals` is used, `every`, `period`, and `start` cannot be used or need to be set to 0. + +### timeColumn +The column containing time. +Defaults to `"_time"`. + +_**Data type:** String_ + +### startColumn +The column containing the window start time. +Defaults to `"_start"`. + +_**Data type:** String_ + +### stopColumn +The column containing the window stop time. +Defaults to `"_stop"`. + +_**Data type:** String_ + +### createEmpty +Specifies whether empty tables should be created. +Defaults to `false`. + +_**Data type:** Boolean_ + +## Examples + +#### Window data into 10 minute intervals +```js +from(bucket:"telegraf/autogen") + |> range(start:-12h) + |> window(every:10m) + // ... +``` + +#### Window data using intervals function +The following windows data into 8 hour intervals starting at 9AM every day. +```js +from(bucket:"telegraf/autogen") + |> range(start:-12h) + |> window(intervals: intervals(every:1d, period:8h, offset:9h)) +``` + +
+ +##### Related InfluxQL functions and statements: +[GROUP BY time()](/influxdb/latest/query_language/data_exploration/#the-group-by-clause) diff --git a/content/flux/v0.x/stdlib/csv/_index.md b/content/flux/v0.x/stdlib/csv/_index.md new file mode 100644 index 0000000000..93ce8d2fd5 --- /dev/null +++ b/content/flux/v0.x/stdlib/csv/_index.md @@ -0,0 +1,23 @@ +--- +title: Flux CSV package +description: > + The Flux CSV package provides functions for working with data in annotated + CSV format. Import the `csv` package. +menu: + flux_0_x: + name: CSV + parent: Standard library +weight: 1 +aliases: + - /flux/v0.x/functions/csv/ +--- + +CSV Flux functions provide tools for working with data in [annotated CSV format](https://github.com/influxdata/flux/blob/master/docs/SPEC.md#csv). +Import the `csv` package: + +```js +import "csv" +``` + +## CSV functions +{{< function-list >}} diff --git a/content/flux/v0.x/stdlib/csv/from.md b/content/flux/v0.x/stdlib/csv/from.md new file mode 100644 index 0000000000..387cbd5739 --- /dev/null +++ b/content/flux/v0.x/stdlib/csv/from.md @@ -0,0 +1,78 @@ +--- +title: csv.from() function +description: The csv.from() function retrieves data from a CSV data source. +aliases: + - /flux/v0.x/functions/inputs/fromcsv + - /flux/v0.x/functions/built-in/inputs/fromcsv + - /flux/v0.x/functions/csv/from/ +menu: + flux_0_x: + name: csv.from + parent: CSV + weight: 1 +--- + +The `csv.from()` function retrieves data from a comma-separated value (CSV) data source. +It returns a stream of tables. +Each unique series is contained within its own table. +Each record in the table represents a single point in the series. + +_**Function type:** Input_ + +```js +import "csv" + +csv.from(file: "/path/to/data-file.csv") + +// OR + +csv.from(csv: csvData) +``` + +{{% warn %}} +`csv.from()` is not avaialable in InfluxCloud. +{{% /warn %}} + +## Parameters + +### file +The file path of the CSV file to query. +The path can be absolute or relative. +If relative, it is relative to the working directory of the `influxd` process. +_The CSV file must exist in the same file system running the `influxd` process._ + +_**Data type:** String_ + +### csv +Raw CSV-formatted text. + +{{% note %}} +CSV data must be in the CSV format produced by the Flux HTTP response standard. +See the [Flux technical specification](https://github.com/influxdata/flux/blob/master/docs/SPEC.md#csv) +for information about this format. +{{% /note %}} + +_**Data type:** String_ + +## Examples + +### Query CSV data from a file +```js +import "csv" + +csv.from(file: "/path/to/data-file.csv") +``` + +### Query raw CSV-formatted text +```js +import "csv" + +csvData = " +result,table,_start,_stop,_time,region,host,_value +mean,0,2018-05-08T20:50:00Z,2018-05-08T20:51:00Z,2018-05-08T20:50:00Z,east,A,15.43 +mean,0,2018-05-08T20:50:00Z,2018-05-08T20:51:00Z,2018-05-08T20:50:20Z,east,B,59.25 +mean,0,2018-05-08T20:50:00Z,2018-05-08T20:51:00Z,2018-05-08T20:50:40Z,east,C,52.62 +" + +csv.from(csv: csvData) +``` diff --git a/content/flux/v0.x/stdlib/custom-functions/_index.md b/content/flux/v0.x/stdlib/custom-functions/_index.md new file mode 100644 index 0000000000..ff7eb55123 --- /dev/null +++ b/content/flux/v0.x/stdlib/custom-functions/_index.md @@ -0,0 +1,135 @@ +--- +title: Create custom Flux functions +description: Create your own custom Flux functions to transform and manipulate data. +menu: + flux_0_x: + name: Custom functions + parent: Standard library +weight: 6 +aliases: + - /flux/v0.x/functions/custom-functions/ +--- + +Flux's functional syntax allows for custom functions. +This guide walks through the basics of creating your own function. + +## Function definition structure +The basic structure for defining functions in Flux is as follows: + +```js +// Basic function definition structure +functionName = (functionParameters) => functionOperations +``` + +##### `functionName` +The name used to call the function in your Flux script. + +##### `functionParameters` +A comma-separated list of parameters passed into the function and used in its operations. +[Parameter defaults](#define-parameter-defaults) can be defined for each. + +##### `functionOperations` +Operations and functions that manipulate the input into the desired output. + +#### Basic function examples + +###### Example square function +```js +// Function definition +square = (n) => n * n + +// Function usage +> square(n:3) +9 +``` + +###### Example multiply function +```js +// Function definition +multiply = (x, y) => x * y + +// Function usage +> multiply(x:2, y:15) +30 +``` + +## Functions that manipulate pipe-forwarded data +Most Flux functions manipulate data pipe-forwarded into the function. +In order for a custom function to process pipe-forwarded data, one of the function +parameters must capture the input tables using the `<-` pipe-receive expression. + +In the example below, the `tables` parameter is assigned to the `<-` expression, +which represents all data pipe-forwarded into the function. +`tables` is then pipe-forwarded into other operations in the function definition. + +```js +functionName = (tables=<-) => tables |> functionOperations +``` + +#### Pipe-forwardable function example + +###### Multiply row values by x +The example below defines a `multByX` function that multiplies the `_value` column +of each row in the input table by the `x` parameter. +It uses the [`map()` function](/flux/v0.x/stdlib/built-in/transformations/map) to modify each `_value`. + +```js +// Function definition +multByX = (tables=<-, x) => + tables + |> map(fn: (r) => ({ r with _value: r._value * x})) + +// Function usage +from(bucket: "telegraf/autogen") + |> range(start: -1m) + |> filter(fn: (r) => + r._measurement == "mem" and + r._field == "used_percent" + ) + |> multByX(x:2.0) +``` + +## Define parameter defaults +To define parameters with default values, use the `=` assignment operator to assign +a default in your function definition: + +```js +functionName = (param1=defaultValue1, param2=defaultValue2) => functionOperation +``` + +Defaults are overridden by explicitly defining the parameter in the function call. + +#### Example functions with defaults + +###### Get the winner or the "winner" +The example below defines a `getWinner` function that returns the record with the highest +or lowest `_value` (winner versus "winner") depending on the `noSarcasm` parameter which defaults to `true`. +It uses the [`sort()` function](/flux/v0.x/stdlib/built-in/transformations/sort) to sort records in either descending or ascending order. +It then uses the [`limit()` function](/flux/v0.x/stdlib/built-in/transformations/limit) to return the first record from the sorted table. + +```js +// Function definition +getWinner = (tables=<-, noSarcasm:true) => + tables + |> sort(desc: noSarcasm) + |> limit(n:1) + +// Function usage +// Get the winner +from(bucket: "telegraf/autogen") + |> range(start: -1m) + |> filter(fn: (r) => + r._measurement == "mem" and + r._field == "used_percent" + ) + |> getWinner() + +// Get the "winner" +from(bucket: "telegraf/autogen") + |> range(start: -1m) + |> filter(fn: (r) => + r._measurement == "mem" and + r._field == "used_percent" + ) + |> getWinner(noSarcasm: false) +``` diff --git a/content/flux/v0.x/stdlib/custom-functions/custom-aggregate.md b/content/flux/v0.x/stdlib/custom-functions/custom-aggregate.md new file mode 100644 index 0000000000..d677f50ff2 --- /dev/null +++ b/content/flux/v0.x/stdlib/custom-functions/custom-aggregate.md @@ -0,0 +1,264 @@ +--- +title: Create custom aggregate functions +description: Create your own custom aggregate functions in Flux using the `reduce()` + function. +menu: + flux_0_x: + name: Custom aggregate functions + parent: Custom functions +weight: 1 +aliases: + - /flux/v0.x/functions/custom-functions/custom-aggregate/ +--- + +To aggregate your data, use the Flux +[built-in aggregate functions](/flux/v0.x/stdlib/built-in/transformations/aggregates/) +or create custom aggregate functions using the +[`reduce()`function](/flux/v0.x/stdlib/built-in/transformations/aggregates/reduce/). + +## Aggregate function characteristics +Aggregate functions all have the same basic characteristics: + +- They operate on individual input tables and transform all records into a single record. +- The output table has the same [group key](/flux/v0.x/introduction/getting-started/#group-keys) as the input table. + +## How reduce() works +The `reduce()` function operates on one row at a time using the function defined in +the [`fn` parameter](/flux/v0.x/stdlib/built-in/transformations/aggregates/reduce/#fn). +The `fn` function maps keys to specific values using two [objects](/flux/v0.x/introduction/getting-started/syntax-basics/#objects) +specified by the following parameters: + +| Parameter | Description | +|:---------: |:----------- | +| `r` | An object that represents the row or record. | +| `accumulator` | An object that contains values used in each row's aggregate calculation. | + +{{% note %}} +The `reduce()` function's [`identity` parameter](/flux/v0.x/stdlib/built-in/transformations/aggregates/reduce/#identity) +defines the initial `accumulator` object. +{{% /note %}} + +### Example reduce() function +The following example `reduce()` function produces a sum and product of all values +in an input table. + +```js +|> reduce(fn: (r, accumulator) => ({ + sum: r._value + accumulator.sum, + product: r._value * accumulator.product + }) + identity: {sum: 0.0, product: 1.0} +) +``` + +{{% note %}} +To preserve existing columns, [use the `with` operator](/flux/v0.x/stdlib/built-in/transformations/aggregates/reduce/#preserve-columns) +when mapping values in the `r` object. +{{% /note %}} + + +To illustrate how this function works, take this simplified table for example: + +```txt + _time _value +----------------------- ------- +2019-04-23T16:10:49.00Z 1.6 +2019-04-23T16:10:59.00Z 2.3 +2019-04-23T16:11:09.00Z 0.7 +2019-04-23T16:11:19.00Z 1.2 +2019-04-23T16:11:29.00Z 3.8 +``` + +###### Input objects +The `fn` function uses the data in the first row to define the `r` object. +It defines the `accumulator` object using the `identity` parameter. + +```js +r = { _time: 2019-04-23T16:10:49.00Z, _value: 1.6 } +accumulator = { sum : 0.0, product : 1.0 } +``` + +###### Key mappings +It then uses the `r` and `accumulator` objects to populate values in the key mappings: +```js +// sum: r._value + accumulator.sum +sum: 1.6 + 0.0 + +// product: r._value * accumulator.product +product: 1.6 * 1.0 +``` + +###### Output object +This produces an output object with the following key value pairs: + +```js +{ sum: 1.6, product: 1.6 } +``` + +The function then processes the next row using this **output object** as the `accumulator`. + +{{% note %}} +Because `reduce()` uses the output object as the `accumulator` when processing the next row, +keys mapped in the `fn` function must match keys in the `identity` and `accumulator` objects. +{{% /note %}} + +###### Processing the next row +```js +// Input objects for the second row +r = { _time: 2019-04-23T16:10:59.00Z, _value: 2.3 } +accumulator = { sum : 1.6, product : 1.6 } + +// Key mappings for the second row +sum: 2.3 + 1.6 +product: 2.3 * 1.6 + +// Output object of the second row +{ sum: 3.9, product: 3.68 } +``` + +It then uses the new output object as the `accumulator` for the next row. +This cycle continues until all rows in the table are processed. + +##### Final output object and table +After all records in the table are processed, `reduce()` uses the final output object +to create a transformed table with one row and columns for each mapped key. + +```js +// Final output object +{ sum: 9.6, product: 11.74656 } + +// Output table + sum product +---- --------- + 9.6 11.74656 +``` + +{{% note %}} +#### What happened to the \_time column? +The `reduce()` function only keeps columns that are: + +1. Are part of the input table's [group key](/flux/v0.x/introduction/getting-started/#group-keys). +2. Explicitly mapped in the `fn` function. + +It drops all other columns. +Because `_time` is not part of the group key and is not mapped in the `fn` function, +it isn't included in the output table. +{{% /note %}} + +## Custom aggregate function examples +To create custom aggregate functions, use principles outlined in +[Creating custom functions](/flux/v0.x/stdlib/custom-functions) +and the `reduce()` function to aggregate rows in each input table. + +### Create a custom average function +This example illustrates how to create a function that averages values in a table. +_This is meant for demonstration purposes only. +The built-in [`mean()` function](/flux/v0.x/stdlib/built-in/transformations/aggregates/mean/) +does the same thing and is much more performant._ + +{{< code-tabs-wrapper >}} +{{% code-tabs %}} +[Comments](#) +[No Comments](#) +{{% /code-tabs %}} + +{{% code-tab-content %}} + +```js +average = (tables=<-, outputField="average") => + tables + |> reduce( + // Define the initial accumulator object + identity: { + count: 1.0, + sum: 0.0, + avg: 0.0 + } + fn: (r, accumulator) => ({ + // Increment the counter on each reduce loop + count: accumulator.count + 1.0, + // Add the _value to the existing sum + sum: accumulator.sum + r._value, + // Divide the existing sum by the existing count for a new average + avg: accumulator.sum / accumulator.count + }) + ) + // Drop the sum and the count columns since they are no longer needed + |> drop(columns: ["sum", "count"]) + // Set the _field column of the output table to to the value + // provided in the outputField parameter + |> set(key: "_field", value: outputField) + // Rename avg column to _value + |> rename(columns: {avg: "_value"}) +``` +{{% /code-tab-content %}} + +{{% code-tab-content %}} +```js +average = (tables=<-, outputField="average") => + tables + |> reduce( + identity: { + count: 1.0, + sum: 0.0, + avg: 0.0 + } + fn: (r, accumulator) => ({ + count: accumulator.count + 1.0, + sum: accumulator.sum + r._value, + avg: accumulator.sum / accumulator.count + }) + ) + |> drop(columns: ["sum", "count"]) + |> set(key: "_field", value: outputField) + |> rename(columns: {avg: "_value"}) +``` +{{% /code-tab-content %}} +{{< /code-tabs-wrapper >}} + +### Aggregate multiple columns +Built-in aggregate functions only operate on one column. +Use `reduce()` to create a custom aggregate function that aggregates multiple columns. + +The following function expects input tables to have `c1_value` and `c2_value` +columns and generates an average for each. + +```js +multiAvg = (tables=<-) => + tables + |> reduce( + identity: { + count: 1.0, + c1_sum: 0.0, + c1_avg: 0.0, + c2_sum: 0.0, + c2_avg: 0.0 + } + fn: (r, accumulator) => ({ + count: accumulator.count + 1.0, + c1_sum: accumulator.c1_sum + r.c1_value, + c1_avg: accumulator.c1_sum / accumulator.count, + c2_sum: accumulator.c2_sum + r.c2_value, + c2_avg: accumulator.c2_sum / accumulator.count + }) + ) +``` + +### Aggregate gross and net profit +Use `reduce()` to create a function that aggregates gross and net profit. +This example expects `profit` and `expenses` columns in the input tables. + +```js +profitSummary = (tables=<-) => + tables + |> reduce( + identity: { + gross: 0.0, + net: 0.0 + } + fn: (r, accumulator) => ({ + gross: accumulator.gross + r.profit, + net: accumulator.net + r.profit - r.expenses + }) + ) +``` diff --git a/content/flux/v0.x/stdlib/date/_index.md b/content/flux/v0.x/stdlib/date/_index.md new file mode 100644 index 0000000000..9895e2feae --- /dev/null +++ b/content/flux/v0.x/stdlib/date/_index.md @@ -0,0 +1,58 @@ +--- +title: Flux date package +description: > + The Flux date package provides date and time constants and functions. + Import the `date` package. +aliases: + - /flux/v0.x/flux/language/built-ins/time-constants/ + - /flux/v0.x/functions/date/ +menu: + flux_0_x: + name: Date + parent: Standard library + weight: 1 +--- + +The Flux date package provides date and time constants and functions. +Import the `date` package. + +```js +import "date" +``` + +## Date and time constants +That `date` package includes the following date and time constants. + +### Days of the week +Days of the week are represented as integers in the range `[0-6]`. + +```js +date.Sunday = 0 +date.Monday = 1 +date.Tuesday = 2 +date.Wednesday = 3 +date.Thursday = 4 +date.Friday = 5 +date.Saturday = 6 +``` + +### Months of the year +Months are represented as integers in the range `[1-12]`. + +```js +date.January = 1 +date.February = 2 +date.March = 3 +date.April = 4 +date.May = 5 +date.June = 6 +date.July = 7 +date.August = 8 +date.September = 9 +date.October = 10 +date.November = 11 +date.December = 12 +``` + +## Date and time functions +{{< function-list >}} diff --git a/content/flux/v0.x/stdlib/date/hour.md b/content/flux/v0.x/stdlib/date/hour.md new file mode 100644 index 0000000000..8a8c3d9daf --- /dev/null +++ b/content/flux/v0.x/stdlib/date/hour.md @@ -0,0 +1,33 @@ +--- +title: date.hour() function +description: > + The `date.hour()` function returns the hour of a specified time. Results + range from `[0-23]`. +menu: + flux_0_x: + name: date.hour + parent: Date + weight: 1 +aliases: + - /flux/v0.x/functions/date/hour/ +--- + +The `date.hour()` function returns the hour of a specified time. +Results range from `[0-23]`. + +_**Function type:** Transformation_ + +```js +import "date" + +date.hour(t: 2019-07-17T12:05:21.012Z) + +// Returns 12 +``` + +## Parameters + +### t +The time to operate on. + +_**Data type:** Time_ diff --git a/content/flux/v0.x/stdlib/date/microsecond.md b/content/flux/v0.x/stdlib/date/microsecond.md new file mode 100644 index 0000000000..75364f1d6d --- /dev/null +++ b/content/flux/v0.x/stdlib/date/microsecond.md @@ -0,0 +1,33 @@ +--- +title: date.microsecond() function +description: > + The `date.microsecond()` function returns the microsecond of a specified + time. Results range from `[0-999999]`. +menu: + flux_0_x: + name: date.microsecond + parent: Date + weight: 1 +aliases: + - /flux/v0.x/functions/date/microsecond/ +--- + +The `date.microsecond()` function returns the microsecond of a specified time. +Results range from `[0-999999]`. + +_**Function type:** Transformation_ + +```js +import "date" + +date.microsecond(t: 2019-07-17T12:05:21.012934584Z) + +// Returns 12934 +``` + +## Parameters + +### t +The time to operate on. + +_**Data type:** Time_ diff --git a/content/flux/v0.x/stdlib/date/millisecond.md b/content/flux/v0.x/stdlib/date/millisecond.md new file mode 100644 index 0000000000..7aa866aaec --- /dev/null +++ b/content/flux/v0.x/stdlib/date/millisecond.md @@ -0,0 +1,33 @@ +--- +title: date.millisecond() function +description: > + The `date.millisecond()` function returns the millisecond of a specified + time. Results range from `[0-999999]`. +menu: + flux_0_x: + name: date.millisecond + parent: Date + weight: 1 +aliases: + - /flux/v0.x/functions/date/millisecond/ +--- + +The `date.millisecond()` function returns the millisecond of a specified time. +Results range from `[0-999]`. + +_**Function type:** Transformation_ + +```js +import "date" + +date.millisecond(t: 2019-07-17T12:05:21.012934584Z) + +// Returns 12 +``` + +## Parameters + +### t +The time to operate on. + +_**Data type:** Time_ diff --git a/content/flux/v0.x/stdlib/date/minute.md b/content/flux/v0.x/stdlib/date/minute.md new file mode 100644 index 0000000000..416a7aa808 --- /dev/null +++ b/content/flux/v0.x/stdlib/date/minute.md @@ -0,0 +1,33 @@ +--- +title: date.minute() function +description: > + The `date.minute()` function returns the minute of a specified time. + Results range from `[0-59]`. +menu: + flux_0_x: + name: date.minute + parent: Date + weight: 1 +aliases: + - /flux/v0.x/functions/date/minute/ +--- + +The `date.minute()` function returns the minute of a specified time. +Results range from `[0-59]`. + +_**Function type:** Transformation_ + +```js +import "date" + +date.minute(t: 2019-07-17T12:05:21.012Z) + +// Returns 21 +``` + +## Parameters + +### t +The time to operate on. + +_**Data type:** Time_ diff --git a/content/flux/v0.x/stdlib/date/month.md b/content/flux/v0.x/stdlib/date/month.md new file mode 100644 index 0000000000..8d53cfa99e --- /dev/null +++ b/content/flux/v0.x/stdlib/date/month.md @@ -0,0 +1,33 @@ +--- +title: date.month() function +description: > + The `date.month()` function returns the month of a specified time. Results + range from `[1-12]` +menu: + flux_0_x: + name: date.month + parent: Date + weight: 1 +aliases: + - /flux/v0.x/functions/date/month/ +--- + +The `date.month()` function returns the month of a specified time. +Results range from `[1-12]` + +_**Function type:** Transformation_ + +```js +import "date" + +date.month(t: 2019-07-17T12:05:21.012Z) + +// Returns 7 +``` + +## Parameters + +### t +The time to operate on. + +_**Data type:** Time_ diff --git a/content/flux/v0.x/stdlib/date/monthday.md b/content/flux/v0.x/stdlib/date/monthday.md new file mode 100644 index 0000000000..530b906347 --- /dev/null +++ b/content/flux/v0.x/stdlib/date/monthday.md @@ -0,0 +1,33 @@ +--- +title: date.monthDay() function +description: > + The `date.monthDay()` function returns the day of the month for a specified + time. Results range from `[1-31]`. +menu: + flux_0_x: + name: date.monthDay + parent: Date + weight: 1 +aliases: + - /flux/v0.x/functions/date/monthday/ +--- + +The `date.monthDay()` function returns the day of the month for a specified time. +Results range from `[1-31]`. + +_**Function type:** Transformation_ + +```js +import "date" + +date.monthDay(t: 2019-07-17T12:05:21.012Z) + +// Returns 17 +``` + +## Parameters + +### t +The time to operate on. + +_**Data type:** Time_ diff --git a/content/flux/v0.x/stdlib/date/nanosecond.md b/content/flux/v0.x/stdlib/date/nanosecond.md new file mode 100644 index 0000000000..c547c576e0 --- /dev/null +++ b/content/flux/v0.x/stdlib/date/nanosecond.md @@ -0,0 +1,33 @@ +--- +title: date.nanosecond() function +description: > + The `date.nanosecond()` function returns the nanosecond of a specified + time. Results range from `[0-999999999]`. +menu: + flux_0_x: + name: date.nanosecond + parent: Date + weight: 1 +aliases: + - /flux/v0.x/functions/date/nanosecond/ +--- + +The `date.nanosecond()` function returns the nanosecond of a specified time. +Results range from `[0-999999999]`. + +_**Function type:** Transformation_ + +```js +import "date" + +date.nanosecond(t: 2019-07-17T12:05:21.012934584Z) + +// Returns 12934584 +``` + +## Parameters + +### t +The time to operate on. + +_**Data type:** Time_ diff --git a/content/flux/v0.x/stdlib/date/quarter.md b/content/flux/v0.x/stdlib/date/quarter.md new file mode 100644 index 0000000000..f46463a712 --- /dev/null +++ b/content/flux/v0.x/stdlib/date/quarter.md @@ -0,0 +1,33 @@ +--- +title: date.quarter() function +description: > + The `date.quarter()` function returns the quarter of the year for a + specified time. Results range from `[1-4]`. +menu: + flux_0_x: + name: date.quarter + parent: Date + weight: 1 +aliases: + - /flux/v0.x/functions/date/quarter/ +--- + +The `date.quarter()` function returns the quarter of the year for a specified time. +Results range from `[1-4]`. + +_**Function type:** Transformation_ + +```js +import "date" + +date.quarter(t: 2019-07-17T12:05:21.012Z) + +// Returns 3 +``` + +## Parameters + +### t +The time to operate on. + +_**Data type:** Time_ diff --git a/content/flux/v0.x/stdlib/date/second.md b/content/flux/v0.x/stdlib/date/second.md new file mode 100644 index 0000000000..e47e06c4c2 --- /dev/null +++ b/content/flux/v0.x/stdlib/date/second.md @@ -0,0 +1,33 @@ +--- +title: date.second() function +description: > + The `date.second()` function returns the second of a specified time. + Results range from `[0-59]`. +menu: + flux_0_x: + name: date.second + parent: Date + weight: 1 +aliases: + - /flux/v0.x/functions/date/second/ +--- + +The `date.second()` function returns the second of a specified time. +Results range from `[0-59]`. + +_**Function type:** Transformation_ + +```js +import "date" + +date.second(t: 2019-07-17T12:05:21.012Z) + +// Returns 21 +``` + +## Parameters + +### t +The time to operate on. + +_**Data type:** Time_ diff --git a/content/flux/v0.x/stdlib/date/truncate.md b/content/flux/v0.x/stdlib/date/truncate.md new file mode 100644 index 0000000000..c0f037199d --- /dev/null +++ b/content/flux/v0.x/stdlib/date/truncate.md @@ -0,0 +1,58 @@ +--- +title: date.truncate() function +description: > + The `date.truncate()` function truncates a time to a specified unit. +menu: + flux_0_x: + name: date.truncate + parent: Date + weight: 1 +aliases: + - /flux/v0.x/functions/date/truncate/ +--- + +The `date.truncate()` function truncates a time to a specified unit. + +_**Function type:** Transformation_ + +```js +import "date" + +date.truncate( + t: 2019-07-17T12:05:21.012Z + unit: 1s +) + +// Returns 2019-07-17T12:05:21.000000000Z +``` + +## Parameters + +### t +The time to operate on. + +_**Data type:** Time_ + +### unit +The unit of time to truncate to. + +_**Data type:** Duration_ + +{{% note %}} +Only use `1` and the unit of time to specify the `unit`. +For example: `1s`, `1m`, `1h`. +{{% /note %}} + +## Examples +```js +import "date" + +date.truncate(t: "2019-06-03T13:59:01.000000000Z", unit: 1s) +// Returns 2019-06-03T13:59:01.000000000Z + +date.truncate(t: "2019-06-03T13:59:01.000000000Z", unit: 1m) +// Returns 2019-06-03T13:59:00.000000000Z + +date.truncate(t: "2019-06-03T13:59:01.000000000Z", unit: 1h) +// Returns 2019-06-03T13:00:00.000000000Z +``` diff --git a/content/flux/v0.x/stdlib/date/week.md b/content/flux/v0.x/stdlib/date/week.md new file mode 100644 index 0000000000..b83e4ebb47 --- /dev/null +++ b/content/flux/v0.x/stdlib/date/week.md @@ -0,0 +1,33 @@ +--- +title: date.week() function +description: > + The `date.week()` function returns the ISO week of the year for a specified + time. Results range from `[1-53]`. +menu: + flux_0_x: + name: date.week + parent: Date + weight: 1 +aliases: + - /flux/v0.x/functions/date/week/ +--- + +The `date.week()` function returns the ISO week of the year for a specified time. +Results range from `[1-53]`. + +_**Function type:** Transformation_ + +```js +import "date" + +date.week(t: 2019-07-17T12:05:21.012Z) + +// Returns 29 +``` + +## Parameters + +### t +The time to operate on. + +_**Data type:** Time_ diff --git a/content/flux/v0.x/stdlib/date/weekday.md b/content/flux/v0.x/stdlib/date/weekday.md new file mode 100644 index 0000000000..963c3f125d --- /dev/null +++ b/content/flux/v0.x/stdlib/date/weekday.md @@ -0,0 +1,33 @@ +--- +title: date.weekDay() function +description: > + The `date.weekDay()` function returns the day of the week for a specified + time. Results range from `[0-6]`. +menu: + flux_0_x: + name: date.weekDay + parent: Date + weight: 1 +aliases: + - /flux/v0.x/functions/date/weekday/ +--- + +The `date.weekDay()` function returns the day of the week for a specified time. +Results range from `[0-6]`. + +_**Function type:** Transformation_ + +```js +import "date" + +date.weekDay(t: 2019-07-17T12:05:21.012Z) + +// Returns 3 +``` + +## Parameters + +### t +The time to operate on. + +_**Data type:** Time_ diff --git a/content/flux/v0.x/stdlib/date/year.md b/content/flux/v0.x/stdlib/date/year.md new file mode 100644 index 0000000000..e0cc38b664 --- /dev/null +++ b/content/flux/v0.x/stdlib/date/year.md @@ -0,0 +1,31 @@ +--- +title: date.year() function +description: > + The `date.year()` function returns the year of a specified time. +menu: + flux_0_x: + name: date.year + parent: Date + weight: 1 +aliases: + - /flux/v0.x/functions/date/year/ +--- + +The `date.year()` function returns the year of a specified time. + +_**Function type:** Transformation_ + +```js +import "date" + +date.year(t: 2019-07-17T12:05:21.012Z) + +// Returns 2019 +``` + +## Parameters + +### t +The time to operate on. + +_**Data type:** Time_ diff --git a/content/flux/v0.x/stdlib/date/yearday.md b/content/flux/v0.x/stdlib/date/yearday.md new file mode 100644 index 0000000000..7a3d348097 --- /dev/null +++ b/content/flux/v0.x/stdlib/date/yearday.md @@ -0,0 +1,33 @@ +--- +title: date.yearDay() function +description: > + The `date.yearDay()` function returns the day of the year for a specified + time. Results range from `[1-365]` for non-leap years, and `[1-366]` in leap years. +menu: + flux_0_x: + name: date.yearDay + parent: Date + weight: 1 +aliases: + - /flux/v0.x/functions/date/yearday/ +--- + +The `date.yearDay()` function returns the day of the year for a specified time. +Results include leap days and range from `[1-366]`. + +_**Function type:** Transformation_ + +```js +import "date" + +date.yearDay(t: 2019-07-17T12:05:21.012Z) + +// Returns 198 +``` + +## Parameters + +### t +The time to operate on. + +_**Data type:** Time_ diff --git a/content/flux/v0.x/stdlib/experimental/_index.md b/content/flux/v0.x/stdlib/experimental/_index.md new file mode 100644 index 0000000000..d23f307af8 --- /dev/null +++ b/content/flux/v0.x/stdlib/experimental/_index.md @@ -0,0 +1,42 @@ +--- +title: Flux Experimental package +list_title: Experimental package +description: > + The Flux Experimental package includes experimental functions that perform various tasks. + Experimental functions are subject to change at any time and are not recommended for production use. +menu: + flux_0_x: + name: Experimental + parent: Standard library +weight: 1 +--- + +The Flux Experimental package includes experimental functions that perform various tasks. + +{{% warn %}} +### Use experimental functions at your own risk +Experimental functions are subject to change and are **not recommended for production use**. +At any time, experimental functions and packages may: + +- be moved or promoted to a permanent location +- undergo API changes +- stop working with no planned fixes +- be removed without warning nor published explanation + +**By using experimental functions and packages, you agree to these risks.** +{{% /warn %}} + +## Experimental functions +The following functions are part of the base experimental package. +To use them, import the `experimental` package. + +```js +import "experimental" +``` + +{{< function-list >}} + +## Experimental packages +Experimental packages require different import paths than base experimental functions. + +{{< children show="sections" >}} diff --git a/content/flux/v0.x/stdlib/experimental/addduration.md b/content/flux/v0.x/stdlib/experimental/addduration.md new file mode 100644 index 0000000000..2545b1c2d1 --- /dev/null +++ b/content/flux/v0.x/stdlib/experimental/addduration.md @@ -0,0 +1,64 @@ +--- +title: experimental.addDuration() function +description: > + The `experimental.addDuration()` function adds a duration to a time value and + returns the resulting time. +menu: + flux_0_x: + name: experimental.addDuration + parent: Experimental +weight: 1 +--- + +The `experimental.addDuration()` function adds a duration to a time value and +returns the resulting time value. + +_**Function type:** Transformation_ + +{{% warn %}} +The `experimental.addDuration()` function is subject to change at any time. +By using this function, you accept the [risks of experimental functions](/flux/v0.x/stdlib/experimental/#use-experimental-functions-at-your-own-risk). + +This specific function will be removed once duration vectors are implemented. +See [influxdata/flux#413](https://github.com/influxdata/flux/issues/413). +{{% /warn %}} + +```js +import "experimental" + +experimental.addDuration( + d: 12h, + to: now(), +) +``` + +## Parameters + +### d +The duration to add. + +_**Data type:** Duration_ + +### to +The time to add the [duration](#d) to. + +_**Data type:** Time_ + +## Examples + +### Add six hours to a timestamp +```js +import "experimental" + +experimental.addDuration( + d: 6h, + to: 2019-09-16T12:00:00Z, +) + +// Returns 2019-09-16T18:00:00.000000000Z +``` + +--- + +### Related functions +- [experimental.subDuration()](/flux/v0.x/stdlib/experimental/subduration/) diff --git a/content/flux/v0.x/stdlib/experimental/bigtable/_index.md b/content/flux/v0.x/stdlib/experimental/bigtable/_index.md new file mode 100644 index 0000000000..fa2701d2ab --- /dev/null +++ b/content/flux/v0.x/stdlib/experimental/bigtable/_index.md @@ -0,0 +1,27 @@ +--- +title: Flux Bigtable package +description: > + The Flux Bigtable package provides tools for working with data in Google Cloud Bigtable databases. + Import the `experimental/bigtable` package. +menu: + flux_0_x: + name: Bigtable + parent: Experimental +weight: 1 +--- + +The Flux Bigtable package provides tools for working with data in +[Google Cloud Bigtable](https://cloud.google.com/bigtable/) databases. + +{{% warn %}} +The Bigtable package is currently experimental and subject to change at any time. +By using this package, you accept the [risks of experimental functions](/flux/v0.x/stdlib/experimental/#use-experimental-functions-at-your-own-risk). +{{% /warn %}} + +Import the `experimental/bigtable` package: + +```js +import "experimental/bigtable" +``` + +{{< function-list >}} diff --git a/content/flux/v0.x/stdlib/experimental/bigtable/from.md b/content/flux/v0.x/stdlib/experimental/bigtable/from.md new file mode 100644 index 0000000000..cf2c097ebe --- /dev/null +++ b/content/flux/v0.x/stdlib/experimental/bigtable/from.md @@ -0,0 +1,59 @@ +--- +title: bigtable.from() function +description: > + The `bigtable.from()` function retrieves data from a Google Cloud Bigtable data source. +menu: + flux_0_x: + name: bigtable.from + parent: Bigtable +weight: 1 +--- + +The `bigtable.from()` function retrieves data from a [Google Cloud Bigtable](https://cloud.google.com/bigtable/) +data source. + +_**Function type:** Input_ + +{{% warn %}} +The `bigtable.from()` function is currently experimental and subject to change at any time. +By using this function, you accept the [risks of experimental functions](/flux/v0.x/stdlib/experimental/#use-experimental-functions-at-your-own-risk). +{{% /warn %}} + +```js +import "experimental/bigtable" + +bigtable.from( + token: "mySuPeRseCretTokEn", + project: "exampleProjectID", + instance: "exampleInstanceID", + table: "example-table" +) +``` + +## Parameters + +### token +The Google Cloud IAM token to use to access the Cloud Bigtable database. + +_For more information, see the following:_ + +- [Cloud Bigtable Access Control](https://cloud.google.com/bigtable/docs/access-control) +- [Google Cloud IAM How-to guides](https://cloud.google.com/iam/docs/how-to) +- [Setting Up Authentication for Server to Server Production Applications on Google Cloud](https://cloud.google.com/docs/authentication/production) + +_**Data type:** String_ + +### project +The project ID of the Cloud Bigtable project to retrieve data from. + +_**Data type:** String_ + +### instance +The instance ID of the Cloud Bigtable instance to retrieve data from. + +_**Data type:** String_ + +### table +The name of the Cloud Bigtable table to retrieve data from. + +_**Data type:** String_ diff --git a/content/flux/v0.x/stdlib/experimental/group.md b/content/flux/v0.x/stdlib/experimental/group.md new file mode 100644 index 0000000000..8830f4065a --- /dev/null +++ b/content/flux/v0.x/stdlib/experimental/group.md @@ -0,0 +1,64 @@ +--- +title: experimental.group() function +description: > + The `experimental.group()` function introduces an `extend` mode to the existing + `group()` function. +menu: + flux_0_x: + name: experimental.group + parent: Experimental +weight: 1 +--- + +The `experimental.group()` function introduces an `extend` mode to the existing +[`group()`](/flux/v0.x/stdlib/built-in/transformations/group/) function. + +_**Function type:** Transformation_ + +{{% warn %}} +The `experimental.group()` function is subject to change at any time. +By using this function, you accept the [risks of experimental functions](/flux/v0.x/stdlib/experimental/#use-experimental-functions-at-your-own-risk). + +This specific function will be removed once the proposed `extend` mode is sufficiently vetted. +{{% /warn %}} + +```js +import "experimental" + +experimental.group(columns: ["host", "_measurement"], mode:"extend") +``` + +## Parameters + +### columns +List of columns to use in the grouping operation. +Defaults to `[]`. + +_**Data type:** Array of strings_ + +### mode +The mode used to group columns. + +_**Data type:** String_ + +{{% note %}} +`extend` is the only mode available to `experimental.group()`. +{{% /note %}} + +#### extend +Appends columns defined in the [`columns` parameter](#columns) to all existing +[group keys](/v2.0/query-data/get-started/#group-keys). + +## Examples + +###### Include the value column in each groups' group key +```js +from(bucket: "example-bucket") + |> range(start: -1m) + |> group(columns: ["_value"], mode: "extend") +``` + +--- + +### Related functions +- [group()](/flux/v0.x/stdlib/built-in/transformations/group/) diff --git a/content/flux/v0.x/stdlib/experimental/mqtt/_index.md b/content/flux/v0.x/stdlib/experimental/mqtt/_index.md new file mode 100644 index 0000000000..31bc73cc2d --- /dev/null +++ b/content/flux/v0.x/stdlib/experimental/mqtt/_index.md @@ -0,0 +1,27 @@ +--- +title: Flux MQTT package +list_title: MQTT package +description: > + The Flux MQTT package provides functions for working with MQTT protocol. + Import the `experimental/mqtt` package. +menu: + flux_0_x: + name: MQTT + parent: Experimental +weight: 1 +--- + +Flux MQTT functions provide tools for working with Message Queuing Telemetry Transport (MQTT) protocol. + +{{% warn %}} +The MQTT package is currently experimental and subject to change at any time. +By using this package, you accept the [risks of experimental functions](/flux/v0.x/stdlib/experimental/#use-experimental-functions-at-your-own-risk). +{{% /warn %}} + +Import the `experimental/mqtt` package: + +```js +import "experimental/mqtt" +``` + +{{< function-list >}} diff --git a/content/flux/v0.x/stdlib/experimental/mqtt/to.md b/content/flux/v0.x/stdlib/experimental/mqtt/to.md new file mode 100644 index 0000000000..9c16efeadd --- /dev/null +++ b/content/flux/v0.x/stdlib/experimental/mqtt/to.md @@ -0,0 +1,134 @@ +--- +title: mqtt.to() function +description: > + The `mqtt.to()` function outputs data to an MQTT broker using MQTT protocol. +menu: + flux_0_x: + name: mqtt.to + parent: MQTT +weight: 301 +--- + +The `mqtt.to()` function outputs data to an MQTT broker using MQTT protocol. + +_**Function type:** Output_ + +{{% warn %}} +The `mqtt.to()` function is currently experimental and subject to change at any time. +By using this function, you accept the [risks of experimental functions](/flux/v0.x/stdlib/experimental/#use-experimental-functions-at-your-own-risk). +{{% /warn %}} + +```js +import "experimental/mqtt" + +mqtt.to( + broker: "tcp://localhost:8883", + topic: "example-topic", + message: "Example message", + qos: 0, + clientid: "flux-mqtt", + username: "username", + password: "password", + name: "name-example", + timeout: 1s, + timeColumn: "_time", + tagColumns: ["tag1", "tag2"], + valueColumns: ["_value"] +) +``` + +## Parameters + +### broker +The MQTT broker connection string. + +_**Data type:** String_ + +### topic +The MQTT topic to send data to. + +_**Data type:** String_ + +### message +The message or payload to send to the MQTT broker. +The default payload is an output table. +If there are multiple output tables, it sends each table as a separate MQTT message. + +{{% note %}} +When you specify a message, the function sends the message string only (no output table). +{{% /note %}} + +_**Data type:** String_ + +### qos +The [MQTT Quality of Service (QoS)](https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901103) level. +Values range from `[0-2]`. +Default is `0`. + +_**Data type:** Integer_ + +### clientid +The MQTT client ID. + +_**Data type:** String_ + +### username +The username to send to the MQTT broker. +Username is only required if the broker requires authentication. +If you provide a username, you must provide a [password](#password). + +_**Data type:** String_ + +### password +The password to send to the MQTT broker. +Password is only required if the broker requires authentication. +If you provide a password, you must provide a [username](#username). + +_**Data type:** String_ + +### name +_(Optional)_ The name for the MQTT message. + +_**Data type:** String_ + +### timeout +The MQTT connection timeout. +Default is `1s`. + +_**Data type:** Duration_ + +### timeColumn +The column to use as time values in the output line protocol. +Default is `"_time"`. + +_**Data type:** String_ + +### tagColumns +The columns to use as tag sets in the output line protocol. +Default is `[]`. + +_**Data type:** Array of strings_ + +### valueColumns +The columns to use as field values in the output line protocol. +Default is `["_value"]`. + +_**Data type:** Array of strings_ + +## Examples + +### Send data to an MQTT endpoint +```js +import "experimental/mqtt" + +from(bucket: "example-bucket") + |> range(start: -5m) + |> filter(fn: (r) => r._measurement == "airSensor") + |> mqtt.to( + broker: "tcp://localhost:8883", + topic: "air-sensors", + clientid: "sensor-12a4", + tagColumns: ["sensorID"], + valueColumns: ["_value"] + ) +``` diff --git a/content/flux/v0.x/stdlib/experimental/objectkeys.md b/content/flux/v0.x/stdlib/experimental/objectkeys.md new file mode 100644 index 0000000000..bed425eee3 --- /dev/null +++ b/content/flux/v0.x/stdlib/experimental/objectkeys.md @@ -0,0 +1,53 @@ +--- +title: experimental.objectKeys() function +description: > + The `experimental.objectKeys()` function returns an array of keys in a specified object. +menu: + flux_0_x: + name: experimental.objectKeys + parent: Experimental +weight: 1 +--- + +The `experimental.objectKeys()` function returns an array of keys in a specified object. + +_**Function type:** Transformation_ + +{{% warn %}} +The `experimental.objectKeys()` function is subject to change at any time. +By using this function, you accept the [risks of experimental functions](/flux/v0.x/stdlib/experimental/#use-experimental-functions-at-your-own-risk). +{{% /warn %}} + +```js +import "experimental" + +experimental.objectKeys( + o: {key1: "value1", key2: "value2"} +) + +// Returns [key1, key2] +``` + +## Parameters + +### o +The object to return keys from. + +_**Data type:** Object_ + +## Examples + +### Return all keys in an object +```js +import "experimental" + +user = { + firstName: "John", + lastName: "Doe", + age: 42 +} + +experimental.objectKeys(o: user) + +// Returns [firstName, lastName, age] +``` diff --git a/content/flux/v0.x/stdlib/experimental/prometheus/_index.md b/content/flux/v0.x/stdlib/experimental/prometheus/_index.md new file mode 100644 index 0000000000..b9ecc95a23 --- /dev/null +++ b/content/flux/v0.x/stdlib/experimental/prometheus/_index.md @@ -0,0 +1,27 @@ +--- +title: Flux Prometheus package +description: > + The Flux Prometheus package provides functions for working with Prometheus-formatted metrics. + Import the `experimental/prometheus` package. +menu: + flux_0_x: + name: Prometheus + parent: Experimental +weight: 1 +--- + +Flux Prometheus functions provide tools for working with +[Prometheus-formatted metrics](https://prometheus.io/docs/instrumenting/exposition_formats/). + +{{% warn %}} +The Prometheus package is currently experimental and subject to change at any time. +By using this package, you accept the [risks of experimental functions](/flux/v0.x/stdlib/experimental/#use-experimental-functions-at-your-own-risk). +{{% /warn %}} + +Import the `experimental/prometheus` package: + +```js +import "experimental/prometheus" +``` + +{{< function-list >}} diff --git a/content/flux/v0.x/stdlib/experimental/prometheus/scrape.md b/content/flux/v0.x/stdlib/experimental/prometheus/scrape.md new file mode 100644 index 0000000000..9789e8c83f --- /dev/null +++ b/content/flux/v0.x/stdlib/experimental/prometheus/scrape.md @@ -0,0 +1,52 @@ +--- +title: prometheus.scrape() function +description: > + The `prometheus.scrape()` function retrieves Prometheus-formatted metrics + from a specified URL. +menu: + flux_0_x: + name: prometheus.scrape + parent: Prometheus +weight: 301 +related: + - /v2.0/write-data/scrape-data/scrapable-endpoints/ +--- + +The `prometheus.scrape()` function retrieves [Prometheus-formatted metrics](https://prometheus.io/docs/instrumenting/exposition_formats/) +from a specified URL. +The function groups metrics (including histogram and summary values) into individual tables. + +_**Function type:** Input_ + +{{% warn %}} +The `prometheus.scrape()` function is currently experimental and subject to change at any time. +By using this function, you accept the [risks of experimental functions](/flux/v0.x/stdlib/experimental/#use-experimental-functions-at-your-own-risk). +{{% /warn %}} + +```js +import "experimental/prometheus" + +prometheus.scrape( + url: "http://localhost:9999/metrics" +) +``` + +## Parameters + +### url +The URL to scrape Prometheus-formatted metrics from. + +_**Data type:** String_ + +## Examples + +### Scrape Prometheus metrics and write them to InfluxDB +```js +import "experimental/prometheus" + +prometheus.scrape(url: "https://example-url.com/metrics") + |> to( + org: "example-org", + bucket: "example-bucket" + ) +``` diff --git a/content/flux/v0.x/stdlib/experimental/set.md b/content/flux/v0.x/stdlib/experimental/set.md new file mode 100644 index 0000000000..02b22653fd --- /dev/null +++ b/content/flux/v0.x/stdlib/experimental/set.md @@ -0,0 +1,78 @@ +--- +title: experimental.set() function +description: > + The `experimental.set()` function sets multiple static column values on all records. +menu: + flux_0_x: + name: experimental.set + parent: Experimental +weight: 1 +--- + +The `experimental.set()` function sets multiple static column values on all records. +If a column already exists, the function updates the existing value. +If a column does not exist, the function adds it with the specified value. + +_Once sufficiently vetted, `experimental.set()` will replace the existing +[`set()` function](/flux/v0.x/stdlib/built-in/transformations/set/)._ + +_**Function type:** Transformation_ + +{{% warn %}} +The `experimental.set()` function is subject to change at any time. +By using this function, you accept the [risks of experimental functions](/flux/v0.x/stdlib/experimental/#use-experimental-functions-at-your-own-risk). +{{% /warn %}} + +```js +import "experimental" + +experimental.set( + o: {column1: "value1", column2: "value2"} +) +``` + +## Parameters + +### o +An object that defines the columns and values to set. +The key of each key-value pair defines the column name. +The value of each key-value pair defines the column value. + +_**Data type:** Object_ + +## Examples + +### Set values for multiple columns + +##### Example input table +| _time | _field | _value | +|:----- |:------ | ------:| +| 2019-09-16T12:00:00Z | temp | 71.2 | +| 2019-09-17T12:00:00Z | temp | 68.4 | +| 2019-09-18T12:00:00Z | temp | 70.8 | + +##### Example query +```js +import "experimental" + +data + |> experimental.set( + o: { + _field: "temperature", + unit: "°F", + location: "San Francisco" + } + ) +``` + +##### Example output table +| _time | _field | _value | unit | location | +|:----- |:------ | ------:|:----:| -------- | +| 2019-09-16T12:00:00Z | temperature | 71.2 | °F | San Francisco | +| 2019-09-17T12:00:00Z | temperature | 68.4 | °F | San Francisco | +| 2019-09-18T12:00:00Z | temperature | 70.8 | °F | San Francisco | + +--- + +### Related functions +- [set()](/flux/v0.x/stdlib/built-in/transformations/set/) diff --git a/content/flux/v0.x/stdlib/experimental/subduration.md b/content/flux/v0.x/stdlib/experimental/subduration.md new file mode 100644 index 0000000000..963e156bdd --- /dev/null +++ b/content/flux/v0.x/stdlib/experimental/subduration.md @@ -0,0 +1,64 @@ +--- +title: experimental.subDuration() function +description: > + The `experimental.subDuration()` function subtracts a duration from a time value and + returns a the resulting time value. +menu: + flux_0_x: + name: experimental.subDuration + parent: Experimental +weight: 1 +--- + +The `experimental.subDuration()` function subtracts a duration from a time value and +returns the resulting time value. + +_**Function type:** Transformation_ + +{{% warn %}} +The `experimental.subDuration()` function is subject to change at any time. +By using this function, you accept the [risks of experimental functions](/flux/v0.x/stdlib/experimental/#use-experimental-functions-at-your-own-risk). + +This specific function will be removed once duration vectors are implemented. +See [influxdata/flux#413](https://github.com/influxdata/flux/issues/413). +{{% /warn %}} + +```js +import "experimental" + +experimental.subDuration( + d: 12h, + from: now(), +) +``` + +## Parameters + +### d +The duration to subtract. + +_**Data type:** Duration_ + +### from +The time to subtract the [duration](#d) from. + +_**Data type:** Time_ + +## Examples + +### Subtract six hours from a timestamp +```js +import "experimental" + +experimental.subDuration( + d: 6h, + from: 2019-09-16T12:00:00Z, +) + +// Returns 2019-09-16T06:00:00.000000000Z +``` + +--- + +### Related functions +- [experimental.addDuration()](/flux/v0.x/stdlib/experimental/addduration/) diff --git a/content/flux/v0.x/stdlib/experimental/to.md b/content/flux/v0.x/stdlib/experimental/to.md new file mode 100644 index 0000000000..0b1672fc6c --- /dev/null +++ b/content/flux/v0.x/stdlib/experimental/to.md @@ -0,0 +1,113 @@ +--- +title: experimental.to() function +description: > + The `experimental.to()` function writes data to an InfluxDB v2.0 bucket. + The function structures data differently than the built-in `to()` function. +menu: + flux_0_x: + name: experimental.to + parent: Experimental +weight: 1 +--- + +The `experimental.to()` function writes data to an InfluxDB v2.0 bucket, but in +a [different structure](#expected-data-structure) than the +[built-in `to()` function](/flux/v0.x/stdlib/built-in/outputs/to/). + +_**Function type:** Output_ + +{{% warn %}} +The `experimental.to()` function is subject to change at any time. +By using this function, you accept the [risks of experimental functions](/flux/v0.x/stdlib/experimental/#use-experimental-functions-at-your-own-risk). +{{% /warn %}} + +```js +import "experimental" + +experimental.to( + bucket: "my-bucket", + org: "my-org" +) + +// OR + +experimental.to( + bucketID: "1234567890", + orgID: "0987654321" +) +``` + +### Expected data structure + +#### Data structure expected by built-in to() +The built-in `to()` function requires `_time`, `_measurement`, `_field`, and `_value` columns. +The `_field` column stores the **field key** and the `_value` column stores the **field value**. + +| _time | _measurement | _field | _value | +| ----- | ------------ | ------ | ------ | +| timestamp | measurement-name | field key | field value | + +#### Data structure expected by experimental to() +`experimental.to()` requires `_time` and `measurement` columns, but field keys +and values are stored in single columns with the **field key** as the **column name** and +the **field value** as the **column value**. + +| _time | _measurement | field_key | +| ----- | ------------ | --------- | +| timestamp | measurement-name | field value | + +If using the built-in `from()` function, use [`pivot()`](/flux/v0.x/stdlib/built-in/transformations/pivot/) +to transform data into the structure `experimetnal.to()` expects. +_[See the example below](#use-pivot-to-shape-data-for-experimental-to)._ + +## Parameters + +### bucket +The bucket to write data to. +`bucket` and `bucketID` are mutually exclusive. + +_**Data type:** String_ + +### bucketID +The ID of the bucket to write data to. +`bucketID` and `bucket` are mutually exclusive. + +_**Data type:** String_ + +### org +The organization name of the specified [`bucket`](#bucket). +Only required when writing to a different organization or a remote host. +`org` and `orgID` are mutually exclusive. + +_**Data type:** String_ + +### orgID +The organization ID of the specified [`bucket`](#bucket). +Only required when writing to a different organization or a remote host. +`orgID` and `org` are mutually exclusive. + +_**Data type:** String_ + + +## Examples + +##### Use pivot() to shape data for experimental.to() +```js +import "experimental" + +from(bucket: "example-bucket") + |> range(start: -1h) + |> pivot( + rowKey:["_time"], + columnKey: ["_field"], + valueColumn: "_value") + |> experimental.to( + bucket: "bucket-name", + org: "org-name" + ) +``` + +--- + +### Related functions +- [to()](/flux/v0.x/stdlib/built-in/outputs/to/) diff --git a/content/flux/v0.x/stdlib/influxdb-v1/_index.md b/content/flux/v0.x/stdlib/influxdb-v1/_index.md new file mode 100644 index 0000000000..dc60bfc618 --- /dev/null +++ b/content/flux/v0.x/stdlib/influxdb-v1/_index.md @@ -0,0 +1,25 @@ +--- +title: Flux InfluxDB v1 package +description: > + The Flux InfluxDB v1 package provides functions for managing data from + an InfluxDB v1.x database or structured using the InfluxDB v1 data structure. Import + the `influxdata/influxdb/v1` package. +menu: + flux_0_x: + name: InfluxDB v1 + parent: Standard library +weight: 1 +aliases: + - /flux/v0.x/functions/influxdb-v1/ +--- + +The Flux InfluxDB v1 package provides functions for managing data from an InfluxDB v1.x +database or structured using the InfluxDB v1 data structure. +Import the `influxdata/influxdb/v1` package: + +```js +import "influxdata/influxdb/v1" +``` + +## InfluxDB v1 functions +{{< function-list >}} diff --git a/content/flux/v0.x/stdlib/influxdb-v1/fieldsascols.md b/content/flux/v0.x/stdlib/influxdb-v1/fieldsascols.md new file mode 100644 index 0000000000..abd7757fb2 --- /dev/null +++ b/content/flux/v0.x/stdlib/influxdb-v1/fieldsascols.md @@ -0,0 +1,50 @@ +--- +title: v1.fieldsAsCols() function +description: The v1.fieldsAsCols() function is pivots a table and automatically aligns + fields within each input table that have the same timestamp. +aliases: + - /flux/v0.x/functions/inputs/fromrows + - /flux/v0.x/functions/transformations/influxfieldsascols + - /flux/v0.x/functions/influxdb-v1/fieldsascols/ +menu: + flux_0_x: + name: v1.fieldsAsCols + parent: InfluxDB v1 +weight: 1 +--- + +The `v1.fieldsAsCols()` function is a special application of the `pivot()` function that +automatically aligns fields within each input table that have the same timestamp. + +_**Function type:** Transformation_ + +```js +import "influxdata/influxdb/v1" + +v1.fieldsAsCols() +``` + +## Examples +```js +import "influxdata/influxdb/v1" + +from(bucket:"telegraf/autogen") + |> range(start: -1h) + |> filter(fn: (r) => r._measurement == "cpu") + |> v1.fieldsAsCols() + |> keep(columns: ["_time", "cpu", "usage_idle", "usage_user"]) +``` + +## Function definition +```js +fieldsAsCols = (tables=<-) => + tables + |> pivot( + rowKey:["_time"], + columnKey: ["_field"], + valueColumn: "_value" + ) +``` + +_**Used functions:** +[pivot()](/flux/v0.x/stdlib/built-in/transformations/pivot)_ diff --git a/content/flux/v0.x/stdlib/influxdb-v1/measurements.md b/content/flux/v0.x/stdlib/influxdb-v1/measurements.md new file mode 100644 index 0000000000..d6241e8324 --- /dev/null +++ b/content/flux/v0.x/stdlib/influxdb-v1/measurements.md @@ -0,0 +1,37 @@ +--- +title: v1.measurements() function +description: The v1.measurements() function returns a list of measurements in a specific + bucket. +menu: + flux_0_x: + name: v1.measurements + parent: InfluxDB v1 +weight: 1 +aliases: + - /flux/v0.x/functions/influxdb-v1/measurements/ +--- + +The `v1.measurements()` function returns a list of measurements in a specific bucket. +The return value is always a single table with a single column, `_value`. + +```js +import "influxdata/influxdb/v1" + +v1.measurements(bucket: "telegraf/autogen") +``` + +## Parameters + +### bucket +The bucket from which to list measurements. + +_**Data type:** String_ + +## Function definition +```js +measurements = (bucket) => + tagValues(bucket: bucket, tag: "_measurement") +``` + +_**Used functions:** +[tagValues()](/flux/v0.x/stdlib/influxdb-v1/tagvalues)_ diff --git a/content/flux/v0.x/stdlib/influxdb-v1/measurementtagkeys.md b/content/flux/v0.x/stdlib/influxdb-v1/measurementtagkeys.md new file mode 100644 index 0000000000..ff2e03958e --- /dev/null +++ b/content/flux/v0.x/stdlib/influxdb-v1/measurementtagkeys.md @@ -0,0 +1,47 @@ +--- +title: v1.measurementTagKeys() function +description: The v1.measurementTagKeys() function returns a list of tag keys for a + specific measurement. +menu: + flux_0_x: + name: v1.measurementTagKeys + parent: InfluxDB v1 +weight: 1 +aliases: + - /flux/v0.x/functions/influxdb-v1/measurementtagkeys/ +--- + +The `v1.measurementTagKeys()` function returns a list of tag keys for a specific measurement. +The return value is always a single table with a single column, `_value`. + +```js +import "influxdata/influxdb/v1" + +v1.measurementTagKeys( + bucket: "telegraf/autogen", + measurement: "cpu" +) +``` + +## Parameters + +### bucket +The bucket from which to return tag keys for a specific measurement. + +_**Data type:** String_ + +### measurement +The measurement from which to return tag keys. + +_**Data type:** String_ + +## Function definition +```js +measurementTagKeys = (bucket, measurement) => + tagKeys( + bucket: bucket, + predicate: (r) => r._measurement == measurement) +``` + +_**Used functions:** +[tagKeys()](/flux/v0.x/stdlib/influxdb-v1/tagkeys)_ diff --git a/content/flux/v0.x/stdlib/influxdb-v1/measurementtagvalues.md b/content/flux/v0.x/stdlib/influxdb-v1/measurementtagvalues.md new file mode 100644 index 0000000000..87e31b7360 --- /dev/null +++ b/content/flux/v0.x/stdlib/influxdb-v1/measurementtagvalues.md @@ -0,0 +1,58 @@ +--- +title: v1.measurementTagValues() function +description: The v1.measurementTagValues() function returns a list of tag values for + a specific measurement. +menu: + flux_0_x: + name: v1.measurementTagValues + parent: InfluxDB v1 +weight: 1 +aliases: + - /flux/v0.x/functions/influxdb-v1/measurementtagvalues/ +--- + +The `v1.measurementTagValues()` function returns a list of tag values for a specific measurement. +The return value is always a single table with a single column, `_value`. + + + +```js +import "influxdata/influxdb/v1" + +v1.measurementTagValues( + bucket: "telegraf/autogen", + measurement: "cpu", + tag: "host" +) +``` + +## Parameters + +### bucket +The bucket from which to return tag values for a specific measurement. + +_**Data type:** String_ + +### measurement +The measurement from which to return tag values. + +_**Data type:** String_ + +### tag +The tag from which to return all unique values. + +_**Data type:** String_ + + +## Function definition +```js +measurementTagValues = (bucket, measurement, tag) => + tagValues( + bucket: bucket, + tag: tag, + predicate: (r) => r._measurement == measurement + ) +``` + +_**Used functions:** +[tagValues()](/flux/v0.x/stdlib/influxdb-v1/tagvalues)_ diff --git a/content/flux/v0.x/stdlib/influxdb-v1/tagkeys.md b/content/flux/v0.x/stdlib/influxdb-v1/tagkeys.md new file mode 100644 index 0000000000..4504ab703b --- /dev/null +++ b/content/flux/v0.x/stdlib/influxdb-v1/tagkeys.md @@ -0,0 +1,75 @@ +--- +title: v1.tagKeys() function +description: The v1.tagKeys() function returns a list of tag keys for all series that + match the predicate. +menu: + flux_0_x: + name: v1.tagKeys + parent: InfluxDB v1 +weight: 1 +aliases: + - /flux/v0.x/functions/influxdb-v1/tagkeys/ +--- + +The `v1.tagKeys()` function returns a list of tag keys for all series that match the [`predicate`](#predicate). +The return value is always a single table with a single column, `_value`. + +```js +import "influxdata/influxdb/v1" + +v1.tagKeys( + bucket: "telegraf/autogen", + predicate: (r) => true, + start: -30d +) +``` + +## Parameters + +### bucket +The bucket from which to list tag keys. + +_**Data type:** String_ + +### predicate +The predicate function that filters tag keys. +_Defaults to `(r) => true`._ + +_**Data type:** Function_ + +### start +Specifies the oldest time to be included in the results. +_Defaults to `-30d`._ + +Relative start times are defined using negative durations. +Negative durations are relative to now. +Absolute start times are defined using timestamps. + +_**Data type:** Duration_ + +## Examples +```js +import "influxdata/influxdb/v1" + +v1.tagKeys(bucket: "my-bucket") +``` + + +## Function definition +```js +tagKeys = (bucket, predicate=(r) => true, start=-30d) => + from(bucket: bucket) + |> range(start: start) + |> filter(fn: predicate) + |> keys() + |> keep(columns: ["_value"]) + |> distinct() +``` + +_**Used functions:** +[from](/flux/v0.x/stdlib/built-in/inputs/from/), +[range](/flux/v0.x/stdlib/built-in/transformations/range/), +[filter](/flux/v0.x/stdlib/built-in/transformations/filter/), +[keys](/flux/v0.x/stdlib/built-in/transformations/keys/), +[keep](/flux/v0.x/stdlib/built-in/transformations/keep/), +[distinct](/flux/v0.x/stdlib/built-in/transformations/selectors/distinct)_ diff --git a/content/flux/v0.x/stdlib/influxdb-v1/tagvalues.md b/content/flux/v0.x/stdlib/influxdb-v1/tagvalues.md new file mode 100644 index 0000000000..d3e4835964 --- /dev/null +++ b/content/flux/v0.x/stdlib/influxdb-v1/tagvalues.md @@ -0,0 +1,83 @@ +--- +title: v1.tagValues() function +description: placeholder +menu: + flux_0_x: + name: v1.tagValues + parent: InfluxDB v1 +weight: 1 +aliases: + - /flux/v0.x/functions/influxdb-v1/tagvalues/ +--- + +The `v1.tagValues()` function returns a list unique values for a given tag. +The return value is always a single table with a single column, `_value`. + + +```js +import "influxdata/influxdb/v1" + +v1.tagValues( + bucket: "telegraf/autogen", + tag: "host", + predicate: (r) => true, + start: -30d +) +``` + +## Parameters + +### bucket +The bucket from which to list tag values. + +_**Data type:** String_ + +### tag +The tag for which to return unique values. + +_**Data type:** String_ + +### predicate +The predicate function that filters tag values. +_Defaults to `(r) => true`._ + +_**Data type:** Function_ + +### start +Specifies the oldest time to be included in the results. +_Defaults to `-30d`._ + +Relative start times are defined using negative durations. +Negative durations are relative to now. +Absolute start times are defined using timestamps. + +_**Data type:** Duration_ + +## Examples +```js +import "influxdata/influxdb/v1" + +v1.tagKeys( + bucket: "my-bucket", + tag: "host", +) +``` + +## Function definition +```js +tagValues = (bucket, tag, predicate=(r) => true, start=-30d) => + from(bucket: bucket) + |> range(start: start) + |> filter(fn: predicate) + |> group(columns: [tag]) + |> distinct(column: tag) + |> keep(columns: ["_value"]) +``` + +_**Used functions:** +[from](/flux/v0.x/stdlib/built-in/inputs/from/), +[range](/flux/v0.x/stdlib/built-in/transformations/range/), +[filter](/flux/v0.x/stdlib/built-in/transformations/filter/), +[group](/flux/v0.x/stdlib/built-in/transformations/group/), +[distinct](/flux/v0.x/stdlib/built-in/transformations/selectors/distinct/), +[keep](/flux/v0.x/stdlib/built-in/transformations/keep/)_ diff --git a/content/flux/v0.x/stdlib/json/encode.md b/content/flux/v0.x/stdlib/json/encode.md new file mode 100644 index 0000000000..4cbb3f45c7 --- /dev/null +++ b/content/flux/v0.x/stdlib/json/encode.md @@ -0,0 +1,50 @@ +--- +title: json.encode() function +description: The json.encode() function converts a value into JSON bytes. +menu: + flux_0_x: + name: json.encode + parent: JSON + weight: 1 +aliases: + - /flux/v0.x/functions/json/encode/ +draft: true +--- + +The `json.encode()` function converts a value into JSON bytes. + +_**Function type:** Type conversion_ + +```js +import "json" + +json.encode(v: "some value") +``` + +This function encodes [Flux types](/flux/v0.x/language/types/) as follows: + +- `time` values in [RFC3339](https://tools.ietf.org/html/rfc3339) format +- `duration` values in number of milliseconds since the epoch +- `regexp` values as their string representation +- `bytes` values as base64-encoded strings +- `function` values are not encoded and produce an error + +## Parameters + +### v +The value to convert. + +_**Data type:** Boolean | Duration | Float | Integer | String | Time | UInteger_ + +## Examples + +### Encode all values in a column in JSON bytes +```js +import "json" + +from(bucket: "telegraf/autogen") + |> range(start: -1h) + |> map(fn: (r) => ({ + r with _value: json.encode(v: r._value) + })) +``` diff --git a/content/flux/v0.x/stdlib/json/index.md b/content/flux/v0.x/stdlib/json/index.md new file mode 100644 index 0000000000..bb53e445e3 --- /dev/null +++ b/content/flux/v0.x/stdlib/json/index.md @@ -0,0 +1,23 @@ +--- +title: Flux JSON package +description: > + The Flux JSON package provides functions for working with JSON. Import + the `json` package. +menu: + flux_0_x: + name: JSON + parent: Standard library + weight: 1 +aliases: + - /flux/v0.x/functions/json/index/ +draft: true +--- + +JSON Flux functions provide tools for working with JSON. +Import the `json` package: + +```js +import "json" +``` + +{{< function-list >}} diff --git a/content/flux/v0.x/stdlib/math/_index.md b/content/flux/v0.x/stdlib/math/_index.md new file mode 100644 index 0000000000..f50a254abc --- /dev/null +++ b/content/flux/v0.x/stdlib/math/_index.md @@ -0,0 +1,47 @@ +--- +title: Flux math package +description: > + The Flux math package provides basic constants and mathematical functions. + Import the `math` package. +menu: + flux_0_x: + name: Math + parent: Standard library +weight: 1 +aliases: + - /flux/v0.x/functions/math/ +--- + +The Flux math package provides basic constants and mathematical functions. +Import the `math` package. + +```js +import "math" +``` + +## Mathematical constants +That `math` package includes the following mathematical constants. + +```js +math.e = 2.71828182845904523536028747135266249775724709369995957496696763 // https ://oeis.org/A001113 +math.pi = 3.14159265358979323846264368327950288419716939937510582097494459 // https ://oeis.org/A000796 +math.phi = 1.61803698874989484820458683436563811772030917980576286213544862 // https ://oeis.org/A001622 + +math.sqrt2 = 1.41421356237309504880168872420969807856967187537694807317667974 // https ://oeis.org/A002193 +math.sqrte = 1.64872127070012814684865078781416357165377610071014801157507931 // https ://oeis.org/A019774 +math.sqrtpi = 1.77245385090551602729816748364114518279754945612238712821380779 // https ://oeis.org/A002161 +math.sqrtphi = 1.27201964951406896425242246173749149171560804184009624861664038 // https ://oeis.org/A139369 + +math.ln2 = 0.693147180559945309417232121458176568075500134360255254120680009 // https://oeis.org/A002162 +math.log2e = 1 ÷ math.ln2 +math.ln10 = 2.30258509299404568401799145468436420760110148862877297603632790 // https ://oeis.org/A002392 +math.log10e = 1 ÷ math.ln10 + +math.maxfloat = 1.797693134862315708145274237317043567981e+308 // 2**1023 * (2**53 - 1) / 2**52 +math.maxint = 1<<63 - 1 +math.minint = -1 << 63 +math.maxuint = 1<<64 - 1 +``` + +## Mathematical functions +{{< function-list >}} diff --git a/content/flux/v0.x/stdlib/math/abs.md b/content/flux/v0.x/stdlib/math/abs.md new file mode 100644 index 0000000000..d4f5941d2c --- /dev/null +++ b/content/flux/v0.x/stdlib/math/abs.md @@ -0,0 +1,36 @@ +--- +title: math.abs() function +description: The math.abs() function returns the absolute value of `x`. +menu: + flux_0_x: + name: math.abs + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/abs/ +--- + +The `math.abs()` function returns the absolute value of `x`. + +_**Output data type:** Float_ + +```js +import "math" + +math.abs(x: -1.22) + +// Returns 1.22 +``` + +## Parameters + +### x +The value used in the operation. + +_**Data type:** Float_ + +## Special cases +```js +math.abs(x: ±Inf) // Returns +Inf +math.abs(x: NaN) // Returns NaN +``` diff --git a/content/flux/v0.x/stdlib/math/acos.md b/content/flux/v0.x/stdlib/math/acos.md new file mode 100644 index 0000000000..5dc13b247b --- /dev/null +++ b/content/flux/v0.x/stdlib/math/acos.md @@ -0,0 +1,37 @@ +--- +title: math.acos() function +description: The math.acos() function returns the arccosine of `x` in radians. +menu: + flux_0_x: + name: math.acos + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/acos/ +--- + +The `math.acos()` function returns the arccosine of `x` in radians. + +_**Output data type:** Float_ + +```js +import "math" + +math.acos(x: 0.22) + +// Returns 1.3489818562981022 +``` + +## Parameters + +### x +`x` should be greater than -1 and less than 1. +Otherwise, the operation will return `NaN`. + +_**Data type:** Float_ + +## Special cases +```js +math.acos(x: <-1) // Returns NaN +math.acos(x: >1) // Returns NaN +``` diff --git a/content/flux/v0.x/stdlib/math/acosh.md b/content/flux/v0.x/stdlib/math/acosh.md new file mode 100644 index 0000000000..b31a66f31b --- /dev/null +++ b/content/flux/v0.x/stdlib/math/acosh.md @@ -0,0 +1,38 @@ +--- +title: math.acosh() function +description: The math.acosh() function returns the inverse hyperbolic cosine of `x`. +menu: + flux_0_x: + name: math.acosh + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/acosh/ +--- + +The `math.acosh()` function returns the inverse hyperbolic cosine of `x`. + +_**Output data type:** Float_ + +```js +import "math" + +math.acosh(x: 1.22) + +// Returns 0.6517292837263685 +``` + +## Parameters + +### x +`x` should be greater than 1. +If less than 1, the operation will return `NaN`. + +_**Data type:** Float_ + +## Special cases +```js +math.acosh(x: +Inf) // Returns +Inf +math.acosh(x: <1) // Returns NaN +math.acosh(x: NaN) // Returns NaN +``` diff --git a/content/flux/v0.x/stdlib/math/asin.md b/content/flux/v0.x/stdlib/math/asin.md new file mode 100644 index 0000000000..ed09847baf --- /dev/null +++ b/content/flux/v0.x/stdlib/math/asin.md @@ -0,0 +1,39 @@ +--- +title: math.asin() function +description: The math.asin() function returns the arcsine of `x` in radians. +menu: + flux_0_x: + name: math.asin + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/asin/ +--- + +The `math.asin()` function returns the arcsine of `x` in radians. + +_**Output data type:** Float_ + +```js +import "math" + +math.asin(x: 0.22) + +// Returns 0.22181447049679442 +``` + +## Parameters + +### x +The value used in the operation. +`x` should be greater than -1 and less than 1. +Otherwise, the function will return `NaN`. + +_**Data type:** Float_ + +## Special cases +```js +math.asin(x: ±0) // Returns ±0 +math.asin(x: <-1) // Returns NaN +math.asin(x: >1) // Returns NaN +``` diff --git a/content/flux/v0.x/stdlib/math/asinh.md b/content/flux/v0.x/stdlib/math/asinh.md new file mode 100644 index 0000000000..e8820d3a29 --- /dev/null +++ b/content/flux/v0.x/stdlib/math/asinh.md @@ -0,0 +1,37 @@ +--- +title: math.asinh() function +description: The math.asinh() function returns the inverse hyperbolic sine of `x`. +menu: + flux_0_x: + name: math.asinh + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/asinh/ +--- + +The `math.asinh()` function returns the inverse hyperbolic sine of `x`. + +_**Output data type:** Float_ + +```js +import "math" + +math.asinh(x: 3.14) + +// Returns 1.8618125572136835 +``` + +## Parameters + +### x +The value used in the operation. + +_**Data type:** Float_ + +## Special cases +```js +math.asinh(x: ±0) // Returns ±0 +math.asinh(x: ±Inf) // Returns ±Inf +math.asinh(x: NaN) // Returns NaN +``` diff --git a/content/flux/v0.x/stdlib/math/atan.md b/content/flux/v0.x/stdlib/math/atan.md new file mode 100644 index 0000000000..0abbe7296d --- /dev/null +++ b/content/flux/v0.x/stdlib/math/atan.md @@ -0,0 +1,36 @@ +--- +title: math.atan() function +description: The math.atan() function returns the arctangent of `x` in radians. +menu: + flux_0_x: + name: math.atan + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/atan/ +--- + +The `math.atan()` function returns the arctangent of `x` in radians. + +_**Output data type:** Float_ + +```js +import "math" + +math.atan(x: 3.14) + +// Returns 1.262480664599468 +``` + +## Parameters + +### x +The value used in the operation. + +_**Data type:** Float_ + +## Special cases +```js +math.atan(x: ±0) // Returns ±0 +math.atan(x: ±Inf) // Returns ±Pi/2 +``` diff --git a/content/flux/v0.x/stdlib/math/atan2.md b/content/flux/v0.x/stdlib/math/atan2.md new file mode 100644 index 0000000000..506eb1bc0b --- /dev/null +++ b/content/flux/v0.x/stdlib/math/atan2.md @@ -0,0 +1,59 @@ +--- +title: math.atan2() function +description: > + The math.atan2() function returns the arc tangent of `y`/`x`, using + the signs of the parameters to determine the quadrant of the return value. +menu: + flux_0_x: + name: math.atan2 + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/atan2/ +--- + +The `math.atan2()` function returns the arc tangent of `y`/`x`, using the signs +of the two to determine the quadrant of the return value. + +_**Output data type:** Float_ + +```js +import "math" + +math.atan2(y: 1.22, x: 3.14) + +// Returns 0.3705838802763881 +``` + +## Parameters + +### y +The y coordinate used in the operation. + +_**Data type:** Float_ + +### x +The x coordinate used in the operation. + +_**Data type:** Float_ + +## Special cases +```js +math.atan2(y:y, x:NaN) // Returns NaN +math.atan2(y: NaN, x:x) // Returns NaN +math.atan2(y: +0, x: >=0) // Returns +0 +math.atan2(y: -0, x: >=0) // Returns -0 +math.atan2(y: +0, x: <=-0) // Returns +Pi +math.atan2(y: -0, x: <=-0) // Returns -Pi +math.atan2(y: >0, x: 0) // Returns +Pi/2 +math.atan2(y: <0, x: 0) // Returns -Pi/2 +math.atan2(y: +Inf, x: +Inf) // Returns +Pi/4 +math.atan2(y: -Inf, x: +Inf) // Returns -Pi/4 +math.atan2(y: +Inf, x: -Inf) // Returns 3Pi/4 +math.atan2(y: -Inf, x: -Inf) // Returns -3Pi/4 +math.atan2(y:y, x: +Inf) // Returns 0 +math.atan2(y: >0, x: -Inf) // Returns +Pi +math.atan2(y: <0, x: -Inf) // Returns -Pi +math.atan2(y: +Inf, x:x) // Returns +Pi/2 +math.atan2(y: -Inf, x:x) // Returns -Pi/2 +``` diff --git a/content/flux/v0.x/stdlib/math/atanh.md b/content/flux/v0.x/stdlib/math/atanh.md new file mode 100644 index 0000000000..134156fa80 --- /dev/null +++ b/content/flux/v0.x/stdlib/math/atanh.md @@ -0,0 +1,42 @@ +--- +title: math.atanh() function +description: The math.atanh() function returns the inverse hyperbolic tangent of `x`. +menu: + flux_0_x: + name: math.atanh + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/atanh/ +--- + +The `math.atanh()` function returns the inverse hyperbolic tangent of `x`. + +_**Output data type:** Float_ + +```js +import "math" + +math.atanh(x: 0.22) + +// Returns 0.22365610902183242 +``` + +## Parameters + +### x +The value used in the operation. +`x` should be greater than -1 and less than 1. +Otherwise, the operation will return `NaN`. + +_**Data type:** Float_ + +## Special cases +```js +math.atanh(x: 1) // Returns +Inf +math.atanh(x: ±0) // Returns ±0 +math.atanh(x: -1) // Returns -Inf +math.atanh(x: <-1) // Returns NaN +math.atanh(x: >1) // Returns NaN +math.atanh(x: NaN) // Returns NaN +``` diff --git a/content/flux/v0.x/stdlib/math/cbrt.md b/content/flux/v0.x/stdlib/math/cbrt.md new file mode 100644 index 0000000000..0a2fd9b031 --- /dev/null +++ b/content/flux/v0.x/stdlib/math/cbrt.md @@ -0,0 +1,37 @@ +--- +title: math.cbrt() function +description: The math.cbrt() function returns the cube root of `x`. +menu: + flux_0_x: + name: math.cbrt + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/cbrt/ +--- + +The `math.cbrt()` function returns the cube root of `x`. + +_**Output data type:** Float_ + +```js +import "math" + +math.cbrt(x: 1728.0) + +// Returns 12.0 +``` + +## Parameters + +### x +The value used in the operation. + +_**Data type:** Float_ + +## Special cases +```js +math.cbrt(±0) // Returns ±0 +math.cbrt(±Inf) // Returns ±Inf +math.cbrt(NaN) // Returns NaN +``` diff --git a/content/flux/v0.x/stdlib/math/ceil.md b/content/flux/v0.x/stdlib/math/ceil.md new file mode 100644 index 0000000000..0019634e12 --- /dev/null +++ b/content/flux/v0.x/stdlib/math/ceil.md @@ -0,0 +1,38 @@ +--- +title: math.ceil() function +description: The math.ceil() function returns the least integer value greater than + or equal to `x`. +menu: + flux_0_x: + name: math.ceil + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/ceil/ +--- + +The `math.ceil()` function returns the least integer value greater than or equal to `x`. + +_**Output data type:** Float_ + +```js +import "math" + +math.ceil(x: 3.14) + +// Returns 4.0 +``` + +## Parameters + +### x +The value used in the operation. + +_**Data type:** Float_ + +## Special cases +```js +math.ceil(±0) // Returns ±0 +math.ceil(±Inf) // Returns ±Inf +math.ceil(NaN) // Returns NaN +``` diff --git a/content/flux/v0.x/stdlib/math/copysign.md b/content/flux/v0.x/stdlib/math/copysign.md new file mode 100644 index 0000000000..578e29ddca --- /dev/null +++ b/content/flux/v0.x/stdlib/math/copysign.md @@ -0,0 +1,36 @@ +--- +title: math.copysign() function +description: The math.copysign() function returns a value with the magnitude of `x` + and the sign of `y`. +menu: + flux_0_x: + name: math.copysign + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/copysign/ +--- + +The `math.copysign()` function returns a value with the magnitude of `x` and the sign of `y`. + +_**Output data type:** Float_ + +```js +import "math" + +math.copysign(x: 1.0, y: 2.0) + +// Returns 1.0 +``` + +## Parameters + +### x +The magnitude used in the operation. + +_**Data type:** Float_ + +### y +The sign used in the operation. + +_**Data type:** Float_ diff --git a/content/flux/v0.x/stdlib/math/cos.md b/content/flux/v0.x/stdlib/math/cos.md new file mode 100644 index 0000000000..20554e9e51 --- /dev/null +++ b/content/flux/v0.x/stdlib/math/cos.md @@ -0,0 +1,36 @@ +--- +title: math.cos() function +description: The math.cos() function returns the cosine of the radian argument `x`. +menu: + flux_0_x: + name: math.cos + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/cos/ +--- + +The `math.cos()` function returns the cosine of the radian argument `x`. + +_**Output data type:** Float_ + +```js +import "math" + +math.cos(x: 3.14) + +// Returns -0.9999987317275396 +``` + +## Parameters + +### x +The value used in the operation. + +_**Data type:** Float_ + +## Special cases +```js +math.cos(±Inf) // Returns NaN +math.cos(NaN) // Returns NaN +``` diff --git a/content/flux/v0.x/stdlib/math/cosh.md b/content/flux/v0.x/stdlib/math/cosh.md new file mode 100644 index 0000000000..5fde07568c --- /dev/null +++ b/content/flux/v0.x/stdlib/math/cosh.md @@ -0,0 +1,37 @@ +--- +title: math.cosh() function +description: The math.cosh() function returns the hyperbolic cosine of `x`. +menu: + flux_0_x: + name: math.cosh + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/cosh/ +--- + +The `math.cosh()` function returns the hyperbolic cosine of `x`. + +_**Output data type:** Float_ + +```js +import "math" + +math.cosh(x: 1.22) + +// Returns 1.8412089502726743 +``` + +## Parameters + +### x +The value used in the operation. + +_**Data type:** Float_ + +## Special cases +```js +math.cosh(±0) // Returns 1 +math.cosh(±Inf) // Returns +Inf +math.cosh(NaN) // Returns NaN +``` diff --git a/content/flux/v0.x/stdlib/math/dim.md b/content/flux/v0.x/stdlib/math/dim.md new file mode 100644 index 0000000000..57f4a657e1 --- /dev/null +++ b/content/flux/v0.x/stdlib/math/dim.md @@ -0,0 +1,43 @@ +--- +title: math.dim() function +description: The math.dim() function returns the maximum of `x`-`y` or 0. +menu: + flux_0_x: + name: math.dim + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/dim/ +--- + +The `math.dim()` function returns the maximum of `x - y` or 0. + +_**Output data type:** Float_ + +```js +import "math" + +math.dim(x: 12.2, y: 8.1) + +// Returns 4.1 +``` + +## Parameters + +### x +The X value used in the operation. + +_**Data type:** Float_ + +### y +The Y value used in the operation. + +_**Data type:** Float_ + +## Special cases +```js +math.dim(x: +Inf, y: +Inf) // Returns NaN +math.dim(x: -Inf, y: -Inf) // Returns NaN +math.dim(x:x, y : NaN) // Returns NaN +math.dim(x: NaN, y :y) // Returns NaN +``` diff --git a/content/flux/v0.x/stdlib/math/erf.md b/content/flux/v0.x/stdlib/math/erf.md new file mode 100644 index 0000000000..755994fb4a --- /dev/null +++ b/content/flux/v0.x/stdlib/math/erf.md @@ -0,0 +1,37 @@ +--- +title: math.erf() function +description: The math.erf() function returns the error function of `x`. +menu: + flux_0_x: + name: math.erf + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/erf/ +--- + +The `math.erf()` function returns the error function of `x`. + +_**Output data type:** Float_ + +```js +import "math" + +math.erf(x: 22.6) + +// Returns 1.0 +``` + +## Parameters + +### x +The value used in the operation. + +_**Data type:** Float_ + +## Special cases +```js +math.erf(+Inf) // Returns 1 +math.erf(-Inf) // Returns -1 +math.erf(NaN) // Returns NaN +``` diff --git a/content/flux/v0.x/stdlib/math/erfc.md b/content/flux/v0.x/stdlib/math/erfc.md new file mode 100644 index 0000000000..08c7ebdcb8 --- /dev/null +++ b/content/flux/v0.x/stdlib/math/erfc.md @@ -0,0 +1,38 @@ +--- +title: math.erfc() function +description: The math.erfc() function returns the complementary error function of + `x`. +menu: + flux_0_x: + name: math.erfc + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/erfc/ +--- + +The `math.erfc()` function returns the complementary error function of `x`. + +_**Output data type:** Float_ + +```js +import "math" + +math.erfc(x: 22.6) + +// Returns 3.7726189138490583e-224 +``` + +## Parameters + +### x +The value used in the operation. + +_**Data type:** Float_ + +## Special cases +```js +math.erfc(+Inf) // Returns 0 +math.erfc(-Inf) // Returns 2 +math.erfc(NaN) // Returns NaN +``` diff --git a/content/flux/v0.x/stdlib/math/erfcinv.md b/content/flux/v0.x/stdlib/math/erfcinv.md new file mode 100644 index 0000000000..bca06cc591 --- /dev/null +++ b/content/flux/v0.x/stdlib/math/erfcinv.md @@ -0,0 +1,41 @@ +--- +title: math.erfcinv() function +description: The math.erfcinv() function returns the inverse of `math.erfc()`. +menu: + flux_0_x: + name: math.erfcinv + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/erfcinv/ +--- + +The `math.erfcinv()` function returns the inverse of `math.erfc()`. + +_**Output data type:** Float_ + +```js +import "math" + +math.erfcinv(x: 0.42345) + +// Returns 0.5660037715858239 +``` + +## Parameters + +### x +The value used in the operation. +`x` should be greater than 0 and less than 2. +Otherwise, the operation will return `NaN`. + +_**Data type:** Float_ + +## Special cases +```js +math.erfcinv(x: 0) // Returns +Inf +math.erfcinv(x: 2) // Returns -Inf +math.erfcinv(x: <0) // Returns NaN +math.erfcinv(x: >2) // Returns NaN +math.erfcinv(x: NaN) // Returns NaN +``` diff --git a/content/flux/v0.x/stdlib/math/erfinv.md b/content/flux/v0.x/stdlib/math/erfinv.md new file mode 100644 index 0000000000..529d422fd4 --- /dev/null +++ b/content/flux/v0.x/stdlib/math/erfinv.md @@ -0,0 +1,41 @@ +--- +title: math.erfinv() function +description: The math.erfinv() function returns the inverse error function of `x`. +menu: + flux_0_x: + name: math.erfinv + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/erfinv/ +--- + +The `math.erfinv()` function returns the inverse error function of `x`. + +_**Output data type:** Float_ + +```js +import "math" + +math.erfinv(x: 0.22) + +// Returns 0.19750838367227364 +``` + +## Parameters + +### x +The value used in the operation. +`x` should be greater than -1 and less than 1. +Otherwise, the operation will return `NaN`. + +_**Data type:** Float_ + +## Special cases +```js +math.erfinv(x: 1) // Returns +Inf +math.erfinv(x: -1) // Returns -Inf +math.erfinv(x: <-1) // Returns NaN +math.erfinv(x: > 1) // Returns NaN +math.erfinv(x: NaN) // Returns NaN +``` diff --git a/content/flux/v0.x/stdlib/math/exp.md b/content/flux/v0.x/stdlib/math/exp.md new file mode 100644 index 0000000000..15c464b252 --- /dev/null +++ b/content/flux/v0.x/stdlib/math/exp.md @@ -0,0 +1,38 @@ +--- +title: math.exp() function +description: The math.exp() function returns `e**x`, the base-e exponential of `x`. +menu: + flux_0_x: + name: math.exp + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/exp/ +--- + +The `math.exp()` function returns `e**x`, the base-e exponential of `x`. + +_**Output data type:** Float_ + +```js +import "math" + +math.exp(x: 21.0) + +// Returns 1.3188157344832146e+09 +``` + +## Parameters + +### x +The value used in the operation. + +_**Data type:** Float_ + +## Special cases +```js +math.exp(x: +Inf) // Returns +Inf +math.exp(x: NaN) // Returns NaN +``` + +Very large values overflow to 0 or +Inf. Very small values underflow to 1. diff --git a/content/flux/v0.x/stdlib/math/exp2.md b/content/flux/v0.x/stdlib/math/exp2.md new file mode 100644 index 0000000000..ed74bbd439 --- /dev/null +++ b/content/flux/v0.x/stdlib/math/exp2.md @@ -0,0 +1,38 @@ +--- +title: math.exp2() function +description: The math.exp2() function returns `2**x`, the base-2 exponential of `x`. +menu: + flux_0_x: + name: math.exp2 + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/exp2/ +--- + +The `math.exp2()` function returns `2**x`, the base-2 exponential of `x`. + +_**Output data type:** Float_ + +```js +import "math" + +math.exp2(x: 21.0) + +// Returns 2.097152e+06 +``` + +## Parameters + +### x +The value used in the operation. + +_**Data type:** Float_ + +## Special cases +```js +math.exp2(x: +Inf) // Returns +Inf +math.exp2(x: NaN) // Returns NaN +``` + +Very large values overflow to 0 or +Inf. Very small values underflow to 1. diff --git a/content/flux/v0.x/stdlib/math/expm1.md b/content/flux/v0.x/stdlib/math/expm1.md new file mode 100644 index 0000000000..c069c5f091 --- /dev/null +++ b/content/flux/v0.x/stdlib/math/expm1.md @@ -0,0 +1,42 @@ +--- +title: math.expm1() function +description: > + The math.expm1() function returns `e**x - 1`, the base-e exponential + of `x` minus 1. It is more accurate than `math.exp(x:x) - 1` when `x` is near zero. +menu: + flux_0_x: + name: math.expm1 + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/expm1/ +--- + +The `math.expm1()` function returns `e**x - 1`, the base-e exponential of `x` minus 1. +It is more accurate than `math.exp(x:x) - 1` when `x` is near zero. + +_**Output data type:** Float_ + +```js +import "math" + +math.expm1(x: 1.22) + +// Returns 2.3871877366213643 +``` + +## Parameters + +### x +The value used in the operation. + +_**Data type:** Float_ + +## Special cases +```js +math.expm1(+Inf) // Returns +Inf +math.expm1(-Inf) // Returns -1 +math.expm1(NaN) // Returns NaN +``` + +Very large values overflow to -1 or +Inf. diff --git a/content/flux/v0.x/stdlib/math/float64bits.md b/content/flux/v0.x/stdlib/math/float64bits.md new file mode 100644 index 0000000000..a310cde0ae --- /dev/null +++ b/content/flux/v0.x/stdlib/math/float64bits.md @@ -0,0 +1,31 @@ +--- +title: math.float64bits() function +description: The math.float64bits() function returns the IEEE 754 binary representation + of `f`, with the sign bit of `f` and the result in the same bit position. +menu: + flux_0_x: + name: math.float64bits + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/float64bits/ +--- + +The `math.float64bits()` function returns the IEEE 754 binary representation of `f`, with the sign bit of `f` and the result in the same bit position. + +_**Output data type:** UInteger_ + +```js +import "math" + +math.float64bits(f: 1234.56) + +// Returns 4653144467747100426 +``` + +## Parameters + +### f +The value used in the operation. + +_**Data type:** Float_ diff --git a/content/flux/v0.x/stdlib/math/floor.md b/content/flux/v0.x/stdlib/math/floor.md new file mode 100644 index 0000000000..1dcf73207c --- /dev/null +++ b/content/flux/v0.x/stdlib/math/floor.md @@ -0,0 +1,38 @@ +--- +title: math.floor() function +description: The math.floor() function returns the greatest integer value less than + or equal to `x`. +menu: + flux_0_x: + name: math.floor + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/floor/ +--- + +The `math.floor()` function returns the greatest integer value less than or equal to `x`. + +_**Output data type:** Float_ + +```js +import "math" + +math.floor(x: 1.22) + +// Returns 1.0 +``` + +## Parameters + +### x +The value used in the operation. + +_**Data type:** Float_ + +## Special cases +```js +math.floor(±0) // Returns ±0 +math.floor(±Inf) // Returns ±Inf +math.floor(NaN) // Returns NaN +``` diff --git a/content/flux/v0.x/stdlib/math/frexp.md b/content/flux/v0.x/stdlib/math/frexp.md new file mode 100644 index 0000000000..f62c4d81b1 --- /dev/null +++ b/content/flux/v0.x/stdlib/math/frexp.md @@ -0,0 +1,42 @@ +--- +title: math.frexp() function +description: > + The math.frexp() function breaks `f` into a normalized fraction and + an integral power of two. It returns `frac` and `exp` satisfying `f == frac × 2**exp`, + with the absolute value of `frac` in the interval [½, 1). +menu: + flux_0_x: + name: math.frexp + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/frexp/ +--- + +The `math.frexp()` function breaks `f` into a normalized fraction and an integral power of two. +It returns `frac` and `exp` satisfying `f == frac × 2**exp`, with the absolute value +of `frac` in the interval `[½, 1)`. + +_**Output data type:** Object_ + +```js +import "math" + +math.frexp(f: 22.0) + +// Returns {frac: 0.6875, exp: 5} +``` + +## Parameters + +### f +The value used in the operation. + +_**Data type:** Float_ + +## Special cases +```js +math.frexp(f: ±0) // Returns {frac: ±0, exp: 0} +math.frexp(f: ±Inf) // Returns {frac: ±Inf, exp: 0} +math.frexp(f: NaN) // Returns {frac: NaN, exp: 0} +``` diff --git a/content/flux/v0.x/stdlib/math/gamma.md b/content/flux/v0.x/stdlib/math/gamma.md new file mode 100644 index 0000000000..7884b73b8e --- /dev/null +++ b/content/flux/v0.x/stdlib/math/gamma.md @@ -0,0 +1,40 @@ +--- +title: math.gamma() function +description: The math.gamma() function returns the Gamma function of `x`. +menu: + flux_0_x: + name: math.gamma + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/gamma/ +--- + +The `math.gamma()` function returns the Gamma function of `x`. + +_**Output data type:** Float_ + +```js +import "math" + +math.gamma(x: 2.12) + +// Returns 1.056821007887572 +``` + +## Parameters + +### x +The value used in the operation. + +_**Data type:** Float_ + +## Special cases +```js +math.gamma(x: +Inf) = +Inf +math.gamma(x: +0) = +Inf +math.gamma(x: -0) = -Inf +math.gamma(x: <0) = NaN for integer x < 0 +math.gamma(x: -Inf) = NaN +math.gamma(x: NaN) = NaN +``` diff --git a/content/flux/v0.x/stdlib/math/hypot.md b/content/flux/v0.x/stdlib/math/hypot.md new file mode 100644 index 0000000000..ee57b16a1e --- /dev/null +++ b/content/flux/v0.x/stdlib/math/hypot.md @@ -0,0 +1,46 @@ +--- +title: math.hypot() function +description: > + The math.hypot() function returns the square root of `p*p + q*q`, taking + care to avoid unnecessary overflow and underflow. +menu: + flux_0_x: + name: math.hypot + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/hypot/ +--- + +The `math.hypot()` function returns the square root of `p*p + q*q`, +taking care to avoid overflow and underflow. + +_**Output data type:** Float_ + +```js +import "math" + +math.hypot(p: 2.0, q: 5.0) + +// Returns 5.385164807134505 +``` + +## Parameters + +### p +The p value used in the operation. + +_**Data type:** Float_ + +### q +The q value used in the operation. + +_**Data type:** Float_ + +## Special cases +```js +math.hypot(p: ±Inf, q:q) // Returns +Inf +math.hypot(p:p, q: ±Inf) // Returns +Inf +math.hypot(p: NaN, q:q) // Returns NaN +math.hypot(p:p, q: NaN) // Returns NaN +``` diff --git a/content/flux/v0.x/stdlib/math/ilogb.md b/content/flux/v0.x/stdlib/math/ilogb.md new file mode 100644 index 0000000000..9b05b6541a --- /dev/null +++ b/content/flux/v0.x/stdlib/math/ilogb.md @@ -0,0 +1,37 @@ +--- +title: math.ilogb() function +description: The math.ilogb() function returns the binary exponent of `x` as an integer. +menu: + flux_0_x: + name: math.ilogb + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/ilogb/ +--- + +The `math.ilogb()` function returns the binary exponent of `x` as an integer. + +_**Output data type:** Integer_ + +```js +import "math" + +math.ilogb(x: 123.45) + +// Returns 6.0 +``` + +## Parameters + +### x +The value used in the operation. + +_**Data type:** Float_ + +## Special cases +```js +math.ilogb(x: ±Inf) // Returns MaxInt32 +math.ilogb(x: 0) // Returns MinInt32 +math.ilogb(x: NaN) // Returns MaxInt32 +``` diff --git a/content/flux/v0.x/stdlib/math/isinf.md b/content/flux/v0.x/stdlib/math/isinf.md new file mode 100644 index 0000000000..3245eec34f --- /dev/null +++ b/content/flux/v0.x/stdlib/math/isinf.md @@ -0,0 +1,40 @@ +--- +title: math.isInf() function +description: The math.isInf() function reports whether `f` is an infinity, according + to `sign`. +menu: + flux_0_x: + name: math.isInf + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/isinf/ +--- + +The `math.isInf()` function reports whether `f` is an infinity, according to sign. + +_**Output data type:** Boolean_ + +- If `sign > 0`, `math.isInf` reports whether `f` is positive infinity. +- If `sign < 0`, `math.isInf` reports whether `f` is negative infinity. +- If `sign == 0`, `math.isInf` reports whether `f` is either infinity. + +```js +import "math" + +math.isInf(f: 2.12, sign: 3) + +// Returns false +``` + +## Parameters + +### f +The value used in the evaluation. + +_**Data type:** Float_ + +### sign +The sign used in the evaluation. + +_**Data type:** Integer_ diff --git a/content/flux/v0.x/stdlib/math/isnan.md b/content/flux/v0.x/stdlib/math/isnan.md new file mode 100644 index 0000000000..ba6762797b --- /dev/null +++ b/content/flux/v0.x/stdlib/math/isnan.md @@ -0,0 +1,36 @@ +--- +title: math.isNaN() function +description: The math.isNaN() function reports whether `f` is an IEEE 754 “not-a-number” + value. +menu: + flux_0_x: + name: math.isNaN + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/isnan/ +--- + +The `math.isNaN()` function reports whether `f` is an IEEE 754 “not-a-number” value. + +_**Output data type:** Boolean_ + +```js +import "math" + +math.isNaN(f: 12.345) + +// Returns false +``` + +## Parameters + +### f +The value used in the evaluation. + +_**Data type:** Float_ + +## Special cases +```js + +``` diff --git a/content/flux/v0.x/stdlib/math/j0.md b/content/flux/v0.x/stdlib/math/j0.md new file mode 100644 index 0000000000..31dd883f9e --- /dev/null +++ b/content/flux/v0.x/stdlib/math/j0.md @@ -0,0 +1,38 @@ +--- +title: math.j0() function +description: The math.j0() function returns the order-zero Bessel function of the + first kind. +menu: + flux_0_x: + name: math.j0 + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/j0/ +--- + +The `math.j0()` function returns the order-zero Bessel function of the first kind. + +_**Output data type:** Float_ + +```js +import "math" + +math.j0(x: 1.23) + +// Returns 0.656070571706025 +``` + +## Parameters + +### x +The value used in the operation. + +_**Data type:** Float_ + +## Special cases +```js +math.j0(x: ±Inf) // Returns 0 +math.j0(x: 0) // Returns 1 +math.j0(x: NaN) // Returns NaN +``` diff --git a/content/flux/v0.x/stdlib/math/j1.md b/content/flux/v0.x/stdlib/math/j1.md new file mode 100644 index 0000000000..2ff81fb0ac --- /dev/null +++ b/content/flux/v0.x/stdlib/math/j1.md @@ -0,0 +1,37 @@ +--- +title: math.j1() function +description: The math.j1() function returns the order-one Bessel function of the first + kind. +menu: + flux_0_x: + name: math.j1 + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/j1/ +--- + +The `math.j1()` function returns the order-one Bessel function of the first kind. + +_**Output data type:** Float_ + +```js +import "math" + +math.j1(x: 1.23) + +// Returns 0.5058005726280961 +``` + +## Parameters + +### x +The value used in the operation. + +_**Data type:** Float_ + +## Special cases +```js +math.j1(±Inf) // Returns 0 +math.j1(NaN) // Returns NaN +``` diff --git a/content/flux/v0.x/stdlib/math/jn.md b/content/flux/v0.x/stdlib/math/jn.md new file mode 100644 index 0000000000..86ea637ec9 --- /dev/null +++ b/content/flux/v0.x/stdlib/math/jn.md @@ -0,0 +1,42 @@ +--- +title: math.jn() function +description: The math.jn() function returns the order-n Bessel function of the first + kind. +menu: + flux_0_x: + name: math.jn + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/jn/ +--- + +The `math.jn()` function returns the order-n Bessel function of the first kind. + +_**Output data type:** Float_ + +```js +import "math" + +math.jn(n: 2, x: 1.23) + +// Returns 0.16636938378681407 +``` + +## Parameters + +### n +The order number. + +_**Data type:** Integer_ + +### x +The value used in the operation. + +_**Data type:** Float_ + +## Special cases +```js +math.jn(n:n, x: ±Inf) // Returns 0 +math.jn(n:n, x: NaN) // Returns NaN +``` diff --git a/content/flux/v0.x/stdlib/math/ldexp.md b/content/flux/v0.x/stdlib/math/ldexp.md new file mode 100644 index 0000000000..bfd98f96e9 --- /dev/null +++ b/content/flux/v0.x/stdlib/math/ldexp.md @@ -0,0 +1,44 @@ +--- +title: math.ldexp() function +description: The math.ldexp() function is the inverse of `math.frexp()`. It returns + `frac × 2**exp`. +menu: + flux_0_x: + name: math.ldexp + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/ldexp/ +--- + +The `math.ldexp()` function is the inverse of [`math.frexp()`](/flux/v0.x/stdlib/math/frexp). +It returns `frac × 2**exp`. + +_**Output data type:** Float_ + +```js +import "math" + +math.ldexp(frac: 0.5, exp: 6) + +// Returns 32.0 +``` + +## Parameters + +### frac +The fraction used in the operation. + +_**Data type:** Float_ + +### exp +The exponent used in the operation. + +_**Data type:** Integer_ + +## Special cases +```js +math.ldexp(frac: ±0, exp:exp) // Returns ±0 +math.ldexp(frac: ±Inf, exp:exp) // Returns ±Inf +math.ldexp(frac: NaN, exp:exp) // Returns NaN +``` diff --git a/content/flux/v0.x/stdlib/math/lgamma.md b/content/flux/v0.x/stdlib/math/lgamma.md new file mode 100644 index 0000000000..6990e49acb --- /dev/null +++ b/content/flux/v0.x/stdlib/math/lgamma.md @@ -0,0 +1,40 @@ +--- +title: math.lgamma() function +description: The math.lgamma() function returns the natural logarithm and sign (-1 + or +1) of `math.gamma(x:x)`. +menu: + flux_0_x: + name: math.lgamma + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/lgamma/ +--- + +The `math.lgamma()` function returns the natural logarithm and sign (-1 or +1) of `math.gamma(x:x)`. + +_**Output data format:** Object_ + +```js +import "math" + +math.lgamma(x: 3.14) + +// Returns {lgamma: 0.8261387047770286, sign: 1} +``` + +## Parameters + +### x +The value used in the operation. + +_**Data type:** Float_ + +## Special cases +```js +math.lgamma(x: +Inf) // Returns +Inf +math.lgamma(x: 0) // Returns +Inf +math.lgamma(x: -integer) // Returns +Inf +math.lgamma(x: -Inf) // Returns -Inf +math.lgamma(x: NaN) // Returns NaN +``` diff --git a/content/flux/v0.x/stdlib/math/log.md b/content/flux/v0.x/stdlib/math/log.md new file mode 100644 index 0000000000..06b01ee6b9 --- /dev/null +++ b/content/flux/v0.x/stdlib/math/log.md @@ -0,0 +1,38 @@ +--- +title: math.log() function +description: The math.log() function returns the natural logarithm of `x`. +menu: + flux_0_x: + name: math.log + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/log/ +--- + +The `math.log()` function returns the natural logarithm of `x`. + +_**Output data type:** Float_ + +```js +import "math" + +math.log(x: 3.14) + +// Returns 1.144222799920162 +``` + +## Parameters + +### x +The value used in the operation. + +_**Data type:** Float_ + +## Special cases +```js +math.log(x: +Inf) // Returns +Inf +math.log(x: 0) // Returns -Inf +math.log(x: <0) // Returns NaN +math.log(x: NaN) // Returns NaN +``` diff --git a/content/flux/v0.x/stdlib/math/log10.md b/content/flux/v0.x/stdlib/math/log10.md new file mode 100644 index 0000000000..f1ce40cd89 --- /dev/null +++ b/content/flux/v0.x/stdlib/math/log10.md @@ -0,0 +1,38 @@ +--- +title: math.log10() function +description: The math.log10() function returns the decimal logarithm of `x`. +menu: + flux_0_x: + name: math.log10 + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/log10/ +--- + +The `math.log10()` function returns the decimal logarithm of `x`. + +_**Output data type:** Float_ + +```js +import "math" + +math.log10(x: 3.14) + +// Returns 0.4969296480732149 +``` + +## Parameters + +### x +The value used in the operation. + +_**Data type:** Float_ + +## Special cases +```js +math.log10(x: +Inf) // Returns +Inf +math.log10(x: 0) // Returns -Inf +math.log10(x: <0) // Returns NaN +math.log10(x: NaN) // Returns NaN +``` diff --git a/content/flux/v0.x/stdlib/math/log1p.md b/content/flux/v0.x/stdlib/math/log1p.md new file mode 100644 index 0000000000..05a7e7028f --- /dev/null +++ b/content/flux/v0.x/stdlib/math/log1p.md @@ -0,0 +1,42 @@ +--- +title: math.log1p() function +description: > + The math.log1p() function returns the natural logarithm of 1 plus its + argument `x`. It is more accurate than `math.log(x: 1 + x)` when `x` is near zero. +menu: + flux_0_x: + name: math.log1p + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/log1p/ +--- + +The `math.log1p()` function returns the natural logarithm of 1 plus its argument `x`. +It is more accurate than `math.log(x: 1 + x)` when `x` is near zero. + +_**Output data type:** Float_ + +```js +import "math" + +math.log1p(x: 0.56) + +// Returns 0.44468582126144574 +``` + +## Parameters + +### x +The value used in the operation. + +_**Data type:** Float_ + +## Special cases +```js +math.log1p(x: +Inf) // Returns +Inf +math.log1p(x: ±0) // Returns ±0 +math.log1p(x: -1) // Returns -Inf +math.log1p(x: <-1) // Returns NaN +math.log1p(x: NaN) // Returns NaN +``` diff --git a/content/flux/v0.x/stdlib/math/log2.md b/content/flux/v0.x/stdlib/math/log2.md new file mode 100644 index 0000000000..bc148e1f0e --- /dev/null +++ b/content/flux/v0.x/stdlib/math/log2.md @@ -0,0 +1,38 @@ +--- +title: math.log2() function +description: The math.log2() function returns the binary logarithm of `x`. +menu: + flux_0_x: + name: math.log2 + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/log2/ +--- + +The `math.log2()` function returns the binary logarithm of `x`. + +_**Output data type:** Float_ + +```js +import "math" + +math.log2(x: 3.14) + +// Returns 1.6507645591169022 +``` + +## Parameters + +### x +The value used in the operation. + +_**Data type:** Float_ + +## Special cases +```js +math.log2(x: +Inf) // Returns +Inf +math.log2(x: 0) // Returns -Inf +math.log2(x: <0) // Returns NaN +math.log2(x: NaN) // Returns NaN +``` diff --git a/content/flux/v0.x/stdlib/math/logb.md b/content/flux/v0.x/stdlib/math/logb.md new file mode 100644 index 0000000000..0f8ca66032 --- /dev/null +++ b/content/flux/v0.x/stdlib/math/logb.md @@ -0,0 +1,37 @@ +--- +title: math.logb() function +description: The math.logb() function returns the binary exponent of `x`. +menu: + flux_0_x: + name: math.logb + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/logb/ +--- + +The `math.logb()` function returns the binary exponent of `x`. + +_**Output data type:** Float_ + +```js +import "math" + +math.logb(x: 3.14) + +// Returns 1.0 +``` + +## Parameters + +### x +The value used in the operation. + +_**Data type:** Float_ + +## Special cases +```js +math.logb(x: ±Inf) // Returns +Inf +math.logb(x: 0) // Returns -Inf +math.logb(x: NaN) // Returns NaN +``` diff --git a/content/flux/v0.x/stdlib/math/minf.md b/content/flux/v0.x/stdlib/math/minf.md new file mode 100644 index 0000000000..db2e42418e --- /dev/null +++ b/content/flux/v0.x/stdlib/math/minf.md @@ -0,0 +1,32 @@ +--- +title: math.mInf() function +description: The math.mInf() function returns positive infinity if `sign >= 0`, negative + infinity if `sign < 0`. +menu: + flux_0_x: + name: math.mInf + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/m_inf/ + - /flux/v0.x/stdlib/math/m_inf/ +--- + +The `math.mInf()` function returns positive infinity if `sign >= 0`, negative infinity if `sign < 0`. + +_**Output data type:** Float_ + +```js +import "math" + +math.mInf(sign: 1) + +// Returns +Inf +``` + +## Parameters + +### sign +The sign value used in the operation. + +_**Data type:** Integer_ diff --git a/content/flux/v0.x/stdlib/math/mmax.md b/content/flux/v0.x/stdlib/math/mmax.md new file mode 100644 index 0000000000..d0b4d25133 --- /dev/null +++ b/content/flux/v0.x/stdlib/math/mmax.md @@ -0,0 +1,47 @@ +--- +title: math.mMax() function +description: The math.mMax() function returns the larger of `x` or `y`. +menu: + flux_0_x: + name: math.mMax + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/m_max/ + - /flux/v0.x/stdlib/math/m_max/ +--- + +The `math.mMax()` function returns the larger of `x` or `y`. + +_**Output data type:** Float_ + +```js +import "math" + +math.mMax(x: 1.23, y: 4.56) + +// Returns 4.56 +``` + +## Parameters + +### x +The X value used in the operation. + +_**Data type:** Float_ + +### y +The Y value used in the operation. + +_**Data type:** Float_ + +## Special cases +```js +math.mMax(x:x, y:+Inf) // Returns +Inf +math.mMax(x: +Inf, y:y) // Returns +Inf +math.mMax(x:x, y: NaN) // Returns NaN +math.mMax(x: NaN, y:y) // Returns NaN +math.mMax(x: +0, y: ±0) // Returns +0 +math.mMax(x: ±0, y: +0) // Returns +0 +math.mMax(x: -0, y: -0) // Returns -0 +``` diff --git a/content/flux/v0.x/stdlib/math/mmin.md b/content/flux/v0.x/stdlib/math/mmin.md new file mode 100644 index 0000000000..d1dcc7adf9 --- /dev/null +++ b/content/flux/v0.x/stdlib/math/mmin.md @@ -0,0 +1,46 @@ +--- +title: math.mMin() function +description: The math.mMin() function returns the smaller of `x` or `y`. +menu: + flux_0_x: + name: math.mMin + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/m_min/ + - /flux/v0.x/stdlib/math/m_min/ +--- + +The `math.mMin()` function returns the smaller of `x` or `y`. + +_**Output data type:** Float_ + +```js +import "math" + +math.mMin(x: 1.23, y: 4.56) + +// Returns 1.23 +``` + +## Parameters + +### x +The X value used in the operation. + +_**Data type:** Float_ + +### y +The Y value used in the operation. + +_**Data type:** Float_ + +## Special cases +```js +math.mMin(x:x, y: -Inf) // Returns -Inf +math.mMin(x: -Inf, y:y) // Returns -Inf +math.mMin(x:x, y: NaN) // Returns NaN +math.mMin(x: NaN, y:y) // Returns NaN +math.mMin(x: -0, y: ±0) // Returns -0 +math.mMin(x: ±0, y: -0) // Returns -0 +``` diff --git a/content/flux/v0.x/stdlib/math/mod.md b/content/flux/v0.x/stdlib/math/mod.md new file mode 100644 index 0000000000..4c6385fbfc --- /dev/null +++ b/content/flux/v0.x/stdlib/math/mod.md @@ -0,0 +1,47 @@ +--- +title: math.mod() function +description: > + The math.mod() function returns the floating-point remainder of `x`/`y`. + The magnitude of the result is less than `y` and its sign agrees with that of `x`. +menu: + flux_0_x: + name: math.mod + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/mod/ +--- + +The `math.mod()` function returns the floating-point remainder of `x`/`y`. +The magnitude of the result is less than `y` and its sign agrees with that of `x`. + +_**Output data type:** Float_ + +```js +import "math" + +math.mod(x: 1.23, y: 4.56) + +// Returns 1.23 +``` + +## Parameters + +### x +The X value used in the operation. + +_**Data type:** Float_ + +### y +The Y value used in the operation. + +_**Data type:** Float_ + +## Special cases +```js +math.mod(x: ±Inf, y:y) // Returns NaN +math.mod(x: NaN, y:y) // Returns NaN +math.mod(x:x, y: 0) // Returns NaN +math.mod(x:x, y: ±Inf) // Returns x +math.mod(x:x, y: NaN) // Returns NaN +``` diff --git a/content/flux/v0.x/stdlib/math/modf.md b/content/flux/v0.x/stdlib/math/modf.md new file mode 100644 index 0000000000..ac22e2faaa --- /dev/null +++ b/content/flux/v0.x/stdlib/math/modf.md @@ -0,0 +1,39 @@ +--- +title: math.modf() function +description: > + The math.modf() function returns integer and fractional floating-point + numbers that sum to `f`. Both values have the same sign as `f`. +menu: + flux_0_x: + name: math.modf + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/modf/ +--- + +The `math.modf()` function returns integer and fractional floating-point numbers that sum to `f`. +Both values have the same sign as `f`. + +_**Output data format:** Object_ + +```js +import "math" + +math.modf(x: 3.14) + +// Returns {int: 3, frac: 0.14000000000000012} +``` + +## Parameters + +### x +The value used in the operation. + +_**Data type:** Float_ + +## Special cases +```js +math.modf(x: ±Inf) // Returns {int: ±Inf, frac: NaN} +math.modf(x: NaN) // Returns {int: NaN, frac: NaN} +``` diff --git a/content/flux/v0.x/stdlib/math/nan.md b/content/flux/v0.x/stdlib/math/nan.md new file mode 100644 index 0000000000..d134f42a99 --- /dev/null +++ b/content/flux/v0.x/stdlib/math/nan.md @@ -0,0 +1,21 @@ +--- +title: math.NaN() function +description: The math.NaN() function returns an IEEE 754 “not-a-number” value. +menu: + flux_0_x: + name: math.NaN + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/nan/ +--- + +The `math.NaN()` function returns an IEEE 754 “not-a-number” value. + +```js +import "math" + +math.NaN() + +// Returns NaN +``` diff --git a/content/flux/v0.x/stdlib/math/nextafter.md b/content/flux/v0.x/stdlib/math/nextafter.md new file mode 100644 index 0000000000..d9f81affbd --- /dev/null +++ b/content/flux/v0.x/stdlib/math/nextafter.md @@ -0,0 +1,43 @@ +--- +title: math.nextafter() function +description: The math.nextafter() function returns the next representable float value + after `x` towards `y`. +menu: + flux_0_x: + name: math.nextafter + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/nextafter/ +--- + +The `math.nextafter()` function returns the next representable float value after `x` towards `y`. + +_**Output data type:** Float_ + +```js +import "math" + +math.nextafter(x: 1.23, y: 4.56) + +// Returns 1.2300000000000002 +``` + +## Parameters + +### x +The X value used in the operation. + +_**Data type:** Float_ + +### y +The Y value used in the operation. + +_**Data type:** Float_ + +## Special cases +```js +math.nextafter(x:x, y:x) // Returns x +math.nextafter(x: NaN, y:y) // Returns NaN +math.nextafter(x:x, y:NaN) // Returns NaN +``` diff --git a/content/flux/v0.x/stdlib/math/pow.md b/content/flux/v0.x/stdlib/math/pow.md new file mode 100644 index 0000000000..72b86a24d0 --- /dev/null +++ b/content/flux/v0.x/stdlib/math/pow.md @@ -0,0 +1,60 @@ +--- +title: math.pow() function +description: The math.pow() function returns `x**y`, the base-x exponential of y. +menu: + flux_0_x: + name: math.pow + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/pow/ +--- + +The `math.pow()` function returns `x**y`, the base-x exponential of y. + +_**Output data type:** Float_ + +```js +import "math" + +math.pow(x: 2.0, y: 3.0) + +// Returns 8.0 +``` + +## Parameters + +### x +The X value used in the operation. + +_**Data type:** Float_ + +### y +The Y value used in the operation. + +_**Data type:** Float_ + +## Special cases +```js +// In order of priority +math.pow(x:x, y:±0) // Returns 1 for any x +math.pow(x:1, y:y) // Returns 1 for any y +math.pow(x:X, y:1) // Returns x for any x +math.pow(x:NaN, y:y) // Returns NaN +math.pow(x:x, y:NaN) // Returns NaN +math.pow(x:±0, y:y) // Returns ±Inf for y an odd integer < 0 +math.pow(x:±0, y:-Inf) // Returns +Inf +math.pow(x:±0, y:+Inf) // Returns +0 +math.pow(x:±0, y:y) // Returns +Inf for finite y < 0 and not an odd integer +math.pow(x:±0, y:y) // Returns ±0 for y an odd integer > 0 +math.pow(x:±0, y:y) // Returns +0 for finite y > 0 and not an odd integer +math.pow(x:-1, y:±Inf) // Returns 1 +math.pow(x:x, y:+Inf) // Returns +Inf for |x| > 1 +math.pow(x:x, y:-Inf) // Returns +0 for |x| > 1 +math.pow(x:x, y:+Inf) // Returns +0 for |x| < 1 +math.pow(x:x, y:-Inf) // Returns +Inf for |x| < 1 +math.pow(x:+Inf, y:y) // Returns +Inf for y > 0 +math.pow(x:+Inf, y:y) // Returns +0 for y < 0 +math.pow(x:-Inf, y:y) // Returns math.pow(-0, -y) +math.pow(x:x, y:y) // Returns NaN for finite x < 0 and finite non-integer y +``` diff --git a/content/flux/v0.x/stdlib/math/pow10.md b/content/flux/v0.x/stdlib/math/pow10.md new file mode 100644 index 0000000000..6f08aaeb1d --- /dev/null +++ b/content/flux/v0.x/stdlib/math/pow10.md @@ -0,0 +1,37 @@ +--- +title: math.pow10() function +description: The math.pow10() function returns `10**n`, the base-10 exponential of + `n`. +menu: + flux_0_x: + name: math.pow10 + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/pow10/ +--- + +The `math.pow10()` function returns `10**n`, the base-10 exponential of `n`. + +_**Output data type:** Float_ + +```js +import "math" + +math.pow10(n: 3) + +// Returns 1000 +``` + +## Parameters + +### n +The value used in the operation. + +_**Data type:** Integer_ + +## Special cases +```js +math.pow10(n: <-323) // Returns 0 +math.pow10(n: >308) // Returns +Inf +``` diff --git a/content/flux/v0.x/stdlib/math/remainder.md b/content/flux/v0.x/stdlib/math/remainder.md new file mode 100644 index 0000000000..cf346d118e --- /dev/null +++ b/content/flux/v0.x/stdlib/math/remainder.md @@ -0,0 +1,45 @@ +--- +title: math.remainder() function +description: The math.remainder() function returns the IEEE 754 floating-point remainder + of `x / y`. +menu: + flux_0_x: + name: math.remainder + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/remainder/ +--- + +The `math.remainder()` function returns the IEEE 754 floating-point remainder of `x / y`. + +_**Output data type:** Float_ + +```js +import "math" + +math.remainder(x: 21.0, y: 4.0) + +// Returns 1.0 +``` + +## Parameters + +### x +The numerator used in the operation. + +_**Data type:** Float_ + +### x +The denominator used in the operation. + +_**Data type:** Float_ + +## Special cases +```js +math.remainder(x: ±Inf, y:y) // Returns NaN +math.remainder(x: NaN, y:y) // Returns NaN +math.remainder(x:x, y: 0) // Returns NaN +math.remainder(x:x, y: ±Inf) // Returns x +math.remainder(x:x, y: NaN) // Returns NaN +``` diff --git a/content/flux/v0.x/stdlib/math/round.md b/content/flux/v0.x/stdlib/math/round.md new file mode 100644 index 0000000000..5390725b3e --- /dev/null +++ b/content/flux/v0.x/stdlib/math/round.md @@ -0,0 +1,38 @@ +--- +title: math.round() function +description: The math.round() function returns the nearest integer, rounding half + away from zero. +menu: + flux_0_x: + name: math.round + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/round/ +--- + +The `math.round()` function returns the nearest integer, rounding half away from zero. + +_**Output data type:** Float_ + +```js +import "math" + +math.round(x: 2.12) + +// Returns 2.0 +``` + +## Parameters + +### x +The value used in the operation. + +_**Data type:** Float_ + +## Special cases +```js +math.round(x: ±0) // Returns ±0 +math.round(x: ±Inf) // Returns ±Inf +math.round(x: NaN) // Returns NaN +``` diff --git a/content/flux/v0.x/stdlib/math/roundtoeven.md b/content/flux/v0.x/stdlib/math/roundtoeven.md new file mode 100644 index 0000000000..9f62adc978 --- /dev/null +++ b/content/flux/v0.x/stdlib/math/roundtoeven.md @@ -0,0 +1,40 @@ +--- +title: math.roundtoeven() function +description: The math.roundtoeven() function returns the nearest integer, rounding + ties to even. +menu: + flux_0_x: + name: math.roundtoeven + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/roundtoeven/ +--- + +The `math.roundtoeven()` function returns the nearest integer, rounding ties to even. + +_**Output data type:** Float_ + +```js +import "math" + +math.roundtoeven(x: 3.14) +// Returns 3.0 + +math.roundtoeven(x: 3.5) +// Returns 4.0 +``` + +## Parameters + +### x +The value used in the operation. + +_**Data type:** Float_ + +## Special cases +```js +math.roundtoeven(x: ±0) // Returns ±0 +math.roundtoeven(x: ±Inf) // Returns ±Inf +math.roundtoeven(x: NaN) // Returns NaN +``` diff --git a/content/flux/v0.x/stdlib/math/signbit.md b/content/flux/v0.x/stdlib/math/signbit.md new file mode 100644 index 0000000000..056c62a43f --- /dev/null +++ b/content/flux/v0.x/stdlib/math/signbit.md @@ -0,0 +1,31 @@ +--- +title: math.signbit() function +description: The math.signbit() function reports whether `x` is negative or negative + zero. +menu: + flux_0_x: + name: math.signbit + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/signbit/ +--- + +The `math.signbit()` function reports whether `x` is negative or negative zero. + +_**Output data type:** Boolean_ + +```js +import "math" + +math.signbit(x: -1.2) + +// Returns true +``` + +## Parameters + +### x +The value used in the operation. + +_**Data type:** Float_ diff --git a/content/flux/v0.x/stdlib/math/sin.md b/content/flux/v0.x/stdlib/math/sin.md new file mode 100644 index 0000000000..7ebe9a4674 --- /dev/null +++ b/content/flux/v0.x/stdlib/math/sin.md @@ -0,0 +1,37 @@ +--- +title: math.sin() function +description: The math.sin() function returns the sine of the radian argument `x`. +menu: + flux_0_x: + name: math.sin + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/sin/ +--- + +The `math.sin()` function returns the sine of the radian argument `x`. + +_**Output data type:** Float_ + +```js +import "math" + +math.sin(x: 3.14) + +// Returns 0.0015926529164868282 +``` + +## Parameters + +### x +The radian value used in the operation. + +_**Data type:** Float_ + +## Special cases +```js +math.sin(x: ±0) // Returns ±0 +math.sin(x: ±Inf) // Returns NaN +math.sin(x: NaN) // Returns NaN +``` diff --git a/content/flux/v0.x/stdlib/math/sincos.md b/content/flux/v0.x/stdlib/math/sincos.md new file mode 100644 index 0000000000..1d7617f679 --- /dev/null +++ b/content/flux/v0.x/stdlib/math/sincos.md @@ -0,0 +1,38 @@ +--- +title: math.sincos() function +description: The math.sincos() function returns the values of `math.sin(x:x)` and + `math.cos(x:x)`. +menu: + flux_0_x: + name: math.sincos + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/sincos/ +--- + +The `math.sincos()` function returns the values of `math.sin(x:x)` and `math.cos(x:x)`. + +_**Output data format:** Object_ + +```js +import "math" + +math.sincos(x: 1.23) + +// Returns {sin: 0.9424888019316975, cos: 0.3642377271245026} +``` + +## Parameters + +### x +The value used in the operation. + +_**Data type:** Float_ + +## Special cases +```js +math.sincos(x: ±0) // Returns {sin: ±0, cos: 1} +math.sincos(x: ±Inf) // Returns {sin: NaN, cos: NaN} +math.sincos(x: NaN) // Returns {sin: NaN, cos: NaN} +``` diff --git a/content/flux/v0.x/stdlib/math/sinh.md b/content/flux/v0.x/stdlib/math/sinh.md new file mode 100644 index 0000000000..dbe0619af7 --- /dev/null +++ b/content/flux/v0.x/stdlib/math/sinh.md @@ -0,0 +1,37 @@ +--- +title: math.sinh() function +description: The math.sinh() function returns the hyperbolic sine of `x`. +menu: + flux_0_x: + name: math.sinh + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/sinh/ +--- + +The `math.sinh()` function returns the hyperbolic sine of `x`. + +_**Output data type:** Float_ + +```js +import "math" + +math.sinh(x: 1.23) + +// Returns 1.564468479304407 +``` + +## Parameters + +### x +The value used in the operation. + +_**Data type:** Float_ + +## Special cases +```js +math.sinh(x: ±0) // Returns ±0 +math.sinh(x: ±Inf) // Returns ±Inf +math.sinh(x: NaN) // Returns NaN +``` diff --git a/content/flux/v0.x/stdlib/math/sqrt.md b/content/flux/v0.x/stdlib/math/sqrt.md new file mode 100644 index 0000000000..b61c36e49c --- /dev/null +++ b/content/flux/v0.x/stdlib/math/sqrt.md @@ -0,0 +1,38 @@ +--- +title: math.sqrt() function +description: The math.sqrt() function returns the square root of `x`. +menu: + flux_0_x: + name: math.sqrt + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/sqrt/ +--- + +The `math.sqrt()` function returns the square root of `x`. + +_**Output data type:** Float_ + +```js +import "math" + +math.sqrt(x: 4.0) + +// Returns 2.0 +``` + +## Parameters + +### x +The value used in the operation. + +_**Data type:** Float_ + +## Special cases +```js +math.sqrt(x: +Inf) // Returns +Inf +math.sqrt(x: ±0) // Returns ±0 +math.sqrt(x: <0) // Returns NaN +math.sqrt(x: NaN) // Returns NaN +``` diff --git a/content/flux/v0.x/stdlib/math/tan.md b/content/flux/v0.x/stdlib/math/tan.md new file mode 100644 index 0000000000..7e4d795309 --- /dev/null +++ b/content/flux/v0.x/stdlib/math/tan.md @@ -0,0 +1,37 @@ +--- +title: math.tan() function +description: The math.tan() function returns the tangent of the radian argument `x`. +menu: + flux_0_x: + name: math.tan + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/tan/ +--- + +The `math.tan()` function returns the tangent of the radian argument `x`. + +_**Output data type:** Float_ + +```js +import "math" + +math.tan(x: 3.14) + +// Returns -0.001592654936407223 +``` + +## Parameters + +### x +The value used in the operation. + +_**Data type:** Float_ + +## Special cases +```js +math.tan(x: ±0) // Returns ±0 +math.tan(x: ±Inf) // Returns NaN +math.tan(x: NaN) // Returns NaN +``` diff --git a/content/flux/v0.x/stdlib/math/tanh.md b/content/flux/v0.x/stdlib/math/tanh.md new file mode 100644 index 0000000000..78d5b54641 --- /dev/null +++ b/content/flux/v0.x/stdlib/math/tanh.md @@ -0,0 +1,37 @@ +--- +title: math.tanh() function +description: The math.tanh() function returns the hyperbolic tangent of `x`. +menu: + flux_0_x: + name: math.tanh + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/tanh/ +--- + +The `math.tanh()` function returns the hyperbolic tangent of `x`. + +_**Output data type:** Float_ + +```js +import "math" + +math.tanh(x: 1.23) + +// Returns 0.8425793256589296 +``` + +## Parameters + +### x +The value used in the operation. + +_**Data type:** Float_ + +## Special cases +```js +math.tanh(x: ±0) // Returns ±0 +math.tanh(x: ±Inf) // Returns ±1 +math.tanh(x: NaN) // Returns NaN +``` diff --git a/content/flux/v0.x/stdlib/math/trunc.md b/content/flux/v0.x/stdlib/math/trunc.md new file mode 100644 index 0000000000..dfc6396e09 --- /dev/null +++ b/content/flux/v0.x/stdlib/math/trunc.md @@ -0,0 +1,37 @@ +--- +title: math.trunc() function +description: The math.trunc() function returns the integer value of `x`. +menu: + flux_0_x: + name: math.trunc + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/trunc/ +--- + +The `math.trunc()` function returns the integer value of `x`. + +_**Output data type:** Float_ + +```js +import "math" + +math.trunc(x: 3.14) + +// Returns 3.0 +``` + +## Parameters + +### x +The value used in the operation. + +_**Data type:** Float_ + +## Special cases +```js +math.trunc(x: ±0) // Returns ±0 +math.trunc(x: ±Inf) // Returns ±Inf +math.trunc(x: NaN) // Returns NaN +``` diff --git a/content/flux/v0.x/stdlib/math/y0.md b/content/flux/v0.x/stdlib/math/y0.md new file mode 100644 index 0000000000..365aa7a3b7 --- /dev/null +++ b/content/flux/v0.x/stdlib/math/y0.md @@ -0,0 +1,39 @@ +--- +title: math.y0() function +description: The math.y0() function returns the order-zero Bessel function of the + second kind. +menu: + flux_0_x: + name: math.y0 + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/y0/ +--- + +The `math.y0()` function returns the order-zero Bessel function of the second kind. + +_**Output data type:** Float_ + +```js +import "math" + +math.y0(x: 3.14) + +// Returns 0.3289375969127807 +``` + +## Parameters + +### x +The value used in the operation. + +_**Data type:** Float_ + +## Special cases +```js +math.y0(x: +Inf) // Returns 0 +math.y0(x: 0) // Returns -Inf +math.y0(x: <0) // Returns NaN +math.y0(x: NaN) // Returns NaN +``` diff --git a/content/flux/v0.x/stdlib/math/y1.md b/content/flux/v0.x/stdlib/math/y1.md new file mode 100644 index 0000000000..6981e85861 --- /dev/null +++ b/content/flux/v0.x/stdlib/math/y1.md @@ -0,0 +1,39 @@ +--- +title: math.y1() function +description: The math.y1() function returns the order-one Bessel function of the second + kind. +menu: + flux_0_x: + name: math.y1 + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/y1/ +--- + +The `math.y1()` function returns the order-one Bessel function of the second kind. + +_**Output data type:** Float_ + +```js +import "math" + +math.y1(x: 3.14) + +// Returns 0.35853138083924085 +``` + +## Parameters + +### x +The value used in the operation. + +_**Data type:** Float_ + +## Special cases +```js +math.y1(x: +Inf) // Returns 0 +math.y1(x: 0) // Returns -Inf +math.y1(x: <0) // Returns NaN +math.y1(x: NaN) // Returns NaN +``` diff --git a/content/flux/v0.x/stdlib/math/yn.md b/content/flux/v0.x/stdlib/math/yn.md new file mode 100644 index 0000000000..35173853c4 --- /dev/null +++ b/content/flux/v0.x/stdlib/math/yn.md @@ -0,0 +1,45 @@ +--- +title: math.yn() function +description: The math.yn() function returns the order-n Bessel function of the second + kind. +menu: + flux_0_x: + name: math.yn + parent: Math +weight: 1 +aliases: + - /flux/v0.x/functions/math/yn/ +--- + +The `math.yn()` function returns the order-n Bessel function of the second kind. + +_**Output data type:** Float_ + +```js +import "math" + +math.yn(n: 3, x: 3.14) + +// Returns -0.4866506930365083 +``` + +## Parameters + +### n +The order number used in the operation. + +_**Data type:** Integer_ + +### x +The value used in the operation. + +_**Data type:** Float_ + +## Special cases +```js +math.yn(n:n, x: +Inf) // Returns 0 +math.yn(n: ≥0, x: 0) // Returns -Inf +math.yn(n: <0, x: 0) // Returns +Inf if n is odd, -Inf if n is even +math.yn(n:n, x: <0) // Returns NaN +math.yn(n:n, x:NaN) // Returns NaN +``` diff --git a/content/flux/v0.x/stdlib/mqtt/_index.md b/content/flux/v0.x/stdlib/mqtt/_index.md new file mode 100644 index 0000000000..b97f0dcbf2 --- /dev/null +++ b/content/flux/v0.x/stdlib/mqtt/_index.md @@ -0,0 +1,23 @@ +--- +title: Flux MQTT package +description: > + The Flux MQTT package provides functions for working with MQTT protocol. + Import the `mqtt` package. +menu: + flux_0_x: + name: MQTT + parent: Standard library + weight: 1 +draft: true +aliases: + - /flux/v0.x/functions/mqtt/ +--- + +MQTT Flux functions provide tools for working with Message Queuing Telemetry Transport (MQTT) protocol. +Import the `mqtt` package: + +```js +import "mqtt" +``` + +{{< function-list >}} diff --git a/content/flux/v0.x/stdlib/mqtt/to.md b/content/flux/v0.x/stdlib/mqtt/to.md new file mode 100644 index 0000000000..796fd0a492 --- /dev/null +++ b/content/flux/v0.x/stdlib/mqtt/to.md @@ -0,0 +1,131 @@ +--- +title: mqtt.to() function +description: > + The `mqtt.to()` function outputs data to an MQTT broker using MQTT protocol. +menu: + flux_0_x: + name: mqtt.to + parent: MQTT + weight: 1 +draft: true +aliases: + - /flux/v0.x/functions/mqtt/to/ +--- + +The `mqtt.to()` function outputs data to an MQTT broker using MQTT protocol. + +_**Function type:** Output_ + +```js +import "mqtt" +mqtt.to( + broker: "tcp://localhost:8883", + topic: "example-topic", + message: "Example message", + qos: 0, + clientid: "flux-mqtt", + username: "username", + password: "password", + name: "name-example", + timeout: 1s, + timeColumn: "_time", + tagColumns: ["tag1", "tag2"], + valueColumns: ["_value"] +) +``` + +## Parameters + +### broker +The MQTT broker connection string. + +_**Data type:** String_ + +### topic +The MQTT topic to send data to. + +_**Data type:** String_ + +### message +The message or payload to send to the MQTT broker. +The default payload is an output table. +If there are multiple output tables, it sends each table as a separate MQTT message. + +{{% note %}} +When you specify a message, the function sends the message string only (no output table). +{{% /note %}} + +_**Data type:** String_ + +### qos +The [MQTT Quality of Service (QoS)](https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901103) level. +Values range from `[0-2]`. +Default is `0`. + +_**Data type:** Integer_ + +### clientid +The MQTT client ID. + +_**Data type:** String_ + +### username +The username to send to the MQTT broker. +Username is only required if the broker requires authentication. +If you provide a username, you must provide a [password](#password). + +_**Data type:** String_ + +### password +The password to send to the MQTT broker. +Password is only required if the broker requires authentication. +If you provide a password, you must provide a [username](#username). + +_**Data type:** String_ + +### name +_(Optional)_ The name for the MQTT message. + +_**Data type:** String_ + +### timeout +The MQTT connection timeout. +Default is `1s`. + +_**Data type:** Duration_ + +### timeColumn +The column to use as time values in the output line protocol. +Default is `"_time"`. + +_**Data type:** String_ + +### tagColumns +The columns to use as tag sets in the output line protocol. +Default is `[]`. + +_**Data type:** Array of strings_ + +### valueColumns +The columns to use as field values in the output line protocol. +Default is `["_value"]`. + +_**Data type:** Array of strings_ + +## Examples + +### Send data to an MQTT endpoint +```js +import "mqtt" + +from(bucket: "telegraf/autogen") + |> range(start: -5m) + |> filter(fn: (r) => r._measurement == "airSensor") + |> mqtt.to( + broker: "tcp://localhost:8883", + topic: "air-sensors", + clientid: "sensor-12a4", + tagColumns: ["sensorID"], + valueColumns: ["_value"] + ) +``` diff --git a/content/flux/v0.x/stdlib/regexp/_index.md b/content/flux/v0.x/stdlib/regexp/_index.md new file mode 100644 index 0000000000..0884e5cfb6 --- /dev/null +++ b/content/flux/v0.x/stdlib/regexp/_index.md @@ -0,0 +1,23 @@ +--- +title: Flux regular expressions package +description: > + The Flux regular expressions package includes functions that provide + enhanced regular expression functionality. Import the `regexp` package. +menu: + flux_0_x: + name: Regular expressions + identifier: regexp-package + parent: Standard library +weight: 1 +aliases: + - /flux/v0.x/functions/regexp/ +--- + +The Flux regular expressions package includes functions that provide enhanced +regular expression functionality. Import the `regexp` package. + +```js +import "regexp" +``` + +{{< function-list >}} diff --git a/content/flux/v0.x/stdlib/regexp/compile.md b/content/flux/v0.x/stdlib/regexp/compile.md new file mode 100644 index 0000000000..aabfab3900 --- /dev/null +++ b/content/flux/v0.x/stdlib/regexp/compile.md @@ -0,0 +1,52 @@ +--- +title: regexp.compile() function +description: > + The `regexp.compile()` function parses a regular expression and, if + successful, returns a Regexp object that can be used to match against text. +menu: + flux_0_x: + name: regexp.compile + parent: regexp-package + weight: 1 +aliases: + - /flux/v0.x/functions/regexp/compile/ +--- + +The `regexp.compile()` function parses a regular expression and, if successful, +returns a Regexp object that can be used to match against text. + +_**Output data type:** Regexp_ + +```js +import "regexp" + +regexp.compile(v: "abcd") + +// Returns the regexp object `abcd` +``` + +## Parameters + +### v +The string value to parse into a regular expression. + +_**Data type:** String_ + +## Examples + +###### Use a string value as a regular expression +```js +import "regexp" + +data + |> map(fn: (r) => ({ + r with + regexStr: r.regexStr, + _value: r._value, + firstRegexMatch: findString( + r: regexp.compile(v: regexStr), + v: r._value + ) + }) + ) +``` diff --git a/content/flux/v0.x/stdlib/regexp/findstring.md b/content/flux/v0.x/stdlib/regexp/findstring.md new file mode 100644 index 0000000000..fe759ead86 --- /dev/null +++ b/content/flux/v0.x/stdlib/regexp/findstring.md @@ -0,0 +1,52 @@ +--- +title: regexp.findString() function +description: The `regexp.findString()` function returns the left-most regular expression + match in a string. +menu: + flux_0_x: + name: regexp.findString + parent: regexp-package + weight: 1 +aliases: + - /flux/v0.x/functions/regexp/findstring/ +--- + +The `regexp.findString()` function returns the left-most regular expression match in a string. + +_**Output data type:** String_ + +```js +import "regexp" + +findString(r: /foo.?/, v: "seafood fool") + +// Returns "food" +``` + +## Parameters + +### r +The regular expression used to search `v`. + +_**Data type:** Regexp_ + +### v +The string value to search. + +_**Data type:** String_ + +## Examples + +###### Find the first regular expression match in each row +```js +import "regexp" + +data + |> map(fn: (r) => ({ + r with + message: r.message, + regexp: r.regexp, + match: regexp.findString(r: r.regexp, v: r.message) + }) + ) +``` diff --git a/content/flux/v0.x/stdlib/regexp/findstringindex.md b/content/flux/v0.x/stdlib/regexp/findstringindex.md new file mode 100644 index 0000000000..1229ca3c45 --- /dev/null +++ b/content/flux/v0.x/stdlib/regexp/findstringindex.md @@ -0,0 +1,58 @@ +--- +title: regexp.findStringIndex() function +description: > + The `regexp.findStringIndex()` function returns a two-element array + of integers defining the beginning and ending indexes of the left-most regular expression + match in a string. +menu: + flux_0_x: + name: regexp.findStringIndex + parent: regexp-package + weight: 1 +aliases: + - /flux/v0.x/functions/regexp/findstringindex/ +--- + +The `regexp.findStringIndex()` function returns a two-element array of integers defining +the beginning and ending indexes of the left-most regular expression match in a string. + +_**Output data type:** Array of Integers_ + +```js +import "regexp" + +regexp.findStringIndex(r: /ab?/, v: "tablet") + +// Returns [1, 3] +``` + +## Parameters + +### r +The regular expression used to search `v`. + +_**Data type:** Regexp_ + +### v +The string value to search. + +_**Data type:** String_ + +## Examples + +###### Index the bounds of first regular expression match in each row +```js +import "regexp" + +data + |> map(fn: (r) => ({ + r with + regexStr: r.regexStr, + _value: r._value, + matchIndex: regexp.findStringIndex( + r: regexp.compile(r.regexStr), + v: r._value + ) + }) + ) +``` diff --git a/content/flux/v0.x/stdlib/regexp/getstring.md b/content/flux/v0.x/stdlib/regexp/getstring.md new file mode 100644 index 0000000000..95b391e508 --- /dev/null +++ b/content/flux/v0.x/stdlib/regexp/getstring.md @@ -0,0 +1,46 @@ +--- +title: regexp.getString() function +description: The `regexp.getString()` function returns the source string used to compile + a regular expression. +menu: + flux_0_x: + name: regexp.getString + parent: regexp-package + weight: 1 +aliases: + - /flux/v0.x/functions/regexp/getstring/ +--- + +The `regexp.getString()` function returns the source string used to compile a regular expression. + +_**Output data type:** String_ + +```js +import "regexp" + +regexp.getString(r: /[a-zA-Z]/) + +// Returns "[a-zA-Z]" +``` + +## Parameters + +### r +The regular expression object to convert to a string. + +_**Data type:** Regexp_ + +## Examples + +###### Convert regular expressions into strings in each row +```js +import "regexp" + +data + |> map(fn: (r) => ({ + r with + regex: r.regex, + regexStr: regexp.getString(r: r.regex) + }) + ) +``` diff --git a/content/flux/v0.x/stdlib/regexp/matchregexpstring.md b/content/flux/v0.x/stdlib/regexp/matchregexpstring.md new file mode 100644 index 0000000000..37bcd91eaf --- /dev/null +++ b/content/flux/v0.x/stdlib/regexp/matchregexpstring.md @@ -0,0 +1,53 @@ +--- +title: regexp.matchRegexpString() function +description: > + The `regexp.matchRegexpString()` function tests if a string contains + any match to a regular expression. +menu: + flux_0_x: + name: regexp.matchRegexpString + parent: regexp-package + weight: 1 +aliases: + - /flux/v0.x/functions/regexp/matchregexpstring/ +--- + +The `regexp.matchRegexpString()` function tests if a string contains any match +to a regular expression. + +_**Output data type:** Boolean_ + +```js +import "regexp" + +regexp.matchRegexpString(r: /(gopher){2}/, v: "gophergophergopher") + +// Returns true +``` + +## Parameters + +### r +The regular expression used to search `v`. + +_**Data type:** Regexp_ + +### v +The string value to search. + +_**Data type:** String_ + +## Examples + +###### Filter by columns that contain matches to a regular expression +```js +import "regexp" + +data + |> filter(fn: (r) => + regexp.matchRegexpString( + r: /Alert\:/, + v: r.message + ) + ) +``` diff --git a/content/flux/v0.x/stdlib/regexp/quotemeta.md b/content/flux/v0.x/stdlib/regexp/quotemeta.md new file mode 100644 index 0000000000..ac4d3d8812 --- /dev/null +++ b/content/flux/v0.x/stdlib/regexp/quotemeta.md @@ -0,0 +1,47 @@ +--- +title: regexp.quoteMeta() function +description: > + The `regexp.quoteMeta()` function escapes all regular expression metacharacters + inside of a string. +menu: + flux_0_x: + name: regexp.quoteMeta + parent: regexp-package + weight: 1 +aliases: + - /flux/v0.x/functions/regexp/quotemeta/ +--- + +The `regexp.quoteMeta()` function escapes all regular expression metacharacters inside of a string. + +_**Output data type:** String_ + +```js +import "regexp" + +regexp.quoteMeta(v: ".+*?()|[]{}^$") + +// Returns "\.\+\*\?\(\)\|\[\]\{\}\^\$" +``` + +## Parameters + +### v +The string that contains regular expression metacharacters to escape. + +_**Data type:** String_ + +## Examples + +###### Escape regular expression meta characters in column values +```js +import "regexp" + +data + |> map(fn: (r) => ({ + r with + notes: r.notes, + notes_escaped: regexp.quoteMeta(v: r.notes) + }) + ) +``` diff --git a/content/flux/v0.x/stdlib/regexp/replaceallstring.md b/content/flux/v0.x/stdlib/regexp/replaceallstring.md new file mode 100644 index 0000000000..4f02612ee9 --- /dev/null +++ b/content/flux/v0.x/stdlib/regexp/replaceallstring.md @@ -0,0 +1,61 @@ +--- +title: regexp.replaceAllString() function +description: > + The `regexp.replaceAllString()` function replaces all regular expression + matches in a string with a specified replacement. +menu: + flux_0_x: + name: regexp.replaceAllString + parent: regexp-package + weight: 1 +aliases: + - /flux/v0.x/functions/regexp/replaceallstring/ +--- + +The `regexp.replaceAllString()` function replaces all regular expression matches +in a string with a specified replacement. + +_**Output data type:** String_ + +```js +import "regexp" + +regexp.replaceAllString(r: /a(x*)b/, v: "-ab-axxb-", t: "T") + +// Returns "-T-T-" +``` + +## Parameters + +### r +The regular expression used to search `v`. + +_**Data type:** Regexp_ + +### v +The string value to search. + +_**Data type:** String_ + +### t +The replacement for matches to `r`. + +_**Data type:** String_ + +## Examples + +###### Replace regular expression matches in string column values +```js +import "regexp" + +data + |> map(fn: (r) => ({ + r with + message: r.message, + updated_message: regexp.replaceAllString( + r: /cat|bird|ferret/, + v: r.message, + t: "dog" + ) + })) +``` diff --git a/content/flux/v0.x/stdlib/regexp/splitregexp.md b/content/flux/v0.x/stdlib/regexp/splitregexp.md new file mode 100644 index 0000000000..81ea15eeec --- /dev/null +++ b/content/flux/v0.x/stdlib/regexp/splitregexp.md @@ -0,0 +1,44 @@ +--- +title: regexp.splitRegexp() function +description: > + The `regexp.splitRegexp()` function splits a string into substrings + separated by regular expression matches and returns an array of `i` substrings between + matches. +menu: + flux_0_x: + name: regexp.splitRegexp + parent: regexp-package + weight: 1 +aliases: + - /flux/v0.x/functions/regexp/splitregexp/ +--- + +The `regexp.splitRegexp()` function splits a string into substrings separated by +regular expression matches and returns an array of `i` substrings between matches. + +_**Output data type:** Array of Strings_ + +```js +import "regexp" + +regexp.splitRegexp(r: /a*/, v: "abaabaccadaaae", i: 5) + +// Returns ["", "b", "b", "c", "cadaaae"] +``` + +## Parameters + +### r +The regular expression used to search `v`. + +_**Data type:** Regexp_ + +### v +The string value to search. + +_**Data type:** String_ + +### i +The number of substrings to return. + +_**Data type:** Integer_ diff --git a/content/flux/v0.x/stdlib/runtime/_index.md b/content/flux/v0.x/stdlib/runtime/_index.md new file mode 100644 index 0000000000..b99124af38 --- /dev/null +++ b/content/flux/v0.x/stdlib/runtime/_index.md @@ -0,0 +1,22 @@ +--- +title: Flux runtime package +description: > + The Flux runtime package includes functions that provide information + about the current Flux runtime. Import the `runtime` package. +menu: + flux_0_x: + name: Runtime + parent: Standard library + weight: 1 +aliases: + - /flux/v0.x/functions/runtime/ +--- + +The Flux runtime package includes functions that provide information about the +current Flux runtime. Import the `runtime` package: + +```js +import "runtime" +``` + +{{< function-list >}} diff --git a/content/flux/v0.x/stdlib/runtime/version.md b/content/flux/v0.x/stdlib/runtime/version.md new file mode 100644 index 0000000000..de119d5b94 --- /dev/null +++ b/content/flux/v0.x/stdlib/runtime/version.md @@ -0,0 +1,22 @@ +--- +title: runtime.version() function +description: The `runtime.version()` function returns the current Flux version. +menu: + flux_0_x: + name: runtime.version + parent: Runtime + weight: 1 +aliases: + - /flux/v0.x/functions/runtime/version/ +--- + +The `runtime.version()` function returns the current Flux version. + +_**Function type:** Miscellaneous_ +_**Output data type:** String_ + +```js +import "runtime" + +runtime.version() +``` diff --git a/content/flux/v0.x/stdlib/sql/_index.md b/content/flux/v0.x/stdlib/sql/_index.md new file mode 100644 index 0000000000..781288cbe9 --- /dev/null +++ b/content/flux/v0.x/stdlib/sql/_index.md @@ -0,0 +1,22 @@ +--- +title: Flux SQL package +description: > + The Flux SQL package provides tools for working with data in SQL databases + such as MySQL and PostgreSQL. Import the `sql` package. +menu: + flux_0_x: + name: SQL + parent: Standard library + weight: 1 +aliases: + - /flux/v0.x/functions/sql/ +--- + +SQL Flux functions provide tools for working with data in SQL databases such as MySQL and PostgreSQL. +Import the `sql` package: + +```js +import "sql" +``` + +{{< function-list >}} diff --git a/content/flux/v0.x/stdlib/sql/from.md b/content/flux/v0.x/stdlib/sql/from.md new file mode 100644 index 0000000000..364c0b54a4 --- /dev/null +++ b/content/flux/v0.x/stdlib/sql/from.md @@ -0,0 +1,81 @@ +--- +title: sql.from() function +description: The `sql.from()` function retrieves data from a SQL data source. +menu: + flux_0_x: + name: sql.from + parent: SQL +weight: 202 +aliases: + - /flux/v0.x/functions/sql/from/ +--- + +The `sql.from()` function retrieves data from a SQL data source. + +_**Function type:** Input_ + +```js +import "sql" + +sql.from( + driverName: "postgres", + dataSourceName: "postgresql://user:password@localhost", + query:"SELECT * FROM TestTable" +) +``` + +## Parameters + +### driverName +The driver used to connect to the SQL database. + +_**Data type:** String_ + +The following drivers are available: + +- mysql +- postgres + +### dataSourceName +The connection string used to connect to the SQL database. +The string's form and structure depend on the [driver](#drivername) used. + +_**Data type:** String_ + +##### Driver dataSourceName examples +```sh +# Postgres Driver: +postgres://pqgotest:password@localhost/pqgotest?sslmode=verify-full + +# MySQL Driver: +username:password@tcp(localhost:3306)/dbname?param=value +``` + +### query +The query to run against the SQL database. + +_**Data type:** String_ + +## Examples + +### Query a MySQL database +```js +import "sql" + +sql.from( + driverName: "mysql", + dataSourceName: "user:password@tcp(localhost:3306)/db", + query:"SELECT * FROM ExampleTable" +) +``` + +### Query a Postgres database +```js +import "sql" + +sql.from( + driverName: "postgres", + dataSourceName: "postgresql://user:password@localhost", + query:"SELECT * FROM ExampleTable" +) +``` diff --git a/content/flux/v0.x/stdlib/sql/to.md b/content/flux/v0.x/stdlib/sql/to.md new file mode 100644 index 0000000000..2bfa9f8afe --- /dev/null +++ b/content/flux/v0.x/stdlib/sql/to.md @@ -0,0 +1,81 @@ +--- +title: sql.to() function +description: The `sql.to()` function writes data to a SQL database. +menu: + flux_0_x: + name: sql.to + parent: SQL + weight: 1 +aliases: + - /flux/v0.x/functions/sql/to/ +--- + +The `sql.to()` function writes data to a SQL database. + +_**Function type:** Output_ + +```js +import "sql" + +sql.to( + driverName: "mysql", + dataSourceName: "username:password@tcp(localhost:3306)/dbname?param=value", + table: "ExampleTable" +) +``` + +## Parameters + +### driverName +The driver used to connect to the SQL database. + +_**Data type:** String_ + +The following drivers are available: + +- mysql +- postgres + +### dataSourceName +The connection string used to connect to the SQL database. +The string's form and structure depend on the [driver](#drivername) used. + +_**Data type:** String_ + +##### Driver dataSourceName examples +```sh +# Postgres Driver +postgres://pqgotest:password@localhost/pqgotest?sslmode=verify-full + +# MySQL Driver +username:password@tcp(localhost:3306)/dbname?param=value +``` + +### table +The destination table. + +_**Data type:** String_ + +## Examples + +### Write data to a MySQL database +```js +import "sql" + +sql.to( + driverName: "mysql", + dataSourceName: "user:password@tcp(localhost:3306)/db", + table: "ExampleTable" +) +``` + +### Write data to a Postgres database +```js +import "sql" + +sql.to( + driverName: "postgres", + dataSourceName: "postgresql://user:password@localhost", + table: "ExampleTable" +) +``` diff --git a/content/flux/v0.x/stdlib/strings/_index.md b/content/flux/v0.x/stdlib/strings/_index.md new file mode 100644 index 0000000000..ec0feaf7a3 --- /dev/null +++ b/content/flux/v0.x/stdlib/strings/_index.md @@ -0,0 +1,22 @@ +--- +title: Flux strings package +description: > + The Flux strings package provides functions to manipulate UTF-8 encoded + strings. Import the `strings` package. +menu: + flux_0_x: + name: Strings + parent: Standard library + weight: 1 +aliases: + - /flux/v0.x/functions/strings/ +--- + +The Flux string package provides functions to manipulate UTF-8 encoded strings. +Import the `strings` package: + +```js +import "strings" +``` + +{{< function-list >}} diff --git a/content/flux/v0.x/stdlib/strings/compare.md b/content/flux/v0.x/stdlib/strings/compare.md new file mode 100644 index 0000000000..b7d6812d36 --- /dev/null +++ b/content/flux/v0.x/stdlib/strings/compare.md @@ -0,0 +1,57 @@ +--- +title: strings.compare() function +description: The strings.compare() function compares the lexicographical order of + two strings. +menu: + flux_0_x: + name: strings.compare + parent: Strings + weight: 1 +aliases: + - /flux/v0.x/functions/strings/compare/ +--- + +The `strings.compare()` function compares the lexicographical order of two strings. + +_**Output data type:** Integer_ + +```js +import "strings" + +strings.compare(v: "a", t: "b") + +// returns -1 +``` + +#### Return values +| Comparison | Return value | +|:----------:|:------------:| +| `v < t` | `-1` | +| `v == t` | `0` | +| `v > t` | `1` | + +## Parameters + +### v +The string value to compare. + +_**Data type:** String_ + +### t +The string value to compare against. + +_**Data type:** String_ + +## Examples + +###### Compare the lexicographical order of column values +```js +import "strings" + +data + |> map(fn: (r) => ({ + r with + _value: strings.compare(v: r.tag1, t: r.tag2) + }) + ) +``` diff --git a/content/flux/v0.x/stdlib/strings/containsany.md b/content/flux/v0.x/stdlib/strings/containsany.md new file mode 100644 index 0000000000..0734646547 --- /dev/null +++ b/content/flux/v0.x/stdlib/strings/containsany.md @@ -0,0 +1,52 @@ +--- +title: strings.containsAny() function +description: > + The strings.containsAny() function reports whether a specified string + contains any characters from from another string. +menu: + flux_0_x: + name: strings.containsAny + parent: Strings + weight: 1 +aliases: + - /flux/v0.x/functions/strings/containsany/ +--- + +The `strings.containsAny()` function reports whether a specified string contains +characters from another string. + +_**Output data type:** Boolean_ + +```js +import "strings" + +strings.containsAny(v: "abc", chars: "and") + +// returns true +``` + +## Parameters + +### v +The string value to search. + +_**Data type:** String_ + +### chars +Characters to search for. + +_**Data type:** String_ + +## Examples + +###### Report if a string contains specific characters +```js +import "strings" + +data + |> map(fn: (r) => ({ + r with + _value: strings.containsAny(v: r.price, chars: "£$¢") + }) + ) +``` diff --git a/content/flux/v0.x/stdlib/strings/containsstr.md b/content/flux/v0.x/stdlib/strings/containsstr.md new file mode 100644 index 0000000000..4130254bcc --- /dev/null +++ b/content/flux/v0.x/stdlib/strings/containsstr.md @@ -0,0 +1,50 @@ +--- +title: strings.containsStr() function +description: The strings.containsStr() function reports whether a string contains + a specified substring. +menu: + flux_0_x: + name: strings.containsStr + parent: Strings + weight: 1 +aliases: + - /flux/v0.x/functions/strings/containsstr/ +--- + +The `strings.containsStr()` function reports whether a string contains a specified substring. + +_**Output data type:** Boolean_ + +```js +import "strings" + +strings.containsStr(v: "This and that", substr: "and") + +// returns true +``` + +## Parameters + +### v +The string value to search. + +_**Data type:** String_ + +### substr +The substring value to search for. + +_**Data type:** String_ + +## Examples + +###### Report if a string contains a specific substring +```js +import "strings" + +data + |> map(fn: (r) => ({ + r with + _value: strings.containsStr(v: r.author, substr: "John") + }) + ) +``` diff --git a/content/flux/v0.x/stdlib/strings/countstr.md b/content/flux/v0.x/stdlib/strings/countstr.md new file mode 100644 index 0000000000..a614ede9c3 --- /dev/null +++ b/content/flux/v0.x/stdlib/strings/countstr.md @@ -0,0 +1,63 @@ +--- +title: strings.countStr() function +description: > + The strings.countStr() function counts the number of non-overlapping + instances of a substring appears in a string. +menu: + flux_0_x: + name: strings.countStr + parent: Strings + weight: 1 +aliases: + - /flux/v0.x/functions/strings/countstr/ +--- + +The `strings.countStr()` function counts the number of non-overlapping instances +of a substring appears in a string. + +_**Output data type:** Integer_ + +```js +import "strings" + +strings.countStr(v: "Hello mellow fellow", substr: "ello") + +// returns 3 +``` + +## Parameters + +### v +The string value to search. + +_**Data type:** String_ + +### substr +The substring to count. + +_**Data type:** String_ + +{{% note %}} +The function counts only non-overlapping instances of `substr`. +For example: + +```js +strings.coutnStr(v: "ooooo", substr: "oo") + +// Returns 2 -- (oo)(oo)o +``` +{{% /note %}} + +## Examples + +###### Count instances of a substring within a string +```js +import "strings" + +data + |> map(fn: (r) => ({ + r with + _value: strings.countStr(v: r.message, substr: "uh") + }) + ) +``` diff --git a/content/flux/v0.x/stdlib/strings/equalfold.md b/content/flux/v0.x/stdlib/strings/equalfold.md new file mode 100644 index 0000000000..67c31e5c90 --- /dev/null +++ b/content/flux/v0.x/stdlib/strings/equalfold.md @@ -0,0 +1,54 @@ +--- +title: strings.equalFold() function +description: > + The strings.equalFold() function reports whether two UTF-8 strings are + equal under Unicode case-folding. +menu: + flux_0_x: + name: strings.equalFold + parent: Strings + weight: 1 +aliases: + - /flux/v0.x/functions/strings/equalfold/ +--- + +The `strings.equalFold()` function reports whether two UTF-8 strings are equal +under Unicode case-folding. + +_**Output data type:** Boolean_ + +```js +import "strings" + +strings.equalFold(v: "Go", t: "go") + +// returns true +``` + +## Parameters + +### v +The string value to compare. + +_**Data type:** String_ + +### t +The string value to compare against. + +_**Data type:** String_ + +## Examples + +###### Ignore case when testing if two strings are the same +```js +import "strings" + +data + |> map(fn: (r) => ({ + r with + string1: r.string1, + string2: r.string2, + same: strings.equalFold(v: r.string1, t: r.string2) + }) + ) +``` diff --git a/content/flux/v0.x/stdlib/strings/hasprefix.md b/content/flux/v0.x/stdlib/strings/hasprefix.md new file mode 100644 index 0000000000..98dda915bb --- /dev/null +++ b/content/flux/v0.x/stdlib/strings/hasprefix.md @@ -0,0 +1,44 @@ +--- +title: strings.hasPrefix() function +description: The strings.hasPrefix() function indicates if a string begins with a + specific prefix. +menu: + flux_0_x: + name: strings.hasPrefix + parent: Strings + weight: 1 +aliases: + - /flux/v0.x/functions/strings/hasprefix/ +--- + +The `strings.hasPrefix()` function indicates if a string begins with a specified prefix. + +_**Output data type:** Boolean_ + +```js +import "strings" + +strings.hasPrefix(v: "go gopher", t: "go") + +// returns true +``` + +## Parameters + +### v +The string value to search. + +_**Data type:** String_ + +### t +The prefix to search for. + +_**Data type:** String_ + +###### Filter based on the presence of a prefix in a column value +```js +import "strings" + +data + |> filter(fn:(r) => strings.hasPrefix(v: r.metric, t: "int_" )) +``` diff --git a/content/flux/v0.x/stdlib/strings/hassuffix.md b/content/flux/v0.x/stdlib/strings/hassuffix.md new file mode 100644 index 0000000000..f026d3ff3d --- /dev/null +++ b/content/flux/v0.x/stdlib/strings/hassuffix.md @@ -0,0 +1,44 @@ +--- +title: strings.hasSuffix() function +description: The strings.hasSuffix() function indicates if a string ends with a specified + suffix. +menu: + flux_0_x: + name: strings.hasSuffix + parent: Strings + weight: 1 +aliases: + - /flux/v0.x/functions/strings/hassuffix/ +--- + +The `strings.hasSuffix()` function indicates if a string ends with a specified suffix. + +_**Output data type:** Boolean_ + +```js +import "strings" + +strings.hasSuffix(v: "go gopher", t: "go") + +// returns false +``` + +## Parameters + +### v +The string value to search. + +_**Data type:** String_ + +### t +The suffix to search for. + +_**Data type:** String_ + +###### Filter based on the presence of a suffix in a column value +```js +import "strings" + +data + |> filter(fn:(r) => strings.hasSuffix(v: r.metric, t: "_count" )) +``` diff --git a/content/flux/v0.x/stdlib/strings/index-func.md b/content/flux/v0.x/stdlib/strings/index-func.md new file mode 100644 index 0000000000..5e56fbb1c8 --- /dev/null +++ b/content/flux/v0.x/stdlib/strings/index-func.md @@ -0,0 +1,52 @@ +--- +title: strings.index() function +description: > + The strings.index() function returns the index of the first instance + of a substring in another string. +menu: + flux_0_x: + name: strings.index + parent: Strings + weight: 1 +aliases: + - /flux/v0.x/functions/strings/index-func/ +--- + +The `strings.index()` function returns the index of the first instance of a substring +in a string. If the substring is not present, it returns `-1`. + +_**Output data type:** Integer_ + +```js +import "strings" + +strings.index(v: "go gopher", substr: "go") + +// returns 0 +``` + +## Parameters + +### v +The string value to search. + +_**Data type:** String_ + +### substr +The substring to search for. + +_**Data type:** String_ + +## Examples + +###### Find the first occurrence of a substring +```js +import "strings" + +data + |> map(fn: (r) => ({ + r with + the_index: strings.index(v: r.pageTitle, substr: "the") + }) + ) +``` diff --git a/content/flux/v0.x/stdlib/strings/indexany.md b/content/flux/v0.x/stdlib/strings/indexany.md new file mode 100644 index 0000000000..d8302d5f34 --- /dev/null +++ b/content/flux/v0.x/stdlib/strings/indexany.md @@ -0,0 +1,52 @@ +--- +title: strings.indexAny() function +description: > + The strings.indexAny() function returns the index of the first instance + of specified characters in a string. +menu: + flux_0_x: + name: strings.indexAny + parent: Strings + weight: 1 +aliases: + - /flux/v0.x/functions/strings/indexany/ +--- + +The `strings.indexAny()` function returns the index of the first instance of specified characters in a string. +If none of the specified characters are present, it returns `-1`. + +_**Output data type:** Integer_ + +```js +import "strings" + +strings.indexAny(v: "chicken", chars: "aeiouy") + +// returns 2 +``` + +## Parameters + +### v +The string value to search. + +_**Data type:** String_ + +### chars +Characters to search for. + +_**Data type:** String_ + +## Examples + +###### Find the first occurrence of characters from a string +```js +import "strings" + +data + |> map(fn: (r) => ({ + r with + charIndex: strings.indexAny(v: r._field, chars: "_-") + }) + ) +``` diff --git a/content/flux/v0.x/stdlib/strings/isdigit.md b/content/flux/v0.x/stdlib/strings/isdigit.md new file mode 100644 index 0000000000..96f1ca1005 --- /dev/null +++ b/content/flux/v0.x/stdlib/strings/isdigit.md @@ -0,0 +1,41 @@ +--- +title: strings.isDigit() function +description: The strings.isDigit() function tests if a single character string is + a digit (0-9). +menu: + flux_0_x: + name: strings.isDigit + parent: Strings + weight: 1 +aliases: + - /flux/v0.x/functions/strings/isdigit/ +--- + +The `strings.isDigit()` function tests if a single-character string is a digit (0-9). + +_**Output data type:** Boolean_ + +```js +import "strings" + +strings.isDigit(v: "A") + +// returns false +``` + +## Parameters + +### v +The single-character string to test. + +_**Data type:** String_ + +## Examples + +###### Filter by columns with digits as values +```js +import "strings" + +data + |> filter(fn: (r) => strings.isDigit(v: r.serverRef)) +``` diff --git a/content/flux/v0.x/stdlib/strings/isletter.md b/content/flux/v0.x/stdlib/strings/isletter.md new file mode 100644 index 0000000000..f43d000052 --- /dev/null +++ b/content/flux/v0.x/stdlib/strings/isletter.md @@ -0,0 +1,41 @@ +--- +title: strings.isLetter() function +description: The strings.isLetter() function tests if a single character string is + a letter (a-z, A-Z). +menu: + flux_0_x: + name: strings.isLetter + parent: Strings + weight: 1 +aliases: + - /flux/v0.x/functions/strings/isletter/ +--- + +The `strings.isLetter()` function tests if a single character string is a letter (a-z, A-Z). + +_**Output data type:** Boolean_ + +```js +import "strings" + +strings.isLetter(v: "A") + +// returns true +``` + +## Parameters + +### v +The single character string to test. + +_**Data type:** String_ + +## Examples + +###### Filter by columns with single-letter values +```js +import "strings" + +data + |> filter(fn: (r) => strings.isLetter(v: r.serverRef)) +``` diff --git a/content/flux/v0.x/stdlib/strings/islower.md b/content/flux/v0.x/stdlib/strings/islower.md new file mode 100644 index 0000000000..57df346561 --- /dev/null +++ b/content/flux/v0.x/stdlib/strings/islower.md @@ -0,0 +1,41 @@ +--- +title: strings.isLower() function +description: The strings.isLower() function tests if a single-character string is + lowercase. +menu: + flux_0_x: + name: strings.isLower + parent: Strings + weight: 1 +aliases: + - /flux/v0.x/functions/strings/islower/ +--- + +The `strings.isLower()` function tests if a single-character string is lowercase. + +_**Output data type:** Boolean_ + +```js +import "strings" + +strings.isLower(v: "a") + +// returns true +``` + +## Parameters + +### v +The single-character string value to test. + +_**Data type:** String_ + +## Examples + +###### Filter by columns with single-letter lowercase values +```js +import "strings" + +data + |> filter(fn: (r) => strings.isLower(v: r.host)) +``` diff --git a/content/flux/v0.x/stdlib/strings/isupper.md b/content/flux/v0.x/stdlib/strings/isupper.md new file mode 100644 index 0000000000..75d5ed2ca2 --- /dev/null +++ b/content/flux/v0.x/stdlib/strings/isupper.md @@ -0,0 +1,41 @@ +--- +title: strings.isUpper() function +description: The strings.isUpper() function tests if a single character string is + uppercase. +menu: + flux_0_x: + name: strings.isUpper + parent: Strings + weight: 1 +aliases: + - /flux/v0.x/functions/strings/isupper/ +--- + +The `strings.isUpper()` function tests if a single character string is uppercase. + +_**Output data type:** Boolean_ + +```js +import "strings" + +strings.isUpper(v: "A") + +// returns true +``` + +## Parameters + +### v +The single-character string value to test. + +_**Data type:** String_ + +## Examples + +###### Filter by columns with single-letter uppercase values +```js +import "strings" + +data + |> filter(fn: (r) => strings.isUpper(v: r.host)) +``` diff --git a/content/flux/v0.x/stdlib/strings/joinstr.md b/content/flux/v0.x/stdlib/strings/joinstr.md new file mode 100644 index 0000000000..0c49f1b443 --- /dev/null +++ b/content/flux/v0.x/stdlib/strings/joinstr.md @@ -0,0 +1,49 @@ +--- +title: strings.joinStr() function +description: > + The strings.joinStr() function concatenates the elements of a string + array into a single string using a specified separator. +menu: + flux_0_x: + name: strings.joinStr + parent: Strings + weight: 1 +aliases: + - /flux/v0.x/functions/strings/joinstr/ +--- + +The `strings.joinStr()` function concatenates elements of a string array into +a single string using a specified separator. + +_**Output data type:** String_ + +```js +import "strings" + +strings.joinStr(arr: ["a", "b", "c"], v: ",") + +// returns "a,b,c" +``` + +## Parameters + +### arr +The array of strings to concatenate. + +_**Data type:** Array of strings_ + +### v +The separator to use in the concatenated value. + +_**Data type:** String_ + +## Examples + +###### Join a list of strings into a single string +```js +import "strings" + +searchTags = ["tag1", "tag2", "tag3"] + +strings.joinStr(arr: searchTags, v: ",")) +``` diff --git a/content/flux/v0.x/stdlib/strings/lastindex.md b/content/flux/v0.x/stdlib/strings/lastindex.md new file mode 100644 index 0000000000..97c07fc4f1 --- /dev/null +++ b/content/flux/v0.x/stdlib/strings/lastindex.md @@ -0,0 +1,52 @@ +--- +title: strings.lastIndex() function +description: > + The strings.lastIndex() function returns the index of the last instance + of a substring in a string or `-1` if substring is not present. +menu: + flux_0_x: + name: strings.lastIndex + parent: Strings + weight: 1 +aliases: + - /flux/v0.x/functions/strings/lastindex/ +--- + +The `strings.lastIndex()` function returns the index of the last instance of a substring +in a string. If the substring is not present, the function returns `-1`. + +_**Output data type:** Integer_ + +```js +import "strings" + +strings.lastIndex(v: "go gopher", t: "go") + +// returns 3 +``` + +## Parameters + +### v +The string value to search. + +_**Data type:** String_ + +### substr +The substring to search for. + +_**Data type:** String_ + +## Examples + +###### Find the last occurrence of a substring +```js +import "strings" + +data + |> map(fn: (r) => ({ + r with + the_index: strings.lastIndex(v: r.pageTitle, substr: "the") + }) + ) +``` diff --git a/content/flux/v0.x/stdlib/strings/lastindexany.md b/content/flux/v0.x/stdlib/strings/lastindexany.md new file mode 100644 index 0000000000..683a960e21 --- /dev/null +++ b/content/flux/v0.x/stdlib/strings/lastindexany.md @@ -0,0 +1,51 @@ +--- +title: strings.lastIndexAny() function +description: The `strings.lastIndexAny()` function returns the index of the last instance + of any specified characters in a string. +menu: + flux_0_x: + name: strings.lastIndexAny + parent: Strings + weight: 1 +aliases: + - /flux/v0.x/functions/strings/lastindexany/ +--- + +The `strings.lastIndexAny()` function returns the index of the last instance of any specified characters in a string. +If none of the specified characters are present, the function returns `-1`. + +_**Output data type:** Integer_ + +```js +import "strings" + +strings.lastIndexAny(v: "chicken", chars: "aeiouy") + +// returns 5 +``` + +## Parameters + +### v +The string value to search. + +_**Data type:** String_ + +### chars +Characters to search for. + +_**Data type:** String_ + +## Examples + +###### Find the last occurrence of characters from a string +```js +import "strings" + +data + |> map(fn: (r) => ({ + r with + charLastIndex: strings.lastIndexAny(v: r._field, chars: "_-") + }) + ) +``` diff --git a/content/flux/v0.x/stdlib/strings/repeat.md b/content/flux/v0.x/stdlib/strings/repeat.md new file mode 100644 index 0000000000..1b6e266419 --- /dev/null +++ b/content/flux/v0.x/stdlib/strings/repeat.md @@ -0,0 +1,51 @@ +--- +title: strings.repeat() function +description: The strings.repeat() function returns a string consisting of `i` copies + of a specified string. +menu: + flux_0_x: + name: strings.repeat + parent: Strings + weight: 1 +aliases: + - /flux/v0.x/functions/strings/repeat/ +--- + +The `strings.repeat()` function returns a string consisting of `i` copies of a specified string. + +_**Output data type:** String_ + +```js +import "strings" + +strings.repeat(v: "ha", i: 3) + +// returns "hahaha" +``` + +## Parameters + +### v +The string value to repeat. + +_**Data type:** String_ + +### i +The number of times to repeat `v`. + +_**Data type:** Integer_ + +## Examples + +###### Repeat a string based on existing columns +```js +import "strings" + +data + |> map(fn: (r) => ({ + laugh: r.laugh + intensity: r.intensity + laughter: strings.repeat(v: r.laugh, i: r.intensity) + }) + ) +``` diff --git a/content/flux/v0.x/stdlib/strings/replace.md b/content/flux/v0.x/stdlib/strings/replace.md new file mode 100644 index 0000000000..4be42bd74a --- /dev/null +++ b/content/flux/v0.x/stdlib/strings/replace.md @@ -0,0 +1,62 @@ +--- +title: strings.replace() function +description: > + The strings.replace() function replaces the first `i` non-overlapping + instances of a substring with a specified replacement. +menu: + flux_0_x: + name: strings.replace + parent: Strings + weight: 1 +aliases: + - /flux/v0.x/functions/strings/replace/ +--- + +The `strings.replace()` function replaces the first `i` non-overlapping instances +of a substring with a specified replacement. + +_**Output data type:** String_ + +```js +import "strings" + +strings.replace(v: "oink oink oink", t: "oink", u: "moo", i: 2) + +// returns "moo moo oink" +``` + +## Parameters + +### v +The string value to search. + +_**Data type:** String_ + +### t +The substring value to replace. + +_**Data type:** String_ + +### u +The replacement for `i` instances of `t`. + +_**Data type:** String_ + +### i +The number of non-overlapping `t` matches to replace. + +_**Data type:** Integer_ + +## Examples + +###### Replace a specific number of string matches +```js +import "strings" + +data + |> map(fn: (r) => ({ + r with + content: strings.replace(v: r.content, t: "he", u: "her", i: 3) + }) + ) +``` diff --git a/content/flux/v0.x/stdlib/strings/replaceall.md b/content/flux/v0.x/stdlib/strings/replaceall.md new file mode 100644 index 0000000000..1c565369d2 --- /dev/null +++ b/content/flux/v0.x/stdlib/strings/replaceall.md @@ -0,0 +1,57 @@ +--- +title: strings.replaceAll() function +description: > + The strings.replaceAll() function replaces all non-overlapping instances + of a substring with a specified replacement. +menu: + flux_0_x: + name: strings.replaceAll + parent: Strings + weight: 1 +aliases: + - /flux/v0.x/functions/strings/replaceall/ +--- + +The `strings.replaceAll()` function replaces all non-overlapping instances of a +substring with a specified replacement. + +_**Output data type:** String_ + +```js +import "strings" + +strings.replaceAll(v: "oink oink oink", t: "oink", u: "moo") + +// returns "moo moo moo" +``` + +## Parameters + +### v +The string value to search. + +_**Data type:** String_ + +### t +The substring to replace. + +_**Data type:** String_ + +### u +The replacement for all instances of `t`. + +_**Data type:** String_ + +## Examples + +###### Replace string matches +```js +import "strings" + +data + |> map(fn: (r) => ({ + r with + content: strings.replaceAll(v: r.content, t: "he", u: "her") + }) + ) +``` diff --git a/content/flux/v0.x/stdlib/strings/split.md b/content/flux/v0.x/stdlib/strings/split.md new file mode 100644 index 0000000000..479298c450 --- /dev/null +++ b/content/flux/v0.x/stdlib/strings/split.md @@ -0,0 +1,48 @@ +--- +title: strings.split() function +description: > + The strings.split() function splits a string on a specified separator + and returns an array of substrings. +menu: + flux_0_x: + name: strings.split + parent: Strings + weight: 1 +aliases: + - /flux/v0.x/functions/strings/split/ +--- + +The `strings.split()` function splits a string on a specified separator and returns +an array of substrings. + +_**Output data type:** Array of strings_ + +```js +import "strings" + +strings.split(v: "a flux of foxes", t: " ") + +// returns ["a", "flux", "of", "foxes"] +``` + +## Parameters + +### v +The string value to split. + +_**Data type:** String_ + +### t +The string value that acts as the separator. + +_**Data type:** String_ + +## Examples + +###### Split a string into an array of substrings +```js +import "strings" + +data + |> map (fn:(r) => strings.split(v: r.searchTags, t: ",")) +``` diff --git a/content/flux/v0.x/stdlib/strings/splitafter.md b/content/flux/v0.x/stdlib/strings/splitafter.md new file mode 100644 index 0000000000..6ec75b9c57 --- /dev/null +++ b/content/flux/v0.x/stdlib/strings/splitafter.md @@ -0,0 +1,48 @@ +--- +title: strings.splitAfter() function +description: > + The strings.splitAfter() function splits a string after a specified + separator and returns an array of substrings. +menu: + flux_0_x: + name: strings.splitAfter + parent: Strings + weight: 1 +aliases: + - /flux/v0.x/functions/strings/splitafter/ +--- + +The `strings.splitAfter()` function splits a string after a specified separator and returns +an array of substrings. + +_**Output data type:** Array of strings_ + +```js +import "strings" + +strings.splitAfter(v: "a flux of foxes", t: " ") + +// returns ["a ", "flux ", "of ", "foxes"] +``` + +## Parameters + +### v +The string value to split. + +_**Data type:** String_ + +### t +The string value that acts as the separator. + +_**Data type:** String_ + +## Examples + +###### Split a string into an array of substrings +```js +import "strings" + +data + |> map (fn:(r) => strings.splitAfter(v: r.searchTags, t: ",")) +``` diff --git a/content/flux/v0.x/stdlib/strings/splitaftern.md b/content/flux/v0.x/stdlib/strings/splitaftern.md new file mode 100644 index 0000000000..8c1d20cbcf --- /dev/null +++ b/content/flux/v0.x/stdlib/strings/splitaftern.md @@ -0,0 +1,53 @@ +--- +title: strings.splitAfterN() function +description: > + The strings.splitAfterN() function splits a string after a specified + separator and returns an array of `i` substrings. +menu: + flux_0_x: + name: strings.splitAfterN + parent: Strings + weight: 1 +aliases: + - /flux/v0.x/functions/strings/splitaftern/ +--- + +The `strings.splitAfterN()` function splits a string after a specified separator and returns +an array of `i` substrings. + +_**Output data type:** Array of strings_ + +```js +import "strings" + +strings.splitAfterN(v: "a flux of foxes", t: " ", i: 2) + +// returns ["a ", "flux ", "of foxes"] +``` + +## Parameters + +### v +The string value to split. + +_**Data type:** String_ + +### t +The string value that acts as the separator. + +_**Data type:** String_ + +### i +The number of substrings to return. + +_**Data type:** Integer_ + +## Examples + +###### Split a string into an array of substrings +```js +import "strings" + +data + |> map (fn:(r) => strings.splitAfterN(v: r.searchTags, t: ",")) +``` diff --git a/content/flux/v0.x/stdlib/strings/splitn.md b/content/flux/v0.x/stdlib/strings/splitn.md new file mode 100644 index 0000000000..24b7b99142 --- /dev/null +++ b/content/flux/v0.x/stdlib/strings/splitn.md @@ -0,0 +1,53 @@ +--- +title: strings.splitN() function +description: > + The strings.splitN() function splits a string on a specified separator + and returns an array of `i` substrings. +menu: + flux_0_x: + name: strings.splitN + parent: Strings + weight: 1 +aliases: + - /flux/v0.x/functions/strings/splitn/ +--- + +The `strings.splitN()` function splits a string on a specified separator and returns +an array of `i` substrings. + +_**Output data type:** Array of strings_ + +```js +import "strings" + +strings.splitN(v: "a flux of foxes", t: " ", i: 2) + +// returns ["a", "flux", "of foxes"] +``` + +## Parameters + +### v +The string value to split. + +_**Data type:** String_ + +### t +The string value that acts as the separator. + +_**Data type:** String_ + +### i +The number of substrings to return. + +_**Data type:** Integer_ + +## Examples + +###### Split a string into an array of substrings +```js +import "strings" + +data + |> map (fn:(r) => strings.splitN(v: r.searchTags, t: ",")) +``` diff --git a/content/flux/v0.x/stdlib/strings/strlen.md b/content/flux/v0.x/stdlib/strings/strlen.md new file mode 100644 index 0000000000..393edca84c --- /dev/null +++ b/content/flux/v0.x/stdlib/strings/strlen.md @@ -0,0 +1,55 @@ +--- +title: strings.strlen() function +description: > + The strings.strlen() function returns the length of a string. String + length is determined by the number of UTF code points a string contains. +menu: + flux_0_x: + name: strings.strlen + parent: Strings +weight: 301 +aliases: + - /flux/v0.x/functions/strings/strlen/ +--- + +The `strings.strlen()` function returns the length of a string. +String length is determined by the number of UTF code points a string contains. + +_**Output data type:** Integer_ + +```js +import "strings" + +strings.strlen(v: "apple") + +// returns 5 +``` + +## Parameters + +### v +The string value to measure. + +_**Data type:** String_ + +## Examples + +###### Filter based on string value length +```js +import "strings" + +data + |> filter(fn: (r) => strings.strlen(v: r._measurement) <= 4) +``` + +###### Store the length of string values +```js +import "strings" + +data + |> map(fn: (r) => ({ + r with + length: strings.strlen(v: r._value) + }) + ) +``` diff --git a/content/flux/v0.x/stdlib/strings/substring.md b/content/flux/v0.x/stdlib/strings/substring.md new file mode 100644 index 0000000000..9fa434aca4 --- /dev/null +++ b/content/flux/v0.x/stdlib/strings/substring.md @@ -0,0 +1,57 @@ +--- +title: strings.substring() function +description: > + The strings.substring() function returns a substring based on `start` + and `end` parameters. Indices are based on UTF code points. +menu: + flux_0_x: + name: strings.substring + parent: Strings +weight: 301 +aliases: + - /flux/v0.x/functions/strings/substring/ +--- + +The `strings.substring()` function returns a substring based on `start` and `end` parameters. +These parameters are represent indices of UTF code points in the string. + +_**Output data type:** String_ + +```js +import "strings" + +strings.substring(v: "influx", start: 0, end: 3) + +// returns "infl" +``` + +## Parameters + +### v +The string value to search. + +_**Data type:** String_ + +### start +The starting index of the substring. + +_**Data type:** Integer_ + +### end +The ending index of the substring. + +_**Data type:** Integer_ + +## Examples + +###### Store the first four characters of a string +```js +import "strings" + +data + |> map(fn: (r) => ({ + r with + abbr: strings.substring(v: r.name, start: 0, end: 3) + }) + ) +``` diff --git a/content/flux/v0.x/stdlib/strings/title.md b/content/flux/v0.x/stdlib/strings/title.md new file mode 100644 index 0000000000..9fd6a13e42 --- /dev/null +++ b/content/flux/v0.x/stdlib/strings/title.md @@ -0,0 +1,40 @@ +--- +title: strings.title() function +description: The strings.title() function converts a string to title case. +menu: + flux_0_x: + name: strings.title + parent: Strings + weight: 1 +aliases: + - /flux/v0.x/functions/strings/title/ +--- + +The `strings.title()` function converts a string to title case. + +_**Output data type:** String_ + +```js +import "strings" + +strings.title(v: "a flux of foxes") + +// returns "A Flux Of Foxes" +``` + +## Parameters + +### v +The string value to convert. + +_**Data type:** String_ + +## Examples + +###### Convert all values of a column to title case +```js +import "strings" + +data + |> map(fn: (r) => ({ r with pageTitle: strings.title(v: r.pageTitle) })) +``` diff --git a/content/flux/v0.x/stdlib/strings/tolower.md b/content/flux/v0.x/stdlib/strings/tolower.md new file mode 100644 index 0000000000..cdb012a4b6 --- /dev/null +++ b/content/flux/v0.x/stdlib/strings/tolower.md @@ -0,0 +1,43 @@ +--- +title: strings.toLower() function +description: The strings.toLower() function converts a string to lowercase. +menu: + flux_0_x: + name: strings.toLower + parent: Strings + weight: 1 +aliases: + - /flux/v0.x/functions/strings/tolower/ +--- + +The `strings.toLower()` function converts a string to lowercase. + +_**Output data type:** String_ + +```js +import "strings" + +strings.toLower(v: "KOALA") + +// returns "koala" +``` + +## Parameters + +### v +The string value to convert. + +_**Data type:** String_ + +## Examples + +###### Convert all values of a column to lower case +```js +import "strings" + +data + |> map(fn: (r) => ({ + r with exclamation: strings.toLower(v: r.exclamation) + }) + ) +``` diff --git a/content/flux/v0.x/stdlib/strings/totitle.md b/content/flux/v0.x/stdlib/strings/totitle.md new file mode 100644 index 0000000000..d638c31cfc --- /dev/null +++ b/content/flux/v0.x/stdlib/strings/totitle.md @@ -0,0 +1,54 @@ +--- +title: strings.toTitle() function +description: The strings.toTitle() function converts all characters in a string to + title case. +menu: + flux_0_x: + name: strings.toTitle + parent: Strings + weight: 1 +aliases: + - /flux/v0.x/functions/strings/totitle/ +--- + +The `strings.toTitle()` function converts all characters in a string to title case. + +_**Output data type:** String_ + +```js +import "strings" + +strings.toTitle(v: "a flux of foxes") + +// returns "A FLUX OF FOXES" +``` + +## Parameters + +### v +The string value to convert. + +_**Data type:** String_ + +## Examples + +###### Covert characters in a string to title case +```js +import "strings" + +data + |> map(fn: (r) => ({ r with pageTitle: strings.toTitle(v: r.pageTitle) })) +``` + +{{% note %}} +#### The difference between toTitle and toUpper +The results of `toTitle()` and `toUpper` are often the same, however the difference +is visible with special characters: + +```js +str = "dz" + +strings.toTitle(v: str) // Returns Dz +strings.toUpper(v: str) // Returns DZ +``` +{{% /note %}} diff --git a/content/flux/v0.x/stdlib/strings/toupper.md b/content/flux/v0.x/stdlib/strings/toupper.md new file mode 100644 index 0000000000..ba8b6876f0 --- /dev/null +++ b/content/flux/v0.x/stdlib/strings/toupper.md @@ -0,0 +1,53 @@ +--- +title: strings.toUpper() function +description: The strings.toUpper() function converts a string to uppercase. +menu: + flux_0_x: + name: strings.toUpper + parent: Strings + weight: 1 +aliases: + - /flux/v0.x/functions/strings/toupper/ +--- + +The `strings.toUpper()` function converts a string to uppercase. + +_**Output data type:** String_ + +```js +import "strings" + +strings.toUpper(v: "koala") + +// returns "KOALA" +``` + +## Parameters + +### v +The string value to convert. + +_**Data type:** String_ + +## Examples + +###### Convert all values of a column to upper case +```js +import "strings" + +data + |> map(fn: (r) => ({ r with envVars: strings.toUpper(v: r.envVars) })) +``` + +{{% note %}} +#### The difference between toTitle and toUpper +The results of `toUpper()` and `toTitle` are often the same, however the difference +is visible when using special characters: + +```js +str = "dz" + +strings.toUpper(v: str) // Returns DZ +strings.toTitle(v: str) // Returns Dz +``` +{{% /note %}} diff --git a/content/flux/v0.x/stdlib/strings/trim.md b/content/flux/v0.x/stdlib/strings/trim.md new file mode 100644 index 0000000000..8821026f0d --- /dev/null +++ b/content/flux/v0.x/stdlib/strings/trim.md @@ -0,0 +1,53 @@ +--- +title: strings.trim() function +description: > + The strings.trim() function removes leading and trailing characters + specified in the cutset from a string. +menu: + flux_0_x: + name: strings.trim + parent: Strings + weight: 1 +aliases: + - /flux/v0.x/functions/strings/trim/ +--- + +The `strings.trim()` function removes leading and trailing characters specified +in the [`cutset`](#cutset) from a string. + +_**Output data type:** String_ + +```js +import "strings" + +strings.trim(v: ".abc.", cutset: ".") + +// returns "abc" +``` + +## Parameters + +### v +String to remove characters from. + +_**Data type:** String_ + +### cutset +The leading and trailing characters to remove from the string. +Only characters that match the `cutset` string exactly are trimmed. + +_**Data type:** String_ + +## Examples + +###### Trim leading and trailing periods from all values in a column +```js +import "strings" + +data + |> map(fn: (r) => ({ + r with + variables: strings.trim(v: r.variables, cutset: ".") + }) + ) +``` diff --git a/content/flux/v0.x/stdlib/strings/trimleft.md b/content/flux/v0.x/stdlib/strings/trimleft.md new file mode 100644 index 0000000000..be54cdf913 --- /dev/null +++ b/content/flux/v0.x/stdlib/strings/trimleft.md @@ -0,0 +1,52 @@ +--- +title: strings.trimLeft() function +description: > + The strings.trimLeft() function removes specified leading characters + from a string. +menu: + flux_0_x: + name: strings.trimLeft + parent: Strings + weight: 1 +aliases: + - /flux/v0.x/functions/strings/trimleft/ +--- + +The `strings.trimLeft()` function removes specified leading characters from a string. + +_**Output data type:** String_ + +```js +import "strings" + +strings.trimLeft(v: ".abc.", cutset: ".") + +// returns "abc." +``` + +## Parameters + +### v +String to remove characters from. + +_**Data type:** String_ + +### cutset +The leading characters to remove from the string. +Only characters that match the `cutset` string exactly are removed. + +_**Data type:** String_ + +## Examples + +###### Trim leading periods from all values in a column +```js +import "strings" + +data + |> map(fn: (r) => ({ + r with + variables: strings.trimLeft(v: r.variables, cutset: ".") + }) + ) +``` diff --git a/content/flux/v0.x/stdlib/strings/trimprefix.md b/content/flux/v0.x/stdlib/strings/trimprefix.md new file mode 100644 index 0000000000..12c5517f62 --- /dev/null +++ b/content/flux/v0.x/stdlib/strings/trimprefix.md @@ -0,0 +1,52 @@ +--- +title: strings.trimPrefix() function +description: > + The `strings.trimPrefix()` function removes a prefix from a string. + Strings that do not start with the prefix are returned unchanged. +menu: + flux_0_x: + name: strings.trimPrefix + parent: Strings + weight: 1 +aliases: + - /flux/v0.x/functions/strings/trimprefix/ +--- + +The `strings.trimPrefix()` function removes a prefix from a string. +Strings that do not start with the prefix are returned unchanged. + +_**Output data type:** String_ + +```js +import "strings" + +strings.trimPrefix(v: "123_abc", prefix: "123") + +// returns "_abc" +``` + +## Parameters + +### v +The string value to trim. + +_**Data type:** String_ + +### prefix +The prefix to remove. + +_**Data type:** String_ + +## Examples + +###### Remove a prefix from all values in a column +```js +import "strings" + +data + |> map(fn: (r) => ({ + r with + sensorID: strings.trimPrefix(v: r.sensorId, prefix: "s12_") + }) + ) +``` diff --git a/content/flux/v0.x/stdlib/strings/trimright.md b/content/flux/v0.x/stdlib/strings/trimright.md new file mode 100644 index 0000000000..a335b56c43 --- /dev/null +++ b/content/flux/v0.x/stdlib/strings/trimright.md @@ -0,0 +1,53 @@ +--- +title: strings.trimRight() function +description: > + The strings.trimRight() function removes trailing characters specified + in the cutset from a string. +menu: + flux_0_x: + name: strings.trimRight + parent: Strings + weight: 1 +aliases: + - /flux/v0.x/functions/strings/trimright/ +--- + +The `strings.trimRight()` function removes trailing characters specified in the +[`cutset`](#cutset) from a string. + +_**Output data type:** String_ + +```js +import "strings" + +strings.trimRight(v: ".abc.", cutset: ".") + +// returns "abc." +``` + +## Parameters + +### v +String to remove characters from. + +_**Data type:** String_ + +### cutset +The trailing characters to trim from the string. +Only characters that match the `cutset` string exactly are trimmed. + +_**Data type:** String_ + +## Examples + +###### Trim trailing periods from all values in a column +```js +import "strings" + +data + |> map(fn: (r) => ({ + r with + variables: strings.trimRight(v: r.variables, cutset: ".") + }) + ) +``` diff --git a/content/flux/v0.x/stdlib/strings/trimspace.md b/content/flux/v0.x/stdlib/strings/trimspace.md new file mode 100644 index 0000000000..3f070f8e66 --- /dev/null +++ b/content/flux/v0.x/stdlib/strings/trimspace.md @@ -0,0 +1,41 @@ +--- +title: strings.trimSpace() function +description: The strings.trimSpace() function removes leading and trailing spaces + from a string. +menu: + flux_0_x: + name: strings.trimSpace + parent: Strings + weight: 1 +aliases: + - /flux/v0.x/functions/strings/trimspace/ +--- + +The `strings.trimSpace()` function removes leading and trailing spaces from a string. + +_**Output data type:** String_ + +```js +import "strings" + +strings.trimSpace(v: " abc ") + +// returns "abc" +``` + +## Parameters + +### v +String to remove spaces from. + +_**Data type:** String_ + +## Examples + +###### Trim leading and trailing spaces from all values in a column +```js +import "strings" + +data + |> map(fn: (r) => ({ r with userInput: strings.trimSpace(v: r.userInput) })) +``` diff --git a/content/flux/v0.x/stdlib/strings/trimsuffix.md b/content/flux/v0.x/stdlib/strings/trimsuffix.md new file mode 100644 index 0000000000..b67ba84edd --- /dev/null +++ b/content/flux/v0.x/stdlib/strings/trimsuffix.md @@ -0,0 +1,52 @@ +--- +title: strings.trimSuffix() function +description: > + The `strings.trimSuffix()` function removes a suffix from a string. + Strings that do not end with the suffix are returned unchanged. +menu: + flux_0_x: + name: strings.trimSuffix + parent: Strings + weight: 1 +aliases: + - /flux/v0.x/functions/strings/trimsuffix/ +--- + +The `strings.trimSuffix()` function removes a suffix from a string. +Strings that do not end with the suffix are returned unchanged. + +_**Output data type:** String_ + +```js +import "strings" + +strings.trimSuffix(v: "123_abc", suffix: "abc") + +// returns "123_" +``` + +## Parameters + +### v +The string value to trim. + +_**Data type:** String_ + +### suffix +The suffix to remove. + +_**Data type:** String_ + +## Examples + +###### Remove a suffix from all values in a column +```js +import "strings" + +data + |> map(fn: (r) => ({ + r with + sensorID: strings.trimSuffix(v: r.sensorId, suffix: "_s12") + }) + ) +``` diff --git a/content/flux/v0.x/stdlib/system/_index.md b/content/flux/v0.x/stdlib/system/_index.md new file mode 100644 index 0000000000..6a68444500 --- /dev/null +++ b/content/flux/v0.x/stdlib/system/_index.md @@ -0,0 +1,20 @@ +--- +title: Flux system package +description: > + The Flux system package provides functions for reading values from the system. + Import the `system` package. +menu: + flux_0_x: + name: System + parent: Standard library +weight: 1 +--- + +The Flux system package provides functions for reading values from the system. +Import the `system` package: + +```js +import "system" +``` + +{{< function-list >}} diff --git a/content/flux/v0.x/stdlib/system/time.md b/content/flux/v0.x/stdlib/system/time.md new file mode 100644 index 0000000000..83ba87e98d --- /dev/null +++ b/content/flux/v0.x/stdlib/system/time.md @@ -0,0 +1,49 @@ +--- +title: system.time() function +description: The `system.time()` function returns the current system time. +aliases: + - /flux/v0.x/functions/misc/systemtime + - /flux/v0.x/functions/built-in/misc/systemtime/ + - /flux/v0.x/stdlib/built-in/misc/systemtime/ +menu: + flux_0_x: + name: system.time + parent: System +weight: 1 +--- + +The `system.time()` function returns the current system time. + +_**Function type:** Date/Time_ +_**Output data type:** Timestamp_ + +```js +import "system" + +system.time() +``` + +## Examples +```js +import "system" + +data + |> set(key: "processed_at", value: string(v: system.time() )) +``` + +{{% note %}} +#### system.time() vs now() +`system.time()` returns the current system time of the host machine, which +typically accounts for the local time zone. +This time represents the time at which `system.time()` it is executed, so each +instance of `system.time()` in a Flux script returns a unique value. + +[`now()`](/flux/0.x/stdlib/built-in/misc/now/) returns the current UTC time. +`now()` is cached at runtime, so all instances of `now()` in a Flux script +return the same value. +{{% /note %}} + +--- + +### Related functions +- [now()](/flux/v0.x/stdlib/built-in/misc/now/) diff --git a/content/flux/v0.x/stdlib/testing/_index.md b/content/flux/v0.x/stdlib/testing/_index.md new file mode 100644 index 0000000000..92e15ee9bd --- /dev/null +++ b/content/flux/v0.x/stdlib/testing/_index.md @@ -0,0 +1,23 @@ +--- +title: Flux testing package +description: > + The Flux testing package provides functions that test piped-forward + data in specific ways. Import the `testing` package. +menu: + flux_0_x: + name: Testing + parent: Standard library + weight: 1 +aliases: + - /flux/v0.x/functions/testing/ +--- + +The Flux testing package provides functions that test piped-forward data in specific ways. +Import the `testing` package. + +```js +import "testing" +``` + +## Testing functions +{{< function-list >}} diff --git a/content/flux/v0.x/stdlib/testing/assertempty.md b/content/flux/v0.x/stdlib/testing/assertempty.md new file mode 100644 index 0000000000..fca1822100 --- /dev/null +++ b/content/flux/v0.x/stdlib/testing/assertempty.md @@ -0,0 +1,43 @@ +--- +title: testing.assertEmpty() function +description: The testing.assertEmpty() function tests if an input stream is empty. +menu: + flux_0_x: + name: testing.assertEmpty + parent: Testing + weight: 1 +aliases: + - /flux/v0.x/functions/testing/assertempty/ +--- + +The `testing.assertEmpty()` function tests if an input stream is empty. +If not empty, the function returns an error. + +_**Function type:** Test_ + +```js +import "testing" + +testing.assertEmpty() +``` + +_The `testing.assertEmpty()` function can be used to perform in-line tests in a query._ + +## Examples + +#### Check if there is a difference between streams +This example uses the [`testing.diff()` function](/flux/v0.x/stdlib/testing/diff) +which outputs the diff for the two streams. +The `.testing.assertEmpty()` function checks to see if the diff is empty. + +```js +import "testing" + +got = from(bucket: "telegraf/autogen") + |> range(start: -15m) +want = from(bucket: "backup_telegraf/autogen") + |> range(start: -15m) +got + |> testing.diff(want: want) + |> testing.assertEmpty() +``` diff --git a/content/flux/v0.x/stdlib/testing/assertequals.md b/content/flux/v0.x/stdlib/testing/assertequals.md new file mode 100644 index 0000000000..21cb89ed9b --- /dev/null +++ b/content/flux/v0.x/stdlib/testing/assertequals.md @@ -0,0 +1,75 @@ +--- +title: testing.assertEquals() function +description: The testing.assertEquals() function tests whether two streams have identical + data. +aliases: + - /flux/v0.x/functions/tests/assertequals + - /flux/v0.x/functions/testing/assertequals/ +menu: + flux_0_x: + name: testing.assertEquals + parent: Testing +weight: 1 +--- + +The `testing.assertEquals()` function tests whether two streams have identical data. +If equal, the function outputs the tested data stream unchanged. +If unequal, the function returns an error. + +```js +import "testing" + +testing.assertEquals( + name: "streamEquality", + got: got, + want: want +) +``` + +_The `testing.assertEquals()` function can be used to perform in-line tests in a query._ + +## Parameters + +### name +Unique name given to the assertion. + +_**Data type:** String_ + +### got +The stream containing data to test. +Defaults to piped-forward data (`<-`). + +_**Data type:** Object_ + +### want +The stream that contains the expected data to test against. + +_**Data type:** Object_ + + +## Examples + +##### Assert of separate streams +```js +import "testing" + +want = from(bucket: "backup-telegraf/autogen") + |> range(start: -5m) + +got = from(bucket: "telegraf/autogen") + |> range(start: -5m) + +testing.assertEquals(got: got, want: want) +``` + +##### Inline assertion +```js +import "testing" + +want = from(bucket: "backup-telegraf/autogen") + |> range(start: -5m) + +from(bucket: "telegraf/autogen") + |> range(start: -5m) + |> testing.assertEquals(want: want) +``` diff --git a/content/flux/v0.x/stdlib/testing/diff.md b/content/flux/v0.x/stdlib/testing/diff.md new file mode 100644 index 0000000000..b958337894 --- /dev/null +++ b/content/flux/v0.x/stdlib/testing/diff.md @@ -0,0 +1,68 @@ +--- +title: testing.diff() function +description: The testing.diff() function produces a diff between two streams. +menu: + flux_0_x: + name: testing.diff + parent: Testing + weight: 1 +aliases: + - /flux/v0.x/functions/testing/diff/ +--- + +The `testing.diff()` function produces a diff between two streams. + +_**Function type:** Test_ + +```js +import "testing" + +testing.diff(got: stream2, want: stream1) +``` + +It matches tables from each stream with the same group keys. +For each matched table, it produces a diff. +Any added or removed rows are added to the table as a row. +An additional string column with the name `diff` is created and contains a `-` if the +row was present in the `got` table and not in the `want` table or `+` if the opposite is true. + +The diff function is guaranteed to emit at least one row if the tables are +different and no rows if the tables are the same. _The exact diff produced may change._ + +_The `testing.diff()` function can be used to perform in-line diffs in a query._ + +## Parameters + +### got +The stream containing data to test. +_Defaults to piped-forward data (`<-`)._ + +_**Data type:** Object_ + +### want +The stream that contains the expected data to test against. + +_**Data type:** Object_ + +## Examples + +##### Diff separate streams +```js +import "testing" + +want = from(bucket: "backup-telegraf/autogen") + |> range(start: -5m) +got = from(bucket: "telegraf/autogen") + |> range(start: -5m) +testing.diff(got: got, want: want) +``` + +##### Inline diff +```js +import "testing" + +want = from(bucket: "backup-telegraf/autogen") |> range(start: -5m) +from(bucket: "telegraf/autogen") + |> range(start: -5m) + |> testing.diff(want: want) +``` diff --git a/data/default_versions.toml b/data/default_versions.toml index 7a2a25e1c2..459e03d3df 100644 --- a/data/default_versions.toml +++ b/data/default_versions.toml @@ -10,5 +10,5 @@ telegraf = "telegraf_1_12" telegraf_semver = "v1.12" enterprise_kapacitor = "enterprise_kapacitor_1_5" enterprise_kapacitor_semver = "v1.5" -flux = "flux_0_50" -flux_semver = "v0.50" +flux = "flux_0_x" +flux_semver = "v0.x" diff --git a/data/versions.toml b/data/versions.toml index 1bc98d7ad8..5f682f0fe0 100644 --- a/data/versions.toml +++ b/data/versions.toml @@ -4,4 +4,4 @@ chronograf = ["v0.4", "v0.10", "v0.11", "v0.12", "v0.13", "v1.0", "deprecated", kapacitor = ["v0.2", "v0.10", "v0.11", "v0.12", "v0.13", "v1.0", "v1.1", "v1.2", "v1.3", "v1.4", "v1.5"] enterprise_influxdb = ["v1.0", "v1.1", "v1.2", "v1.3", "v1.5", "v1.6", "v1.7"] enterprise_kapacitor = ["v1.3", "v1.4", "v1.5"] -flux = ["v0.7", "v0.12", "v0.24", "v0.36", "v0.50"] +flux = ["v0.7", "v0.12", "v0.24", "v0.36", "v0.50", "v0.x"] From 01286413481e37cf9695fe51b55e779d8eb3ff2f Mon Sep 17 00:00:00 2001 From: Scott Anderson Date: Wed, 22 Jan 2020 13:41:56 -0700 Subject: [PATCH 02/25] typo fixes in flux language spec docs --- content/flux/v0.x/language/assignment-scope.md | 4 ++-- content/flux/v0.x/language/expressions.md | 11 ++++++----- content/flux/v0.x/language/statements.md | 2 +- content/flux/v0.x/language/system-built-ins.md | 2 +- 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/content/flux/v0.x/language/assignment-scope.md b/content/flux/v0.x/language/assignment-scope.md index 0c27fceef0..f6d1de9566 100644 --- a/content/flux/v0.x/language/assignment-scope.md +++ b/content/flux/v0.x/language/assignment-scope.md @@ -39,7 +39,7 @@ An identifier assigned to a variable in a block cannot be reassigned in the same An identifier can be reassigned or shadowed in an inner block. ```js -VariableAssignment = identifier "=" Expression +VariableAssignment = identifier "=" Expression . ``` ##### Examples of variable assignment @@ -57,7 +57,7 @@ f = () => { ## Option assignment ```js -OptionAssignment = "option" [ identifier "." ] identifier "=" Expression +OptionAssignment = "option" [ identifier "." ] identifier "=" Expression . ``` An option assignment creates an option bound to an identifier and gives it a type and a value. diff --git a/content/flux/v0.x/language/expressions.md b/content/flux/v0.x/language/expressions.md index 9e9453d757..fb76a2f99a 100644 --- a/content/flux/v0.x/language/expressions.md +++ b/content/flux/v0.x/language/expressions.md @@ -30,6 +30,7 @@ Literal = int_lit | string_lit | regex_lit | duration_lit + | date_time_lit | pipe_receive_lit | ObjectLiteral | ArrayLiteral @@ -183,8 +184,8 @@ If `obj` contains an entry with property `k`, both `obj.k` and `obj["k"]` return If `obj` does **not** contain an entry with property `k`, both `obj.k` and `obj["k"]` return _null_. ```js -MemberExpression = DotExpression | MemberBracketExpression -DotExpression = "." identifer +MemberExpression = DotExpression | MemberBracketExpression . +DotExpression = "." identifer . MemberBracketExpression = "[" string_lit "]" . ``` @@ -242,9 +243,9 @@ LogicalExpression = UnaryLogicalExpression LogicalOperator = "and" | "or" . UnaryLogicalExpression = ComparisonExpression | UnaryLogicalOperator UnaryLogicalExpression . -UnaryLogicalOperator = "not" | "exists". -ComparisonExpression = MultiplicativeExpression - | ComparisonExpression ComparisonOperator MultiplicativeExpression . +UnaryLogicalOperator = "not" | "exists" . +ComparisonExpression = AdditiveExpression + | ComparisonExpression ComparisonOperator AdditiveExpression . ComparisonOperator = "==" | "!=" | "<" | "<=" | ">" | ">=" | "=~" | "!~" . AdditiveExpression = MultiplicativeExpression | AdditiveExpression AdditiveOperator MultiplicativeExpression . diff --git a/content/flux/v0.x/language/statements.md b/content/flux/v0.x/language/statements.md index e740ab188e..e1529928fe 100644 --- a/content/flux/v0.x/language/statements.md +++ b/content/flux/v0.x/language/statements.md @@ -24,7 +24,7 @@ Statement = OptionAssignment ## Import declaration ```js -ImportDeclaration = "import" [identifier] string_lit +ImportDeclaration = "import" [identifier] string_lit . ``` A package name and an import path is associated with every package. diff --git a/content/flux/v0.x/language/system-built-ins.md b/content/flux/v0.x/language/system-built-ins.md index 6a97792fe7..0eeb916d98 100644 --- a/content/flux/v0.x/language/system-built-ins.md +++ b/content/flux/v0.x/language/system-built-ins.md @@ -16,7 +16,7 @@ When a built-in value is not expressible in Flux, its value may be defined by th All such values must have a corresponding builtin statement to declare the existence and type of the built-in value. ```js -BuiltinStatement = "builtin" identifer ":" TypeExpression +BuiltinStatement = "builtin" identifier ":" TypeExpression . ``` ##### Example From d7ba1a379fe00d591f333efe6bc48f28fcb06f8b Mon Sep 17 00:00:00 2001 From: Scott Anderson Date: Fri, 6 Mar 2020 16:50:46 -0700 Subject: [PATCH 03/25] added flux monitoring state guides, removed duplicate mqtt docs --- content/flux/v0.50/stdlib/mqtt/_index.md | 23 -- content/flux/v0.50/stdlib/mqtt/to.md | 131 -------- .../releasenotes-changelog.md | 282 +++++++++++++++++- content/flux/v0.x/guides/monitor-states.md | 148 +++++++++ content/flux/v0.x/stdlib/mqtt/_index.md | 23 -- content/flux/v0.x/stdlib/mqtt/to.md | 131 -------- 6 files changed, 427 insertions(+), 311 deletions(-) delete mode 100644 content/flux/v0.50/stdlib/mqtt/_index.md delete mode 100644 content/flux/v0.50/stdlib/mqtt/to.md create mode 100644 content/flux/v0.x/guides/monitor-states.md delete mode 100644 content/flux/v0.x/stdlib/mqtt/_index.md delete mode 100644 content/flux/v0.x/stdlib/mqtt/to.md diff --git a/content/flux/v0.50/stdlib/mqtt/_index.md b/content/flux/v0.50/stdlib/mqtt/_index.md deleted file mode 100644 index 9f9dbba474..0000000000 --- a/content/flux/v0.50/stdlib/mqtt/_index.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Flux MQTT package -description: > - The Flux MQTT package provides functions for working with MQTT protocol. - Import the `mqtt` package. -menu: - flux_0_50: - name: MQTT - parent: Standard library - weight: 1 -draft: true -aliases: - - /flux/v0.50/functions/mqtt/ ---- - -MQTT Flux functions provide tools for working with Message Queuing Telemetry Transport (MQTT) protocol. -Import the `mqtt` package: - -```js -import "mqtt" -``` - -{{< function-list >}} diff --git a/content/flux/v0.50/stdlib/mqtt/to.md b/content/flux/v0.50/stdlib/mqtt/to.md deleted file mode 100644 index 125befb7f2..0000000000 --- a/content/flux/v0.50/stdlib/mqtt/to.md +++ /dev/null @@ -1,131 +0,0 @@ ---- -title: mqtt.to() function -description: > - The `mqtt.to()` function outputs data to an MQTT broker using MQTT protocol. -menu: - flux_0_50: - name: mqtt.to - parent: MQTT - weight: 1 -draft: true -aliases: - - /flux/v0.50/functions/mqtt/to/ ---- - -The `mqtt.to()` function outputs data to an MQTT broker using MQTT protocol. - -_**Function type:** Output_ - -```js -import "mqtt" -mqtt.to( - broker: "tcp://localhost:8883", - topic: "example-topic", - message: "Example message", - qos: 0, - clientid: "flux-mqtt", - username: "username", - password: "password", - name: "name-example", - timeout: 1s, - timeColumn: "_time", - tagColumns: ["tag1", "tag2"], - valueColumns: ["_value"] -) -``` - -## Parameters - -### broker -The MQTT broker connection string. - -_**Data type:** String_ - -### topic -The MQTT topic to send data to. - -_**Data type:** String_ - -### message -The message or payload to send to the MQTT broker. -The default payload is an output table. -If there are multiple output tables, it sends each table as a separate MQTT message. - -{{% note %}} -When you specify a message, the function sends the message string only (no output table). -{{% /note %}} - -_**Data type:** String_ - -### qos -The [MQTT Quality of Service (QoS)](https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901103) level. -Values range from `[0-2]`. -Default is `0`. - -_**Data type:** Integer_ - -### clientid -The MQTT client ID. - -_**Data type:** String_ - -### username -The username to send to the MQTT broker. -Username is only required if the broker requires authentication. -If you provide a username, you must provide a [password](#password). - -_**Data type:** String_ - -### password -The password to send to the MQTT broker. -Password is only required if the broker requires authentication. -If you provide a password, you must provide a [username](#username). - -_**Data type:** String_ - -### name -_(Optional)_ The name for the MQTT message. - -_**Data type:** String_ - -### timeout -The MQTT connection timeout. -Default is `1s`. - -_**Data type:** Duration_ - -### timeColumn -The column to use as time values in the output line protocol. -Default is `"_time"`. - -_**Data type:** String_ - -### tagColumns -The columns to use as tag sets in the output line protocol. -Default is `[]`. - -_**Data type:** Array of strings_ - -### valueColumns -The columns to use as field values in the output line protocol. -Default is `["_value"]`. - -_**Data type:** Array of strings_ - -## Examples - -### Send data to an MQTT endpoint -```js -import "mqtt" - -from(bucket: "telegraf/autogen") - |> range(start: -5m) - |> filter(fn: (r) => r._measurement == "airSensor") - |> mqtt.to( - broker: "tcp://localhost:8883", - topic: "air-sensors", - clientid: "sensor-12a4", - tagColumns: ["sensorID"], - valueColumns: ["_value"] - ) -``` diff --git a/content/flux/v0.x/about_the_project/releasenotes-changelog.md b/content/flux/v0.x/about_the_project/releasenotes-changelog.md index 2a30a51c7d..34b37f7854 100644 --- a/content/flux/v0.x/about_the_project/releasenotes-changelog.md +++ b/content/flux/v0.x/about_the_project/releasenotes-changelog.md @@ -6,18 +6,294 @@ menu: weight: 1 --- -## v0.x.2 [2019-10-24] +## v0.63.0 [2020-03-03] + +### Features +- Experimental `geo` package. +- Initial grammar for Flux and a partial grammar for InfluxQL. + +## v0.62.0 [2020-02-28] + +### Features +- InfluxQL decode and series aggregation tests. + +### Bug fixes +- Properly categorize parse errors as "invalid". +- Fail gracefully when `tableFind` does not have an execution context. + +## v0.61.0 [2020-02-21] + +### Features +- Add experimental aggregate package with `rate()` function. + +### Bug fixes +- Deserialize the default vector if array elements are null. +- Allow array and row types to be equatable. + +## v0.60.0 [2020-02-19] + +### Features +- Add experimental `query` package. +- Create a Docker environment for Flux releases. +- Validate there are no free type variables in prelude/stdlib build. +- Add formatter library. + +### Bug fixes +- `derivative()` works properly across multiple buffers. +- Fix free type variable found in `tripleExponentialDerivative()`. +- Update type of `window()` function. +- Freshen row types using deterministic property order. +- Libflux JSON deserialization uses type properly. +- Expose the builtin polytypes when analyzing a `stdlib` package. +- Deserialize call expressions when arguments are missing. +- Handled malformed data as well as EOF. +- Allow unsigned integers to be subtractable. +- Link both `libflux` and `liblibstd` for flux-config. +- Link `libstd` into the `lib` directory instead of `libflux`. +- Flux-config correctly copies `stdlib` when using a module. +- Add 169.254/16 range to URL validator. +- Update `uuid` library to improve security. +- Handle invalid string literals. +- Remove 'tags' line from local tags. + +## v0.59.6 [2020-02-13] + +### Bug fixes +- `derivative()` works properly across multiple buffers. + +## v0.59.5 [2020-01-24] + +### Bug fixes +- Revert window optimizations to fix regression in output row sorting. + +## v0.59.4 [2020-01-21] + +### Bug fixes +- Remove `tags` line from local tags. +- Handle malformed data as well as EOF. + +## v0.59.3 [2020-01-16] + +### Bug fixes +- Link both `libflux` and `libstd` for flux-config. + +## v0.59.2 [2020-01-16] + +### Bug fixes +- Link `libstd` into the lib directory instead of `libflux`. + +## v0.59.1 [2020-01-16] + +### Bug fixes +- Flux-config correctly copies `stdlib` when using a module. +- UUID security. + +## v0.59.0 [2020-01-14] + +### Features +- Add Go/Rust API for getting semantic graph.. +- Optimize `limit()` transformation. +- Optimize `group()` transformation. + +### Bug fixes +- AST json serialization glitches. +- Better messaging for malformed CSV. +- Skip stdlib symlink was removed erroneously. +- Ensure stdlib directory is created. +- Correctly skip the stdlib symlink in libflux. +- Ensure that stdlib is present when building with flux-config. + +## v0.58.4 [2020-01-07] + +### Bug fixes +- Skip stdlib symlink was removed erroneously. + +## v0.58.3 [2020-01-07] + +### Bug fixes +- Ensure stdlib directory is created. + +## v0.58.2 [2020-01-07] + +### Bug fixes +- Correctly skip the stdlib symlink in libflux. + +## v0.58.1 [2020-01-07] + +### Bug fixes +- Ensure that stdlib is present when building with flux-config. + +## v0.58.0 [2020-01-06] + +### Features +- Serialize semantic graph flatbuffers. +- Implement `onEmpty` parameter for `filter()`. +- Serialize Flux standard library types as part of build process. +- Add type declarations for universe. +- Methods for type checking package dependencies. +- Add type declarations for strings. + +### Bug fixes +- Expose tracing flag. +- Update `count` builtin type. +- Update `experimental.set` builtin type. +- Update the type of `influxdb.to` to be a passthrough. +- Update `fill` builtin type. +- Remove redundant clones found by a new version of clippy. +- Fix durations in Rust semantic graph. +- Removes unnecessary rc clone in semantic serializer. +- Do not stall forever in flux-config when an error happens with verbose. +- Update function block return statements to produce a stmt and not an expression. +- Fix token location for `scan_with_regex`. +- Cache environment variable for performance. +- Fix a couple errors in builtin types. +- Annotate variable assignment with polytype (not monotype). + +## v0.57.0 [2019-12-10] + +### Features +- Categorize more flux errors with codes. +- Teach flux-config how to download the sources when using vendor. +- Opentracing in query execution runtime. +- Reduce memory allocations for operations in values. +- Translate FlatBuffers semantic graph to Go. +- Add types for some universe builtins. +- Add type declarations for builtins. +- Add Numeric and Row kind constraints. + +### Bug fixes +- Enable strict mode by default. + +## v0.56.0 [2019-12-05] + +### Features +- Crate for typing Flux standard library. +- Serialize type environment. +- Improve filter performance when filtering on values. +- Update usage duration test to exclude queue and requeue time. +- Add types for some built-ins. +- Add `timeout` parameter to experimental `http.get()`. + +### Bug fixes +- Properly use a fake version with `flux-config` when no version is present. +- Address clippy lints. +- Add bytes monotype to Rust semantic module. +- Allow underscores (`_`) in type expressions. + +## v0.55.1 [2019-12-02] + +### Bug fixes +- Fix e2e usage test so that their queries are properly pushed down. + +## v0.55.0 [2019-12-02] + +### Breaking changes +- Expand the interface for `BufferedTable`. + +### Features +- Expose optimized `pivot()` function. +- Create utility program for building `libflux`. +- Create a tool that measures performance of calling Rust from Go. +- Inject types in the semantic graph. +- MonoType and PolyType flatbuffer encodings. +- MonoType and PolyType flatbuffer schemas. +- Update Rust flatbuffers to more closely match Rust semantic graph. +- Flatbuffers AST to Go AST. +- Port immutable walk and fix mutable walk. +- Define the flatbuffers schema for semantic graph. +- Infer imported package types. +- Unify and infer function types. +- Add support for safely converting bytes to strings. +- Add sqlite3 support. +- Add internal table utility for streaming tables. + +### Bug fixes +- Update semantic graph FlatBuffers schema for identifiers. +- Ignore order when comparing record types. +- Operands for `<=` and `>=` are comparable AND equatable. +- Constrain unary expressions to be same type as operand. + +## v0.54.0 [2019-11-11] + +### Features +- Expose function to analyze from string. +- Added semantic expression constraints to libflux. +- Custom `PartialEq` for polytypes. +- Extensible record unification. +- `Semantic.Walk`. + +### Bug fixes +- Do not constrain type variables with empty kinds. +- Update usage tests to filter on `_field`. +- Record labels are scoped and fields are ordered. +- Parse row variables. +- Update make release to confirm remote and local are in sync. +- Make `walk_rc` public. + +## v0.53.0 [2019-11-05] + +### Breaking changes +- Interpret months as part of the semantic duration. + +### Features +- Macros for type inference tests. +- Let-polymorphism with test example. +- Generalization, instantiation, and constraint solving. +- Type environment. +- Convert Rust AST to FlatBuffers format. +- Allow lexing and parsing of string polytypes according to polytype grammar rules. +- Add month support when adding durations to a time value. +- Interpret months as part of the semantic duration. + +### Bug fixes +- Type variable constraints. +- Apply sub to both sides of constraint before unifying. +- Instantiate quantified vars, not free vars. + +## v0.52.0 [2019-10-30] + +### Features +- `Visitor` uses `Rc` for nodes. +- Add `EvalOptions`. + +### Bug fixes +- Correctly lex `µs`. + +## v0.51.0 [2019-10-24] + +### Breaking changes +- Update the Flux SPEC to remove duration addition and subtraction. +- Turn duration value into a vector. + +### Features +- Implementations for type substitutions and constraints. +- Add semantic analysis. +- Updated the duration value to include months and negative flag. +- Create a flatbuffers schema for AST. +- Add initial C binding for parsing an AST. +- Create a tool for updating `.flux` tests in-place. +- Add walk implementation. +- Turn duration value into a vector. +- Define initial Flux data types. + +### Bug fixes +- Update libflux parser to match the Go parser. +- Allow data collected by `prometheus.scrape()` to be used by `histogramQuantile()`. +- Remove mock allocator. +- Validate url for `sql.from()`, `sql.to()`, and `socket.from()`. + +## v0.50.2 [2019-10-24] ### Bug fixes - Make `keep()` and `drop()` throw an error if merging tables with different schemas. -## v0.x.1 [2019-10-24] +## v0.50.1 [2019-10-24] ### Bug fixes - Add annotated errors to the execute package where it affects normal usage. - Reorder variables in the allocator for atomic operations. -## v0.x.0 [2019-10-11] +## v0.50.0 [2019-10-11] ### Features - Add `experimental/prometheus` package. diff --git a/content/flux/v0.x/guides/monitor-states.md b/content/flux/v0.x/guides/monitor-states.md new file mode 100644 index 0000000000..3ef48f17f7 --- /dev/null +++ b/content/flux/v0.x/guides/monitor-states.md @@ -0,0 +1,148 @@ +--- +title: Monitor states +description: Flux provides several functions to help monitor states and state changes in your data. +menu: + flux_0_x: + name: Monitor states + parent: Guides +weight: 10 +--- + +Flux helps you monitor states in your metrics and events: + +- [Find how long a state persists](#find-how-long-a-state-persists) +- [Count the number of consecutive states](#count-the-number-of-consecutive-states) +- [Detect state changes](#detect-state-changes) + +If you're just getting started with Flux queries, check out the following: + +- [Get started with Flux](/v2.0/query-data/get-started/) for a conceptual overview of Flux. +- [Execute queries](/v2.0/query-data/execute-queries/) to discover a variety of ways to run your queries. + +## Find how long a state persists + +1. Use the [`stateDuration()`](/v2.0/reference/flux/stdlib/built-in/transformations/stateduration/) function to calculate how long a column value has remained the same value (or state). Include the following information: + + - **Column to search:** any tag key, tag value, field key, field value, or measurement. + - **Value:** the value (or state) to search for in the specified column. + - **State duration column:** a new column to store the state duration─the length of time that the specified value persists. + - **Unit:** the unit of time (`1s` (by default), `1m`, `1h`) used to increment the state duration. + + + ```js + |> stateDuration( + fn: (r) => + r._column_to_search == "value_to_search_for", + column: "state_duration", + unit: 1s + ) + ``` + +2. Use `stateDuration()` to search each point for the specified value: + + - For the first point that evaluates `true`, the state duration is set to `0`. For each consecutive point that evaluates `true`, the state duration increases by the time interval between each consecutive point (in specified units). + - If the state is `false`, the state duration is reset to `-1`. + +### Example query with stateDuration() + +The following query searches the `doors` bucket over the past 5 minutes to find how many seconds a door has been `closed`. + +```js +from(bucket: "doors") + |> range(start: -5m) + |> stateDuration( + fn: (r) => + r._value == "closed", + column: "door_closed", + unit: 1s + ) +``` + +In this example, `door_closed` is the **State duration** column. If you write data to the `doors` bucket every minute, the state duration increases by `60s` for each consecutive point where `_value` is `closed`. If `_value` is not `closed`, the state duration is reset to `0`. + +#### Query results + +Results for the example query above may look like this (for simplicity, we've omitted the measurement, tag, and field columns): + +```bash +_time _value door_closed +2019-10-26T17:39:16Z closed 0 +2019-10-26T17:40:16Z closed 60 +2019-10-26T17:41:16Z closed 120 +2019-10-26T17:42:16Z open -1 +2019-10-26T17:43:16Z closed 0 +2019-10-26T17:44:27Z closed 60 +``` + +## Count the number of consecutive states + +1. Use the `stateCount()` function and include the following information: + + - **Column to search:** any tag key, tag value, field key, field value, or measurement. + - **Value:** to search for in the specified column. + - **State count column:** a new column to store the state count─the number of consecutive records in which the specified value exists. + + + ```js + |> stateCount + (fn: (r) => + r._column_to_search == "value_to_search_for", + column: "state_count" + ) + ``` + +2. Use `stateCount()` to search each point for the specified value: + + - For the first point that evaluates `true`, the state count is set to `1`. For each consecutive point that evaluates `true`, the state count increases by 1. + - If the state is `false`, the state count is reset to `-1`. + +### Example query with stateCount() + +The following query searches the `doors` bucket over the past 5 minutes and +calculates how many points have `closed` as their `_value`. + +```js +from(bucket: "doors") + |> range(start: -5m) + |> stateDuration( + fn: (r) => + r._value == "closed", + column: "door_closed") +``` + +This example stores the **state count** in the `door_closed` column. +If you write data to the `doors` bucket every minute, the state count increases +by `1` for each consecutive point where `_value` is `closed`. +If `_value` is not `closed`, the state count is reset to `-1`. + +#### Query results + +Results for the example query above may look like this (for simplicity, we've omitted the measurement, tag, and field columns): + +```bash +_time _value door_closed +2019-10-26T17:39:16Z closed 1 +2019-10-26T17:40:16Z closed 2 +2019-10-26T17:41:16Z closed 3 +2019-10-26T17:42:16Z open -1 +2019-10-26T17:43:16Z closed 1 +2019-10-26T17:44:27Z closed 2 +``` + +#### Example query to count machine state + +The following query checks the machine state every minute (idle, assigned, or busy). +InfluxDB searches the `servers` bucket over the past hour and counts records with a machine state of `idle`, `assigned` or `busy`. + +```js +from(bucket: "servers") + |> range(start: -1h) + |> filter(fn: (r) => + r.machine_state == "idle" or + r.machine_state == "assigned" or + r.machine_state == "busy" + ) + |> stateCount(fn: (r) => r.machine_state == "busy", column: "_count") + |> stateCount(fn: (r) => r.machine_state == "assigned", column: "_count") + |> stateCount(fn: (r) => r.machine_state == "idle", column: "_count") +``` diff --git a/content/flux/v0.x/stdlib/mqtt/_index.md b/content/flux/v0.x/stdlib/mqtt/_index.md deleted file mode 100644 index b97f0dcbf2..0000000000 --- a/content/flux/v0.x/stdlib/mqtt/_index.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Flux MQTT package -description: > - The Flux MQTT package provides functions for working with MQTT protocol. - Import the `mqtt` package. -menu: - flux_0_x: - name: MQTT - parent: Standard library - weight: 1 -draft: true -aliases: - - /flux/v0.x/functions/mqtt/ ---- - -MQTT Flux functions provide tools for working with Message Queuing Telemetry Transport (MQTT) protocol. -Import the `mqtt` package: - -```js -import "mqtt" -``` - -{{< function-list >}} diff --git a/content/flux/v0.x/stdlib/mqtt/to.md b/content/flux/v0.x/stdlib/mqtt/to.md deleted file mode 100644 index 796fd0a492..0000000000 --- a/content/flux/v0.x/stdlib/mqtt/to.md +++ /dev/null @@ -1,131 +0,0 @@ ---- -title: mqtt.to() function -description: > - The `mqtt.to()` function outputs data to an MQTT broker using MQTT protocol. -menu: - flux_0_x: - name: mqtt.to - parent: MQTT - weight: 1 -draft: true -aliases: - - /flux/v0.x/functions/mqtt/to/ ---- - -The `mqtt.to()` function outputs data to an MQTT broker using MQTT protocol. - -_**Function type:** Output_ - -```js -import "mqtt" -mqtt.to( - broker: "tcp://localhost:8883", - topic: "example-topic", - message: "Example message", - qos: 0, - clientid: "flux-mqtt", - username: "username", - password: "password", - name: "name-example", - timeout: 1s, - timeColumn: "_time", - tagColumns: ["tag1", "tag2"], - valueColumns: ["_value"] -) -``` - -## Parameters - -### broker -The MQTT broker connection string. - -_**Data type:** String_ - -### topic -The MQTT topic to send data to. - -_**Data type:** String_ - -### message -The message or payload to send to the MQTT broker. -The default payload is an output table. -If there are multiple output tables, it sends each table as a separate MQTT message. - -{{% note %}} -When you specify a message, the function sends the message string only (no output table). -{{% /note %}} - -_**Data type:** String_ - -### qos -The [MQTT Quality of Service (QoS)](https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901103) level. -Values range from `[0-2]`. -Default is `0`. - -_**Data type:** Integer_ - -### clientid -The MQTT client ID. - -_**Data type:** String_ - -### username -The username to send to the MQTT broker. -Username is only required if the broker requires authentication. -If you provide a username, you must provide a [password](#password). - -_**Data type:** String_ - -### password -The password to send to the MQTT broker. -Password is only required if the broker requires authentication. -If you provide a password, you must provide a [username](#username). - -_**Data type:** String_ - -### name -_(Optional)_ The name for the MQTT message. - -_**Data type:** String_ - -### timeout -The MQTT connection timeout. -Default is `1s`. - -_**Data type:** Duration_ - -### timeColumn -The column to use as time values in the output line protocol. -Default is `"_time"`. - -_**Data type:** String_ - -### tagColumns -The columns to use as tag sets in the output line protocol. -Default is `[]`. - -_**Data type:** Array of strings_ - -### valueColumns -The columns to use as field values in the output line protocol. -Default is `["_value"]`. - -_**Data type:** Array of strings_ - -## Examples - -### Send data to an MQTT endpoint -```js -import "mqtt" - -from(bucket: "telegraf/autogen") - |> range(start: -5m) - |> filter(fn: (r) => r._measurement == "airSensor") - |> mqtt.to( - broker: "tcp://localhost:8883", - topic: "air-sensors", - clientid: "sensor-12a4", - tagColumns: ["sensorID"], - valueColumns: ["_value"] - ) -``` From ed356a234c262ee29afb236ab2a35c3f3394a432 Mon Sep 17 00:00:00 2001 From: Scott Anderson Date: Fri, 6 Mar 2020 17:04:35 -0700 Subject: [PATCH 04/25] added changes from flux 0.51 --- .../flux/v0.50/stdlib/built-in/misc/now.md | 2 +- .../flux/v0.x/guides/manipulate-timestamps.md | 22 ++++++- .../flux/v0.x/language/lexical-elements.md | 31 ++++++--- .../flux/v0.x/stdlib/built-in/outputs/to.md | 7 +- .../prometheus/histogramquantile.md | 46 +++++++++++++ content/flux/v0.x/stdlib/http/_index.md | 20 ++++++ content/flux/v0.x/stdlib/http/basicauth.md | 56 ++++++++++++++++ content/flux/v0.x/stdlib/http/endpoint.md | 47 ++++++++++++++ content/flux/v0.x/stdlib/http/post.md | 65 +++++++++++++++++++ 9 files changed, 284 insertions(+), 12 deletions(-) create mode 100644 content/flux/v0.x/stdlib/experimental/prometheus/histogramquantile.md create mode 100644 content/flux/v0.x/stdlib/http/_index.md create mode 100644 content/flux/v0.x/stdlib/http/basicauth.md create mode 100644 content/flux/v0.x/stdlib/http/endpoint.md create mode 100644 content/flux/v0.x/stdlib/http/post.md diff --git a/content/flux/v0.50/stdlib/built-in/misc/now.md b/content/flux/v0.50/stdlib/built-in/misc/now.md index 2000087ef5..9b320264be 100644 --- a/content/flux/v0.50/stdlib/built-in/misc/now.md +++ b/content/flux/v0.50/stdlib/built-in/misc/now.md @@ -2,7 +2,7 @@ title: now() function description: The `now()` function returns the current time (UTC). menu: - v2_0_ref: + flux_0_50: name: now parent: Miscellaneous weight: 1 diff --git a/content/flux/v0.x/guides/manipulate-timestamps.md b/content/flux/v0.x/guides/manipulate-timestamps.md index 1bb0ef8961..225250546e 100644 --- a/content/flux/v0.x/guides/manipulate-timestamps.md +++ b/content/flux/v0.x/guides/manipulate-timestamps.md @@ -59,7 +59,7 @@ to convert the duration to a string. ## Time-related Flux functions -### Retrieve the current time +### Retrieve the current UTC time Use the [`now()` function](/flux/v0.x/stdlib/built-in/misc/now/) to return the current UTC time in RFC3339 format. @@ -67,6 +67,26 @@ return the current UTC time in RFC3339 format. now() ``` +{{% note %}} +`now()` is cached at runtime, so all instances of `now()` in a Flux script +return the same value. +{{% /note %}} + +### Retrieve the current system time +Import the `system` package and use the [`system.time()` function](/v2.0/reference/flux/stdlib/system/time/) +to return the current system time of the host machine in RFC3339 format. + +```js +import "system" +system.time() +``` + +{{% note %}} +`system.time()` returns the time it is executed, so each instance of `system.time()` +in a Flux script returns a unique value. +{{% /note %}} + + ### Add a duration to a timestamp The [`experimental.addDuration()` function](/flux/v0.x/stdlib/experimental/addduration/) adds a duration to a specified time and returns the resulting time. diff --git a/content/flux/v0.x/language/lexical-elements.md b/content/flux/v0.x/language/lexical-elements.md index 3327daf4ff..825621dea6 100644 --- a/content/flux/v0.x/language/lexical-elements.md +++ b/content/flux/v0.x/language/lexical-elements.md @@ -158,13 +158,24 @@ duration_unit = "y" | "mo" | "w" | "d" | "h" | "m" | "s" | "ms" | "us" | "µs" | | ns | nanoseconds (1 billionth of a second) | Durations represent a length of time. -Lengths of time are dependent on specific instants in time they occur and as such, durations do not represent a fixed amount of time. -No amount of seconds is equal to a day, as days vary in their number of seconds. -No amount of days is equal to a month, as months vary in their number of days. -A duration consists of three basic time units: seconds, days and months. - -Durations can be combined via addition and subtraction. -Durations can be multiplied by an integer value. +Lengths of time are dependent on specific instants in time they occur and as such, +durations do not represent a fixed amount of time. +There are no amount of days equal to a month, as months vary in their number of days. +Durations are a tuple of positive integers that represent a duration and the sign +of the duration (positive or negative). +Durations are implemented this way so it is possible to determine whether a duration is positive or negative. +Since duration values depend on their context, the only way to know if a duration +is a positive or negative number is if all magnitudes have the same sign. +In the canonical implementation, this is implemented as a tuple of the months and +nanoseconds and a boolean that indicates whether it is positive or negative. +The spec does not prescribe a specific implementation and other implementations +may use a different internal representation. + +Durations cannot be combined by addition and subtraction. +All magnitudes in the tuple must be a positive integer which cannot be guaranteed +when using addition and subtraction. +Durations can be multiplied by any integer value. +The unary negative operator is the equivalent of multiplying the duration by -1. These operations are performed on each time unit independently. ##### Examples of duration literals @@ -172,9 +183,11 @@ These operations are performed on each time unit independently. ```js 1s 10d -1h15m // 1 hour and 15 minutes +1h15m // 1 hour and 15 minutes 5w -1mo5d // 1 month and 5 days +1mo5d // 1 month and 5 days +-1mo5d // negative 1 month and 5 days +5w * 2 // 10 weeks ``` Durations can be added to date times to produce a new date time. diff --git a/content/flux/v0.x/stdlib/built-in/outputs/to.md b/content/flux/v0.x/stdlib/built-in/outputs/to.md index b6ead241d3..8ca4eddd0c 100644 --- a/content/flux/v0.x/stdlib/built-in/outputs/to.md +++ b/content/flux/v0.x/stdlib/built-in/outputs/to.md @@ -146,7 +146,12 @@ The operation: ```js // ... -|> to(bucket:"my-bucket", org:"my-org", tagColumns:["tag1"], fieldFn: (r) => return {"hum": r.hum, "temp": r.temp}) +|> to( + bucket:"my-bucket", + org:"my-org", + tagColumns:["tag1"], + fieldFn: (r) => ({"hum": r.hum, "temp": r.temp}) +) ``` is equivalent to writing the above data using the following line protocol: diff --git a/content/flux/v0.x/stdlib/experimental/prometheus/histogramquantile.md b/content/flux/v0.x/stdlib/experimental/prometheus/histogramquantile.md new file mode 100644 index 0000000000..5ed1f24af1 --- /dev/null +++ b/content/flux/v0.x/stdlib/experimental/prometheus/histogramquantile.md @@ -0,0 +1,46 @@ +--- +title: prometheus.histogramQuantile() function +description: > + The `prometheus.histogramQuantile()` function calculates quantiles on a set of values + assuming the given histogram data is scraped or read from a Prometheus data source. +menu: + flux_0_x: + name: prometheus.histogramQuantile + parent: Prometheus +weight: 301 +--- + +The `prometheus.histogramQuantile()` function calculates quantiles on a set of values +assuming the given histogram data is scraped or read from a Prometheus data source. + +_**Function type:** Aggregate_ + +{{% warn %}} +The `prometheus.histogramQuantile()` function is currently experimental and subject to change at any time. +By using this function, you accept the [risks of experimental functions](/v2.0/reference/flux/stdlib/experimental/#use-experimental-functions-at-your-own-risk). +{{% /warn %}} + +```js +import "experimental/prometheus" + +prometheus.histogramQuantile( + quantile: 0.99 +) +``` + +## Parameters + +### quantile +A value between 0.0 and 1.0 indicating the desired quantile. + +_**Data type:** Float_ + +## Examples + +### Calculate the 99th quantile in Prometheus data +```js +import "experimental/prometheus" + +prometheus.scrape(url: "https://example-url.com/metrics") + |> prometheus.histogramQuantile(quantile: 0.99) +``` diff --git a/content/flux/v0.x/stdlib/http/_index.md b/content/flux/v0.x/stdlib/http/_index.md new file mode 100644 index 0000000000..a9901b758f --- /dev/null +++ b/content/flux/v0.x/stdlib/http/_index.md @@ -0,0 +1,20 @@ +--- +title: Flux HTTP package +description: > + The Flux HTTP package provides functions for transferring data using the HTTP protocol. + Import the `http` package. +menu: + flux_0_x: + name: HTTP + parent: Standard library +weight: 1 +--- + +The Flux HTTP package provides functions for transferring data using the HTTP protocol. +Import the `http` package: + +```js +import "http" +``` + +{{< function-list >}} diff --git a/content/flux/v0.x/stdlib/http/basicauth.md b/content/flux/v0.x/stdlib/http/basicauth.md new file mode 100644 index 0000000000..1defacbb87 --- /dev/null +++ b/content/flux/v0.x/stdlib/http/basicauth.md @@ -0,0 +1,56 @@ +--- +title: http.basicAuth() function +description: > + The `http.basicAuth()` function returns a Base64-encoded basic authentication + header using a specified username and password combination. +menu: + flux_0_x: + name: http.basicAuth + parent: HTTP +weight: 1 +--- + +The `http.basicAuth()` function returns a Base64-encoded basic authentication +header using a specified username and password combination. + +_**Function type:** Miscellaneous_ + +```js +import "http" + +http.basicAuth( + u: "username", + p: "passw0rd" +) + +// Returns "Basic dXNlcm5hbWU6cGFzc3cwcmQ=" +``` + +## Parameters + +### u +The username to use in the basic authentication header. + +_**Data type:** String_ + +### p +The password to use in the basic authentication header. + +_**Data type:** String_ + +## Examples + +##### Set a basic authentication header in an HTTP POST request +```js +import "monitor" +import "http" + +username = "myawesomeuser" +password = "mySupErSecRetPasSW0rD" + +http.post( + url: "http://myawesomesite.com/api/", + headers: {Authorization: http.basicAuth(u:username, p:password)}, + data: bytes(v: "something I want to send.") +) +``` diff --git a/content/flux/v0.x/stdlib/http/endpoint.md b/content/flux/v0.x/stdlib/http/endpoint.md new file mode 100644 index 0000000000..ce3860ea82 --- /dev/null +++ b/content/flux/v0.x/stdlib/http/endpoint.md @@ -0,0 +1,47 @@ +--- +title: http.endpoint() function +description: > + The `http.endpoint()` function sends output data to an HTTP URL using the POST request method. +menu: + flux_0_x: + name: http.endpoint + parent: HTTP +weight: 1 +--- + +The `http.endpoint()` function sends output data to an HTTP URL using the POST request method. + +_**Function type:** Output_ + +```js +import "http" + +http.endpoint( + url: "http://localhost:1234/" +) +``` + +## Parameters + +### url +The URL to POST to. + +_**Data type:** String_ + +### mapFn +A function that builds the object used to generate the POST request. + +{{% note %}} +_You should rarely need to override the default `mapFn` parameter. +To see the default `mapFn` value or for insight into possible overrides, view the +[`http.endpoint()` source code](https://github.com/influxdata/flux/blob/master/stdlib/http/http.flux)._ +{{% /note %}} + +_**Data type:** Function_ + +The returned object must include the following fields: + +- `headers` +- `data` + +_For more information, see [`http.post()`](/v2.0/reference/flux/stdlib/http/post/)_ diff --git a/content/flux/v0.x/stdlib/http/post.md b/content/flux/v0.x/stdlib/http/post.md new file mode 100644 index 0000000000..b05b8458fe --- /dev/null +++ b/content/flux/v0.x/stdlib/http/post.md @@ -0,0 +1,65 @@ +--- +title: http.post() function +description: > + The `http.post()` function submits an HTTP POST request to the specified URL with headers and data. + The HTTP status code is returned. +menu: + flux_0_x: + name: http.post + parent: HTTP +weight: 1 +--- + +The `http.post()` function submits an HTTP POST request to the specified URL with +headers and data and returns the HTTP status code. + +_**Function type:** Output_ + +```js +import "http" + +http.post( + url: "http://localhost:9999/", + headers: {x:"a", y:"b", z:"c"}, + data: bytes(v: "body") +) +``` + +## Parameters + +### url +The URL to POST to. + +_**Data type:** String_ + +### headers +Headers to include with the POST request. + +_**Data type:** Object_ + +### data +The data body to include with the POST request. + +_**Data type:** Bytes_ + +## Examples + +##### Send the last reported status to a URL +```js +import "json" +import "http" + +lastReported = + from(bucket: "example-bucket") + |> range(start: -1m) + |> filter(fn: (r) => r._measurement == "statuses") + |> last() + |> tableFind(fn: (key) => exists key._level) + |> getColumn(column: "_level") + +http.post( + url: "http://myawsomeurl.com/api/notify", + headers: {Authorization: "Bearer mySuPerSecRetTokEn"}, + data: bytes(v: lastReported[0]) +) +``` From 770a1ed5b60f976fcc00825cec55b6b38386baaa Mon Sep 17 00:00:00 2001 From: Scott Anderson Date: Fri, 6 Mar 2020 17:07:01 -0700 Subject: [PATCH 05/25] added changes from flux 0.53 --- .../flux/v0.x/language/lexical-elements.md | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/content/flux/v0.x/language/lexical-elements.md b/content/flux/v0.x/language/lexical-elements.md index 825621dea6..3ddaf62952 100644 --- a/content/flux/v0.x/language/lexical-elements.md +++ b/content/flux/v0.x/language/lexical-elements.md @@ -206,10 +206,13 @@ When months are added to a date times and the resulting date is past the end of 2018-01-31T00:00:00Z + 1mo // 2018-02-28T00:00:00Z, February 31th is rolled back to the last day of the month, February 28th in 2018. // Addition and subtraction of durations to date times does not commute -2018-02-28T00:00:00Z + 1mo + 1d // 2018-03-29T00:00:00Z -2018-02-28T00:00:00Z + 1d + 1mo // 2018-04-01T00:00:00Z -2018-01-01T00:00:00Z + 2mo - 1d // 2018-02-28T00:00:00Z -2018-01-01T00:00:00Z - 1d + 3mo // 2018-03-31T00:00:00Z +2018-02-28T00:00:00Z + 1mo + 1d // 2018-03-29T00:00:00Z +2018-02-28T00:00:00Z + 1mo + 1d // 2018-03-29T00:00:00Z +2018-02-28T00:00:00Z + 1d + 1mo // 2018-04-01T00:00:00Z +2018-01-01T00:00:00Z + 2mo - 1d // 2018-02-28T00:00:00Z +2018-01-01T00:00:00Z - 1d + 3mo // 2018-03-31T00:00:00Z +2018-01-31T00:00:00Z + 1mo + 1mo // 2018-03-28T00:00:00Z +2018-01-31T00:00:00Z + 2mo // 2018-03-31T00:00:00Z // Addition and subtraction of durations to date times applies months, days and seconds in that order. 2018-01-28T00:00:00Z + 1mo + 2d // 2018-03-02T00:00:00Z @@ -218,6 +221,14 @@ When months are added to a date times and the resulting date is past the end of 2018-02-01T00:00:00Z + 2mo2d // 2018-04-03T00:00:00Z 2018-01-01T00:00:00Z + 1mo30d // 2018-03-02T00:00:00Z, Months are applied first to get February 1st, then days are added resulting in March 2 in 2018. 2018-01-31T00:00:00Z + 1mo1d // 2018-03-01T00:00:00Z, Months are applied first to get February 28th, then days are added resulting in March 1 in 2018. + +// Multiplication works +2018-01-01T00:00:00Z + 1mo * 1 // 2018-02-01T00:00:00Z +2018-01-01T00:00:00Z + 1mo * 2 // 2018-03-01T00:00:00Z +2018-01-01T00:00:00Z + 1mo * 3 // 2018-04-01T00:00:00Z +2018-01-31T00:00:00Z + 1mo * 1 // 2018-02-28T00:00:00Z +2018-01-31T00:00:00Z + 1mo * 2 // 2018-03-31T00:00:00Z +2018-01-31T00:00:00Z + 1mo * 3 // 2018-04-30T00:00:00Z ``` > To be added: [IMPL#657](https://github.com/influxdata/platform/issues/657) Implement Duration vectors. From 9797e8c2f409b5a509e23f57f6374c62fffec053 Mon Sep 17 00:00:00 2001 From: Scott Anderson Date: Mon, 9 Mar 2020 09:33:15 -0600 Subject: [PATCH 06/25] added changes for flux 0.55 --- content/flux/v0.x/guides/sql.md | 17 +++- .../flux/v0.x/language/lexical-elements.md | 4 +- .../stdlib/built-in/transformations/join.md | 3 + .../stdlib/built-in/transformations/range.md | 2 + .../flux/v0.x/stdlib/experimental/_index.md | 42 --------- .../v0.x/stdlib/experimental/http/_index.md | 30 +++++++ .../flux/v0.x/stdlib/experimental/http/get.md | 88 +++++++++++++++++++ content/flux/v0.x/stdlib/sql/_index.md | 7 +- content/flux/v0.x/stdlib/sql/from.md | 20 ++++- content/flux/v0.x/stdlib/sql/to.md | 33 ++++++- 10 files changed, 190 insertions(+), 56 deletions(-) delete mode 100644 content/flux/v0.x/stdlib/experimental/_index.md create mode 100644 content/flux/v0.x/stdlib/experimental/http/_index.md create mode 100644 content/flux/v0.x/stdlib/experimental/http/get.md diff --git a/content/flux/v0.x/guides/sql.md b/content/flux/v0.x/guides/sql.md index 8e2f45d161..cb4c076728 100644 --- a/content/flux/v0.x/guides/sql.md +++ b/content/flux/v0.x/guides/sql.md @@ -12,8 +12,9 @@ menu: The [Flux](/flux/v0.x) `sql` package provides functions for working with SQL data sources. [`sql.from()`](/flux/v0.x/stdlib/sql/from/) lets you query SQL data sources -like [PostgreSQL](https://www.postgresql.org/) and [MySQL](https://www.mysql.com/) -and use the results with InfluxDB dashboards and other operations. +like [PostgreSQL](https://www.postgresql.org/), [MySQL](https://www.mysql.com/), +and [SQLite](https://www.sqlite.org/index.html), and use the results with InfluxDB +dashboards, tasks, and other operations. - [Query a SQL data source](#query-a-sql-data-source) - [Join SQL data with data in InfluxDB](#join-sql-data-with-data-in-influxdb) @@ -30,6 +31,7 @@ To query a SQL data source: {{% code-tabs %}} [PostgreSQL](#) [MySQL](#) +[SQLite](#) {{% /code-tabs %}} {{% code-tab-content %}} @@ -55,6 +57,17 @@ sql.from( ) ``` {{% /code-tab-content %}} + +{{% code-tab-content %}} +```js +import "sql" +sql.from( + driverName: "sqlite3", + dataSourceName: "file:test.db?cache=shared&mode=memory", + query: "SELECT * FROM example_table" +) +``` +{{% /code-tab-content %}} {{< /code-tabs-wrapper >}} _See the [`sql.from()` documentation](/flux/v0.x/stdlib/sql/from/) for diff --git a/content/flux/v0.x/language/lexical-elements.md b/content/flux/v0.x/language/lexical-elements.md index 3ddaf62952..6ee9f77647 100644 --- a/content/flux/v0.x/language/lexical-elements.md +++ b/content/flux/v0.x/language/lexical-elements.md @@ -68,8 +68,8 @@ empty in or package builtin The following character sequences represent operators: ``` -+ == != ( ) -- < !~ [ ] ++ == != ( ) => +- < !~ [ ] ^ * > =~ { } / <= = , : % >= <- . |> diff --git a/content/flux/v0.x/stdlib/built-in/transformations/join.md b/content/flux/v0.x/stdlib/built-in/transformations/join.md index a462f4729a..1c12f48f37 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/join.md +++ b/content/flux/v0.x/stdlib/built-in/transformations/join.md @@ -66,12 +66,15 @@ _**Data type:** String_ ###### Possible Values: - `inner` + + ## Examples diff --git a/content/flux/v0.x/stdlib/built-in/transformations/range.md b/content/flux/v0.x/stdlib/built-in/transformations/range.md index 4b41e9b3ea..c2accd1592 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/range.md +++ b/content/flux/v0.x/stdlib/built-in/transformations/range.md @@ -28,6 +28,7 @@ range(start: -15m, stop: now) ### start The earliest time to include in results. +Results **include** points that match the specified start time. Use a relative duration or absolute time. For example, `-1h` or `2019-08-28T22:00:00Z`. Durations are relative to `now()`. @@ -36,6 +37,7 @@ _**Data type:** Duration | Time_ ### stop The latest time to include in results. +Results **exclude** points that match the specified stop time. Use a relative duration or absolute time. For example, `-1h` or `2019-08-28T22:00:00Z`. Durations are relative to `now()`. diff --git a/content/flux/v0.x/stdlib/experimental/_index.md b/content/flux/v0.x/stdlib/experimental/_index.md deleted file mode 100644 index d23f307af8..0000000000 --- a/content/flux/v0.x/stdlib/experimental/_index.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: Flux Experimental package -list_title: Experimental package -description: > - The Flux Experimental package includes experimental functions that perform various tasks. - Experimental functions are subject to change at any time and are not recommended for production use. -menu: - flux_0_x: - name: Experimental - parent: Standard library -weight: 1 ---- - -The Flux Experimental package includes experimental functions that perform various tasks. - -{{% warn %}} -### Use experimental functions at your own risk -Experimental functions are subject to change and are **not recommended for production use**. -At any time, experimental functions and packages may: - -- be moved or promoted to a permanent location -- undergo API changes -- stop working with no planned fixes -- be removed without warning nor published explanation - -**By using experimental functions and packages, you agree to these risks.** -{{% /warn %}} - -## Experimental functions -The following functions are part of the base experimental package. -To use them, import the `experimental` package. - -```js -import "experimental" -``` - -{{< function-list >}} - -## Experimental packages -Experimental packages require different import paths than base experimental functions. - -{{< children show="sections" >}} diff --git a/content/flux/v0.x/stdlib/experimental/http/_index.md b/content/flux/v0.x/stdlib/experimental/http/_index.md new file mode 100644 index 0000000000..59e6453099 --- /dev/null +++ b/content/flux/v0.x/stdlib/experimental/http/_index.md @@ -0,0 +1,30 @@ +--- +title: Flux HTTP package +description: > + The Flux Experimental HTTP package provides functions for transferring data + using HTTP protocol. + Import the `experimental/http` package. +menu: + flux_0_x:: + name: HTTP + identifier: HTTP-exp + parent: Experimental +weight: 1 +--- + +The Flux Experimental HTTP package provides functions for transferring data +using HTTP protocol. + +{{% warn %}} +The experimental HTTP package is subject to change at any time. +By using this package, you accept the [risks of experimental functions](/flux/v0.x/stdlib/experimental/#use-experimental-functions-at-your-own-risk). +{{% /warn %}} + + +Import the `experimental/http` package: + +```js +import "experimental/http" +``` + +{{< function-list >}} diff --git a/content/flux/v0.x/stdlib/experimental/http/get.md b/content/flux/v0.x/stdlib/experimental/http/get.md new file mode 100644 index 0000000000..01e880ff31 --- /dev/null +++ b/content/flux/v0.x/stdlib/experimental/http/get.md @@ -0,0 +1,88 @@ +--- +title: http.get() function +description: > + The `http.get()` function submits an HTTP GET request to the specified URL and + returns the HTTP status code, response body, and response headers. +menu: + flux_0_x:: + name: http.get + parent: HTTP-exp +weight: 1 +--- + +The `http.get()` function submits an HTTP GET request to the specified URL and +returns the HTTP status code, response body, and response headers. + +_**Function type:** Miscellaneous_ + +{{% warn %}} +The `http.get()` function is currently experimental and subject to change at any time. +By using this function, you accept the [risks of experimental functions](/flux/v0.x/stdlib/experimental/#use-experimental-functions-at-your-own-risk). +{{% /warn %}} + + +```js +import "experimental/http" + +http.get( + url: "http://localhost:8086/", + headers: {x:"a", y:"b", z:"c"}, + timeout: 30s +) +``` + +## Parameters + +### url +The URL to send the GET request to. + +_**Data type:** String_ + +### headers +Headers to include with the GET request. + +_**Data type:** Object_ + +### timeout +Timeout for the GET request. +Default is `30s`. + +_**Data type:** Duration_ + +## Response format +`http.get` returns an object that contains the following: + +- [statusCode](#statuscode) +- [body](#body) +- [headers](#headers) + +### statusCode +The HTTP status code returned by the GET request. + +_**Data type:** Integer_ + +### body +The response body. + +_**Data type:** Byte Array_ + +### headers +Headers included with the response. + +_**Data type:** Object_ + +## Examples + +##### Get the status of InfluxDB +```js +import "experimental/http" + +response = http.get( + url: "http://localhost.com:8086/ping", + headers: {Authorization: "Token mySuP3rS3cretT0k3n"} + ) + +httpStatus = response.statusCode +responseBody = string(v: response.body) +responseHeaders = response.headers +``` diff --git a/content/flux/v0.x/stdlib/sql/_index.md b/content/flux/v0.x/stdlib/sql/_index.md index 781288cbe9..8168072c5c 100644 --- a/content/flux/v0.x/stdlib/sql/_index.md +++ b/content/flux/v0.x/stdlib/sql/_index.md @@ -1,8 +1,8 @@ --- title: Flux SQL package description: > - The Flux SQL package provides tools for working with data in SQL databases - such as MySQL and PostgreSQL. Import the `sql` package. + The Flux SQL package provides tools for working with data in SQL databases such + as MySQL, PostgreSQL, and SQLite. menu: flux_0_x: name: SQL @@ -12,7 +12,8 @@ aliases: - /flux/v0.x/functions/sql/ --- -SQL Flux functions provide tools for working with data in SQL databases such as MySQL and PostgreSQL. +SQL Flux functions provide tools for working with data in SQL databases such as +MySQL, PostgreSQL, and SQLite. Import the `sql` package: ```js diff --git a/content/flux/v0.x/stdlib/sql/from.md b/content/flux/v0.x/stdlib/sql/from.md index 364c0b54a4..b1c8502bc3 100644 --- a/content/flux/v0.x/stdlib/sql/from.md +++ b/content/flux/v0.x/stdlib/sql/from.md @@ -35,20 +35,24 @@ The following drivers are available: - mysql - postgres +- sqlite3 ### dataSourceName -The connection string used to connect to the SQL database. +The data source name (DSN) or connection string used to connect to the SQL database. The string's form and structure depend on the [driver](#drivername) used. _**Data type:** String_ ##### Driver dataSourceName examples ```sh -# Postgres Driver: +# Postgres Driver DSN: postgres://pqgotest:password@localhost/pqgotest?sslmode=verify-full -# MySQL Driver: +# MySQL Driver DSN: username:password@tcp(localhost:3306)/dbname?param=value + +# SQLite Driver DSN +file:test.db?cache=shared&mode=memory ``` ### query @@ -79,3 +83,13 @@ sql.from( query:"SELECT * FROM ExampleTable" ) ``` + +### Query an SQLite database +```js +import "sql" +sql.from( + driverName: "sqlite3", + dataSourceName: "file:test.db?cache=shared&mode=memory", + query:"SELECT * FROM ExampleTable" +) +``` diff --git a/content/flux/v0.x/stdlib/sql/to.md b/content/flux/v0.x/stdlib/sql/to.md index 2bfa9f8afe..53fcd55d33 100644 --- a/content/flux/v0.x/stdlib/sql/to.md +++ b/content/flux/v0.x/stdlib/sql/to.md @@ -20,7 +20,8 @@ import "sql" sql.to( driverName: "mysql", dataSourceName: "username:password@tcp(localhost:3306)/dbname?param=value", - table: "ExampleTable" + table: "ExampleTable", + batchSize: 10000 ) ``` @@ -35,20 +36,24 @@ The following drivers are available: - mysql - postgres +- sqlite3 ### dataSourceName -The connection string used to connect to the SQL database. +The data source name (DSN) or connection string used to connect to the SQL database. The string's form and structure depend on the [driver](#drivername) used. _**Data type:** String_ ##### Driver dataSourceName examples ```sh -# Postgres Driver +# Postgres Driver DSN postgres://pqgotest:password@localhost/pqgotest?sslmode=verify-full -# MySQL Driver +# MySQL Driver DSN username:password@tcp(localhost:3306)/dbname?param=value + +# SQLite Driver DSN +file:test.db?cache=shared&mode=memory ``` ### table @@ -56,6 +61,16 @@ The destination table. _**Data type:** String_ +### batchSize +The number of parameters or columns that can be queued within each call to `Exec`. +Defaults to `10000`. + +_**Data type:** Integer_ + +{{% note %}} +If writing to a **SQLite** database, set `batchSize` to `999` or less. +{{% /note %}} + ## Examples ### Write data to a MySQL database @@ -79,3 +94,13 @@ sql.to( table: "ExampleTable" ) ``` + +### Write data to an SQLite database +```js +import "sql" +sql.to( + driverName: "sqlite3", + dataSourceName: "file:test.db?cache=shared&mode=memory", + table: "ExampleTable" +) +``` From 77e3203d189f462a699ec79587a9715dc5ffa10c Mon Sep 17 00:00:00 2001 From: Scott Anderson Date: Mon, 9 Mar 2020 09:41:50 -0600 Subject: [PATCH 07/25] added changes for flux 0.57 --- .../built-in/transformations/type-conversions/bool.md | 2 ++ .../built-in/transformations/type-conversions/bytes.md | 2 ++ .../transformations/type-conversions/duration.md | 7 +++++++ .../built-in/transformations/type-conversions/float.md | 2 ++ .../built-in/transformations/type-conversions/int.md | 9 +++++++++ .../transformations/type-conversions/string.md | 2 ++ .../built-in/transformations/type-conversions/time.md | 6 ++++++ .../transformations/type-conversions/tobool.md | 3 ++- .../transformations/type-conversions/toduration.md | 8 +++++++- .../transformations/type-conversions/tofloat.md | 3 ++- .../built-in/transformations/type-conversions/toint.md | 10 +++++++++- .../transformations/type-conversions/tostring.md | 3 ++- .../transformations/type-conversions/totime.md | 7 ++++++- .../transformations/type-conversions/touint.md | 10 +++++++++- .../built-in/transformations/type-conversions/uint.md | 10 +++++++++- 15 files changed, 76 insertions(+), 8 deletions(-) diff --git a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/bool.md b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/bool.md index 826ac231b2..53027f77d8 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/bool.md +++ b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/bool.md @@ -24,6 +24,8 @@ bool(v: "true") ### v The value to convert. +_**Data type:** String | Float | Integer | Uinteger_ + ## Examples ```js from(bucket: "sensor-data") diff --git a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/bytes.md b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/bytes.md index 45334309b0..352c6ef3af 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/bytes.md +++ b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/bytes.md @@ -24,6 +24,8 @@ bytes(v: "1m") ### v The value to convert. +_**Data type:** String_ + ## Examples ```js from(bucket: "sensor-data") diff --git a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/duration.md b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/duration.md index 11de095a6a..5140dfe123 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/duration.md +++ b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/duration.md @@ -24,6 +24,13 @@ duration(v: "1m") ### v The value to convert. +_**Data type:** String | Integer | Uinteger_ + +{{% note %}} +`duration()` assumes **numeric** input values are **nanoseconds**. +**String** input values must use [duration literal representation](/flux/v0.x/language/lexical-elements/#duration-literals). +{{% /note %}} + ## Examples ```js from(bucket: "sensor-data") diff --git a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/float.md b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/float.md index 68aea2c72f..14799dd603 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/float.md +++ b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/float.md @@ -24,6 +24,8 @@ float(v: "3.14") ### v The value to convert. +_**Data type:** Boolean | Numeric String | Integer | Uinteger_ + ## Examples ```js from(bucket: "sensor-data") diff --git a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/int.md b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/int.md index 76224942d1..68fdbcccf0 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/int.md +++ b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/int.md @@ -24,6 +24,15 @@ int(v: "4") ### v The value to convert. +_**Data type:** Boolean | Duration | Float | Numeric String | Time | Uinteger_ + +For duration and time values, `int()` returns the following: + +| Input type | Returned value | +|:---------- |:-------------- | +| Duration | The number of nanoseconds in the specified duration | +| Time | A nanosecond epoch timestamp | + ## Examples ```js from(bucket: "sensor-data") diff --git a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/string.md b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/string.md index a49b308331..592fdd23a2 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/string.md +++ b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/string.md @@ -24,6 +24,8 @@ string(v: 123456789) ### v The value to convert. +_**Data type:** Boolean | Bytes | Duration | Float | Integer | Time | Uinteger_ + ## Examples ```js from(bucket: "sensor-data") diff --git a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/time.md b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/time.md index 5d3015cb0b..62ba5f8ca6 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/time.md +++ b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/time.md @@ -24,6 +24,12 @@ time(v: "2016-06-13T17:43:50.1004002Z") ### v The value to convert. +_**Data type:** String | Integer | Uinteger_ + +{{% note %}} +`time()` assumes all numeric input values are nanosecond epoch timestamps. +{{% /note %}} + ## Examples ```js from(bucket: "sensor-data") diff --git a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/tobool.md b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/tobool.md index 2a3f586ca5..9a785e46b5 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/tobool.md +++ b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/tobool.md @@ -14,12 +14,13 @@ menu: The `toBool()` function converts a value to a boolean. _**Function type:** Type conversion_ -_**Output data type:** Boolean_ ```js toBool() ``` +_**Supported data types:** Float | Integer | String | Uinteger_ + ## Examples ```js from(bucket: "telegraf") diff --git a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/toduration.md b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/toduration.md index e7d3a2e074..84826b5b35 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/toduration.md +++ b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/toduration.md @@ -18,12 +18,18 @@ menu: The `toDuration()` function converts a value to a duration. _**Function type:** Type conversion_ -_**Output data type:** Duration_ ```js toDuration() ``` +_**Supported data types:** String | Integer | Uinteger_ + +{{% note %}} +`duration()` assumes **numeric** input values are **nanoseconds**. +**String** input values must use [duration literal representation](/flux/v0.x/language/lexical-elements/#duration-literals). +{{% /note %}} + {{% note %}} To convert values in a column other than `_value`, define a custom function patterned after the [function definition](#function-definition), diff --git a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/tofloat.md b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/tofloat.md index a4d36c2a1c..94f8c82152 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/tofloat.md +++ b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/tofloat.md @@ -14,12 +14,13 @@ menu: The `toFloat()` function converts a value to a float. _**Function type:** Type conversion_ -_**Output data type:** Float_ ```js toFloat() ``` +_**Supported data types:** Boolean | Integer | Numeric String | Uinteger_ + {{% note %}} To convert values in a column other than `_value`, define a custom function patterned after the [function definition](#function-definition), diff --git a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/toint.md b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/toint.md index 507c490bbe..d83e974dfb 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/toint.md +++ b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/toint.md @@ -14,12 +14,20 @@ menu: The `toInt()` function converts a value to an integer. _**Function type:** Type conversion_ -_**Output data type:** Integer_ ```js toInt() ``` +_**Supported data types:** Boolean | Duration | Float | Numeric String | Time | Uinteger_ + +For duration and time values, `toInt()` returns the following: + +| Input type | Returned value | +|:---------- |:-------------- | +| Duration | The number of nanoseconds in the specified duration | +| Time | A nanosecond epoch timestamp | + {{% note %}} To convert values in a column other than `_value`, define a custom function patterned after the [function definition](#function-definition), diff --git a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/tostring.md b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/tostring.md index 9022676552..fc29faae58 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/tostring.md +++ b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/tostring.md @@ -14,12 +14,13 @@ menu: The `toString()` function converts a value to a string. _**Function type:** Type conversion_ -_**Output data type:** String_ ```js toString() ``` +_**Supported data types:** Boolean | Bytes | Duration | Float | Integer | Time | Uinteger_ + {{% note %}} To convert values in a column other than `_value`, define a custom function patterned after the [function definition](#function-definition), diff --git a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/totime.md b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/totime.md index da4b79e6b6..5a462ae520 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/totime.md +++ b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/totime.md @@ -14,12 +14,17 @@ menu: The `toTime()` function converts a value to a time. _**Function type:** Type conversion_ -_**Output data type:** Time_ ```js toTime() ``` +_**Supported data types:** Integer | String | Uinteger_ + +{{% note %}} +`toTime()` assumes all numeric input values are nanosecond epoch timestamps. +{{% /note %}} + {{% note %}} To convert values in a column other than `_value`, define a custom function patterned after the [function definition](#function-definition), diff --git a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/touint.md b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/touint.md index 8c204f65d3..7749011154 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/touint.md +++ b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/touint.md @@ -14,12 +14,20 @@ menu: The `toUInt()` function converts a value to an UInteger. _**Function type:** Type conversion_ -_**Output data type:** UInteger_ ```js toUInt() ``` +_**Supported data types:** Boolean | Duration | Float | Integer | Numeric String | Time_ + +For duration and time values, `toUint()` returns the following: + +| Input type | Returned value | +|:---------- |:-------------- | +| Duration | The number of nanoseconds in the specified duration | +| Time | A nanosecond epoch timestamp | + {{% note %}} To convert values in a column other than `_value`, define a custom function patterned after the [function definition](#function-definition), diff --git a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/uint.md b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/uint.md index 865dff12b3..f84bd79ef8 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/uint.md +++ b/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/uint.md @@ -13,12 +13,20 @@ aliases: The `uint()` function converts a single value to a UInteger. _**Function type:** Type conversion_ -_**Output data type:** UInteger_ ```js uint(v: "4") ``` +_**Data type:** Boolean | Duration | Float | Integer | Numeric String | Time_ + +For duration and time values, `uint()` returns the following: + +| Input type | Returned value | +|:---------- |:-------------- | +| Duration | The number of nanoseconds in the specified duration | +| Time | A nanosecond epoch timestamp | + ## Parameters ### v From afad04489b2ad1a59684203a0420efd15821461c Mon Sep 17 00:00:00 2001 From: Scott Anderson Date: Mon, 9 Mar 2020 09:43:22 -0600 Subject: [PATCH 08/25] added changes for flux 0.58 --- .../stdlib/built-in/transformations/filter.md | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/content/flux/v0.x/stdlib/built-in/transformations/filter.md b/content/flux/v0.x/stdlib/built-in/transformations/filter.md index c26f2dc42c..ff905d1f66 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/filter.md +++ b/content/flux/v0.x/stdlib/built-in/transformations/filter.md @@ -19,7 +19,10 @@ _**Function type:** Transformation_ _**Output data type:** Object_ ```js -filter(fn: (r) => r._measurement == "cpu") +filter( + fn: (r) => r._measurement == "cpu", + onEmpty: "drop" +) ``` ## Parameters @@ -39,6 +42,19 @@ Make sure `fn` parameter names match each specified parameter. To learn why, see [Match parameter names](/flux/v0.x/language/data-model/#match-parameter-names). {{% /note %}} +### onEmpty +Defines the behavior for empty tables. +Potential values are `keep` and `drop`. +Defaults to `drop`. + +##### drop +Empty tables are dropped. + +##### keep +Empty tables are output to the next transformation. + +_**Data type:** String_ + ## Examples ```js from(bucket:"telegraf/autogen") From 544d46d6224aef76b6bfbd6f9610e76290573d85 Mon Sep 17 00:00:00 2001 From: Scott Anderson Date: Mon, 9 Mar 2020 09:53:15 -0600 Subject: [PATCH 09/25] added updates for flux 0.60 --- .../flux/v0.50/stdlib/experimental/group.md | 2 +- .../flux/v0.50/stdlib/experimental/mqtt/to.md | 2 +- .../stdlib/experimental/prometheus/scrape.md | 2 +- content/flux/v0.50/stdlib/experimental/to.md | 2 +- .../flux/v0.x/guides/manipulate-timestamps.md | 2 +- content/flux/v0.x/guides/monitor-states.md | 2 +- .../flux/v0.x/stdlib/built-in/misc/length.md | 29 +++++ .../flux/v0.x/stdlib/experimental/group.md | 2 +- .../flux/v0.x/stdlib/experimental/mqtt/to.md | 2 +- .../prometheus/histogramquantile.md | 2 +- .../stdlib/experimental/prometheus/scrape.md | 2 +- .../v0.x/stdlib/experimental/query/_index.md | 38 ++++++ .../stdlib/experimental/query/filterfields.md | 58 +++++++++ .../experimental/query/filtermeasurement.md | 53 ++++++++ .../stdlib/experimental/query/fromrange.md | 76 ++++++++++++ .../stdlib/experimental/query/inbucket.md | 115 ++++++++++++++++++ content/flux/v0.x/stdlib/experimental/to.md | 2 +- content/flux/v0.x/stdlib/http/endpoint.md | 2 +- content/flux/v0.x/stdlib/http/post.md | 2 +- 19 files changed, 382 insertions(+), 13 deletions(-) create mode 100644 content/flux/v0.x/stdlib/built-in/misc/length.md create mode 100644 content/flux/v0.x/stdlib/experimental/query/_index.md create mode 100644 content/flux/v0.x/stdlib/experimental/query/filterfields.md create mode 100644 content/flux/v0.x/stdlib/experimental/query/filtermeasurement.md create mode 100644 content/flux/v0.x/stdlib/experimental/query/fromrange.md create mode 100644 content/flux/v0.x/stdlib/experimental/query/inbucket.md diff --git a/content/flux/v0.50/stdlib/experimental/group.md b/content/flux/v0.50/stdlib/experimental/group.md index 2901d473cb..ebabff7c88 100644 --- a/content/flux/v0.50/stdlib/experimental/group.md +++ b/content/flux/v0.50/stdlib/experimental/group.md @@ -53,7 +53,7 @@ Appends columns defined in the [`columns` parameter](#columns) to all existing ###### Include the value column in each groups' group key ```js -from(bucket: "example-bucket") +from(bucket: "telegraf/autogen") |> range(start: -1m) |> group(columns: ["_value"], mode: "extend") ``` diff --git a/content/flux/v0.50/stdlib/experimental/mqtt/to.md b/content/flux/v0.50/stdlib/experimental/mqtt/to.md index 71a21f2376..e9d6f97c06 100644 --- a/content/flux/v0.50/stdlib/experimental/mqtt/to.md +++ b/content/flux/v0.50/stdlib/experimental/mqtt/to.md @@ -121,7 +121,7 @@ _**Data type:** Array of strings_ ```js import "experimental/mqtt" -from(bucket: "example-bucket") +from(bucket: "telegraf/autogen") |> range(start: -5m) |> filter(fn: (r) => r._measurement == "airSensor") |> mqtt.to( diff --git a/content/flux/v0.50/stdlib/experimental/prometheus/scrape.md b/content/flux/v0.50/stdlib/experimental/prometheus/scrape.md index 36b0e13f1c..d6d181bfe4 100644 --- a/content/flux/v0.50/stdlib/experimental/prometheus/scrape.md +++ b/content/flux/v0.50/stdlib/experimental/prometheus/scrape.md @@ -47,6 +47,6 @@ import "experimental/prometheus" prometheus.scrape(url: "https://example-url.com/metrics") |> to( org: "example-org", - bucket: "example-bucket" + bucket: "telegraf/autogen" ) ``` diff --git a/content/flux/v0.50/stdlib/experimental/to.md b/content/flux/v0.50/stdlib/experimental/to.md index 65e7448819..b4b8fdd277 100644 --- a/content/flux/v0.50/stdlib/experimental/to.md +++ b/content/flux/v0.50/stdlib/experimental/to.md @@ -95,7 +95,7 @@ _**Data type:** String_ ```js import "experimental" -from(bucket: "example-bucket") +from(bucket: "telegraf/autogen") |> range(start: -1h) |> pivot( rowKey:["_time"], diff --git a/content/flux/v0.x/guides/manipulate-timestamps.md b/content/flux/v0.x/guides/manipulate-timestamps.md index 225250546e..e1fe70e45d 100644 --- a/content/flux/v0.x/guides/manipulate-timestamps.md +++ b/content/flux/v0.x/guides/manipulate-timestamps.md @@ -73,7 +73,7 @@ return the same value. {{% /note %}} ### Retrieve the current system time -Import the `system` package and use the [`system.time()` function](/v2.0/reference/flux/stdlib/system/time/) +Import the `system` package and use the [`system.time()` function](/flux/v0.x/stdlib/system/time/) to return the current system time of the host machine in RFC3339 format. ```js diff --git a/content/flux/v0.x/guides/monitor-states.md b/content/flux/v0.x/guides/monitor-states.md index 3ef48f17f7..8beae0c4e6 100644 --- a/content/flux/v0.x/guides/monitor-states.md +++ b/content/flux/v0.x/guides/monitor-states.md @@ -21,7 +21,7 @@ If you're just getting started with Flux queries, check out the following: ## Find how long a state persists -1. Use the [`stateDuration()`](/v2.0/reference/flux/stdlib/built-in/transformations/stateduration/) function to calculate how long a column value has remained the same value (or state). Include the following information: +1. Use the [`stateDuration()`](/flux/v0.x/stdlib/built-in/transformations/stateduration/) function to calculate how long a column value has remained the same value (or state). Include the following information: - **Column to search:** any tag key, tag value, field key, field value, or measurement. - **Value:** the value (or state) to search for in the specified column. diff --git a/content/flux/v0.x/stdlib/built-in/misc/length.md b/content/flux/v0.x/stdlib/built-in/misc/length.md new file mode 100644 index 0000000000..61107df2ee --- /dev/null +++ b/content/flux/v0.x/stdlib/built-in/misc/length.md @@ -0,0 +1,29 @@ +--- +title: length() function +description: The `length()` function returns the number of items in an array. +menu: + flux_0_x:: + name: length + parent: Miscellaneous +weight: 1 +--- + +The `length()` function returns the number of items in an array. + +_**Function type:** Miscellaneous_ + +```js +length(arr: []) +``` + +## Parameters + +### arr +The array to evaluate. + +## Examples +```js +people = ["John", "Jane", "Abed"] +length(arr: people) +// Returns 3 +``` diff --git a/content/flux/v0.x/stdlib/experimental/group.md b/content/flux/v0.x/stdlib/experimental/group.md index 8830f4065a..20bed5ba56 100644 --- a/content/flux/v0.x/stdlib/experimental/group.md +++ b/content/flux/v0.x/stdlib/experimental/group.md @@ -53,7 +53,7 @@ Appends columns defined in the [`columns` parameter](#columns) to all existing ###### Include the value column in each groups' group key ```js -from(bucket: "example-bucket") +from(bucket: "telegraf/autogen") |> range(start: -1m) |> group(columns: ["_value"], mode: "extend") ``` diff --git a/content/flux/v0.x/stdlib/experimental/mqtt/to.md b/content/flux/v0.x/stdlib/experimental/mqtt/to.md index 9c16efeadd..7647fa7100 100644 --- a/content/flux/v0.x/stdlib/experimental/mqtt/to.md +++ b/content/flux/v0.x/stdlib/experimental/mqtt/to.md @@ -121,7 +121,7 @@ _**Data type:** Array of strings_ ```js import "experimental/mqtt" -from(bucket: "example-bucket") +from(bucket: "telegraf/autogen") |> range(start: -5m) |> filter(fn: (r) => r._measurement == "airSensor") |> mqtt.to( diff --git a/content/flux/v0.x/stdlib/experimental/prometheus/histogramquantile.md b/content/flux/v0.x/stdlib/experimental/prometheus/histogramquantile.md index 5ed1f24af1..16f54eaad7 100644 --- a/content/flux/v0.x/stdlib/experimental/prometheus/histogramquantile.md +++ b/content/flux/v0.x/stdlib/experimental/prometheus/histogramquantile.md @@ -17,7 +17,7 @@ _**Function type:** Aggregate_ {{% warn %}} The `prometheus.histogramQuantile()` function is currently experimental and subject to change at any time. -By using this function, you accept the [risks of experimental functions](/v2.0/reference/flux/stdlib/experimental/#use-experimental-functions-at-your-own-risk). +By using this function, you accept the [risks of experimental functions](/flux/v0.x/stdlib/experimental/#use-experimental-functions-at-your-own-risk). {{% /warn %}} ```js diff --git a/content/flux/v0.x/stdlib/experimental/prometheus/scrape.md b/content/flux/v0.x/stdlib/experimental/prometheus/scrape.md index 9789e8c83f..d43dff8b5b 100644 --- a/content/flux/v0.x/stdlib/experimental/prometheus/scrape.md +++ b/content/flux/v0.x/stdlib/experimental/prometheus/scrape.md @@ -47,6 +47,6 @@ import "experimental/prometheus" prometheus.scrape(url: "https://example-url.com/metrics") |> to( org: "example-org", - bucket: "example-bucket" + bucket: "telegraf/autogen" ) ``` diff --git a/content/flux/v0.x/stdlib/experimental/query/_index.md b/content/flux/v0.x/stdlib/experimental/query/_index.md new file mode 100644 index 0000000000..23096965f4 --- /dev/null +++ b/content/flux/v0.x/stdlib/experimental/query/_index.md @@ -0,0 +1,38 @@ +--- +title: Flux Query package +list_title: Query package +description: > + The Flux Query package provides functions meant to simplify common InfluxDB queries. + Import the `experimental/query` package. +menu: + flux_0_x:: + name: Query + parent: Experimental +weight: 1 +--- + +Flux Query functions provide functions meant to simplify common InfluxDB queries. +Import the `experimental/query` package: + +```js +import "experimental/query" +``` + +{{< function-list >}} + +## inBucket() +The primary function in this package is [`query.inBucket()`](/flux/v0.x/stdlib/experimental/query/inbucket/), +which uses all other functions in this package. + +```js +import "experimental/query" + +query.inBucket( + bucket: "telegraf/autogen", + start: -1h, + stop: now(), + measurement: "mem", + fields: ["used_percent", "available_percent"], + predicate: (r) => r.tagA == "foo" and r.tagB != "bar" +) +``` diff --git a/content/flux/v0.x/stdlib/experimental/query/filterfields.md b/content/flux/v0.x/stdlib/experimental/query/filterfields.md new file mode 100644 index 0000000000..c46b1b139f --- /dev/null +++ b/content/flux/v0.x/stdlib/experimental/query/filterfields.md @@ -0,0 +1,58 @@ +--- +title: query.filterFields() function +description: > + The `query.filterFields()` function filters input data by field. +menu: + flux_0_x:: + name: query.filterFields + parent: Query +weight: 1 +--- + +The `query.filterFields()` function filters input data by field. + +_**Function type:** Transformation_ + +```js +import "experimental/query" + +query.filterFields( + fields: ["exampleField1", "exampleField2"] +) +``` + +## Parameters + +### fields +Fields to filter by. +Must be exact string matches. + +_**Data type:** Array of strings_ + +## Examples + +```js +import "experimental/query" + +query.fromRange(bucket: "telegraf/autogen", start: -1h) + |> query.filterFields( + fields: ["used_percent", "available_percent"] + ) +``` + +## Function definition +```js +package query + +filterFields = (tables=<-, fields=[]) => + if length(arr: fields) == 0 then + tables + else + tables + |> filter(fn: (r) => contains(value: r._field, set: fields)) +``` + +_**Used functions:**_ +[contains()](/flux/v0.x/stdlib/built-in/tests/contains/) +[filter()](/flux/v0.x/stdlib/built-in/transformations/filter/) +[length()](/flux/v0.x/stdlib/built-in/misc/length/) diff --git a/content/flux/v0.x/stdlib/experimental/query/filtermeasurement.md b/content/flux/v0.x/stdlib/experimental/query/filtermeasurement.md new file mode 100644 index 0000000000..6ce0f649fd --- /dev/null +++ b/content/flux/v0.x/stdlib/experimental/query/filtermeasurement.md @@ -0,0 +1,53 @@ +--- +title: query.filterMeasurement() function +description: > + The `query.filterMeasurement()` function filters input data by measurement. +menu: + flux_0_x:: + name: query.filterMeasurement + parent: Query +weight: 1 +--- + +The `query.filterMeasurement()` function filters input data by measurement. + +_**Function type:** Transformation_ + +```js +import "experimental/query" + +query.filterMeasurement( + measurement: "example-measurement" +) +``` + +## Parameters + +### measurement +The name of the measurement to filter by. +Must be an exact string match. + +_**Data type:** String_ + +## Examples + +```js +import "experimental/query" + +query.fromRange(bucket: "telegraf/autogen", start: -1h) + |> query.filterMeasurement( + measurement: "mem" + ) +``` + +## Function definition +```js +package query + +filterMeasurement = (tables=<-, measurement) => + tables + |> filter(fn: (r) => r._measurement == measurement) +``` + +_**Used functions:**_ +[filter()](/flux/v0.x/stdlib/built-in/transformations/filter/) diff --git a/content/flux/v0.x/stdlib/experimental/query/fromrange.md b/content/flux/v0.x/stdlib/experimental/query/fromrange.md new file mode 100644 index 0000000000..28ec4efa7c --- /dev/null +++ b/content/flux/v0.x/stdlib/experimental/query/fromrange.md @@ -0,0 +1,76 @@ +--- +title: query.fromRange() function +description: > + The `query.fromRange()` function returns all data from a specified bucket within + given time bounds. +menu: + flux_0_x:: + name: query.fromRange + parent: Query +weight: 1 +--- + +The `query.fromRange()` function returns all data from a specified bucket within +given time bounds. + +_**Function type:** Input_ + +```js +import "experimental/query" + +query.fromRange( + bucket: "telegraf/autogen", + start: -1h, + stop: now() +) +``` + +## Parameters + +### bucket +The name of the bucket to query. + +_**Data type:** String_ + +### start +The earliest time to include in results. +Results **include** points that match the specified start time. +Use a relative duration or absolute time. +For example, `-1h` or `2019-08-28T22:00:00Z`. +Durations are relative to `now()`. + +_**Data type:** Duration | Time_ + +### stop +The latest time to include in results. +Results **exclude** points that match the specified stop time. +Use a relative duration or absolute time. +For example, `-1h` or `2019-08-28T22:00:00Z`. +Durations are relative to `now()`. +Defaults to `now()`. + +_**Data type:** Duration | Time_ + +## Examples + +```js +import "experimental/query" + +query.fromRange( + bucket: "telegraf/autogen", + start: 2020-01-01T00:00:00Z +) +``` + +## Function definition +```js +package query + +fromRange = (bucket, start, stop=now()) => + from(bucket: bucket) + |> range(start: start, stop: stop) +``` + +_**Used functions:**_ +[from()](/flux/v0.x/stdlib/built-in/inputs/from/) +[range()](/flux/v0.x/stdlib/built-in/transformations/range/) diff --git a/content/flux/v0.x/stdlib/experimental/query/inbucket.md b/content/flux/v0.x/stdlib/experimental/query/inbucket.md new file mode 100644 index 0000000000..52d55cadca --- /dev/null +++ b/content/flux/v0.x/stdlib/experimental/query/inbucket.md @@ -0,0 +1,115 @@ +--- +title: query.inBucket() function +description: > + The `query.inBucket()` function queries data from a specified bucket within given + time bounds, filters data by measurement, field, and optional predicate expressions. +menu: + flux_0_x:: + name: query.inBucket + parent: Query +weight: 1 +--- + +The `query.inBucket()` function queries data from a specified bucket within given +time bounds, filters data by measurement, field, and optional predicate expressions. + +_**Function type:** Input_ + +```js +import "experimental/query" + +query.inBucket( + bucket: "telegraf/autogen", + start: -1h, + stop: now(), + measurement: "mem", + fields: ["used_percent", "available_percent"], + predicate: (r) => true +) +``` + +## Parameters + +### bucket +The name of the bucket to query. + +_**Data type:** String_ + +### start +The earliest time to include in results. +Results **include** points that match the specified start time. +Use a relative duration or absolute time. +For example, `-1h` or `2019-08-28T22:00:00Z`. +Durations are relative to `now()`. + +_**Data type:** Duration | Time_ + +### stop +The latest time to include in results. +Results **exclude** points that match the specified stop time. +Use a relative duration or absolute time. +For example, `-1h` or `2019-08-28T22:00:00Z`. +Durations are relative to `now()`. +Defaults to `now()`. + +_**Data type:** Duration | Time_ + +### measurement +The name of the measurement to filter by. +Must be an exact string match. + +_**Data type:** String_ + +### fields +Fields to filter by. +Must be exact string matches. + +_**Data type:** Array of strings_ + +### predicate +A single argument function that evaluates true or false. +Records are passed to the function. +Those that evaluate to `true` are included in the output tables. +Records that evaluate to `null` or `false` are not included in the output tables. +Default is `(r) => true`. + +_**Data type:** Function_ + +## Examples + +##### Query memory data from host1 +```js +import "experimental/query" + +query.inBucket( + bucket: "telegraf/autogen", + start: -1h, + measurement: "mem", + fields: ["used_percent", "available_percent"], + predicate: (r) => r.host == "host1" +) +``` + +## Function definition +```js +package query + +inBucket = ( + bucket, + start, + stop=now(), + measurement, + fields=[], + predicate=(r) => true +) => + fromRange(bucket: bucket, start: start, stop: stop) + |> filterMeasurement(measurement) + |> filter(fn: predicate) + |> filterFields(fields) +``` + +_**Used functions:**_ +[filter()](/flux/v0.x/stdlib/built-in/transformations/filter/) +[query.filterFields()](/flux/v0.x/stdlib/experimental/query/filterfields/) +[query.filterMeasurement()](/flux/v0.x/stdlib/experimental/query/filtermeasurement/) +[query.fromRange()](/flux/v0.x/stdlib/experimental/query/fromrange/) diff --git a/content/flux/v0.x/stdlib/experimental/to.md b/content/flux/v0.x/stdlib/experimental/to.md index 0b1672fc6c..314e4b7be9 100644 --- a/content/flux/v0.x/stdlib/experimental/to.md +++ b/content/flux/v0.x/stdlib/experimental/to.md @@ -95,7 +95,7 @@ _**Data type:** String_ ```js import "experimental" -from(bucket: "example-bucket") +from(bucket: "telegraf/autogen") |> range(start: -1h) |> pivot( rowKey:["_time"], diff --git a/content/flux/v0.x/stdlib/http/endpoint.md b/content/flux/v0.x/stdlib/http/endpoint.md index ce3860ea82..3308c07c7d 100644 --- a/content/flux/v0.x/stdlib/http/endpoint.md +++ b/content/flux/v0.x/stdlib/http/endpoint.md @@ -44,4 +44,4 @@ The returned object must include the following fields: - `headers` - `data` -_For more information, see [`http.post()`](/v2.0/reference/flux/stdlib/http/post/)_ +_For more information, see [`http.post()`](/flux/v0.x/stdlib/http/post/)_ diff --git a/content/flux/v0.x/stdlib/http/post.md b/content/flux/v0.x/stdlib/http/post.md index b05b8458fe..8b11a948a8 100644 --- a/content/flux/v0.x/stdlib/http/post.md +++ b/content/flux/v0.x/stdlib/http/post.md @@ -50,7 +50,7 @@ import "json" import "http" lastReported = - from(bucket: "example-bucket") + from(bucket: "telegraf/autogen") |> range(start: -1m) |> filter(fn: (r) => r._measurement == "statuses") |> last() From fe0c9c81117ae435c2d884e70c6784a27e706904 Mon Sep 17 00:00:00 2001 From: Scott Anderson Date: Mon, 9 Mar 2020 10:25:26 -0600 Subject: [PATCH 10/25] added flux experimental shortcode --- .../flux/v0.x/stdlib/built-in/misc/length.md | 2 +- .../flux/v0.x/stdlib/experimental/_index.md | 41 +++++++++++++++++++ .../v0.x/stdlib/experimental/addduration.md | 7 +--- .../stdlib/experimental/bigtable/_index.md | 6 --- .../v0.x/stdlib/experimental/bigtable/from.md | 5 --- .../flux/v0.x/stdlib/experimental/group.md | 7 +--- .../v0.x/stdlib/experimental/http/_index.md | 9 +--- .../flux/v0.x/stdlib/experimental/http/get.md | 8 +--- .../v0.x/stdlib/experimental/mqtt/_index.md | 6 --- .../flux/v0.x/stdlib/experimental/mqtt/to.md | 5 --- .../v0.x/stdlib/experimental/objectkeys.md | 7 +--- .../stdlib/experimental/prometheus/_index.md | 6 --- .../prometheus/histogramquantile.md | 5 --- .../stdlib/experimental/prometheus/scrape.md | 5 --- .../v0.x/stdlib/experimental/query/_index.md | 2 +- .../stdlib/experimental/query/filterfields.md | 2 +- .../experimental/query/filtermeasurement.md | 2 +- .../stdlib/experimental/query/fromrange.md | 2 +- .../stdlib/experimental/query/inbucket.md | 2 +- content/flux/v0.x/stdlib/experimental/set.md | 7 +--- .../v0.x/stdlib/experimental/subduration.md | 7 +--- content/flux/v0.x/stdlib/experimental/to.md | 7 +--- layouts/flux/section.html | 3 +- layouts/flux/single.html | 1 + layouts/partials/flux/experimental.html | 24 +++++++++++ layouts/shortcodes/function-list.html | 2 +- 26 files changed, 86 insertions(+), 94 deletions(-) create mode 100644 content/flux/v0.x/stdlib/experimental/_index.md create mode 100644 layouts/partials/flux/experimental.html diff --git a/content/flux/v0.x/stdlib/built-in/misc/length.md b/content/flux/v0.x/stdlib/built-in/misc/length.md index 61107df2ee..f3be40ce35 100644 --- a/content/flux/v0.x/stdlib/built-in/misc/length.md +++ b/content/flux/v0.x/stdlib/built-in/misc/length.md @@ -2,7 +2,7 @@ title: length() function description: The `length()` function returns the number of items in an array. menu: - flux_0_x:: + flux_0_x: name: length parent: Miscellaneous weight: 1 diff --git a/content/flux/v0.x/stdlib/experimental/_index.md b/content/flux/v0.x/stdlib/experimental/_index.md new file mode 100644 index 0000000000..c5b7eb1d97 --- /dev/null +++ b/content/flux/v0.x/stdlib/experimental/_index.md @@ -0,0 +1,41 @@ +--- +title: Flux Experimental package +description: > + The Flux Experimental package includes experimental functions that perform various tasks. + Experimental functions are subject to change at any time and are not recommended for production use. +menu: + flux_0_x: + name: Experimental + parent: Standard library +weight: 1 +--- + +The Flux Experimental package includes experimental functions that perform various tasks. + +{{% warn %}} +### Use experimental functions at your own risk +Experimental functions are subject to change and are **not recommended for production use**. +At any time, experimental functions and packages may: + +- be moved or promoted to a permanent location +- undergo API changes +- stop working with no planned fixes +- be removed without warning nor published explanation + +**By using experimental functions and packages, you agree to these risks.** +{{% /warn %}} + +## Experimental functions +The following functions are part of the base experimental package. +To use them, import the `experimental` package. + +```js +import "experimental" +``` + +{{< function-list >}} + +## Experimental packages +Experimental packages require different import paths than base experimental functions. + +{{< children show="sections" >}} diff --git a/content/flux/v0.x/stdlib/experimental/addduration.md b/content/flux/v0.x/stdlib/experimental/addduration.md index 2545b1c2d1..861630e90f 100644 --- a/content/flux/v0.x/stdlib/experimental/addduration.md +++ b/content/flux/v0.x/stdlib/experimental/addduration.md @@ -7,7 +7,7 @@ menu: flux_0_x: name: experimental.addDuration parent: Experimental -weight: 1 +weight: 2 --- The `experimental.addDuration()` function adds a duration to a time value and @@ -16,10 +16,7 @@ returns the resulting time value. _**Function type:** Transformation_ {{% warn %}} -The `experimental.addDuration()` function is subject to change at any time. -By using this function, you accept the [risks of experimental functions](/flux/v0.x/stdlib/experimental/#use-experimental-functions-at-your-own-risk). - -This specific function will be removed once duration vectors are implemented. +This function will be removed once duration vectors are implemented. See [influxdata/flux#413](https://github.com/influxdata/flux/issues/413). {{% /warn %}} diff --git a/content/flux/v0.x/stdlib/experimental/bigtable/_index.md b/content/flux/v0.x/stdlib/experimental/bigtable/_index.md index fa2701d2ab..c6ed9ffee9 100644 --- a/content/flux/v0.x/stdlib/experimental/bigtable/_index.md +++ b/content/flux/v0.x/stdlib/experimental/bigtable/_index.md @@ -12,12 +12,6 @@ weight: 1 The Flux Bigtable package provides tools for working with data in [Google Cloud Bigtable](https://cloud.google.com/bigtable/) databases. - -{{% warn %}} -The Bigtable package is currently experimental and subject to change at any time. -By using this package, you accept the [risks of experimental functions](/flux/v0.x/stdlib/experimental/#use-experimental-functions-at-your-own-risk). -{{% /warn %}} - Import the `experimental/bigtable` package: ```js diff --git a/content/flux/v0.x/stdlib/experimental/bigtable/from.md b/content/flux/v0.x/stdlib/experimental/bigtable/from.md index cf2c097ebe..6a46f522c6 100644 --- a/content/flux/v0.x/stdlib/experimental/bigtable/from.md +++ b/content/flux/v0.x/stdlib/experimental/bigtable/from.md @@ -14,11 +14,6 @@ data source. _**Function type:** Input_ -{{% warn %}} -The `bigtable.from()` function is currently experimental and subject to change at any time. -By using this function, you accept the [risks of experimental functions](/flux/v0.x/stdlib/experimental/#use-experimental-functions-at-your-own-risk). -{{% /warn %}} - ```js import "experimental/bigtable" diff --git a/content/flux/v0.x/stdlib/experimental/group.md b/content/flux/v0.x/stdlib/experimental/group.md index 20bed5ba56..50866fcfbd 100644 --- a/content/flux/v0.x/stdlib/experimental/group.md +++ b/content/flux/v0.x/stdlib/experimental/group.md @@ -7,7 +7,7 @@ menu: flux_0_x: name: experimental.group parent: Experimental -weight: 1 +weight: 2 --- The `experimental.group()` function introduces an `extend` mode to the existing @@ -16,10 +16,7 @@ The `experimental.group()` function introduces an `extend` mode to the existing _**Function type:** Transformation_ {{% warn %}} -The `experimental.group()` function is subject to change at any time. -By using this function, you accept the [risks of experimental functions](/flux/v0.x/stdlib/experimental/#use-experimental-functions-at-your-own-risk). - -This specific function will be removed once the proposed `extend` mode is sufficiently vetted. +This function will be removed once the proposed `extend` mode is sufficiently vetted. {{% /warn %}} ```js diff --git a/content/flux/v0.x/stdlib/experimental/http/_index.md b/content/flux/v0.x/stdlib/experimental/http/_index.md index 59e6453099..f23cdd8584 100644 --- a/content/flux/v0.x/stdlib/experimental/http/_index.md +++ b/content/flux/v0.x/stdlib/experimental/http/_index.md @@ -5,7 +5,7 @@ description: > using HTTP protocol. Import the `experimental/http` package. menu: - flux_0_x:: + flux_0_x: name: HTTP identifier: HTTP-exp parent: Experimental @@ -14,13 +14,6 @@ weight: 1 The Flux Experimental HTTP package provides functions for transferring data using HTTP protocol. - -{{% warn %}} -The experimental HTTP package is subject to change at any time. -By using this package, you accept the [risks of experimental functions](/flux/v0.x/stdlib/experimental/#use-experimental-functions-at-your-own-risk). -{{% /warn %}} - - Import the `experimental/http` package: ```js diff --git a/content/flux/v0.x/stdlib/experimental/http/get.md b/content/flux/v0.x/stdlib/experimental/http/get.md index 01e880ff31..725130ed9e 100644 --- a/content/flux/v0.x/stdlib/experimental/http/get.md +++ b/content/flux/v0.x/stdlib/experimental/http/get.md @@ -4,7 +4,7 @@ description: > The `http.get()` function submits an HTTP GET request to the specified URL and returns the HTTP status code, response body, and response headers. menu: - flux_0_x:: + flux_0_x: name: http.get parent: HTTP-exp weight: 1 @@ -15,12 +15,6 @@ returns the HTTP status code, response body, and response headers. _**Function type:** Miscellaneous_ -{{% warn %}} -The `http.get()` function is currently experimental and subject to change at any time. -By using this function, you accept the [risks of experimental functions](/flux/v0.x/stdlib/experimental/#use-experimental-functions-at-your-own-risk). -{{% /warn %}} - - ```js import "experimental/http" diff --git a/content/flux/v0.x/stdlib/experimental/mqtt/_index.md b/content/flux/v0.x/stdlib/experimental/mqtt/_index.md index 31bc73cc2d..cd73b66b6f 100644 --- a/content/flux/v0.x/stdlib/experimental/mqtt/_index.md +++ b/content/flux/v0.x/stdlib/experimental/mqtt/_index.md @@ -12,12 +12,6 @@ weight: 1 --- Flux MQTT functions provide tools for working with Message Queuing Telemetry Transport (MQTT) protocol. - -{{% warn %}} -The MQTT package is currently experimental and subject to change at any time. -By using this package, you accept the [risks of experimental functions](/flux/v0.x/stdlib/experimental/#use-experimental-functions-at-your-own-risk). -{{% /warn %}} - Import the `experimental/mqtt` package: ```js diff --git a/content/flux/v0.x/stdlib/experimental/mqtt/to.md b/content/flux/v0.x/stdlib/experimental/mqtt/to.md index 7647fa7100..f53d43f886 100644 --- a/content/flux/v0.x/stdlib/experimental/mqtt/to.md +++ b/content/flux/v0.x/stdlib/experimental/mqtt/to.md @@ -13,11 +13,6 @@ The `mqtt.to()` function outputs data to an MQTT broker using MQTT protocol. _**Function type:** Output_ -{{% warn %}} -The `mqtt.to()` function is currently experimental and subject to change at any time. -By using this function, you accept the [risks of experimental functions](/flux/v0.x/stdlib/experimental/#use-experimental-functions-at-your-own-risk). -{{% /warn %}} - ```js import "experimental/mqtt" diff --git a/content/flux/v0.x/stdlib/experimental/objectkeys.md b/content/flux/v0.x/stdlib/experimental/objectkeys.md index bed425eee3..f731818eff 100644 --- a/content/flux/v0.x/stdlib/experimental/objectkeys.md +++ b/content/flux/v0.x/stdlib/experimental/objectkeys.md @@ -6,18 +6,13 @@ menu: flux_0_x: name: experimental.objectKeys parent: Experimental -weight: 1 +weight: 2 --- The `experimental.objectKeys()` function returns an array of keys in a specified object. _**Function type:** Transformation_ -{{% warn %}} -The `experimental.objectKeys()` function is subject to change at any time. -By using this function, you accept the [risks of experimental functions](/flux/v0.x/stdlib/experimental/#use-experimental-functions-at-your-own-risk). -{{% /warn %}} - ```js import "experimental" diff --git a/content/flux/v0.x/stdlib/experimental/prometheus/_index.md b/content/flux/v0.x/stdlib/experimental/prometheus/_index.md index b9ecc95a23..8256b8dba1 100644 --- a/content/flux/v0.x/stdlib/experimental/prometheus/_index.md +++ b/content/flux/v0.x/stdlib/experimental/prometheus/_index.md @@ -12,12 +12,6 @@ weight: 1 Flux Prometheus functions provide tools for working with [Prometheus-formatted metrics](https://prometheus.io/docs/instrumenting/exposition_formats/). - -{{% warn %}} -The Prometheus package is currently experimental and subject to change at any time. -By using this package, you accept the [risks of experimental functions](/flux/v0.x/stdlib/experimental/#use-experimental-functions-at-your-own-risk). -{{% /warn %}} - Import the `experimental/prometheus` package: ```js diff --git a/content/flux/v0.x/stdlib/experimental/prometheus/histogramquantile.md b/content/flux/v0.x/stdlib/experimental/prometheus/histogramquantile.md index 16f54eaad7..f2944d21b5 100644 --- a/content/flux/v0.x/stdlib/experimental/prometheus/histogramquantile.md +++ b/content/flux/v0.x/stdlib/experimental/prometheus/histogramquantile.md @@ -15,11 +15,6 @@ assuming the given histogram data is scraped or read from a Prometheus data sour _**Function type:** Aggregate_ -{{% warn %}} -The `prometheus.histogramQuantile()` function is currently experimental and subject to change at any time. -By using this function, you accept the [risks of experimental functions](/flux/v0.x/stdlib/experimental/#use-experimental-functions-at-your-own-risk). -{{% /warn %}} - ```js import "experimental/prometheus" diff --git a/content/flux/v0.x/stdlib/experimental/prometheus/scrape.md b/content/flux/v0.x/stdlib/experimental/prometheus/scrape.md index d43dff8b5b..568c205395 100644 --- a/content/flux/v0.x/stdlib/experimental/prometheus/scrape.md +++ b/content/flux/v0.x/stdlib/experimental/prometheus/scrape.md @@ -18,11 +18,6 @@ The function groups metrics (including histogram and summary values) into indivi _**Function type:** Input_ -{{% warn %}} -The `prometheus.scrape()` function is currently experimental and subject to change at any time. -By using this function, you accept the [risks of experimental functions](/flux/v0.x/stdlib/experimental/#use-experimental-functions-at-your-own-risk). -{{% /warn %}} - ```js import "experimental/prometheus" diff --git a/content/flux/v0.x/stdlib/experimental/query/_index.md b/content/flux/v0.x/stdlib/experimental/query/_index.md index 23096965f4..cef158760d 100644 --- a/content/flux/v0.x/stdlib/experimental/query/_index.md +++ b/content/flux/v0.x/stdlib/experimental/query/_index.md @@ -5,7 +5,7 @@ description: > The Flux Query package provides functions meant to simplify common InfluxDB queries. Import the `experimental/query` package. menu: - flux_0_x:: + flux_0_x: name: Query parent: Experimental weight: 1 diff --git a/content/flux/v0.x/stdlib/experimental/query/filterfields.md b/content/flux/v0.x/stdlib/experimental/query/filterfields.md index c46b1b139f..58e373dd64 100644 --- a/content/flux/v0.x/stdlib/experimental/query/filterfields.md +++ b/content/flux/v0.x/stdlib/experimental/query/filterfields.md @@ -3,7 +3,7 @@ title: query.filterFields() function description: > The `query.filterFields()` function filters input data by field. menu: - flux_0_x:: + flux_0_x: name: query.filterFields parent: Query weight: 1 diff --git a/content/flux/v0.x/stdlib/experimental/query/filtermeasurement.md b/content/flux/v0.x/stdlib/experimental/query/filtermeasurement.md index 6ce0f649fd..ab7fe3f1c3 100644 --- a/content/flux/v0.x/stdlib/experimental/query/filtermeasurement.md +++ b/content/flux/v0.x/stdlib/experimental/query/filtermeasurement.md @@ -3,7 +3,7 @@ title: query.filterMeasurement() function description: > The `query.filterMeasurement()` function filters input data by measurement. menu: - flux_0_x:: + flux_0_x: name: query.filterMeasurement parent: Query weight: 1 diff --git a/content/flux/v0.x/stdlib/experimental/query/fromrange.md b/content/flux/v0.x/stdlib/experimental/query/fromrange.md index 28ec4efa7c..9bae5d4568 100644 --- a/content/flux/v0.x/stdlib/experimental/query/fromrange.md +++ b/content/flux/v0.x/stdlib/experimental/query/fromrange.md @@ -4,7 +4,7 @@ description: > The `query.fromRange()` function returns all data from a specified bucket within given time bounds. menu: - flux_0_x:: + flux_0_x: name: query.fromRange parent: Query weight: 1 diff --git a/content/flux/v0.x/stdlib/experimental/query/inbucket.md b/content/flux/v0.x/stdlib/experimental/query/inbucket.md index 52d55cadca..20378fb55e 100644 --- a/content/flux/v0.x/stdlib/experimental/query/inbucket.md +++ b/content/flux/v0.x/stdlib/experimental/query/inbucket.md @@ -4,7 +4,7 @@ description: > The `query.inBucket()` function queries data from a specified bucket within given time bounds, filters data by measurement, field, and optional predicate expressions. menu: - flux_0_x:: + flux_0_x: name: query.inBucket parent: Query weight: 1 diff --git a/content/flux/v0.x/stdlib/experimental/set.md b/content/flux/v0.x/stdlib/experimental/set.md index 02b22653fd..8dce588136 100644 --- a/content/flux/v0.x/stdlib/experimental/set.md +++ b/content/flux/v0.x/stdlib/experimental/set.md @@ -6,7 +6,7 @@ menu: flux_0_x: name: experimental.set parent: Experimental -weight: 1 +weight: 2 --- The `experimental.set()` function sets multiple static column values on all records. @@ -18,11 +18,6 @@ _Once sufficiently vetted, `experimental.set()` will replace the existing _**Function type:** Transformation_ -{{% warn %}} -The `experimental.set()` function is subject to change at any time. -By using this function, you accept the [risks of experimental functions](/flux/v0.x/stdlib/experimental/#use-experimental-functions-at-your-own-risk). -{{% /warn %}} - ```js import "experimental" diff --git a/content/flux/v0.x/stdlib/experimental/subduration.md b/content/flux/v0.x/stdlib/experimental/subduration.md index 963e156bdd..e2b8ab085a 100644 --- a/content/flux/v0.x/stdlib/experimental/subduration.md +++ b/content/flux/v0.x/stdlib/experimental/subduration.md @@ -7,7 +7,7 @@ menu: flux_0_x: name: experimental.subDuration parent: Experimental -weight: 1 +weight: 2 --- The `experimental.subDuration()` function subtracts a duration from a time value and @@ -16,10 +16,7 @@ returns the resulting time value. _**Function type:** Transformation_ {{% warn %}} -The `experimental.subDuration()` function is subject to change at any time. -By using this function, you accept the [risks of experimental functions](/flux/v0.x/stdlib/experimental/#use-experimental-functions-at-your-own-risk). - -This specific function will be removed once duration vectors are implemented. +This function will be removed once duration vectors are implemented. See [influxdata/flux#413](https://github.com/influxdata/flux/issues/413). {{% /warn %}} diff --git a/content/flux/v0.x/stdlib/experimental/to.md b/content/flux/v0.x/stdlib/experimental/to.md index 314e4b7be9..0108bdd358 100644 --- a/content/flux/v0.x/stdlib/experimental/to.md +++ b/content/flux/v0.x/stdlib/experimental/to.md @@ -7,7 +7,7 @@ menu: flux_0_x: name: experimental.to parent: Experimental -weight: 1 +weight: 2 --- The `experimental.to()` function writes data to an InfluxDB v2.0 bucket, but in @@ -16,11 +16,6 @@ a [different structure](#expected-data-structure) than the _**Function type:** Output_ -{{% warn %}} -The `experimental.to()` function is subject to change at any time. -By using this function, you accept the [risks of experimental functions](/flux/v0.x/stdlib/experimental/#use-experimental-functions-at-your-own-risk). -{{% /warn %}} - ```js import "experimental" diff --git a/layouts/flux/section.html b/layouts/flux/section.html index 83d869d02e..3432d3d466 100644 --- a/layouts/flux/section.html +++ b/layouts/flux/section.html @@ -10,7 +10,8 @@

{{ .Title }}

{{ end }}
- {{ partial "flux/version.html" . }} + {{ partial "flux/version.html" . }} + {{ partial "flux/experimental.html" . }} {{ .Content }}
diff --git a/layouts/flux/single.html b/layouts/flux/single.html index 517eda49d1..c87fd1280b 100644 --- a/layouts/flux/single.html +++ b/layouts/flux/single.html @@ -11,6 +11,7 @@

{{ .Title }}

{{ partial "flux/version.html" . }} + {{ partial "flux/experimental.html" . }} {{ .Content }}
diff --git a/layouts/partials/flux/experimental.html b/layouts/partials/flux/experimental.html new file mode 100644 index 0000000000..66e2b3c180 --- /dev/null +++ b/layouts/partials/flux/experimental.html @@ -0,0 +1,24 @@ +{{ $currentVersion := (index (findRE "[^/]+.*?" .RelPermalink) 1) .RelPermalink }} +{{ $expRiskURL := print "/flux/" $currentVersion "/stdlib/experimental/#use-experimental-functions-at-your-own-risk" }} +{{ $expPath := print "/flux/" $currentVersion "/stdlib/experimental/" }} + +{{ if in .RelPermalink $expPath }} + {{ if not (eq .RelPermalink $expPath) }} + {{ if eq .Kind "page" }} + {{ $name := replaceRE `^\w*\.\w*\(\)` "$0" .Title }} +
+

+ The {{ $name | safeHTML }} is {{ if in $name "experimental" }}{{ else }}experimental and{{ end }} subject to change at any time. + By using this function, you accept the risks of experimental functions. +

+
+ {{ else if eq .Kind "section" }} +
+

+ The {{ replaceRE "Flux " "" .Title }} is experimental and subject to change at any time. + By using this function, you accept the risks of experimental functions. +

+
+ {{ end }} + {{ end }} +{{ end }} diff --git a/layouts/shortcodes/function-list.html b/layouts/shortcodes/function-list.html index 284b03d1f3..7c280093b5 100644 --- a/layouts/shortcodes/function-list.html +++ b/layouts/shortcodes/function-list.html @@ -1,4 +1,4 @@ -{{ $pages := .Page.Pages }} +{{ $pages := .Page.RegularPages }}
    {{ range $pages.ByWeight }} {{ $title := replaceRE `\ function` "" .Title }} From 74027a45c67eed5c0138786b75deb18f75e355d9 Mon Sep 17 00:00:00 2001 From: Scott Anderson Date: Mon, 9 Mar 2020 10:28:42 -0600 Subject: [PATCH 11/25] added changes for flux 0.61 --- .../stdlib/experimental/aggregate/_index.md | 21 +++++ .../stdlib/experimental/aggregate/rate.md | 77 +++++++++++++++++++ 2 files changed, 98 insertions(+) create mode 100644 content/flux/v0.x/stdlib/experimental/aggregate/_index.md create mode 100644 content/flux/v0.x/stdlib/experimental/aggregate/rate.md diff --git a/content/flux/v0.x/stdlib/experimental/aggregate/_index.md b/content/flux/v0.x/stdlib/experimental/aggregate/_index.md new file mode 100644 index 0000000000..2602af3738 --- /dev/null +++ b/content/flux/v0.x/stdlib/experimental/aggregate/_index.md @@ -0,0 +1,21 @@ +--- +title: Flux Aggregate package +list_title: Aggregate package +description: > + The Flux Aggregate package provides functions to simplify common aggregate operations. + Import the `experimental/aggregate` package. +menu: + flux_0_x: + name: Aggregate + parent: Experimental +weight: 1 +--- + +The Flux Aggregate package provides functions to simplify common aggregate operations. +Import the `experimental/aggregate` package: + +```js +import "experimental/aggregate" +``` + +{{< function-list >}} diff --git a/content/flux/v0.x/stdlib/experimental/aggregate/rate.md b/content/flux/v0.x/stdlib/experimental/aggregate/rate.md new file mode 100644 index 0000000000..5b99c7e1cc --- /dev/null +++ b/content/flux/v0.x/stdlib/experimental/aggregate/rate.md @@ -0,0 +1,77 @@ +--- +title: aggregate.rate() function +description: > + The `aggregate.rate()` function calculates the rate of change per windows of time. +menu: + flux_0_x: + name: aggregate.rate + parent: Aggregate +weight: 1 +--- + +The `aggregate.rate()` function calculates the rate of change per windows of time. + +_**Function type:** Transformation_ + +```js +import "experimental/query" + +aggregate.rate( + every: 1m, + groupColumns: ["column1", "column2"], + unit: 1s +) +``` + +## Parameters + +### every +Duration of time windows. + +_**Data type:** Duration_ + +### groupColumns +List of columns to group by. Defaults to `[]`. + +_**Data type:** Array of strings_ + +### unit +The time duration to use when calculating the rate. Defaults to `1s`. + +_**Data type:** Duration_ + +## Examples + +```js +import "experimental/aggregate" + +from(bucket: "telegraf/autogen") + |> range(start: -1h) + |> aggregate.rate(every: 5m, unit: 1m) +``` + +## Function definition +```js +package aggregate + +import "experimental" + +rate = (tables=<-, every, groupColumns=[], unit=1s) => + tables + |> derivative(nonNegative:true, unit:unit) + |> aggregateWindow(every: every, fn : (tables=<-, column) => + tables + |> mean(column: column) + |> group(columns: groupColumns) + |> experimental.group(columns: ["_start", "_stop"], mode:"extend") + |> sum() + ) +``` + +_**Used functions:**_ +[aggregateWindow()](/flux/v0.x/stdlib/built-in/transformations/aggregates/aggregatewindow/) +[derivative()](/flux/v0.x/stdlib/built-in/transformations/aggregates/derivative/) +[experimental.group()](/flux/v0.x/stdlib/experimental/group/) +[group()](/flux/v0.x/stdlib/built-in/transformations/group/) +[mean()](/flux/v0.x/stdlib/built-in/transformations/aggregates/mean/) +[sum()](/flux/v0.x/stdlib/built-in/transformations/aggregates/sum/) From 17e28b3c03c30567a81eca2a5b0f1a5f1bff5591 Mon Sep 17 00:00:00 2001 From: Scott Anderson Date: Mon, 9 Mar 2020 10:44:13 -0600 Subject: [PATCH 12/25] added updates for flux 0.63 --- .../v0.x/stdlib/experimental/geo/_index.md | 123 ++++++++++++ .../v0.x/stdlib/experimental/geo/astracks.md | 67 +++++++ .../stdlib/experimental/geo/filterrows.md | 179 ++++++++++++++++++ .../stdlib/experimental/geo/gridfilter.md | 130 +++++++++++++ .../stdlib/experimental/geo/groupbyarea.md | 69 +++++++ .../stdlib/experimental/geo/strictfilter.md | 95 ++++++++++ .../v0.x/stdlib/experimental/geo/torows.md | 53 ++++++ 7 files changed, 716 insertions(+) create mode 100644 content/flux/v0.x/stdlib/experimental/geo/_index.md create mode 100644 content/flux/v0.x/stdlib/experimental/geo/astracks.md create mode 100644 content/flux/v0.x/stdlib/experimental/geo/filterrows.md create mode 100644 content/flux/v0.x/stdlib/experimental/geo/gridfilter.md create mode 100644 content/flux/v0.x/stdlib/experimental/geo/groupbyarea.md create mode 100644 content/flux/v0.x/stdlib/experimental/geo/strictfilter.md create mode 100644 content/flux/v0.x/stdlib/experimental/geo/torows.md diff --git a/content/flux/v0.x/stdlib/experimental/geo/_index.md b/content/flux/v0.x/stdlib/experimental/geo/_index.md new file mode 100644 index 0000000000..be0ce92206 --- /dev/null +++ b/content/flux/v0.x/stdlib/experimental/geo/_index.md @@ -0,0 +1,123 @@ +--- +title: Flux Geo package +list_title: Geo package +description: > + The Flux Geo package provides tools for working with geo-temporal data, + such as filtering and grouping by geographic location. + Import the `experimental/geo` package. +menu: + flux_0_x: + name: Geo + parent: Experimental +weight: 1 +--- + +The Flux Geo package provides tools for working with geo-temporal data, +such as filtering and grouping by geographic location. +Import the `experimental/geo` package: + +```js +import "experimental/geo" +``` + +{{< function-list >}} + +## Geo schema requirements +The Geo package uses the Go implementation of the [S2 Geometry Library](https://s2geometry.io/). +Functions in the Geo package require the following: + +- a **`s2_cell_id` tag** containing an **S2 cell ID as a token** (more information [below](#s2-cell-ids)) +- a **`lat` field** containing the **latitude in decimal degrees** (WGS 84) +- a **`lon` field** containing the **longitude in decimal degrees** (WGS 84) + +#### Schema recommendations +- a tag that identifies the data source +- a tag that identifies the point type (for example: `start`, `stop`, `via`) +- a field that identifies the track or route (for example: `id`, `tid`) + +##### Examples of geo-temporal line protocol +``` +taxi,pt=start,s2_cell_id=89c2594 tip=3.75,dist=14.3,lat=40.744614,lon=-73.979424,tid=1572566401123234345i 1572566401947779410 +bike,id=biker-007,pt=via,s2_cell_id=89c25dc lat=40.753944,lon=-73.992035,tid=1572588100i 1572567115 +``` + +## S2 Cell IDs +Use **latitude** and **longitude** with the `s2.CellID.ToToken` endpoint of the S2 +Geometry Library to generate `s2_cell_id` tags. +Specify your [S2 Cell ID level](https://s2geometry.io/resources/s2cell_statistics.html). + +{{% note %}} +For faster filtering, use higher S2 Cell ID levels. +But know that that higher levels increase +[series cardinality](/v2.0/reference/glossary/#series-cardinality). +{{% /note %}} + +Language-specific implementations of the S2 Geometry Library provide methods for +generating S2 Cell ID tokens. For example: + +- **Go:** [`s2.CellID.ToToken()`](https://godoc.org/github.com/golang/geo/s2#CellID.ToToken) +- **Python:** [`s2sphere.CellId.to_token()`](https://s2sphere.readthedocs.io/en/latest/api.html#s2sphere.CellId) +- **Javascript:** [`s2.cellid.toToken()`](https://github.com/mapbox/node-s2/blob/master/API.md#cellidtotoken---string) + +## Region definitions +Many functions in the Geo package filter data based on geographic region. +Define geographic regions using the following shapes: + +- [box](#box) +- [circle](#circle) +- [polygon](#polygon) + +### box +Define a box-shaped region by specifying an object containing the following properties: + +- **minLat:** minimum latitude in decimal degrees (WGS 84) _(Float)_ +- **maxLat:** maximum latitude in decimal degrees (WGS 84) _(Float)_ +- **minLon:** minimum longitude in decimal degrees (WGS 84) _(Float)_ +- **maxLon:** maximum longitude in decimal degrees (WGS 84) _(Float)_ + +##### Example box-shaped region +```js +{ + minLat: 40.51757813, + maxLat: 40.86914063, + minLon: -73.65234375, + maxLon: -72.94921875 +} +``` + +### circle +Define a circular region by specifying an object containing the following properties: + +- **lat**: latitude of the circle center in decimal degrees (WGS 84) _(Float)_ +- **lon**: longitude of the circle center in decimal degrees (WGS 84) _(Float)_ +- **radius**: radius of the circle in kilometers (km) _(Float)_ + +##### Example circular region +```js +{ + lat: 40.69335938, + lon: -73.30078125, + radius: 20.0 +} +``` + +### polygon +Define a custom polygon region using an object containing the following properties: + +- **points**: points that define the custom polygon _(Array of objects)_ + + Define each point with an object containing the following properties: + + - **lat**: latitude in decimal degrees (WGS 84) _(Float)_ + - **lon**: longitude in decimal degrees (WGS 84) _(Float)_ + +##### Example polygonal region +```js +{ + points: [ + {lat: 40.671659, lon: -73.936631}, + {lat: 40.706543, lon: -73.749177}, + {lat: 40.791333, lon: -73.880327} + ] +} +``` diff --git a/content/flux/v0.x/stdlib/experimental/geo/astracks.md b/content/flux/v0.x/stdlib/experimental/geo/astracks.md new file mode 100644 index 0000000000..ff52c6b232 --- /dev/null +++ b/content/flux/v0.x/stdlib/experimental/geo/astracks.md @@ -0,0 +1,67 @@ +--- +title: geo.asTracks() function +description: > + The geo.asTracks() function groups rows into tracks (sequential, related data points). +menu: + flux_0_x: + name: geo.asTracks + parent: Geo +weight: 1 +--- + +The `geo.asTracks()` function groups rows into tracks (sequential, related data points). + +_**Function type:** Transformation_ + +```js +import "experimental/geo" + +geo.asTracks( + groupBy: ["id","tid"], + orderBy: ["_time"] +) +``` + +## Parameters + +### groupBy +Columns to group by. +These columns should uniquely identify each track. +Default is `["id","tid"]`. + +_**Data type:** Array of strings_ + +### orderBy +Column to order results by. +Default is `["_time"]` + +_**Data type:** Array of strings_ + +## Examples + +##### Group tracks in a box-shaped region +```js +import "experimental/geo" + +region = { + minLat: 40.51757813, + maxLat: 40.86914063, + minLon: -73.65234375, + maxLon: -72.94921875 +} + +from(bucket: "db/rp") + |> range(start: -1h) + |> filter(fn: (r) => r._measurement == "example-measurement") + |> geo.gridFilter(region: region) + |> geo.toRows(correlationKey: ["_time", "id"]) + |> geo.asTracks() +``` + +## Function definition +```js +asTracks = (tables=<-, groupBy=["id","tid"], orderBy=["_time"]) => + tables + |> group(columns: groupBy) + |> sort(columns: orderBy) +``` diff --git a/content/flux/v0.x/stdlib/experimental/geo/filterrows.md b/content/flux/v0.x/stdlib/experimental/geo/filterrows.md new file mode 100644 index 0000000000..6f121f7ed7 --- /dev/null +++ b/content/flux/v0.x/stdlib/experimental/geo/filterrows.md @@ -0,0 +1,179 @@ +--- +title: geo.filterRows() function +description: > + The geo.filterRows() function filters data by a specified geographic region with + the option of strict filtering. +menu: + flux_0_x: + name: geo.filterRows + parent: Geo +weight: 1 +--- + +The `geo.filterRows()` function filters data by a specified geographic region with +the option of strict filtering. +This function is a combination of [`geo.gridFilter()`](/flux/v0.x/stdlib/experimental/geo/gridfilter/) +and [`geo.strictFilter()`](/flux/v0.x/stdlib/experimental/geo/strictfilter/). + +_**Function type:** Transformation_ + +```js +import "experimental/geo" + +geo.filterRows( + region: {lat: 40.69335938, lon: -73.30078125, radius: 20.0} + minSize: 24, + maxSize: -1, + level: -1, + s2cellIDLevel: -1, + correlationKey: ["_time"], + strict: true +) +``` + +## Parameters + +### region +The region containing the desired data points. +Specify object properties for the shape. +_See [Region definitions](/flux/v0.x/stdlib/experimental/geo/#region-definitions)._ + +_**Data type:** Object_ + +### minSize +Minimum number of cells that cover the specified region. +Default is `24`. + +_**Data type:** Integer_ + +### maxSize +Maximum number of cells that cover the specified region. +Default is `-1`. + +_**Data type:** Integer_ + +### level +[S2 cell level](https://s2geometry.io/resources/s2cell_statistics.html) of grid cells. +Default is `-1`. + +_**Data type:** Integer_ + +{{% warn %}} +`level` is mutually exclusive with `minSize` and `maxSize` and must be less than +or equal to `s2cellIDLevel`. +{{% /warn %}} + +### s2cellIDLevel +[S2 Cell level](https://s2geometry.io/resources/s2cell_statistics.html) used in `s2_cell_id` tag. +Default is `-1`. + +_**Data type:** Integer_ + +{{% note %}} +When set to `-1`, `geo.filterRows()` attempts to automatically detect the S2 Cell ID level. +{{% /note %}} + +### correlationKey +List of columns used to uniquely identify a row for output. +Default is `["_time"]`. + +_**Data type:** Array of strings_ + +### strict +Enable strict geographic data filtering which filters points by longitude (`lon`) and latitude (`lat`). +For S2 grid cells that are partially covered by the defined region, only points +with coordinates in the defined region are returned. +Default is `true`. + +_**Data type:** Boolean_ + +## Examples + +##### Strictly filter data in a box-shaped region +```js +import "experimental/geo" + +from(bucket: "db/rp") + |> range(start: -1h) + |> filter(fn: (r) => r._measurement == "example-measurement") + |> geo.filterRows( + region: { + minLat: 40.51757813, + maxLat: 40.86914063, + minLon: -73.65234375, + maxLon: -72.94921875 + } + ) +``` + +##### Approximately filter data in a circular region +The following example returns points with coordinates located in S2 grid cells partially +covered by the defined region even though some points my be located outside of the region. + +```js +import "experimental/geo" + +from(bucket: "db/rp") + |> range(start: -1h) + |> filter(fn: (r) => r._measurement == "example-measurement") + |> geo.filterRows( + region: { + lat: 40.69335938, + lon: -73.30078125, + radius: 20.0 + } + strict: false + ) +``` + +##### Filter data in a polygonal region +```js +import "experimental/geo" + +from(bucket: "db/rp") + |> range(start: -1h) + |> filter(fn: (r) => r._measurement == "example-measurement") + |> geo.filterRows( + region: { + points: [ + {lat: 40.671659, lon: -73.936631}, + {lat: 40.706543, lon: -73.749177}, + {lat: 40.791333, lon: -73.880327} + ] + } + ) +``` + +## Function definition +{{% truncate %}} +```js +filterRows = ( + tables=<-, + region, + minSize=24, + maxSize=-1, + level=-1, + s2cellIDLevel=-1, + correlationKey=["_time"], + strict=true +) => { + _rows = + tables + |> gridFilter( + region, + minSize: minSize, + maxSize: maxSize, + level: level, + s2cellIDLevel: s2cellIDLevel + ) + |> toRows(correlationKey) + _result = + if strict then + _rows + |> strictFilter(region) + else + _rows + return _result +} +``` +{{% /truncate %}} diff --git a/content/flux/v0.x/stdlib/experimental/geo/gridfilter.md b/content/flux/v0.x/stdlib/experimental/geo/gridfilter.md new file mode 100644 index 0000000000..653093c4ac --- /dev/null +++ b/content/flux/v0.x/stdlib/experimental/geo/gridfilter.md @@ -0,0 +1,130 @@ +--- +title: geo.gridFilter() function +description: > + The geo.gridFilter() function filters data by a specified geographic region. +menu: + flux_0_x: + name: geo.gridFilter + parent: Geo +weight: 1 +--- + +The `geo.gridFilter()` function filters data by a specified geographic region. +It compares input data to a set of S2 Cell ID tokens located in the specified [region](#region). + +{{% note %}} +S2 Grid cells may not perfectly align with the defined region, so results may include +data with coordinates outside the region, but inside S2 grid cells partially covered by the region. +Use [`toRows()`](/flux/v0.x/stdlib/experimental/geo/toRows/) and +[`geo.strictFilter()`](/flux/v0.x/stdlib/experimental/geo/strictfilter/) +after `geo.gridFilter()` to precisely filter points. +{{% /note %}} + +_**Function type:** Transformation_ + +```js +import "experimental/geo" + +geo.gridFilter( + region: {lat: 40.69335938, lon: -73.30078125, radius: 20.0} + minSize: 24, + maxSize: -1, + level: -1, + s2cellIDLevel: -1 +) +``` + +## Parameters + +### region +The region containing the desired data points. +Specify object properties for the shape. +_See [Region definitions](/flux/v0.x/stdlib/experimental/geo/#region-definitions)._ + +_**Data type:** Object_ + +### minSize +Minimum number of cells that cover the specified region. +Default is `24`. + +_**Data type:** Integer_ + +### maxSize +Maximum number of cells that cover the specified region. +Default is `-1`. + +_**Data type:** Integer_ + +### level +[S2 cell level](https://s2geometry.io/resources/s2cell_statistics.html) of grid cells. +Default is `-1`. + +_**Data type:** Integer_ + +{{% warn %}} +`level` is mutually exclusive with `minSize` and `maxSize` and must be less than +or equal to `s2cellIDLevel`. +{{% /warn %}} + +### s2cellIDLevel +[S2 Cell level](https://s2geometry.io/resources/s2cell_statistics.html) used in `s2_cell_id` tag. +Default is `-1`. + +_**Data type:** Integer_ + +{{% note %}} +When set to `-1`, `gridFilter()` attempts to automatically detect the S2 Cell ID level. +{{% /note %}} + +## Examples + +##### Filter data in a box-shaped region +```js +import "experimental/geo" + +from(bucket: "db/rp") + |> range(start: -1h) + |> filter(fn: (r) => r._measurement == "example-measurement") + |> geo.gridFilter( + region: { + minLat: 40.51757813, + maxLat: 40.86914063, + minLon: -73.65234375, + maxLon: -72.94921875 + } + ) +``` + +##### Filter data in a circular region +```js +import "experimental/geo" + +from(bucket: "db/rp") + |> range(start: -1h) + |> filter(fn: (r) => r._measurement == "example-measurement") + |> geo.gridFilter( + region: { + lat: 40.69335938, + lon: -73.30078125, + radius: 20.0 + } + ) +``` + +##### Filter data in a custom polygon region +```js +import "experimental/geo" + +from(bucket: "db/rp") + |> range(start: -1h) + |> filter(fn: (r) => r._measurement == "example-measurement") + |> geo.gridFilter( + region: { + points: [ + {lat: 40.671659, lon: -73.936631}, + {lat: 40.706543, lon: -73.749177}, + {lat: 40.791333, lon: -73.880327} + ] + } + ) +``` diff --git a/content/flux/v0.x/stdlib/experimental/geo/groupbyarea.md b/content/flux/v0.x/stdlib/experimental/geo/groupbyarea.md new file mode 100644 index 0000000000..67ca820733 --- /dev/null +++ b/content/flux/v0.x/stdlib/experimental/geo/groupbyarea.md @@ -0,0 +1,69 @@ +--- +title: geo.groupByArea() function +description: > + The geo.groupByArea() function groups rows by geographic area. +menu: + flux_0_x: + name: geo.groupByArea + parent: Geo +weight: 1 +--- + +The `geo.groupByArea()` function groups rows by geographic area. +Area sizes are determined by the specified [`level`](#level). +Each geographic area is assigned a unique identifier which is stored in the [`newColumn`](#newcolumn). +Results are grouped by `newColumn`. + +_**Function type:** Transformation_ + +```js +import "experimental/geo" + +geo.groupByArea( + newColumn: "geoArea", + level: 3, + s2cellIDLevel: -1 +) +``` + +## Parameters + +### newColumn +Name of the new column that stores the unique identifier for a geographic area. + +_**Data type:** String_ + +### level +[S2 Cell level](https://s2geometry.io/resources/s2cell_statistics.html) used +to determine the size of each geographic area. + +_**Data type:** Integer_ + +### s2cellIDLevel +[S2 Cell level](https://s2geometry.io/resources/s2cell_statistics.html) used in `s2_cell_id` tag. +Default is `-1`. + +_**Data type:** Integer_ + +{{% note %}} +When set to `-1`, `geo.groupByArea()` attempts to automatically detect the S2 Cell ID level. +{{% /note %}} + +## Examples +```js +import "experimental/geo" + +region = { + minLat: 40.51757813, + maxLat: 40.86914063, + minLon: -73.65234375, + maxLon: -72.94921875 +} + +from(bucket: "db/rp") + |> range(start: -1h) + |> filter(fn: (r) => r._measurement == "example-measurement") + |> geo.gridFilter(region: region) + |> geo.toRows() + |> geo.groupByArea(newColumn: "geoArea", level: 3) +``` diff --git a/content/flux/v0.x/stdlib/experimental/geo/strictfilter.md b/content/flux/v0.x/stdlib/experimental/geo/strictfilter.md new file mode 100644 index 0000000000..ae2d7eb30a --- /dev/null +++ b/content/flux/v0.x/stdlib/experimental/geo/strictfilter.md @@ -0,0 +1,95 @@ +--- +title: geo.strictFilter() function +description: > + The geo.strictFilter() function filters data by latitude and longitude. +menu: + flux_0_x: + name: geo.strictFilter + parent: Geo +weight: 1 +--- + +The `geo.strictFilter()` function filters data by latitude and longitude in a specified region. +This filter is more strict than [`geo.gridFilter()`](/flux/v0.x/stdlib/experimental/geo/gridfilter/), +but for the best performance, use `geo.strictFilter()` **after** `geo.gridFilter()`. + +{{% note %}} +`geo.strictFilter()` requires `lat` and `lon` columns in each row. +Use [`geo.toRows()`](/flux/v0.x/stdlib/experimental/geo/gridfilter/) +to pivot `lat` and `lon` fields into each row **before** using `geo.strictFilter()`. +{{% /note %}} + +_**Function type:** Transformation_ + +```js +import "experimental/geo" + +geo.strictFilter( + region: {lat: 40.69335938, lon: -73.30078125, radius: 20.0} +) +``` + +## Parameters + +### region +The region containing the desired data points. +Specify object properties for the shape. +_See [Region definitions](/flux/v0.x/stdlib/experimental/geo/#region-definitions)._ + +_**Data type:** Object_ + +## Examples + +##### Filter data in a box-shaped region +```js +import "experimental/geo" + +from(bucket: "db/rp") + |> range(start: -1h) + |> filter(fn: (r) => r._measurement == "example-measurement") + |> geo.toRows() + |> geo.strictFilter( + region: { + minLat: 40.51757813, + maxLat: 40.86914063, + minLon: -73.65234375, + maxLon: -72.94921875 + } + ) +``` + +##### Filter data in a circular region +```js +import "experimental/geo" + +from(bucket: "db/rp") + |> range(start: -1h) + |> filter(fn: (r) => r._measurement == "example-measurement") + |> geo.toRows() + |> geo.strictFilter( + region: { + lat: 40.69335938, + lon: -73.30078125, + radius: 20.0 + } + ) +``` + +##### Filter data in a custom polygon region +```js +import "experimental/geo" + +from(bucket: "db/rp") + |> range(start: -1h) + |> filter(fn: (r) => r._measurement == "example-measurement") + |> geo.toRows() + |> geo.strictFilter( + region: { + points: [ + {lat: 40.671659, lon: -73.936631}, + {lat: 40.706543, lon: -73.749177}, + {lat: 40.791333, lon: -73.880327} + ] + } + ) +``` diff --git a/content/flux/v0.x/stdlib/experimental/geo/torows.md b/content/flux/v0.x/stdlib/experimental/geo/torows.md new file mode 100644 index 0000000000..5d60467ef4 --- /dev/null +++ b/content/flux/v0.x/stdlib/experimental/geo/torows.md @@ -0,0 +1,53 @@ +--- +title: geo.toRows() function +description: > + The geo.toRows() function ... +menu: + flux_0_x: + name: geo.toRows + parent: Geo +weight: 1 +--- + +The `geo.toRows()` function pivots data into row-wise sets base on time or other correlation columns. +For geo-temporal datasets, output rows include `lat` and `lon` columns required by +many Geo package functions. + +_**Function type:** Transformation_ + +```js +import "experimental/geo" + +geo.toRows( + correlationKey: ["_time"] +) +``` + +## Parameters + +### correlationKey +List of columns used to uniquely identify a row for output. +Default is `["_time"]`. + +_**Data type:** Array of strings_ + +## Examples +```js +import "experimental/geo" + +from(bucket: "db/rp") + |> range(start: -1h) + |> filter(fn: (r) => r._measurement == "example-measurement") + |> geo.toRows() +``` + +## Function definition +```js +toRows = (tables=<-, correlationKey=["_time"]) => + tables + |> pivot( + rowKey: correlationKey, + columnKey: ["_field"], + valueColumn: "_value" + ) +``` From 2639ec71b591963b7b51745873909b2027a3a2c3 Mon Sep 17 00:00:00 2001 From: Scott Anderson Date: Mon, 9 Mar 2020 12:01:41 -0600 Subject: [PATCH 13/25] added onEmpty to filter and updated count doc --- .../getting-started/syntax-basics.md | 20 +++++++++- .../transformations/aggregates/count.md | 12 ++++++ .../stdlib/built-in/transformations/filter.md | 40 +++++++++++++++++-- 3 files changed, 66 insertions(+), 6 deletions(-) diff --git a/content/flux/v0.x/introduction/getting-started/syntax-basics.md b/content/flux/v0.x/introduction/getting-started/syntax-basics.md index 5344269b39..41890a078d 100644 --- a/content/flux/v0.x/introduction/getting-started/syntax-basics.md +++ b/content/flux/v0.x/introduction/getting-started/syntax-basics.md @@ -68,10 +68,10 @@ this is a string Flux also supports objects. Each value in an object can be a different data type. ```js -> o = {name:"Jim", age: 42} +> o = {name:"Jim", age: 42, "favorite color": "red"} ``` -Use dot notation to access a properties of an object : +Use **dot notation** to access a properties of an object: ```js > o.name @@ -80,6 +80,22 @@ Jim 42 ``` +Or **bracket notation**: + +```js +> o["name"] +Jim +> o["age"] +42 +> o["favorite color"] +red +``` + +{{% note %}} +Use bracket notation to reference object properties with special or +white space characters in the property key. +{{% /note %}} + ### Lists Flux supports lists. List values must be the same type. diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/count.md b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/count.md index 3dd4694131..55be68e23b 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/count.md +++ b/content/flux/v0.x/stdlib/built-in/transformations/aggregates/count.md @@ -22,6 +22,18 @@ _**Output data type:** Integer_ count(column: "_value") ``` +{{% note %}} +#### Count empty tables +`count()` returns `0` for empty tables. +To keep empty tables in your data, set the following parameters for the following functions: + +| Function | Parameter | +|:-------- |:--------- | +| [filter()](/flux/v0.x/stdlib/built-in/transformations/filter/) | `onEmpty: "keep"` | +| [window()](/flux/v0.x/stdlib/built-in/transformations/window/) | `createEmpty: true` | +| [aggregateWindow()](/flux/v0.x/stdlib/built-in/transformations/aggregates/aggregatewindow/) | `createEmpty: true` | +{{% /note %}} + ## Parameters ### column diff --git a/content/flux/v0.x/stdlib/built-in/transformations/filter.md b/content/flux/v0.x/stdlib/built-in/transformations/filter.md index ff905d1f66..f7d08bb769 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/filter.md +++ b/content/flux/v0.x/stdlib/built-in/transformations/filter.md @@ -47,17 +47,27 @@ Defines the behavior for empty tables. Potential values are `keep` and `drop`. Defaults to `drop`. +_**Data type:** String_ + ##### drop -Empty tables are dropped. +Tables left without rows are dropped. ##### keep -Empty tables are output to the next transformation. +Tables left without rows are output to the next transformation. -_**Data type:** String_ +{{% warn %}} +Keeping empty tables with your first `filter()` function can have severe performance +costs since it retains empty tables from your entire data set. +For higher performance, use your first `filter()` function to do basic filtering, +then keep empty tables on subsequent `filter()` calls with smaller data sets. +_[See the example below](#keep-empty-tables-when-filtering)._ +{{% /warn %}} ## Examples + +##### Filter based on measurement, field, and tag ```js -from(bucket:"telegraf/autogen") +from(bucket:"db/rp") |> range(start:-1h) |> filter(fn: (r) => r._measurement == "cpu" and @@ -66,6 +76,28 @@ from(bucket:"telegraf/autogen") ) ``` +##### Filter out null values +```js +from(bucket:"db/rp") + |> range(start:-1h) + |> filter(fn: (r) => exists r._value ) +``` + +##### Filter values based on thresholds +```js +from(bucket:"db/rp") + |> range(start:-1h) + |> filter(fn: (r) => r._value > 50.0 and r._value < 65.0 ) +``` + +##### Keep empty tables when filtering +```js +from(bucket: "db/rp") + |> range(start: -1h) + |> filter(fn: (r) => r._measurement == "events" and r._field == "open") + |> filter(fn: (r) => r.doorId =~ /^2.*/, onEmpty: "keep") +``` +
    ##### Related InfluxQL functions and statements: From 73365c8ad336e6f8f36c96baf7c1f56f0f0d3f86 Mon Sep 17 00:00:00 2001 From: Scott Anderson Date: Mon, 9 Mar 2020 14:23:26 -0600 Subject: [PATCH 14/25] added clarification between join and union --- .../flux/v0.x/stdlib/built-in/transformations/join.md | 9 ++++++++- .../flux/v0.x/stdlib/built-in/transformations/union.md | 7 +++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/content/flux/v0.x/stdlib/built-in/transformations/join.md b/content/flux/v0.x/stdlib/built-in/transformations/join.md index 1c12f48f37..e56a0f6ee0 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/join.md +++ b/content/flux/v0.x/stdlib/built-in/transformations/join.md @@ -67,7 +67,7 @@ _**Data type:** String_ ###### Possible Values: - `inner` - ### timeColumn -The time column of the output. +Time column of the output. Default is `"_time"`. _**Data type:** String_ ### tagColumns -The tag columns of the output. -Defaults to all columns with type `string`, excluding all value columns and the -`_field` column if present. +Tag columns in the output. +Defaults to all columns with type `string`, excluding all value columns and columns +identified by [`fieldFn`](#fieldfn). _**Data type:** Array of strings_ ### fieldFn Function that takes a record from the input table and returns an object. -For each record from the input table, `fieldFn` returns an object that maps output -the field key to the output value. +For each record from the input table, `fieldFn` returns an object that maps the +output field key to the output value. Default is `(r) => ({ [r._field]: r._value })`. _**Data type:** Function_ diff --git a/content/flux/v0.x/stdlib/json/encode.md b/content/flux/v0.x/stdlib/json/encode.md index 4cbb3f45c7..7db7f451d9 100644 --- a/content/flux/v0.x/stdlib/json/encode.md +++ b/content/flux/v0.x/stdlib/json/encode.md @@ -34,7 +34,7 @@ This function encodes [Flux types](/flux/v0.x/language/types/) as follows: ### v The value to convert. -_**Data type:** Boolean | Duration | Float | Integer | String | Time | UInteger_ +_**Data type:** Object | Array | Boolean | Duration | Float | Integer | String | Time | UInteger_ ## Examples diff --git a/content/flux/v0.x/stdlib/regexp/splitregexp.md b/content/flux/v0.x/stdlib/regexp/splitregexp.md index 81ea15eeec..9bb88d4931 100644 --- a/content/flux/v0.x/stdlib/regexp/splitregexp.md +++ b/content/flux/v0.x/stdlib/regexp/splitregexp.md @@ -39,6 +39,7 @@ The string value to search. _**Data type:** String_ ### i -The number of substrings to return. +The maximum number of substrings to return. +`-1` returns all matching substrings. _**Data type:** Integer_ diff --git a/content/flux/v0.x/stdlib/sql/from.md b/content/flux/v0.x/stdlib/sql/from.md index b1c8502bc3..3230f0ddee 100644 --- a/content/flux/v0.x/stdlib/sql/from.md +++ b/content/flux/v0.x/stdlib/sql/from.md @@ -35,7 +35,8 @@ The following drivers are available: - mysql - postgres -- sqlite3 +- sqlite3 – _Does not work with InfluxDB OSS, InfluxDB Enterprise, or InfluxDB Cloud. + More information [below](#query-an-sqlite-database)._ ### dataSourceName The data source name (DSN) or connection string used to connect to the SQL database. @@ -52,7 +53,7 @@ postgres://pqgotest:password@localhost/pqgotest?sslmode=verify-full username:password@tcp(localhost:3306)/dbname?param=value # SQLite Driver DSN -file:test.db?cache=shared&mode=memory +file:/path/to/test.db?cache=shared&mode=ro ``` ### query @@ -85,11 +86,19 @@ sql.from( ``` ### Query an SQLite database + +{{% warn %}} +**InfluxDB OSS** and **InfluxDB Cloud** do not have direct access to the local filesystem +and cannot query SQLite data sources. +Use the [Flux REPL](/v2.0/reference/cli/influx/repl/) to query a SQLite data source +on your local filesystem. +{{% /warn %}} + ```js import "sql" sql.from( driverName: "sqlite3", - dataSourceName: "file:test.db?cache=shared&mode=memory", + dataSourceName: "file:/path/to/test.db?cache=shared&mode=ro", query:"SELECT * FROM ExampleTable" ) ``` diff --git a/content/flux/v0.x/stdlib/sql/to.md b/content/flux/v0.x/stdlib/sql/to.md index 53fcd55d33..e96c26a616 100644 --- a/content/flux/v0.x/stdlib/sql/to.md +++ b/content/flux/v0.x/stdlib/sql/to.md @@ -36,7 +36,8 @@ The following drivers are available: - mysql - postgres -- sqlite3 +- sqlite3 – _Does not work with InfluxDB OSS, InfluxDB Enterprise, or InfluxDB Cloud. + More information [below](#query-an-sqlite-database)._ ### dataSourceName The data source name (DSN) or connection string used to connect to the SQL database. @@ -53,7 +54,7 @@ postgres://pqgotest:password@localhost/pqgotest?sslmode=verify-full username:password@tcp(localhost:3306)/dbname?param=value # SQLite Driver DSN -file:test.db?cache=shared&mode=memory +file:/path/to/test.db?cache=shared&mode=rw ``` ### table @@ -96,11 +97,19 @@ sql.to( ``` ### Write data to an SQLite database + +{{% warn %}} +**InfluxDB OSS** and **InfluxDB Cloud** do not have direct access to the local filesystem +and cannot write to SQLite data sources. +Use the [Flux REPL](/v2.0/reference/cli/influx/repl/) to write to an SQLite data +source on your local filesystem. +{{% /warn %}} + ```js import "sql" sql.to( driverName: "sqlite3", - dataSourceName: "file:test.db?cache=shared&mode=memory", + dataSourceName: "file:/path/to/test.db?cache=shared&mode=rw", table: "ExampleTable" ) ``` diff --git a/content/flux/v0.x/stdlib/strings/splitafter.md b/content/flux/v0.x/stdlib/strings/splitafter.md index 6ec75b9c57..ac8723a52a 100644 --- a/content/flux/v0.x/stdlib/strings/splitafter.md +++ b/content/flux/v0.x/stdlib/strings/splitafter.md @@ -14,6 +14,7 @@ aliases: The `strings.splitAfter()` function splits a string after a specified separator and returns an array of substrings. +Split substrings include the separator, `t`. _**Output data type:** Array of strings_ diff --git a/content/flux/v0.x/stdlib/strings/splitaftern.md b/content/flux/v0.x/stdlib/strings/splitaftern.md index 8c1d20cbcf..7220a391de 100644 --- a/content/flux/v0.x/stdlib/strings/splitaftern.md +++ b/content/flux/v0.x/stdlib/strings/splitaftern.md @@ -14,13 +14,14 @@ aliases: The `strings.splitAfterN()` function splits a string after a specified separator and returns an array of `i` substrings. +Split substrings include the separator, `t`. _**Output data type:** Array of strings_ ```js import "strings" -strings.splitAfterN(v: "a flux of foxes", t: " ", i: 2) +strings.splitAfterN(v: "a flux of foxes", t: " ", i: 3) // returns ["a ", "flux ", "of foxes"] ``` @@ -38,7 +39,9 @@ The string value that acts as the separator. _**Data type:** String_ ### i -The number of substrings to return. +The maximum number of split substrings to return. +`-1` returns all matching substrings. +The last substring is the unsplit remainder. _**Data type:** Integer_ diff --git a/content/flux/v0.x/stdlib/strings/splitn.md b/content/flux/v0.x/stdlib/strings/splitn.md index 24b7b99142..5bc5a8f986 100644 --- a/content/flux/v0.x/stdlib/strings/splitn.md +++ b/content/flux/v0.x/stdlib/strings/splitn.md @@ -20,7 +20,7 @@ _**Output data type:** Array of strings_ ```js import "strings" -strings.splitN(v: "a flux of foxes", t: " ", i: 2) +strings.splitN(v: "a flux of foxes", t: " ", i: 3) // returns ["a", "flux", "of foxes"] ``` @@ -38,7 +38,9 @@ The string value that acts as the separator. _**Data type:** String_ ### i -The number of substrings to return. +The maximum number of split substrings to return. +`-1` returns all matching substrings. +The last substring is the unsplit remainder. _**Data type:** Integer_ From f458a5b7c48d8812838bd98edf2834d00760eca2 Mon Sep 17 00:00:00 2001 From: Scott Anderson Date: Tue, 24 Mar 2020 15:31:12 -0600 Subject: [PATCH 20/25] added geo package updates and guides --- .gitignore | 2 + chronograf-v1.db | Bin 32768 -> 0 bytes content/flux/v0.x/guides/geo/_index.md | 80 +++++++++++ .../flux/v0.x/guides/geo/filter-by-region.md | 127 ++++++++++++++++++ .../flux/v0.x/guides/geo/group-geo-data.md | 70 ++++++++++ .../flux/v0.x/guides/geo/shape-geo-data.md | 121 +++++++++++++++++ content/flux/v0.x/guides/monitor-states.md | 4 +- content/flux/v0.x/language/operators.md | 2 +- .../v0.x/stdlib/experimental/geo/_index.md | 6 +- .../stdlib/experimental/geo/filterrows.md | 23 ++++ .../stdlib/experimental/geo/gridfilter.md | 23 ++++ .../stdlib/experimental/geo/s2cellidtoken.md | 78 +++++++++++ .../flux/v0.x/stdlib/experimental/group.md | 2 +- .../stdlib/experimental/prometheus/scrape.md | 4 +- content/flux/v0.x/stdlib/sql/from.md | 2 +- content/flux/v0.x/stdlib/sql/to.md | 2 +- layouts/shortcodes/children.html | 2 +- layouts/shortcodes/flex-content.html | 5 + layouts/shortcodes/flex.html | 4 + layouts/shortcodes/svg.html | 2 + static/css/docs-default.css | 2 +- static/css/docs-default.css.map | 2 +- static/css/docs-light.css | 2 +- static/css/docs-light.css.map | 2 +- static/img/svgs/geo-non-strict.svg | 36 +++++ static/img/svgs/geo-strict.svg | 30 +++++ styles/docs-default.less | 2 + styles/docs-light.less | 2 + styles/flex.less | 26 ++++ styles/svgs.less | 39 ++++++ 30 files changed, 685 insertions(+), 17 deletions(-) delete mode 100644 chronograf-v1.db create mode 100644 content/flux/v0.x/guides/geo/_index.md create mode 100644 content/flux/v0.x/guides/geo/filter-by-region.md create mode 100644 content/flux/v0.x/guides/geo/group-geo-data.md create mode 100644 content/flux/v0.x/guides/geo/shape-geo-data.md create mode 100644 content/flux/v0.x/stdlib/experimental/geo/s2cellidtoken.md create mode 100644 layouts/shortcodes/flex-content.html create mode 100644 layouts/shortcodes/flex.html create mode 100644 layouts/shortcodes/svg.html create mode 100644 static/img/svgs/geo-non-strict.svg create mode 100644 static/img/svgs/geo-strict.svg create mode 100644 styles/flex.less create mode 100644 styles/svgs.less diff --git a/.gitignore b/.gitignore index fabdaab2c5..cc8801b761 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,5 @@ deploy .*.swp node_modules *.log +resources +chronograf-v1.db diff --git a/chronograf-v1.db b/chronograf-v1.db deleted file mode 100644 index a3c339e61e6ecb6692eccfadf70357337bb7afdd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmeI2O>Y}T7{_;=WaDg5Nf$z;1td41f{fzWYrBND5@~4#l^RtdG;jfRY>(|t*Spca zq%j8+i5n*l9Qp}3AufCnE{Fs06?*IuiD$ge#ID`s64dtaw=$XeKlAd;{$_UVof*T( zKl28bTDuBju=K+I_o00=rPz9`}=;_OU7N&t1Y@_!O-h8hOtFPMeh=4emSK>*6(uu z_Y^CtZ&Ik))~8X_3#4O3B1`+8d(IELL3Y>?si?H0!J1hsn+=bO`RQj_>*Qiy*=*MB z`MVENadM%0+4MTHE3zQ9&9Y;bU9-Hl$dLu8^uHCUAB7VP^obL`3>pHx_GB3M z$*35-&zVEkZ?HaM{T}N_tlwt+GwTbif2CM4aw*hov*x^Y`-{@;up5gcjk9)|#j>ZJ{6bnv~_|eQN)m$r|V{1!EDi35! zguU|eoqCeglI?0-zv!*@({%sJ#zqjeMbM9u^vY&+^YV>iDg)VzMYmjkhQ);$ZQr(=e6S@+UgC2AE;-7YxVrJpS9NbnNhaY9g^PzD(y|A>l5k5 zM7pWdE4GHfmMV2*^igwWbuW^YWI*n=cdGs_q_P?wy`f1M##RX@+6^o8LdM2J$)GAtzm53l1_FaC? zP8P3Ewanc^1Ogxc0w4eaAOHeqB%puZuZ&)8jpO&r>9?*kxvO^5pZ(9H7w`cBAOHd&00JNY0w4eaAOHd&00JNY z0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JOz8iD@+ DSt``q diff --git a/content/flux/v0.x/guides/geo/_index.md b/content/flux/v0.x/guides/geo/_index.md new file mode 100644 index 0000000000..53980aeded --- /dev/null +++ b/content/flux/v0.x/guides/geo/_index.md @@ -0,0 +1,80 @@ +--- +title: Work with geo-temporal data +description: > + Use the Flux Geo package to filter geo-temporal data and group by geographic location or track. +menu: + flux_0_x: + name: Geo-temporal data + parent: Guides +weight: 10 +--- + +Use the [Flux Geo package](/flux/v0.x/stdlib/experimental/geo) to +filter geo-temporal data and group by geographic location or track. + +{{% warn %}} +The Geo package is experimental and subject to change at any time. +By using it, you agree to the [risks of experimental functions](/flux/v0.x/stdlib/experimental/#use-experimental-functions-at-your-own-risk). +{{% /warn %}} + +**To work with geo-temporal data:** + +1. Import the `experimental/geo` package. + + ```js + import "experimental/geo" + ``` + +2. Load geo-temporal data. _See below for [sample geo-temporal data](#sample-data)._ +3. Do one or more of the following: + + - [Shape data to work with the Geo package](#shape-data-to-work-with-the-geo-package) + - [Filter data by region](#filter-geo-temporal-data-by-region) (using strict or non-strict filters) + - [Group data by area or by track](#group-geo-temporal-data) + +{{< children >}} + +--- + +## Sample data +Many of the examples in this section use a `sampleGeoData` variable that represents +a sample set of geo-temporal data. +The [Bird Migration Sample Data](https://github.com/influxdata/influxdb2-sample-data/tree/master/bird-migration-data) +available on GitHub provides sample geo-temporal data that meets the +[requirements of the Flux Geo package](/flux/v0.x/stdlib/experimental/geo/#geo-schema-requirements). + +### Load annotated CSV sample data +Use the [experimental `csv.from()` function](/flux/v0.x/stdlib/experimental/csv/from/) +to load the sample bird migration annotated CSV data from GitHub: + +```js +import `experimental/csv` + +sampleGeoData = csv.from( + url: "https://github.com/influxdata/influxdb2-sample-data/blob/master/bird-migration-data/bird-migration.csv" +) +``` + +{{% note %}} +`csv.from(url: ...)` downloads sample data each time you execute the query **(~1.3 MB)**. +If bandwidth is a concern, use the [`to()` function](/flux/v0.x/stdlib/built-in/outputs/to/) +to write the data to a bucket, and then query the bucket with [`from()`](/flux/v0.x/stdlib/built-in/inputs/from/). +{{% /note %}} + +### Write sample data to InfluxDB with line protocol +Use `curl` and the `influx write` command to write bird migration line protocol to InfluxDB. +Replace `example-bucket` with your destination bucket: + +```sh +curl https://raw.githubusercontent.com/influxdata/influxdb2-sample-data/master/bird-migration-data/bird-migration.line --output ./tmp-data +influx write -b example-bucket @./tmp-data +rm -f ./tmp-data +``` + +Use Flux to query the bird migration data and assign it to the `sampleGeoData` variable: + +```js +sampleGeoData = from(bucket: "example-bucket") + |> range(start: 2019-01-01T00:00:00Z, stop: 2019-12-31T23:59:59Z) + |> filter(fn: (r) => r._measurement == "migration") +``` diff --git a/content/flux/v0.x/guides/geo/filter-by-region.md b/content/flux/v0.x/guides/geo/filter-by-region.md new file mode 100644 index 0000000000..dcab4698d0 --- /dev/null +++ b/content/flux/v0.x/guides/geo/filter-by-region.md @@ -0,0 +1,127 @@ +--- +title: Filter geo-temporal data by region +description: > + Use the `geo.filterRows` function to filter geo-temporal data by box-shaped, circular, or polygonal geographic regions. +menu: + flux_0_x: + name: Filter by region + parent: Geo-temporal data +weight: 2 +list_code_example: | + ```js + import "experimental/geo" + + sampleGeoData + |> geo.filterRows( + region: {lat: 30.04, lon: 31.23, radius: 200.0}, + strict: true + ) + ``` +--- + +Use the [`geo.filterRows` function](/flux/v0.x/stdlib/geo/filterrows/) +to filter geo-temporal data by geographic region: + +1. [Define a geographic region](#define-a-geographic-region) +2. [Use strict or non-strict filtering](#strict-and-non-strict-filtering) + +The following example uses the [sample bird migration data](/flux/v0.x/guides/geo/#sample-data) +and queries data points **within 200km of Cairo, Egypt**: + +```js +import "experimental/geo" + +sampleGeoData + |> geo.filterRows( + region: {lat: 30.04, lon: 31.23, radius: 200.0}, + strict: true + ) +``` + +## Define a geographic region +Many functions in the Geo package filter data based on geographic region. +Define a geographic region using one of the the following shapes: + +- [box](#box) +- [circle](#circle) +- [polygon](#polygon) + +### box +Define a box-shaped region by specifying an object containing the following properties: + +- **minLat:** minimum latitude in decimal degrees (WGS 84) _(Float)_ +- **maxLat:** maximum latitude in decimal degrees (WGS 84) _(Float)_ +- **minLon:** minimum longitude in decimal degrees (WGS 84) _(Float)_ +- **maxLon:** maximum longitude in decimal degrees (WGS 84) _(Float)_ + +##### Example box-shaped region +```js +{ + minLat: 40.51757813, + maxLat: 40.86914063, + minLon: -73.65234375, + maxLon: -72.94921875 +} +``` + +### circle +Define a circular region by specifying an object containing the following properties: + +- **lat**: latitude of the circle center in decimal degrees (WGS 84) _(Float)_ +- **lon**: longitude of the circle center in decimal degrees (WGS 84) _(Float)_ +- **radius**: radius of the circle in kilometers (km) _(Float)_ + +##### Example circular region +```js +{ + lat: 40.69335938, + lon: -73.30078125, + radius: 20.0 +} +``` + +### polygon +Define a polygonal region with an object containing the latitude and longitude for +each point in the polygon: + +- **points**: points that define the custom polygon _(Array of objects)_ + + Define each point with an object containing the following properties: + + - **lat**: latitude in decimal degrees (WGS 84) _(Float)_ + - **lon**: longitude in decimal degrees (WGS 84) _(Float)_ + +##### Example polygonal region +```js +{ + points: [ + {lat: 40.671659, lon: -73.936631}, + {lat: 40.706543, lon: -73.749177}, + {lat: 40.791333, lon: -73.880327} + ] +} +``` + +## Strict and non-strict filtering +In most cases, the specified geographic region does not perfectly align with S2 grid cells. + +- **Non-strict filtering** returns points that may be outside of the specified region but + inside S2 grid cells partially covered by the region. +- **Strict filtering** returns only points inside the specified region. + +_Strict filtering is less performant, but more accurate than non-strict filtering._ + + S2 grid cell + Filter region + Returned point + +{{< flex >}} +{{% flex-content %}} +**Strict filtering** +{{< svg "/static/img/svgs/geo-strict.svg" >}} +{{% /flex-content %}} +{{% flex-content %}} +**Non-strict filtering** +{{< svg "/static/img/svgs/geo-non-strict.svg" >}} +{{% /flex-content %}} +{{< /flex >}} diff --git a/content/flux/v0.x/guides/geo/group-geo-data.md b/content/flux/v0.x/guides/geo/group-geo-data.md new file mode 100644 index 0000000000..68813200c7 --- /dev/null +++ b/content/flux/v0.x/guides/geo/group-geo-data.md @@ -0,0 +1,70 @@ +--- +title: Group geo-temporal data +description: > + Use the `geo.groupByArea()` to group geo-temporal data by area and `geo.asTracks()` + to group data into tracks or routes. +menu: + flux_0_x: + parent: Geo-temporal data +weight: 3 +list_code_example: | + ```js + import "experimental/geo" + + sampleGeoData + |> geo.groupByArea(newColumn: "geoArea", level: 5) + |> geo.asTracks(groupBy: ["id"],sortBy: ["_time"]) + ``` +--- + +Use the `geo.groupByArea()` to group geo-temporal data by area and `geo.asTracks()` +to group data into tracks or routes. + +- [Group data by area](#group-data-by-area) +- [Group data by track or route](#group-data-by-track-or-route) + +### Group data by area +Use the [`geo.groupByArea()` function](/flux/v0.x/stdlib/experimental/geo/groupbyarea/) +to group geo-temporal data points by geographic area. +Areas are determined by [S2 grid cells](https://s2geometry.io/devguide/s2cell_hierarchy.html#s2cellid-numbering) + +- Specify a new column to store the unique area identifier for each point with the `newColumn` parameter. +- Specify the [S2 cell level](https://s2geometry.io/resources/s2cell_statistics) + to use when calculating geographic areas with the `level` parameter. + +The following example uses the [sample bird migration data](/flux/v0.x/guides/geo/#sample-data) +to query data points within 200km of Cairo, Egypt and group them by geographic area: + +```js +import "experimental/geo" + +sampleGeoData + |> geo.filterRows(region: {lat: 30.04, lon: 31.23, radius: 200.0}) + |> geo.groupByArea( + newColumn: "geoArea", + level: 5 + ) +``` + +### Group data by track or route +Use [`geo.asTracks()` function](/flux/v0.x/stdlib/experimental/geo/astracks/) +to group data points into tracks or routes and order them by time or other columns. +Data must contain a unique identifier for each track. For example: `id` or `tid`. + +- Specify columns that uniquely identify each track or route with the `groupBy` parameter. +- Specify which columns to sort by with the `sortBy` parameter. Default is `["_time"]`. + +The following example uses the [sample bird migration data](/flux/v0.x/guides/geo/#sample-data) +to query data points within 200km of Cairo, Egypt and group them into routes unique +to each bird: + +```js +import "experimental/geo" + +sampleGeoData + |> geo.filterRows(region: {lat: 30.04, lon: 31.23, radius: 200.0}) + |> geo.asTracks( + groupBy: ["id"], + sortBy: ["_time"] + ) +``` diff --git a/content/flux/v0.x/guides/geo/shape-geo-data.md b/content/flux/v0.x/guides/geo/shape-geo-data.md new file mode 100644 index 0000000000..a8491a97f2 --- /dev/null +++ b/content/flux/v0.x/guides/geo/shape-geo-data.md @@ -0,0 +1,121 @@ +--- +title: Shape data to work with the Geo package +description: > + Functions in the Flux Geo package require **lat** and **lon** fields and an **s2_cell_id** tag. + Rename latitude and longitude fields and generate S2 cell ID tokens. +menu: + flux_0_x: + name: Shape geo-temporal data + parent: Geo-temporal data +weight: 1 +list_code_example: | + ```js + import "experimental/geo" + + sampleGeoData + |> map(fn: (r) => ({ r with + _field: + if r._field == "latitude" then "lat" + else if r._field == "longitude" then "lon" + else r._field + })) + |> map(fn: (r) => ({ r with + s2_cell_id: geo.s2CellIDToken(point: {lon: r.lon, lat: r.lat}, level: 10) + })) + ``` +--- + +Functions in the Geo package require the following data schema: + +- an **s2_cell_id** tag containing the [S2 Cell ID](https://s2geometry.io/devguide/s2cell_hierarchy.html#s2cellid-numbering) + **as a token** +- a **`lat` field** field containing the **latitude in decimal degrees** (WGS 84) +- a **`lon` field** field containing the **longitude in decimal degrees** (WGS 84) + + +- [Rename latitude and longitude fields](#rename-latitude-and-longitude-fields) +- [Generate S2 cell ID tokens](#generate-s2-cell-id-tokens) + +## Rename latitude and longitude fields +Use [`map()`](/flux/v0.x/stdlib/built-in/transformations/map/) to rename +existing latitude and longitude fields using other names. + +```js +from(bucket: "example-bucket") + |> range(start: -1h) + |> filter(fn: (r) => r._measurement == "example-measurement") + |> map(fn: (r) => ({ r with + _field: + if r._field == "existingLatitudeField" then "lat" + else if r._field == "existingLongitudeField" then "lon" + else r._field + })) +``` + +## Generate S2 cell ID tokens +The Geo package uses the [S2 Geometry Library](https://s2geometry.io/) to represent +geographic coordinates on a three-dimensional sphere. +The sphere is divided into [cells](https://s2geometry.io/devguide/s2cell_hierarchy), +each with a unique 64-bit identifier (S2 cell ID). +Grid and S2 cell ID accuracy are defined by a [level](https://s2geometry.io/resources/s2cell_statistics). + +{{% note %}} +To filter more quickly, use higher S2 Cell ID levels, +but know that that higher levels increase [series cardinality](/influxdb/latest/concepts/glossary/#series-cardinality). +{{% /note %}} + +The Geo package requires S2 cell IDs as tokens. +To generate add S2 cell IDs tokens to your data, use one of the following options: + +- [Generate S2 cell ID tokens with Telegraf](#generate-s2-cell-id-tokens-with-telegraf) +- [Generate S2 cell ID tokens language-specific libraries](#generate-s2-cell-id-tokens-language-specific-libraries) +- [Generate S2 cell ID tokens with Flux](#generate-s2-cell-id-tokens-with-flux) + +### Generate S2 cell ID tokens with Telegraf +Enable the [Telegraf S2 Geo (`s2geo`) processor](https://github.com/influxdata/telegraf/tree/master/plugins/processors/s2geo) +to generate S2 cell ID tokens at a specified `cell_level` using `lat` and `lon` field values. + +Add the `processors.s2geo` configuration to your Telegraf configuration file (`telegraf.conf`): + +```toml +[[processors.s2geo]] + ## The name of the lat and lon fields containing WGS-84 latitude and + ## longitude in decimal degrees. + lat_field = "lat" + lon_field = "lon" + + ## New tag to create + tag_key = "s2_cell_id" + + ## Cell level (see https://s2geometry.io/resources/s2cell_statistics.html) + cell_level = 9 +``` + +Telegraf stores the S2 cell ID token in the `s2_cell_id` tag. + +### Generate S2 cell ID tokens language-specific libraries +Many programming languages offer S2 Libraries with methods for generating S2 cell ID tokens. +Use latitude and longitude with the `s2.CellID.ToToken` endpoint of the S2 Geometry +Library to generate `s2_cell_id` tags. For example: + +- **Go:** [s2.CellID.ToToken()](https://godoc.org/github.com/golang/geo/s2#CellID.ToToken) +- **Python:** [s2sphere.CellId.to_token()](https://s2sphere.readthedocs.io/en/latest/api.html#s2sphere.CellId) +- **JavaScript:** [s2.cellid.toToken()](https://github.com/mapbox/node-s2/blob/master/API.md#cellidtotoken---string) + +### Generate S2 cell ID tokens with Flux +Use the [`geo.s2CellIDToken()` function](/flux/v0.x/stdlib/experimental/geo/s2cellidtoken/) +with existing longitude (`lon`) and latitude (`lat`) field values to generate and add the S2 cell ID token. +First, use the [`geo.toRows()` function](/flux/v0.x/stdlib/experimental/geo/torows/) +to pivot **lat** and **lon** fields into row-wise sets: + +```js +import "experimental/geo" + +from(bucket: "example-bucket") + |> range(start: -1h) + |> filter(fn: (r) => r._measurement == "example-measurement") + |> geo.toRows() + |> map(fn: (r) => ({ r with + s2_cell_id: geo.s2CellIDToken(point: {lon: r.lon, lat: r.lat}, level: 10) + })) +``` diff --git a/content/flux/v0.x/guides/monitor-states.md b/content/flux/v0.x/guides/monitor-states.md index 8beae0c4e6..fbbdb67fe4 100644 --- a/content/flux/v0.x/guides/monitor-states.md +++ b/content/flux/v0.x/guides/monitor-states.md @@ -16,8 +16,8 @@ Flux helps you monitor states in your metrics and events: If you're just getting started with Flux queries, check out the following: -- [Get started with Flux](/v2.0/query-data/get-started/) for a conceptual overview of Flux. -- [Execute queries](/v2.0/query-data/execute-queries/) to discover a variety of ways to run your queries. +- [Get started with Flux](/flux/v0.x/introduction/getting-started/) for a conceptual overview of Flux. +- [Execute queries](/flux/v0.x/guides/executing-queries/) to discover a variety of ways to run your queries. ## Find how long a state persists diff --git a/content/flux/v0.x/language/operators.md b/content/flux/v0.x/language/operators.md index 70681ecd1f..63ca853925 100644 --- a/content/flux/v0.x/language/operators.md +++ b/content/flux/v0.x/language/operators.md @@ -95,7 +95,7 @@ Function operators facilitate the creation of functions and control the flow of --- -_See [Custom functions](/v2.0/query-data/guides/custom-functions) for examples of function operators is use._ +_See [Custom functions](/flux/v0.x/stdlib/custom-functions/) for examples of function operators is use._ --- diff --git a/content/flux/v0.x/stdlib/experimental/geo/_index.md b/content/flux/v0.x/stdlib/experimental/geo/_index.md index be0ce92206..36e5c0c2b9 100644 --- a/content/flux/v0.x/stdlib/experimental/geo/_index.md +++ b/content/flux/v0.x/stdlib/experimental/geo/_index.md @@ -47,9 +47,9 @@ Geometry Library to generate `s2_cell_id` tags. Specify your [S2 Cell ID level](https://s2geometry.io/resources/s2cell_statistics.html). {{% note %}} -For faster filtering, use higher S2 Cell ID levels. -But know that that higher levels increase -[series cardinality](/v2.0/reference/glossary/#series-cardinality). +To filter more quickly, use higher S2 Cell ID levels, +but know that that higher levels increase +[series cardinality](/influxdb/latest/concepts/glossary/#series-cardinality). {{% /note %}} Language-specific implementations of the S2 Geometry Library provide methods for diff --git a/content/flux/v0.x/stdlib/experimental/geo/filterrows.md b/content/flux/v0.x/stdlib/experimental/geo/filterrows.md index 6f121f7ed7..63228b895b 100644 --- a/content/flux/v0.x/stdlib/experimental/geo/filterrows.md +++ b/content/flux/v0.x/stdlib/experimental/geo/filterrows.md @@ -31,6 +31,28 @@ geo.filterRows( ) ``` +### Strict and non-strict filtering +In most cases, the specified geographic region does not perfectly align with S2 grid cells. + +- **Non-strict filtering** returns points that may be outside of the specified region but + inside S2 grid cells partially covered by the region. +- **Strict filtering** returns only points inside the specified region. + + S2 grid cell + Filter region + Returned point + +{{< flex >}} +{{% flex-content %}} +**Strict filtering** +{{< svg "/static/img/svgs/geo-strict.svg" >}} +{{% /flex-content %}} +{{% flex-content %}} +**Non-strict filtering** +{{< svg "/static/img/svgs/geo-non-strict.svg" >}} +{{% /flex-content %}} +{{< /flex >}} + ## Parameters ### region @@ -84,6 +106,7 @@ Enable strict geographic data filtering which filters points by longitude (`lon` For S2 grid cells that are partially covered by the defined region, only points with coordinates in the defined region are returned. Default is `true`. +_See [Strict and non-strict filtering](#strict-and-non-strict-filtering) above._ _**Data type:** Boolean_ diff --git a/content/flux/v0.x/stdlib/experimental/geo/gridfilter.md b/content/flux/v0.x/stdlib/experimental/geo/gridfilter.md index 653093c4ac..2ca7eb0bb3 100644 --- a/content/flux/v0.x/stdlib/experimental/geo/gridfilter.md +++ b/content/flux/v0.x/stdlib/experimental/geo/gridfilter.md @@ -18,6 +18,7 @@ data with coordinates outside the region, but inside S2 grid cells partially cov Use [`toRows()`](/flux/v0.x/stdlib/experimental/geo/toRows/) and [`geo.strictFilter()`](/flux/v0.x/stdlib/experimental/geo/strictfilter/) after `geo.gridFilter()` to precisely filter points. +_See [Non-strict and strict filtering](#non-strict-and-strict-filtering) below._ {{% /note %}} _**Function type:** Transformation_ @@ -34,6 +35,28 @@ geo.gridFilter( ) ``` +### Non-strict and strict filtering +In most cases, the specified geographic region does not perfectly align with S2 grid cells. + +- **Non-strict filtering** returns points that may be outside of the specified region but + inside S2 grid cells partially covered by the region. +- **Strict filtering** returns only points inside the specified region. + + S2 grid cell + Filter region + Returned point + +{{< flex >}} +{{% flex-content %}} +**Non-strict filtering** +{{< svg "/static/img/svgs/geo-non-strict.svg" >}} +{{% /flex-content %}} +{{% flex-content %}} +**Strict filtering** +{{< svg "/static/img/svgs/geo-strict.svg" >}} +{{% /flex-content %}} +{{< /flex >}} + ## Parameters ### region diff --git a/content/flux/v0.x/stdlib/experimental/geo/s2cellidtoken.md b/content/flux/v0.x/stdlib/experimental/geo/s2cellidtoken.md new file mode 100644 index 0000000000..47dae3e6b3 --- /dev/null +++ b/content/flux/v0.x/stdlib/experimental/geo/s2cellidtoken.md @@ -0,0 +1,78 @@ +--- +title: geo.s2CellIDToken() function +description: > + The `geo.s2CellIDToken()` function returns an S2 cell ID token. +menu: + flux_0_x: + name: geo.s2CellIDToken + parent: Geo +weight: 1 +--- + +The `geo.s2CellIDToken()` function returns an S2 cell ID token. + +_**Function type:** Transformation_ + +```js +import "experimental/geo" +geo.s2CellIDToken( + point: {lat: 37.7858229, lon: -122.4058124}, + level: 10 +) +``` + +## Parameters + +### point +Longitude and latitude in **decimal degrees** (WGS 84) to use when generating +the S2 cell ID token. + +_**Data type:** Object_ + +### token +S2 cell ID token to update. +Useful for changing the S2 cell level of an existing S2 cell ID token. + +_**Data type:** String_ + +{{% note %}} +`point` and `token` are mutually exclusive. +{{% /note %}} + +### level +[S2 cell level](https://s2geometry.io/resources/s2cell_statistics.html) to use +when generating the S2 cell ID token. + +_**Data type:** Integer_ + +## Examples + +##### Use latitude and longitude values to generate S2 cell ID tokens +```js +import "experimental/geo" +from(bucket: "example-bucket") + |> range(start: -1h) + |> filter(fn: (r) => r._measurement == "example-measurement") + |> map(fn: (r) => ({ + r with + s2_cell_id: geo.s2CellIDToken( + point: {lat: r.lat, lon: r.lon}, + level: 10 + )}) + ) +``` + +##### Update S2 cell ID token level +```js +import "experimental/geo" +from(bucket: "example-bucket") + |> range(start: -1h) + |> filter(fn: (r) => r._measurement == "example-measurement") + |> map(fn: (r) => ({ + r with + s2_cell_id: geo.s2CellIDToken( + token: r.s2_cell_id, + level: 10 + )}) + ) +``` diff --git a/content/flux/v0.x/stdlib/experimental/group.md b/content/flux/v0.x/stdlib/experimental/group.md index 50866fcfbd..0103f7bc8d 100644 --- a/content/flux/v0.x/stdlib/experimental/group.md +++ b/content/flux/v0.x/stdlib/experimental/group.md @@ -44,7 +44,7 @@ _**Data type:** String_ #### extend Appends columns defined in the [`columns` parameter](#columns) to all existing -[group keys](/v2.0/query-data/get-started/#group-keys). +[group keys](/flux/v0.x/introduction/getting-started/#group-keys). ## Examples diff --git a/content/flux/v0.x/stdlib/experimental/prometheus/scrape.md b/content/flux/v0.x/stdlib/experimental/prometheus/scrape.md index 568c205395..0c8b5eb825 100644 --- a/content/flux/v0.x/stdlib/experimental/prometheus/scrape.md +++ b/content/flux/v0.x/stdlib/experimental/prometheus/scrape.md @@ -7,9 +7,7 @@ menu: flux_0_x: name: prometheus.scrape parent: Prometheus -weight: 301 -related: - - /v2.0/write-data/scrape-data/scrapable-endpoints/ +weight: 1 --- The `prometheus.scrape()` function retrieves [Prometheus-formatted metrics](https://prometheus.io/docs/instrumenting/exposition_formats/) diff --git a/content/flux/v0.x/stdlib/sql/from.md b/content/flux/v0.x/stdlib/sql/from.md index 3230f0ddee..6bc7a291dd 100644 --- a/content/flux/v0.x/stdlib/sql/from.md +++ b/content/flux/v0.x/stdlib/sql/from.md @@ -90,7 +90,7 @@ sql.from( {{% warn %}} **InfluxDB OSS** and **InfluxDB Cloud** do not have direct access to the local filesystem and cannot query SQLite data sources. -Use the [Flux REPL](/v2.0/reference/cli/influx/repl/) to query a SQLite data source +Use the [Flux REPL](/flux/v0.x/guides/executing-queries#influx-cli-in-flux-mode) to query a SQLite data source on your local filesystem. {{% /warn %}} diff --git a/content/flux/v0.x/stdlib/sql/to.md b/content/flux/v0.x/stdlib/sql/to.md index e96c26a616..447d431a5a 100644 --- a/content/flux/v0.x/stdlib/sql/to.md +++ b/content/flux/v0.x/stdlib/sql/to.md @@ -101,7 +101,7 @@ sql.to( {{% warn %}} **InfluxDB OSS** and **InfluxDB Cloud** do not have direct access to the local filesystem and cannot write to SQLite data sources. -Use the [Flux REPL](/v2.0/reference/cli/influx/repl/) to write to an SQLite data +Use the [Flux REPL](/flux/v0.x/guides/executing-queries#influx-cli-in-flux-mode) to write to an SQLite data source on your local filesystem. {{% /warn %}} diff --git a/layouts/shortcodes/children.html b/layouts/shortcodes/children.html index c6b64df459..053afd8ae4 100644 --- a/layouts/shortcodes/children.html +++ b/layouts/shortcodes/children.html @@ -11,7 +11,7 @@ {{ $pages := .Scratch.Get "pages" }} {{ range $pages.ByWeight }} -

    {{ .Title }}

    +

    {{ .Title }}

    {{- if .Description }}{{- .Description | markdownify -}} {{ else }}{{- .Summary | markdownify -}} diff --git a/layouts/shortcodes/flex-content.html b/layouts/shortcodes/flex-content.html new file mode 100644 index 0000000000..8458f6fa41 --- /dev/null +++ b/layouts/shortcodes/flex-content.html @@ -0,0 +1,5 @@ +{{ $width := .Get 0 | default "half" }} +{{ $_hugo_config := `{ "version": 1 }` }} +

    + {{ .Inner }} +
    diff --git a/layouts/shortcodes/flex.html b/layouts/shortcodes/flex.html new file mode 100644 index 0000000000..5943fba4bd --- /dev/null +++ b/layouts/shortcodes/flex.html @@ -0,0 +1,4 @@ +{{ $_hugo_config := `{ "version": 1 }` }} +
    + {{ .Inner }} +
    diff --git a/layouts/shortcodes/svg.html b/layouts/shortcodes/svg.html new file mode 100644 index 0000000000..d0f00f6d85 --- /dev/null +++ b/layouts/shortcodes/svg.html @@ -0,0 +1,2 @@ +{{ $svg := .Get 0 }} +{{ $svg | readFile | safeHTML }} diff --git a/static/css/docs-default.css b/static/css/docs-default.css index 939b3b9707..75463859b6 100644 --- a/static/css/docs-default.css +++ b/static/css/docs-default.css @@ -1,2 +1,2 @@ -.klavika-font{font-family:Klavika-Light,'Helvetica Neue',Helvetica,Helvetica,Arial,Tahoma,Verdana,sans-serif;font-weight:200}@font-face{font-family:icomoon;src:url(../fonts/icomoon.eot?c3omf0);src:url(../fonts/icomoon.eot?c3omf0#iefix) format('embedded-opentype'),url(../fonts/icomoon.woff2?c3omf0) format('woff2'),url(../fonts/icomoon.ttf?c3omf0) format('truetype'),url(../fonts/icomoon.woff?c3omf0) format('woff'),url(../fonts/icomoon.svg?c3omf0#icomoon) format('svg');font-weight:400;font-style:normal}.icon{font-family:icomoon;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon.sun2:before{content:"\eae2"}.icon.moon:before{content:"\eae3"}.icon.logotype:before{content:"\e800"}.icon.logo:before{content:"\e801"}.icon.arrow-down:before{content:"\e802"}.icon.arrow-up:before{content:"\e803"}.icon.arrow-left:before{content:"\e804"}.icon.arrow-right:before{content:"\e805"}.icon.health:before{content:"\e806"}.icon.lightning:before{content:"\e807"}.icon.matrix:before{content:"\e808"}.icon.cluster:before{content:"\e809"}.icon.data:before{content:"\e80a"}.icon.google:before{content:"\e81a"}.icon.eyeball:before{content:"\e901"}.icon.infinite:before{content:"\e902"}.icon.dashboard:before{content:"\eade"}.icon.analytics:before{content:"\eadf"}.icon.cloud-stack:before{content:"\eae0"}.icon.iot:before{content:"\eae1"}.icon.home:before{content:"\e904"}.icon.home2:before{content:"\e905"}.icon.home3:before{content:"\e906"}.icon.office:before{content:"\e907"}.icon.newspaper:before{content:"\e908"}.icon.pencil:before{content:"\e909"}.icon.pencil2:before{content:"\e90a"}.icon.quill:before{content:"\e90b"}.icon.pen:before{content:"\e90c"}.icon.blog:before{content:"\e90d"}.icon.eyedropper:before{content:"\e90e"}.icon.droplet:before{content:"\e90f"}.icon.paint-format:before{content:"\e910"}.icon.image:before{content:"\e911"}.icon.images:before{content:"\e912"}.icon.camera:before{content:"\e913"}.icon.headphones:before{content:"\e914"}.icon.music:before{content:"\e915"}.icon.play:before{content:"\e916"}.icon.film:before{content:"\e917"}.icon.video-camera:before{content:"\e918"}.icon.dice:before{content:"\e919"}.icon.pacman:before{content:"\e91a"}.icon.spades:before{content:"\e91b"}.icon.clubs:before{content:"\e91c"}.icon.diamonds:before{content:"\e91d"}.icon.bullhorn:before{content:"\e91e"}.icon.connection:before{content:"\e91f"}.icon.podcast:before{content:"\e920"}.icon.feed:before{content:"\e921"}.icon.mic:before{content:"\e922"}.icon.book:before{content:"\e923"}.icon.books:before{content:"\e924"}.icon.library:before{content:"\e925"}.icon.file-text:before{content:"\e926"}.icon.profile:before{content:"\e927"}.icon.file-empty:before{content:"\e928"}.icon.files-empty:before{content:"\e929"}.icon.file-text2:before{content:"\e92a"}.icon.file-picture:before{content:"\e92b"}.icon.file-music:before{content:"\e92c"}.icon.file-play:before{content:"\e92d"}.icon.file-video:before{content:"\e92e"}.icon.file-zip:before{content:"\e92f"}.icon.copy:before{content:"\e930"}.icon.paste:before{content:"\e931"}.icon.stack:before{content:"\e932"}.icon.folder:before{content:"\e933"}.icon.folder-open:before{content:"\e934"}.icon.folder-plus:before{content:"\e935"}.icon.folder-minus:before{content:"\e936"}.icon.folder-download:before{content:"\e937"}.icon.folder-upload:before{content:"\e938"}.icon.price-tag:before{content:"\e939"}.icon.price-tags:before{content:"\e93a"}.icon.barcode:before{content:"\e93b"}.icon.qrcode:before{content:"\e93c"}.icon.ticket:before{content:"\e93d"}.icon.cart:before{content:"\e93e"}.icon.coin-dollar:before{content:"\e93f"}.icon.coin-euro:before{content:"\e940"}.icon.coin-pound:before{content:"\e941"}.icon.coin-yen:before{content:"\e942"}.icon.credit-card:before{content:"\e943"}.icon.calculator:before{content:"\e944"}.icon.lifebuoy:before{content:"\e945"}.icon.phone:before{content:"\e946"}.icon.phone-hang-up:before{content:"\e947"}.icon.address-book:before{content:"\e948"}.icon.envelop:before{content:"\e949"}.icon.pushpin:before{content:"\e94a"}.icon.location:before{content:"\e94b"}.icon.location2:before{content:"\e94c"}.icon.compass:before{content:"\e94d"}.icon.compass2:before{content:"\e94e"}.icon.map:before{content:"\e94f"}.icon.map2:before{content:"\e950"}.icon.history:before{content:"\e951"}.icon.clock:before{content:"\e952"}.icon.clock2:before{content:"\e953"}.icon.alarm:before{content:"\e954"}.icon.bell:before{content:"\e955"}.icon.stopwatch:before{content:"\e956"}.icon.calendar:before{content:"\e957"}.icon.printer:before{content:"\e958"}.icon.keyboard:before{content:"\e959"}.icon.display:before{content:"\e95a"}.icon.laptop:before{content:"\e95b"}.icon.mobile:before{content:"\e95c"}.icon.mobile2:before{content:"\e95d"}.icon.tablet:before{content:"\e95e"}.icon.tv:before{content:"\e95f"}.icon.drawer:before{content:"\e960"}.icon.drawer2:before{content:"\e961"}.icon.box-add:before{content:"\e962"}.icon.box-remove:before{content:"\e963"}.icon.download:before{content:"\e964"}.icon.upload:before{content:"\e965"}.icon.floppy-disk:before{content:"\e966"}.icon.drive:before{content:"\e967"}.icon.database:before{content:"\e968"}.icon.undo:before{content:"\e969"}.icon.redo:before{content:"\e96a"}.icon.undo2:before{content:"\e96b"}.icon.redo2:before{content:"\e96c"}.icon.forward:before{content:"\e96d"}.icon.reply:before{content:"\e96e"}.icon.bubble:before{content:"\e96f"}.icon.bubbles:before{content:"\e970"}.icon.bubbles2:before{content:"\e971"}.icon.bubble2:before{content:"\e972"}.icon.bubbles3:before{content:"\e973"}.icon.bubbles4:before{content:"\e974"}.icon.user:before{content:"\e975"}.icon.users:before{content:"\e976"}.icon.user-plus:before{content:"\e977"}.icon.user-minus:before{content:"\e978"}.icon.user-check:before{content:"\e979"}.icon.user-tie:before{content:"\e97a"}.icon.quotes-left:before{content:"\e97b"}.icon.quotes-right:before{content:"\e97c"}.icon.hour-glass:before{content:"\e97d"}.icon.spinner:before{content:"\e97e"}.icon.spinner2:before{content:"\e97f"}.icon.spinner3:before{content:"\e980"}.icon.spinner4:before{content:"\e981"}.icon.spinner5:before{content:"\e982"}.icon.spinner6:before{content:"\e983"}.icon.spinner7:before{content:"\e984"}.icon.spinner8:before{content:"\e985"}.icon.spinner9:before{content:"\e986"}.icon.spinner10:before{content:"\e987"}.icon.spinner11:before{content:"\e988"}.icon.binoculars:before{content:"\e989"}.icon.search:before{content:"\e98a"}.icon.zoom-in:before{content:"\e98b"}.icon.zoom-out:before{content:"\e98c"}.icon.enlarge:before{content:"\e98d"}.icon.shrink:before{content:"\e98e"}.icon.enlarge2:before{content:"\e98f"}.icon.shrink2:before{content:"\e990"}.icon.key:before{content:"\e991"}.icon.key2:before{content:"\e992"}.icon.lock:before{content:"\e993"}.icon.unlocked:before{content:"\e994"}.icon.wrench:before{content:"\e995"}.icon.equalizer:before{content:"\e996"}.icon.equalizer2:before{content:"\e997"}.icon.cog:before{content:"\e900"}.icon.cogs:before{content:"\e998"}.icon.hammer:before{content:"\e999"}.icon.magic-wand:before{content:"\e99a"}.icon.aid-kit:before{content:"\e99b"}.icon.bug:before{content:"\e99c"}.icon.pie-chart:before{content:"\e99d"}.icon.stats-dots:before{content:"\e99e"}.icon.stats-bars:before{content:"\e99f"}.icon.stats-bars2:before{content:"\e9a0"}.icon.trophy:before{content:"\e9a1"}.icon.gift:before{content:"\e9a2"}.icon.glass:before{content:"\e9a3"}.icon.glass2:before{content:"\e9a4"}.icon.mug:before{content:"\e9a5"}.icon.spoon-knife:before{content:"\e9a6"}.icon.leaf:before{content:"\e9a7"}.icon.rocket:before{content:"\e9a8"}.icon.meter:before{content:"\e9a9"}.icon.meter2:before{content:"\e9aa"}.icon.hammer2:before{content:"\e9ab"}.icon.fire:before{content:"\e9ac"}.icon.lab:before{content:"\e9ad"}.icon.magnet:before{content:"\e9ae"}.icon.bin:before{content:"\e9af"}.icon.bin2:before{content:"\e9b0"}.icon.briefcase:before{content:"\e9b1"}.icon.airplane:before{content:"\e9b2"}.icon.truck:before{content:"\e9b3"}.icon.road:before{content:"\e9b4"}.icon.accessibility:before{content:"\e9b5"}.icon.target:before{content:"\e9b6"}.icon.shield:before{content:"\e9b7"}.icon.power:before{content:"\e9b8"}.icon.switch:before{content:"\e9b9"}.icon.power-cord:before{content:"\e9ba"}.icon.clipboard:before{content:"\e9bb"}.icon.list-numbered:before{content:"\e9bc"}.icon.list:before{content:"\e9bd"}.icon.list2:before{content:"\e9be"}.icon.tree:before{content:"\e9bf"}.icon.menu:before{content:"\e9c0"}.icon.menu2:before{content:"\e9c1"}.icon.menu3:before{content:"\e9c2"}.icon.menu4:before{content:"\e9c3"}.icon.cloud:before{content:"\e9c4"}.icon.cloud-download:before{content:"\e9c5"}.icon.cloud-upload:before{content:"\e9c6"}.icon.cloud-check:before{content:"\e9c7"}.icon.download2:before{content:"\e9c8"}.icon.upload2:before{content:"\e9c9"}.icon.download3:before{content:"\e9ca"}.icon.upload3:before{content:"\e9cb"}.icon.sphere:before{content:"\e9cc"}.icon.earth:before{content:"\e9cd"}.icon.link:before{content:"\e9ce"}.icon.flag:before{content:"\e9cf"}.icon.attachment:before{content:"\e9d0"}.icon.eye:before{content:"\e9d1"}.icon.eye-plus:before{content:"\e9d2"}.icon.eye-minus:before{content:"\e9d3"}.icon.eye-blocked:before{content:"\e9d4"}.icon.bookmark:before{content:"\e9d5"}.icon.bookmarks:before{content:"\e9d6"}.icon.sun:before{content:"\e9d7"}.icon.contrast:before{content:"\e9d8"}.icon.brightness-contrast:before{content:"\e9d9"}.icon.star-empty:before{content:"\e9da"}.icon.star-half:before{content:"\e9db"}.icon.star-full:before{content:"\e9dc"}.icon.heart:before{content:"\e9dd"}.icon.heart-broken:before{content:"\e9de"}.icon.man:before{content:"\e9df"}.icon.woman:before{content:"\e9e0"}.icon.man-woman:before{content:"\e9e1"}.icon.happy:before{content:"\e9e2"}.icon.happy2:before{content:"\e9e3"}.icon.smile:before{content:"\e9e4"}.icon.smile2:before{content:"\e9e5"}.icon.tongue:before{content:"\e9e6"}.icon.tongue2:before{content:"\e9e7"}.icon.sad:before{content:"\e9e8"}.icon.sad2:before{content:"\e9e9"}.icon.wink:before{content:"\e9ea"}.icon.wink2:before{content:"\e9eb"}.icon.grin:before{content:"\e9ec"}.icon.grin2:before{content:"\e9ed"}.icon.cool:before{content:"\e9ee"}.icon.cool2:before{content:"\e9ef"}.icon.angry:before{content:"\e9f0"}.icon.angry2:before{content:"\e9f1"}.icon.evil:before{content:"\e9f2"}.icon.evil2:before{content:"\e9f3"}.icon.shocked:before{content:"\e9f4"}.icon.shocked2:before{content:"\e9f5"}.icon.baffled:before{content:"\e9f6"}.icon.baffled2:before{content:"\e9f7"}.icon.confused:before{content:"\e9f8"}.icon.confused2:before{content:"\e9f9"}.icon.neutral:before{content:"\e9fa"}.icon.neutral2:before{content:"\e9fb"}.icon.hipster:before{content:"\e9fc"}.icon.hipster2:before{content:"\e9fd"}.icon.wondering:before{content:"\e9fe"}.icon.wondering2:before{content:"\e9ff"}.icon.sleepy:before{content:"\ea00"}.icon.sleepy2:before{content:"\ea01"}.icon.frustrated:before{content:"\ea02"}.icon.frustrated2:before{content:"\ea03"}.icon.crying:before{content:"\ea04"}.icon.crying2:before{content:"\ea05"}.icon.point-up:before{content:"\ea06"}.icon.point-right:before{content:"\ea07"}.icon.point-down:before{content:"\ea08"}.icon.point-left:before{content:"\ea09"}.icon.warning:before{content:"\ea0a"}.icon.notification:before{content:"\ea0b"}.icon.question:before{content:"\ea0c"}.icon.plus:before{content:"\ea0d"}.icon.minus:before{content:"\ea0e"}.icon.info:before{content:"\ea0f"}.icon.cancel-circle:before{content:"\ea10"}.icon.blocked:before{content:"\ea11"}.icon.cross:before{content:"\e80b"}.icon.checkmark:before{content:"\e80c"}.icon.checkmark2:before{content:"\ea12"}.icon.spell-check:before{content:"\ea13"}.icon.enter:before{content:"\ea14"}.icon.exit:before{content:"\ea15"}.icon.play2:before{content:"\ea16"}.icon.pause:before{content:"\ea17"}.icon.stop:before{content:"\ea18"}.icon.previous:before{content:"\ea19"}.icon.next:before{content:"\ea1a"}.icon.backward:before{content:"\ea1b"}.icon.forward2:before{content:"\ea1c"}.icon.play3:before{content:"\ea1d"}.icon.pause2:before{content:"\ea1e"}.icon.stop2:before{content:"\ea1f"}.icon.backward2:before{content:"\ea20"}.icon.forward3:before{content:"\ea21"}.icon.first:before{content:"\ea22"}.icon.last:before{content:"\ea23"}.icon.previous2:before{content:"\ea24"}.icon.next2:before{content:"\ea25"}.icon.eject:before{content:"\ea26"}.icon.volume-high:before{content:"\ea27"}.icon.volume-medium:before{content:"\ea28"}.icon.volume-low:before{content:"\ea29"}.icon.volume-mute:before{content:"\ea2a"}.icon.volume-mute2:before{content:"\ea2b"}.icon.volume-increase:before{content:"\ea2c"}.icon.volume-decrease:before{content:"\ea2d"}.icon.loop:before{content:"\ea2e"}.icon.loop2:before{content:"\ea2f"}.icon.infinite2:before{content:"\ea30"}.icon.shuffle:before{content:"\ea31"}.icon.arrow-up-left:before{content:"\ea32"}.icon.arrow-up3:before{content:"\ea33"}.icon.arrow-up-right:before{content:"\ea34"}.icon.arrow-right3:before{content:"\ea35"}.icon.arrow-down-right:before{content:"\ea36"}.icon.arrow-down3:before{content:"\ea37"}.icon.arrow-down-left:before{content:"\ea38"}.icon.arrow-left3:before{content:"\ea39"}.icon.arrow-up-left2:before{content:"\ea3a"}.icon.arrow-up2:before{content:"\ea3b"}.icon.arrow-up-right2:before{content:"\ea3c"}.icon.arrow-right2:before{content:"\ea3d"}.icon.arrow-down-right2:before{content:"\ea3e"}.icon.arrow-down2:before{content:"\ea3f"}.icon.arrow-down-left2:before{content:"\ea40"}.icon.arrow-left2:before{content:"\ea41"}.icon.circle-up:before{content:"\ea42"}.icon.circle-right:before{content:"\ea43"}.icon.circle-down:before{content:"\ea44"}.icon.circle-left:before{content:"\ea45"}.icon.tab:before{content:"\ea46"}.icon.move-up:before{content:"\ea47"}.icon.move-down:before{content:"\ea48"}.icon.sort-alpha-asc:before{content:"\ea49"}.icon.sort-alpha-desc:before{content:"\ea4a"}.icon.sort-numeric-asc:before{content:"\ea4b"}.icon.sort-numberic-desc:before{content:"\ea4c"}.icon.sort-amount-asc:before{content:"\ea4d"}.icon.sort-amount-desc:before{content:"\ea4e"}.icon.command:before{content:"\ea4f"}.icon.shift:before{content:"\ea50"}.icon.ctrl:before{content:"\ea51"}.icon.opt:before{content:"\ea52"}.icon.checkbox-checked:before{content:"\ea53"}.icon.checkbox-unchecked:before{content:"\ea54"}.icon.radio-checked:before{content:"\ea55"}.icon.radio-checked2:before{content:"\ea56"}.icon.radio-unchecked:before{content:"\ea57"}.icon.crop:before{content:"\ea58"}.icon.make-group:before{content:"\ea59"}.icon.ungroup:before{content:"\ea5a"}.icon.scissors:before{content:"\ea5b"}.icon.filter:before{content:"\ea5c"}.icon.font:before{content:"\ea5d"}.icon.ligature:before{content:"\ea5e"}.icon.ligature2:before{content:"\ea5f"}.icon.text-height:before{content:"\ea60"}.icon.text-width:before{content:"\ea61"}.icon.font-size:before{content:"\ea62"}.icon.bold:before{content:"\ea63"}.icon.underline:before{content:"\ea64"}.icon.italic:before{content:"\ea65"}.icon.strikethrough:before{content:"\ea66"}.icon.omega:before{content:"\ea67"}.icon.sigma:before{content:"\ea68"}.icon.page-break:before{content:"\ea69"}.icon.superscript:before{content:"\ea6a"}.icon.subscript:before{content:"\ea6b"}.icon.superscript2:before{content:"\ea6c"}.icon.subscript2:before{content:"\ea6d"}.icon.text-color:before{content:"\ea6e"}.icon.pagebreak:before{content:"\ea6f"}.icon.clear-formatting:before{content:"\ea70"}.icon.table:before{content:"\ea71"}.icon.table2:before{content:"\ea72"}.icon.insert-template:before{content:"\ea73"}.icon.pilcrow:before{content:"\ea74"}.icon.ltr:before{content:"\ea75"}.icon.rtl:before{content:"\ea76"}.icon.section:before{content:"\ea77"}.icon.paragraph-left:before{content:"\e903"}.icon.paragraph-center:before{content:"\ea78"}.icon.paragraph-right:before{content:"\ea79"}.icon.paragraph-justify:before{content:"\ea7a"}.icon.indent-increase:before{content:"\ea7b"}.icon.indent-decrease:before{content:"\ea7c"}.icon.share:before{content:"\ea7d"}.icon.new-tab:before{content:"\ea7e"}.icon.embed:before{content:"\ea7f"}.icon.embed2:before{content:"\ea80"}.icon.terminal:before{content:"\ea81"}.icon.share2:before{content:"\ea82"}.icon.mail:before{content:"\ea83"}.icon.mail2:before{content:"\ea84"}.icon.mail3:before{content:"\ea85"}.icon.mail4:before{content:"\ea86"}.icon.google2:before{content:"\ea87"}.icon.google-plus:before{content:"\ea88"}.icon.google-plus2:before{content:"\ea89"}.icon.google-plus3:before{content:"\ea8a"}.icon.google-drive:before{content:"\ea8b"}.icon.facebook:before{content:"\e80d"}.icon.facebook2:before{content:"\e80e"}.icon.facebook3:before{content:"\e80f"}.icon.ello:before{content:"\ea8c"}.icon.instagram:before{content:"\ea8d"}.icon.twitter:before{content:"\e810"}.icon.twitter2:before{content:"\e811"}.icon.twitter3:before{content:"\e812"}.icon.feed2:before{content:"\ea8e"}.icon.feed3:before{content:"\ea8f"}.icon.feed4:before{content:"\ea90"}.icon.youtube:before{content:"\ea91"}.icon.youtube2:before{content:"\ea92"}.icon.youtube3:before{content:"\ea93"}.icon.youtube4:before{content:"\ea94"}.icon.twitch:before{content:"\ea95"}.icon.vimeo:before{content:"\ea96"}.icon.vimeo2:before{content:"\ea97"}.icon.vimeo3:before{content:"\ea98"}.icon.lanyrd:before{content:"\ea99"}.icon.flickr:before{content:"\ea9a"}.icon.flickr2:before{content:"\ea9b"}.icon.flickr3:before{content:"\ea9c"}.icon.flickr4:before{content:"\ea9d"}.icon.picassa:before{content:"\ea9e"}.icon.picassa2:before{content:"\ea9f"}.icon.dribbble:before{content:"\eaa0"}.icon.dribbble2:before{content:"\eaa1"}.icon.dribbble3:before{content:"\eaa2"}.icon.forrst:before{content:"\eaa3"}.icon.forrst2:before{content:"\eaa4"}.icon.deviantart:before{content:"\eaa5"}.icon.deviantart2:before{content:"\eaa6"}.icon.steam:before{content:"\eaa7"}.icon.steam2:before{content:"\eaa8"}.icon.dropbox:before{content:"\eaa9"}.icon.onedrive:before{content:"\eaaa"}.icon.github:before{content:"\e813"}.icon.github2:before{content:"\e814"}.icon.github3:before{content:"\e815"}.icon.github4:before{content:"\e816"}.icon.github5:before{content:"\eaab"}.icon.wordpress:before{content:"\eaac"}.icon.wordpress2:before{content:"\eaad"}.icon.joomla:before{content:"\eaae"}.icon.blogger:before{content:"\eaaf"}.icon.blogger2:before{content:"\eab0"}.icon.tumblr:before{content:"\eab1"}.icon.tumblr2:before{content:"\eab2"}.icon.yahoo:before{content:"\eab3"}.icon.tux:before{content:"\eab4"}.icon.apple:before{content:"\eab5"}.icon.finder:before{content:"\eab6"}.icon.android:before{content:"\eab7"}.icon.windows:before{content:"\eab8"}.icon.windows8:before{content:"\eab9"}.icon.soundcloud:before{content:"\eaba"}.icon.soundcloud2:before{content:"\eabb"}.icon.skype:before{content:"\eabc"}.icon.reddit:before{content:"\eabd"}.icon.linkedin:before{content:"\e817"}.icon.linkedin2:before{content:"\e818"}.icon.lastfm:before{content:"\eabe"}.icon.lastfm2:before{content:"\eabf"}.icon.delicious:before{content:"\eac0"}.icon.stumbleupon:before{content:"\eac1"}.icon.stumbleupon2:before{content:"\eac2"}.icon.stackoverflow:before{content:"\e819"}.icon.pinterest:before{content:"\eac3"}.icon.pinterest2:before{content:"\eac4"}.icon.xing:before{content:"\eac5"}.icon.xing2:before{content:"\eac6"}.icon.flattr:before{content:"\eac7"}.icon.foursquare:before{content:"\eac8"}.icon.paypal:before{content:"\eac9"}.icon.paypal2:before{content:"\eaca"}.icon.paypal3:before{content:"\eacb"}.icon.yelp:before{content:"\eacc"}.icon.file-pdf:before{content:"\eacd"}.icon.file-openoffice:before{content:"\eace"}.icon.file-word:before{content:"\eacf"}.icon.file-excel:before{content:"\ead0"}.icon.libreoffice:before{content:"\ead1"}.icon.html5:before{content:"\ead2"}.icon.html52:before{content:"\ead3"}.icon.css3:before{content:"\ead4"}.icon.git:before{content:"\ead5"}.icon.svg:before{content:"\ead6"}.icon.codepen:before{content:"\ead7"}.icon.chrome:before{content:"\ead8"}.icon.firefox:before{content:"\ead9"}.icon.IE:before{content:"\eada"}.icon.opera:before{content:"\eadb"}.icon.safari:before{content:"\eadc"}.icon.IcoMoon:before{content:"\eadd"}.article-content pre{background-attachment:fixed;background-repeat:no-repeat;background-position:center center;background-size:70%}.article-content strong{color:#e7e8eb}.article-content blockquote td,.article-content blockquote th,.article-content dt>table td,.article-content dt>table th{border-color:#383846}#theme-switch-dark{display:none}/*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0;font-family:Roboto,Helvetica,Arial,Tahoma,Verdana,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}code[class*=language-],pre[class*=language-]{direction:ltr;text-align:left;white-space:pre;white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-o-pre-wrap;word-spacing:normal;word-break:normal;word-wrap:normal;-moz-tab-size:1;-o-tab-size:1;tab-size:1;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow:none}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{overflow:auto}:not(pre)>code[class*=language-]{white-space:normal}.highlight{color:#b1b6ff}.highlight .gh,.highlight .go,.highlight .na,.highlight .nt,.highlight .nv,.highlight .ow{color:#b1b6ff}.highlight .c,.highlight .c1,.highlight .ch,.highlight .cm,.highlight .cpf,.highlight .cs,.highlight .w{color:#757888}.highlight .gi{background-color:#757888}.highlight .k,.highlight .kc,.highlight .kd,.highlight .kn,.highlight .kp,.highlight .kr,.highlight .nn{color:#22adf6}.highlight .bp,.highlight .cp,.highlight .dl,.highlight .gt,.highlight .gu,.highlight .kt,.highlight .nb,.highlight .nc,.highlight .no,.highlight .s1,.highlight .s2,.highlight .sa,.highlight .sb,.highlight .sc,.highlight .sd,.highlight .se,.highlight .sh,.highlight .sr,.highlight .sx{color:#32b08c}.highlight .err,.highlight .fm,.highlight .gd,.highlight .gr,.highlight .nd,.highlight .ne,.highlight .nf,.highlight .nl,.highlight .si{color:#bf3d5e}.highlight .il,.highlight .m,.highlight .mb,.highlight .mf,.highlight .mh,.highlight .mi,.highlight .mo,.highlight .ni,.highlight .vc,.highlight .vg,.highlight .vi,.highlight .vm{color:#ff6db0}.highlight .gp,.highlight .o{color:#22adf6}.highlight .ss{color:#e90}.highlight .cs .gh,.highlight .gp,.highlight .gs,.highlight .gu,.highlight .k,.highlight .kc,.highlight .kd,.highlight .kn,.highlight .kp,.highlight .kr,.highlight .kt,.highlight .nc,.highlight .ne,.highlight .ni,.highlight .nn .nt,.highlight .ow,.highlight .se{font-weight:700}.highlight .c,.highlight .c1,.highlight .ch,.highlight .cm,.highlight .cpf,.highlight .cs,.highlight .ge,.highlight .sd,.highlight .w{font-style:italic}@font-face{font-family:Klavika-Light;src:url(../fonts/KlavikaLight-ItalicTF.otf);font-weight:200;font-style:italic}@font-face{font-family:Klavika-Bold;src:url(../fonts/KlavikaBoldBoldItalic.otf);font-weight:700;font-style:italic}html{overflow:auto}body,html{width:100%;height:100%;background-color:#202028;-webkit-overflow-scrolling:touch}body{color:#bec2cc;line-height:1;overflow:auto}*{-webkit-box-sizing:border-box;box-sizing:border-box}a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0;font-size:100%;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:'';content:none}table{border-collapse:collapse;border-spacing:0}.navbar{top:0;left:0;font-size:1rem;height:4rem;width:100%;background-color:#fafafc;z-index:150;position:relative}.navbar--hamburger,.navbar--logo,.navbar--product-dropdown,.navbar--search,.theme-switcher{position:absolute}.navbar--logo{left:1em;top:1.05em}.navbar--logo a{font-size:1.5rem;color:#545667;-webkit-transition:color .25s ease;transition:color .25s ease}.navbar--logo a:hover{color:#4591ed}.navbar--logo .divider{border-left:1px solid #545667;margin:0 .8rem 0 .5rem;vertical-align:text-top;opacity:.35;line-height:1.15em}.navbar--logo .navbar--docs{font-size:1.3rem}.navbar--hamburger{width:4rem;height:4rem;right:0}.navbar--hamburger .navbar--hamburger-bar{width:1.2rem;height:2px;background-color:#676978;border-radius:1px;position:absolute;left:50%;-webkit-transition:all .3s ease;transition:all .3s ease}.navbar--hamburger .navbar--hamburger-bar.top{top:40%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.navbar--hamburger .navbar--hamburger-bar.middle{top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.navbar--hamburger .navbar--hamburger-bar.bottom{top:60%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.navbar--hamburger:hover{cursor:pointer}.navbar--hamburger:hover .navbar--hamburger-bar{background-color:#8e91a1}.navbar--hamburger.open .navbar--hamburger-bar.top{top:50%;-webkit-transform:translate(-50%,-50%) rotate(45deg);transform:translate(-50%,-50%) rotate(45deg)}.navbar--hamburger.open .navbar--hamburger-bar.middle{opacity:0}.navbar--hamburger.open .navbar--hamburger-bar.bottom{top:50%;-webkit-transform:translate(-50%,-50%) rotate(-45deg);transform:translate(-50%,-50%) rotate(-45deg)}.navbar--product-menu{width:100%;position:absolute;top:.5em;height:auto;opacity:0;-webkit-transition:opacity .25s ease;transition:opacity .25s ease;background:#4591ed;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #4591ed),to(#22adf6));background:linear-gradient(to bottom,#4591ed 0,#22adf6 100%)}.navbar--product-container{width:100%;height:auto;position:absolute;top:calc(4rem * .85);left:0;visibility:hidden;-webkit-transition:all .25s ease;transition:all .25s ease;z-index:100}.navbar--product-container.open{visibility:visible}.navbar--product-container.open .navbar--product-menu{opacity:1}.navbar--product-divider{margin:.25em 0;height:2px;background-color:rgba(67,68,83,.1)}.navbar--product{font-size:19px}.navbar--product:active,.navbar--product:link,.navbar--product:visited{color:#fff;-webkit-transition:background-color .25s ease,color .25s ease;transition:background-color .25s ease,color .25s ease;background-color:transparent;padding:1.25rem 1rem;display:block;width:100%}.navbar--product:hover{background-color:rgba(56,56,70,.12);color:#fff}.navbar--product-dropdown{display:none;top:.5em;background-color:#4591ed;height:3rem;border-radius:3px;-webkit-transition:background-color .25s ease,color .25s ease;transition:background-color .25s ease,color .25s ease}.navbar--product-dropdown:hover{cursor:pointer;background-color:#22adf6}.navbar--product-dropdown .navbar--current-product,.navbar--product-dropdown .navbar--product-dropdown-caret{position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);color:#fff}.navbar--product-dropdown .navbar--current-product{font-weight:700;left:1rem;font-size:19px;font-weight:400}.navbar--product-dropdown .navbar--product-dropdown-caret{right:1rem;font-size:.625em}.navbar--search{height:3rem;width:40%;right:4rem;top:.5em}.navbar--search>*{position:absolute!important;top:0;left:0;width:100%;height:100%}.navbar--search-field{position:absolute;top:0;left:0;width:100%;height:100%;border-radius:3px;border:2px solid #eeeff2;color:#545667;background-color:#fff;padding:0 1rem;font-weight:400;font-size:19px;outline:0;-webkit-transition:border-color .3s ease,color .3s ease;transition:border-color .3s ease,color .3s ease}.navbar--search-field:focus{border-color:#22adf6;color:#22adf6}.algolia-autocomplete{width:100%}.algolia-autocomplete .aa-hint,.algolia-autocomplete .aa-input{width:100%}.algolia-autocomplete .aa-hint{color:red}.algolia-autocomplete .aa-dropdown-menu{margin:.5rem 0 0 0;width:100%;padding:.75rem;background-color:rgba(67,68,83,.7);border:0}.algolia-autocomplete .aa-dropdown-menu .algolia-docsearch-suggestion--highlight{color:#4591ed}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion{cursor:pointer;padding:0}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion{background-color:#2c2c38;border-radius:3px;overflow:hidden}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion__secondary{border:none;margin-top:2px}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion:first-child .algolia-docsearch-suggestion__secondary{margin-top:0}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--category-header{border-radius:3px 3px 0 0;background-color:#2c2c38;color:#a4a8b6;padding:.75rem 1rem;font-weight:500}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--highlight{background-color:transparent}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--subcategory-column{border:none;background-color:#f6f6f8}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--content{background-color:#fff}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--title{margin-bottom:.25rem;display:inline-block;color:#545667}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--text{color:#757888}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--subcategory-column-text{font-size:.8rem;line-height:1.4em;color:#757888}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor .algolia-docsearch-suggestion--content{background:#4591ed;background:-webkit-gradient(linear,left top, right top,color-stop(0, #4591ed),to(#00c9ff));background:linear-gradient(to right,#4591ed 0,#00c9ff 100%)}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor .algolia-docsearch-suggestion--text,.algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor .algolia-docsearch-suggestion--title{color:#bef0ff}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight,.algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor .algolia-docsearch-suggestion--title .algolia-docsearch-suggestion--highlight{color:#fff!important}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion em{font-weight:700;font-style:normal}.algolia-autocomplete .algolia-docsearch-footer{border:none;padding:.75rem 0 0 0}.theme-switcher{display:none;width:4rem;height:4rem;right:0;border:0;outline:0;background-color:#fafafc;color:#545667}.theme-switcher .icon{-webkit-transition:color .25s ease;transition:color .25s ease}.theme-switcher .sun2{font-size:1.5rem}.theme-switcher .moon{font-size:1.2rem}.theme-switcher:hover{color:#4591ed;cursor:pointer}@media (max-width:500px){.navbar--logo .logotype{display:none}.navbar--logo .logo{display:inline}}@media (min-width:500px){.navbar--logo .logotype{display:inline}.navbar--logo .logo{display:none}}@media (min-width:900px){.theme-switcher{display:block}.navbar--product-dropdown{display:block;left:18rem;width:17rem}.navbar--product-container{left:18rem;width:17rem;top:2.9em}.navbar--product-container.open .navbar--dropdown-dismiss{width:100vw;height:100vh;position:fixed;top:0;left:0;z-index:100}.navbar--product-container.open .navbar--dropdown-dismiss:hover{cursor:pointer}.navbar--product-menu{border-radius:0 0 3px 3px;overflow:hidden;z-index:110}.navbar--search{left:35.5rem;width:calc(100% - 18rem - .5rem - .5rem - 4rem - 17rem)}.navbar--hamburger{display:none}.navbar--product.external{font-size:.8rem}}@media (min-width:1200px){.navbar--product-dropdown{left:23rem;width:17.5rem}.navbar--product-container{left:23rem;width:17.5rem}.navbar--search{left:41rem;width:calc(100% - 23rem - .5rem - .5rem - 4rem - 17.5rem)}}@media (min-width:1900px){.navbar--product-dropdown{left:28rem;width:17.5rem}.navbar--product-container{left:28rem;width:17.5rem}.navbar--search{left:46rem;width:calc(100% - 28rem - .5rem - .5rem - 4rem - 17.5rem)}}.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu{right:0!important;left:auto!important;overflow:scroll!important;max-height:90vh!important}.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu:before{display:none}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--wrapper{padding:.2rem 0}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column{display:none}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--content{padding:.75rem;width:100%;float:none}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--content:before{display:none}.algolia-autocomplete .algolia-docsearch-footer{padding:0}@media (min-width:1330px){.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu{right:auto!important;left:0!important}}@media (max-width:768px){.algolia-docsearch-suggestion--subcategory-column{display:none!important}.algolia-docsearch-suggestion--wrapper{margin:.25em 0!important}}@media (max-width:570px){.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu{position:fixed!important;top:3.5em!important;left:0;min-width:100vw}}.sidebar--toggle{padding:1em;position:relative;z-index:100;height:3rem;width:100%;background-color:#434453;text-align:left;font-style:italic;color:#f6f6f8;font-weight:500;-webkit-transition:background-color .25s ease,color .25s ease;transition:background-color .25s ease,color .25s ease}.sidebar--toggle:hover{color:#fff;background-color:#545667;cursor:pointer}.sidebar--toggle:after,.sidebar--toggle:before{content:"";position:absolute;display:block;right:1em;top:1.45em;height:2px;width:15px;background:#999dab}.sidebar--toggle:before{-webkit-transform:rotate(90deg);transform:rotate(90deg);-webkit-transition:all .2s;transition:all .2s}.sidebar--toggle.open:before{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.sidebar{background-color:#1c1c21;height:100%;overflow:hidden;-webkit-transition:max-height .2s ease-out;transition:max-height .2s ease-out}.sidebar::-webkit-scrollbar{background-color:#1c1c21;width:16px}.sidebar::-webkit-scrollbar-track{background-color:#1c1c21}.sidebar::-webkit-scrollbar-thumb{border:4px solid #1c1c21;background-color:#676978;border-radius:8px}.sidebar.open{max-height:4000px;-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in}.sidebar--section{border-top:2px solid #292933;padding:2em 0}.sidebar--section:first-child{border:none}.sidebar--section-title{color:#4591ed;padding:0 2rem 1em 2rem;font-size:1.25em}.sidebar--section-title a:active,.sidebar--section-title a:link,.sidebar--section-title a:visited{color:#4591ed;font-weight:400}.sidebar--section-title a:hover{color:#fff}.sidebar--section ul{padding-left:3rem}.sidebar--section ul li{position:relative;margin-bottom:.25rem}ul.sidebar--children{margin-left:-1.85rem;height:0;overflow:hidden}ul.sidebar--children.open{height:auto;overflow:visible;border-left:2px solid #292933}ul.sidebar--children li:first-child{margin-top:.25rem}.sidebar--children-toggle{position:absolute;left:-2.25rem;top:.2rem;height:.9rem;width:.9rem;background:#434453;border-radius:50%;-webkit-transition:all .2s;transition:all .2s}.sidebar--children-toggle:before{content:"+";color:#e7e8eb;display:block;text-align:center}.sidebar--children-toggle.open:before{content:"–"}.sidebar--children-toggle:hover{background:#4591ed}.sidebar--children-toggle:hover:before{color:#fff}a.sidebar--page:active,a.sidebar--page:link,a.sidebar--page:visited{display:inline-block;color:#bec2cc;font-weight:500;text-indent:-1rem;line-height:1.25}a.sidebar--page:hover{color:#fff}@media (max-width:900px){.sidebar{height:auto;max-height:0}}@media (min-width:900px){.sidebar--toggle{display:none}.sidebar,.sidebar.open{position:fixed;z-index:100;width:18rem;-webkit-transform:none;transform:none;-webkit-transition:none;transition:none;top:4rem;max-height:100%;overflow:auto;padding-bottom:4rem}}@media (min-width:1200px){.sidebar,.sidebar.open{width:23rem}}@media (min-width:1900px){.sidebar,.sidebar.open{width:28rem}.sidebar--support-ad{padding:2rem 1.5rem}.sidebar--support-ad--desc{font-size:1.2em}}#sidebar--ad{margin:-.75rem 1rem;border-radius:3px}#sidebar--ad.cloud{background:linear-gradient(45deg,#9394ff,#22adf6);padding:1.5rem 1.5rem;text-align:center}#sidebar--ad.cloud .text{margin:0 0 1rem 0;color:#fff;line-height:1.3em;font-size:1.1em;font-weight:500}#sidebar--ad.cloud .cta{margin-left:0;margin-right:0;border-radius:3px;color:#fff;border:2px solid rgba(255,255,255,.4);background-color:transparent;-webkit-transition:background-color .25s ease,border-color .25s ease;transition:background-color .25s ease,border-color .25s ease;padding:.75em 1.5em;font-weight:700;display:inline-block;font-size:1.125em}#sidebar--ad.cloud .cta:hover{background-color:rgba(255,255,255,.15);border-color:rgba(255,255,255,.6)}#sidebar--ad.enterprise{background:-webkit-gradient(linear,left top, right top,from(#4ed8a0),to(#22adf6));background:linear-gradient(to right,#4ed8a0,#22adf6);padding:1.5rem 1.5rem;text-align:center}#sidebar--ad.enterprise .text{margin:0 0 1rem 0;color:#fff;line-height:1.3em;font-weight:500}#sidebar--ad.enterprise .cta{margin-left:0;margin-right:0;border-radius:3px;color:#fff;border:2px solid rgba(255,255,255,.4);background-color:transparent;-webkit-transition:background-color .25s ease,border-color .25s ease;transition:background-color .25s ease,border-color .25s ease;padding:.75em 1.5em;font-weight:700;display:inline-block;font-size:1.125em}#sidebar--ad.enterprise .cta:hover{background-color:rgba(255,255,255,.15);border-color:rgba(255,255,255,.6)}#sidebar--ad.influx-days{padding:1rem;background:url(/promos/assets/influx-days-bg.jpg);background-repeat:no-repeat;background-size:cover;color:#fff;font-weight:700}#sidebar--ad.influx-days img{margin:.4rem 0 .8rem}#sidebar--ad.influx-days .text{font-size:1.75rem;margin-bottom:.5rem}#sidebar--ad.influx-days .details{font-size:.9rem;line-height:1.1rem}#sidebar--ad.influx-days .cta{display:inline-block;margin-top:.85rem;color:#fff;background:#5cbb47;font-size:1.15rem;padding:.45rem 1.75rem;border-radius:3px}::-moz-selection{background-color:#757888;color:#fff}::selection{background-color:#757888;color:#fff}::-moz-selection{background-color:#757888;color:#fff}a{text-decoration:none;-webkit-transition:color .2s ease;transition:color .2s ease}a:hover{cursor:pointer}.article{background-color:#202028;overflow:auto;width:100%}.article::-webkit-scrollbar{background-color:#202028;width:16px}.article::-webkit-scrollbar-track{background-color:#202028}.article::-webkit-scrollbar-thumb{border:4px solid #202028;background-color:#676978;border-radius:8px}.article-section{display:block;width:100%;text-align:center;padding:2rem}.article-section.article-heading{background-color:#2c2c38;background-position:center center;background-size:cover!important;background-repeat:no-repeat}.article-section.article-heading h1{margin-bottom:0}.article-section.article-footer{background:#292933;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #292933),to(#202028));background:linear-gradient(to bottom,#292933 0,#202028 100%)}.article-content{text-align:left;width:100%;max-width:760px;color:#bec2cc}.article-content a:active,.article-content a:link,.article-content a:visited{font-weight:700;color:#4591ed}.article-content a:hover{color:#00c9ff;cursor:pointer}.article-content a.top{font-size:6px;padding:.25rem .25rem .35rem;border-radius:3px;-webkit-transition:all .2s;transition:all .2s}.article-content a.top:hover{color:#202028!important;background:#00c9ff}.article-content a.off-page:link:after{content:'\ea43';font-family:icomoon;font-size:.75em;font-weight:400;vertical-align:bottom;display:inline;margin-left:.5em;opacity:.25;-webkit-transition:color .2s ease;transition:color .2s ease;color:#bec2cc}.article-content li a code,.article-content p a code{position:relative}.article-content li a code:after,.article-content p a code:after{content:"";position:absolute;top:-1px;right:-1px;width:0;height:0;border-style:solid;border-width:0 .5em .5em 0;border-color:transparent #b1b6ff transparent transparent;opacity:.5;-webkit-transition:all .2s;transition:all .2s}.article-content li a code:hover:after,.article-content p a code:hover:after{opacity:1;border-color:transparent #00c9ff transparent transparent}.article-content li a.btn,.article-content p a.btn{display:inline-block;color:#fff;font-size:.95rem;padding:.5em 1em;margin:1em 0 1.5em}.article-content li a.btn.download:before,.article-content p a.btn.download:before{content:'\e964';font-family:icomoon;font-size:1.15em;font-weight:400;vertical-align:bottom;display:inline;margin-right:.5em}.article-content>*{text-decoration:none}.article-content .note,.article-content .warn,.article-content blockquote,.article-content dt,.article-content h1,.article-content h2,.article-content h3,.article-content h4,.article-content li,.article-content ol,.article-content p,.article-content pre,.article-content ul{display:block;margin-bottom:1em;line-height:1.45em}.article-content table{margin:1em 0 1em;overflow-x:auto;background-color:#202028}.article-content h1,.article-content h2,.article-content h3,.article-content h4,.article-content h5,.article-content h6{width:100%;color:#f6f6f8}.article-content h1 a.offset-anchor,.article-content h2 a.offset-anchor,.article-content h3 a.offset-anchor,.article-content h4 a.offset-anchor,.article-content h5 a.offset-anchor,.article-content h6 a.offset-anchor{display:block;position:relative;top:-120px;visibility:hidden}.article-content h1 a:active,.article-content h1 a:hover,.article-content h1 a:link,.article-content h1 a:visited,.article-content h2 a:active,.article-content h2 a:hover,.article-content h2 a:link,.article-content h2 a:visited,.article-content h3 a:active,.article-content h3 a:hover,.article-content h3 a:link,.article-content h3 a:visited,.article-content h4 a:active,.article-content h4 a:hover,.article-content h4 a:link,.article-content h4 a:visited,.article-content h5 a:active,.article-content h5 a:hover,.article-content h5 a:link,.article-content h5 a:visited,.article-content h6 a:active,.article-content h6 a:hover,.article-content h6 a:link,.article-content h6 a:visited{text-decoration:none;font-weight:inherit;color:#f6f6f8!important}.article-content h1:first-child,.article-content h2:first-child,.article-content h3:first-child,.article-content h4:first-child,.article-content h5:first-child,.article-content h6:first-child{margin-top:0}.article-content h1{font-size:2.2em;font-family:Klavika-Light,'Helvetica Neue',Helvetica,Helvetica,Arial,Tahoma,Verdana,sans-serif;font-weight:200;line-height:1.2em}.article-content h2{font-size:1.9em;font-weight:600;margin:1.5em 0 .5em}.article-content h3{font-size:1.5em;font-weight:700;margin:1em 0 .5em}.article-content h4{font-size:1.3em;font-weight:400;font-style:italic;margin:1.25em 0 .5em}.article-content h5{line-height:1.6em}.article-content h6{font-size:.95em;font-style:italic;line-height:1.6em}.article-content.section-landing h2 a.off-page:link:hover{color:#4591ed!important}.article-content p{font-size:1em}.article-content ol,.article-content ul{font-size:1em;padding-left:1.125em}.article-content ol li,.article-content ul li{display:list-item;list-style-position:outside;padding-left:.5em;margin-bottom:.25em}.article-content ol p,.article-content ul p{margin-left:0}.article-content ul>li{list-style-type:disc!important}.article-content ol li,.article-content ul ol li{list-style-type:decimal}.article-content ol ol li{list-style-type:lower-alpha}.article-content ol ol ol li{list-style-type:decimal}.article-content ul ul ul li{list-style-type:square}.article-content li:last-child{margin-bottom:0}.article-content ol ol,.article-content ol ul,.article-content ul ol,.article-content ul ul{width:100%;margin-left:0;margin-bottom:0;margin-top:.25em}.article-content hr{width:100%;height:2px;margin-top:.25em;margin-bottom:1em;border:none;display:block;background-color:#2c2c38}.article-content img{max-width:100%;height:auto;border-radius:3px}.article-content td,.article-content th{border:1px solid #2c2c38;font-size:.875em;line-height:1.2em;padding:.75em 1.5em}.article-content tr:nth-child(even){background-color:#1c1c21}.article-content thead tr{background-color:#292933!important}.article-content thead th{padding:1.25em 1.5em}.article-content .note,.article-content .warn,.article-content blockquote,.article-content dt{font-size:.9em;padding:1em 1.5em;border-radius:3px;border-style:solid;border-left-width:6px}.article-content .note h4,.article-content .note ol,.article-content .note p,.article-content .note pre,.article-content .note ul,.article-content .warn h4,.article-content .warn ol,.article-content .warn p,.article-content .warn pre,.article-content .warn ul,.article-content blockquote h4,.article-content blockquote ol,.article-content blockquote p,.article-content blockquote pre,.article-content blockquote ul,.article-content dt h4,.article-content dt ol,.article-content dt p,.article-content dt pre,.article-content dt ul{width:100%;margin-left:0}.article-content .note>:last-child,.article-content .warn>:last-child,.article-content blockquote>:last-child,.article-content dt>:last-child{margin-bottom:0}.article-content .note .tooltip,.article-content .warn .tooltip,.article-content blockquote .tooltip,.article-content dt .tooltip{color:#fff}.article-content .note,.article-content blockquote{font-style:italic;color:#4ed8a0;border-color:#4ed8a0;background-color:#292933}.article-content .note code,.article-content blockquote code{color:#b1b6ff;background:#1c1c21;border:1px solid #3c4b4c}.article-content .note pre,.article-content blockquote pre{background:#1c1c21;border-color:#3c4b4c}.article-content .note pre code,.article-content blockquote pre code{border:none}.article-content .warn,.article-content dt{color:#ff8564;border-color:#ff8564;background-color:#292933}.article-content .warn code,.article-content dt code{color:#b1b6ff;background:#1c1c21;border:1px solid #673c2c}.article-content .warn pre,.article-content dt pre{background:#1c1c21;border-color:#673c2c}.article-content .warn pre code,.article-content dt pre code{border:none}.article-content code{font-family:Consolas,"Lucida Console",Monaco,monospace;-moz-tab-size:1;-o-tab-size:1;tab-size:1;direction:ltr;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none;font-size:.8em!important;font-style:normal!important;display:inline;border-radius:3px;border-width:1px;border-color:#2c2c38;border-style:solid;padding:.1em .5em;-webkit-font-smoothing:subpixel-antialiased!important;-moz-osx-font-smoothing:auto!important;font-weight:400!important;color:#b1b6ff;background-color:#1c1c21}.article-content pre{display:block;padding:.75em 1em;overflow:auto;border-radius:3px;border-style:solid;border-width:1px 1px 1px 6px;background-color:#1c1c21;border-color:#2c2c38;z-index:99;line-height:1.1em!important}.article-content pre code{white-space:pre;word-spacing:normal;word-break:normal;border:none;padding:0;border-radius:0;background-color:transparent}.article-content pre::-webkit-scrollbar{background-color:#1c1c21;width:16px}.article-content pre::-webkit-scrollbar-track{background-color:#1c1c21}.article-content pre::-webkit-scrollbar-thumb{border:4px solid #1c1c21;background-color:#2c2c38;border-radius:calc(16px / 2)}.page-nav-btns{display:-webkit-box;display:-ms-flexbox;display:flex;position:relative;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin:3em 0 2em}.page-nav-btns a{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#fff!important;font-size:.95rem;padding:.75rem 1rem;margin:0 .15rem}.page-nav-btns a.prev{position:absolute;left:0}.page-nav-btns a.prev:before{content:'\e804';font-family:icomoon;font-size:.85rem;font-weight:400;vertical-align:middle;display:inline;margin-right:.85rem}.page-nav-btns a.next{position:absolute;right:0}.page-nav-btns a.next:after{content:'\e805';font-family:icomoon;font-size:.85rem;font-weight:400;vertical-align:middle;display:inline;margin-left:.85rem}.truncate{position:relative;margin-bottom:3.5rem}.truncate .truncate-bottom{position:absolute;bottom:-30px;width:100%;z-index:100%;height:auto}.truncate a.truncate-toggle{display:block;width:100px;margin:0 auto;color:#bec2cc;background:#202028;padding:.45rem;text-align:center;font-size:.75rem;text-transform:uppercase;border-radius:3px;-webkit-transition:color .2s;transition:color .2s}.truncate a.truncate-toggle:before{content:"Show Less"}.truncate a.truncate-toggle:hover{color:#4591ed}.truncate.closed{min-height:200px;max-height:25vh;overflow:hidden}.truncate.closed .truncate-bottom{bottom:0;background-image:-webkit-gradient(linear,left top, left bottom,from(rgba(32,32,40,0)),to(#202028));background-image:linear-gradient(to bottom,rgba(32,32,40,0),#202028);height:100px}.truncate.closed a.truncate-toggle{margin-top:75px}.truncate.closed a.truncate-toggle:before{content:"Show More"}.tooltip{position:relative;display:inline-block;z-index:10;font-weight:900;color:#32b08c}.tooltip-container{position:absolute;top:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);overflow:visible;visibility:hidden}.tooltip-text{font-weight:600;line-height:2em;height:2em;position:absolute;border-radius:3px;padding:0 .75em;font-size:.9rem;left:50%;-webkit-transform:translate(-50%,-1.875rem);transform:translate(-50%,-1.875rem);-webkit-transition:all .2s ease;transition:all .2s ease;white-space:nowrap;opacity:0;font-style:normal!important;color:#434453;background-color:#f6f6f8}.tooltip-text:after{content:'';position:absolute;left:50%;bottom:-14px;-webkit-transform:translateX(-50%);transform:translateX(-50%);border-top:8px solid #f6f6f8;border-right:8px solid transparent;border-bottom:8px solid transparent;border-left:8px solid transparent}.tooltip:hover .tooltip-container{visibility:visible}.tooltip:hover .tooltip-text{opacity:1;-webkit-transform:translate(-50%,-2rem);transform:translate(-50%,-2rem)}.old-version{width:100%;display:inline-block;border-radius:3px;font-size:1em;line-height:1.25em;padding:1.5em 1.5em 1.5em 4em;color:#ff8564;background-color:#292933;position:relative;margin-bottom:1em}.old-version:after{content:"\ea0a";font-family:icomoon;position:absolute;top:50%;left:2em;-webkit-transform:translate(-50%,-50%) scale(1.5,1.5);transform:translate(-50%,-50%) scale(1.5,1.5);font-size:1em}.section-landing h2.no-paragraph{margin:0 0 1rem;border:none}.view-in-chronograf{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;position:relative;background-color:#2c2c38;margin-top:-1.1rem;margin-bottom:1rem;padding:.15rem;font-size:.8rem;border-radius:0 0 3px 3px;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.view-in-chronograf .chronograf-btn{display:inline-block;padding:.45rem .6rem;color:#fff!important;background:-webkit-gradient(linear,right top, left top,from(#9394ff),to(#22adf6));background:linear-gradient(to left,#9394ff,#22adf6);border-radius:calc(3px / 2);-webkit-transition:all .5s ease;transition:all .5s ease}.view-in-chronograf .chronograf-btn:after{content:'\e801';margin-left:.4rem;font-family:icomoon}.view-in-chronograf .chronograf-btn:hover{color:#fff!important;opacity:1}.view-in-chronograf .settings{opacity:.25;color:#bec2cc!important;margin-right:.75em;-webkit-transition:opacity .2s ease;transition:opacity .2s ease}.view-in-chronograf .settings:hover{opacity:1}.modal-overlay{display:none;position:fixed;z-index:1000;left:0;top:0;width:100%;height:100%;overflow:auto;opacity:.75;background:-webkit-gradient(linear,left top, left bottom,from(#9394ff),to(#4591ed));background:linear-gradient(#9394ff,#4591ed)}.modal-content{display:none;background:#202028;padding:2rem 2rem 1.5rem;border-radius:3px;position:fixed;top:10vh;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);z-index:1001;width:90vw;max-width:38rem;-webkit-transition:top .4s ease;transition:top .4s ease}.modal-content.open{top:40vh}.modal-content input{width:100%;min-width:10rem;border-radius:3px;border:2px solid #383846;background-color:#383846;padding:.5rem;font-weight:400;font-size:1rem;outline:0;-webkit-transition:border-color .3s ease,color .3s ease;transition:border-color .3s ease,color .3s ease}.modal-content input:focus{border-color:#22adf6}.modal-content button{border:none;outline:0}.modal-content button:focus{background:#4591ed!important}.modal-content label{display:block;margin-bottom:.4rem;font-weight:600}#default-chronograf-url{display:inline-block;margin:.5rem 0 0 .25rem;font-size:.8rem;font-style:italic;font-weight:400}#default-chronograf-url:hover{text-transform:underline}.flex-form{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.flex-form .save-btn{width:5.5rem;margin:0 0 0 .25rem;text-align:center;padding:.75rem 1rem;color:#fff;border-radius:3px;font-weight:600;-webkit-transition:background .2s;transition:background .2s}@media (max-width:500px){.flex-form{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column;flex-flow:column}.flex-form .save-btn{width:100%;margin:.25rem 0 0}#default-chronograf-url{display:block;margin:1rem auto 0}}#save-chronograf-url button{background:#9394ff}#save-chronograf-url button:hover{background:#4591ed}@media (min-width:900px){.article{padding-left:18rem}.article-section{padding:3rem}.article-content code,.article-content pre,.article-content td,.article-content th{border-width:2px}.article-content pre{border-left-width:6px}}@media (min-width:1200px){.article{padding-left:23rem}.article-section{padding:4.5rem}.old-version{width:60%}}@media (min-width:1900px){.article{padding-left:28rem}.article-section{padding:5rem 11rem}.article-content{font-size:1.125rem}}.homepage{overflow:auto;min-height:calc(100vh - 4rem);width:100%;z-index:2;background:#2c2c38;background:-webkit-gradient(linear,left top, right top,color-stop(0, #2c2c38),to(#0f0e15));background:linear-gradient(to right,#2c2c38 0,#0f0e15 100%);font-size:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.homepage .cards-enterprise,.homepage .cards-oss,.homepage .cards-special{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;width:100%;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-flex:1;-ms-flex:1;flex:1}.homepage--card{width:100%;display:inline-block;overflow:hidden;position:relative}.homepage--card-mask{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.1;-webkit-transition:opacity .75s ease,-webkit-transform .75s ease;transition:opacity .75s ease,-webkit-transform .75s ease;transition:opacity .75s ease,transform .75s ease;transition:opacity .75s ease,transform .75s ease,-webkit-transform .75s ease;z-index:1;background-attachment:scroll;background-size:cover;background-position:center center;background-repeat:no-repeat;-webkit-transform:scale(1,1);transform:scale(1,1)}.homepage--card:hover .homepage--card-mask{opacity:1;-webkit-transform:scale(1.2,1.2);transform:scale(1.2,1.2)}.homepage--card:hover .homepage--card-title{color:#fff!important}.homepage--card-container{position:relative;z-index:2;width:100%;display:inline-block;text-align:center;padding:4rem 3rem;font-size:0}.homepage--card-container a:active,.homepage--card-container a:link,.homepage--card-container a:visited{color:#4591ed;-webkit-transition:color .25s ease;transition:color .25s ease;text-decoration:none}.homepage--card-container a:hover{color:#00c9ff}.homepage--card-description,.homepage--card-title{text-align:left;display:inline-block;width:100%;vertical-align:middle}.homepage--card-title{font-size:2rem;font-family:Klavika-Light,sans-serif;font-weight:200;font-style:italic;color:#4591ed;margin-bottom:.5em;-webkit-transition:color .75s ease;transition:color .75s ease}.homepage--card-description{font-size:1rem;color:#bec2cc;line-height:1.4em;font-weight:400}.homepage--card-link{display:inline-block;font-size:.875rem;font-weight:600;margin-left:.25rem;padding:2px 11px;border-radius:3px}.homepage--card-link:first-of-type{margin-top:1rem}.homepage--card.card-telegraf .homepage--card-mask{background-image:url(/img/home-telegraf.svg);background-color:#f95f53}.homepage--card.card-telegraf .homepage--card-description{color:#fff}.homepage--card.card-telegraf .homepage--card-title{color:#ff8564}.homepage--card.card-telegraf a.homepage--card-link:active,.homepage--card.card-telegraf a.homepage--card-link:link,.homepage--card.card-telegraf a.homepage--card-link:visited{color:#fff;-webkit-transition:background-color .25s ease,color .25s ease;transition:background-color .25s ease,color .25s ease}.homepage--card.card-telegraf a.homepage--card-link:hover{color:#ff8564;background-color:#fff}.homepage--card.card-influxdb .homepage--card-mask{background-image:url(/img/home-influxdb.svg);background-color:#4591ed}.homepage--card.card-influxdb .homepage--card-description{color:#fff}.homepage--card.card-influxdb .homepage--card-title{color:#00c9ff}.homepage--card.card-influxdb a.homepage--card-link:active,.homepage--card.card-influxdb a.homepage--card-link:link,.homepage--card.card-influxdb a.homepage--card-link:visited{color:#fff;-webkit-transition:background-color .25s ease,color .25s ease;transition:background-color .25s ease,color .25s ease}.homepage--card.card-influxdb a.homepage--card-link:hover{color:#22adf6;background-color:#fff}.homepage--card.card-chronograf .homepage--card-mask{background-image:url(/img/home-chronograf.svg);background-color:#7a65f2}.homepage--card.card-chronograf .homepage--card-description{color:#fff}.homepage--card.card-chronograf .homepage--card-title{color:#9394ff}.homepage--card.card-chronograf a.homepage--card-link:active,.homepage--card.card-chronograf a.homepage--card-link:link,.homepage--card.card-chronograf a.homepage--card-link:visited{color:#fff;-webkit-transition:background-color .25s ease,color .25s ease;transition:background-color .25s ease,color .25s ease}.homepage--card.card-chronograf a.homepage--card-link:hover{color:#9394ff;background-color:#fff}.homepage--card.card-kapacitor .homepage--card-mask{background-image:url(/img/home-kapacitor.svg);background-color:#4ed8a0}.homepage--card.card-kapacitor .homepage--card-description{color:#fff}.homepage--card.card-kapacitor .homepage--card-title{color:#4ed8a0}.homepage--card.card-kapacitor a.homepage--card-link:active,.homepage--card.card-kapacitor a.homepage--card-link:link,.homepage--card.card-kapacitor a.homepage--card-link:visited{color:#fff;-webkit-transition:background-color .25s ease,color .25s ease;transition:background-color .25s ease,color .25s ease}.homepage--card.card-kapacitor a.homepage--card-link:hover{color:#4ed8a0;background-color:#fff}.homepage--card.card-enterprise_kapacitor .homepage--card-mask{background-image:url(/img/home-kapacitor.svg);background-color:#4ed8a0}.homepage--card.card-enterprise_kapacitor .homepage--card-description{color:#fff}.homepage--card.card-enterprise_kapacitor .homepage--card-title{color:#4ed8a0}.homepage--card.card-enterprise_kapacitor a.homepage--card-link:active,.homepage--card.card-enterprise_kapacitor a.homepage--card-link:link,.homepage--card.card-enterprise_kapacitor a.homepage--card-link:visited{color:#fff;-webkit-transition:background-color .25s ease,color .25s ease;transition:background-color .25s ease,color .25s ease}.homepage--card.card-enterprise_kapacitor a.homepage--card-link:hover{color:#4ed8a0;background-color:#fff}.homepage--card.card-enterprise_influxdb .homepage--card-mask{background-image:url(/img/home-influxdb.svg);background-color:#4591ed}.homepage--card.card-enterprise_influxdb .homepage--card-description{color:#fff}.homepage--card.card-enterprise_influxdb .homepage--card-title{color:#00c9ff}.homepage--card.card-enterprise_influxdb a.homepage--card-link:active,.homepage--card.card-enterprise_influxdb a.homepage--card-link:link,.homepage--card.card-enterprise_influxdb a.homepage--card-link:visited{color:#fff;-webkit-transition:background-color .25s ease,color .25s ease;transition:background-color .25s ease,color .25s ease}.homepage--card.card-enterprise_influxdb a.homepage--card-link:hover{color:#22adf6;background-color:#fff}.homepage--card.card-flux .homepage--card-mask{background-image:url(/img/home-flux.svg);background-color:#15a194;opacity:1}.homepage--card.card-flux .homepage--card-description{color:#fff}.homepage--card.card-flux .homepage--card-title{color:#fff}.homepage--card.card-flux a.homepage--card-link:active,.homepage--card.card-flux a.homepage--card-link:link,.homepage--card.card-flux a.homepage--card-link:visited{color:#fff;-webkit-transition:background-color .25s ease,color .25s ease;transition:background-color .25s ease,color .25s ease}.homepage--card.card-flux a.homepage--card-link:active.download,.homepage--card.card-flux a.homepage--card-link:link.download,.homepage--card.card-flux a.homepage--card-link:visited.download{display:none}.homepage--card.card-flux a.homepage--card-link:hover{color:#32b08c;background-color:#fff}.homepage--card.card-platform{width:100%;background:-webkit-gradient(linear,left top, right top,from(#4591ed),to(#22adf6));background:linear-gradient(to right,#4591ed,#22adf6);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.homepage--card.card-platform .homepage--card-container{padding-bottom:3rem}.homepage--card.card-platform .homepage--card-mask{background-image:url(/img/home-influxdb.svg);background-color:#4591ed;opacity:.9}.homepage--card.card-platform .homepage--card-description{color:#fff;text-align:center}.homepage--card.card-platform .homepage--card-title{color:#fff;text-align:center;font-size:2.15rem}.homepage--card.card-platform a.homepage--card-link:active,.homepage--card.card-platform a.homepage--card-link:link,.homepage--card.card-platform a.homepage--card-link:visited{color:#fff;-webkit-transition:background-color .25s ease,color .25s ease;transition:background-color .25s ease,color .25s ease}.homepage--card.card-platform a.homepage--card-link:hover{color:#22adf6;background-color:#fff}.homepage--card.card-platform a.btn{margin:1.75rem 0 1rem;padding:1em 1.5em;display:inline-block;background:#fff;color:#22adf6;border-radius:3px;font-size:1rem;font-weight:700;-webkit-transition:all .2s;transition:all .2s;-webkit-box-shadow:0 0 15px rgba(255,255,255,0);box-shadow:0 0 15px rgba(255,255,255,0)}.homepage--card.card-platform a.btn:hover{-webkit-box-shadow:0 0 15px #fff;box-shadow:0 0 15px #fff}@media (min-width:900px){.homepage--card{width:50%;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}}@media (min-width:1200px){.homepage--card-container{padding:3.5rem}.homepage--card-description{font-size:1.075rem}.homepage--card{width:25%;height:auto}.homepage--card.card-platform{width:75%}.homepage--card.card-enterprise_influxdb,.homepage--card.card-enterprise_kapacitor{width:50%}}@media (min-width:1900px){.homepage--card-container{padding:4rem}.homepage--card-description{font-size:1.125rem}}.error-page{overflow:scroll;top:4rem;height:100%;width:100%;background:#fafafc;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #fafafc),to(#f0fcff));background:linear-gradient(to bottom,#fafafc 0,#f0fcff 100%)}.error-content{margin:15vh auto;width:85%;max-width:400px;min-width:240px;font-size:15px;line-height:19px;color:#676978}.error-content h1{color:#4591ed;display:block;margin:0 auto 50px;padding-top:15px;width:212px;height:212px;border-radius:50%;text-align:center;font-size:90px;font-weight:200;line-height:180px;position:relative;border:2px solid #4591ed}.flex{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-pack:distribute;justify-content:space-around}.wayfinding{margin-bottom:2rem}.btn{display:block;padding:.5rem;background:#4591ed;color:#fff;border-radius:3px;text-align:center;-webkit-transition:background .2s;transition:background .2s}.btn.back{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;margin-right:.35rem}.btn.back:before{content:"\ea41";font-family:icomoon;margin-right:.5rem;font-size:1rem}.btn.project{-webkit-box-flex:3;-ms-flex-positive:3;flex-grow:3;display:none}.btn.project:before{content:"\e801";font-family:icomoon;margin-right:.5rem;-webkit-box-flex:3;-ms-flex-positive:3;flex-grow:3}.btn:hover{background:#22adf6}@media (min-width:900px){.error-content{font-size:17px;line-height:22px}}@media (min-width:1900px){.error-content{font-size:21px;line-height:32px}}.tabs-container{margin:2em 0 2em}.tabs{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;border-radius:3px 0 0 3px}.tabs p{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.tabs a{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;margin:2px;font-size:.875em;color:#bec2cc!important;padding:.5em 1em;display:inline-block;text-align:center;border-radius:3px;background-color:rgba(56,56,70,.5);-webkit-transition:background-color .2s,color .2s;transition:background-color .2s,color .2s}.tabs a:hover{color:#f6f6f8!important}.tabs a.is-active{color:#fff!important;background:#4591ed}.tab-content{width:100%}.tab-content>*{width:100%!important;margin-left:0!important}.tab-content:not(:first-child){display:none}.tab-content-container{position:relative;border-radius:0 3px 3px 3px}.code-tabs-content{margin:.75rem 0 3rem;width:100%}.code-tabs-content>*{width:100%!important;margin-left:0!important}.code-tabs-wrapper{margin:1.5rem 0 .5rem}.code-tabs-wrapper .code-tabs p{margin:0;text-align:right;display:block;font-size:.9rem}.code-tabs-wrapper .code-tabs a{padding:.25rem .75rem;margin:0;border-radius:3px 3px 0 0;display:inline-block;background:rgba(44,44,56,.6);color:rgba(190,194,204,.5)!important}.code-tabs-wrapper .code-tabs a:hover{color:#f6f6f8!important}.code-tabs-wrapper .code-tabs a.is-active{background-color:#2c2c38;color:#f6f6f8!important}.code-tabs-wrapper .code-tab-content{padding:0}.code-tabs-wrapper .code-tab-content pre{margin:0 0 3rem;border-radius:3px 0 3px 3px}.code-tabs-wrapper .code-tab-content:not(:first-of-type){display:none}@media (min-width:900px){.tabs-container .tabs a{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0}}.plugin-card{position:relative;padding:1rem 1.5rem;margin-bottom:.5rem;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#1c1c21;border-radius:3px}.plugin-card h3{padding:0;margin-top:.25rem}.plugin-card.new h3:after{content:"New";margin-left:.3rem;padding:.25rem .5rem;font-style:italic;color:#4591ed;font-size:1.2rem}.plugin-card p.meta{margin:.75rem 0;font-weight:500;color:#bec2cc;line-height:1.75rem}.plugin-card p.meta .deprecated{margin-left:.5rem;font-style:italic;color:#e90}.plugin-card .info>p:last-child{margin-bottom:.5rem}.plugin-card .info>ul:last-child{margin-bottom:.5rem}.plugin-card .info>ol:last-child{margin-bottom:.5rem}.plugin-card .github-link{position:absolute;color:#fff!important;top:.5rem;right:.5rem;opacity:0;-webkit-transition:opacity .2s,background .2s,color 2s;transition:opacity .2s,background .2s,color 2s}.plugin-card .github-link .icon-github{font-size:1.2rem;margin:0 .25rem 0 0}.plugin-card:hover .github-link{opacity:1}.plugin-card blockquote{border-color:#4ed8a0;background:rgba(41,41,51,.5)}.plugin-card blockquote h3,.plugin-card blockquote h4,.plugin-card blockquote h5,.plugin-card blockquote h6{color:#f6f6f8}.plugin-card blockquote li,.plugin-card blockquote p{color:#4ed8a0;font-size:1rem;font-style:normal}.plugin-card blockquote strong{color:inherit}.plugin-card blockquote a{color:#ff8564}.plugin-card blockquote a code:after{border-color:transparent rgba(177,182,255,.35) transparent transparent}.plugin-card blockquote a:hover{color:#fff}.plugin-card blockquote a:hover code:after{border-color:transparent #fff transparent transparent}.plugin-card blockquote ol li:before{color:#4ed8a0}.plugin-card blockquote code,.plugin-card blockquote pre{color:#b1b6ff;background:#1c1c21}#plugin-filters{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}#plugin-filters .filter-category{-webkit-box-flex:1;-ms-flex:1 1 200px;flex:1 1 200px;margin:0 1.25rem 1.25rem 0;max-width:33%}#plugin-filters .filter-category.two-columns{-webkit-box-flex:1;-ms-flex:1 2 400px;flex:1 2 400px;max-width:66%}#plugin-filters .filter-category.two-columns .filter-list{-webkit-columns:2;columns:2}#plugin-filters h5{border-bottom:1px solid rgba(190,194,204,.25);padding-bottom:.65rem}#plugin-filters .filter-list{padding:0;margin:.5rem 0 0;list-style:none}#plugin-filters .filter-list li{padding:0;margin:0;line-height:1.35rem;list-style-type:none!important}#plugin-filters label{display:block;padding:.25rem 0;color:#bec2cc;position:relative}#plugin-filters label:after{content:attr(data-count);margin-left:.25rem;font-size:.85rem;opacity:.5}#plugin-filters .checkbox{display:inline-block;height:1.15em;width:1.15em;background:rgba(190,194,204,.05);margin-right:.3rem;vertical-align:text-top;border-radius:3px;cursor:pointer;border:1.5px solid rgba(190,194,204,.2);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#plugin-filters input[type=checkbox]{margin-right:-1.1rem;padding:0;vertical-align:top;opacity:0;cursor:pointer}#plugin-filters input[type=checkbox]+.checkbox:after{content:"";display:block;position:absolute;height:.5rem;width:.5rem;border-radius:50%;background:#ff8564;top:.65rem;left:.35rem;opacity:0;-webkit-transform:scale(2);transform:scale(2);-webkit-transition:all .2s;transition:all .2s}#plugin-filters input[type=checkbox]:checked+.checkbox:after{opacity:1;-webkit-transform:scale(1);transform:scale(1)}@media (max-width:1100px){#plugin-filters .filter-category{max-width:50%}#plugin-filters .filter-category.three-columns,#plugin-filters .filter-category.two-columns{max-width:100%}}@media (max-width:800px){#plugin-filters .filter-category{max-width:100%}.plugin-card .github-link{opacity:1;padding:.25rem .35rem .35rem;line-height:0;font-size:1.35rem}.plugin-card .github-link .icon-github{margin:0}.plugin-card .github-link .hide{display:none}}@media (min-width:900px){body{padding-bottom:0}}body.docs-theme--telegraf .article-content a:active,body.docs-theme--telegraf .article-content a:link,body.docs-theme--telegraf .article-content a:visited{color:#ff8564}body.docs-theme--telegraf .article-content a:hover{color:#fff}body.docs-theme--telegraf .article-content a.top:hover{background:#fff}body.docs-theme--telegraf .article-content a.btn{background:#ff8564}body.docs-theme--telegraf .article-content a.btn:hover{background:#ffb6a0}body.docs-theme--telegraf .article-content.section-landing h2 a.off-page:link:hover{color:#ff8564!important}body.docs-theme--telegraf .sidebar--mask-container .sidebar--mask{background:#ff8564;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #ff8564),to(#7a65f2));background:linear-gradient(to bottom,#ff8564 0,#7a65f2 100%)}body.docs-theme--telegraf .sidebar--section-title a:active,body.docs-theme--telegraf .sidebar--section-title a:link,body.docs-theme--telegraf .sidebar--section-title a:visited{color:#ff8564;font-weight:400}body.docs-theme--telegraf .sidebar--section-title a:hover{color:#fff}body.docs-theme--telegraf a.sidebar--page:hover{color:#fff}body.docs-theme--telegraf .navbar--product-dropdown{background-color:#ff8564}body.docs-theme--telegraf .navbar--product-dropdown:hover{background-color:#ffb6a0}body.docs-theme--telegraf .navbar--product-menu{background:#ff8564;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #ff8564),to(#7a65f2));background:linear-gradient(to bottom,#ff8564 0,#7a65f2 100%)}body.docs-theme--telegraf .tabs a.is-active{background:#ff8564}body.docs-theme--chronograf .article-content a:active,body.docs-theme--chronograf .article-content a:link,body.docs-theme--chronograf .article-content a:visited{color:#9394ff}body.docs-theme--chronograf .article-content a:hover{color:#fff}body.docs-theme--chronograf .article-content a.top:hover{background:#fff}body.docs-theme--chronograf .article-content a.btn{background:#9394ff}body.docs-theme--chronograf .article-content a.btn:hover{background:#b1b6ff}body.docs-theme--chronograf .article-content.section-landing h2 a.off-page:link:hover{color:#9394ff!important}body.docs-theme--chronograf .sidebar--mask-container .sidebar--mask{background:#9394ff;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #9394ff),to(#4591ed));background:linear-gradient(to bottom,#9394ff 0,#4591ed 100%)}body.docs-theme--chronograf .sidebar--section-title a:active,body.docs-theme--chronograf .sidebar--section-title a:link,body.docs-theme--chronograf .sidebar--section-title a:visited{color:#9394ff;font-weight:400}body.docs-theme--chronograf .sidebar--section-title a:hover{color:#fff}body.docs-theme--chronograf a.sidebar--page:hover{color:#fff}body.docs-theme--chronograf .navbar--product-dropdown{background-color:#9394ff}body.docs-theme--chronograf .navbar--product-dropdown:hover{background-color:#b1b6ff}body.docs-theme--chronograf .navbar--product-menu{background:#9394ff;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #9394ff),to(#4591ed));background:linear-gradient(to bottom,#9394ff 0,#4591ed 100%)}body.docs-theme--chronograf .tabs a.is-active{background:#9394ff}body.docs-theme--kapacitor .article-content a:active,body.docs-theme--kapacitor .article-content a:link,body.docs-theme--kapacitor .article-content a:visited{color:#4ed8a0}body.docs-theme--kapacitor .article-content a:hover{color:#fff}body.docs-theme--kapacitor .article-content a.top:hover{background:#fff}body.docs-theme--kapacitor .article-content a.btn{background:#20b76f}body.docs-theme--kapacitor .article-content a.btn:hover{background:#4ed8a0}body.docs-theme--kapacitor .article-content.section-landing h2 a.off-page:link:hover{color:#4ed8a0!important}body.docs-theme--kapacitor .sidebar--mask-container .sidebar--mask{background:#4ed8a0;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #4ed8a0),to(#22adf6));background:linear-gradient(to bottom,#4ed8a0 0,#22adf6 100%)}body.docs-theme--kapacitor .sidebar--section-title a:active,body.docs-theme--kapacitor .sidebar--section-title a:link,body.docs-theme--kapacitor .sidebar--section-title a:visited{color:#4ed8a0;font-weight:400}body.docs-theme--kapacitor .sidebar--section-title a:hover{color:#fff}body.docs-theme--kapacitor a.sidebar--page:hover{color:#fff}body.docs-theme--kapacitor .navbar--product-dropdown{background-color:#4ed8a0}body.docs-theme--kapacitor .navbar--product-dropdown:hover{background-color:#7ce490}body.docs-theme--kapacitor .navbar--product-menu{background:#4ed8a0;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #4ed8a0),to(#22adf6));background:linear-gradient(to bottom,#4ed8a0 0,#22adf6 100%)}body.docs-theme--kapacitor .tabs a.is-active{background:#4ed8a0}body.docs-theme--enterprise_kapacitor .article-content a:active,body.docs-theme--enterprise_kapacitor .article-content a:link,body.docs-theme--enterprise_kapacitor .article-content a:visited{color:#4ed8a0}body.docs-theme--enterprise_kapacitor .article-content a:hover{color:#fff}body.docs-theme--enterprise_kapacitor .article-content a.top:hover{background:#fff}body.docs-theme--enterprise_kapacitor .article-content a.btn{background:#20b76f}body.docs-theme--enterprise_kapacitor .article-content a.btn:hover{background:#4ed8a0}body.docs-theme--enterprise_kapacitor .article-content.section-landing h2 a.off-page:link:hover{color:#4ed8a0!important}body.docs-theme--enterprise_kapacitor .sidebar--mask-container .sidebar--mask{background:#4ed8a0;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #4ed8a0),to(#22adf6));background:linear-gradient(to bottom,#4ed8a0 0,#22adf6 100%)}body.docs-theme--enterprise_kapacitor .sidebar--section-title a:active,body.docs-theme--enterprise_kapacitor .sidebar--section-title a:link,body.docs-theme--enterprise_kapacitor .sidebar--section-title a:visited{color:#4ed8a0;font-weight:400}body.docs-theme--enterprise_kapacitor .sidebar--section-title a:hover{color:#fff}body.docs-theme--enterprise_kapacitor a.sidebar--page:hover{color:#fff}body.docs-theme--enterprise_kapacitor .navbar--product-dropdown{background-color:#4ed8a0}body.docs-theme--enterprise_kapacitor .navbar--product-dropdown:hover{background-color:#7ce490}body.docs-theme--enterprise_kapacitor .navbar--product-menu{background:#4ed8a0;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #4ed8a0),to(#22adf6));background:linear-gradient(to bottom,#4ed8a0 0,#22adf6 100%)}body.docs-theme--enterprise_kapacitor .tabs a.is-active{background:#4ed8a0}body.docs-theme--flux .article-content a:active,body.docs-theme--flux .article-content a:link,body.docs-theme--flux .article-content a:visited{color:#4ed8a0}body.docs-theme--flux .article-content a:hover{color:#fff}body.docs-theme--flux .article-content a.top:hover{background:#fff}body.docs-theme--flux .article-content.section-landing h2 a.off-page:link:hover{color:#4ed8a0!important}body.docs-theme--flux .sidebar--mask-container .sidebar--mask{background:#4ed8a0;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #4ed8a0),to(#22adf6));background:linear-gradient(to bottom,#4ed8a0 0,#22adf6 100%)}body.docs-theme--flux .sidebar--section-title a:active,body.docs-theme--flux .sidebar--section-title a:link,body.docs-theme--flux .sidebar--section-title a:visited{color:#4ed8a0;font-weight:400}body.docs-theme--flux .sidebar--section-title a:hover{color:#fff}body.docs-theme--flux a.sidebar--page:hover{color:#fff}body.docs-theme--flux .navbar--product-dropdown{background-color:#4ed8a0}body.docs-theme--flux .navbar--product-dropdown:hover{background-color:#7ce490}body.docs-theme--flux .navbar--product-menu{background:#4ed8a0;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #4ed8a0),to(#22adf6));background:linear-gradient(to bottom,#4ed8a0 0,#22adf6 100%)}body.docs-theme--flux .tabs a.is-active{background:#4ed8a0} +.klavika-font{font-family:Klavika-Light,'Helvetica Neue',Helvetica,Helvetica,Arial,Tahoma,Verdana,sans-serif;font-weight:200}@font-face{font-family:icomoon;src:url(../fonts/icomoon.eot?c3omf0);src:url(../fonts/icomoon.eot?c3omf0#iefix) format('embedded-opentype'),url(../fonts/icomoon.woff2?c3omf0) format('woff2'),url(../fonts/icomoon.ttf?c3omf0) format('truetype'),url(../fonts/icomoon.woff?c3omf0) format('woff'),url(../fonts/icomoon.svg?c3omf0#icomoon) format('svg');font-weight:400;font-style:normal}.icon{font-family:icomoon;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon.sun2:before{content:"\eae2"}.icon.moon:before{content:"\eae3"}.icon.logotype:before{content:"\e800"}.icon.logo:before{content:"\e801"}.icon.arrow-down:before{content:"\e802"}.icon.arrow-up:before{content:"\e803"}.icon.arrow-left:before{content:"\e804"}.icon.arrow-right:before{content:"\e805"}.icon.health:before{content:"\e806"}.icon.lightning:before{content:"\e807"}.icon.matrix:before{content:"\e808"}.icon.cluster:before{content:"\e809"}.icon.data:before{content:"\e80a"}.icon.google:before{content:"\e81a"}.icon.eyeball:before{content:"\e901"}.icon.infinite:before{content:"\e902"}.icon.dashboard:before{content:"\eade"}.icon.analytics:before{content:"\eadf"}.icon.cloud-stack:before{content:"\eae0"}.icon.iot:before{content:"\eae1"}.icon.home:before{content:"\e904"}.icon.home2:before{content:"\e905"}.icon.home3:before{content:"\e906"}.icon.office:before{content:"\e907"}.icon.newspaper:before{content:"\e908"}.icon.pencil:before{content:"\e909"}.icon.pencil2:before{content:"\e90a"}.icon.quill:before{content:"\e90b"}.icon.pen:before{content:"\e90c"}.icon.blog:before{content:"\e90d"}.icon.eyedropper:before{content:"\e90e"}.icon.droplet:before{content:"\e90f"}.icon.paint-format:before{content:"\e910"}.icon.image:before{content:"\e911"}.icon.images:before{content:"\e912"}.icon.camera:before{content:"\e913"}.icon.headphones:before{content:"\e914"}.icon.music:before{content:"\e915"}.icon.play:before{content:"\e916"}.icon.film:before{content:"\e917"}.icon.video-camera:before{content:"\e918"}.icon.dice:before{content:"\e919"}.icon.pacman:before{content:"\e91a"}.icon.spades:before{content:"\e91b"}.icon.clubs:before{content:"\e91c"}.icon.diamonds:before{content:"\e91d"}.icon.bullhorn:before{content:"\e91e"}.icon.connection:before{content:"\e91f"}.icon.podcast:before{content:"\e920"}.icon.feed:before{content:"\e921"}.icon.mic:before{content:"\e922"}.icon.book:before{content:"\e923"}.icon.books:before{content:"\e924"}.icon.library:before{content:"\e925"}.icon.file-text:before{content:"\e926"}.icon.profile:before{content:"\e927"}.icon.file-empty:before{content:"\e928"}.icon.files-empty:before{content:"\e929"}.icon.file-text2:before{content:"\e92a"}.icon.file-picture:before{content:"\e92b"}.icon.file-music:before{content:"\e92c"}.icon.file-play:before{content:"\e92d"}.icon.file-video:before{content:"\e92e"}.icon.file-zip:before{content:"\e92f"}.icon.copy:before{content:"\e930"}.icon.paste:before{content:"\e931"}.icon.stack:before{content:"\e932"}.icon.folder:before{content:"\e933"}.icon.folder-open:before{content:"\e934"}.icon.folder-plus:before{content:"\e935"}.icon.folder-minus:before{content:"\e936"}.icon.folder-download:before{content:"\e937"}.icon.folder-upload:before{content:"\e938"}.icon.price-tag:before{content:"\e939"}.icon.price-tags:before{content:"\e93a"}.icon.barcode:before{content:"\e93b"}.icon.qrcode:before{content:"\e93c"}.icon.ticket:before{content:"\e93d"}.icon.cart:before{content:"\e93e"}.icon.coin-dollar:before{content:"\e93f"}.icon.coin-euro:before{content:"\e940"}.icon.coin-pound:before{content:"\e941"}.icon.coin-yen:before{content:"\e942"}.icon.credit-card:before{content:"\e943"}.icon.calculator:before{content:"\e944"}.icon.lifebuoy:before{content:"\e945"}.icon.phone:before{content:"\e946"}.icon.phone-hang-up:before{content:"\e947"}.icon.address-book:before{content:"\e948"}.icon.envelop:before{content:"\e949"}.icon.pushpin:before{content:"\e94a"}.icon.location:before{content:"\e94b"}.icon.location2:before{content:"\e94c"}.icon.compass:before{content:"\e94d"}.icon.compass2:before{content:"\e94e"}.icon.map:before{content:"\e94f"}.icon.map2:before{content:"\e950"}.icon.history:before{content:"\e951"}.icon.clock:before{content:"\e952"}.icon.clock2:before{content:"\e953"}.icon.alarm:before{content:"\e954"}.icon.bell:before{content:"\e955"}.icon.stopwatch:before{content:"\e956"}.icon.calendar:before{content:"\e957"}.icon.printer:before{content:"\e958"}.icon.keyboard:before{content:"\e959"}.icon.display:before{content:"\e95a"}.icon.laptop:before{content:"\e95b"}.icon.mobile:before{content:"\e95c"}.icon.mobile2:before{content:"\e95d"}.icon.tablet:before{content:"\e95e"}.icon.tv:before{content:"\e95f"}.icon.drawer:before{content:"\e960"}.icon.drawer2:before{content:"\e961"}.icon.box-add:before{content:"\e962"}.icon.box-remove:before{content:"\e963"}.icon.download:before{content:"\e964"}.icon.upload:before{content:"\e965"}.icon.floppy-disk:before{content:"\e966"}.icon.drive:before{content:"\e967"}.icon.database:before{content:"\e968"}.icon.undo:before{content:"\e969"}.icon.redo:before{content:"\e96a"}.icon.undo2:before{content:"\e96b"}.icon.redo2:before{content:"\e96c"}.icon.forward:before{content:"\e96d"}.icon.reply:before{content:"\e96e"}.icon.bubble:before{content:"\e96f"}.icon.bubbles:before{content:"\e970"}.icon.bubbles2:before{content:"\e971"}.icon.bubble2:before{content:"\e972"}.icon.bubbles3:before{content:"\e973"}.icon.bubbles4:before{content:"\e974"}.icon.user:before{content:"\e975"}.icon.users:before{content:"\e976"}.icon.user-plus:before{content:"\e977"}.icon.user-minus:before{content:"\e978"}.icon.user-check:before{content:"\e979"}.icon.user-tie:before{content:"\e97a"}.icon.quotes-left:before{content:"\e97b"}.icon.quotes-right:before{content:"\e97c"}.icon.hour-glass:before{content:"\e97d"}.icon.spinner:before{content:"\e97e"}.icon.spinner2:before{content:"\e97f"}.icon.spinner3:before{content:"\e980"}.icon.spinner4:before{content:"\e981"}.icon.spinner5:before{content:"\e982"}.icon.spinner6:before{content:"\e983"}.icon.spinner7:before{content:"\e984"}.icon.spinner8:before{content:"\e985"}.icon.spinner9:before{content:"\e986"}.icon.spinner10:before{content:"\e987"}.icon.spinner11:before{content:"\e988"}.icon.binoculars:before{content:"\e989"}.icon.search:before{content:"\e98a"}.icon.zoom-in:before{content:"\e98b"}.icon.zoom-out:before{content:"\e98c"}.icon.enlarge:before{content:"\e98d"}.icon.shrink:before{content:"\e98e"}.icon.enlarge2:before{content:"\e98f"}.icon.shrink2:before{content:"\e990"}.icon.key:before{content:"\e991"}.icon.key2:before{content:"\e992"}.icon.lock:before{content:"\e993"}.icon.unlocked:before{content:"\e994"}.icon.wrench:before{content:"\e995"}.icon.equalizer:before{content:"\e996"}.icon.equalizer2:before{content:"\e997"}.icon.cog:before{content:"\e900"}.icon.cogs:before{content:"\e998"}.icon.hammer:before{content:"\e999"}.icon.magic-wand:before{content:"\e99a"}.icon.aid-kit:before{content:"\e99b"}.icon.bug:before{content:"\e99c"}.icon.pie-chart:before{content:"\e99d"}.icon.stats-dots:before{content:"\e99e"}.icon.stats-bars:before{content:"\e99f"}.icon.stats-bars2:before{content:"\e9a0"}.icon.trophy:before{content:"\e9a1"}.icon.gift:before{content:"\e9a2"}.icon.glass:before{content:"\e9a3"}.icon.glass2:before{content:"\e9a4"}.icon.mug:before{content:"\e9a5"}.icon.spoon-knife:before{content:"\e9a6"}.icon.leaf:before{content:"\e9a7"}.icon.rocket:before{content:"\e9a8"}.icon.meter:before{content:"\e9a9"}.icon.meter2:before{content:"\e9aa"}.icon.hammer2:before{content:"\e9ab"}.icon.fire:before{content:"\e9ac"}.icon.lab:before{content:"\e9ad"}.icon.magnet:before{content:"\e9ae"}.icon.bin:before{content:"\e9af"}.icon.bin2:before{content:"\e9b0"}.icon.briefcase:before{content:"\e9b1"}.icon.airplane:before{content:"\e9b2"}.icon.truck:before{content:"\e9b3"}.icon.road:before{content:"\e9b4"}.icon.accessibility:before{content:"\e9b5"}.icon.target:before{content:"\e9b6"}.icon.shield:before{content:"\e9b7"}.icon.power:before{content:"\e9b8"}.icon.switch:before{content:"\e9b9"}.icon.power-cord:before{content:"\e9ba"}.icon.clipboard:before{content:"\e9bb"}.icon.list-numbered:before{content:"\e9bc"}.icon.list:before{content:"\e9bd"}.icon.list2:before{content:"\e9be"}.icon.tree:before{content:"\e9bf"}.icon.menu:before{content:"\e9c0"}.icon.menu2:before{content:"\e9c1"}.icon.menu3:before{content:"\e9c2"}.icon.menu4:before{content:"\e9c3"}.icon.cloud:before{content:"\e9c4"}.icon.cloud-download:before{content:"\e9c5"}.icon.cloud-upload:before{content:"\e9c6"}.icon.cloud-check:before{content:"\e9c7"}.icon.download2:before{content:"\e9c8"}.icon.upload2:before{content:"\e9c9"}.icon.download3:before{content:"\e9ca"}.icon.upload3:before{content:"\e9cb"}.icon.sphere:before{content:"\e9cc"}.icon.earth:before{content:"\e9cd"}.icon.link:before{content:"\e9ce"}.icon.flag:before{content:"\e9cf"}.icon.attachment:before{content:"\e9d0"}.icon.eye:before{content:"\e9d1"}.icon.eye-plus:before{content:"\e9d2"}.icon.eye-minus:before{content:"\e9d3"}.icon.eye-blocked:before{content:"\e9d4"}.icon.bookmark:before{content:"\e9d5"}.icon.bookmarks:before{content:"\e9d6"}.icon.sun:before{content:"\e9d7"}.icon.contrast:before{content:"\e9d8"}.icon.brightness-contrast:before{content:"\e9d9"}.icon.star-empty:before{content:"\e9da"}.icon.star-half:before{content:"\e9db"}.icon.star-full:before{content:"\e9dc"}.icon.heart:before{content:"\e9dd"}.icon.heart-broken:before{content:"\e9de"}.icon.man:before{content:"\e9df"}.icon.woman:before{content:"\e9e0"}.icon.man-woman:before{content:"\e9e1"}.icon.happy:before{content:"\e9e2"}.icon.happy2:before{content:"\e9e3"}.icon.smile:before{content:"\e9e4"}.icon.smile2:before{content:"\e9e5"}.icon.tongue:before{content:"\e9e6"}.icon.tongue2:before{content:"\e9e7"}.icon.sad:before{content:"\e9e8"}.icon.sad2:before{content:"\e9e9"}.icon.wink:before{content:"\e9ea"}.icon.wink2:before{content:"\e9eb"}.icon.grin:before{content:"\e9ec"}.icon.grin2:before{content:"\e9ed"}.icon.cool:before{content:"\e9ee"}.icon.cool2:before{content:"\e9ef"}.icon.angry:before{content:"\e9f0"}.icon.angry2:before{content:"\e9f1"}.icon.evil:before{content:"\e9f2"}.icon.evil2:before{content:"\e9f3"}.icon.shocked:before{content:"\e9f4"}.icon.shocked2:before{content:"\e9f5"}.icon.baffled:before{content:"\e9f6"}.icon.baffled2:before{content:"\e9f7"}.icon.confused:before{content:"\e9f8"}.icon.confused2:before{content:"\e9f9"}.icon.neutral:before{content:"\e9fa"}.icon.neutral2:before{content:"\e9fb"}.icon.hipster:before{content:"\e9fc"}.icon.hipster2:before{content:"\e9fd"}.icon.wondering:before{content:"\e9fe"}.icon.wondering2:before{content:"\e9ff"}.icon.sleepy:before{content:"\ea00"}.icon.sleepy2:before{content:"\ea01"}.icon.frustrated:before{content:"\ea02"}.icon.frustrated2:before{content:"\ea03"}.icon.crying:before{content:"\ea04"}.icon.crying2:before{content:"\ea05"}.icon.point-up:before{content:"\ea06"}.icon.point-right:before{content:"\ea07"}.icon.point-down:before{content:"\ea08"}.icon.point-left:before{content:"\ea09"}.icon.warning:before{content:"\ea0a"}.icon.notification:before{content:"\ea0b"}.icon.question:before{content:"\ea0c"}.icon.plus:before{content:"\ea0d"}.icon.minus:before{content:"\ea0e"}.icon.info:before{content:"\ea0f"}.icon.cancel-circle:before{content:"\ea10"}.icon.blocked:before{content:"\ea11"}.icon.cross:before{content:"\e80b"}.icon.checkmark:before{content:"\e80c"}.icon.checkmark2:before{content:"\ea12"}.icon.spell-check:before{content:"\ea13"}.icon.enter:before{content:"\ea14"}.icon.exit:before{content:"\ea15"}.icon.play2:before{content:"\ea16"}.icon.pause:before{content:"\ea17"}.icon.stop:before{content:"\ea18"}.icon.previous:before{content:"\ea19"}.icon.next:before{content:"\ea1a"}.icon.backward:before{content:"\ea1b"}.icon.forward2:before{content:"\ea1c"}.icon.play3:before{content:"\ea1d"}.icon.pause2:before{content:"\ea1e"}.icon.stop2:before{content:"\ea1f"}.icon.backward2:before{content:"\ea20"}.icon.forward3:before{content:"\ea21"}.icon.first:before{content:"\ea22"}.icon.last:before{content:"\ea23"}.icon.previous2:before{content:"\ea24"}.icon.next2:before{content:"\ea25"}.icon.eject:before{content:"\ea26"}.icon.volume-high:before{content:"\ea27"}.icon.volume-medium:before{content:"\ea28"}.icon.volume-low:before{content:"\ea29"}.icon.volume-mute:before{content:"\ea2a"}.icon.volume-mute2:before{content:"\ea2b"}.icon.volume-increase:before{content:"\ea2c"}.icon.volume-decrease:before{content:"\ea2d"}.icon.loop:before{content:"\ea2e"}.icon.loop2:before{content:"\ea2f"}.icon.infinite2:before{content:"\ea30"}.icon.shuffle:before{content:"\ea31"}.icon.arrow-up-left:before{content:"\ea32"}.icon.arrow-up3:before{content:"\ea33"}.icon.arrow-up-right:before{content:"\ea34"}.icon.arrow-right3:before{content:"\ea35"}.icon.arrow-down-right:before{content:"\ea36"}.icon.arrow-down3:before{content:"\ea37"}.icon.arrow-down-left:before{content:"\ea38"}.icon.arrow-left3:before{content:"\ea39"}.icon.arrow-up-left2:before{content:"\ea3a"}.icon.arrow-up2:before{content:"\ea3b"}.icon.arrow-up-right2:before{content:"\ea3c"}.icon.arrow-right2:before{content:"\ea3d"}.icon.arrow-down-right2:before{content:"\ea3e"}.icon.arrow-down2:before{content:"\ea3f"}.icon.arrow-down-left2:before{content:"\ea40"}.icon.arrow-left2:before{content:"\ea41"}.icon.circle-up:before{content:"\ea42"}.icon.circle-right:before{content:"\ea43"}.icon.circle-down:before{content:"\ea44"}.icon.circle-left:before{content:"\ea45"}.icon.tab:before{content:"\ea46"}.icon.move-up:before{content:"\ea47"}.icon.move-down:before{content:"\ea48"}.icon.sort-alpha-asc:before{content:"\ea49"}.icon.sort-alpha-desc:before{content:"\ea4a"}.icon.sort-numeric-asc:before{content:"\ea4b"}.icon.sort-numberic-desc:before{content:"\ea4c"}.icon.sort-amount-asc:before{content:"\ea4d"}.icon.sort-amount-desc:before{content:"\ea4e"}.icon.command:before{content:"\ea4f"}.icon.shift:before{content:"\ea50"}.icon.ctrl:before{content:"\ea51"}.icon.opt:before{content:"\ea52"}.icon.checkbox-checked:before{content:"\ea53"}.icon.checkbox-unchecked:before{content:"\ea54"}.icon.radio-checked:before{content:"\ea55"}.icon.radio-checked2:before{content:"\ea56"}.icon.radio-unchecked:before{content:"\ea57"}.icon.crop:before{content:"\ea58"}.icon.make-group:before{content:"\ea59"}.icon.ungroup:before{content:"\ea5a"}.icon.scissors:before{content:"\ea5b"}.icon.filter:before{content:"\ea5c"}.icon.font:before{content:"\ea5d"}.icon.ligature:before{content:"\ea5e"}.icon.ligature2:before{content:"\ea5f"}.icon.text-height:before{content:"\ea60"}.icon.text-width:before{content:"\ea61"}.icon.font-size:before{content:"\ea62"}.icon.bold:before{content:"\ea63"}.icon.underline:before{content:"\ea64"}.icon.italic:before{content:"\ea65"}.icon.strikethrough:before{content:"\ea66"}.icon.omega:before{content:"\ea67"}.icon.sigma:before{content:"\ea68"}.icon.page-break:before{content:"\ea69"}.icon.superscript:before{content:"\ea6a"}.icon.subscript:before{content:"\ea6b"}.icon.superscript2:before{content:"\ea6c"}.icon.subscript2:before{content:"\ea6d"}.icon.text-color:before{content:"\ea6e"}.icon.pagebreak:before{content:"\ea6f"}.icon.clear-formatting:before{content:"\ea70"}.icon.table:before{content:"\ea71"}.icon.table2:before{content:"\ea72"}.icon.insert-template:before{content:"\ea73"}.icon.pilcrow:before{content:"\ea74"}.icon.ltr:before{content:"\ea75"}.icon.rtl:before{content:"\ea76"}.icon.section:before{content:"\ea77"}.icon.paragraph-left:before{content:"\e903"}.icon.paragraph-center:before{content:"\ea78"}.icon.paragraph-right:before{content:"\ea79"}.icon.paragraph-justify:before{content:"\ea7a"}.icon.indent-increase:before{content:"\ea7b"}.icon.indent-decrease:before{content:"\ea7c"}.icon.share:before{content:"\ea7d"}.icon.new-tab:before{content:"\ea7e"}.icon.embed:before{content:"\ea7f"}.icon.embed2:before{content:"\ea80"}.icon.terminal:before{content:"\ea81"}.icon.share2:before{content:"\ea82"}.icon.mail:before{content:"\ea83"}.icon.mail2:before{content:"\ea84"}.icon.mail3:before{content:"\ea85"}.icon.mail4:before{content:"\ea86"}.icon.google2:before{content:"\ea87"}.icon.google-plus:before{content:"\ea88"}.icon.google-plus2:before{content:"\ea89"}.icon.google-plus3:before{content:"\ea8a"}.icon.google-drive:before{content:"\ea8b"}.icon.facebook:before{content:"\e80d"}.icon.facebook2:before{content:"\e80e"}.icon.facebook3:before{content:"\e80f"}.icon.ello:before{content:"\ea8c"}.icon.instagram:before{content:"\ea8d"}.icon.twitter:before{content:"\e810"}.icon.twitter2:before{content:"\e811"}.icon.twitter3:before{content:"\e812"}.icon.feed2:before{content:"\ea8e"}.icon.feed3:before{content:"\ea8f"}.icon.feed4:before{content:"\ea90"}.icon.youtube:before{content:"\ea91"}.icon.youtube2:before{content:"\ea92"}.icon.youtube3:before{content:"\ea93"}.icon.youtube4:before{content:"\ea94"}.icon.twitch:before{content:"\ea95"}.icon.vimeo:before{content:"\ea96"}.icon.vimeo2:before{content:"\ea97"}.icon.vimeo3:before{content:"\ea98"}.icon.lanyrd:before{content:"\ea99"}.icon.flickr:before{content:"\ea9a"}.icon.flickr2:before{content:"\ea9b"}.icon.flickr3:before{content:"\ea9c"}.icon.flickr4:before{content:"\ea9d"}.icon.picassa:before{content:"\ea9e"}.icon.picassa2:before{content:"\ea9f"}.icon.dribbble:before{content:"\eaa0"}.icon.dribbble2:before{content:"\eaa1"}.icon.dribbble3:before{content:"\eaa2"}.icon.forrst:before{content:"\eaa3"}.icon.forrst2:before{content:"\eaa4"}.icon.deviantart:before{content:"\eaa5"}.icon.deviantart2:before{content:"\eaa6"}.icon.steam:before{content:"\eaa7"}.icon.steam2:before{content:"\eaa8"}.icon.dropbox:before{content:"\eaa9"}.icon.onedrive:before{content:"\eaaa"}.icon.github:before{content:"\e813"}.icon.github2:before{content:"\e814"}.icon.github3:before{content:"\e815"}.icon.github4:before{content:"\e816"}.icon.github5:before{content:"\eaab"}.icon.wordpress:before{content:"\eaac"}.icon.wordpress2:before{content:"\eaad"}.icon.joomla:before{content:"\eaae"}.icon.blogger:before{content:"\eaaf"}.icon.blogger2:before{content:"\eab0"}.icon.tumblr:before{content:"\eab1"}.icon.tumblr2:before{content:"\eab2"}.icon.yahoo:before{content:"\eab3"}.icon.tux:before{content:"\eab4"}.icon.apple:before{content:"\eab5"}.icon.finder:before{content:"\eab6"}.icon.android:before{content:"\eab7"}.icon.windows:before{content:"\eab8"}.icon.windows8:before{content:"\eab9"}.icon.soundcloud:before{content:"\eaba"}.icon.soundcloud2:before{content:"\eabb"}.icon.skype:before{content:"\eabc"}.icon.reddit:before{content:"\eabd"}.icon.linkedin:before{content:"\e817"}.icon.linkedin2:before{content:"\e818"}.icon.lastfm:before{content:"\eabe"}.icon.lastfm2:before{content:"\eabf"}.icon.delicious:before{content:"\eac0"}.icon.stumbleupon:before{content:"\eac1"}.icon.stumbleupon2:before{content:"\eac2"}.icon.stackoverflow:before{content:"\e819"}.icon.pinterest:before{content:"\eac3"}.icon.pinterest2:before{content:"\eac4"}.icon.xing:before{content:"\eac5"}.icon.xing2:before{content:"\eac6"}.icon.flattr:before{content:"\eac7"}.icon.foursquare:before{content:"\eac8"}.icon.paypal:before{content:"\eac9"}.icon.paypal2:before{content:"\eaca"}.icon.paypal3:before{content:"\eacb"}.icon.yelp:before{content:"\eacc"}.icon.file-pdf:before{content:"\eacd"}.icon.file-openoffice:before{content:"\eace"}.icon.file-word:before{content:"\eacf"}.icon.file-excel:before{content:"\ead0"}.icon.libreoffice:before{content:"\ead1"}.icon.html5:before{content:"\ead2"}.icon.html52:before{content:"\ead3"}.icon.css3:before{content:"\ead4"}.icon.git:before{content:"\ead5"}.icon.svg:before{content:"\ead6"}.icon.codepen:before{content:"\ead7"}.icon.chrome:before{content:"\ead8"}.icon.firefox:before{content:"\ead9"}.icon.IE:before{content:"\eada"}.icon.opera:before{content:"\eadb"}.icon.safari:before{content:"\eadc"}.icon.IcoMoon:before{content:"\eadd"}.article-content pre{background-attachment:fixed;background-repeat:no-repeat;background-position:center center;background-size:70%}.article-content strong{color:#e7e8eb}.article-content blockquote td,.article-content blockquote th,.article-content dt>table td,.article-content dt>table th{border-color:#383846}#theme-switch-dark{display:none}/*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0;font-family:Roboto,Helvetica,Arial,Tahoma,Verdana,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}code[class*=language-],pre[class*=language-]{direction:ltr;text-align:left;white-space:pre;white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-o-pre-wrap;word-spacing:normal;word-break:normal;word-wrap:normal;-moz-tab-size:1;-o-tab-size:1;tab-size:1;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow:none}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{overflow:auto}:not(pre)>code[class*=language-]{white-space:normal}.highlight{color:#b1b6ff}.highlight .gh,.highlight .go,.highlight .na,.highlight .nt,.highlight .nv,.highlight .ow{color:#b1b6ff}.highlight .c,.highlight .c1,.highlight .ch,.highlight .cm,.highlight .cpf,.highlight .cs,.highlight .w{color:#757888}.highlight .gi{background-color:#757888}.highlight .k,.highlight .kc,.highlight .kd,.highlight .kn,.highlight .kp,.highlight .kr,.highlight .nn{color:#22adf6}.highlight .bp,.highlight .cp,.highlight .dl,.highlight .gt,.highlight .gu,.highlight .kt,.highlight .nb,.highlight .nc,.highlight .no,.highlight .s1,.highlight .s2,.highlight .sa,.highlight .sb,.highlight .sc,.highlight .sd,.highlight .se,.highlight .sh,.highlight .sr,.highlight .sx{color:#32b08c}.highlight .err,.highlight .fm,.highlight .gd,.highlight .gr,.highlight .nd,.highlight .ne,.highlight .nf,.highlight .nl,.highlight .si{color:#bf3d5e}.highlight .il,.highlight .m,.highlight .mb,.highlight .mf,.highlight .mh,.highlight .mi,.highlight .mo,.highlight .ni,.highlight .vc,.highlight .vg,.highlight .vi,.highlight .vm{color:#ff6db0}.highlight .gp,.highlight .o{color:#22adf6}.highlight .ss{color:#e90}.highlight .cs .gh,.highlight .gp,.highlight .gs,.highlight .gu,.highlight .k,.highlight .kc,.highlight .kd,.highlight .kn,.highlight .kp,.highlight .kr,.highlight .kt,.highlight .nc,.highlight .ne,.highlight .ni,.highlight .nn .nt,.highlight .ow,.highlight .se{font-weight:700}.highlight .c,.highlight .c1,.highlight .ch,.highlight .cm,.highlight .cpf,.highlight .cs,.highlight .ge,.highlight .sd,.highlight .w{font-style:italic}@font-face{font-family:Klavika-Light;src:url(../fonts/KlavikaLight-ItalicTF.otf);font-weight:200;font-style:italic}@font-face{font-family:Klavika-Bold;src:url(../fonts/KlavikaBoldBoldItalic.otf);font-weight:700;font-style:italic}html{overflow:auto}body,html{width:100%;height:100%;background-color:#202028;-webkit-overflow-scrolling:touch}body{color:#bec2cc;line-height:1;overflow:auto}*{-webkit-box-sizing:border-box;box-sizing:border-box}a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0;font-size:100%;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:'';content:none}table{border-collapse:collapse;border-spacing:0}.navbar{top:0;left:0;font-size:1rem;height:4rem;width:100%;background-color:#fafafc;z-index:150;position:relative}.navbar--hamburger,.navbar--logo,.navbar--product-dropdown,.navbar--search,.theme-switcher{position:absolute}.navbar--logo{left:1em;top:1.05em}.navbar--logo a{font-size:1.5rem;color:#545667;-webkit-transition:color .25s ease;transition:color .25s ease}.navbar--logo a:hover{color:#4591ed}.navbar--logo .divider{border-left:1px solid #545667;margin:0 .8rem 0 .5rem;vertical-align:text-top;opacity:.35;line-height:1.15em}.navbar--logo .navbar--docs{font-size:1.3rem}.navbar--hamburger{width:4rem;height:4rem;right:0}.navbar--hamburger .navbar--hamburger-bar{width:1.2rem;height:2px;background-color:#676978;border-radius:1px;position:absolute;left:50%;-webkit-transition:all .3s ease;transition:all .3s ease}.navbar--hamburger .navbar--hamburger-bar.top{top:40%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.navbar--hamburger .navbar--hamburger-bar.middle{top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.navbar--hamburger .navbar--hamburger-bar.bottom{top:60%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.navbar--hamburger:hover{cursor:pointer}.navbar--hamburger:hover .navbar--hamburger-bar{background-color:#8e91a1}.navbar--hamburger.open .navbar--hamburger-bar.top{top:50%;-webkit-transform:translate(-50%,-50%) rotate(45deg);transform:translate(-50%,-50%) rotate(45deg)}.navbar--hamburger.open .navbar--hamburger-bar.middle{opacity:0}.navbar--hamburger.open .navbar--hamburger-bar.bottom{top:50%;-webkit-transform:translate(-50%,-50%) rotate(-45deg);transform:translate(-50%,-50%) rotate(-45deg)}.navbar--product-menu{width:100%;position:absolute;top:.5em;height:auto;opacity:0;-webkit-transition:opacity .25s ease;transition:opacity .25s ease;background:#4591ed;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #4591ed),to(#22adf6));background:linear-gradient(to bottom,#4591ed 0,#22adf6 100%)}.navbar--product-container{width:100%;height:auto;position:absolute;top:calc(4rem * .85);left:0;visibility:hidden;-webkit-transition:all .25s ease;transition:all .25s ease;z-index:100}.navbar--product-container.open{visibility:visible}.navbar--product-container.open .navbar--product-menu{opacity:1}.navbar--product-divider{margin:.25em 0;height:2px;background-color:rgba(67,68,83,.1)}.navbar--product{font-size:19px}.navbar--product:active,.navbar--product:link,.navbar--product:visited{color:#fff;-webkit-transition:background-color .25s ease,color .25s ease;transition:background-color .25s ease,color .25s ease;background-color:transparent;padding:1.25rem 1rem;display:block;width:100%}.navbar--product:hover{background-color:rgba(56,56,70,.12);color:#fff}.navbar--product-dropdown{display:none;top:.5em;background-color:#4591ed;height:3rem;border-radius:3px;-webkit-transition:background-color .25s ease,color .25s ease;transition:background-color .25s ease,color .25s ease}.navbar--product-dropdown:hover{cursor:pointer;background-color:#22adf6}.navbar--product-dropdown .navbar--current-product,.navbar--product-dropdown .navbar--product-dropdown-caret{position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);color:#fff}.navbar--product-dropdown .navbar--current-product{font-weight:700;left:1rem;font-size:19px;font-weight:400}.navbar--product-dropdown .navbar--product-dropdown-caret{right:1rem;font-size:.625em}.navbar--search{height:3rem;width:40%;right:4rem;top:.5em}.navbar--search>*{position:absolute!important;top:0;left:0;width:100%;height:100%}.navbar--search-field{position:absolute;top:0;left:0;width:100%;height:100%;border-radius:3px;border:2px solid #eeeff2;color:#545667;background-color:#fff;padding:0 1rem;font-weight:400;font-size:19px;outline:0;-webkit-transition:border-color .3s ease,color .3s ease;transition:border-color .3s ease,color .3s ease}.navbar--search-field:focus{border-color:#22adf6;color:#22adf6}.algolia-autocomplete{width:100%}.algolia-autocomplete .aa-hint,.algolia-autocomplete .aa-input{width:100%}.algolia-autocomplete .aa-hint{color:red}.algolia-autocomplete .aa-dropdown-menu{margin:.5rem 0 0 0;width:100%;padding:.75rem;background-color:rgba(67,68,83,.7);border:0}.algolia-autocomplete .aa-dropdown-menu .algolia-docsearch-suggestion--highlight{color:#4591ed}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion{cursor:pointer;padding:0}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion{background-color:#2c2c38;border-radius:3px;overflow:hidden}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion__secondary{border:none;margin-top:2px}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion:first-child .algolia-docsearch-suggestion__secondary{margin-top:0}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--category-header{border-radius:3px 3px 0 0;background-color:#2c2c38;color:#a4a8b6;padding:.75rem 1rem;font-weight:500}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--highlight{background-color:transparent}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--subcategory-column{border:none;background-color:#f6f6f8}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--content{background-color:#fff}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--title{margin-bottom:.25rem;display:inline-block;color:#545667}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--text{color:#757888}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--subcategory-column-text{font-size:.8rem;line-height:1.4em;color:#757888}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor .algolia-docsearch-suggestion--content{background:#4591ed;background:-webkit-gradient(linear,left top, right top,color-stop(0, #4591ed),to(#00c9ff));background:linear-gradient(to right,#4591ed 0,#00c9ff 100%)}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor .algolia-docsearch-suggestion--text,.algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor .algolia-docsearch-suggestion--title{color:#bef0ff}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight,.algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor .algolia-docsearch-suggestion--title .algolia-docsearch-suggestion--highlight{color:#fff!important}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion em{font-weight:700;font-style:normal}.algolia-autocomplete .algolia-docsearch-footer{border:none;padding:.75rem 0 0 0}.theme-switcher{display:none;width:4rem;height:4rem;right:0;border:0;outline:0;background-color:#fafafc;color:#545667}.theme-switcher .icon{-webkit-transition:color .25s ease;transition:color .25s ease}.theme-switcher .sun2{font-size:1.5rem}.theme-switcher .moon{font-size:1.2rem}.theme-switcher:hover{color:#4591ed;cursor:pointer}@media (max-width:500px){.navbar--logo .logotype{display:none}.navbar--logo .logo{display:inline}}@media (min-width:500px){.navbar--logo .logotype{display:inline}.navbar--logo .logo{display:none}}@media (min-width:900px){.theme-switcher{display:block}.navbar--product-dropdown{display:block;left:18rem;width:17rem}.navbar--product-container{left:18rem;width:17rem;top:2.9em}.navbar--product-container.open .navbar--dropdown-dismiss{width:100vw;height:100vh;position:fixed;top:0;left:0;z-index:100}.navbar--product-container.open .navbar--dropdown-dismiss:hover{cursor:pointer}.navbar--product-menu{border-radius:0 0 3px 3px;overflow:hidden;z-index:110}.navbar--search{left:35.5rem;width:calc(100% - 18rem - .5rem - .5rem - 4rem - 17rem)}.navbar--hamburger{display:none}.navbar--product.external{font-size:.8rem}}@media (min-width:1200px){.navbar--product-dropdown{left:23rem;width:17.5rem}.navbar--product-container{left:23rem;width:17.5rem}.navbar--search{left:41rem;width:calc(100% - 23rem - .5rem - .5rem - 4rem - 17.5rem)}}@media (min-width:1900px){.navbar--product-dropdown{left:28rem;width:17.5rem}.navbar--product-container{left:28rem;width:17.5rem}.navbar--search{left:46rem;width:calc(100% - 28rem - .5rem - .5rem - 4rem - 17.5rem)}}.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu{right:0!important;left:auto!important;overflow:scroll!important;max-height:90vh!important}.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu:before{display:none}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--wrapper{padding:.2rem 0}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column{display:none}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--content{padding:.75rem;width:100%;float:none}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--content:before{display:none}.algolia-autocomplete .algolia-docsearch-footer{padding:0}@media (min-width:1330px){.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu{right:auto!important;left:0!important}}@media (max-width:768px){.algolia-docsearch-suggestion--subcategory-column{display:none!important}.algolia-docsearch-suggestion--wrapper{margin:.25em 0!important}}@media (max-width:570px){.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu{position:fixed!important;top:3.5em!important;left:0;min-width:100vw}}.sidebar--toggle{padding:1em;position:relative;z-index:100;height:3rem;width:100%;background-color:#434453;text-align:left;font-style:italic;color:#f6f6f8;font-weight:500;-webkit-transition:background-color .25s ease,color .25s ease;transition:background-color .25s ease,color .25s ease}.sidebar--toggle:hover{color:#fff;background-color:#545667;cursor:pointer}.sidebar--toggle:after,.sidebar--toggle:before{content:"";position:absolute;display:block;right:1em;top:1.45em;height:2px;width:15px;background:#999dab}.sidebar--toggle:before{-webkit-transform:rotate(90deg);transform:rotate(90deg);-webkit-transition:all .2s;transition:all .2s}.sidebar--toggle.open:before{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.sidebar{background-color:#1c1c21;height:100%;overflow:hidden;-webkit-transition:max-height .2s ease-out;transition:max-height .2s ease-out}.sidebar::-webkit-scrollbar{background-color:#1c1c21;width:16px}.sidebar::-webkit-scrollbar-track{background-color:#1c1c21}.sidebar::-webkit-scrollbar-thumb{border:4px solid #1c1c21;background-color:#676978;border-radius:8px}.sidebar.open{max-height:4000px;-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in}.sidebar--section{border-top:2px solid #292933;padding:2em 0}.sidebar--section:first-child{border:none}.sidebar--section-title{color:#4591ed;padding:0 2rem 1em 2rem;font-size:1.25em}.sidebar--section-title a:active,.sidebar--section-title a:link,.sidebar--section-title a:visited{color:#4591ed;font-weight:400}.sidebar--section-title a:hover{color:#fff}.sidebar--section ul{padding-left:3rem}.sidebar--section ul li{position:relative;margin-bottom:.25rem}ul.sidebar--children{margin-left:-1.85rem;height:0;overflow:hidden}ul.sidebar--children.open{height:auto;overflow:visible;border-left:2px solid #292933}ul.sidebar--children li:first-child{margin-top:.25rem}.sidebar--children-toggle{position:absolute;left:-2.25rem;top:.2rem;height:.9rem;width:.9rem;background:#434453;border-radius:50%;-webkit-transition:all .2s;transition:all .2s}.sidebar--children-toggle:before{content:"+";color:#e7e8eb;display:block;text-align:center}.sidebar--children-toggle.open:before{content:"–"}.sidebar--children-toggle:hover{background:#4591ed}.sidebar--children-toggle:hover:before{color:#fff}a.sidebar--page:active,a.sidebar--page:link,a.sidebar--page:visited{display:inline-block;color:#bec2cc;font-weight:500;text-indent:-1rem;line-height:1.25}a.sidebar--page:hover{color:#fff}@media (max-width:900px){.sidebar{height:auto;max-height:0}}@media (min-width:900px){.sidebar--toggle{display:none}.sidebar,.sidebar.open{position:fixed;z-index:100;width:18rem;-webkit-transform:none;transform:none;-webkit-transition:none;transition:none;top:4rem;max-height:100%;overflow:auto;padding-bottom:4rem}}@media (min-width:1200px){.sidebar,.sidebar.open{width:23rem}}@media (min-width:1900px){.sidebar,.sidebar.open{width:28rem}.sidebar--support-ad{padding:2rem 1.5rem}.sidebar--support-ad--desc{font-size:1.2em}}#sidebar--ad{margin:-.75rem 1rem;border-radius:3px}#sidebar--ad.cloud{background:linear-gradient(45deg,#9394ff,#22adf6);padding:1.5rem 1.5rem;text-align:center}#sidebar--ad.cloud .text{margin:0 0 1rem 0;color:#fff;line-height:1.3em;font-size:1.1em;font-weight:500}#sidebar--ad.cloud .cta{margin-left:0;margin-right:0;border-radius:3px;color:#fff;border:2px solid rgba(255,255,255,.4);background-color:transparent;-webkit-transition:background-color .25s ease,border-color .25s ease;transition:background-color .25s ease,border-color .25s ease;padding:.75em 1.5em;font-weight:700;display:inline-block;font-size:1.125em}#sidebar--ad.cloud .cta:hover{background-color:rgba(255,255,255,.15);border-color:rgba(255,255,255,.6)}#sidebar--ad.enterprise{background:-webkit-gradient(linear,left top, right top,from(#4ed8a0),to(#22adf6));background:linear-gradient(to right,#4ed8a0,#22adf6);padding:1.5rem 1.5rem;text-align:center}#sidebar--ad.enterprise .text{margin:0 0 1rem 0;color:#fff;line-height:1.3em;font-weight:500}#sidebar--ad.enterprise .cta{margin-left:0;margin-right:0;border-radius:3px;color:#fff;border:2px solid rgba(255,255,255,.4);background-color:transparent;-webkit-transition:background-color .25s ease,border-color .25s ease;transition:background-color .25s ease,border-color .25s ease;padding:.75em 1.5em;font-weight:700;display:inline-block;font-size:1.125em}#sidebar--ad.enterprise .cta:hover{background-color:rgba(255,255,255,.15);border-color:rgba(255,255,255,.6)}#sidebar--ad.influx-days{padding:1rem;background:url(/promos/assets/influx-days-bg.jpg);background-repeat:no-repeat;background-size:cover;color:#fff;font-weight:700}#sidebar--ad.influx-days img{margin:.4rem 0 .8rem}#sidebar--ad.influx-days .text{font-size:1.75rem;margin-bottom:.5rem}#sidebar--ad.influx-days .details{font-size:.9rem;line-height:1.1rem}#sidebar--ad.influx-days .cta{display:inline-block;margin-top:.85rem;color:#fff;background:#5cbb47;font-size:1.15rem;padding:.45rem 1.75rem;border-radius:3px}::-moz-selection{background-color:#757888;color:#fff}::selection{background-color:#757888;color:#fff}::-moz-selection{background-color:#757888;color:#fff}a{text-decoration:none;-webkit-transition:color .2s ease;transition:color .2s ease}a:hover{cursor:pointer}.article{background-color:#202028;overflow:auto;width:100%}.article::-webkit-scrollbar{background-color:#202028;width:16px}.article::-webkit-scrollbar-track{background-color:#202028}.article::-webkit-scrollbar-thumb{border:4px solid #202028;background-color:#676978;border-radius:8px}.article-section{display:block;width:100%;text-align:center;padding:2rem}.article-section.article-heading{background-color:#2c2c38;background-position:center center;background-size:cover!important;background-repeat:no-repeat}.article-section.article-heading h1{margin-bottom:0}.article-section.article-footer{background:#292933;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #292933),to(#202028));background:linear-gradient(to bottom,#292933 0,#202028 100%)}.article-content{text-align:left;width:100%;max-width:760px;color:#bec2cc}.article-content a:active,.article-content a:link,.article-content a:visited{font-weight:700;color:#4591ed}.article-content a:hover{color:#00c9ff;cursor:pointer}.article-content a.top{font-size:6px;padding:.25rem .25rem .35rem;border-radius:3px;-webkit-transition:all .2s;transition:all .2s}.article-content a.top:hover{color:#202028!important;background:#00c9ff}.article-content a.off-page:link:after{content:'\ea43';font-family:icomoon;font-size:.75em;font-weight:400;vertical-align:bottom;display:inline;margin-left:.5em;opacity:.25;-webkit-transition:color .2s ease;transition:color .2s ease;color:#bec2cc}.article-content li a code,.article-content p a code{position:relative}.article-content li a code:after,.article-content p a code:after{content:"";position:absolute;top:-1px;right:-1px;width:0;height:0;border-style:solid;border-width:0 .5em .5em 0;border-color:transparent #b1b6ff transparent transparent;opacity:.5;-webkit-transition:all .2s;transition:all .2s}.article-content li a code:hover:after,.article-content p a code:hover:after{opacity:1;border-color:transparent #00c9ff transparent transparent}.article-content li a.btn,.article-content p a.btn{display:inline-block;color:#fff;font-size:.95rem;padding:.5em 1em;margin:1em 0 1.5em}.article-content li a.btn.download:before,.article-content p a.btn.download:before{content:'\e964';font-family:icomoon;font-size:1.15em;font-weight:400;vertical-align:bottom;display:inline;margin-right:.5em}.article-content>*{text-decoration:none}.article-content .note,.article-content .warn,.article-content blockquote,.article-content dt,.article-content h1,.article-content h2,.article-content h3,.article-content h4,.article-content li,.article-content ol,.article-content p,.article-content pre,.article-content ul{display:block;margin-bottom:1em;line-height:1.45em}.article-content table{margin:1em 0 1em;overflow-x:auto;background-color:#202028}.article-content h1,.article-content h2,.article-content h3,.article-content h4,.article-content h5,.article-content h6{width:100%;color:#f6f6f8}.article-content h1 a.offset-anchor,.article-content h2 a.offset-anchor,.article-content h3 a.offset-anchor,.article-content h4 a.offset-anchor,.article-content h5 a.offset-anchor,.article-content h6 a.offset-anchor{display:block;position:relative;top:-120px;visibility:hidden}.article-content h1 a:active,.article-content h1 a:hover,.article-content h1 a:link,.article-content h1 a:visited,.article-content h2 a:active,.article-content h2 a:hover,.article-content h2 a:link,.article-content h2 a:visited,.article-content h3 a:active,.article-content h3 a:hover,.article-content h3 a:link,.article-content h3 a:visited,.article-content h4 a:active,.article-content h4 a:hover,.article-content h4 a:link,.article-content h4 a:visited,.article-content h5 a:active,.article-content h5 a:hover,.article-content h5 a:link,.article-content h5 a:visited,.article-content h6 a:active,.article-content h6 a:hover,.article-content h6 a:link,.article-content h6 a:visited{text-decoration:none;font-weight:inherit;color:#f6f6f8!important}.article-content h1:first-child,.article-content h2:first-child,.article-content h3:first-child,.article-content h4:first-child,.article-content h5:first-child,.article-content h6:first-child{margin-top:0}.article-content h1{font-size:2.2em;font-family:Klavika-Light,'Helvetica Neue',Helvetica,Helvetica,Arial,Tahoma,Verdana,sans-serif;font-weight:200;line-height:1.2em}.article-content h2{font-size:1.9em;font-weight:600;margin:1.5em 0 .5em}.article-content h3{font-size:1.5em;font-weight:700;margin:1em 0 .5em}.article-content h4{font-size:1.3em;font-weight:400;font-style:italic;margin:1.25em 0 .5em}.article-content h5{line-height:1.6em}.article-content h6{font-size:.95em;font-style:italic;line-height:1.6em}.article-content.section-landing h2 a.off-page:link:hover{color:#4591ed!important}.article-content p{font-size:1em}.article-content ol,.article-content ul{font-size:1em;padding-left:1.125em}.article-content ol li,.article-content ul li{display:list-item;list-style-position:outside;padding-left:.5em;margin-bottom:.25em}.article-content ol p,.article-content ul p{margin-left:0}.article-content ul>li{list-style-type:disc!important}.article-content ol li,.article-content ul ol li{list-style-type:decimal}.article-content ol ol li{list-style-type:lower-alpha}.article-content ol ol ol li{list-style-type:decimal}.article-content ul ul ul li{list-style-type:square}.article-content li:last-child{margin-bottom:0}.article-content ol ol,.article-content ol ul,.article-content ul ol,.article-content ul ul{width:100%;margin-left:0;margin-bottom:0;margin-top:.25em}.article-content hr{width:100%;height:2px;margin-top:.25em;margin-bottom:1em;border:none;display:block;background-color:#2c2c38}.article-content img{max-width:100%;height:auto;border-radius:3px}.article-content td,.article-content th{border:1px solid #2c2c38;font-size:.875em;line-height:1.2em;padding:.75em 1.5em}.article-content tr:nth-child(even){background-color:#1c1c21}.article-content thead tr{background-color:#292933!important}.article-content thead th{padding:1.25em 1.5em}.article-content .note,.article-content .warn,.article-content blockquote,.article-content dt{font-size:.9em;padding:1em 1.5em;border-radius:3px;border-style:solid;border-left-width:6px}.article-content .note h4,.article-content .note ol,.article-content .note p,.article-content .note pre,.article-content .note ul,.article-content .warn h4,.article-content .warn ol,.article-content .warn p,.article-content .warn pre,.article-content .warn ul,.article-content blockquote h4,.article-content blockquote ol,.article-content blockquote p,.article-content blockquote pre,.article-content blockquote ul,.article-content dt h4,.article-content dt ol,.article-content dt p,.article-content dt pre,.article-content dt ul{width:100%;margin-left:0}.article-content .note>:last-child,.article-content .warn>:last-child,.article-content blockquote>:last-child,.article-content dt>:last-child{margin-bottom:0}.article-content .note .tooltip,.article-content .warn .tooltip,.article-content blockquote .tooltip,.article-content dt .tooltip{color:#fff}.article-content .note,.article-content blockquote{font-style:italic;color:#4ed8a0;border-color:#4ed8a0;background-color:#292933}.article-content .note code,.article-content blockquote code{color:#b1b6ff;background:#1c1c21;border:1px solid #3c4b4c}.article-content .note pre,.article-content blockquote pre{background:#1c1c21;border-color:#3c4b4c}.article-content .note pre code,.article-content blockquote pre code{border:none}.article-content .warn,.article-content dt{color:#ff8564;border-color:#ff8564;background-color:#292933}.article-content .warn code,.article-content dt code{color:#b1b6ff;background:#1c1c21;border:1px solid #673c2c}.article-content .warn pre,.article-content dt pre{background:#1c1c21;border-color:#673c2c}.article-content .warn pre code,.article-content dt pre code{border:none}.article-content code{font-family:Consolas,"Lucida Console",Monaco,monospace;-moz-tab-size:1;-o-tab-size:1;tab-size:1;direction:ltr;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none;font-size:.8em!important;font-style:normal!important;display:inline;border-radius:3px;border-width:1px;border-color:#2c2c38;border-style:solid;padding:.1em .5em;-webkit-font-smoothing:subpixel-antialiased!important;-moz-osx-font-smoothing:auto!important;font-weight:400!important;color:#b1b6ff;background-color:#1c1c21}.article-content pre{display:block;padding:.75em 1em;overflow:auto;border-radius:3px;border-style:solid;border-width:1px 1px 1px 6px;background-color:#1c1c21;border-color:#2c2c38;z-index:99;line-height:1.1em!important}.article-content pre code{white-space:pre;word-spacing:normal;word-break:normal;border:none;padding:0;border-radius:0;background-color:transparent}.article-content pre::-webkit-scrollbar{background-color:#1c1c21;width:16px}.article-content pre::-webkit-scrollbar-track{background-color:#1c1c21}.article-content pre::-webkit-scrollbar-thumb{border:4px solid #1c1c21;background-color:#2c2c38;border-radius:calc(16px / 2)}.page-nav-btns{display:-webkit-box;display:-ms-flexbox;display:flex;position:relative;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin:3em 0 2em}.page-nav-btns a{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#fff!important;font-size:.95rem;padding:.75rem 1rem;margin:0 .15rem}.page-nav-btns a.prev{position:absolute;left:0}.page-nav-btns a.prev:before{content:'\e804';font-family:icomoon;font-size:.85rem;font-weight:400;vertical-align:middle;display:inline;margin-right:.85rem}.page-nav-btns a.next{position:absolute;right:0}.page-nav-btns a.next:after{content:'\e805';font-family:icomoon;font-size:.85rem;font-weight:400;vertical-align:middle;display:inline;margin-left:.85rem}.truncate{position:relative;margin-bottom:3.5rem}.truncate .truncate-bottom{position:absolute;bottom:-30px;width:100%;z-index:100%;height:auto}.truncate a.truncate-toggle{display:block;width:100px;margin:0 auto;color:#bec2cc;background:#202028;padding:.45rem;text-align:center;font-size:.75rem;text-transform:uppercase;border-radius:3px;-webkit-transition:color .2s;transition:color .2s}.truncate a.truncate-toggle:before{content:"Show Less"}.truncate a.truncate-toggle:hover{color:#4591ed}.truncate.closed{min-height:200px;max-height:25vh;overflow:hidden}.truncate.closed .truncate-bottom{bottom:0;background-image:-webkit-gradient(linear,left top, left bottom,from(rgba(32,32,40,0)),to(#202028));background-image:linear-gradient(to bottom,rgba(32,32,40,0),#202028);height:100px}.truncate.closed a.truncate-toggle{margin-top:75px}.truncate.closed a.truncate-toggle:before{content:"Show More"}.tooltip{position:relative;display:inline-block;z-index:10;font-weight:900;color:#32b08c}.tooltip-container{position:absolute;top:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);overflow:visible;visibility:hidden}.tooltip-text{font-weight:600;line-height:2em;height:2em;position:absolute;border-radius:3px;padding:0 .75em;font-size:.9rem;left:50%;-webkit-transform:translate(-50%,-1.875rem);transform:translate(-50%,-1.875rem);-webkit-transition:all .2s ease;transition:all .2s ease;white-space:nowrap;opacity:0;font-style:normal!important;color:#434453;background-color:#f6f6f8}.tooltip-text:after{content:'';position:absolute;left:50%;bottom:-14px;-webkit-transform:translateX(-50%);transform:translateX(-50%);border-top:8px solid #f6f6f8;border-right:8px solid transparent;border-bottom:8px solid transparent;border-left:8px solid transparent}.tooltip:hover .tooltip-container{visibility:visible}.tooltip:hover .tooltip-text{opacity:1;-webkit-transform:translate(-50%,-2rem);transform:translate(-50%,-2rem)}.old-version{width:100%;display:inline-block;border-radius:3px;font-size:1em;line-height:1.25em;padding:1.5em 1.5em 1.5em 4em;color:#ff8564;background-color:#292933;position:relative;margin-bottom:1em}.old-version:after{content:"\ea0a";font-family:icomoon;position:absolute;top:50%;left:2em;-webkit-transform:translate(-50%,-50%) scale(1.5,1.5);transform:translate(-50%,-50%) scale(1.5,1.5);font-size:1em}.section-landing h2.no-paragraph{margin:0 0 1rem;border:none}.view-in-chronograf{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;position:relative;background-color:#2c2c38;margin-top:-1.1rem;margin-bottom:1rem;padding:.15rem;font-size:.8rem;border-radius:0 0 3px 3px;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.view-in-chronograf .chronograf-btn{display:inline-block;padding:.45rem .6rem;color:#fff!important;background:-webkit-gradient(linear,right top, left top,from(#9394ff),to(#22adf6));background:linear-gradient(to left,#9394ff,#22adf6);border-radius:calc(3px / 2);-webkit-transition:all .5s ease;transition:all .5s ease}.view-in-chronograf .chronograf-btn:after{content:'\e801';margin-left:.4rem;font-family:icomoon}.view-in-chronograf .chronograf-btn:hover{color:#fff!important;opacity:1}.view-in-chronograf .settings{opacity:.25;color:#bec2cc!important;margin-right:.75em;-webkit-transition:opacity .2s ease;transition:opacity .2s ease}.view-in-chronograf .settings:hover{opacity:1}.modal-overlay{display:none;position:fixed;z-index:1000;left:0;top:0;width:100%;height:100%;overflow:auto;opacity:.75;background:-webkit-gradient(linear,left top, left bottom,from(#9394ff),to(#4591ed));background:linear-gradient(#9394ff,#4591ed)}.modal-content{display:none;background:#202028;padding:2rem 2rem 1.5rem;border-radius:3px;position:fixed;top:10vh;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);z-index:1001;width:90vw;max-width:38rem;-webkit-transition:top .4s ease;transition:top .4s ease}.modal-content.open{top:40vh}.modal-content input{width:100%;min-width:10rem;border-radius:3px;border:2px solid #383846;background-color:#383846;padding:.5rem;font-weight:400;font-size:1rem;outline:0;-webkit-transition:border-color .3s ease,color .3s ease;transition:border-color .3s ease,color .3s ease}.modal-content input:focus{border-color:#22adf6}.modal-content button{border:none;outline:0}.modal-content button:focus{background:#4591ed!important}.modal-content label{display:block;margin-bottom:.4rem;font-weight:600}#default-chronograf-url{display:inline-block;margin:.5rem 0 0 .25rem;font-size:.8rem;font-style:italic;font-weight:400}#default-chronograf-url:hover{text-transform:underline}.flex-form{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.flex-form .save-btn{width:5.5rem;margin:0 0 0 .25rem;text-align:center;padding:.75rem 1rem;color:#fff;border-radius:3px;font-weight:600;-webkit-transition:background .2s;transition:background .2s}@media (max-width:500px){.flex-form{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column;flex-flow:column}.flex-form .save-btn{width:100%;margin:.25rem 0 0}#default-chronograf-url{display:block;margin:1rem auto 0}}#save-chronograf-url button{background:#9394ff}#save-chronograf-url button:hover{background:#4591ed}@media (min-width:900px){.article{padding-left:18rem}.article-section{padding:3rem}.article-content code,.article-content pre,.article-content td,.article-content th{border-width:2px}.article-content pre{border-left-width:6px}}@media (min-width:1200px){.article{padding-left:23rem}.article-section{padding:4.5rem}.old-version{width:60%}}@media (min-width:1900px){.article{padding-left:28rem}.article-section{padding:5rem 11rem}.article-content{font-size:1.125rem}}.homepage{overflow:auto;min-height:calc(100vh - 4rem);width:100%;z-index:2;background:#2c2c38;background:-webkit-gradient(linear,left top, right top,color-stop(0, #2c2c38),to(#0f0e15));background:linear-gradient(to right,#2c2c38 0,#0f0e15 100%);font-size:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.homepage .cards-enterprise,.homepage .cards-oss,.homepage .cards-special{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;width:100%;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-flex:1;-ms-flex:1;flex:1}.homepage--card{width:100%;display:inline-block;overflow:hidden;position:relative}.homepage--card-mask{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.1;-webkit-transition:opacity .75s ease,-webkit-transform .75s ease;transition:opacity .75s ease,-webkit-transform .75s ease;transition:opacity .75s ease,transform .75s ease;transition:opacity .75s ease,transform .75s ease,-webkit-transform .75s ease;z-index:1;background-attachment:scroll;background-size:cover;background-position:center center;background-repeat:no-repeat;-webkit-transform:scale(1,1);transform:scale(1,1)}.homepage--card:hover .homepage--card-mask{opacity:1;-webkit-transform:scale(1.2,1.2);transform:scale(1.2,1.2)}.homepage--card:hover .homepage--card-title{color:#fff!important}.homepage--card-container{position:relative;z-index:2;width:100%;display:inline-block;text-align:center;padding:4rem 3rem;font-size:0}.homepage--card-container a:active,.homepage--card-container a:link,.homepage--card-container a:visited{color:#4591ed;-webkit-transition:color .25s ease;transition:color .25s ease;text-decoration:none}.homepage--card-container a:hover{color:#00c9ff}.homepage--card-description,.homepage--card-title{text-align:left;display:inline-block;width:100%;vertical-align:middle}.homepage--card-title{font-size:2rem;font-family:Klavika-Light,sans-serif;font-weight:200;font-style:italic;color:#4591ed;margin-bottom:.5em;-webkit-transition:color .75s ease;transition:color .75s ease}.homepage--card-description{font-size:1rem;color:#bec2cc;line-height:1.4em;font-weight:400}.homepage--card-link{display:inline-block;font-size:.875rem;font-weight:600;margin-left:.25rem;padding:2px 11px;border-radius:3px}.homepage--card-link:first-of-type{margin-top:1rem}.homepage--card.card-telegraf .homepage--card-mask{background-image:url(/img/home-telegraf.svg);background-color:#f95f53}.homepage--card.card-telegraf .homepage--card-description{color:#fff}.homepage--card.card-telegraf .homepage--card-title{color:#ff8564}.homepage--card.card-telegraf a.homepage--card-link:active,.homepage--card.card-telegraf a.homepage--card-link:link,.homepage--card.card-telegraf a.homepage--card-link:visited{color:#fff;-webkit-transition:background-color .25s ease,color .25s ease;transition:background-color .25s ease,color .25s ease}.homepage--card.card-telegraf a.homepage--card-link:hover{color:#ff8564;background-color:#fff}.homepage--card.card-influxdb .homepage--card-mask{background-image:url(/img/home-influxdb.svg);background-color:#4591ed}.homepage--card.card-influxdb .homepage--card-description{color:#fff}.homepage--card.card-influxdb .homepage--card-title{color:#00c9ff}.homepage--card.card-influxdb a.homepage--card-link:active,.homepage--card.card-influxdb a.homepage--card-link:link,.homepage--card.card-influxdb a.homepage--card-link:visited{color:#fff;-webkit-transition:background-color .25s ease,color .25s ease;transition:background-color .25s ease,color .25s ease}.homepage--card.card-influxdb a.homepage--card-link:hover{color:#22adf6;background-color:#fff}.homepage--card.card-chronograf .homepage--card-mask{background-image:url(/img/home-chronograf.svg);background-color:#7a65f2}.homepage--card.card-chronograf .homepage--card-description{color:#fff}.homepage--card.card-chronograf .homepage--card-title{color:#9394ff}.homepage--card.card-chronograf a.homepage--card-link:active,.homepage--card.card-chronograf a.homepage--card-link:link,.homepage--card.card-chronograf a.homepage--card-link:visited{color:#fff;-webkit-transition:background-color .25s ease,color .25s ease;transition:background-color .25s ease,color .25s ease}.homepage--card.card-chronograf a.homepage--card-link:hover{color:#9394ff;background-color:#fff}.homepage--card.card-kapacitor .homepage--card-mask{background-image:url(/img/home-kapacitor.svg);background-color:#4ed8a0}.homepage--card.card-kapacitor .homepage--card-description{color:#fff}.homepage--card.card-kapacitor .homepage--card-title{color:#4ed8a0}.homepage--card.card-kapacitor a.homepage--card-link:active,.homepage--card.card-kapacitor a.homepage--card-link:link,.homepage--card.card-kapacitor a.homepage--card-link:visited{color:#fff;-webkit-transition:background-color .25s ease,color .25s ease;transition:background-color .25s ease,color .25s ease}.homepage--card.card-kapacitor a.homepage--card-link:hover{color:#4ed8a0;background-color:#fff}.homepage--card.card-enterprise_kapacitor .homepage--card-mask{background-image:url(/img/home-kapacitor.svg);background-color:#4ed8a0}.homepage--card.card-enterprise_kapacitor .homepage--card-description{color:#fff}.homepage--card.card-enterprise_kapacitor .homepage--card-title{color:#4ed8a0}.homepage--card.card-enterprise_kapacitor a.homepage--card-link:active,.homepage--card.card-enterprise_kapacitor a.homepage--card-link:link,.homepage--card.card-enterprise_kapacitor a.homepage--card-link:visited{color:#fff;-webkit-transition:background-color .25s ease,color .25s ease;transition:background-color .25s ease,color .25s ease}.homepage--card.card-enterprise_kapacitor a.homepage--card-link:hover{color:#4ed8a0;background-color:#fff}.homepage--card.card-enterprise_influxdb .homepage--card-mask{background-image:url(/img/home-influxdb.svg);background-color:#4591ed}.homepage--card.card-enterprise_influxdb .homepage--card-description{color:#fff}.homepage--card.card-enterprise_influxdb .homepage--card-title{color:#00c9ff}.homepage--card.card-enterprise_influxdb a.homepage--card-link:active,.homepage--card.card-enterprise_influxdb a.homepage--card-link:link,.homepage--card.card-enterprise_influxdb a.homepage--card-link:visited{color:#fff;-webkit-transition:background-color .25s ease,color .25s ease;transition:background-color .25s ease,color .25s ease}.homepage--card.card-enterprise_influxdb a.homepage--card-link:hover{color:#22adf6;background-color:#fff}.homepage--card.card-flux .homepage--card-mask{background-image:url(/img/home-flux.svg);background-color:#15a194;opacity:1}.homepage--card.card-flux .homepage--card-description{color:#fff}.homepage--card.card-flux .homepage--card-title{color:#fff}.homepage--card.card-flux a.homepage--card-link:active,.homepage--card.card-flux a.homepage--card-link:link,.homepage--card.card-flux a.homepage--card-link:visited{color:#fff;-webkit-transition:background-color .25s ease,color .25s ease;transition:background-color .25s ease,color .25s ease}.homepage--card.card-flux a.homepage--card-link:active.download,.homepage--card.card-flux a.homepage--card-link:link.download,.homepage--card.card-flux a.homepage--card-link:visited.download{display:none}.homepage--card.card-flux a.homepage--card-link:hover{color:#32b08c;background-color:#fff}.homepage--card.card-platform{width:100%;background:-webkit-gradient(linear,left top, right top,from(#4591ed),to(#22adf6));background:linear-gradient(to right,#4591ed,#22adf6);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.homepage--card.card-platform .homepage--card-container{padding-bottom:3rem}.homepage--card.card-platform .homepage--card-mask{background-image:url(/img/home-influxdb.svg);background-color:#4591ed;opacity:.9}.homepage--card.card-platform .homepage--card-description{color:#fff;text-align:center}.homepage--card.card-platform .homepage--card-title{color:#fff;text-align:center;font-size:2.15rem}.homepage--card.card-platform a.homepage--card-link:active,.homepage--card.card-platform a.homepage--card-link:link,.homepage--card.card-platform a.homepage--card-link:visited{color:#fff;-webkit-transition:background-color .25s ease,color .25s ease;transition:background-color .25s ease,color .25s ease}.homepage--card.card-platform a.homepage--card-link:hover{color:#22adf6;background-color:#fff}.homepage--card.card-platform a.btn{margin:1.75rem 0 1rem;padding:1em 1.5em;display:inline-block;background:#fff;color:#22adf6;border-radius:3px;font-size:1rem;font-weight:700;-webkit-transition:all .2s;transition:all .2s;-webkit-box-shadow:0 0 15px rgba(255,255,255,0);box-shadow:0 0 15px rgba(255,255,255,0)}.homepage--card.card-platform a.btn:hover{-webkit-box-shadow:0 0 15px #fff;box-shadow:0 0 15px #fff}@media (min-width:900px){.homepage--card{width:50%;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}}@media (min-width:1200px){.homepage--card-container{padding:3.5rem}.homepage--card-description{font-size:1.075rem}.homepage--card{width:25%;height:auto}.homepage--card.card-platform{width:75%}.homepage--card.card-enterprise_influxdb,.homepage--card.card-enterprise_kapacitor{width:50%}}@media (min-width:1900px){.homepage--card-container{padding:4rem}.homepage--card-description{font-size:1.125rem}}.error-page{overflow:scroll;top:4rem;height:100%;width:100%;background:#fafafc;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #fafafc),to(#f0fcff));background:linear-gradient(to bottom,#fafafc 0,#f0fcff 100%)}.error-content{margin:15vh auto;width:85%;max-width:400px;min-width:240px;font-size:15px;line-height:19px;color:#676978}.error-content h1{color:#4591ed;display:block;margin:0 auto 50px;padding-top:15px;width:212px;height:212px;border-radius:50%;text-align:center;font-size:90px;font-weight:200;line-height:180px;position:relative;border:2px solid #4591ed}.flex{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-pack:distribute;justify-content:space-around}.wayfinding{margin-bottom:2rem}.btn{display:block;padding:.5rem;background:#4591ed;color:#fff;border-radius:3px;text-align:center;-webkit-transition:background .2s;transition:background .2s}.btn.back{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;margin-right:.35rem}.btn.back:before{content:"\ea41";font-family:icomoon;margin-right:.5rem;font-size:1rem}.btn.project{-webkit-box-flex:3;-ms-flex-positive:3;flex-grow:3;display:none}.btn.project:before{content:"\e801";font-family:icomoon;margin-right:.5rem;-webkit-box-flex:3;-ms-flex-positive:3;flex-grow:3}.btn:hover{background:#22adf6}@media (min-width:900px){.error-content{font-size:17px;line-height:22px}}@media (min-width:1900px){.error-content{font-size:21px;line-height:32px}}.tabs-container{margin:2em 0 2em}.tabs{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;border-radius:3px 0 0 3px}.tabs p{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.tabs a{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;margin:2px;font-size:.875em;color:#bec2cc!important;padding:.5em 1em;display:inline-block;text-align:center;border-radius:3px;background-color:rgba(56,56,70,.5);-webkit-transition:background-color .2s,color .2s;transition:background-color .2s,color .2s}.tabs a:hover{color:#f6f6f8!important}.tabs a.is-active{color:#fff!important;background:#4591ed}.tab-content{width:100%}.tab-content>*{width:100%!important;margin-left:0!important}.tab-content:not(:first-child){display:none}.tab-content-container{position:relative;border-radius:0 3px 3px 3px}.code-tabs-content{margin:.75rem 0 3rem;width:100%}.code-tabs-content>*{width:100%!important;margin-left:0!important}.code-tabs-wrapper{margin:1.5rem 0 .5rem}.code-tabs-wrapper .code-tabs p{margin:0;text-align:right;display:block;font-size:.9rem}.code-tabs-wrapper .code-tabs a{padding:.25rem .75rem;margin:0;border-radius:3px 3px 0 0;display:inline-block;background:rgba(44,44,56,.6);color:rgba(190,194,204,.5)!important}.code-tabs-wrapper .code-tabs a:hover{color:#f6f6f8!important}.code-tabs-wrapper .code-tabs a.is-active{background-color:#2c2c38;color:#f6f6f8!important}.code-tabs-wrapper .code-tab-content{padding:0}.code-tabs-wrapper .code-tab-content pre{margin:0 0 3rem;border-radius:3px 0 3px 3px}.code-tabs-wrapper .code-tab-content:not(:first-of-type){display:none}@media (min-width:900px){.tabs-container .tabs a{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0}}.plugin-card{position:relative;padding:1rem 1.5rem;margin-bottom:.5rem;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#1c1c21;border-radius:3px}.plugin-card h3{padding:0;margin-top:.25rem}.plugin-card.new h3:after{content:"New";margin-left:.3rem;padding:.25rem .5rem;font-style:italic;color:#4591ed;font-size:1.2rem}.plugin-card p.meta{margin:.75rem 0;font-weight:500;color:#bec2cc;line-height:1.75rem}.plugin-card p.meta .deprecated{margin-left:.5rem;font-style:italic;color:#e90}.plugin-card .info>p:last-child{margin-bottom:.5rem}.plugin-card .info>ul:last-child{margin-bottom:.5rem}.plugin-card .info>ol:last-child{margin-bottom:.5rem}.plugin-card .github-link{position:absolute;color:#fff!important;top:.5rem;right:.5rem;opacity:0;-webkit-transition:opacity .2s,background .2s,color 2s;transition:opacity .2s,background .2s,color 2s}.plugin-card .github-link .icon-github{font-size:1.2rem;margin:0 .25rem 0 0}.plugin-card:hover .github-link{opacity:1}.plugin-card blockquote{border-color:#4ed8a0;background:rgba(41,41,51,.5)}.plugin-card blockquote h3,.plugin-card blockquote h4,.plugin-card blockquote h5,.plugin-card blockquote h6{color:#f6f6f8}.plugin-card blockquote li,.plugin-card blockquote p{color:#4ed8a0;font-size:1rem;font-style:normal}.plugin-card blockquote strong{color:inherit}.plugin-card blockquote a{color:#ff8564}.plugin-card blockquote a code:after{border-color:transparent rgba(177,182,255,.35) transparent transparent}.plugin-card blockquote a:hover{color:#fff}.plugin-card blockquote a:hover code:after{border-color:transparent #fff transparent transparent}.plugin-card blockquote ol li:before{color:#4ed8a0}.plugin-card blockquote code,.plugin-card blockquote pre{color:#b1b6ff;background:#1c1c21}#plugin-filters{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}#plugin-filters .filter-category{-webkit-box-flex:1;-ms-flex:1 1 200px;flex:1 1 200px;margin:0 1.25rem 1.25rem 0;max-width:33%}#plugin-filters .filter-category.two-columns{-webkit-box-flex:1;-ms-flex:1 2 400px;flex:1 2 400px;max-width:66%}#plugin-filters .filter-category.two-columns .filter-list{-webkit-columns:2;-moz-columns:2;columns:2}#plugin-filters h5{border-bottom:1px solid rgba(190,194,204,.25);padding-bottom:.65rem}#plugin-filters .filter-list{padding:0;margin:.5rem 0 0;list-style:none}#plugin-filters .filter-list li{padding:0;margin:0;line-height:1.35rem;list-style-type:none!important}#plugin-filters label{display:block;padding:.25rem 0;color:#bec2cc;position:relative}#plugin-filters label:after{content:attr(data-count);margin-left:.25rem;font-size:.85rem;opacity:.5}#plugin-filters .checkbox{display:inline-block;height:1.15em;width:1.15em;background:rgba(190,194,204,.05);margin-right:.3rem;vertical-align:text-top;border-radius:3px;cursor:pointer;border:1.5px solid rgba(190,194,204,.2);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#plugin-filters input[type=checkbox]{margin-right:-1.1rem;padding:0;vertical-align:top;opacity:0;cursor:pointer}#plugin-filters input[type=checkbox]+.checkbox:after{content:"";display:block;position:absolute;height:.5rem;width:.5rem;border-radius:50%;background:#ff8564;top:.65rem;left:.35rem;opacity:0;-webkit-transform:scale(2);transform:scale(2);-webkit-transition:all .2s;transition:all .2s}#plugin-filters input[type=checkbox]:checked+.checkbox:after{opacity:1;-webkit-transform:scale(1);transform:scale(1)}@media (max-width:1100px){#plugin-filters .filter-category{max-width:50%}#plugin-filters .filter-category.three-columns,#plugin-filters .filter-category.two-columns{max-width:100%}}@media (max-width:800px){#plugin-filters .filter-category{max-width:100%}.plugin-card .github-link{opacity:1;padding:.25rem .35rem .35rem;line-height:0;font-size:1.35rem}.plugin-card .github-link .icon-github{margin:0}.plugin-card .github-link .hide{display:none}}@media (min-width:900px){body{padding-bottom:0}}.article-content .flex-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.article-content .flex-container{margin-right:2rem}.article-content .flex-container.half{width:calc(50% - 2rem)}.article-content .flex-container.third{width:calc(33.33% - 2rem)}.article-content .flex-container.quarter{width:calc(25% - 2rem)}.article-content .flex-container.quarter{width:calc(50% - 2rem)}svg[id^=geo-s2-cells-] .geo-cell{fill:rgba(34,173,246,.25);stroke:#22adf6;stroke-width:3;stroke-linejoin:round;stroke-miterlimit:10}svg[id^=geo-s2-cells-] .geo-region{fill:rgba(122,101,242,.35);stroke:#7a65f2;stroke-width:3;stroke-linejoin:round;stroke-miterlimit:10}svg[id^=geo-s2-cells-] .geo-point{fill:#ff8564}span.key-geo-cell{display:inline-block;vertical-align:middle;margin:0 .5rem .25rem 0;width:1.1em;height:1.1em;border:2px solid #22adf6;background:rgba(34,173,246,.25);border-radius:2px}span.key-geo-region{display:inline-block;vertical-align:middle;margin:0 .5rem .25rem 0;width:1.1em;height:1.1em;border:2px solid #7a65f2;background:rgba(122,101,242,.35);border-radius:2px}span.key-geo-point{display:inline-block;margin:0 .7rem 0 .25rem;width:.65rem;height:.65rem;border-radius:50%;background:#ff8564}body.docs-theme--telegraf .article-content a:active,body.docs-theme--telegraf .article-content a:link,body.docs-theme--telegraf .article-content a:visited{color:#ff8564}body.docs-theme--telegraf .article-content a:hover{color:#fff}body.docs-theme--telegraf .article-content a.top:hover{background:#fff}body.docs-theme--telegraf .article-content a.btn{background:#ff8564}body.docs-theme--telegraf .article-content a.btn:hover{background:#ffb6a0}body.docs-theme--telegraf .article-content.section-landing h2 a.off-page:link:hover{color:#ff8564!important}body.docs-theme--telegraf .sidebar--mask-container .sidebar--mask{background:#ff8564;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #ff8564),to(#7a65f2));background:linear-gradient(to bottom,#ff8564 0,#7a65f2 100%)}body.docs-theme--telegraf .sidebar--section-title a:active,body.docs-theme--telegraf .sidebar--section-title a:link,body.docs-theme--telegraf .sidebar--section-title a:visited{color:#ff8564;font-weight:400}body.docs-theme--telegraf .sidebar--section-title a:hover{color:#fff}body.docs-theme--telegraf a.sidebar--page:hover{color:#fff}body.docs-theme--telegraf .navbar--product-dropdown{background-color:#ff8564}body.docs-theme--telegraf .navbar--product-dropdown:hover{background-color:#ffb6a0}body.docs-theme--telegraf .navbar--product-menu{background:#ff8564;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #ff8564),to(#7a65f2));background:linear-gradient(to bottom,#ff8564 0,#7a65f2 100%)}body.docs-theme--telegraf .tabs a.is-active{background:#ff8564}body.docs-theme--chronograf .article-content a:active,body.docs-theme--chronograf .article-content a:link,body.docs-theme--chronograf .article-content a:visited{color:#9394ff}body.docs-theme--chronograf .article-content a:hover{color:#fff}body.docs-theme--chronograf .article-content a.top:hover{background:#fff}body.docs-theme--chronograf .article-content a.btn{background:#9394ff}body.docs-theme--chronograf .article-content a.btn:hover{background:#b1b6ff}body.docs-theme--chronograf .article-content.section-landing h2 a.off-page:link:hover{color:#9394ff!important}body.docs-theme--chronograf .sidebar--mask-container .sidebar--mask{background:#9394ff;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #9394ff),to(#4591ed));background:linear-gradient(to bottom,#9394ff 0,#4591ed 100%)}body.docs-theme--chronograf .sidebar--section-title a:active,body.docs-theme--chronograf .sidebar--section-title a:link,body.docs-theme--chronograf .sidebar--section-title a:visited{color:#9394ff;font-weight:400}body.docs-theme--chronograf .sidebar--section-title a:hover{color:#fff}body.docs-theme--chronograf a.sidebar--page:hover{color:#fff}body.docs-theme--chronograf .navbar--product-dropdown{background-color:#9394ff}body.docs-theme--chronograf .navbar--product-dropdown:hover{background-color:#b1b6ff}body.docs-theme--chronograf .navbar--product-menu{background:#9394ff;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #9394ff),to(#4591ed));background:linear-gradient(to bottom,#9394ff 0,#4591ed 100%)}body.docs-theme--chronograf .tabs a.is-active{background:#9394ff}body.docs-theme--kapacitor .article-content a:active,body.docs-theme--kapacitor .article-content a:link,body.docs-theme--kapacitor .article-content a:visited{color:#4ed8a0}body.docs-theme--kapacitor .article-content a:hover{color:#fff}body.docs-theme--kapacitor .article-content a.top:hover{background:#fff}body.docs-theme--kapacitor .article-content a.btn{background:#20b76f}body.docs-theme--kapacitor .article-content a.btn:hover{background:#4ed8a0}body.docs-theme--kapacitor .article-content.section-landing h2 a.off-page:link:hover{color:#4ed8a0!important}body.docs-theme--kapacitor .sidebar--mask-container .sidebar--mask{background:#4ed8a0;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #4ed8a0),to(#22adf6));background:linear-gradient(to bottom,#4ed8a0 0,#22adf6 100%)}body.docs-theme--kapacitor .sidebar--section-title a:active,body.docs-theme--kapacitor .sidebar--section-title a:link,body.docs-theme--kapacitor .sidebar--section-title a:visited{color:#4ed8a0;font-weight:400}body.docs-theme--kapacitor .sidebar--section-title a:hover{color:#fff}body.docs-theme--kapacitor a.sidebar--page:hover{color:#fff}body.docs-theme--kapacitor .navbar--product-dropdown{background-color:#4ed8a0}body.docs-theme--kapacitor .navbar--product-dropdown:hover{background-color:#7ce490}body.docs-theme--kapacitor .navbar--product-menu{background:#4ed8a0;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #4ed8a0),to(#22adf6));background:linear-gradient(to bottom,#4ed8a0 0,#22adf6 100%)}body.docs-theme--kapacitor .tabs a.is-active{background:#4ed8a0}body.docs-theme--enterprise_kapacitor .article-content a:active,body.docs-theme--enterprise_kapacitor .article-content a:link,body.docs-theme--enterprise_kapacitor .article-content a:visited{color:#4ed8a0}body.docs-theme--enterprise_kapacitor .article-content a:hover{color:#fff}body.docs-theme--enterprise_kapacitor .article-content a.top:hover{background:#fff}body.docs-theme--enterprise_kapacitor .article-content a.btn{background:#20b76f}body.docs-theme--enterprise_kapacitor .article-content a.btn:hover{background:#4ed8a0}body.docs-theme--enterprise_kapacitor .article-content.section-landing h2 a.off-page:link:hover{color:#4ed8a0!important}body.docs-theme--enterprise_kapacitor .sidebar--mask-container .sidebar--mask{background:#4ed8a0;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #4ed8a0),to(#22adf6));background:linear-gradient(to bottom,#4ed8a0 0,#22adf6 100%)}body.docs-theme--enterprise_kapacitor .sidebar--section-title a:active,body.docs-theme--enterprise_kapacitor .sidebar--section-title a:link,body.docs-theme--enterprise_kapacitor .sidebar--section-title a:visited{color:#4ed8a0;font-weight:400}body.docs-theme--enterprise_kapacitor .sidebar--section-title a:hover{color:#fff}body.docs-theme--enterprise_kapacitor a.sidebar--page:hover{color:#fff}body.docs-theme--enterprise_kapacitor .navbar--product-dropdown{background-color:#4ed8a0}body.docs-theme--enterprise_kapacitor .navbar--product-dropdown:hover{background-color:#7ce490}body.docs-theme--enterprise_kapacitor .navbar--product-menu{background:#4ed8a0;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #4ed8a0),to(#22adf6));background:linear-gradient(to bottom,#4ed8a0 0,#22adf6 100%)}body.docs-theme--enterprise_kapacitor .tabs a.is-active{background:#4ed8a0}body.docs-theme--flux .article-content a:active,body.docs-theme--flux .article-content a:link,body.docs-theme--flux .article-content a:visited{color:#4ed8a0}body.docs-theme--flux .article-content a:hover{color:#fff}body.docs-theme--flux .article-content a.top:hover{background:#fff}body.docs-theme--flux .article-content.section-landing h2 a.off-page:link:hover{color:#4ed8a0!important}body.docs-theme--flux .sidebar--mask-container .sidebar--mask{background:#4ed8a0;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #4ed8a0),to(#22adf6));background:linear-gradient(to bottom,#4ed8a0 0,#22adf6 100%)}body.docs-theme--flux .sidebar--section-title a:active,body.docs-theme--flux .sidebar--section-title a:link,body.docs-theme--flux .sidebar--section-title a:visited{color:#4ed8a0;font-weight:400}body.docs-theme--flux .sidebar--section-title a:hover{color:#fff}body.docs-theme--flux a.sidebar--page:hover{color:#fff}body.docs-theme--flux .navbar--product-dropdown{background-color:#4ed8a0}body.docs-theme--flux .navbar--product-dropdown:hover{background-color:#7ce490}body.docs-theme--flux .navbar--product-menu{background:#4ed8a0;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #4ed8a0),to(#22adf6));background:linear-gradient(to bottom,#4ed8a0 0,#22adf6 100%)}body.docs-theme--flux .tabs a.is-active{background:#4ed8a0} /*# sourceMappingURL=docs-default.css.map */ diff --git a/static/css/docs-default.css.map b/static/css/docs-default.css.map index f219e7223d..b7c68bff81 100644 --- a/static/css/docs-default.css.map +++ b/static/css/docs-default.css.map @@ -1 +1 @@ -{"version":3,"sources":["variables.less","icon-font.less","theme-dark.less","docs-default.less","docs-default.css","normalize-3.0.2.less","syntax.less","layout.less","layout-navbar.less","layout-search-overrides.less","layout-sidebar.less","layout-sidebar-ads.less","layout-article.less","layout-home.less","layout-error-pages.less","tabs.less","telegraf-plugins.less","theme-telegraf.less","theme-chronograf.less","theme-kapacitor.less","theme-enterprise_kapacitor.less","theme-flux.less"],"names":[],"mappings":"AAsBA,cACC,+FACA,eAAA,CCxBD,WACC,oBACA,qCACA,sRAKA,gBACA,iBAAA,CAGD,MACC,oBACA,WACA,kBACA,gBACA,oBACA,oBACA,cAGA,mCACA,iCAAA,CAGD,kBACI,eAAS,CAEb,kBACI,eAAS,CAEb,sBACI,eAAS,CAEb,kBACI,eAAS,CAEb,wBACI,eAAS,CAEb,sBACI,eAAS,CAEb,wBACI,eAAS,CAEb,yBACI,eAAS,CAEb,oBACI,eAAS,CAEb,uBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,kBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,uBACI,eAAS,CAEb,uBACI,eAAS,CAEb,yBACI,eAAS,CAEb,iBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,uBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,mBACI,eAAS,CAEb,iBACI,eAAS,CAEb,kBACI,eAAS,CAEb,wBACI,eAAS,CAEb,qBACI,eAAS,CAEb,0BACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,oBACI,eAAS,CAEb,wBACI,eAAS,CAEb,mBACI,eAAS,CAEb,kBACI,eAAS,CAEb,kBACI,eAAS,CAEb,0BACI,eAAS,CAEb,kBACI,eAAS,CAEb,oBACI,eAAS,CAEb,oBACI,eAAS,CAEb,mBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,wBACI,eAAS,CAEb,qBACI,eAAS,CAEb,kBACI,eAAS,CAEb,iBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,qBACI,eAAS,CAEb,uBACI,eAAS,CAEb,qBACI,eAAS,CAEb,wBACI,eAAS,CAEb,yBACI,eAAS,CAEb,wBACI,eAAS,CAEb,0BACI,eAAS,CAEb,wBACI,eAAS,CAEb,uBACI,eAAS,CAEb,wBACI,eAAS,CAEb,sBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,yBACI,eAAS,CAEb,yBACI,eAAS,CAEb,0BACI,eAAS,CAEb,6BACI,eAAS,CAEb,2BACI,eAAS,CAEb,uBACI,eAAS,CAEb,wBACI,eAAS,CAEb,qBACI,eAAS,CAEb,oBACI,eAAS,CAEb,oBACI,eAAS,CAEb,kBACI,eAAS,CAEb,yBACI,eAAS,CAEb,uBACI,eAAS,CAEb,wBACI,eAAS,CAEb,sBACI,eAAS,CAEb,yBACI,eAAS,CAEb,wBACI,eAAS,CAEb,sBACI,eAAS,CAEb,mBACI,eAAS,CAEb,2BACI,eAAS,CAEb,0BACI,eAAS,CAEb,qBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,uBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,iBACI,eAAS,CAEb,kBACI,eAAS,CAEb,qBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,mBACI,eAAS,CAEb,kBACI,eAAS,CAEb,uBACI,eAAS,CAEb,sBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,qBACI,eAAS,CAEb,oBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,oBACI,eAAS,CAEb,gBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,qBACI,eAAS,CAEb,wBACI,eAAS,CAEb,sBACI,eAAS,CAEb,oBACI,eAAS,CAEb,yBACI,eAAS,CAEb,mBACI,eAAS,CAEb,sBACI,eAAS,CAEb,kBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,qBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,uBACI,eAAS,CAEb,wBACI,eAAS,CAEb,wBACI,eAAS,CAEb,sBACI,eAAS,CAEb,yBACI,eAAS,CAEb,0BACI,eAAS,CAEb,wBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,uBACI,eAAS,CAEb,uBACI,eAAS,CAEb,wBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,qBACI,eAAS,CAEb,oBACI,eAAS,CAEb,sBACI,eAAS,CAEb,qBACI,eAAS,CAEb,iBACI,eAAS,CAEb,kBACI,eAAS,CAEb,kBACI,eAAS,CAEb,sBACI,eAAS,CAEb,oBACI,eAAS,CAEb,uBACI,eAAS,CAEb,wBACI,eAAS,CAEb,iBACI,eAAS,CAEb,kBACI,eAAS,CAEb,oBACI,eAAS,CAEb,wBACI,eAAS,CAEb,qBACI,eAAS,CAEb,iBACI,eAAS,CAEb,uBACI,eAAS,CAEb,wBACI,eAAS,CAEb,wBACI,eAAS,CAEb,yBACI,eAAS,CAEb,oBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,iBACI,eAAS,CAEb,yBACI,eAAS,CAEb,kBACI,eAAS,CAEb,oBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,kBACI,eAAS,CAEb,iBACI,eAAS,CAEb,oBACI,eAAS,CAEb,iBACI,eAAS,CAEb,kBACI,eAAS,CAEb,uBACI,eAAS,CAEb,sBACI,eAAS,CAEb,mBACI,eAAS,CAEb,kBACI,eAAS,CAEb,2BACI,eAAS,CAEb,oBACI,eAAS,CAEb,oBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,wBACI,eAAS,CAEb,uBACI,eAAS,CAEb,2BACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,kBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,4BACI,eAAS,CAEb,0BACI,eAAS,CAEb,yBACI,eAAS,CAEb,uBACI,eAAS,CAEb,qBACI,eAAS,CAEb,uBACI,eAAS,CAEb,qBACI,eAAS,CAEb,oBACI,eAAS,CAEb,mBACI,eAAS,CAEb,kBACI,eAAS,CAEb,kBACI,eAAS,CAEb,wBACI,eAAS,CAEb,iBACI,eAAS,CAEb,sBACI,eAAS,CAEb,uBACI,eAAS,CAEb,yBACI,eAAS,CAEb,sBACI,eAAS,CAEb,uBACI,eAAS,CAEb,iBACI,eAAS,CAEb,sBACI,eAAS,CAEb,iCACI,eAAS,CAEb,wBACI,eAAS,CAEb,uBACI,eAAS,CAEb,uBACI,eAAS,CAEb,mBACI,eAAS,CAEb,0BACI,eAAS,CAEb,iBACI,eAAS,CAEb,mBACI,eAAS,CAEb,uBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,iBACI,eAAS,CAEb,kBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,uBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,uBACI,eAAS,CAEb,wBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,wBACI,eAAS,CAEb,yBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,yBACI,eAAS,CAEb,wBACI,eAAS,CAEb,wBACI,eAAS,CAEb,qBACI,eAAS,CAEb,0BACI,eAAS,CAEb,sBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,kBACI,eAAS,CAEb,2BACI,eAAS,CAEb,qBACI,eAAS,CAEb,mBACI,eAAS,CAEb,uBACI,eAAS,CAEb,wBACI,eAAS,CAEb,yBACI,eAAS,CAEb,mBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,kBACI,eAAS,CAEb,sBACI,eAAS,CAEb,kBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,mBACI,eAAS,CAEb,uBACI,eAAS,CAEb,sBACI,eAAS,CAEb,mBACI,eAAS,CAEb,kBACI,eAAS,CAEb,uBACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,yBACI,eAAS,CAEb,2BACI,eAAS,CAEb,wBACI,eAAS,CAEb,yBACI,eAAS,CAEb,0BACI,eAAS,CAEb,6BACI,eAAS,CAEb,6BACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,uBACI,eAAS,CAEb,qBACI,eAAS,CAEb,2BACI,eAAS,CAEb,uBACI,eAAS,CAEb,4BACI,eAAS,CAEb,0BACI,eAAS,CAEb,8BACI,eAAS,CAEb,yBACI,eAAS,CAEb,6BACI,eAAS,CAEb,yBACI,eAAS,CAEb,4BACI,eAAS,CAEb,uBACI,eAAS,CAEb,6BACI,eAAS,CAEb,0BACI,eAAS,CAEb,+BACI,eAAS,CAEb,yBACI,eAAS,CAEb,8BACI,eAAS,CAEb,yBACI,eAAS,CAEb,uBACI,eAAS,CAEb,0BACI,eAAS,CAEb,yBACI,eAAS,CAEb,yBACI,eAAS,CAEb,iBACI,eAAS,CAEb,qBACI,eAAS,CAEb,uBACI,eAAS,CAEb,4BACI,eAAS,CAEb,6BACI,eAAS,CAEb,8BACI,eAAS,CAEb,gCACI,eAAS,CAEb,6BACI,eAAS,CAEb,8BACI,eAAS,CAEb,qBACI,eAAS,CAEb,mBACI,eAAS,CAEb,kBACI,eAAS,CAEb,iBACI,eAAS,CAEb,8BACI,eAAS,CAEb,gCACI,eAAS,CAEb,2BACI,eAAS,CAEb,4BACI,eAAS,CAEb,6BACI,eAAS,CAEb,kBACI,eAAS,CAEb,wBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,oBACI,eAAS,CAEb,kBACI,eAAS,CAEb,sBACI,eAAS,CAEb,uBACI,eAAS,CAEb,yBACI,eAAS,CAEb,wBACI,eAAS,CAEb,uBACI,eAAS,CAEb,kBACI,eAAS,CAEb,uBACI,eAAS,CAEb,oBACI,eAAS,CAEb,2BACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,wBACI,eAAS,CAEb,yBACI,eAAS,CAEb,uBACI,eAAS,CAEb,0BACI,eAAS,CAEb,wBACI,eAAS,CAEb,wBACI,eAAS,CAEb,uBACI,eAAS,CAEb,8BACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,6BACI,eAAS,CAEb,qBACI,eAAS,CAEb,iBACI,eAAS,CAEb,iBACI,eAAS,CAEb,qBACI,eAAS,CAEb,4BACI,eAAS,CAEb,8BACI,eAAS,CAEb,6BACI,eAAS,CAEb,+BACI,eAAS,CAEb,6BACI,eAAS,CAEb,6BACI,eAAS,CAEb,mBACI,eAAS,CAEb,qBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,sBACI,eAAS,CAEb,oBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,qBACI,eAAS,CAEb,yBACI,eAAS,CAEb,0BACI,eAAS,CAEb,0BACI,eAAS,CAEb,0BACI,eAAS,CAEb,sBACI,eAAS,CAEb,uBACI,eAAS,CAEb,uBACI,eAAS,CAEb,kBACI,eAAS,CAEb,uBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,oBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,oBACI,eAAS,CAEb,oBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,qBACI,eAAS,CAEb,qBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,uBACI,eAAS,CAEb,uBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,wBACI,eAAS,CAEb,yBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,qBACI,eAAS,CAEb,qBACI,eAAS,CAEb,qBACI,eAAS,CAEb,uBACI,eAAS,CAEb,wBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,mBACI,eAAS,CAEb,iBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,wBACI,eAAS,CAEb,yBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,sBACI,eAAS,CAEb,uBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,uBACI,eAAS,CAEb,yBACI,eAAS,CAEb,0BACI,eAAS,CAEb,2BACI,eAAS,CAEb,uBACI,eAAS,CAEb,wBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,wBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,qBACI,eAAS,CAEb,kBACI,eAAS,CAEb,sBACI,eAAS,CAEb,6BACI,eAAS,CAEb,uBACI,eAAS,CAEb,wBACI,eAAS,CAEb,yBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,kBACI,eAAS,CAEb,iBACI,eAAS,CAEb,iBACI,eAAS,CAEb,qBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,gBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CC76Cb,qBAEE,4BACA,4BACA,kCACA,mBAAA,CALF,wBAQE,aAAA,CARF,wHAYG,oBAAA,CCjGH,mBAAqB,YAAA,CCqiDrB,4DChjDA,KACE,uBACA,0BACA,6BAAA,CAOF,KACE,SACA,6DACA,mCACA,iCAAA,CAaF,2FAaE,aAAA,CAQF,4BAIE,qBACA,uBAAA,CAQF,sBACE,aACA,QAAA,CAQF,kBAEE,YAAA,CAUF,EACE,4BAAA,CAOF,iBAEE,SAAA,CAUF,YACE,wBAAA,CAOF,SAEE,eAAA,CAOF,IACE,iBAAA,CAQF,GACE,cACA,cAAA,CAOF,KACE,gBACA,UAAA,CAOF,MACE,aAAA,CAOF,QAEE,cACA,cACA,kBACA,uBAAA,CAGF,IACE,SAAA,CAGF,IACE,aAAA,CAUF,IACE,QAAA,CAOF,eACE,eAAA,CAUF,OACE,eAAA,CAOF,GAEE,+BAAA,AACA,uBAAA,QAAA,CAOF,IACE,aAAA,CAOF,kBAIE,gCACA,aAAA,CAkBF,sCAKE,cACA,aACA,QAAA,CAOF,OACE,gBAAA,CAUF,cAEE,mBAAA,CAWF,oEAIE,0BACA,cAAA,CAOF,sCAEE,cAAA,CAOF,iDAEE,SACA,SAAA,CAQF,MACE,kBAAA,CAWF,uCAEE,8BAAA,AACA,sBAAA,SAAA,CASF,4FAEE,WAAA,CASF,mBACE,6BACA,AACA,+BACA,sBAAA,CASF,+FAEE,uBAAA,CAOF,SACE,wBACA,aACA,0BAAA,CAQF,OACE,SACA,SAAA,CAOF,SACE,aAAA,CAQF,SACE,eAAA,CAUF,MACE,yBACA,gBAAA,CAGF,MAEE,SAAA,CC5aF,6CAGC,cACA,gBACA,gBACG,qBACA,0BACH,wBACA,oBACA,kBACA,iBAEA,gBACA,cACA,WAEA,qBACA,AACA,iBACA,YAAA,CAIyC,4JACzC,gBAAA,CAIoC,wIACpC,gBAAA,CAGD,aACC,6CAEC,gBAAA,CAAA,CAKF,sBACC,aAAA,CAQD,iCACC,kBAAA,CAGD,WAAc,aAAA,CAAd,0FAUO,aAAA,CAVP,wGAmBO,aAAA,CAnBP,eAsBO,wBAAA,CAtBP,wGA+BO,aAAA,CA/BP,6RAoDO,aAAA,CApDP,wIA+DO,aAAA,CA/DP,mLA6EO,aAAA,CA7EP,6BAiFO,aAAA,CAjFP,eAoFO,UAAA,CApFP,sQA2GO,eAAA,CA3GP,sIAsHO,iBAAA,CCxKP,WACI,0BACA,4CACA,gBACA,iBAAA,CAEJ,WACI,yBACA,4CACA,gBACA,iBAAA,CAOJ,KACC,aAAA,CAEI,UACJ,WACA,YACA,yBACC,gCAAA,CAEF,KACC,cACA,cACA,aAAA,CAED,EACC,8BAAA,qBAAA,CAiBD,sZAiEC,SACA,UACA,SACA,eACA,uBAAA,CAED,8EAWC,aAAA,CAED,MAEC,eAAA,CAED,aAEC,WAAA,CAGD,oDAGC,WACA,YAAA,CAED,MACC,yBACA,gBAAA,CC9ID,QACC,MACA,OACA,eACA,YACA,WACA,yBACA,YACA,iBAAA,CAGD,2FAIC,iBAAA,CAED,cACC,SACA,UAAA,CAFD,gBAIE,iBACA,cACA,mCAAA,0BAAA,CACA,sBACC,aAAA,CARH,uBAYE,8BACE,uBACA,wBACF,YACA,kBAAA,CAhBF,4BAmBE,gBAAA,CAGF,mBACC,WACA,YACA,OAAA,CAHD,0CAME,aACA,WACA,yBACA,kBACA,kBACA,SACA,gCAAA,uBAAA,CAEA,8CACC,QACA,uCAAA,AAAW,8BAAA,CAEZ,iDACC,QACA,uCAAA,AAAW,8BAAA,CAEZ,iDACC,QACA,uCAAA,AAAW,8BAAA,CAIb,yBACC,cAAA,CADD,gDAIE,wBAAA,CAMA,mDACC,QACA,qDAAA,AAAgC,4CAAA,CAEjC,sDACC,SAAA,CAED,sDACC,QACA,sDAAA,AAAgC,6CAAA,CAKpC,sBACC,WACA,kBACA,SACA,YACA,UACA,qCAAA,AR7BA,6BAAA,mBACA,AAEA,6FAAA,AAAY,4DAAA,CQ6Bb,2BACC,WACA,YACA,kBACA,qBACA,OACA,kBACA,iCAAA,AAEA,yBAAA,WAAA,CAEA,gCACC,kBAAA,CADD,sDAIE,SAAA,CAIH,yBACC,eACA,WACA,kCAAA,CAED,iBACC,cAAA,CAEA,uEAEC,WACA,8DAAA,AAGA,sDAAA,6BACA,qBACA,cACA,UAAA,CAED,uBACC,oCACA,UAAA,CAGF,0BACC,aACA,SACA,yBACA,YACA,kBACA,8DAAA,qDAAA,CAGA,gCACC,eACA,wBAAA,CAXF,6GAeE,kBACA,QACA,mCAAA,AACA,2BAAA,UAAA,CAlBF,mDAsBE,gBACA,UACA,eACA,eAAA,CAzBF,0DA4BE,WACA,gBAAA,CAGF,gBACC,YACA,UACA,WACA,QAAA,CAJD,kBAOE,4BACA,MACA,OACA,WACA,WAAA,CAGF,sBACC,kBACA,MACA,OACA,WACA,YACA,kBACA,yBACA,cACA,sBACA,eACA,gBACA,eACA,UACA,wDAAA,+CAAA,CAGA,4BACC,qBACA,aAAA,CAGF,sBACC,UAAA,CADD,+DAKE,UAAA,CALF,+BAQE,SAAA,CARF,wCAWE,mBACA,WACA,eACA,mCACA,QAAA,CAfF,iFAkBG,aAAA,CAlBH,uDAsBG,eACA,SAAA,CAvBH,qFA0BI,yBACA,kBACA,eAAA,CA5BJ,gGA+BI,YACA,cAAA,CAED,4GACC,YAAA,CAnCJ,sGAsCI,0BACA,yBACA,cACA,oBACA,eAAA,CA1CJ,+IA6CK,4BAAA,CA7CL,yGAiDI,YACA,wBAAA,CAlDJ,8FAqDI,qBAAA,CArDJ,4FAwDI,qBACA,qBACA,aAAA,CA1DJ,2FA6DI,aAAA,CA7DJ,8GAgEI,gBACA,kBACA,aAAA,CAGD,wGR3NF,mBACA,AAEA,2FAAA,AAAY,2DAAA,CQwNV,2MAOE,aAAA,CAPF,6RASG,oBAAA,CA9EN,0DAmFI,gBACA,iBAAA,CApFJ,gDAyFE,YACA,oBAAA,CAGF,gBACC,aACA,WACA,YACA,QACA,SACA,UACA,yBACA,aAAA,CARD,sBAWE,mCAAA,0BAAA,CAXF,sBAcE,gBAAA,CAdF,sBAiBE,gBAAA,CAGD,sBACC,cACA,cAAA,CAOF,yBACC,wBAEE,YAAA,CAFF,oBAKE,cAAA,CAAA,CAIH,yBACC,wBAEE,cAAA,CAFF,oBAKE,YAAA,CAAA,CASH,yBACC,gBACC,aAAA,CAED,0BACC,cACA,WACA,WAAA,CAED,2BACC,WACA,YACA,SAAA,CAEA,0DAEE,YACA,aACA,eACA,MACA,OACA,WAAA,CAEA,gEACC,cAAA,CAKJ,sBACC,0BACA,gBACA,WAAA,CAED,gBACC,aACA,uDAAA,CAED,mBACC,YAAA,CAED,0BACC,eAAA,CAAA,CAGF,0BACC,0BACC,WACA,aAAA,CAED,2BACC,WACA,aAAA,CAED,gBACC,WACA,yDAAA,CAAA,CAGF,0BACC,0BACC,WACA,aAAA,CAED,2BACC,WACA,aAAA,CAED,gBACC,WACA,yDAAA,CAAA,CCxbF,mEACC,kBACA,oBACA,0BACA,yBAAA,CAEA,0EACC,YAAA,CAKA,2FAAa,eAAA,CACb,sGAAwB,YAAA,CACxB,2FACE,eACA,WACA,UAAA,CACA,kGACE,YAAA,CAKN,gDACE,SAAA,CAGF,0BACC,mEACC,qBACA,gBAAA,CAAA,CAIF,yBACC,kDACC,sBAAA,CAED,uCACC,wBAAA,CAAA,CAIF,yBACC,mEACC,yBACA,oBACA,OACA,eAAA,CAAA,CCrCF,iBACE,YACA,kBACA,YACA,YACA,WACA,yBACA,gBACA,kBACA,cACA,gBACA,8DAAA,qDAAA,CAIA,uBACE,WACA,yBACA,cAAA,CAIF,+CACE,WACA,kBACA,cACA,UACA,WACA,WACA,WACA,kBAAA,CAGF,wBACE,gCAAA,AACA,wBAAA,2BAAA,kBAAA,CAGF,6BACE,iCAAA,AAAW,wBAAA,CAIf,SACE,yBACA,YACA,gBACA,2CAAA,kCAAA,CAEA,4BAAuB,yBAA+B,UAAA,CACtD,kCAA6B,wBAAA,CAC7B,kCAA6B,yBAA+B,yBAAsC,iBAAA,CAElG,cACE,kBACA,0CAAA,iCAAA,CAGF,kBACE,6BACA,aAAA,CAEA,8BACE,WAAA,CAGF,wBACE,cACA,wBACA,gBAAA,CAHF,kGAQI,cACA,eAAA,CATJ,gCAYI,UAAA,CApBN,qBAyBI,iBAAA,CAzBJ,wBA2BM,kBACA,oBAAA,CAMR,qBAEE,qBACA,SACA,eAAA,CAEA,0BACE,YACA,iBACA,6BAAA,CAGF,oCACE,iBAAA,CAIJ,0BACE,kBACA,cACA,UACA,aACA,YACA,mBACA,kBACA,2BAAA,kBAAA,CAEA,iCACE,YACA,cACA,cACA,iBAAA,CAGF,sCACE,WAAS,CAGX,gCACE,kBAAA,CACA,uCACE,UAAA,CAOJ,oEAEE,qBACA,cACA,gBACA,kBACA,gBAAA,CAEF,sBACE,UAAA,CAOJ,yBACE,SACE,YACA,YAAA,CAAA,CAIJ,yBACE,iBACE,YAAA,CAEF,uBAEE,eACA,YACA,YACA,uBAAA,AACA,eAAA,wBAAA,AACA,gBAAA,SACA,gBACA,cACA,mBAAA,CAAA,CAGJ,0BACE,uBAEE,WAAA,CAAA,CAGJ,0BACE,uBAEE,WAAA,CAEF,qBACE,mBAAA,CAEA,2BACE,eAAA,CAAA,CC/MN,aACE,oBACA,iBAAA,CAEA,mBACE,kDACA,sBACA,iBAAA,CAHF,yBAMI,kBACA,WACA,kBACA,gBACA,eAAA,CAVJ,wBAcI,cACA,eACA,kBACA,WACA,sCACA,6BACA,qEAAA,AAGA,6DAAA,oBACA,gBACA,qBACA,iBAAA,CAEA,8BACE,uCACA,iCAAA,CAKN,wBACE,kFAAA,AACA,qDAAA,sBACA,iBAAA,CAHF,8BAMI,kBACA,WACA,kBAEA,eAAA,CAVJ,6BAcI,cACA,eACA,kBACA,WACA,sCACA,6BACA,qEAAA,AAGA,6DAAA,oBACA,gBACA,qBACA,iBAAA,CAEA,mCACE,uCACA,iCAAA,CAKN,yBACE,aACA,kDACA,4BACA,sBACA,WACA,eAAA,CANF,6BASI,oBAAA,CATJ,+BAaI,kBACA,mBAAA,CAdJ,kCAiBI,gBACA,kBAAA,CAlBJ,8BAqBI,qBACA,kBACA,WACA,mBACA,kBACA,uBACA,iBAAA,CCvFN,iBACC,yBACA,UAAA,CAFD,AAIA,YAHC,yBACA,UAAA,CAED,iBACC,yBACA,UAAA,CAED,EACC,qBACA,kCAAA,yBAAA,CAEA,QACC,cAAA,CAIF,SACC,yBACA,cACA,UAAA,CAEA,4BAAuB,yBAA+B,UAAA,CACtD,kCAA6B,wBAAA,CAC7B,kCAA6B,yBAA+B,yBAAsC,iBAAA,CAGnG,iBACC,cACA,WACA,kBACA,YAAA,CAEA,iCACC,yBACA,kCACA,gCACA,2BAAA,CAJD,oCAOE,eAAA,CAIF,gCZsBA,mBACA,AAEA,6FAAA,AAAY,4DAAA,CYrBb,iBACC,gBACA,WACA,gBACA,aAAA,CAJD,6EASE,gBACA,aAAA,CAVF,yBAaE,cACA,cAAA,CAdF,uBAiBE,cACA,6BACA,kBACA,2BAAA,kBAAA,CACA,6BACC,wBACA,kBAAA,CAvBH,uCA2BE,gBACA,oBACA,gBACA,gBACA,sBACA,eACA,iBACA,YACA,kCAAA,AACA,0BAAA,aAAA,CApCF,qDAyCI,iBAAA,CACA,iEACC,WACA,kBACA,SACA,WACA,QACA,SACA,mBACA,2BACA,yDACA,WACA,2BAAA,kBAAA,CAED,6EACC,UACA,wDAAA,CAGF,mDACC,qBACA,WACA,iBACA,iBACA,kBAAA,CAEA,mFACC,gBACA,oBACA,iBACA,gBACA,sBACA,eACA,iBAAA,CA1EL,mBAiFE,oBAAA,CAjFF,kRAgGE,cACA,kBACA,kBAAA,CAlGF,uBAqGE,iBACA,gBACA,wBAAA,CAvGF,wHA4GE,WACA,aAAA,CA7GF,wNAiHG,cACA,kBACA,WACA,iBAAA,CApHH,4qBA4HG,qBACA,oBACA,uBAAA,CAED,gMACC,YAAA,CAjIH,oBAqIE,gBZ5KD,+FACA,gBY6KC,iBAAA,CAvIF,oBA0IE,gBACA,gBACA,mBAAA,CA5IF,oBA+IE,gBACA,gBACA,iBAAA,CAjJF,oBAoJE,gBACA,gBACA,kBACA,oBAAA,CAvJF,oBA0JE,iBAAA,CA1JF,oBA6JE,gBACA,kBACA,iBAAA,CAGD,0DAEE,uBAAA,CApKH,mBA0KE,aAAA,CA1KF,wCA6KE,cACA,oBAAA,CA9KF,8CAiLG,kBACA,4BACA,kBACA,mBAAA,CApLH,4CAuLG,aAAA,CAvLH,uBA2LE,8BAAA,CA3LF,iDA+LE,uBAAA,CA/LF,0BAkME,2BAAA,CAlMF,6BAqME,uBAAA,CArMF,6BAwME,sBAAA,CAxMF,+BA2ME,eAAA,CA3MF,4FAiNE,WACA,cACA,gBACA,gBAAA,CApNF,oBAuNE,WACA,WACA,iBACA,kBACA,YACA,cACA,wBAAA,CA7NF,qBAgOE,eACA,YACA,iBAAA,CAlOF,wCAsOE,yBACA,iBACA,kBACA,mBAAA,CAzOF,oCA4OE,wBAAA,CA5OF,0BAgPG,kCAAA,CAhPH,0BAmPG,oBAAA,CAnPH,8FA2PE,eACA,kBACA,kBACA,mBACA,qBAAA,CA/PF,khBAkQG,WACA,aAAA,CAnQH,8IAuQG,eAAA,CAvQH,kIA0QG,UAAA,CA1QH,mDA+QE,kBACA,cACA,qBACA,wBAAA,CAlRF,6DAoRG,cACA,mBACA,wBAAA,CAtRH,2DAyRG,mBACA,oBAAA,CA1RH,qEA2RU,WAAA,CA3RV,2CAgSE,cACA,qBACA,wBAAA,CAlSF,qDAoSG,cACA,mBACA,wBAAA,CAtSH,mDAySG,mBACA,oBAAA,CA1SH,6DA2SU,WAAA,CA3SV,sBAgTE,uDACA,gBACA,cACA,WACA,cACA,qBACA,AACA,iBACA,aACA,yBACA,4BACA,eACA,kBACA,iBACA,qBACA,mBACA,kBACA,sDACA,uCACA,0BACA,cACA,wBAAA,CArUF,qBAwUE,cACA,kBACA,cACA,kBACA,mBACA,6BACA,yBACA,qBACE,WACF,2BAAA,CAjVF,0BAoVG,gBACA,oBACA,kBACA,YACA,UACA,gBACA,4BAAA,CAGD,wCAAuB,yBAAmC,UAAA,CAC1D,8CAA6B,wBAAA,CAC7B,8CACC,yBACA,yBACA,4BAAe,CAKlB,eACC,oBAAA,AACA,oBADA,AACA,aAAA,kBACA,yBAAA,AACA,sBADA,AACA,8BAAA,gBAAA,CAJD,iBAOE,oBAAA,AACA,oBADA,AACA,aAAA,yBAAA,AACA,sBADA,AACA,mBAAA,qBACA,iBACA,oBACA,eAAA,CAEA,sBACC,kBACA,MAAA,CACA,6BACC,gBACA,oBACA,iBACA,gBACA,sBACA,eACA,mBAAA,CAIF,sBACC,kBACA,OAAA,CACA,4BACC,gBACA,oBACA,iBACA,gBACA,sBACA,eACA,kBAAA,CAUJ,UACC,kBACA,oBAAA,CAFD,2BAKE,kBACA,aACA,WACA,aACA,WAAA,CATF,4BAaE,cACA,YACA,cACA,cACA,mBACA,eACA,kBACA,iBACA,yBACA,kBACA,6BAAA,oBAAA,CACA,mCACC,mBAAS,CAEV,kCACC,aAAA,CAGF,iBACC,iBACA,gBACA,eAAA,CAHD,kCAME,SACA,mGAAA,AACA,qEAAA,YAAA,CARF,mCAYE,eAAA,CACA,0CACC,mBAAS,CASb,SACC,kBACA,qBACA,WACA,gBACA,aAAA,CAED,mBACC,kBACA,MACA,SACA,mCAAA,AACA,2BAAA,iBACA,iBAAA,CAED,cACC,gBACA,gBACA,WACA,kBACA,kBACA,gBACA,gBACA,SACA,4CAAA,AACA,oCAAA,gCAAA,AACA,wBAAA,mBACA,UACA,4BACA,cACA,wBAAA,CAED,oBACC,WACA,kBACA,SACA,aACA,mCAAA,AACA,2BAAA,6BACA,mCACA,oCACA,iCAAA,CAED,kCACC,kBAAA,CAED,6BACC,UACA,wCAAA,AAAW,+BAAA,CAMZ,aACC,WACA,qBACA,kBACA,cACA,mBACA,8BACA,cACA,yBACA,kBACA,iBAAA,CAEA,mBACC,gBACA,oBACA,kBACA,QACA,SACA,sDAAA,AACA,8CAAA,aAAA,CAOF,iCAEE,gBACA,WAAA,CAOF,oBACC,oBAAA,AACA,oBADA,AACA,aAAA,qBAAA,AACA,kBADA,AACA,yBAAA,kBACA,yBACA,mBACA,mBACA,eACA,gBACA,0BACA,yBAAA,sBAAA,kBAAA,CAVD,oCAaE,qBACA,qBACA,qBACA,kFAAA,AACA,oDAAA,4BACA,gCAAA,uBAAA,CAEA,0CACC,gBACA,kBACA,mBAAa,CAGd,0CACC,qBACA,SAAA,CA5BH,8BAiCE,YACA,wBACA,mBACA,oCAAA,2BAAA,CAEA,oCACC,SAAA,CAMH,eACC,aACC,eACA,aACA,OACA,MACA,WACA,YACA,cACD,YACC,oFAAA,AAAY,2CAAA,CAGd,eACC,aACA,mBACA,yBACA,kBACA,eACA,SACA,SACA,mCAAA,AACA,2BAAA,aACA,WACA,gBACA,gCAAA,uBAAA,CAEA,oBACC,QAAA,CAfF,qBAmBE,WACA,gBACA,kBACA,yBACA,yBACA,cACA,gBACA,eACA,UACA,wDAAA,+CAAA,CAGA,2BACC,oBAAA,CAhCH,sBAqCE,YACA,SAAA,CACA,4BACC,4BAAA,CAxCH,qBA6CE,cACA,oBACA,eAAA,CAIF,wBACC,qBACA,wBACA,gBACA,kBACA,eAAA,CAEA,8BACC,wBAAA,CAIF,WACC,oBAAA,AACA,oBADA,AACA,aAAA,yBAAA,sBAAA,6BAAA,CAFD,qBAKE,aACA,oBACA,kBACA,oBACA,WACA,kBACA,gBACA,kCAAA,yBAAA,CAOF,yBACC,WACC,4BAAA,6BAAA,qBAAA,gBAAA,CADD,qBAGE,WACA,iBAAA,CAGF,wBACC,cACA,kBAAA,CAAA,CAIF,4BACC,kBAAA,CACA,kCACC,kBAAA,CAOF,yBACC,SACC,kBAAA,CAED,iBACC,YAAA,CAED,mFAKE,gBAAA,CALF,qBAQE,qBAAA,CAAA,CAIH,0BACC,SACC,kBAAA,CAED,iBACC,cAAA,CAED,aACC,SAAA,CAAA,CAGF,0BACC,SACC,kBAAA,CAED,iBACC,kBAAA,CAED,iBACC,kBAAA,CAAA,CCryBF,UACC,cACA,8BACA,WACA,Ub2DA,mBACA,AAEA,2FAAA,Aa5DA,4DAAA,YACA,oBAAA,AACA,oBADA,AACA,aAAA,4BAAA,AACA,6BADA,AACA,0BADA,AACA,sBAAA,mBAAA,AACA,eAAA,yBAAA,sBAAA,6BAAA,CAVD,0EAaE,oBAAA,AACA,oBADA,AACA,aAAA,8BAAA,AACA,6BADA,AACA,uBADA,AACA,mBAAA,WACA,mBAAA,AACA,eAAA,mBAAA,WAAA,MAAA,CAGD,gBACC,WACA,qBACA,gBACA,iBAAA,CAEA,qBACC,kBACA,MACA,OACA,WACA,YACA,WACA,iEAAA,AAGA,yDAHA,AAGA,iDAHA,AAGA,6EAAA,UACA,6BACA,sBACA,kCACA,4BACA,6BAAA,AAAW,oBAAA,CAEZ,2CAEE,UACA,iCAAA,AAAW,wBAAA,CAHb,4CAME,oBAAA,CAIF,0BACC,kBACA,UACA,WACA,qBACA,kBACA,kBACA,WAAA,CAPD,wGAYE,cACA,mCAAA,AACA,2BAAA,oBAAA,CAdF,kCAiBE,aAAA,CAIF,kDACC,gBACA,qBACA,WACA,qBAAA,CAED,sBACC,eACA,qCACA,gBACA,kBACA,cACA,mBACA,mCAAA,0BAAA,CAED,4BACC,eACA,cACA,kBACA,eAAA,CAED,qBACC,qBACA,kBACA,gBACA,mBACA,iBACA,iBAAA,CAEA,mCACC,eAAA,CAKF,mDAEE,6CACA,wBAAA,CAHF,0DAME,UAAA,CANF,oDASE,aAAA,CATF,gLAcE,WACA,8DAAA,qDAAA,CAfF,0DAoBE,cACA,qBAAA,CAGF,mDAEE,6CACA,wBAAA,CAHF,0DAME,UAAA,CANF,oDASE,aAAA,CATF,gLAcE,WACA,8DAAA,qDAAA,CAfF,0DAoBE,cACA,qBAAA,CAGF,qDAEE,+CACA,wBAAA,CAHF,4DAME,UAAA,CANF,sDASE,aAAA,CATF,sLAcE,WACA,8DAAA,qDAAA,CAfF,4DAoBE,cACA,qBAAA,CAGF,oDAEE,8CACA,wBAAA,CAHF,2DAME,UAAA,CANF,qDASE,aAAA,CATF,mLAcE,WACA,8DAAA,qDAAA,CAfF,2DAoBE,cACA,qBAAA,CAIF,+DAEE,8CACA,wBAAA,CAHF,sEAME,UAAA,CANF,gEASE,aAAA,CATF,oNAcE,WACA,8DAAA,qDAAA,CAfF,sEAoBE,cACA,qBAAA,CAIF,8DAEE,6CACA,wBAAA,CAHF,qEAME,UAAA,CANF,+DASE,aAAA,CATF,iNAcE,WACA,8DAAA,qDAAA,CAfF,qEAoBE,cACA,qBAAA,CAIF,+CAEE,yCACA,yBACA,SAAA,CAJF,sDAOE,UAAA,CAPF,gDAUE,UAAA,CAVF,oKAeE,WACA,8DAAA,qDAAA,CAGA,+LACC,YAAA,CApBH,sDAwBE,cACA,qBAAA,CAIF,8BACC,WACA,kFAAA,AACA,qDAAA,oBAAA,AACA,oBADA,AACA,aAAA,yBAAA,sBAAA,kBAAA,CAJD,wDAOE,mBAAA,CAPF,mDAWE,6CACA,yBACA,UAAA,CAbF,0DAgBE,WACA,iBAAA,CAjBF,oDAoBE,WACA,kBACA,iBAAA,CAtBF,gLA2BE,WACA,8DAAA,qDAAA,CA5BF,0DAiCE,cACA,qBAAA,CAlCF,oCAqCE,sBACA,kBACA,qBACA,gBACA,cACA,kBACA,eACA,gBACA,2BAAA,AACA,mBAAA,gDAAA,uCAAA,CAEA,0CACC,iCAAA,wBAAA,CAWL,yBACC,gBACC,UACA,mBAAA,oBAAA,WAAA,CAAA,CAGF,0BACC,0BACC,cAAA,CAED,4BACC,kBAAA,CAED,gBACC,UACA,WAAA,CAEA,8BACC,SAAA,CAGD,mFAEC,SAAA,CAAA,CAIH,0BACC,0BACC,YAAA,CAED,4BACC,kBAAA,CAAA,CCzXF,YACC,gBACA,SACA,YACA,WdkEA,mBACA,AAEA,6FAAA,AAAY,4DAAA,CclEb,eACC,iBACA,UACA,gBACA,gBACA,eACA,iBACA,aAAA,CAPD,kBAUE,cACA,cACA,mBACA,iBACA,YACA,aACA,kBACA,kBACA,eACA,gBACA,kBACA,kBACA,wBAAA,CAeF,MACC,oBAAA,AACA,oBADA,AACA,aAAA,yBAAA,4BAAA,CAGD,YACC,kBAAA,CAGD,KACC,cACA,cACA,mBACA,WACA,kBACA,kBACA,kCAAA,yBAAA,CAEA,UACC,mBAAA,AACA,oBADA,AACA,YAAA,mBAAA,CAEA,iBACC,gBACA,oBACA,mBACA,cAAA,CAIF,aACC,mBAAA,AACA,oBADA,AACA,YAAA,YAAA,CAEA,oBACC,gBACA,oBACA,mBACA,mBAAA,oBAAA,WAAA,CAIF,WACC,kBAAA,CAQF,yBACC,eACC,eACA,gBAAA,CAAA,CAKF,0BACC,eACC,eACA,gBAAA,CAAA,CCpHF,gBACE,gBAAA,CAEF,MACE,mBAAA,AACA,oBADA,AACA,YAAA,yBAAA,CAEF,QACE,oBAAA,AACA,oBADA,AACA,aAAA,mBAAA,cAAA,CAEF,QACE,mBAAA,AACA,oBADA,AACA,YAAA,WACA,iBACA,wBACA,iBACA,qBACA,kBACA,kBACA,mCACA,kDAAA,yCAAA,CAEA,cACE,uBAAA,CAEF,kBACE,qBACA,kBAAA,CAIJ,aACE,UAAA,CAEA,eACE,qBACA,uBAAA,CAIJ,+BACE,YAAA,CAGF,uBACE,kBACA,2BAAA,CAKF,mBACE,qBACA,UAAA,CAEA,qBACE,qBACA,uBAAA,CAIJ,mBACE,qBAAA,CADF,gCAKM,SACA,iBACA,cACA,eAAA,CARN,gCAWM,sBACA,SACA,0BACA,qBACA,6BACA,oCAAA,CACA,sCACC,uBAAA,CAED,0CACC,yBACA,uBAAA,CAtBP,qCA4BI,SAAA,CA5BJ,yCA8BM,gBACA,2BAAA,CAEF,yDACE,YAAA,CASN,yBACE,wBACE,mBAAA,oBAAA,WAAA,CAAA,CCzGJ,aACE,kBACA,oBACA,oBACA,wBAAA,AACA,qBADA,AACA,uBAAA,yBAAA,AACA,sBADA,AACA,mBAAA,mBACA,iBAAA,CAPF,gBAUI,UACA,iBAAA,CAGF,0BACE,cACA,kBACA,qBACA,kBACA,cACA,gBAAA,CAIA,oBACE,gBACA,gBACA,cACA,mBAAA,CAJF,gCAOI,kBACA,kBACA,UAAA,CAMJ,gCAAmB,mBAAA,CACnB,iCAAoB,mBAAA,CACpB,iCAAoB,mBAAA,CAzCxB,0BA6CI,kBACA,qBACA,UACA,YACA,UACA,uDAAA,8CAAA,CAlDJ,uCAqDM,iBACA,mBAAA,CAIJ,gCACiB,SAAA,CA3DnB,wBAgEI,qBACA,4BAAA,CAjEJ,4GAkEkB,aAAA,CAlElB,qDAoEM,cACA,eACA,iBAAA,CAtEN,+BAwEa,aAAA,CAxEb,0BA0EM,aAAA,CA1EN,qCA4EQ,sEAAA,CAEF,gCACE,UAAA,CADF,2CAGI,qDAAA,CAjFV,qCAqFmB,aAAA,CArFnB,yDAuFM,cACA,kBAAA,CAON,gBACE,oBAAA,AACA,oBADA,AACA,aAAA,8BAAA,AACA,6BADA,AACA,uBADA,AACA,mBAAA,wBAAA,qBAAA,sBAAA,CAHF,iCAMI,mBAAA,AACA,mBADA,AACA,eAAA,2BACA,aAAA,CAEA,6CACE,mBAAA,AACA,mBADA,AACA,eAAA,aAAA,CAFF,0DAII,kBAAA,SAAA,CAdR,mBAoBI,8CACA,qBAAA,CArBJ,6BAyBI,UACA,iBACA,eAAA,CA3BJ,gCA6BM,UACA,SACA,oBACA,8BAAA,CAhCN,sBAqCI,cACA,iBACA,cACA,iBAAA,CAEA,4BACE,yBACA,mBACA,iBACA,UAAA,CA9CN,0BAmDI,qBACA,cACA,aACA,iCACA,mBACA,wBACA,kBACA,eACA,wCACA,yBAAA,sBAAA,qBAAA,gBAAA,CA5DJ,qCAgEI,qBACA,UACA,mBACA,UACA,cAAA,CAEA,qDACE,WACA,cACA,kBACA,aACA,YACA,kBACA,mBACA,WACA,YACA,UACA,2BAAA,AACA,mBAAA,2BAAA,kBAAA,CAGF,6DACE,UACA,2BAAA,AAAW,kBAAA,CASjB,0BACE,iCAEI,aAAA,CACe,4FACb,cAAA,CAAA,CAMR,yBACE,iCAEI,cAAA,CAIJ,0BAEI,UACA,6BACA,cACA,iBAAA,CALJ,uCAMmB,QAAA,CANnB,gCAOY,YAAA,CAAA,CT7Cd,yBACC,KACC,gBAAA,CAAA,CUhKF,2JASM,aAAA,CATN,mDAYM,UAAA,CAZN,uDAeM,eAAA,CAfN,iDAkBM,kBAAA,CACA,uDACE,kBAAA,CAGJ,oFAEC,uBAAA,CAzBL,kEjBiEC,mBACA,AAEA,6FAAA,AAAY,4DAAA,CiBpEb,gLA0CM,cACA,eAAA,CA3CN,0DA8CM,UAAA,CAIF,gDACE,UAAA,CAnDN,oDA2DI,wBAAA,CACA,0DACE,wBAAA,CA7DN,gDjBiEC,mBACA,AAEA,6FAAA,AAAY,4DAAA,CiBpEb,4CAsEI,kBAAA,CCtEJ,iKASM,aAAA,CATN,qDAYM,UAAA,CAZN,yDAeM,eAAA,CAfN,mDAkBM,kBAAA,CACA,yDACE,kBAAA,CAGJ,sFAEC,uBAAA,CAzBL,oElBiEC,mBACA,AAEA,6FAAA,AAAY,4DAAA,CkBpEb,sLA0CM,cACA,eAAA,CA3CN,4DA8CM,UAAA,CAIF,kDACE,UAAA,CAnDN,sDA2DI,wBAAA,CACA,4DACE,wBAAA,CA7DN,kDlBiEC,mBACA,AAEA,6FAAA,AAAY,4DAAA,CkBpEb,8CAsEI,kBAAA,CCtEJ,8JASM,aAAA,CATN,oDAYM,UAAA,CAZN,wDAeM,eAAA,CAfN,kDAkBM,kBAAA,CACA,wDACE,kBAAA,CAGJ,qFAEC,uBAAA,CAzBL,mEnBiEC,mBACA,AAEA,6FAAA,AAAY,4DAAA,CmBpEb,mLA0CM,cACA,eAAA,CA3CN,2DA8CM,UAAA,CAIF,iDACE,UAAA,CAnDN,qDA2DI,wBAAA,CACA,2DACE,wBAAA,CA7DN,iDnBiEC,mBACA,AAEA,6FAAA,AAAY,4DAAA,CmBpEb,6CAsEI,kBAAA,CCtEJ,+LASM,aAAA,CATN,+DAYM,UAAA,CAZN,mEAeM,eAAA,CAfN,6DAkBM,kBAAA,CACA,mEACE,kBAAA,CAGJ,gGAEC,uBAAA,CAzBL,8EpBiEC,mBACA,AAEA,6FAAA,AAAY,4DAAA,CoBpEb,oNA0CM,cACA,eAAA,CA3CN,sEA8CM,UAAA,CAIF,4DACE,UAAA,CAnDN,gEA2DI,wBAAA,CACA,sEACE,wBAAA,CA7DN,4DpBiEC,mBACA,AAEA,6FAAA,AAAY,4DAAA,CoBpEb,wDAsEI,kBAAA,CCtEJ,+IASM,aAAA,CATN,+CAYM,UAAA,CAZN,mDAeM,eAAA,CAEF,gFAEC,uBAAA,CAnBL,8DrBiEC,mBACA,AAEA,6FAAA,AAAY,4DAAA,CqBpEb,oKAoCM,cACA,eAAA,CArCN,sDAwCM,UAAA,CAIF,4CACE,UAAA,CA7CN,gDAqDI,wBAAA,CACA,sDACE,wBAAA,CAvDN,4CrBiEC,mBACA,AAEA,6FAAA,AAAY,4DAAA,CqBpEb,wCAgEI,kBAAA,CAAA","file":"docs-default.css","sourcesContent":["//\n// UI Variables\n// --------------------------------------------------\n\n@radius: 3px;\n\n//\n// Typography Variables\n// --------------------------------------------------\n\n@type-scale:\t\t1.2;\n\n@heading1Size:\t\t2.2em;\n@heading2Size:\t\t1.9em;\n@heading3Size:\t\t1.5em;\n@heading4Size:\t\t1.3em;\n@paragraphSize:\t\t1.0em;\n@smallTextSize:\t\t0.9em;\n@tinyTextSize:\t\t0.8em;\n\n@margin-bottom-base: 1em;\n@indented-element-size: 2rem;\n.klavika-font {\n\tfont-family: 'Klavika-Light','Helvetica Neue', 'Helvetica', Helvetica, Arial, Tahoma, Verdana, sans-serif;\n\tfont-weight: 200;\n}\n@thick-left-border: 6px;\n@scrollbar-width: 1rem;\n@border-small-screen: 1px;\n@border-large-screen: 2px;\n\n//\n// Size Variables\n// --------------------------------------------------\n@nav-height: \t\t\t\t4rem;\n@sidebar--toggle-height: \t3rem;\n@nav-gap:\t\t\t\t\t0.5rem;\n@nav-component-height:\t\t3rem;\n@search-offset:\t\t\t\t(@nav-height - @nav-component-height)/2;\n\n@sidebar-small-width:\t\t18rem;\n@sidebar-large-width:\t\t23rem;\n@sidebar-huge-width:\t\t28rem;\n\n@scrollbar-width:\t\t\t16px;\n\n@product-dropdown-small-width:\t17rem;\n@product-dropdown-large-width:\t17.5rem;\n@product-dropdown-huge-width:\t17.5rem;\n\n@search-default-width:\t\t40%;\n@search-small-width:\t\t~\"calc( 100% - \"@sidebar-small-width~\" - \"@nav-gap~\" - \"@nav-gap~\" - \"@nav-height~\" - \"@product-dropdown-small-width~\")\";\n@search-large-width:\t\t~\"calc( 100% - \"@sidebar-large-width~\" - \"@nav-gap~\" - \"@nav-gap~\" - \"@nav-height~\" - \"@product-dropdown-large-width~\")\";\n@search-huge-width:\t\t\t~\"calc( 100% - \"@sidebar-huge-width~\" - \"@nav-gap~\" - \"@nav-gap~\" - \"@nav-height~\" - \"@product-dropdown-huge-width~\")\";\n\n@search-small-position:\t\t@sidebar-small-width + @product-dropdown-small-width + @nav-gap;\n@search-large-position:\t\t@sidebar-large-width + @product-dropdown-large-width + @nav-gap;\n@search-huge-position:\t\t@sidebar-huge-width + @product-dropdown-huge-width + @nav-gap;\n\n\n//\n// Z Index Variables\n// --------------------------------------------------\n@z-sidebar:\t\t\t\t\t250;\n@z-sidebar--mask:\t\t\t200;\n@z-nav:\t\t\t\t\t\t150;\n@z-sidebar-desktop:\t\t\t100;\n@z-sidebar--toggle:\t\t\t100;\n\n//\n// Gradient Mixin\n// --------------------------------------------------\n.gradient-h(@color1,@color2) {\n\tbackground: @color1;\n\tbackground: -moz-linear-gradient(left, @color1 0%, @color2 100%);\n\tbackground: -webkit-linear-gradient(left, @color1 0%,@color2 100%);\n\tbackground: linear-gradient(to right, @color1 0%,@color2 100%);\n\tfilter: progid:DXImageTransform.Microsoft.gradient( startColorstr='@color1', endColorstr='@color2',GradientType=1 );\n}\n.gradient-v(@color1,@color2) {\n\tbackground: @color1;\n\tbackground: -moz-linear-gradient(top, @color1 0%, @color2 100%);\n\tbackground: -webkit-linear-gradient(top, @color1 0%,@color2 100%);\n\tbackground: linear-gradient(to bottom, @color1 0%,@color2 100%);\n\tfilter: progid:DXImageTransform.Microsoft.gradient( startColorstr='@color1', endColorstr='@color2',GradientType=0 );\n}\n\n//\n// Breakpoints\n// --------------------------------------------------\n@breakpoint-small:\t\t\t900px;\n@breakpoint-large:\t\t\t1200px;\n@breakpoint-huge:\t\t\t1900px;\n","@font-face {\n\tfont-family: 'icomoon';\n\tsrc:url('../fonts/icomoon.eot?c3omf0');\n\tsrc:url('../fonts/icomoon.eot?c3omf0#iefix') format('embedded-opentype'),\n\t\turl('../fonts/icomoon.woff2?c3omf0') format('woff2'),\n\t\turl('../fonts/icomoon.ttf?c3omf0') format('truetype'),\n\t\turl('../fonts/icomoon.woff?c3omf0') format('woff'),\n\t\turl('../fonts/icomoon.svg?c3omf0#icomoon') format('svg');\n\tfont-weight: normal;\n\tfont-style: normal;\n}\n\n.icon {\n\tfont-family: 'icomoon';\n\tspeak: none;\n\tfont-style: normal;\n\tfont-weight: normal;\n\tfont-variant: normal;\n\ttext-transform: none;\n\tline-height: 1;\n\n\t/* Better Font Rendering =========== */\n\t-webkit-font-smoothing: antialiased;\n\t-moz-osx-font-smoothing: grayscale;\n}\n\n.icon.sun2:before {\n content: \"\\eae2\";\n}\n.icon.moon:before {\n content: \"\\eae3\";\n}\n.icon.logotype:before {\n content: \"\\e800\";\n}\n.icon.logo:before {\n content: \"\\e801\";\n}\n.icon.arrow-down:before {\n content: \"\\e802\";\n}\n.icon.arrow-up:before {\n content: \"\\e803\";\n}\n.icon.arrow-left:before {\n content: \"\\e804\";\n}\n.icon.arrow-right:before {\n content: \"\\e805\";\n}\n.icon.health:before {\n content: \"\\e806\";\n}\n.icon.lightning:before {\n content: \"\\e807\";\n}\n.icon.matrix:before {\n content: \"\\e808\";\n}\n.icon.cluster:before {\n content: \"\\e809\";\n}\n.icon.data:before {\n content: \"\\e80a\";\n}\n.icon.google:before {\n content: \"\\e81a\";\n}\n.icon.eyeball:before {\n content: \"\\e901\";\n}\n.icon.infinite:before {\n content: \"\\e902\";\n}\n.icon.dashboard:before {\n content: \"\\eade\";\n}\n.icon.analytics:before {\n content: \"\\eadf\";\n}\n.icon.cloud-stack:before {\n content: \"\\eae0\";\n}\n.icon.iot:before {\n content: \"\\eae1\";\n}\n.icon.home:before {\n content: \"\\e904\";\n}\n.icon.home2:before {\n content: \"\\e905\";\n}\n.icon.home3:before {\n content: \"\\e906\";\n}\n.icon.office:before {\n content: \"\\e907\";\n}\n.icon.newspaper:before {\n content: \"\\e908\";\n}\n.icon.pencil:before {\n content: \"\\e909\";\n}\n.icon.pencil2:before {\n content: \"\\e90a\";\n}\n.icon.quill:before {\n content: \"\\e90b\";\n}\n.icon.pen:before {\n content: \"\\e90c\";\n}\n.icon.blog:before {\n content: \"\\e90d\";\n}\n.icon.eyedropper:before {\n content: \"\\e90e\";\n}\n.icon.droplet:before {\n content: \"\\e90f\";\n}\n.icon.paint-format:before {\n content: \"\\e910\";\n}\n.icon.image:before {\n content: \"\\e911\";\n}\n.icon.images:before {\n content: \"\\e912\";\n}\n.icon.camera:before {\n content: \"\\e913\";\n}\n.icon.headphones:before {\n content: \"\\e914\";\n}\n.icon.music:before {\n content: \"\\e915\";\n}\n.icon.play:before {\n content: \"\\e916\";\n}\n.icon.film:before {\n content: \"\\e917\";\n}\n.icon.video-camera:before {\n content: \"\\e918\";\n}\n.icon.dice:before {\n content: \"\\e919\";\n}\n.icon.pacman:before {\n content: \"\\e91a\";\n}\n.icon.spades:before {\n content: \"\\e91b\";\n}\n.icon.clubs:before {\n content: \"\\e91c\";\n}\n.icon.diamonds:before {\n content: \"\\e91d\";\n}\n.icon.bullhorn:before {\n content: \"\\e91e\";\n}\n.icon.connection:before {\n content: \"\\e91f\";\n}\n.icon.podcast:before {\n content: \"\\e920\";\n}\n.icon.feed:before {\n content: \"\\e921\";\n}\n.icon.mic:before {\n content: \"\\e922\";\n}\n.icon.book:before {\n content: \"\\e923\";\n}\n.icon.books:before {\n content: \"\\e924\";\n}\n.icon.library:before {\n content: \"\\e925\";\n}\n.icon.file-text:before {\n content: \"\\e926\";\n}\n.icon.profile:before {\n content: \"\\e927\";\n}\n.icon.file-empty:before {\n content: \"\\e928\";\n}\n.icon.files-empty:before {\n content: \"\\e929\";\n}\n.icon.file-text2:before {\n content: \"\\e92a\";\n}\n.icon.file-picture:before {\n content: \"\\e92b\";\n}\n.icon.file-music:before {\n content: \"\\e92c\";\n}\n.icon.file-play:before {\n content: \"\\e92d\";\n}\n.icon.file-video:before {\n content: \"\\e92e\";\n}\n.icon.file-zip:before {\n content: \"\\e92f\";\n}\n.icon.copy:before {\n content: \"\\e930\";\n}\n.icon.paste:before {\n content: \"\\e931\";\n}\n.icon.stack:before {\n content: \"\\e932\";\n}\n.icon.folder:before {\n content: \"\\e933\";\n}\n.icon.folder-open:before {\n content: \"\\e934\";\n}\n.icon.folder-plus:before {\n content: \"\\e935\";\n}\n.icon.folder-minus:before {\n content: \"\\e936\";\n}\n.icon.folder-download:before {\n content: \"\\e937\";\n}\n.icon.folder-upload:before {\n content: \"\\e938\";\n}\n.icon.price-tag:before {\n content: \"\\e939\";\n}\n.icon.price-tags:before {\n content: \"\\e93a\";\n}\n.icon.barcode:before {\n content: \"\\e93b\";\n}\n.icon.qrcode:before {\n content: \"\\e93c\";\n}\n.icon.ticket:before {\n content: \"\\e93d\";\n}\n.icon.cart:before {\n content: \"\\e93e\";\n}\n.icon.coin-dollar:before {\n content: \"\\e93f\";\n}\n.icon.coin-euro:before {\n content: \"\\e940\";\n}\n.icon.coin-pound:before {\n content: \"\\e941\";\n}\n.icon.coin-yen:before {\n content: \"\\e942\";\n}\n.icon.credit-card:before {\n content: \"\\e943\";\n}\n.icon.calculator:before {\n content: \"\\e944\";\n}\n.icon.lifebuoy:before {\n content: \"\\e945\";\n}\n.icon.phone:before {\n content: \"\\e946\";\n}\n.icon.phone-hang-up:before {\n content: \"\\e947\";\n}\n.icon.address-book:before {\n content: \"\\e948\";\n}\n.icon.envelop:before {\n content: \"\\e949\";\n}\n.icon.pushpin:before {\n content: \"\\e94a\";\n}\n.icon.location:before {\n content: \"\\e94b\";\n}\n.icon.location2:before {\n content: \"\\e94c\";\n}\n.icon.compass:before {\n content: \"\\e94d\";\n}\n.icon.compass2:before {\n content: \"\\e94e\";\n}\n.icon.map:before {\n content: \"\\e94f\";\n}\n.icon.map2:before {\n content: \"\\e950\";\n}\n.icon.history:before {\n content: \"\\e951\";\n}\n.icon.clock:before {\n content: \"\\e952\";\n}\n.icon.clock2:before {\n content: \"\\e953\";\n}\n.icon.alarm:before {\n content: \"\\e954\";\n}\n.icon.bell:before {\n content: \"\\e955\";\n}\n.icon.stopwatch:before {\n content: \"\\e956\";\n}\n.icon.calendar:before {\n content: \"\\e957\";\n}\n.icon.printer:before {\n content: \"\\e958\";\n}\n.icon.keyboard:before {\n content: \"\\e959\";\n}\n.icon.display:before {\n content: \"\\e95a\";\n}\n.icon.laptop:before {\n content: \"\\e95b\";\n}\n.icon.mobile:before {\n content: \"\\e95c\";\n}\n.icon.mobile2:before {\n content: \"\\e95d\";\n}\n.icon.tablet:before {\n content: \"\\e95e\";\n}\n.icon.tv:before {\n content: \"\\e95f\";\n}\n.icon.drawer:before {\n content: \"\\e960\";\n}\n.icon.drawer2:before {\n content: \"\\e961\";\n}\n.icon.box-add:before {\n content: \"\\e962\";\n}\n.icon.box-remove:before {\n content: \"\\e963\";\n}\n.icon.download:before {\n content: \"\\e964\";\n}\n.icon.upload:before {\n content: \"\\e965\";\n}\n.icon.floppy-disk:before {\n content: \"\\e966\";\n}\n.icon.drive:before {\n content: \"\\e967\";\n}\n.icon.database:before {\n content: \"\\e968\";\n}\n.icon.undo:before {\n content: \"\\e969\";\n}\n.icon.redo:before {\n content: \"\\e96a\";\n}\n.icon.undo2:before {\n content: \"\\e96b\";\n}\n.icon.redo2:before {\n content: \"\\e96c\";\n}\n.icon.forward:before {\n content: \"\\e96d\";\n}\n.icon.reply:before {\n content: \"\\e96e\";\n}\n.icon.bubble:before {\n content: \"\\e96f\";\n}\n.icon.bubbles:before {\n content: \"\\e970\";\n}\n.icon.bubbles2:before {\n content: \"\\e971\";\n}\n.icon.bubble2:before {\n content: \"\\e972\";\n}\n.icon.bubbles3:before {\n content: \"\\e973\";\n}\n.icon.bubbles4:before {\n content: \"\\e974\";\n}\n.icon.user:before {\n content: \"\\e975\";\n}\n.icon.users:before {\n content: \"\\e976\";\n}\n.icon.user-plus:before {\n content: \"\\e977\";\n}\n.icon.user-minus:before {\n content: \"\\e978\";\n}\n.icon.user-check:before {\n content: \"\\e979\";\n}\n.icon.user-tie:before {\n content: \"\\e97a\";\n}\n.icon.quotes-left:before {\n content: \"\\e97b\";\n}\n.icon.quotes-right:before {\n content: \"\\e97c\";\n}\n.icon.hour-glass:before {\n content: \"\\e97d\";\n}\n.icon.spinner:before {\n content: \"\\e97e\";\n}\n.icon.spinner2:before {\n content: \"\\e97f\";\n}\n.icon.spinner3:before {\n content: \"\\e980\";\n}\n.icon.spinner4:before {\n content: \"\\e981\";\n}\n.icon.spinner5:before {\n content: \"\\e982\";\n}\n.icon.spinner6:before {\n content: \"\\e983\";\n}\n.icon.spinner7:before {\n content: \"\\e984\";\n}\n.icon.spinner8:before {\n content: \"\\e985\";\n}\n.icon.spinner9:before {\n content: \"\\e986\";\n}\n.icon.spinner10:before {\n content: \"\\e987\";\n}\n.icon.spinner11:before {\n content: \"\\e988\";\n}\n.icon.binoculars:before {\n content: \"\\e989\";\n}\n.icon.search:before {\n content: \"\\e98a\";\n}\n.icon.zoom-in:before {\n content: \"\\e98b\";\n}\n.icon.zoom-out:before {\n content: \"\\e98c\";\n}\n.icon.enlarge:before {\n content: \"\\e98d\";\n}\n.icon.shrink:before {\n content: \"\\e98e\";\n}\n.icon.enlarge2:before {\n content: \"\\e98f\";\n}\n.icon.shrink2:before {\n content: \"\\e990\";\n}\n.icon.key:before {\n content: \"\\e991\";\n}\n.icon.key2:before {\n content: \"\\e992\";\n}\n.icon.lock:before {\n content: \"\\e993\";\n}\n.icon.unlocked:before {\n content: \"\\e994\";\n}\n.icon.wrench:before {\n content: \"\\e995\";\n}\n.icon.equalizer:before {\n content: \"\\e996\";\n}\n.icon.equalizer2:before {\n content: \"\\e997\";\n}\n.icon.cog:before {\n content: \"\\e900\";\n}\n.icon.cogs:before {\n content: \"\\e998\";\n}\n.icon.hammer:before {\n content: \"\\e999\";\n}\n.icon.magic-wand:before {\n content: \"\\e99a\";\n}\n.icon.aid-kit:before {\n content: \"\\e99b\";\n}\n.icon.bug:before {\n content: \"\\e99c\";\n}\n.icon.pie-chart:before {\n content: \"\\e99d\";\n}\n.icon.stats-dots:before {\n content: \"\\e99e\";\n}\n.icon.stats-bars:before {\n content: \"\\e99f\";\n}\n.icon.stats-bars2:before {\n content: \"\\e9a0\";\n}\n.icon.trophy:before {\n content: \"\\e9a1\";\n}\n.icon.gift:before {\n content: \"\\e9a2\";\n}\n.icon.glass:before {\n content: \"\\e9a3\";\n}\n.icon.glass2:before {\n content: \"\\e9a4\";\n}\n.icon.mug:before {\n content: \"\\e9a5\";\n}\n.icon.spoon-knife:before {\n content: \"\\e9a6\";\n}\n.icon.leaf:before {\n content: \"\\e9a7\";\n}\n.icon.rocket:before {\n content: \"\\e9a8\";\n}\n.icon.meter:before {\n content: \"\\e9a9\";\n}\n.icon.meter2:before {\n content: \"\\e9aa\";\n}\n.icon.hammer2:before {\n content: \"\\e9ab\";\n}\n.icon.fire:before {\n content: \"\\e9ac\";\n}\n.icon.lab:before {\n content: \"\\e9ad\";\n}\n.icon.magnet:before {\n content: \"\\e9ae\";\n}\n.icon.bin:before {\n content: \"\\e9af\";\n}\n.icon.bin2:before {\n content: \"\\e9b0\";\n}\n.icon.briefcase:before {\n content: \"\\e9b1\";\n}\n.icon.airplane:before {\n content: \"\\e9b2\";\n}\n.icon.truck:before {\n content: \"\\e9b3\";\n}\n.icon.road:before {\n content: \"\\e9b4\";\n}\n.icon.accessibility:before {\n content: \"\\e9b5\";\n}\n.icon.target:before {\n content: \"\\e9b6\";\n}\n.icon.shield:before {\n content: \"\\e9b7\";\n}\n.icon.power:before {\n content: \"\\e9b8\";\n}\n.icon.switch:before {\n content: \"\\e9b9\";\n}\n.icon.power-cord:before {\n content: \"\\e9ba\";\n}\n.icon.clipboard:before {\n content: \"\\e9bb\";\n}\n.icon.list-numbered:before {\n content: \"\\e9bc\";\n}\n.icon.list:before {\n content: \"\\e9bd\";\n}\n.icon.list2:before {\n content: \"\\e9be\";\n}\n.icon.tree:before {\n content: \"\\e9bf\";\n}\n.icon.menu:before {\n content: \"\\e9c0\";\n}\n.icon.menu2:before {\n content: \"\\e9c1\";\n}\n.icon.menu3:before {\n content: \"\\e9c2\";\n}\n.icon.menu4:before {\n content: \"\\e9c3\";\n}\n.icon.cloud:before {\n content: \"\\e9c4\";\n}\n.icon.cloud-download:before {\n content: \"\\e9c5\";\n}\n.icon.cloud-upload:before {\n content: \"\\e9c6\";\n}\n.icon.cloud-check:before {\n content: \"\\e9c7\";\n}\n.icon.download2:before {\n content: \"\\e9c8\";\n}\n.icon.upload2:before {\n content: \"\\e9c9\";\n}\n.icon.download3:before {\n content: \"\\e9ca\";\n}\n.icon.upload3:before {\n content: \"\\e9cb\";\n}\n.icon.sphere:before {\n content: \"\\e9cc\";\n}\n.icon.earth:before {\n content: \"\\e9cd\";\n}\n.icon.link:before {\n content: \"\\e9ce\";\n}\n.icon.flag:before {\n content: \"\\e9cf\";\n}\n.icon.attachment:before {\n content: \"\\e9d0\";\n}\n.icon.eye:before {\n content: \"\\e9d1\";\n}\n.icon.eye-plus:before {\n content: \"\\e9d2\";\n}\n.icon.eye-minus:before {\n content: \"\\e9d3\";\n}\n.icon.eye-blocked:before {\n content: \"\\e9d4\";\n}\n.icon.bookmark:before {\n content: \"\\e9d5\";\n}\n.icon.bookmarks:before {\n content: \"\\e9d6\";\n}\n.icon.sun:before {\n content: \"\\e9d7\";\n}\n.icon.contrast:before {\n content: \"\\e9d8\";\n}\n.icon.brightness-contrast:before {\n content: \"\\e9d9\";\n}\n.icon.star-empty:before {\n content: \"\\e9da\";\n}\n.icon.star-half:before {\n content: \"\\e9db\";\n}\n.icon.star-full:before {\n content: \"\\e9dc\";\n}\n.icon.heart:before {\n content: \"\\e9dd\";\n}\n.icon.heart-broken:before {\n content: \"\\e9de\";\n}\n.icon.man:before {\n content: \"\\e9df\";\n}\n.icon.woman:before {\n content: \"\\e9e0\";\n}\n.icon.man-woman:before {\n content: \"\\e9e1\";\n}\n.icon.happy:before {\n content: \"\\e9e2\";\n}\n.icon.happy2:before {\n content: \"\\e9e3\";\n}\n.icon.smile:before {\n content: \"\\e9e4\";\n}\n.icon.smile2:before {\n content: \"\\e9e5\";\n}\n.icon.tongue:before {\n content: \"\\e9e6\";\n}\n.icon.tongue2:before {\n content: \"\\e9e7\";\n}\n.icon.sad:before {\n content: \"\\e9e8\";\n}\n.icon.sad2:before {\n content: \"\\e9e9\";\n}\n.icon.wink:before {\n content: \"\\e9ea\";\n}\n.icon.wink2:before {\n content: \"\\e9eb\";\n}\n.icon.grin:before {\n content: \"\\e9ec\";\n}\n.icon.grin2:before {\n content: \"\\e9ed\";\n}\n.icon.cool:before {\n content: \"\\e9ee\";\n}\n.icon.cool2:before {\n content: \"\\e9ef\";\n}\n.icon.angry:before {\n content: \"\\e9f0\";\n}\n.icon.angry2:before {\n content: \"\\e9f1\";\n}\n.icon.evil:before {\n content: \"\\e9f2\";\n}\n.icon.evil2:before {\n content: \"\\e9f3\";\n}\n.icon.shocked:before {\n content: \"\\e9f4\";\n}\n.icon.shocked2:before {\n content: \"\\e9f5\";\n}\n.icon.baffled:before {\n content: \"\\e9f6\";\n}\n.icon.baffled2:before {\n content: \"\\e9f7\";\n}\n.icon.confused:before {\n content: \"\\e9f8\";\n}\n.icon.confused2:before {\n content: \"\\e9f9\";\n}\n.icon.neutral:before {\n content: \"\\e9fa\";\n}\n.icon.neutral2:before {\n content: \"\\e9fb\";\n}\n.icon.hipster:before {\n content: \"\\e9fc\";\n}\n.icon.hipster2:before {\n content: \"\\e9fd\";\n}\n.icon.wondering:before {\n content: \"\\e9fe\";\n}\n.icon.wondering2:before {\n content: \"\\e9ff\";\n}\n.icon.sleepy:before {\n content: \"\\ea00\";\n}\n.icon.sleepy2:before {\n content: \"\\ea01\";\n}\n.icon.frustrated:before {\n content: \"\\ea02\";\n}\n.icon.frustrated2:before {\n content: \"\\ea03\";\n}\n.icon.crying:before {\n content: \"\\ea04\";\n}\n.icon.crying2:before {\n content: \"\\ea05\";\n}\n.icon.point-up:before {\n content: \"\\ea06\";\n}\n.icon.point-right:before {\n content: \"\\ea07\";\n}\n.icon.point-down:before {\n content: \"\\ea08\";\n}\n.icon.point-left:before {\n content: \"\\ea09\";\n}\n.icon.warning:before {\n content: \"\\ea0a\";\n}\n.icon.notification:before {\n content: \"\\ea0b\";\n}\n.icon.question:before {\n content: \"\\ea0c\";\n}\n.icon.plus:before {\n content: \"\\ea0d\";\n}\n.icon.minus:before {\n content: \"\\ea0e\";\n}\n.icon.info:before {\n content: \"\\ea0f\";\n}\n.icon.cancel-circle:before {\n content: \"\\ea10\";\n}\n.icon.blocked:before {\n content: \"\\ea11\";\n}\n.icon.cross:before {\n content: \"\\e80b\";\n}\n.icon.checkmark:before {\n content: \"\\e80c\";\n}\n.icon.checkmark2:before {\n content: \"\\ea12\";\n}\n.icon.spell-check:before {\n content: \"\\ea13\";\n}\n.icon.enter:before {\n content: \"\\ea14\";\n}\n.icon.exit:before {\n content: \"\\ea15\";\n}\n.icon.play2:before {\n content: \"\\ea16\";\n}\n.icon.pause:before {\n content: \"\\ea17\";\n}\n.icon.stop:before {\n content: \"\\ea18\";\n}\n.icon.previous:before {\n content: \"\\ea19\";\n}\n.icon.next:before {\n content: \"\\ea1a\";\n}\n.icon.backward:before {\n content: \"\\ea1b\";\n}\n.icon.forward2:before {\n content: \"\\ea1c\";\n}\n.icon.play3:before {\n content: \"\\ea1d\";\n}\n.icon.pause2:before {\n content: \"\\ea1e\";\n}\n.icon.stop2:before {\n content: \"\\ea1f\";\n}\n.icon.backward2:before {\n content: \"\\ea20\";\n}\n.icon.forward3:before {\n content: \"\\ea21\";\n}\n.icon.first:before {\n content: \"\\ea22\";\n}\n.icon.last:before {\n content: \"\\ea23\";\n}\n.icon.previous2:before {\n content: \"\\ea24\";\n}\n.icon.next2:before {\n content: \"\\ea25\";\n}\n.icon.eject:before {\n content: \"\\ea26\";\n}\n.icon.volume-high:before {\n content: \"\\ea27\";\n}\n.icon.volume-medium:before {\n content: \"\\ea28\";\n}\n.icon.volume-low:before {\n content: \"\\ea29\";\n}\n.icon.volume-mute:before {\n content: \"\\ea2a\";\n}\n.icon.volume-mute2:before {\n content: \"\\ea2b\";\n}\n.icon.volume-increase:before {\n content: \"\\ea2c\";\n}\n.icon.volume-decrease:before {\n content: \"\\ea2d\";\n}\n.icon.loop:before {\n content: \"\\ea2e\";\n}\n.icon.loop2:before {\n content: \"\\ea2f\";\n}\n.icon.infinite2:before {\n content: \"\\ea30\";\n}\n.icon.shuffle:before {\n content: \"\\ea31\";\n}\n.icon.arrow-up-left:before {\n content: \"\\ea32\";\n}\n.icon.arrow-up3:before {\n content: \"\\ea33\";\n}\n.icon.arrow-up-right:before {\n content: \"\\ea34\";\n}\n.icon.arrow-right3:before {\n content: \"\\ea35\";\n}\n.icon.arrow-down-right:before {\n content: \"\\ea36\";\n}\n.icon.arrow-down3:before {\n content: \"\\ea37\";\n}\n.icon.arrow-down-left:before {\n content: \"\\ea38\";\n}\n.icon.arrow-left3:before {\n content: \"\\ea39\";\n}\n.icon.arrow-up-left2:before {\n content: \"\\ea3a\";\n}\n.icon.arrow-up2:before {\n content: \"\\ea3b\";\n}\n.icon.arrow-up-right2:before {\n content: \"\\ea3c\";\n}\n.icon.arrow-right2:before {\n content: \"\\ea3d\";\n}\n.icon.arrow-down-right2:before {\n content: \"\\ea3e\";\n}\n.icon.arrow-down2:before {\n content: \"\\ea3f\";\n}\n.icon.arrow-down-left2:before {\n content: \"\\ea40\";\n}\n.icon.arrow-left2:before {\n content: \"\\ea41\";\n}\n.icon.circle-up:before {\n content: \"\\ea42\";\n}\n.icon.circle-right:before {\n content: \"\\ea43\";\n}\n.icon.circle-down:before {\n content: \"\\ea44\";\n}\n.icon.circle-left:before {\n content: \"\\ea45\";\n}\n.icon.tab:before {\n content: \"\\ea46\";\n}\n.icon.move-up:before {\n content: \"\\ea47\";\n}\n.icon.move-down:before {\n content: \"\\ea48\";\n}\n.icon.sort-alpha-asc:before {\n content: \"\\ea49\";\n}\n.icon.sort-alpha-desc:before {\n content: \"\\ea4a\";\n}\n.icon.sort-numeric-asc:before {\n content: \"\\ea4b\";\n}\n.icon.sort-numberic-desc:before {\n content: \"\\ea4c\";\n}\n.icon.sort-amount-asc:before {\n content: \"\\ea4d\";\n}\n.icon.sort-amount-desc:before {\n content: \"\\ea4e\";\n}\n.icon.command:before {\n content: \"\\ea4f\";\n}\n.icon.shift:before {\n content: \"\\ea50\";\n}\n.icon.ctrl:before {\n content: \"\\ea51\";\n}\n.icon.opt:before {\n content: \"\\ea52\";\n}\n.icon.checkbox-checked:before {\n content: \"\\ea53\";\n}\n.icon.checkbox-unchecked:before {\n content: \"\\ea54\";\n}\n.icon.radio-checked:before {\n content: \"\\ea55\";\n}\n.icon.radio-checked2:before {\n content: \"\\ea56\";\n}\n.icon.radio-unchecked:before {\n content: \"\\ea57\";\n}\n.icon.crop:before {\n content: \"\\ea58\";\n}\n.icon.make-group:before {\n content: \"\\ea59\";\n}\n.icon.ungroup:before {\n content: \"\\ea5a\";\n}\n.icon.scissors:before {\n content: \"\\ea5b\";\n}\n.icon.filter:before {\n content: \"\\ea5c\";\n}\n.icon.font:before {\n content: \"\\ea5d\";\n}\n.icon.ligature:before {\n content: \"\\ea5e\";\n}\n.icon.ligature2:before {\n content: \"\\ea5f\";\n}\n.icon.text-height:before {\n content: \"\\ea60\";\n}\n.icon.text-width:before {\n content: \"\\ea61\";\n}\n.icon.font-size:before {\n content: \"\\ea62\";\n}\n.icon.bold:before {\n content: \"\\ea63\";\n}\n.icon.underline:before {\n content: \"\\ea64\";\n}\n.icon.italic:before {\n content: \"\\ea65\";\n}\n.icon.strikethrough:before {\n content: \"\\ea66\";\n}\n.icon.omega:before {\n content: \"\\ea67\";\n}\n.icon.sigma:before {\n content: \"\\ea68\";\n}\n.icon.page-break:before {\n content: \"\\ea69\";\n}\n.icon.superscript:before {\n content: \"\\ea6a\";\n}\n.icon.subscript:before {\n content: \"\\ea6b\";\n}\n.icon.superscript2:before {\n content: \"\\ea6c\";\n}\n.icon.subscript2:before {\n content: \"\\ea6d\";\n}\n.icon.text-color:before {\n content: \"\\ea6e\";\n}\n.icon.pagebreak:before {\n content: \"\\ea6f\";\n}\n.icon.clear-formatting:before {\n content: \"\\ea70\";\n}\n.icon.table:before {\n content: \"\\ea71\";\n}\n.icon.table2:before {\n content: \"\\ea72\";\n}\n.icon.insert-template:before {\n content: \"\\ea73\";\n}\n.icon.pilcrow:before {\n content: \"\\ea74\";\n}\n.icon.ltr:before {\n content: \"\\ea75\";\n}\n.icon.rtl:before {\n content: \"\\ea76\";\n}\n.icon.section:before {\n content: \"\\ea77\";\n}\n.icon.paragraph-left:before {\n content: \"\\e903\";\n}\n.icon.paragraph-center:before {\n content: \"\\ea78\";\n}\n.icon.paragraph-right:before {\n content: \"\\ea79\";\n}\n.icon.paragraph-justify:before {\n content: \"\\ea7a\";\n}\n.icon.indent-increase:before {\n content: \"\\ea7b\";\n}\n.icon.indent-decrease:before {\n content: \"\\ea7c\";\n}\n.icon.share:before {\n content: \"\\ea7d\";\n}\n.icon.new-tab:before {\n content: \"\\ea7e\";\n}\n.icon.embed:before {\n content: \"\\ea7f\";\n}\n.icon.embed2:before {\n content: \"\\ea80\";\n}\n.icon.terminal:before {\n content: \"\\ea81\";\n}\n.icon.share2:before {\n content: \"\\ea82\";\n}\n.icon.mail:before {\n content: \"\\ea83\";\n}\n.icon.mail2:before {\n content: \"\\ea84\";\n}\n.icon.mail3:before {\n content: \"\\ea85\";\n}\n.icon.mail4:before {\n content: \"\\ea86\";\n}\n.icon.google2:before {\n content: \"\\ea87\";\n}\n.icon.google-plus:before {\n content: \"\\ea88\";\n}\n.icon.google-plus2:before {\n content: \"\\ea89\";\n}\n.icon.google-plus3:before {\n content: \"\\ea8a\";\n}\n.icon.google-drive:before {\n content: \"\\ea8b\";\n}\n.icon.facebook:before {\n content: \"\\e80d\";\n}\n.icon.facebook2:before {\n content: \"\\e80e\";\n}\n.icon.facebook3:before {\n content: \"\\e80f\";\n}\n.icon.ello:before {\n content: \"\\ea8c\";\n}\n.icon.instagram:before {\n content: \"\\ea8d\";\n}\n.icon.twitter:before {\n content: \"\\e810\";\n}\n.icon.twitter2:before {\n content: \"\\e811\";\n}\n.icon.twitter3:before {\n content: \"\\e812\";\n}\n.icon.feed2:before {\n content: \"\\ea8e\";\n}\n.icon.feed3:before {\n content: \"\\ea8f\";\n}\n.icon.feed4:before {\n content: \"\\ea90\";\n}\n.icon.youtube:before {\n content: \"\\ea91\";\n}\n.icon.youtube2:before {\n content: \"\\ea92\";\n}\n.icon.youtube3:before {\n content: \"\\ea93\";\n}\n.icon.youtube4:before {\n content: \"\\ea94\";\n}\n.icon.twitch:before {\n content: \"\\ea95\";\n}\n.icon.vimeo:before {\n content: \"\\ea96\";\n}\n.icon.vimeo2:before {\n content: \"\\ea97\";\n}\n.icon.vimeo3:before {\n content: \"\\ea98\";\n}\n.icon.lanyrd:before {\n content: \"\\ea99\";\n}\n.icon.flickr:before {\n content: \"\\ea9a\";\n}\n.icon.flickr2:before {\n content: \"\\ea9b\";\n}\n.icon.flickr3:before {\n content: \"\\ea9c\";\n}\n.icon.flickr4:before {\n content: \"\\ea9d\";\n}\n.icon.picassa:before {\n content: \"\\ea9e\";\n}\n.icon.picassa2:before {\n content: \"\\ea9f\";\n}\n.icon.dribbble:before {\n content: \"\\eaa0\";\n}\n.icon.dribbble2:before {\n content: \"\\eaa1\";\n}\n.icon.dribbble3:before {\n content: \"\\eaa2\";\n}\n.icon.forrst:before {\n content: \"\\eaa3\";\n}\n.icon.forrst2:before {\n content: \"\\eaa4\";\n}\n.icon.deviantart:before {\n content: \"\\eaa5\";\n}\n.icon.deviantart2:before {\n content: \"\\eaa6\";\n}\n.icon.steam:before {\n content: \"\\eaa7\";\n}\n.icon.steam2:before {\n content: \"\\eaa8\";\n}\n.icon.dropbox:before {\n content: \"\\eaa9\";\n}\n.icon.onedrive:before {\n content: \"\\eaaa\";\n}\n.icon.github:before {\n content: \"\\e813\";\n}\n.icon.github2:before {\n content: \"\\e814\";\n}\n.icon.github3:before {\n content: \"\\e815\";\n}\n.icon.github4:before {\n content: \"\\e816\";\n}\n.icon.github5:before {\n content: \"\\eaab\";\n}\n.icon.wordpress:before {\n content: \"\\eaac\";\n}\n.icon.wordpress2:before {\n content: \"\\eaad\";\n}\n.icon.joomla:before {\n content: \"\\eaae\";\n}\n.icon.blogger:before {\n content: \"\\eaaf\";\n}\n.icon.blogger2:before {\n content: \"\\eab0\";\n}\n.icon.tumblr:before {\n content: \"\\eab1\";\n}\n.icon.tumblr2:before {\n content: \"\\eab2\";\n}\n.icon.yahoo:before {\n content: \"\\eab3\";\n}\n.icon.tux:before {\n content: \"\\eab4\";\n}\n.icon.apple:before {\n content: \"\\eab5\";\n}\n.icon.finder:before {\n content: \"\\eab6\";\n}\n.icon.android:before {\n content: \"\\eab7\";\n}\n.icon.windows:before {\n content: \"\\eab8\";\n}\n.icon.windows8:before {\n content: \"\\eab9\";\n}\n.icon.soundcloud:before {\n content: \"\\eaba\";\n}\n.icon.soundcloud2:before {\n content: \"\\eabb\";\n}\n.icon.skype:before {\n content: \"\\eabc\";\n}\n.icon.reddit:before {\n content: \"\\eabd\";\n}\n.icon.linkedin:before {\n content: \"\\e817\";\n}\n.icon.linkedin2:before {\n content: \"\\e818\";\n}\n.icon.lastfm:before {\n content: \"\\eabe\";\n}\n.icon.lastfm2:before {\n content: \"\\eabf\";\n}\n.icon.delicious:before {\n content: \"\\eac0\";\n}\n.icon.stumbleupon:before {\n content: \"\\eac1\";\n}\n.icon.stumbleupon2:before {\n content: \"\\eac2\";\n}\n.icon.stackoverflow:before {\n content: \"\\e819\";\n}\n.icon.pinterest:before {\n content: \"\\eac3\";\n}\n.icon.pinterest2:before {\n content: \"\\eac4\";\n}\n.icon.xing:before {\n content: \"\\eac5\";\n}\n.icon.xing2:before {\n content: \"\\eac6\";\n}\n.icon.flattr:before {\n content: \"\\eac7\";\n}\n.icon.foursquare:before {\n content: \"\\eac8\";\n}\n.icon.paypal:before {\n content: \"\\eac9\";\n}\n.icon.paypal2:before {\n content: \"\\eaca\";\n}\n.icon.paypal3:before {\n content: \"\\eacb\";\n}\n.icon.yelp:before {\n content: \"\\eacc\";\n}\n.icon.file-pdf:before {\n content: \"\\eacd\";\n}\n.icon.file-openoffice:before {\n content: \"\\eace\";\n}\n.icon.file-word:before {\n content: \"\\eacf\";\n}\n.icon.file-excel:before {\n content: \"\\ead0\";\n}\n.icon.libreoffice:before {\n content: \"\\ead1\";\n}\n.icon.html5:before {\n content: \"\\ead2\";\n}\n.icon.html52:before {\n content: \"\\ead3\";\n}\n.icon.css3:before {\n content: \"\\ead4\";\n}\n.icon.git:before {\n content: \"\\ead5\";\n}\n.icon.svg:before {\n content: \"\\ead6\";\n}\n.icon.codepen:before {\n content: \"\\ead7\";\n}\n.icon.chrome:before {\n content: \"\\ead8\";\n}\n.icon.firefox:before {\n content: \"\\ead9\";\n}\n.icon.IE:before {\n content: \"\\eada\";\n}\n.icon.opera:before {\n content: \"\\eadb\";\n}\n.icon.safari:before {\n content: \"\\eadc\";\n}\n.icon.IcoMoon:before {\n content: \"\\eadd\";\n}","/*\n\n\tD A R K T H E M E\n\n\t____________________________________________________________\n\n\tNotes:\n\t- This file is interchangeable with theme-light.less\n\t- Only contains color variables\n\n*/\n\n//\n// General Styles\n// --------------------------------------------------\n@body-bg-color:\t\t\t\t\t@g2-kevlar;\n\n@default-text-color:\t\t\t@g13-mist;\n@default-link-color:\t\t\t@c-ocean;\n@default-link-hover:\t\t\t@c-laser;\n@default-btn-color:\t\t\t\t@c-ocean;\n@default-btn-hover:\t\t\t\t@c-laser;\n@default-selection-text:\t@g20-white;\n@default-selection-bg:\t\t@g9-mountain;\n\n//\n// Navigation Bar\n// --------------------------------------------------\n@nav-bg:\t\t\t\t\t\t@g19-ghost;\n@nav-logo:\t\t\t\t\t\t@g7-graphite;\n@nav-logo-hover:\t\t\t\t@c-ocean;\n@nav-hamburger:\t\t\t\t\t@g8-storm;\n@nav-hamburger-hover:\t\t\t@g10-wolf;\n@nav-search-bg:\t\t\t\t\t@g20-white;\n@nav-search-border:\t\t\t\t@g17-whisper;\n@nav-search-border-focus:\t\t@c-pool;\n@nav-search-placeholder:\t\t#00f;\n@nav-search-text:\t\t\t\t@g7-graphite;\n\n@algolia-background:\t\t\t@g6-smoke;\n@algolia-category-header:\t\t@g4-onyx;\n@algolia-category-header-text:\t@g12-forge;\n@algolia-suggestion-column:\t\t@g18-cloud;\n@algolia-suggestion-text:\t\t@g7-graphite;\n@algolia-suggestion-text-alt:\t@g9-mountain;\n@algolia-suggestion-content:\t@g20-white;\n\n@algolia-highlight-color:\t\t@c-ocean;\n\n@algolia-cursor-text:\t\t\t@c-neutrino;\n@algolia-cursor-bg1:\t\t\t@c-ocean;\n@algolia-cursor-bg2:\t\t\t@c-laser;\n@algolia-cursor-highlight:\t\t@g20-white;\n\n//\n// Article\n// --------------------------------------------------\n@article-bg:\t\t\t\t\t@g2-kevlar;\n@article-bg-rgba-0:\t\t\t\t\trgba(32,32,40,0);\n@article-bg-rgba-1:\t\t\t\t\trgba(32,32,40,1);\n@article-bg-heading:\t\t\t@g4-onyx;\n@article-bg-footer:\t\t\t\t@g3-castle;\n@article-bg-highlight:\t\t\t@g3-castle;\n@article-bg-darken:\t\t\t\t@g1-raven;\n@article-scrollbar:\t\t\t\t@g8-storm;\n\n@article-text:\t\t\t\t\t@g13-mist;\n@article-text-heading:\t\t\t@g18-cloud;\n@article-note-text:\t\t\t\t@c-rainforest;\n@article-note-bg:\t\t\t\t@g3-castle;\n@article-note-border:\t\t\t@c-rainforest;\n@article-note-code: @c-potassium;\n@article-note-code-bg: @g1-raven;\n@article-note-code-border: #3c4b4c;\n@article-gotcha-text:\t\t\t@c-dreamsicle;\n@article-gotcha-bg:\t\t\t\t@g3-castle;\n@article-gotcha-border:\t\t\t@c-dreamsicle;\n@article-gotcha-code: @c-potassium;\n@article-gotcha-code-bg: @g1-raven;\n@article-gotcha-code-border: #673c2c;\n\n@article-line-color:\t\t\t@g4-onyx;\n\n@article-code-color:\t\t\t@c-potassium;\n@article-code-border:\t\t\t@g4-onyx;\n@article-code-bg:\t\t\t\t@g1-raven;\n@article-code-scrollbar:\t\t@g4-onyx;\n@article-code-accent1:\t\t\t@g9-mountain;\n@article-code-accent2:\t\t\t@c-pool;\n@article-code-accent3:\t\t\t@c-viridian;\n@article-code-accent4:\t\t\t@c-ruby;\n@article-code-accent5:\t\t\t#ff6db0;\n@article-code-accent6:\t\t\t@c-pool;\n@article-code-accent7:\t\t\t#e90;\n\n@article-tooltip:\t\t\t\t@c-viridian;\n@article-tooltip-nested:\t\t@g20-white;\n@article-tooltip-text:\t\t\t@g6-smoke;\n@article-tooltip-bg:\t\t\t@g18-cloud;\n\n@old-version-text:\t\t\t\t@c-dreamsicle;\n@old-version-bg:\t\t\t\t@g3-castle;\n\n/* Fancy background on code blocks */\n.article-content {\n\tpre {\n\t\tbackground-attachment: fixed;\n\t\tbackground-repeat: no-repeat;\n\t\tbackground-position: center center;\n\t\tbackground-size: 70%;\n\t}\n\tstrong {\n\t\tcolor: @g16-pearl;\n\t}\n\tblockquote, dt > table {\n\t\tth,td {\n\t\t\tborder-color: @g5-pepper;\n\t\t}\n\t}\n}\n\n@tabs-body-bg:\t@g5-pepper;\n@tabs-link-bg: @g5-pepper;\n@tabs-link: @g13-mist;\n@tabs-link-hover: @g18-cloud;\n@tabs-link-active: @g18-cloud;\n\n//\n// Sidebar\n// --------------------------------------------------\n@sidebar-bg:\t\t\t\t\t@g1-raven;\n@sidebar-scrollbar:\t\t\t\t@g8-storm;\n@sidebar-divider:\t\t\t\t@g3-castle;\n@sidebar-title-color:\t\t\t@c-ocean;\n@sidebar-text:\t\t\t\t\t@g13-mist;\n@sidebar-hover:\t\t\t\t\t@g20-white;\n@sidebar-mask-a:\t\t\t\t@c-pool;\n@sidebar-mask-b:\t\t\t\t@c-ocean;\n@sidebar-toggle-icon: \t@g16-pearl;\n@sidebar-toggle-bg: \t\t@g6-smoke;\n\n//\n// Error Pages\n// --------------------------------------------------\n@error-bg:\t\t\t\t\t\t@g19-ghost;\n@error-bg-accent:\t\t\t\t@c-yeti;\n@error-text:\t\t\t\t\t@g8-storm;\n@error-decor:\t\t\t\t\t@c-ocean;\n\n//\n// Modal Form Fields\n// --------------------------------------------------\n@modal-input-bg: @g5-pepper;\n\n//\n// Telegraf Theme\n// --------------------------------------------------\n@telegraf-link:\t\t\t\t\t\t@c-dreamsicle;\n@telegraf-link-hover:\t\t\t\t@g20-white;\n@telegraf-btn:\t\t\t\t\t\t@c-dreamsicle;\n@telegraf-btn-hover:\t\t\t\t@c-tungsten;\n@telegraf-section-title:\t\t\t@c-dreamsicle;\n@telegraf-dropdown:\t\t\t\t\t@c-dreamsicle;\n@telegraf-dropdown-hover:\t\t\t@c-tungsten;\n@telegraf-dropdown-gradient-a:\t\t@c-dreamsicle;\n@telegraf-dropdown-gradient-b:\t\t@c-star;\n\n//\n// Chronograf Theme\n// --------------------------------------------------\n@chronograf-link:\t\t\t\t\t@c-comet;\n@chronograf-link-hover:\t\t\t\t@g20-white;\n@chronograf-btn:\t\t\t\t\t@c-comet;\n@chronograf-btn-hover:\t\t\t\t@c-potassium;\n@chronograf-section-title:\t\t\t@c-comet;\n@chronograf-dropdown:\t\t\t\t@c-comet;\n@chronograf-dropdown-hover:\t\t\t@c-potassium;\n@chronograf-dropdown-gradient-a:\t@c-comet;\n@chronograf-dropdown-gradient-b:\t@c-ocean;\n\n//\n// Kapacitor Theme\n// --------------------------------------------------\n@kapacitor-link:\t\t\t\t\t@c-rainforest;\n@kapacitor-link-hover:\t\t\t\t@g20-white;\n@kapacitor-btn:\t\t\t\t\t@c-rainforest-darker;\n@kapacitor-btn-hover:\t\t\t\t@c-rainforest;\n@kapacitor-section-title:\t\t\t@c-rainforest;\n@kapacitor-dropdown:\t\t\t\t@c-rainforest;\n@kapacitor-dropdown-hover:\t\t\t@c-honeydew;\n@kapacitor-dropdown-gradient-a:\t\t@c-rainforest;\n@kapacitor-dropdown-gradient-b:\t\t@c-pool;\n\n//\n// Flux Theme\n// --------------------------------------------------\n@flux-link:\t\t\t\t\t@c-rainforest;\n@flux-link-hover:\t\t\t\t@g20-white;\n@flux-section-title:\t\t\t@c-rainforest;\n@flux-dropdown:\t\t\t\t@c-rainforest;\n@flux-dropdown-hover:\t\t\t@c-honeydew;\n@flux-dropdown-gradient-a:\t\t@c-rainforest;\n@flux-dropdown-gradient-b:\t\t@c-pool;\n","/*\n\n\tInfluxData Docs Theme File\n\n\t\"Default Theme\" (Dark)\n*/\n\n//\n// Import Tools\n// --------------------------------------------------\n\n@import \"influx-palette.less\";\n@import \"variables.less\";\n@import \"icon-font.less\";\n\n//\n// Import Base Theme File\n// --------------------------------------------------\n@import \"theme-dark.less\";\n#theme-switch-dark { display: none; }\n\n//\n// Import UI Element styles\n// --------------------------------------------------\n@import \"normalize-3.0.2.less\";\n@import \"syntax.less\";\n@import \"layout.less\";\n\n//\n// Import Product Specific Themes\n// --------------------------------------------------\n@import \"theme-telegraf.less\";\n@import \"theme-chronograf.less\";\n@import \"theme-kapacitor.less\";\n@import \"theme-enterprise_kapacitor.less\";\n@import \"theme-flux.less\";\n",".klavika-font{font-family:Klavika-Light,'Helvetica Neue',Helvetica,Helvetica,Arial,Tahoma,Verdana,sans-serif;font-weight:200}@font-face{font-family:icomoon;src:url(../fonts/icomoon.eot?c3omf0);src:url(../fonts/icomoon.eot?c3omf0#iefix) format('embedded-opentype'),url(../fonts/icomoon.woff2?c3omf0) format('woff2'),url(../fonts/icomoon.ttf?c3omf0) format('truetype'),url(../fonts/icomoon.woff?c3omf0) format('woff'),url(../fonts/icomoon.svg?c3omf0#icomoon) format('svg');font-weight:400;font-style:normal}.icon{font-family:icomoon;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon.sun2:before{content:\"\\eae2\"}.icon.moon:before{content:\"\\eae3\"}.icon.logotype:before{content:\"\\e800\"}.icon.logo:before{content:\"\\e801\"}.icon.arrow-down:before{content:\"\\e802\"}.icon.arrow-up:before{content:\"\\e803\"}.icon.arrow-left:before{content:\"\\e804\"}.icon.arrow-right:before{content:\"\\e805\"}.icon.health:before{content:\"\\e806\"}.icon.lightning:before{content:\"\\e807\"}.icon.matrix:before{content:\"\\e808\"}.icon.cluster:before{content:\"\\e809\"}.icon.data:before{content:\"\\e80a\"}.icon.google:before{content:\"\\e81a\"}.icon.eyeball:before{content:\"\\e901\"}.icon.infinite:before{content:\"\\e902\"}.icon.dashboard:before{content:\"\\eade\"}.icon.analytics:before{content:\"\\eadf\"}.icon.cloud-stack:before{content:\"\\eae0\"}.icon.iot:before{content:\"\\eae1\"}.icon.home:before{content:\"\\e904\"}.icon.home2:before{content:\"\\e905\"}.icon.home3:before{content:\"\\e906\"}.icon.office:before{content:\"\\e907\"}.icon.newspaper:before{content:\"\\e908\"}.icon.pencil:before{content:\"\\e909\"}.icon.pencil2:before{content:\"\\e90a\"}.icon.quill:before{content:\"\\e90b\"}.icon.pen:before{content:\"\\e90c\"}.icon.blog:before{content:\"\\e90d\"}.icon.eyedropper:before{content:\"\\e90e\"}.icon.droplet:before{content:\"\\e90f\"}.icon.paint-format:before{content:\"\\e910\"}.icon.image:before{content:\"\\e911\"}.icon.images:before{content:\"\\e912\"}.icon.camera:before{content:\"\\e913\"}.icon.headphones:before{content:\"\\e914\"}.icon.music:before{content:\"\\e915\"}.icon.play:before{content:\"\\e916\"}.icon.film:before{content:\"\\e917\"}.icon.video-camera:before{content:\"\\e918\"}.icon.dice:before{content:\"\\e919\"}.icon.pacman:before{content:\"\\e91a\"}.icon.spades:before{content:\"\\e91b\"}.icon.clubs:before{content:\"\\e91c\"}.icon.diamonds:before{content:\"\\e91d\"}.icon.bullhorn:before{content:\"\\e91e\"}.icon.connection:before{content:\"\\e91f\"}.icon.podcast:before{content:\"\\e920\"}.icon.feed:before{content:\"\\e921\"}.icon.mic:before{content:\"\\e922\"}.icon.book:before{content:\"\\e923\"}.icon.books:before{content:\"\\e924\"}.icon.library:before{content:\"\\e925\"}.icon.file-text:before{content:\"\\e926\"}.icon.profile:before{content:\"\\e927\"}.icon.file-empty:before{content:\"\\e928\"}.icon.files-empty:before{content:\"\\e929\"}.icon.file-text2:before{content:\"\\e92a\"}.icon.file-picture:before{content:\"\\e92b\"}.icon.file-music:before{content:\"\\e92c\"}.icon.file-play:before{content:\"\\e92d\"}.icon.file-video:before{content:\"\\e92e\"}.icon.file-zip:before{content:\"\\e92f\"}.icon.copy:before{content:\"\\e930\"}.icon.paste:before{content:\"\\e931\"}.icon.stack:before{content:\"\\e932\"}.icon.folder:before{content:\"\\e933\"}.icon.folder-open:before{content:\"\\e934\"}.icon.folder-plus:before{content:\"\\e935\"}.icon.folder-minus:before{content:\"\\e936\"}.icon.folder-download:before{content:\"\\e937\"}.icon.folder-upload:before{content:\"\\e938\"}.icon.price-tag:before{content:\"\\e939\"}.icon.price-tags:before{content:\"\\e93a\"}.icon.barcode:before{content:\"\\e93b\"}.icon.qrcode:before{content:\"\\e93c\"}.icon.ticket:before{content:\"\\e93d\"}.icon.cart:before{content:\"\\e93e\"}.icon.coin-dollar:before{content:\"\\e93f\"}.icon.coin-euro:before{content:\"\\e940\"}.icon.coin-pound:before{content:\"\\e941\"}.icon.coin-yen:before{content:\"\\e942\"}.icon.credit-card:before{content:\"\\e943\"}.icon.calculator:before{content:\"\\e944\"}.icon.lifebuoy:before{content:\"\\e945\"}.icon.phone:before{content:\"\\e946\"}.icon.phone-hang-up:before{content:\"\\e947\"}.icon.address-book:before{content:\"\\e948\"}.icon.envelop:before{content:\"\\e949\"}.icon.pushpin:before{content:\"\\e94a\"}.icon.location:before{content:\"\\e94b\"}.icon.location2:before{content:\"\\e94c\"}.icon.compass:before{content:\"\\e94d\"}.icon.compass2:before{content:\"\\e94e\"}.icon.map:before{content:\"\\e94f\"}.icon.map2:before{content:\"\\e950\"}.icon.history:before{content:\"\\e951\"}.icon.clock:before{content:\"\\e952\"}.icon.clock2:before{content:\"\\e953\"}.icon.alarm:before{content:\"\\e954\"}.icon.bell:before{content:\"\\e955\"}.icon.stopwatch:before{content:\"\\e956\"}.icon.calendar:before{content:\"\\e957\"}.icon.printer:before{content:\"\\e958\"}.icon.keyboard:before{content:\"\\e959\"}.icon.display:before{content:\"\\e95a\"}.icon.laptop:before{content:\"\\e95b\"}.icon.mobile:before{content:\"\\e95c\"}.icon.mobile2:before{content:\"\\e95d\"}.icon.tablet:before{content:\"\\e95e\"}.icon.tv:before{content:\"\\e95f\"}.icon.drawer:before{content:\"\\e960\"}.icon.drawer2:before{content:\"\\e961\"}.icon.box-add:before{content:\"\\e962\"}.icon.box-remove:before{content:\"\\e963\"}.icon.download:before{content:\"\\e964\"}.icon.upload:before{content:\"\\e965\"}.icon.floppy-disk:before{content:\"\\e966\"}.icon.drive:before{content:\"\\e967\"}.icon.database:before{content:\"\\e968\"}.icon.undo:before{content:\"\\e969\"}.icon.redo:before{content:\"\\e96a\"}.icon.undo2:before{content:\"\\e96b\"}.icon.redo2:before{content:\"\\e96c\"}.icon.forward:before{content:\"\\e96d\"}.icon.reply:before{content:\"\\e96e\"}.icon.bubble:before{content:\"\\e96f\"}.icon.bubbles:before{content:\"\\e970\"}.icon.bubbles2:before{content:\"\\e971\"}.icon.bubble2:before{content:\"\\e972\"}.icon.bubbles3:before{content:\"\\e973\"}.icon.bubbles4:before{content:\"\\e974\"}.icon.user:before{content:\"\\e975\"}.icon.users:before{content:\"\\e976\"}.icon.user-plus:before{content:\"\\e977\"}.icon.user-minus:before{content:\"\\e978\"}.icon.user-check:before{content:\"\\e979\"}.icon.user-tie:before{content:\"\\e97a\"}.icon.quotes-left:before{content:\"\\e97b\"}.icon.quotes-right:before{content:\"\\e97c\"}.icon.hour-glass:before{content:\"\\e97d\"}.icon.spinner:before{content:\"\\e97e\"}.icon.spinner2:before{content:\"\\e97f\"}.icon.spinner3:before{content:\"\\e980\"}.icon.spinner4:before{content:\"\\e981\"}.icon.spinner5:before{content:\"\\e982\"}.icon.spinner6:before{content:\"\\e983\"}.icon.spinner7:before{content:\"\\e984\"}.icon.spinner8:before{content:\"\\e985\"}.icon.spinner9:before{content:\"\\e986\"}.icon.spinner10:before{content:\"\\e987\"}.icon.spinner11:before{content:\"\\e988\"}.icon.binoculars:before{content:\"\\e989\"}.icon.search:before{content:\"\\e98a\"}.icon.zoom-in:before{content:\"\\e98b\"}.icon.zoom-out:before{content:\"\\e98c\"}.icon.enlarge:before{content:\"\\e98d\"}.icon.shrink:before{content:\"\\e98e\"}.icon.enlarge2:before{content:\"\\e98f\"}.icon.shrink2:before{content:\"\\e990\"}.icon.key:before{content:\"\\e991\"}.icon.key2:before{content:\"\\e992\"}.icon.lock:before{content:\"\\e993\"}.icon.unlocked:before{content:\"\\e994\"}.icon.wrench:before{content:\"\\e995\"}.icon.equalizer:before{content:\"\\e996\"}.icon.equalizer2:before{content:\"\\e997\"}.icon.cog:before{content:\"\\e900\"}.icon.cogs:before{content:\"\\e998\"}.icon.hammer:before{content:\"\\e999\"}.icon.magic-wand:before{content:\"\\e99a\"}.icon.aid-kit:before{content:\"\\e99b\"}.icon.bug:before{content:\"\\e99c\"}.icon.pie-chart:before{content:\"\\e99d\"}.icon.stats-dots:before{content:\"\\e99e\"}.icon.stats-bars:before{content:\"\\e99f\"}.icon.stats-bars2:before{content:\"\\e9a0\"}.icon.trophy:before{content:\"\\e9a1\"}.icon.gift:before{content:\"\\e9a2\"}.icon.glass:before{content:\"\\e9a3\"}.icon.glass2:before{content:\"\\e9a4\"}.icon.mug:before{content:\"\\e9a5\"}.icon.spoon-knife:before{content:\"\\e9a6\"}.icon.leaf:before{content:\"\\e9a7\"}.icon.rocket:before{content:\"\\e9a8\"}.icon.meter:before{content:\"\\e9a9\"}.icon.meter2:before{content:\"\\e9aa\"}.icon.hammer2:before{content:\"\\e9ab\"}.icon.fire:before{content:\"\\e9ac\"}.icon.lab:before{content:\"\\e9ad\"}.icon.magnet:before{content:\"\\e9ae\"}.icon.bin:before{content:\"\\e9af\"}.icon.bin2:before{content:\"\\e9b0\"}.icon.briefcase:before{content:\"\\e9b1\"}.icon.airplane:before{content:\"\\e9b2\"}.icon.truck:before{content:\"\\e9b3\"}.icon.road:before{content:\"\\e9b4\"}.icon.accessibility:before{content:\"\\e9b5\"}.icon.target:before{content:\"\\e9b6\"}.icon.shield:before{content:\"\\e9b7\"}.icon.power:before{content:\"\\e9b8\"}.icon.switch:before{content:\"\\e9b9\"}.icon.power-cord:before{content:\"\\e9ba\"}.icon.clipboard:before{content:\"\\e9bb\"}.icon.list-numbered:before{content:\"\\e9bc\"}.icon.list:before{content:\"\\e9bd\"}.icon.list2:before{content:\"\\e9be\"}.icon.tree:before{content:\"\\e9bf\"}.icon.menu:before{content:\"\\e9c0\"}.icon.menu2:before{content:\"\\e9c1\"}.icon.menu3:before{content:\"\\e9c2\"}.icon.menu4:before{content:\"\\e9c3\"}.icon.cloud:before{content:\"\\e9c4\"}.icon.cloud-download:before{content:\"\\e9c5\"}.icon.cloud-upload:before{content:\"\\e9c6\"}.icon.cloud-check:before{content:\"\\e9c7\"}.icon.download2:before{content:\"\\e9c8\"}.icon.upload2:before{content:\"\\e9c9\"}.icon.download3:before{content:\"\\e9ca\"}.icon.upload3:before{content:\"\\e9cb\"}.icon.sphere:before{content:\"\\e9cc\"}.icon.earth:before{content:\"\\e9cd\"}.icon.link:before{content:\"\\e9ce\"}.icon.flag:before{content:\"\\e9cf\"}.icon.attachment:before{content:\"\\e9d0\"}.icon.eye:before{content:\"\\e9d1\"}.icon.eye-plus:before{content:\"\\e9d2\"}.icon.eye-minus:before{content:\"\\e9d3\"}.icon.eye-blocked:before{content:\"\\e9d4\"}.icon.bookmark:before{content:\"\\e9d5\"}.icon.bookmarks:before{content:\"\\e9d6\"}.icon.sun:before{content:\"\\e9d7\"}.icon.contrast:before{content:\"\\e9d8\"}.icon.brightness-contrast:before{content:\"\\e9d9\"}.icon.star-empty:before{content:\"\\e9da\"}.icon.star-half:before{content:\"\\e9db\"}.icon.star-full:before{content:\"\\e9dc\"}.icon.heart:before{content:\"\\e9dd\"}.icon.heart-broken:before{content:\"\\e9de\"}.icon.man:before{content:\"\\e9df\"}.icon.woman:before{content:\"\\e9e0\"}.icon.man-woman:before{content:\"\\e9e1\"}.icon.happy:before{content:\"\\e9e2\"}.icon.happy2:before{content:\"\\e9e3\"}.icon.smile:before{content:\"\\e9e4\"}.icon.smile2:before{content:\"\\e9e5\"}.icon.tongue:before{content:\"\\e9e6\"}.icon.tongue2:before{content:\"\\e9e7\"}.icon.sad:before{content:\"\\e9e8\"}.icon.sad2:before{content:\"\\e9e9\"}.icon.wink:before{content:\"\\e9ea\"}.icon.wink2:before{content:\"\\e9eb\"}.icon.grin:before{content:\"\\e9ec\"}.icon.grin2:before{content:\"\\e9ed\"}.icon.cool:before{content:\"\\e9ee\"}.icon.cool2:before{content:\"\\e9ef\"}.icon.angry:before{content:\"\\e9f0\"}.icon.angry2:before{content:\"\\e9f1\"}.icon.evil:before{content:\"\\e9f2\"}.icon.evil2:before{content:\"\\e9f3\"}.icon.shocked:before{content:\"\\e9f4\"}.icon.shocked2:before{content:\"\\e9f5\"}.icon.baffled:before{content:\"\\e9f6\"}.icon.baffled2:before{content:\"\\e9f7\"}.icon.confused:before{content:\"\\e9f8\"}.icon.confused2:before{content:\"\\e9f9\"}.icon.neutral:before{content:\"\\e9fa\"}.icon.neutral2:before{content:\"\\e9fb\"}.icon.hipster:before{content:\"\\e9fc\"}.icon.hipster2:before{content:\"\\e9fd\"}.icon.wondering:before{content:\"\\e9fe\"}.icon.wondering2:before{content:\"\\e9ff\"}.icon.sleepy:before{content:\"\\ea00\"}.icon.sleepy2:before{content:\"\\ea01\"}.icon.frustrated:before{content:\"\\ea02\"}.icon.frustrated2:before{content:\"\\ea03\"}.icon.crying:before{content:\"\\ea04\"}.icon.crying2:before{content:\"\\ea05\"}.icon.point-up:before{content:\"\\ea06\"}.icon.point-right:before{content:\"\\ea07\"}.icon.point-down:before{content:\"\\ea08\"}.icon.point-left:before{content:\"\\ea09\"}.icon.warning:before{content:\"\\ea0a\"}.icon.notification:before{content:\"\\ea0b\"}.icon.question:before{content:\"\\ea0c\"}.icon.plus:before{content:\"\\ea0d\"}.icon.minus:before{content:\"\\ea0e\"}.icon.info:before{content:\"\\ea0f\"}.icon.cancel-circle:before{content:\"\\ea10\"}.icon.blocked:before{content:\"\\ea11\"}.icon.cross:before{content:\"\\e80b\"}.icon.checkmark:before{content:\"\\e80c\"}.icon.checkmark2:before{content:\"\\ea12\"}.icon.spell-check:before{content:\"\\ea13\"}.icon.enter:before{content:\"\\ea14\"}.icon.exit:before{content:\"\\ea15\"}.icon.play2:before{content:\"\\ea16\"}.icon.pause:before{content:\"\\ea17\"}.icon.stop:before{content:\"\\ea18\"}.icon.previous:before{content:\"\\ea19\"}.icon.next:before{content:\"\\ea1a\"}.icon.backward:before{content:\"\\ea1b\"}.icon.forward2:before{content:\"\\ea1c\"}.icon.play3:before{content:\"\\ea1d\"}.icon.pause2:before{content:\"\\ea1e\"}.icon.stop2:before{content:\"\\ea1f\"}.icon.backward2:before{content:\"\\ea20\"}.icon.forward3:before{content:\"\\ea21\"}.icon.first:before{content:\"\\ea22\"}.icon.last:before{content:\"\\ea23\"}.icon.previous2:before{content:\"\\ea24\"}.icon.next2:before{content:\"\\ea25\"}.icon.eject:before{content:\"\\ea26\"}.icon.volume-high:before{content:\"\\ea27\"}.icon.volume-medium:before{content:\"\\ea28\"}.icon.volume-low:before{content:\"\\ea29\"}.icon.volume-mute:before{content:\"\\ea2a\"}.icon.volume-mute2:before{content:\"\\ea2b\"}.icon.volume-increase:before{content:\"\\ea2c\"}.icon.volume-decrease:before{content:\"\\ea2d\"}.icon.loop:before{content:\"\\ea2e\"}.icon.loop2:before{content:\"\\ea2f\"}.icon.infinite2:before{content:\"\\ea30\"}.icon.shuffle:before{content:\"\\ea31\"}.icon.arrow-up-left:before{content:\"\\ea32\"}.icon.arrow-up3:before{content:\"\\ea33\"}.icon.arrow-up-right:before{content:\"\\ea34\"}.icon.arrow-right3:before{content:\"\\ea35\"}.icon.arrow-down-right:before{content:\"\\ea36\"}.icon.arrow-down3:before{content:\"\\ea37\"}.icon.arrow-down-left:before{content:\"\\ea38\"}.icon.arrow-left3:before{content:\"\\ea39\"}.icon.arrow-up-left2:before{content:\"\\ea3a\"}.icon.arrow-up2:before{content:\"\\ea3b\"}.icon.arrow-up-right2:before{content:\"\\ea3c\"}.icon.arrow-right2:before{content:\"\\ea3d\"}.icon.arrow-down-right2:before{content:\"\\ea3e\"}.icon.arrow-down2:before{content:\"\\ea3f\"}.icon.arrow-down-left2:before{content:\"\\ea40\"}.icon.arrow-left2:before{content:\"\\ea41\"}.icon.circle-up:before{content:\"\\ea42\"}.icon.circle-right:before{content:\"\\ea43\"}.icon.circle-down:before{content:\"\\ea44\"}.icon.circle-left:before{content:\"\\ea45\"}.icon.tab:before{content:\"\\ea46\"}.icon.move-up:before{content:\"\\ea47\"}.icon.move-down:before{content:\"\\ea48\"}.icon.sort-alpha-asc:before{content:\"\\ea49\"}.icon.sort-alpha-desc:before{content:\"\\ea4a\"}.icon.sort-numeric-asc:before{content:\"\\ea4b\"}.icon.sort-numberic-desc:before{content:\"\\ea4c\"}.icon.sort-amount-asc:before{content:\"\\ea4d\"}.icon.sort-amount-desc:before{content:\"\\ea4e\"}.icon.command:before{content:\"\\ea4f\"}.icon.shift:before{content:\"\\ea50\"}.icon.ctrl:before{content:\"\\ea51\"}.icon.opt:before{content:\"\\ea52\"}.icon.checkbox-checked:before{content:\"\\ea53\"}.icon.checkbox-unchecked:before{content:\"\\ea54\"}.icon.radio-checked:before{content:\"\\ea55\"}.icon.radio-checked2:before{content:\"\\ea56\"}.icon.radio-unchecked:before{content:\"\\ea57\"}.icon.crop:before{content:\"\\ea58\"}.icon.make-group:before{content:\"\\ea59\"}.icon.ungroup:before{content:\"\\ea5a\"}.icon.scissors:before{content:\"\\ea5b\"}.icon.filter:before{content:\"\\ea5c\"}.icon.font:before{content:\"\\ea5d\"}.icon.ligature:before{content:\"\\ea5e\"}.icon.ligature2:before{content:\"\\ea5f\"}.icon.text-height:before{content:\"\\ea60\"}.icon.text-width:before{content:\"\\ea61\"}.icon.font-size:before{content:\"\\ea62\"}.icon.bold:before{content:\"\\ea63\"}.icon.underline:before{content:\"\\ea64\"}.icon.italic:before{content:\"\\ea65\"}.icon.strikethrough:before{content:\"\\ea66\"}.icon.omega:before{content:\"\\ea67\"}.icon.sigma:before{content:\"\\ea68\"}.icon.page-break:before{content:\"\\ea69\"}.icon.superscript:before{content:\"\\ea6a\"}.icon.subscript:before{content:\"\\ea6b\"}.icon.superscript2:before{content:\"\\ea6c\"}.icon.subscript2:before{content:\"\\ea6d\"}.icon.text-color:before{content:\"\\ea6e\"}.icon.pagebreak:before{content:\"\\ea6f\"}.icon.clear-formatting:before{content:\"\\ea70\"}.icon.table:before{content:\"\\ea71\"}.icon.table2:before{content:\"\\ea72\"}.icon.insert-template:before{content:\"\\ea73\"}.icon.pilcrow:before{content:\"\\ea74\"}.icon.ltr:before{content:\"\\ea75\"}.icon.rtl:before{content:\"\\ea76\"}.icon.section:before{content:\"\\ea77\"}.icon.paragraph-left:before{content:\"\\e903\"}.icon.paragraph-center:before{content:\"\\ea78\"}.icon.paragraph-right:before{content:\"\\ea79\"}.icon.paragraph-justify:before{content:\"\\ea7a\"}.icon.indent-increase:before{content:\"\\ea7b\"}.icon.indent-decrease:before{content:\"\\ea7c\"}.icon.share:before{content:\"\\ea7d\"}.icon.new-tab:before{content:\"\\ea7e\"}.icon.embed:before{content:\"\\ea7f\"}.icon.embed2:before{content:\"\\ea80\"}.icon.terminal:before{content:\"\\ea81\"}.icon.share2:before{content:\"\\ea82\"}.icon.mail:before{content:\"\\ea83\"}.icon.mail2:before{content:\"\\ea84\"}.icon.mail3:before{content:\"\\ea85\"}.icon.mail4:before{content:\"\\ea86\"}.icon.google2:before{content:\"\\ea87\"}.icon.google-plus:before{content:\"\\ea88\"}.icon.google-plus2:before{content:\"\\ea89\"}.icon.google-plus3:before{content:\"\\ea8a\"}.icon.google-drive:before{content:\"\\ea8b\"}.icon.facebook:before{content:\"\\e80d\"}.icon.facebook2:before{content:\"\\e80e\"}.icon.facebook3:before{content:\"\\e80f\"}.icon.ello:before{content:\"\\ea8c\"}.icon.instagram:before{content:\"\\ea8d\"}.icon.twitter:before{content:\"\\e810\"}.icon.twitter2:before{content:\"\\e811\"}.icon.twitter3:before{content:\"\\e812\"}.icon.feed2:before{content:\"\\ea8e\"}.icon.feed3:before{content:\"\\ea8f\"}.icon.feed4:before{content:\"\\ea90\"}.icon.youtube:before{content:\"\\ea91\"}.icon.youtube2:before{content:\"\\ea92\"}.icon.youtube3:before{content:\"\\ea93\"}.icon.youtube4:before{content:\"\\ea94\"}.icon.twitch:before{content:\"\\ea95\"}.icon.vimeo:before{content:\"\\ea96\"}.icon.vimeo2:before{content:\"\\ea97\"}.icon.vimeo3:before{content:\"\\ea98\"}.icon.lanyrd:before{content:\"\\ea99\"}.icon.flickr:before{content:\"\\ea9a\"}.icon.flickr2:before{content:\"\\ea9b\"}.icon.flickr3:before{content:\"\\ea9c\"}.icon.flickr4:before{content:\"\\ea9d\"}.icon.picassa:before{content:\"\\ea9e\"}.icon.picassa2:before{content:\"\\ea9f\"}.icon.dribbble:before{content:\"\\eaa0\"}.icon.dribbble2:before{content:\"\\eaa1\"}.icon.dribbble3:before{content:\"\\eaa2\"}.icon.forrst:before{content:\"\\eaa3\"}.icon.forrst2:before{content:\"\\eaa4\"}.icon.deviantart:before{content:\"\\eaa5\"}.icon.deviantart2:before{content:\"\\eaa6\"}.icon.steam:before{content:\"\\eaa7\"}.icon.steam2:before{content:\"\\eaa8\"}.icon.dropbox:before{content:\"\\eaa9\"}.icon.onedrive:before{content:\"\\eaaa\"}.icon.github:before{content:\"\\e813\"}.icon.github2:before{content:\"\\e814\"}.icon.github3:before{content:\"\\e815\"}.icon.github4:before{content:\"\\e816\"}.icon.github5:before{content:\"\\eaab\"}.icon.wordpress:before{content:\"\\eaac\"}.icon.wordpress2:before{content:\"\\eaad\"}.icon.joomla:before{content:\"\\eaae\"}.icon.blogger:before{content:\"\\eaaf\"}.icon.blogger2:before{content:\"\\eab0\"}.icon.tumblr:before{content:\"\\eab1\"}.icon.tumblr2:before{content:\"\\eab2\"}.icon.yahoo:before{content:\"\\eab3\"}.icon.tux:before{content:\"\\eab4\"}.icon.apple:before{content:\"\\eab5\"}.icon.finder:before{content:\"\\eab6\"}.icon.android:before{content:\"\\eab7\"}.icon.windows:before{content:\"\\eab8\"}.icon.windows8:before{content:\"\\eab9\"}.icon.soundcloud:before{content:\"\\eaba\"}.icon.soundcloud2:before{content:\"\\eabb\"}.icon.skype:before{content:\"\\eabc\"}.icon.reddit:before{content:\"\\eabd\"}.icon.linkedin:before{content:\"\\e817\"}.icon.linkedin2:before{content:\"\\e818\"}.icon.lastfm:before{content:\"\\eabe\"}.icon.lastfm2:before{content:\"\\eabf\"}.icon.delicious:before{content:\"\\eac0\"}.icon.stumbleupon:before{content:\"\\eac1\"}.icon.stumbleupon2:before{content:\"\\eac2\"}.icon.stackoverflow:before{content:\"\\e819\"}.icon.pinterest:before{content:\"\\eac3\"}.icon.pinterest2:before{content:\"\\eac4\"}.icon.xing:before{content:\"\\eac5\"}.icon.xing2:before{content:\"\\eac6\"}.icon.flattr:before{content:\"\\eac7\"}.icon.foursquare:before{content:\"\\eac8\"}.icon.paypal:before{content:\"\\eac9\"}.icon.paypal2:before{content:\"\\eaca\"}.icon.paypal3:before{content:\"\\eacb\"}.icon.yelp:before{content:\"\\eacc\"}.icon.file-pdf:before{content:\"\\eacd\"}.icon.file-openoffice:before{content:\"\\eace\"}.icon.file-word:before{content:\"\\eacf\"}.icon.file-excel:before{content:\"\\ead0\"}.icon.libreoffice:before{content:\"\\ead1\"}.icon.html5:before{content:\"\\ead2\"}.icon.html52:before{content:\"\\ead3\"}.icon.css3:before{content:\"\\ead4\"}.icon.git:before{content:\"\\ead5\"}.icon.svg:before{content:\"\\ead6\"}.icon.codepen:before{content:\"\\ead7\"}.icon.chrome:before{content:\"\\ead8\"}.icon.firefox:before{content:\"\\ead9\"}.icon.IE:before{content:\"\\eada\"}.icon.opera:before{content:\"\\eadb\"}.icon.safari:before{content:\"\\eadc\"}.icon.IcoMoon:before{content:\"\\eadd\"}.article-content pre{background-attachment:fixed;background-repeat:no-repeat;background-position:center center;background-size:70%}.article-content strong{color:#e7e8eb}.article-content blockquote td,.article-content blockquote th,.article-content dt>table td,.article-content dt>table th{border-color:#383846}#theme-switch-dark{display:none}/*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0;font-family:Roboto,Helvetica,Arial,Tahoma,Verdana,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}code[class*=language-],pre[class*=language-]{direction:ltr;text-align:left;white-space:pre;white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-o-pre-wrap;word-spacing:normal;word-break:normal;word-wrap:normal;-moz-tab-size:1;-o-tab-size:1;tab-size:1;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow:none}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{overflow:auto}:not(pre)>code[class*=language-]{white-space:normal}.highlight{color:#b1b6ff}.highlight .gh,.highlight .go,.highlight .na,.highlight .nt,.highlight .nv,.highlight .ow{color:#b1b6ff}.highlight .c,.highlight .c1,.highlight .ch,.highlight .cm,.highlight .cpf,.highlight .cs,.highlight .w{color:#757888}.highlight .gi{background-color:#757888}.highlight .k,.highlight .kc,.highlight .kd,.highlight .kn,.highlight .kp,.highlight .kr,.highlight .nn{color:#22adf6}.highlight .bp,.highlight .cp,.highlight .dl,.highlight .gt,.highlight .gu,.highlight .kt,.highlight .nb,.highlight .nc,.highlight .no,.highlight .s1,.highlight .s2,.highlight .sa,.highlight .sb,.highlight .sc,.highlight .sd,.highlight .se,.highlight .sh,.highlight .sr,.highlight .sx{color:#32b08c}.highlight .err,.highlight .fm,.highlight .gd,.highlight .gr,.highlight .nd,.highlight .ne,.highlight .nf,.highlight .nl,.highlight .si{color:#bf3d5e}.highlight .il,.highlight .m,.highlight .mb,.highlight .mf,.highlight .mh,.highlight .mi,.highlight .mo,.highlight .ni,.highlight .vc,.highlight .vg,.highlight .vi,.highlight .vm{color:#ff6db0}.highlight .gp,.highlight .o{color:#22adf6}.highlight .ss{color:#e90}.highlight .cs .gh,.highlight .gp,.highlight .gs,.highlight .gu,.highlight .k,.highlight .kc,.highlight .kd,.highlight .kn,.highlight .kp,.highlight .kr,.highlight .kt,.highlight .nc,.highlight .ne,.highlight .ni,.highlight .nn .nt,.highlight .ow,.highlight .se{font-weight:700}.highlight .c,.highlight .c1,.highlight .ch,.highlight .cm,.highlight .cpf,.highlight .cs,.highlight .ge,.highlight .sd,.highlight .w{font-style:italic}@font-face{font-family:Klavika-Light;src:url(../fonts/KlavikaLight-ItalicTF.otf);font-weight:200;font-style:italic}@font-face{font-family:Klavika-Bold;src:url(../fonts/KlavikaBoldBoldItalic.otf);font-weight:700;font-style:italic}html{overflow:auto}body,html{width:100%;height:100%;background-color:#202028;-webkit-overflow-scrolling:touch}body{color:#bec2cc;line-height:1;overflow:auto}*{box-sizing:border-box}a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0;font-size:100%;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:'';content:none}table{border-collapse:collapse;border-spacing:0}.navbar{top:0;left:0;font-size:1rem;height:4rem;width:100%;background-color:#fafafc;z-index:150;position:relative}.navbar--hamburger,.navbar--logo,.navbar--product-dropdown,.navbar--search,.theme-switcher{position:absolute}.navbar--logo{left:1em;top:1.05em}.navbar--logo a{font-size:1.5rem;color:#545667;transition:color .25s ease}.navbar--logo a:hover{color:#4591ed}.navbar--logo .divider{border-left:1px solid #545667;margin:0 .8rem 0 .5rem;vertical-align:text-top;opacity:.35;line-height:1.15em}.navbar--logo .navbar--docs{font-size:1.3rem}.navbar--hamburger{width:4rem;height:4rem;right:0}.navbar--hamburger .navbar--hamburger-bar{width:1.2rem;height:2px;background-color:#676978;border-radius:1px;position:absolute;left:50%;transition:all .3s ease}.navbar--hamburger .navbar--hamburger-bar.top{top:40%;transform:translate(-50%,-50%)}.navbar--hamburger .navbar--hamburger-bar.middle{top:50%;transform:translate(-50%,-50%)}.navbar--hamburger .navbar--hamburger-bar.bottom{top:60%;transform:translate(-50%,-50%)}.navbar--hamburger:hover{cursor:pointer}.navbar--hamburger:hover .navbar--hamburger-bar{background-color:#8e91a1}.navbar--hamburger.open .navbar--hamburger-bar.top{top:50%;transform:translate(-50%,-50%) rotate(45deg)}.navbar--hamburger.open .navbar--hamburger-bar.middle{opacity:0}.navbar--hamburger.open .navbar--hamburger-bar.bottom{top:50%;transform:translate(-50%,-50%) rotate(-45deg)}.navbar--product-menu{width:100%;position:absolute;top:.5em;height:auto;opacity:0;transition:opacity .25s ease;background:#4591ed;background:-moz-linear-gradient(top,#4591ed 0,#22adf6 100%);background:-webkit-linear-gradient(top,#4591ed 0,#22adf6 100%);background:linear-gradient(to bottom,#4591ed 0,#22adf6 100%)}.navbar--product-container{width:100%;height:auto;position:absolute;top:calc(4rem * .85);left:0;visibility:hidden;transition:all .25s ease;z-index:100}.navbar--product-container.open{visibility:visible}.navbar--product-container.open .navbar--product-menu{opacity:1}.navbar--product-divider{margin:.25em 0;height:2px;background-color:rgba(67,68,83,.1)}.navbar--product{font-size:19px}.navbar--product:active,.navbar--product:link,.navbar--product:visited{color:#fff;transition:background-color .25s ease,color .25s ease;background-color:transparent;padding:1.25rem 1rem;display:block;width:100%}.navbar--product:hover{background-color:rgba(56,56,70,.12);color:#fff}.navbar--product-dropdown{display:none;top:.5em;background-color:#4591ed;height:3rem;border-radius:3px;transition:background-color .25s ease,color .25s ease}.navbar--product-dropdown:hover{cursor:pointer;background-color:#22adf6}.navbar--product-dropdown .navbar--current-product,.navbar--product-dropdown .navbar--product-dropdown-caret{position:absolute;top:50%;transform:translateY(-50%);color:#fff}.navbar--product-dropdown .navbar--current-product{font-weight:700;left:1rem;font-size:19px;font-weight:400}.navbar--product-dropdown .navbar--product-dropdown-caret{right:1rem;font-size:.625em}.navbar--search{height:3rem;width:40%;right:4rem;top:.5em}.navbar--search>*{position:absolute!important;top:0;left:0;width:100%;height:100%}.navbar--search-field{position:absolute;top:0;left:0;width:100%;height:100%;border-radius:3px;border:2px solid #eeeff2;color:#545667;background-color:#fff;padding:0 1rem;font-weight:400;font-size:19px;outline:0;transition:border-color .3s ease,color .3s ease}.navbar--search-field:focus{border-color:#22adf6;color:#22adf6}.algolia-autocomplete{width:100%}.algolia-autocomplete .aa-hint,.algolia-autocomplete .aa-input{width:100%}.algolia-autocomplete .aa-hint{color:red}.algolia-autocomplete .aa-dropdown-menu{margin:.5rem 0 0 0;width:100%;padding:.75rem;background-color:rgba(67,68,83,.7);border:0}.algolia-autocomplete .aa-dropdown-menu .algolia-docsearch-suggestion--highlight{color:#4591ed}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion{cursor:pointer;padding:0}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion{background-color:#2c2c38;border-radius:3px;overflow:hidden}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion__secondary{border:none;margin-top:2px}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion:first-child .algolia-docsearch-suggestion__secondary{margin-top:0}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--category-header{border-radius:3px 3px 0 0;background-color:#2c2c38;color:#a4a8b6;padding:.75rem 1rem;font-weight:500}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--highlight{background-color:transparent}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--subcategory-column{border:none;background-color:#f6f6f8}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--content{background-color:#fff}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--title{margin-bottom:.25rem;display:inline-block;color:#545667}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--text{color:#757888}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--subcategory-column-text{font-size:.8rem;line-height:1.4em;color:#757888}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor .algolia-docsearch-suggestion--content{background:#4591ed;background:-moz-linear-gradient(left,#4591ed 0,#00c9ff 100%);background:-webkit-linear-gradient(left,#4591ed 0,#00c9ff 100%);background:linear-gradient(to right,#4591ed 0,#00c9ff 100%)}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor .algolia-docsearch-suggestion--text,.algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor .algolia-docsearch-suggestion--title{color:#bef0ff}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight,.algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor .algolia-docsearch-suggestion--title .algolia-docsearch-suggestion--highlight{color:#fff!important}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion em{font-weight:700;font-style:normal}.algolia-autocomplete .algolia-docsearch-footer{border:none;padding:.75rem 0 0 0}.theme-switcher{display:none;width:4rem;height:4rem;right:0;border:0;outline:0;background-color:#fafafc;color:#545667}.theme-switcher .icon{transition:color .25s ease}.theme-switcher .sun2{font-size:1.5rem}.theme-switcher .moon{font-size:1.2rem}.theme-switcher:hover{color:#4591ed;cursor:pointer}@media (max-width:500px){.navbar--logo .logotype{display:none}.navbar--logo .logo{display:inline}}@media (min-width:500px){.navbar--logo .logotype{display:inline}.navbar--logo .logo{display:none}}@media (min-width:900px){.theme-switcher{display:block}.navbar--product-dropdown{display:block;left:18rem;width:17rem}.navbar--product-container{left:18rem;width:17rem;top:2.9em}.navbar--product-container.open .navbar--dropdown-dismiss{width:100vw;height:100vh;position:fixed;top:0;left:0;z-index:100}.navbar--product-container.open .navbar--dropdown-dismiss:hover{cursor:pointer}.navbar--product-menu{border-radius:0 0 3px 3px;overflow:hidden;z-index:110}.navbar--search{left:35.5rem;width:calc(100% - 18rem - .5rem - .5rem - 4rem - 17rem)}.navbar--hamburger{display:none}.navbar--product.external{font-size:.8rem}}@media (min-width:1200px){.navbar--product-dropdown{left:23rem;width:17.5rem}.navbar--product-container{left:23rem;width:17.5rem}.navbar--search{left:41rem;width:calc(100% - 23rem - .5rem - .5rem - 4rem - 17.5rem)}}@media (min-width:1900px){.navbar--product-dropdown{left:28rem;width:17.5rem}.navbar--product-container{left:28rem;width:17.5rem}.navbar--search{left:46rem;width:calc(100% - 28rem - .5rem - .5rem - 4rem - 17.5rem)}}.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu{right:0!important;left:auto!important;overflow:scroll!important;max-height:90vh!important}.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu:before{display:none}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--wrapper{padding:.2rem 0}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column{display:none}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--content{padding:.75rem;width:100%;float:none}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--content:before{display:none}.algolia-autocomplete .algolia-docsearch-footer{padding:0}@media (min-width:1330px){.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu{right:auto!important;left:0!important}}@media (max-width:768px){.algolia-docsearch-suggestion--subcategory-column{display:none!important}.algolia-docsearch-suggestion--wrapper{margin:.25em 0!important}}@media (max-width:570px){.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu{position:fixed!important;top:3.5em!important;left:0;min-width:100vw}}.sidebar--toggle{padding:1em;position:relative;z-index:100;height:3rem;width:100%;background-color:#434453;text-align:left;font-style:italic;color:#f6f6f8;font-weight:500;transition:background-color .25s ease,color .25s ease}.sidebar--toggle:hover{color:#fff;background-color:#545667;cursor:pointer}.sidebar--toggle:after,.sidebar--toggle:before{content:\"\";position:absolute;display:block;right:1em;top:1.45em;height:2px;width:15px;background:#999dab}.sidebar--toggle:before{transform:rotate(90deg);transition:all .2s}.sidebar--toggle.open:before{transform:rotate(180deg)}.sidebar{background-color:#1c1c21;height:100%;overflow:hidden;transition:max-height .2s ease-out}.sidebar::-webkit-scrollbar{background-color:#1c1c21;width:16px}.sidebar::-webkit-scrollbar-track{background-color:#1c1c21}.sidebar::-webkit-scrollbar-thumb{border:4px solid #1c1c21;background-color:#676978;border-radius:8px}.sidebar.open{max-height:4000px;transition:max-height .5s ease-in}.sidebar--section{border-top:2px solid #292933;padding:2em 0}.sidebar--section:first-child{border:none}.sidebar--section-title{color:#4591ed;padding:0 2rem 1em 2rem;font-size:1.25em}.sidebar--section-title a:active,.sidebar--section-title a:link,.sidebar--section-title a:visited{color:#4591ed;font-weight:400}.sidebar--section-title a:hover{color:#fff}.sidebar--section ul{padding-left:3rem}.sidebar--section ul li{position:relative;margin-bottom:.25rem}ul.sidebar--children{margin-left:-1.85rem;height:0;overflow:hidden}ul.sidebar--children.open{height:auto;overflow:visible;border-left:2px solid #292933}ul.sidebar--children li:first-child{margin-top:.25rem}.sidebar--children-toggle{position:absolute;left:-2.25rem;top:.2rem;height:.9rem;width:.9rem;background:#434453;border-radius:50%;transition:all .2s}.sidebar--children-toggle:before{content:\"+\";color:#e7e8eb;display:block;text-align:center}.sidebar--children-toggle.open:before{content:\"–\"}.sidebar--children-toggle:hover{background:#4591ed}.sidebar--children-toggle:hover:before{color:#fff}a.sidebar--page:active,a.sidebar--page:link,a.sidebar--page:visited{display:inline-block;color:#bec2cc;font-weight:500;text-indent:-1rem;line-height:1.25}a.sidebar--page:hover{color:#fff}@media (max-width:900px){.sidebar{height:auto;max-height:0}}@media (min-width:900px){.sidebar--toggle{display:none}.sidebar,.sidebar.open{position:fixed;z-index:100;width:18rem;transform:none;transition:none;top:4rem;max-height:100%;overflow:auto;padding-bottom:4rem}}@media (min-width:1200px){.sidebar,.sidebar.open{width:23rem}}@media (min-width:1900px){.sidebar,.sidebar.open{width:28rem}.sidebar--support-ad{padding:2rem 1.5rem}.sidebar--support-ad--desc{font-size:1.2em}}#sidebar--ad{margin:-.75rem 1rem;border-radius:3px}#sidebar--ad.cloud{background:linear-gradient(45deg,#9394ff,#22adf6);padding:1.5rem 1.5rem;text-align:center}#sidebar--ad.cloud .text{margin:0 0 1rem 0;color:#fff;line-height:1.3em;font-size:1.1em;font-weight:500}#sidebar--ad.cloud .cta{margin-left:0;margin-right:0;border-radius:3px;color:#fff;border:2px solid rgba(255,255,255,.4);background-color:transparent;transition:background-color .25s ease,border-color .25s ease;padding:.75em 1.5em;font-weight:700;display:inline-block;font-size:1.125em}#sidebar--ad.cloud .cta:hover{background-color:rgba(255,255,255,.15);border-color:rgba(255,255,255,.6)}#sidebar--ad.enterprise{background:linear-gradient(to right,#4ed8a0,#22adf6);padding:1.5rem 1.5rem;text-align:center}#sidebar--ad.enterprise .text{margin:0 0 1rem 0;color:#fff;line-height:1.3em;font-weight:500}#sidebar--ad.enterprise .cta{margin-left:0;margin-right:0;border-radius:3px;color:#fff;border:2px solid rgba(255,255,255,.4);background-color:transparent;transition:background-color .25s ease,border-color .25s ease;padding:.75em 1.5em;font-weight:700;display:inline-block;font-size:1.125em}#sidebar--ad.enterprise .cta:hover{background-color:rgba(255,255,255,.15);border-color:rgba(255,255,255,.6)}#sidebar--ad.influx-days{padding:1rem;background:url(/promos/assets/influx-days-bg.jpg);background-repeat:no-repeat;background-size:cover;color:#fff;font-weight:700}#sidebar--ad.influx-days img{margin:.4rem 0 .8rem}#sidebar--ad.influx-days .text{font-size:1.75rem;margin-bottom:.5rem}#sidebar--ad.influx-days .details{font-size:.9rem;line-height:1.1rem}#sidebar--ad.influx-days .cta{display:inline-block;margin-top:.85rem;color:#fff;background:#5cbb47;font-size:1.15rem;padding:.45rem 1.75rem;border-radius:3px}::selection{background-color:#757888;color:#fff}::-moz-selection{background-color:#757888;color:#fff}a{text-decoration:none;transition:color .2s ease}a:hover{cursor:pointer}.article{background-color:#202028;overflow:auto;width:100%}.article::-webkit-scrollbar{background-color:#202028;width:16px}.article::-webkit-scrollbar-track{background-color:#202028}.article::-webkit-scrollbar-thumb{border:4px solid #202028;background-color:#676978;border-radius:8px}.article-section{display:block;width:100%;text-align:center;padding:2rem}.article-section.article-heading{background-color:#2c2c38;background-position:center center;background-size:cover!important;background-repeat:no-repeat}.article-section.article-heading h1{margin-bottom:0}.article-section.article-footer{background:#292933;background:-moz-linear-gradient(top,#292933 0,#202028 100%);background:-webkit-linear-gradient(top,#292933 0,#202028 100%);background:linear-gradient(to bottom,#292933 0,#202028 100%)}.article-content{text-align:left;width:100%;max-width:760px;color:#bec2cc}.article-content a:active,.article-content a:link,.article-content a:visited{font-weight:700;color:#4591ed}.article-content a:hover{color:#00c9ff;cursor:pointer}.article-content a.top{font-size:6px;padding:.25rem .25rem .35rem;border-radius:3px;transition:all .2s}.article-content a.top:hover{color:#202028!important;background:#00c9ff}.article-content a.off-page:link:after{content:'\\ea43';font-family:icomoon;font-size:.75em;font-weight:400;vertical-align:bottom;display:inline;margin-left:.5em;opacity:.25;transition:color .2s ease;color:#bec2cc}.article-content li a code,.article-content p a code{position:relative}.article-content li a code:after,.article-content p a code:after{content:\"\";position:absolute;top:-1px;right:-1px;width:0;height:0;border-style:solid;border-width:0 .5em .5em 0;border-color:transparent #b1b6ff transparent transparent;opacity:.5;transition:all .2s}.article-content li a code:hover:after,.article-content p a code:hover:after{opacity:1;border-color:transparent #00c9ff transparent transparent}.article-content li a.btn,.article-content p a.btn{display:inline-block;color:#fff;font-size:.95rem;padding:.5em 1em;margin:1em 0 1.5em}.article-content li a.btn.download:before,.article-content p a.btn.download:before{content:'\\e964';font-family:icomoon;font-size:1.15em;font-weight:400;vertical-align:bottom;display:inline;margin-right:.5em}.article-content>*{text-decoration:none}.article-content .note,.article-content .warn,.article-content blockquote,.article-content dt,.article-content h1,.article-content h2,.article-content h3,.article-content h4,.article-content li,.article-content ol,.article-content p,.article-content pre,.article-content ul{display:block;margin-bottom:1em;line-height:1.45em}.article-content table{margin:1em 0 1em;overflow-x:auto;background-color:#202028}.article-content h1,.article-content h2,.article-content h3,.article-content h4,.article-content h5,.article-content h6{width:100%;color:#f6f6f8}.article-content h1 a.offset-anchor,.article-content h2 a.offset-anchor,.article-content h3 a.offset-anchor,.article-content h4 a.offset-anchor,.article-content h5 a.offset-anchor,.article-content h6 a.offset-anchor{display:block;position:relative;top:-120px;visibility:hidden}.article-content h1 a:active,.article-content h1 a:hover,.article-content h1 a:link,.article-content h1 a:visited,.article-content h2 a:active,.article-content h2 a:hover,.article-content h2 a:link,.article-content h2 a:visited,.article-content h3 a:active,.article-content h3 a:hover,.article-content h3 a:link,.article-content h3 a:visited,.article-content h4 a:active,.article-content h4 a:hover,.article-content h4 a:link,.article-content h4 a:visited,.article-content h5 a:active,.article-content h5 a:hover,.article-content h5 a:link,.article-content h5 a:visited,.article-content h6 a:active,.article-content h6 a:hover,.article-content h6 a:link,.article-content h6 a:visited{text-decoration:none;font-weight:inherit;color:#f6f6f8!important}.article-content h1:first-child,.article-content h2:first-child,.article-content h3:first-child,.article-content h4:first-child,.article-content h5:first-child,.article-content h6:first-child{margin-top:0}.article-content h1{font-size:2.2em;font-family:Klavika-Light,'Helvetica Neue',Helvetica,Helvetica,Arial,Tahoma,Verdana,sans-serif;font-weight:200;line-height:1.2em}.article-content h2{font-size:1.9em;font-weight:600;margin:1.5em 0 .5em}.article-content h3{font-size:1.5em;font-weight:700;margin:1em 0 .5em}.article-content h4{font-size:1.3em;font-weight:400;font-style:italic;margin:1.25em 0 .5em}.article-content h5{line-height:1.6em}.article-content h6{font-size:.95em;font-style:italic;line-height:1.6em}.article-content.section-landing h2 a.off-page:link:hover{color:#4591ed!important}.article-content p{font-size:1em}.article-content ol,.article-content ul{font-size:1em;padding-left:1.125em}.article-content ol li,.article-content ul li{display:list-item;list-style-position:outside;padding-left:.5em;margin-bottom:.25em}.article-content ol p,.article-content ul p{margin-left:0}.article-content ul>li{list-style-type:disc!important}.article-content ol li,.article-content ul ol li{list-style-type:decimal}.article-content ol ol li{list-style-type:lower-alpha}.article-content ol ol ol li{list-style-type:decimal}.article-content ul ul ul li{list-style-type:square}.article-content li:last-child{margin-bottom:0}.article-content ol ol,.article-content ol ul,.article-content ul ol,.article-content ul ul{width:100%;margin-left:0;margin-bottom:0;margin-top:.25em}.article-content hr{width:100%;height:2px;margin-top:.25em;margin-bottom:1em;border:none;display:block;background-color:#2c2c38}.article-content img{max-width:100%;height:auto;border-radius:3px}.article-content td,.article-content th{border:1px solid #2c2c38;font-size:.875em;line-height:1.2em;padding:.75em 1.5em}.article-content tr:nth-child(even){background-color:#1c1c21}.article-content thead tr{background-color:#292933!important}.article-content thead th{padding:1.25em 1.5em}.article-content .note,.article-content .warn,.article-content blockquote,.article-content dt{font-size:.9em;padding:1em 1.5em;border-radius:3px;border-style:solid;border-left-width:6px}.article-content .note h4,.article-content .note ol,.article-content .note p,.article-content .note pre,.article-content .note ul,.article-content .warn h4,.article-content .warn ol,.article-content .warn p,.article-content .warn pre,.article-content .warn ul,.article-content blockquote h4,.article-content blockquote ol,.article-content blockquote p,.article-content blockquote pre,.article-content blockquote ul,.article-content dt h4,.article-content dt ol,.article-content dt p,.article-content dt pre,.article-content dt ul{width:100%;margin-left:0}.article-content .note>:last-child,.article-content .warn>:last-child,.article-content blockquote>:last-child,.article-content dt>:last-child{margin-bottom:0}.article-content .note .tooltip,.article-content .warn .tooltip,.article-content blockquote .tooltip,.article-content dt .tooltip{color:#fff}.article-content .note,.article-content blockquote{font-style:italic;color:#4ed8a0;border-color:#4ed8a0;background-color:#292933}.article-content .note code,.article-content blockquote code{color:#b1b6ff;background:#1c1c21;border:1px solid #3c4b4c}.article-content .note pre,.article-content blockquote pre{background:#1c1c21;border-color:#3c4b4c}.article-content .note pre code,.article-content blockquote pre code{border:none}.article-content .warn,.article-content dt{color:#ff8564;border-color:#ff8564;background-color:#292933}.article-content .warn code,.article-content dt code{color:#b1b6ff;background:#1c1c21;border:1px solid #673c2c}.article-content .warn pre,.article-content dt pre{background:#1c1c21;border-color:#673c2c}.article-content .warn pre code,.article-content dt pre code{border:none}.article-content code{font-family:Consolas,\"Lucida Console\",Monaco,monospace;-moz-tab-size:1;-o-tab-size:1;tab-size:1;direction:ltr;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;font-size:.8em!important;font-style:normal!important;display:inline;border-radius:3px;border-width:1px;border-color:#2c2c38;border-style:solid;padding:.1em .5em;-webkit-font-smoothing:subpixel-antialiased!important;-moz-osx-font-smoothing:auto!important;font-weight:400!important;color:#b1b6ff;background-color:#1c1c21}.article-content pre{display:block;padding:.75em 1em;overflow:auto;border-radius:3px;border-style:solid;border-width:1px 1px 1px 6px;background-color:#1c1c21;border-color:#2c2c38;z-index:99;line-height:1.1em!important}.article-content pre code{white-space:pre;word-spacing:normal;word-break:normal;border:none;padding:0;border-radius:0;background-color:transparent}.article-content pre::-webkit-scrollbar{background-color:#1c1c21;width:16px}.article-content pre::-webkit-scrollbar-track{background-color:#1c1c21}.article-content pre::-webkit-scrollbar-thumb{border:4px solid #1c1c21;background-color:#2c2c38;border-radius:calc(16px / 2)}.page-nav-btns{display:flex;position:relative;justify-content:space-between;margin:3em 0 2em}.page-nav-btns a{display:flex;align-items:center;color:#fff!important;font-size:.95rem;padding:.75rem 1rem;margin:0 .15rem}.page-nav-btns a.prev{position:absolute;left:0}.page-nav-btns a.prev:before{content:'\\e804';font-family:icomoon;font-size:.85rem;font-weight:400;vertical-align:middle;display:inline;margin-right:.85rem}.page-nav-btns a.next{position:absolute;right:0}.page-nav-btns a.next:after{content:'\\e805';font-family:icomoon;font-size:.85rem;font-weight:400;vertical-align:middle;display:inline;margin-left:.85rem}.truncate{position:relative;margin-bottom:3.5rem}.truncate .truncate-bottom{position:absolute;bottom:-30px;width:100%;z-index:100%;height:auto}.truncate a.truncate-toggle{display:block;width:100px;margin:0 auto;color:#bec2cc;background:#202028;padding:.45rem;text-align:center;font-size:.75rem;text-transform:uppercase;border-radius:3px;transition:color .2s}.truncate a.truncate-toggle:before{content:\"Show Less\"}.truncate a.truncate-toggle:hover{color:#4591ed}.truncate.closed{min-height:200px;max-height:25vh;overflow:hidden}.truncate.closed .truncate-bottom{bottom:0;background-image:linear-gradient(to bottom,rgba(32,32,40,0),#202028);height:100px}.truncate.closed a.truncate-toggle{margin-top:75px}.truncate.closed a.truncate-toggle:before{content:\"Show More\"}.tooltip{position:relative;display:inline-block;z-index:10;font-weight:900;color:#32b08c}.tooltip-container{position:absolute;top:0;left:50%;transform:translateX(-50%);overflow:visible;visibility:hidden}.tooltip-text{font-weight:600;line-height:2em;height:2em;position:absolute;border-radius:3px;padding:0 .75em;font-size:.9rem;left:50%;transform:translate(-50%,-1.875rem);transition:all .2s ease;white-space:nowrap;opacity:0;font-style:normal!important;color:#434453;background-color:#f6f6f8}.tooltip-text:after{content:'';position:absolute;left:50%;bottom:-14px;transform:translateX(-50%);border-top:8px solid #f6f6f8;border-right:8px solid transparent;border-bottom:8px solid transparent;border-left:8px solid transparent}.tooltip:hover .tooltip-container{visibility:visible}.tooltip:hover .tooltip-text{opacity:1;transform:translate(-50%,-2rem)}.old-version{width:100%;display:inline-block;border-radius:3px;font-size:1em;line-height:1.25em;padding:1.5em 1.5em 1.5em 4em;color:#ff8564;background-color:#292933;position:relative;margin-bottom:1em}.old-version:after{content:\"\\ea0a\";font-family:icomoon;position:absolute;top:50%;left:2em;transform:translate(-50%,-50%) scale(1.5,1.5);font-size:1em}.section-landing h2.no-paragraph{margin:0 0 1rem;border:none}.view-in-chronograf{display:flex;justify-content:flex-end;position:relative;background-color:#2c2c38;margin-top:-1.1rem;margin-bottom:1rem;padding:.15rem;font-size:.8rem;border-radius:0 0 3px 3px;align-items:center}.view-in-chronograf .chronograf-btn{display:inline-block;padding:.45rem .6rem;color:#fff!important;background:linear-gradient(to left,#9394ff,#22adf6);border-radius:calc(3px / 2);transition:all .5s ease}.view-in-chronograf .chronograf-btn:after{content:'\\e801';margin-left:.4rem;font-family:icomoon}.view-in-chronograf .chronograf-btn:hover{color:#fff!important;opacity:1}.view-in-chronograf .settings{opacity:.25;color:#bec2cc!important;margin-right:.75em;transition:opacity .2s ease}.view-in-chronograf .settings:hover{opacity:1}.modal-overlay{display:none;position:fixed;z-index:1000;left:0;top:0;width:100%;height:100%;overflow:auto;opacity:.75;background:linear-gradient(#9394ff,#4591ed)}.modal-content{display:none;background:#202028;padding:2rem 2rem 1.5rem;border-radius:3px;position:fixed;top:10vh;left:50%;transform:translateX(-50%);z-index:1001;width:90vw;max-width:38rem;transition:top .4s ease}.modal-content.open{top:40vh}.modal-content input{width:100%;min-width:10rem;border-radius:3px;border:2px solid #383846;background-color:#383846;padding:.5rem;font-weight:400;font-size:1rem;outline:0;transition:border-color .3s ease,color .3s ease}.modal-content input:focus{border-color:#22adf6}.modal-content button{border:none;outline:0}.modal-content button:focus{background:#4591ed!important}.modal-content label{display:block;margin-bottom:.4rem;font-weight:600}#default-chronograf-url{display:inline-block;margin:.5rem 0 0 .25rem;font-size:.8rem;font-style:italic;font-weight:400}#default-chronograf-url:hover{text-transform:underline}.flex-form{display:flex;justify-content:space-between}.flex-form .save-btn{width:5.5rem;margin:0 0 0 .25rem;text-align:center;padding:.75rem 1rem;color:#fff;border-radius:3px;font-weight:600;transition:background .2s}@media (max-width:500px){.flex-form{flex-flow:column}.flex-form .save-btn{width:100%;margin:.25rem 0 0}#default-chronograf-url{display:block;margin:1rem auto 0}}#save-chronograf-url button{background:#9394ff}#save-chronograf-url button:hover{background:#4591ed}@media (min-width:900px){.article{padding-left:18rem}.article-section{padding:3rem}.article-content code,.article-content pre,.article-content td,.article-content th{border-width:2px}.article-content pre{border-left-width:6px}}@media (min-width:1200px){.article{padding-left:23rem}.article-section{padding:4.5rem}.old-version{width:60%}}@media (min-width:1900px){.article{padding-left:28rem}.article-section{padding:5rem 11rem}.article-content{font-size:1.125rem}}.homepage{overflow:auto;min-height:calc(100vh - 4rem);width:100%;z-index:2;background:#2c2c38;background:-moz-linear-gradient(left,#2c2c38 0,#0f0e15 100%);background:-webkit-linear-gradient(left,#2c2c38 0,#0f0e15 100%);background:linear-gradient(to right,#2c2c38 0,#0f0e15 100%);font-size:0;display:flex;flex-direction:column;flex-wrap:wrap;justify-content:space-between}.homepage .cards-enterprise,.homepage .cards-oss,.homepage .cards-special{display:flex;flex-direction:row;width:100%;flex-wrap:wrap;flex:1}.homepage--card{width:100%;display:inline-block;overflow:hidden;position:relative}.homepage--card-mask{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.1;transition:opacity .75s ease,transform .75s ease;z-index:1;background-attachment:scroll;background-size:cover;background-position:center center;background-repeat:no-repeat;transform:scale(1,1)}.homepage--card:hover .homepage--card-mask{opacity:1;transform:scale(1.2,1.2)}.homepage--card:hover .homepage--card-title{color:#fff!important}.homepage--card-container{position:relative;z-index:2;width:100%;display:inline-block;text-align:center;padding:4rem 3rem;font-size:0}.homepage--card-container a:active,.homepage--card-container a:link,.homepage--card-container a:visited{color:#4591ed;transition:color .25s ease;text-decoration:none}.homepage--card-container a:hover{color:#00c9ff}.homepage--card-description,.homepage--card-title{text-align:left;display:inline-block;width:100%;vertical-align:middle}.homepage--card-title{font-size:2rem;font-family:Klavika-Light,sans-serif;font-weight:200;font-style:italic;color:#4591ed;margin-bottom:.5em;transition:color .75s ease}.homepage--card-description{font-size:1rem;color:#bec2cc;line-height:1.4em;font-weight:400}.homepage--card-link{display:inline-block;font-size:.875rem;font-weight:600;margin-left:.25rem;padding:2px 11px;border-radius:3px}.homepage--card-link:first-of-type{margin-top:1rem}.homepage--card.card-telegraf .homepage--card-mask{background-image:url(/img/home-telegraf.svg);background-color:#f95f53}.homepage--card.card-telegraf .homepage--card-description{color:#fff}.homepage--card.card-telegraf .homepage--card-title{color:#ff8564}.homepage--card.card-telegraf a.homepage--card-link:active,.homepage--card.card-telegraf a.homepage--card-link:link,.homepage--card.card-telegraf a.homepage--card-link:visited{color:#fff;transition:background-color .25s ease,color .25s ease}.homepage--card.card-telegraf a.homepage--card-link:hover{color:#ff8564;background-color:#fff}.homepage--card.card-influxdb .homepage--card-mask{background-image:url(/img/home-influxdb.svg);background-color:#4591ed}.homepage--card.card-influxdb .homepage--card-description{color:#fff}.homepage--card.card-influxdb .homepage--card-title{color:#00c9ff}.homepage--card.card-influxdb a.homepage--card-link:active,.homepage--card.card-influxdb a.homepage--card-link:link,.homepage--card.card-influxdb a.homepage--card-link:visited{color:#fff;transition:background-color .25s ease,color .25s ease}.homepage--card.card-influxdb a.homepage--card-link:hover{color:#22adf6;background-color:#fff}.homepage--card.card-chronograf .homepage--card-mask{background-image:url(/img/home-chronograf.svg);background-color:#7a65f2}.homepage--card.card-chronograf .homepage--card-description{color:#fff}.homepage--card.card-chronograf .homepage--card-title{color:#9394ff}.homepage--card.card-chronograf a.homepage--card-link:active,.homepage--card.card-chronograf a.homepage--card-link:link,.homepage--card.card-chronograf a.homepage--card-link:visited{color:#fff;transition:background-color .25s ease,color .25s ease}.homepage--card.card-chronograf a.homepage--card-link:hover{color:#9394ff;background-color:#fff}.homepage--card.card-kapacitor .homepage--card-mask{background-image:url(/img/home-kapacitor.svg);background-color:#4ed8a0}.homepage--card.card-kapacitor .homepage--card-description{color:#fff}.homepage--card.card-kapacitor .homepage--card-title{color:#4ed8a0}.homepage--card.card-kapacitor a.homepage--card-link:active,.homepage--card.card-kapacitor a.homepage--card-link:link,.homepage--card.card-kapacitor a.homepage--card-link:visited{color:#fff;transition:background-color .25s ease,color .25s ease}.homepage--card.card-kapacitor a.homepage--card-link:hover{color:#4ed8a0;background-color:#fff}.homepage--card.card-enterprise_kapacitor .homepage--card-mask{background-image:url(/img/home-kapacitor.svg);background-color:#4ed8a0}.homepage--card.card-enterprise_kapacitor .homepage--card-description{color:#fff}.homepage--card.card-enterprise_kapacitor .homepage--card-title{color:#4ed8a0}.homepage--card.card-enterprise_kapacitor a.homepage--card-link:active,.homepage--card.card-enterprise_kapacitor a.homepage--card-link:link,.homepage--card.card-enterprise_kapacitor a.homepage--card-link:visited{color:#fff;transition:background-color .25s ease,color .25s ease}.homepage--card.card-enterprise_kapacitor a.homepage--card-link:hover{color:#4ed8a0;background-color:#fff}.homepage--card.card-enterprise_influxdb .homepage--card-mask{background-image:url(/img/home-influxdb.svg);background-color:#4591ed}.homepage--card.card-enterprise_influxdb .homepage--card-description{color:#fff}.homepage--card.card-enterprise_influxdb .homepage--card-title{color:#00c9ff}.homepage--card.card-enterprise_influxdb a.homepage--card-link:active,.homepage--card.card-enterprise_influxdb a.homepage--card-link:link,.homepage--card.card-enterprise_influxdb a.homepage--card-link:visited{color:#fff;transition:background-color .25s ease,color .25s ease}.homepage--card.card-enterprise_influxdb a.homepage--card-link:hover{color:#22adf6;background-color:#fff}.homepage--card.card-flux .homepage--card-mask{background-image:url(/img/home-flux.svg);background-color:#15a194;opacity:1}.homepage--card.card-flux .homepage--card-description{color:#fff}.homepage--card.card-flux .homepage--card-title{color:#fff}.homepage--card.card-flux a.homepage--card-link:active,.homepage--card.card-flux a.homepage--card-link:link,.homepage--card.card-flux a.homepage--card-link:visited{color:#fff;transition:background-color .25s ease,color .25s ease}.homepage--card.card-flux a.homepage--card-link:active.download,.homepage--card.card-flux a.homepage--card-link:link.download,.homepage--card.card-flux a.homepage--card-link:visited.download{display:none}.homepage--card.card-flux a.homepage--card-link:hover{color:#32b08c;background-color:#fff}.homepage--card.card-platform{width:100%;background:linear-gradient(to right,#4591ed,#22adf6);display:flex;align-items:center}.homepage--card.card-platform .homepage--card-container{padding-bottom:3rem}.homepage--card.card-platform .homepage--card-mask{background-image:url(/img/home-influxdb.svg);background-color:#4591ed;opacity:.9}.homepage--card.card-platform .homepage--card-description{color:#fff;text-align:center}.homepage--card.card-platform .homepage--card-title{color:#fff;text-align:center;font-size:2.15rem}.homepage--card.card-platform a.homepage--card-link:active,.homepage--card.card-platform a.homepage--card-link:link,.homepage--card.card-platform a.homepage--card-link:visited{color:#fff;transition:background-color .25s ease,color .25s ease}.homepage--card.card-platform a.homepage--card-link:hover{color:#22adf6;background-color:#fff}.homepage--card.card-platform a.btn{margin:1.75rem 0 1rem;padding:1em 1.5em;display:inline-block;background:#fff;color:#22adf6;border-radius:3px;font-size:1rem;font-weight:700;transition:all .2s;box-shadow:0 0 15px rgba(255,255,255,0)}.homepage--card.card-platform a.btn:hover{box-shadow:0 0 15px #fff}@media (min-width:900px){.homepage--card{width:50%;flex-grow:1}}@media (min-width:1200px){.homepage--card-container{padding:3.5rem}.homepage--card-description{font-size:1.075rem}.homepage--card{width:25%;height:auto}.homepage--card.card-platform{width:75%}.homepage--card.card-enterprise_influxdb,.homepage--card.card-enterprise_kapacitor{width:50%}}@media (min-width:1900px){.homepage--card-container{padding:4rem}.homepage--card-description{font-size:1.125rem}}.error-page{overflow:scroll;top:4rem;height:100%;width:100%;background:#fafafc;background:-moz-linear-gradient(top,#fafafc 0,#f0fcff 100%);background:-webkit-linear-gradient(top,#fafafc 0,#f0fcff 100%);background:linear-gradient(to bottom,#fafafc 0,#f0fcff 100%)}.error-content{margin:15vh auto;width:85%;max-width:400px;min-width:240px;font-size:15px;line-height:19px;color:#676978}.error-content h1{color:#4591ed;display:block;margin:0 auto 50px;padding-top:15px;width:212px;height:212px;border-radius:50%;text-align:center;font-size:90px;font-weight:200;line-height:180px;position:relative;border:2px solid #4591ed}.flex{display:flex;justify-content:space-around}.wayfinding{margin-bottom:2rem}.btn{display:block;padding:.5rem;background:#4591ed;color:#fff;border-radius:3px;text-align:center;transition:background .2s}.btn.back{flex-grow:1;margin-right:.35rem}.btn.back:before{content:\"\\ea41\";font-family:icomoon;margin-right:.5rem;font-size:1rem}.btn.project{flex-grow:3;display:none}.btn.project:before{content:\"\\e801\";font-family:icomoon;margin-right:.5rem;flex-grow:3}.btn:hover{background:#22adf6}@media (min-width:900px){.error-content{font-size:17px;line-height:22px}}@media (min-width:1900px){.error-content{font-size:21px;line-height:32px}}.tabs-container{margin:2em 0 2em}.tabs{flex-grow:1;border-radius:3px 0 0 3px}.tabs p{display:flex;flex-wrap:wrap}.tabs a{flex-grow:1;margin:2px;font-size:.875em;color:#bec2cc!important;padding:.5em 1em;display:inline-block;text-align:center;border-radius:3px;background-color:rgba(56,56,70,.5);transition:background-color .2s,color .2s}.tabs a:hover{color:#f6f6f8!important}.tabs a.is-active{color:#fff!important;background:#4591ed}.tab-content{width:100%}.tab-content>*{width:100%!important;margin-left:0!important}.tab-content:not(:first-child){display:none}.tab-content-container{position:relative;border-radius:0 3px 3px 3px}.code-tabs-content{margin:.75rem 0 3rem;width:100%}.code-tabs-content>*{width:100%!important;margin-left:0!important}.code-tabs-wrapper{margin:1.5rem 0 .5rem}.code-tabs-wrapper .code-tabs p{margin:0;text-align:right;display:block;font-size:.9rem}.code-tabs-wrapper .code-tabs a{padding:.25rem .75rem;margin:0;border-radius:3px 3px 0 0;display:inline-block;background:rgba(44,44,56,.6);color:rgba(190,194,204,.5)!important}.code-tabs-wrapper .code-tabs a:hover{color:#f6f6f8!important}.code-tabs-wrapper .code-tabs a.is-active{background-color:#2c2c38;color:#f6f6f8!important}.code-tabs-wrapper .code-tab-content{padding:0}.code-tabs-wrapper .code-tab-content pre{margin:0 0 3rem;border-radius:3px 0 3px 3px}.code-tabs-wrapper .code-tab-content:not(:first-of-type){display:none}@media (min-width:900px){.tabs-container .tabs a{flex-grow:0}}.plugin-card{position:relative;padding:1rem 1.5rem;margin-bottom:.5rem;justify-content:center;align-items:center;background:#1c1c21;border-radius:3px}.plugin-card h3{padding:0;margin-top:.25rem}.plugin-card.new h3:after{content:\"New\";margin-left:.3rem;padding:.25rem .5rem;font-style:italic;color:#4591ed;font-size:1.2rem}.plugin-card p.meta{margin:.75rem 0;font-weight:500;color:#bec2cc;line-height:1.75rem}.plugin-card p.meta .deprecated{margin-left:.5rem;font-style:italic;color:#e90}.plugin-card .info>p:last-child{margin-bottom:.5rem}.plugin-card .info>ul:last-child{margin-bottom:.5rem}.plugin-card .info>ol:last-child{margin-bottom:.5rem}.plugin-card .github-link{position:absolute;color:#fff!important;top:.5rem;right:.5rem;opacity:0;transition:opacity .2s,background .2s,color 2s}.plugin-card .github-link .icon-github{font-size:1.2rem;margin:0 .25rem 0 0}.plugin-card:hover .github-link{opacity:1}.plugin-card blockquote{border-color:#4ed8a0;background:rgba(41,41,51,.5)}.plugin-card blockquote h3,.plugin-card blockquote h4,.plugin-card blockquote h5,.plugin-card blockquote h6{color:#f6f6f8}.plugin-card blockquote li,.plugin-card blockquote p{color:#4ed8a0;font-size:1rem;font-style:normal}.plugin-card blockquote strong{color:inherit}.plugin-card blockquote a{color:#ff8564}.plugin-card blockquote a code:after{border-color:transparent rgba(177,182,255,.35) transparent transparent}.plugin-card blockquote a:hover{color:#fff}.plugin-card blockquote a:hover code:after{border-color:transparent #fff transparent transparent}.plugin-card blockquote ol li:before{color:#4ed8a0}.plugin-card blockquote code,.plugin-card blockquote pre{color:#b1b6ff;background:#1c1c21}#plugin-filters{display:flex;flex-flow:row wrap;align-items:flex-start}#plugin-filters .filter-category{flex:1 1 200px;margin:0 1.25rem 1.25rem 0;max-width:33%}#plugin-filters .filter-category.two-columns{flex:1 2 400px;max-width:66%}#plugin-filters .filter-category.two-columns .filter-list{columns:2}#plugin-filters h5{border-bottom:1px solid rgba(190,194,204,.25);padding-bottom:.65rem}#plugin-filters .filter-list{padding:0;margin:.5rem 0 0;list-style:none}#plugin-filters .filter-list li{padding:0;margin:0;line-height:1.35rem;list-style-type:none!important}#plugin-filters label{display:block;padding:.25rem 0;color:#bec2cc;position:relative}#plugin-filters label:after{content:attr(data-count);margin-left:.25rem;font-size:.85rem;opacity:.5}#plugin-filters .checkbox{display:inline-block;height:1.15em;width:1.15em;background:rgba(190,194,204,.05);margin-right:.3rem;vertical-align:text-top;border-radius:3px;cursor:pointer;border:1.5px solid rgba(190,194,204,.2);user-select:none}#plugin-filters input[type=checkbox]{margin-right:-1.1rem;padding:0;vertical-align:top;opacity:0;cursor:pointer}#plugin-filters input[type=checkbox]+.checkbox:after{content:\"\";display:block;position:absolute;height:.5rem;width:.5rem;border-radius:50%;background:#ff8564;top:.65rem;left:.35rem;opacity:0;transform:scale(2);transition:all .2s}#plugin-filters input[type=checkbox]:checked+.checkbox:after{opacity:1;transform:scale(1)}@media (max-width:1100px){#plugin-filters .filter-category{max-width:50%}#plugin-filters .filter-category.three-columns,#plugin-filters .filter-category.two-columns{max-width:100%}}@media (max-width:800px){#plugin-filters .filter-category{max-width:100%}.plugin-card .github-link{opacity:1;padding:.25rem .35rem .35rem;line-height:0;font-size:1.35rem}.plugin-card .github-link .icon-github{margin:0}.plugin-card .github-link .hide{display:none}}@media (min-width:900px){body{padding-bottom:0}}body.docs-theme--telegraf .article-content a:active,body.docs-theme--telegraf .article-content a:link,body.docs-theme--telegraf .article-content a:visited{color:#ff8564}body.docs-theme--telegraf .article-content a:hover{color:#fff}body.docs-theme--telegraf .article-content a.top:hover{background:#fff}body.docs-theme--telegraf .article-content a.btn{background:#ff8564}body.docs-theme--telegraf .article-content a.btn:hover{background:#ffb6a0}body.docs-theme--telegraf .article-content.section-landing h2 a.off-page:link:hover{color:#ff8564!important}body.docs-theme--telegraf .sidebar--mask-container .sidebar--mask{background:#ff8564;background:-moz-linear-gradient(top,#ff8564 0,#7a65f2 100%);background:-webkit-linear-gradient(top,#ff8564 0,#7a65f2 100%);background:linear-gradient(to bottom,#ff8564 0,#7a65f2 100%)}body.docs-theme--telegraf .sidebar--section-title a:active,body.docs-theme--telegraf .sidebar--section-title a:link,body.docs-theme--telegraf .sidebar--section-title a:visited{color:#ff8564;font-weight:400}body.docs-theme--telegraf .sidebar--section-title a:hover{color:#fff}body.docs-theme--telegraf a.sidebar--page:hover{color:#fff}body.docs-theme--telegraf .navbar--product-dropdown{background-color:#ff8564}body.docs-theme--telegraf .navbar--product-dropdown:hover{background-color:#ffb6a0}body.docs-theme--telegraf .navbar--product-menu{background:#ff8564;background:-moz-linear-gradient(top,#ff8564 0,#7a65f2 100%);background:-webkit-linear-gradient(top,#ff8564 0,#7a65f2 100%);background:linear-gradient(to bottom,#ff8564 0,#7a65f2 100%)}body.docs-theme--telegraf .tabs a.is-active{background:#ff8564}body.docs-theme--chronograf .article-content a:active,body.docs-theme--chronograf .article-content a:link,body.docs-theme--chronograf .article-content a:visited{color:#9394ff}body.docs-theme--chronograf .article-content a:hover{color:#fff}body.docs-theme--chronograf .article-content a.top:hover{background:#fff}body.docs-theme--chronograf .article-content a.btn{background:#9394ff}body.docs-theme--chronograf .article-content a.btn:hover{background:#b1b6ff}body.docs-theme--chronograf .article-content.section-landing h2 a.off-page:link:hover{color:#9394ff!important}body.docs-theme--chronograf .sidebar--mask-container .sidebar--mask{background:#9394ff;background:-moz-linear-gradient(top,#9394ff 0,#4591ed 100%);background:-webkit-linear-gradient(top,#9394ff 0,#4591ed 100%);background:linear-gradient(to bottom,#9394ff 0,#4591ed 100%)}body.docs-theme--chronograf .sidebar--section-title a:active,body.docs-theme--chronograf .sidebar--section-title a:link,body.docs-theme--chronograf .sidebar--section-title a:visited{color:#9394ff;font-weight:400}body.docs-theme--chronograf .sidebar--section-title a:hover{color:#fff}body.docs-theme--chronograf a.sidebar--page:hover{color:#fff}body.docs-theme--chronograf .navbar--product-dropdown{background-color:#9394ff}body.docs-theme--chronograf .navbar--product-dropdown:hover{background-color:#b1b6ff}body.docs-theme--chronograf .navbar--product-menu{background:#9394ff;background:-moz-linear-gradient(top,#9394ff 0,#4591ed 100%);background:-webkit-linear-gradient(top,#9394ff 0,#4591ed 100%);background:linear-gradient(to bottom,#9394ff 0,#4591ed 100%)}body.docs-theme--chronograf .tabs a.is-active{background:#9394ff}body.docs-theme--kapacitor .article-content a:active,body.docs-theme--kapacitor .article-content a:link,body.docs-theme--kapacitor .article-content a:visited{color:#4ed8a0}body.docs-theme--kapacitor .article-content a:hover{color:#fff}body.docs-theme--kapacitor .article-content a.top:hover{background:#fff}body.docs-theme--kapacitor .article-content a.btn{background:#20b76f}body.docs-theme--kapacitor .article-content a.btn:hover{background:#4ed8a0}body.docs-theme--kapacitor .article-content.section-landing h2 a.off-page:link:hover{color:#4ed8a0!important}body.docs-theme--kapacitor .sidebar--mask-container .sidebar--mask{background:#4ed8a0;background:-moz-linear-gradient(top,#4ed8a0 0,#22adf6 100%);background:-webkit-linear-gradient(top,#4ed8a0 0,#22adf6 100%);background:linear-gradient(to bottom,#4ed8a0 0,#22adf6 100%)}body.docs-theme--kapacitor .sidebar--section-title a:active,body.docs-theme--kapacitor .sidebar--section-title a:link,body.docs-theme--kapacitor .sidebar--section-title a:visited{color:#4ed8a0;font-weight:400}body.docs-theme--kapacitor .sidebar--section-title a:hover{color:#fff}body.docs-theme--kapacitor a.sidebar--page:hover{color:#fff}body.docs-theme--kapacitor .navbar--product-dropdown{background-color:#4ed8a0}body.docs-theme--kapacitor .navbar--product-dropdown:hover{background-color:#7ce490}body.docs-theme--kapacitor .navbar--product-menu{background:#4ed8a0;background:-moz-linear-gradient(top,#4ed8a0 0,#22adf6 100%);background:-webkit-linear-gradient(top,#4ed8a0 0,#22adf6 100%);background:linear-gradient(to bottom,#4ed8a0 0,#22adf6 100%)}body.docs-theme--kapacitor .tabs a.is-active{background:#4ed8a0}body.docs-theme--enterprise_kapacitor .article-content a:active,body.docs-theme--enterprise_kapacitor .article-content a:link,body.docs-theme--enterprise_kapacitor .article-content a:visited{color:#4ed8a0}body.docs-theme--enterprise_kapacitor .article-content a:hover{color:#fff}body.docs-theme--enterprise_kapacitor .article-content a.top:hover{background:#fff}body.docs-theme--enterprise_kapacitor .article-content a.btn{background:#20b76f}body.docs-theme--enterprise_kapacitor .article-content a.btn:hover{background:#4ed8a0}body.docs-theme--enterprise_kapacitor .article-content.section-landing h2 a.off-page:link:hover{color:#4ed8a0!important}body.docs-theme--enterprise_kapacitor .sidebar--mask-container .sidebar--mask{background:#4ed8a0;background:-moz-linear-gradient(top,#4ed8a0 0,#22adf6 100%);background:-webkit-linear-gradient(top,#4ed8a0 0,#22adf6 100%);background:linear-gradient(to bottom,#4ed8a0 0,#22adf6 100%)}body.docs-theme--enterprise_kapacitor .sidebar--section-title a:active,body.docs-theme--enterprise_kapacitor .sidebar--section-title a:link,body.docs-theme--enterprise_kapacitor .sidebar--section-title a:visited{color:#4ed8a0;font-weight:400}body.docs-theme--enterprise_kapacitor .sidebar--section-title a:hover{color:#fff}body.docs-theme--enterprise_kapacitor a.sidebar--page:hover{color:#fff}body.docs-theme--enterprise_kapacitor .navbar--product-dropdown{background-color:#4ed8a0}body.docs-theme--enterprise_kapacitor .navbar--product-dropdown:hover{background-color:#7ce490}body.docs-theme--enterprise_kapacitor .navbar--product-menu{background:#4ed8a0;background:-moz-linear-gradient(top,#4ed8a0 0,#22adf6 100%);background:-webkit-linear-gradient(top,#4ed8a0 0,#22adf6 100%);background:linear-gradient(to bottom,#4ed8a0 0,#22adf6 100%)}body.docs-theme--enterprise_kapacitor .tabs a.is-active{background:#4ed8a0}body.docs-theme--flux .article-content a:active,body.docs-theme--flux .article-content a:link,body.docs-theme--flux .article-content a:visited{color:#4ed8a0}body.docs-theme--flux .article-content a:hover{color:#fff}body.docs-theme--flux .article-content a.top:hover{background:#fff}body.docs-theme--flux .article-content.section-landing h2 a.off-page:link:hover{color:#4ed8a0!important}body.docs-theme--flux .sidebar--mask-container .sidebar--mask{background:#4ed8a0;background:-moz-linear-gradient(top,#4ed8a0 0,#22adf6 100%);background:-webkit-linear-gradient(top,#4ed8a0 0,#22adf6 100%);background:linear-gradient(to bottom,#4ed8a0 0,#22adf6 100%)}body.docs-theme--flux .sidebar--section-title a:active,body.docs-theme--flux .sidebar--section-title a:link,body.docs-theme--flux .sidebar--section-title a:visited{color:#4ed8a0;font-weight:400}body.docs-theme--flux .sidebar--section-title a:hover{color:#fff}body.docs-theme--flux a.sidebar--page:hover{color:#fff}body.docs-theme--flux .navbar--product-dropdown{background-color:#4ed8a0}body.docs-theme--flux .navbar--product-dropdown:hover{background-color:#7ce490}body.docs-theme--flux .navbar--product-menu{background:#4ed8a0;background:-moz-linear-gradient(top,#4ed8a0 0,#22adf6 100%);background:-webkit-linear-gradient(top,#4ed8a0 0,#22adf6 100%);background:linear-gradient(to bottom,#4ed8a0 0,#22adf6 100%)}body.docs-theme--flux .tabs a.is-active{background:#4ed8a0}","/*! normalize.css v3.0.2 | MIT License | git.io/normalize */\n\n/**\n * 1. Set default font family to sans-serif.\n * 2. Prevent iOS text size adjust after orientation change, without disabling\n * user zoom.\n */\n\nhtml {\n font-family: sans-serif; /* 1 */\n -ms-text-size-adjust: 100%; /* 2 */\n -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/**\n * Remove default margin.\n */\n\nbody {\n margin: 0;\n font-family: 'Roboto',Helvetica,Arial,Tahoma, Verdana, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n/* HTML5 display definitions\n ========================================================================== */\n\n/**\n * Correct `block` display not defined for any HTML5 element in IE 8/9.\n * Correct `block` display not defined for `details` or `summary` in IE 10/11\n * and Firefox.\n * Correct `block` display not defined for `main` in IE 11.\n */\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\n\n/**\n * 1. Correct `inline-block` display not defined in IE 8/9.\n * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n */\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block; /* 1 */\n vertical-align: baseline; /* 2 */\n}\n\n/**\n * Prevent modern browsers from displaying `audio` without controls.\n * Remove excess height in iOS 5 devices.\n */\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n/**\n * Address `[hidden]` styling not present in IE 8/9/10.\n * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.\n */\n\n[hidden],\ntemplate {\n display: none;\n}\n\n/* Links\n ========================================================================== */\n\n/**\n * Remove the gray background color from active links in IE 10.\n */\n\na {\n background-color: transparent;\n}\n\n/**\n * Improve readability when focused and also mouse hovered in all browsers.\n */\n\na:active,\na:hover {\n outline: 0;\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n */\n\nabbr[title] {\n border-bottom: 1px dotted;\n}\n\n/**\n * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n */\n\nb,\nstrong {\n font-weight: bold;\n}\n\n/**\n * Address styling not present in Safari and Chrome.\n */\n\ndfn {\n font-style: italic;\n}\n\n/**\n * Address variable `h1` font-size and margin within `section` and `article`\n * contexts in Firefox 4+, Safari, and Chrome.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/**\n * Address styling not present in IE 8/9.\n */\n\nmark {\n background: #ff0;\n color: #000;\n}\n\n/**\n * Address inconsistent and variable font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` affecting `line-height` in all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Remove border when inside `a` element in IE 8/9/10.\n */\n\nimg {\n border: 0;\n}\n\n/**\n * Correct overflow not hidden in IE 9/10/11.\n */\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * Address margin not present in IE 8/9 and Safari.\n */\n\nfigure {\n margin: 1em 40px;\n}\n\n/**\n * Address differences between Firefox and other browsers.\n */\n\nhr {\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n height: 0;\n}\n\n/**\n * Contain overflow in all browsers.\n */\n\npre {\n overflow: auto;\n}\n\n/**\n * Address odd `em`-unit font size rendering in all browsers.\n */\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * Known limitation: by default, Chrome and Safari on OS X allow very limited\n * styling of `select`, unless a `border` property is set.\n */\n\n/**\n * 1. Correct color not being inherited.\n * Known issue: affects color of disabled elements.\n * 2. Correct font properties not being inherited.\n * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit; /* 1 */\n font: inherit; /* 2 */\n margin: 0; /* 3 */\n}\n\n/**\n * Address `overflow` set to `hidden` in IE 8/9/10/11.\n */\n\nbutton {\n overflow: visible;\n}\n\n/**\n * Address inconsistent `text-transform` inheritance for `button` and `select`.\n * All other form control elements do not inherit `text-transform` values.\n * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n * Correct `select` style inheritance in Firefox.\n */\n\nbutton,\nselect {\n text-transform: none;\n}\n\n/**\n * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n * and `video` controls.\n * 2. Correct inability to style clickable `input` types in iOS.\n * 3. Improve usability and consistency of cursor style between image-type\n * `input` and others.\n */\n\nbutton,\nhtml input[type=\"button\"], /* 1 */\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; /* 2 */\n cursor: pointer; /* 3 */\n}\n\n/**\n * Re-set default cursor for disabled elements.\n */\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\n/**\n * Remove inner padding and border in Firefox 4+.\n */\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\n/**\n * Address Firefox 4+ setting `line-height` on `input` using `!important` in\n * the UA stylesheet.\n */\n\ninput {\n line-height: normal;\n}\n\n/**\n * It's recommended that you don't attempt to style these elements.\n * Firefox's implementation doesn't respect box-sizing, padding, or width.\n *\n * 1. Address box sizing set to `content-box` in IE 8/9/10.\n * 2. Remove excess padding in IE 8/9/10.\n */\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Fix the cursor style for Chrome's increment/decrement buttons. For certain\n * `font-size` values of the `input`, it causes the cursor style of the\n * decrement button to change from `default` to `text`.\n */\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n * 2. Address `box-sizing` set to `border-box` in Safari and Chrome\n * (include `-moz` to future-proof).\n */\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; /* 1 */\n -moz-box-sizing: content-box;\n -webkit-box-sizing: content-box; /* 2 */\n box-sizing: content-box;\n}\n\n/**\n * Remove inner padding and search cancel button in Safari and Chrome on OS X.\n * Safari (but not Chrome) clips the cancel button when the search input has\n * padding (and `textfield` appearance).\n */\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/**\n * Define consistent border, margin, and padding.\n */\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n/**\n * 1. Correct `color` not being inherited in IE 8/9/10/11.\n * 2. Remove padding so people aren't caught out if they zero out fieldsets.\n */\n\nlegend {\n border: 0; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Remove default vertical scrollbar in IE 8/9/10/11.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * Don't inherit the `font-weight` (applied by a rule above).\n * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n */\n\noptgroup {\n font-weight: bold;\n}\n\n/* Tables\n ========================================================================== */\n\n/**\n * Remove most spacing between table cells.\n */\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\ntd,\nth {\n padding: 0;\n}\n","code[class*=\"language-\"],\npre[class*=\"language-\"] {\n\t/*text-shadow: 0 1px #101419;*/\n\tdirection: ltr;\n\ttext-align: left;\n\twhite-space: pre;\n white-space: pre-wrap;\n white-space: -moz-pre-wrap;\n\twhite-space: -o-pre-wrap;\n\tword-spacing: normal;\n\tword-break: normal;\n\tword-wrap: normal;\n\n\t-moz-tab-size: 1;\n\t-o-tab-size: 1;\n\ttab-size: 1;\n\n\t-webkit-hyphens: none;\n\t-moz-hyphens: none;\n\t-ms-hyphens: none;\n\thyphens: none;\n}\n\npre[class*=\"language-\"]::-moz-selection, pre[class*=\"language-\"] ::-moz-selection,\ncode[class*=\"language-\"]::-moz-selection, code[class*=\"language-\"] ::-moz-selection {\n\ttext-shadow: none;\n}\n\npre[class*=\"language-\"]::selection, pre[class*=\"language-\"] ::selection,\ncode[class*=\"language-\"]::selection, code[class*=\"language-\"] ::selection {\n\ttext-shadow: none;\n}\n\n@media print {\n\tcode[class*=\"language-\"],\n\tpre[class*=\"language-\"] {\n\t\ttext-shadow: none;\n\t}\n}\n\n/* Code blocks */\npre[class*=\"language-\"] {\n\toverflow: auto;\n}\n\n:not(pre) > code[class*=\"language-\"],\npre[class*=\"language-\"] {\n}\n\n/* Inline code */\n:not(pre) > code[class*=\"language-\"] {\n\twhite-space: normal;\n}\n\n.highlight { color: @article-code-color;\n\n\t// COLORS\n\n\t.gh, \t\t/* Generic.Heading */\n\t.go, \t\t/* Generic.Output */\n\t.na, \t\t/* Name.Attribute */\n\t.nt, \t\t/* Name.Tag */\n\t.nv, \t\t/* Name.Variable */\n\t.ow \t\t/* Operator.Word */\n\t\t\t\t\t{ color: @article-code-color }\n\n\t.c, \t\t/* Comment */\n\t.ch, \t\t/* Comment.Hashbang */\n\t.cm, \t\t/* Comment.Multiline */\n\t.cpf, \t/* Comment.PreprocFile */\n\t.c1, \t\t/* Comment.Single */\n\t.cs,\t\t/* Comment.Special */\n\t.w \t\t/* Text.Whitespace */\n\t\t\t\t\t{ color: @article-code-accent1; }\n\n\t.gi \t\t/* Generic.Inserted */\n\t\t\t\t\t{ background-color: @article-code-accent1; }\n\n\t.k, \t\t/* Keyword */\n\t.kc, \t\t/* Keyword.Constant */\n\t.kd, \t\t/* Keyword.Declaration */\n\t.kn, \t\t/* Keyword.Namespace */\n\t.kp, \t\t/* Keyword.Pseudo */\n\t.kr, \t\t/* Keyword.Reserved */\n\t.nn \t\t/* Name.Namespace */\n\t\t\t\t\t{ color: @article-code-accent2; }\n\n\t.bp, \t\t/* Name.Builtin.Pseudo */\n\t.cp, \t\t/* Comment.Preproc */\n\t.dl, \t\t/* Literal.String.Delimiter */\n\t.gt, \t\t/* Generic.Traceback */\n\t.gu, \t\t/* Generic.Subheading */\n\t.kt, \t\t/* Keyword.Type */\n\t.nb, \t\t/* Name.Builtin */\n\t.nc, \t\t/* Name.Class */\n\t.no, \t\t/* Name.Constant */\n\t.sa, \t\t/* Literal.String.Affix */\n\t.sb, \t\t/* Literal.String.Backtick */\n\t.sc, \t\t/* Literal.String.Char */\n\t.sd, \t\t/* Literal.String.Doc */\n\t.se, \t\t/* Literal.String.Escape */\n\t.sh, \t\t/* Literal.String.Heredoc */\n\t.sx, \t\t/* Literal.String.Other */\n\t.sr, \t\t/* Literal.String.Regex */\n\t.s1, \t\t/* Literal.String.Single */\n\t.s2 \t\t/* Literal.String.Double */\n\t\t\t\t\t{ color: @article-code-accent3 }\n\n\t.err, /* Error */\n\t.fm, \t\t/* Name.Function.Magic */\n\t.gr, \t\t/* Generic.Error */\n\t.gd, \t\t/* Generic.Deleted */\n\t.nd, \t\t/* Name.Decorator */\n\t.ne, \t\t/* Name.Exception */\n\t.nf, \t\t/* Name.Function */\n\t.nl, \t\t/* Name.Label */\n\t.si \t\t/* Literal.String.Interpol */\n\t\t\t\t\t{ color: @article-code-accent4 }\n\n\t.m, \t\t/* Literal.Number */\n\t.ni, \t\t/* Name.Entity */\n\t.mb, \t\t/* Literal.Number.Bin */\n\t.mf, \t\t/* Literal.Number.Float */\n\t.mh, \t\t/* Literal.Number.Hex */\n\t.mi, \t\t/* Literal.Number.Integer */\n\t.mo, \t\t/* Literal.Number.Oct */\n\t.vc, \t\t/* Name.Variable.Class */\n\t.vg, \t\t/* Name.Variable.Global */\n\t.vi, \t\t/* Name.Variable.Instance */\n\t.vm, \t\t/* Name.Variable.Magic */\n\t.il \t\t/* Literal.Number.Integer.Long */\n\t\t\t\t\t{ color: @article-code-accent5 }\n\n\t.gp, \t\t/* Generic.Prompt */\n\t.o \t\t/* Operator */\n\t\t\t\t\t{ color: @article-code-accent6 }\n\n\t.ss \t\t/* Literal.String.Symbol */\n\t\t\t\t\t{ color: @article-code-accent7 }\n\n\t// FONT STYLES\n\n\t.cs \t\t/* Comment.Special */\n\t.gh, \t\t/* Generic.Heading */\n\t.gu, \t\t/* Generic.Subheading */\n\t.gp, \t\t/* Generic.Prompt */\n\t.gs, \t\t/* Generic.Strong */\n\t.k, \t\t/* Keyword */\n\t.kc, \t\t/* Keyword.Constant */\n\t.kd, \t\t/* Keyword.Declaration */\n\t.kn, \t\t/* Keyword.Namespace */\n\t.kp, \t\t/* Keyword.Pseudo */\n\t.kr, \t\t/* Keyword.Reserved */\n\t.kt, \t\t/* Keyword.Type */\n\t.nc, \t\t/* Name.Class */\n\t.ne, \t\t/* Name.Exception */\n\t.ni, \t\t/* Name.Entity */\n\t.nn \t\t/* Name.Namespace */\n\t.nt, \t\t/* Name.Tag */\n\t.ow, \t\t/* Operator.Word */\n\t.se \t\t/* Literal.String.Escape */\n\t\t\t\t\t{ font-weight: bold }\n\n\t.c, \t\t/* Comment */\n\t.ch, \t\t/* Comment.Hashbang */\n\t.cm, \t\t/* Comment.Multiline */\n\t.cpf, \t/* Comment.PreprocFile */\n\t.c1, \t\t/* Comment.Single */\n\t.cs,\t\t/* Comment.Special */\n\t.ge, \t\t/* Generic.Emph */\n\t.sd ,\t\t/* Literal.String.Doc */\n\t.w \t\t/* Text.Whitespace */\n\t\t\t\t\t{ font-style: italic }\n}\n","//\n// Custom Font (Klavika)\n// --------------------------------------------------\n\n@font-face {\n font-family: Klavika-Light;\n src: url(../fonts/KlavikaLight-ItalicTF.otf);\n font-weight: 200;\n font-style: italic;\n}\n@font-face {\n font-family: Klavika-Bold;\n src: url(../fonts/KlavikaBoldBoldItalic.otf);\n font-weight: 700;\n font-style: italic;\n}\n\n//\n// Resets\n// --------------------------------------------------\n\nhtml {\n\toverflow: auto;\n}\nhtml,body {\n\twidth: 100%;\n\theight: 100%;\n\tbackground-color: @body-bg-color;\n -webkit-overflow-scrolling: touch;\n}\nbody {\n\tcolor: @default-text-color;\n\tline-height: 1;\n\toverflow: auto;\n}\n* {\n\tbox-sizing: border-box;\n}\nhtml,\ndiv,\nspan,\napplet,\nobject,\niframe,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\np,\nblockquote,\npre,\na,\nabbr,\nacronym,\naddress,\nbig,\ncite,\ncode,\ndel,\ndfn,\nem,\nimg,\nins,\nkbd,\nq,\ns,\nsamp,\nsmall,\nstrike,\nstrong,\nsub,\nsup,\ntt,\nvar,\nb,\nu,\ni,\ncenter,\ndl,\ndt,\ndd,\nol,\nul,\nli,\nfieldset,\nform,\nlabel,\nlegend,\ntable,\ncaption,\ntbody,\ntfoot,\nthead,\ntr,\nth,\ntd,\narticle,\naside,\ncanvas,\ndetails,\nembed,\nfigure,\nfigcaption,\nfooter,\nheader,\nhgroup,\nmenu,\nnav,\noutput,\nruby,\nsection,\nsummary,\ntime,\nmark,\naudio,\nvideo {\n\tmargin: 0;\n\tpadding: 0;\n\tborder: 0;\n\tfont-size: 100%;\n\tvertical-align: baseline;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmenu,\nnav,\nsection {\n\tdisplay: block;\n}\nol,\nul {\n\tlist-style: none;\n}\nblockquote,\nq {\n\tquotes: none;\n}\nblockquote:before,\nblockquote:after,\nq:before,\nq:after {\n\tcontent: '';\n\tcontent: none;\n}\ntable {\n\tborder-collapse: collapse;\n\tborder-spacing: 0;\n}\n\n//\n// Import Modules\n// --------------------------------------------------\n@import \"layout-navbar.less\";\n@import \"layout-search-overrides.less\";\n@import \"layout-sidebar.less\";\n@import \"layout-sidebar-ads.less\";\n@import \"layout-article.less\";\n@import \"layout-home.less\";\n@import \"layout-error-pages.less\";\n@import \"tabs.less\";\n@import \"telegraf-plugins.less\";\n\n//\n// Media Queries\n// --------------------------------------------------\n@media (min-width: @breakpoint-small) {\n\tbody {\n\t\tpadding-bottom: 0;\n\t}\n}\n","/*\n\n\tNAVIGATION BAR\n\n\t____________________________________________________________\n\n\tNotes:\n\t-\tOnly contains styles relevant to the navbar module\n\n*/\n@nav-font-size: 19px;\n\n.navbar {\n\ttop: 0;\n\tleft: 0;\n\tfont-size: 1rem;\n\theight: @nav-height;\n\twidth: 100%;\n\tbackground-color: @nav-bg;\n\tz-index: @z-nav;\n\tposition: relative;\n}\n.navbar--logo,\n.navbar--hamburger,\n.navbar--product-dropdown,\n.navbar--search,\n.theme-switcher {\n\tposition: absolute;\n}\n.navbar--logo {\n\tleft: 1em;\n\ttop: 1.05em;\n\ta {\n\t\tfont-size: 1.5rem;\n\t\tcolor: @nav-logo;\n\t\ttransition: color 0.25s ease;\n\t\t&:hover {\n\t\t\tcolor: @nav-logo-hover;\n\t\t}\n\t}\n\t.divider {\n\t\tborder-left: 1px solid @nav-logo;\n margin: 0 .8rem 0 .5rem;\n vertical-align: text-top;\n\t\topacity: .35;\n\t\tline-height: 1.15em;\n\t}\n\t.navbar--docs {\n\t\tfont-size: 1.3rem;\n\t}\n}\n.navbar--hamburger {\n\twidth: @nav-height;\n\theight: @nav-height;\n\tright: 0;\n\n\t.navbar--hamburger-bar {\n\t\twidth: @nav-height * 0.3em;\n\t\theight: 2px;\n\t\tbackground-color: @nav-hamburger;\n\t\tborder-radius: 1px;\n\t\tposition: absolute;\n\t\tleft: 50%;\n\t\ttransition: all 0.3s ease;\n\n\t\t&.top {\n\t\t\ttop: 40%;\n\t\t\ttransform: translate(-50%,-50%);\n\t\t}\n\t\t&.middle {\n\t\t\ttop: 50%;\n\t\t\ttransform: translate(-50%,-50%);\n\t\t}\n\t\t&.bottom {\n\t\t\ttop: 60%;\n\t\t\ttransform: translate(-50%,-50%);\n\t\t}\n\t}\n\n\t&:hover {\n\t\tcursor: pointer;\n\n\t\t.navbar--hamburger-bar {\n\t\t\tbackground-color: @nav-hamburger-hover;\n\t\t}\n\t}\n\n\t&.open {\n\t\t.navbar--hamburger-bar {\n\t\t\t&.top {\n\t\t\t\ttop: 50%;\n\t\t\t\ttransform: translate(-50%,-50%) rotate(45deg);\n\t\t\t}\n\t\t\t&.middle {\n\t\t\t\topacity: 0;\n\t\t\t}\n\t\t\t&.bottom {\n\t\t\t\ttop: 50%;\n\t\t\t\ttransform: translate(-50%,-50%) rotate(-45deg);\n\t\t\t}\n\t\t}\n\t}\n}\n.navbar--product-menu {\n\twidth: 100%;\n\tposition: absolute;\n\ttop: .5em;\n\theight: auto;\n\topacity: 0;\n\ttransition: opacity 0.25s ease;\n\t.gradient-v(@c-ocean,@c-pool);\n}\n.navbar--product-container {\n\twidth: 100%;\n\theight: auto;\n\tposition: absolute;\n\ttop: calc(@nav-height * .85);\n\tleft: 0;\n\tvisibility: hidden;\n\ttransition: all 0.25s ease;\n\n\tz-index: 100;\n\n\t&.open {\n\t\tvisibility: visible;\n\n\t\t.navbar--product-menu {\n\t\t\topacity: 1;\n\t\t}\n\t}\n}\n.navbar--product-divider {\n\tmargin: 0.25em 0;\n\theight: 2px;\n\tbackground-color: fadeout(@g6-smoke, 90%);\n}\n.navbar--product {\n\tfont-size: @nav-font-size;\n\t&:link,\n\t&:active,\n\t&:visited {\n\t\tcolor: @g20-white;\n\t\ttransition:\n\t\t\tbackground-color 0.25s ease,\n\t\t\tcolor 0.25s ease;\n\t\tbackground-color: transparent;\n\t\tpadding: 1.25rem 1rem;\n\t\tdisplay: block;\n\t\twidth: 100%;\n\t}\n\t&:hover {\n\t\tbackground-color: fadeout(@g5-pepper, 88%);\n\t\tcolor: @g20-white;\n\t}\n}\n.navbar--product-dropdown {\n\tdisplay: none;\n\ttop: .5em;\n\tbackground-color: @c-ocean;\n\theight: @nav-component-height;\n\tborder-radius: @radius;\n\ttransition:\n\t\tbackground-color 0.25s ease,\n\t\tcolor 0.25s ease;\n\t&:hover {\n\t\tcursor: pointer;\n\t\tbackground-color: @c-pool;\n\t}\n\t.navbar--current-product,\n\t.navbar--product-dropdown-caret {\n\t\tposition: absolute;\n\t\ttop: 50%;\n\t\ttransform: translateY(-50%);\n\t\tcolor: @g20-white;\n\t}\n\n\t.navbar--current-product {\n\t\tfont-weight: 700;\n\t\tleft: 1rem;\n\t\tfont-size: @nav-font-size;\n\t\tfont-weight: 400;\n\t}\n\t.navbar--product-dropdown-caret {\n\t\tright: 1rem;\n\t\tfont-size: 0.625em;\n\t}\n}\n.navbar--search {\n\theight: @nav-component-height;\n\twidth: @search-default-width;\n\tright: @nav-height;\n\ttop: .5em;\n\n\t> * {\n\t\tposition: absolute !important;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t}\n}\n.navbar--search-field {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\twidth: 100%;\n\theight: 100%;\n\tborder-radius: @radius;\n\tborder: 2px solid @nav-search-border;\n\tcolor: @nav-search-text;\n\tbackground-color: @nav-search-bg;\n\tpadding: 0 1rem;\n\tfont-weight: 400;\n\tfont-size: @nav-font-size;\n\toutline: none;\n\ttransition:\n\t\tborder-color 0.3s ease,\n\t\tcolor 0.3s ease;\n\t&:focus {\n\t\tborder-color: @nav-search-border-focus;\n\t\tcolor: @nav-search-border-focus;\n\t}\n}\n.algolia-autocomplete {\n\twidth: 100%;\n\n\t.aa-input,\n\t.aa-hint {\n\t\twidth: 100%;\n\t}\n\t.aa-hint {\n\t\tcolor: #f00;\n\t}\n\t.aa-dropdown-menu {\n\t\tmargin: @search-offset 0 0 0;\n\t\twidth: 100%;\n\t\tpadding: 0.75rem;\n\t\tbackground-color: fadeout(@algolia-background, 30%);\n\t\tborder: 0px;\n\n\t\t.algolia-docsearch-suggestion--highlight {\n\t\t\tcolor: @algolia-highlight-color;\n\t\t}\n\n\t\t.aa-suggestion {\n\t\t\tcursor: pointer;\n\t\t\tpadding: 0;\n\n\t\t\t.algolia-docsearch-suggestion {\n\t\t\t\tbackground-color: @algolia-category-header;\n\t\t\t\tborder-radius: @radius;\n\t\t\t\toverflow: hidden;\n\t\t\t}\n\t\t\t.algolia-docsearch-suggestion__secondary {\n\t\t\t\tborder: none;\n\t\t\t\tmargin-top: 2px;\n\t\t\t}\n\t\t\t&:first-child .algolia-docsearch-suggestion__secondary {\n\t\t\t\tmargin-top: 0;\n\t\t\t}\n\t\t\t.algolia-docsearch-suggestion--category-header {\n\t\t\t\tborder-radius: @radius @radius 0 0;\n\t\t\t\tbackground-color: @algolia-category-header;\n\t\t\t\tcolor: @algolia-category-header-text;\n\t\t\t\tpadding: 0.75rem 1rem;\n\t\t\t\tfont-weight: 500;\n\n\t\t\t\t.algolia-docsearch-suggestion--highlight {\n\t\t\t\t\tbackground-color: transparent;\n\t\t\t\t}\n\t\t\t}\n\t\t\t.algolia-docsearch-suggestion--subcategory-column {\n\t\t\t\tborder: none;\n\t\t\t\tbackground-color: @algolia-suggestion-column;\n\t\t\t}\n\t\t\t.algolia-docsearch-suggestion--content {\n\t\t\t\tbackground-color: @algolia-suggestion-content;\n\t\t\t}\n\t\t\t.algolia-docsearch-suggestion--title {\n\t\t\t\tmargin-bottom: 0.25rem;\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tcolor: @algolia-suggestion-text;\n\t\t\t}\n\t\t\t.algolia-docsearch-suggestion--text {\n\t\t\t\tcolor: @algolia-suggestion-text-alt;\n\t\t\t}\n\t\t\t.algolia-docsearch-suggestion--subcategory-column-text {\n\t\t\t\tfont-size: 0.8rem;\n\t\t\t\tline-height: 1.4em;\n\t\t\t\tcolor: @algolia-suggestion-text-alt;\n\t\t\t}\n\t\t\t// Highlight style\n\t\t\t&.aa-cursor {\n\n\t\t\t\t.algolia-docsearch-suggestion--content {\n\t\t\t\t\t.gradient-h(@algolia-cursor-bg1,@algolia-cursor-bg2);\n\t\t\t\t}\n\t\t\t\t.algolia-docsearch-suggestion--text,\n\t\t\t\t.algolia-docsearch-suggestion--title {\n\t\t\t\t\tcolor: @algolia-cursor-text;\n\t\t\t\t\t.algolia-docsearch-suggestion--highlight {\n\t\t\t\t\t\tcolor: @algolia-cursor-highlight !important;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tem {\n\t\t\t\tfont-weight: bold;\n\t\t\t\tfont-style: normal;\n\t\t\t}\n\t\t}\n\t}\n\t.algolia-docsearch-footer {\n\t\tborder: none;\n\t\tpadding: 0.75rem 0 0 0;\n\t}\n}\n.theme-switcher {\n\tdisplay: none;\n\twidth: @nav-height;\n\theight: @nav-height;\n\tright: 0;\n\tborder: 0;\n\toutline: none;\n\tbackground-color: @nav-bg;\n\tcolor: @nav-logo;\n\n\t.icon {\n\t\ttransition: color 0.25s ease;\n\t}\n\t.sun2 {\n\t\tfont-size: 1.5rem;\n\t}\n\t.moon {\n\t\tfont-size: 1.2rem;\n\t}\n\n\t&:hover {\n\t\tcolor: @nav-logo-hover;\n\t\tcursor: pointer;\n\t}\n}\n\n//\n// Media Queries\n// --------------------------------------------------\n@media (max-width: 500px) {\n\t.navbar--logo {\n\t\t.logotype {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.logo {\n\t\t\tdisplay: inline;\n\t\t}\n\t}\n}\n@media (min-width: 500px) {\n\t.navbar--logo {\n\t\t.logotype {\n\t\t\tdisplay: inline;\n\t\t}\n\t\t.logo {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n}\n\n@media (min-width: 501px) {\n\n}\n\n@media (min-width: @breakpoint-small) {\n\t.theme-switcher {\n\t\tdisplay: block;\n\t}\n\t.navbar--product-dropdown {\n\t\tdisplay: block;\n\t\tleft: @sidebar-small-width;\n\t\twidth: @product-dropdown-small-width;\n\t}\n\t.navbar--product-container {\n\t\tleft: @sidebar-small-width;\n\t\twidth: @product-dropdown-small-width;\n\t\ttop: 2.9em;\n\n\t\t&.open {\n\t\t\t.navbar--dropdown-dismiss {\n\t\t\t\twidth: 100vw;\n\t\t\t\theight: 100vh;\n\t\t\t\tposition: fixed;\n\t\t\t\ttop: 0;\n\t\t\t\tleft: 0;\n\t\t\t\tz-index: 100;\n\n\t\t\t\t&:hover {\n\t\t\t\t\tcursor: pointer;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t.navbar--product-menu {\n\t\tborder-radius: 0 0 @radius @radius;\n\t\toverflow: hidden;\n\t\tz-index: 110;\n\t}\n\t.navbar--search {\n\t\tleft: @search-small-position;\n\t\twidth: @search-small-width;\n\t}\n\t.navbar--hamburger {\n\t\tdisplay: none;\n\t}\n\t.navbar--product.external {\n\t\tfont-size: 0.8rem;\n\t}\n}\n@media (min-width: @breakpoint-large) {\n\t.navbar--product-dropdown {\n\t\tleft: @sidebar-large-width;\n\t\twidth: @product-dropdown-large-width;\n\t}\n\t.navbar--product-container {\n\t\tleft: @sidebar-large-width;\n\t\twidth: @product-dropdown-large-width;\n\t}\n\t.navbar--search {\n\t\tleft: @search-large-position;\n\t\twidth: @search-large-width;\n\t}\n}\n@media (min-width: @breakpoint-huge) {\n\t.navbar--product-dropdown {\n\t\tleft: @sidebar-huge-width;\n\t\twidth: @product-dropdown-huge-width;\n\t}\n\t.navbar--product-container {\n\t\tleft: @sidebar-huge-width;\n\t\twidth: @product-dropdown-huge-width;\n\t}\n\t.navbar--search {\n\t\tleft: @search-huge-position;\n\t\twidth: @search-huge-width;\n\t}\n}\n",".algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu {\n\tright: 0 !important;\n\tleft: auto !important;\n\toverflow: scroll !important;\n\tmax-height: 90vh !important;\n\n\t&:before {\n\t\tdisplay: none;\n\t}\n}\n\n.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion {\n &--wrapper { padding: .2rem 0; }\n &--subcategory-column { display: none; }\n &--content {\n padding: .75rem;\n width: 100%;\n float: none;\n &:before {\n display: none;\n }\n }\n}\n\n.algolia-autocomplete .algolia-docsearch-footer {\n padding: 0;\n}\n\n@media (min-width: 1330px) {\n\t.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu {\n\t\tright: auto !important;\n\t\tleft: 0 !important;\n\t}\n}\n\n@media (max-width: 768px) {\n\t.algolia-docsearch-suggestion--subcategory-column {\n\t\tdisplay: none !important;\n\t}\n\t.algolia-docsearch-suggestion--wrapper {\n\t\tmargin: .25em 0 !important;\n\t}\n}\n\n@media (max-width: 570px) {\n\t.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu {\n\t\tposition: fixed !important;\n\t\ttop: 3.5em !important;\n\t\tleft: 0;\n\t\tmin-width: 100vw;\n\t}\n}\n","/*\n\n SIDEBAR\n\n ____________________________________________________________\n\n Notes:\n - Only contains styles relevant to the sidebar module\n - .sidebar--toggle only appears on small screens\n\n*/\n\n.sidebar--toggle {\n padding: 1em;\n position: relative;\n z-index: @z-sidebar--toggle;\n height: @sidebar--toggle-height;\n width: 100%;\n background-color: @g6-smoke;\n text-align: left;\n font-style: italic;\n color: @g18-cloud;\n font-weight: 500;\n transition:\n background-color 0.25s ease,\n color 0.25s ease;\n\n &:hover {\n color: @g20-white;\n background-color: @g7-graphite;\n cursor: pointer;\n }\n\n &:before,\n &:after {\n content: \"\";\n position: absolute;\n display: block;\n right: 1em;\n top: 1.45em;\n height: 2px;\n width: 15px;\n background: @g11-sidewalk;\n }\n\n &:before {\n transform: rotate(90deg);\n transition: all .2s;\n }\n\n &.open:before {\n transform: rotate(180deg);\n }\n}\n\n.sidebar {\n background-color: @sidebar-bg;\n height: 100%;\n overflow: hidden;\n transition: max-height 0.2s ease-out;\n\n &::-webkit-scrollbar { background-color: @sidebar-bg; width: @scrollbar-width; }\n &::-webkit-scrollbar-track { background-color: @sidebar-bg; }\n &::-webkit-scrollbar-thumb { border: 4px solid @sidebar-bg; background-color: @sidebar-scrollbar; border-radius: @scrollbar-width/2; }\n\n &.open {\n max-height: 4000px;\n transition: max-height 0.5s ease-in;\n }\n\n &--section {\n border-top: 2px solid @sidebar-divider;\n padding: 2em 0;\n\n &:first-child {\n border: none;\n }\n\n &-title {\n color: @sidebar-title-color;\n padding: 0 2rem 1em 2rem;\n font-size: 1.25em;\n\n a:link,\n a:active,\n a:visited {\n color: @sidebar-title-color;\n font-weight: 400;\n }\n a:hover {\n color: @sidebar-hover;\n }\n }\n\n ul {\n padding-left: 3rem;\n li {\n position: relative;\n margin-bottom: .25rem;\n }\n }\n }\n}\n\nul.sidebar--children {\n // padding-left: 1.5rem;\n margin-left: -1.85rem;\n height: 0;\n overflow: hidden;\n\n &.open {\n height: auto;\n overflow: visible;\n border-left: 2px solid @sidebar-divider;\n }\n\n & li:first-child {\n margin-top: .25rem;\n }\n}\n\n.sidebar--children-toggle {\n position: absolute;\n left: -2.25rem;\n top: .2rem;\n height: .9rem;\n width: .9rem;\n background: @sidebar-toggle-bg;\n border-radius: 50%;\n transition: all .2s;\n\n &:before {\n content: \"+\";\n color: @sidebar-toggle-icon;\n display: block;\n text-align: center;\n }\n\n &.open:before {\n content: \"–\";\n }\n\n &:hover {\n background: @sidebar-title-color;\n &:before {\n color: @g20-white;\n }\n }\n}\n\na.sidebar--page {\n &:link,\n &:active,\n &:visited {\n display: inline-block;\n color: @sidebar-text;\n font-weight: 500;\n text-indent: -1rem;\n line-height: 1.25;\n }\n &:hover {\n color: @sidebar-hover;\n }\n}\n\n//\n// Media Queries\n// --------------------------------------------------\n@media (max-width: @breakpoint-small) {\n .sidebar {\n height: auto;\n max-height: 0;\n }\n}\n\n@media (min-width: @breakpoint-small) {\n .sidebar--toggle {\n display: none;\n }\n .sidebar,\n .sidebar.open {\n position: fixed;\n z-index: @z-sidebar-desktop;\n width: @sidebar-small-width;\n transform: none;\n transition: none;\n top: @nav-height;\n max-height: 100%;\n overflow: auto;\n padding-bottom: @nav-height;\n }\n}\n@media (min-width: @breakpoint-large) {\n .sidebar,\n .sidebar.open {\n width: @sidebar-large-width;\n }\n}\n@media (min-width: @breakpoint-huge) {\n .sidebar,\n .sidebar.open {\n width: @sidebar-huge-width;\n }\n .sidebar--support-ad {\n padding: 2rem 1.5rem;\n\n &--desc {\n font-size: 1.2em;\n }\n }\n}\n","#sidebar--ad {\n margin: -0.75rem 1rem;\n border-radius: @radius;\n\n &.cloud {\n background: linear-gradient(45deg, #9394FF, #22ADF6);\n padding: 1.5rem 1.5rem;\n text-align: center;\n\n .text {\n margin: 0 0 1rem 0;\n color: @g20-white;\n line-height: 1.3em;\n font-size: 1.1em;\n font-weight: 500;\n }\n\n .cta {\n margin-left: 0;\n margin-right: 0;\n border-radius: @radius;\n color: @g20-white;\n border: 2px solid fadeout(@g20-white, 60%);\n background-color: transparent;\n transition:\n background-color 0.25s ease,\n border-color 0.25s ease;\n padding: 0.75em 1.5em;\n font-weight: 700;\n display: inline-block;\n font-size: 1.125em;\n\n &:hover {\n background-color: fadeout(@g20-white, 85%);\n border-color: fadeout(@g20-white, 40%)\n }\n }\n }\n\n &.enterprise {\n background: linear-gradient(to right, @c-rainforest,@c-pool);\n padding: 1.5rem 1.5rem;\n text-align: center;\n\n .text {\n margin: 0 0 1rem 0;\n color: @g20-white;\n line-height: 1.3em;\n // font-size: 1.2em;\n font-weight: 500;\n }\n\n .cta {\n margin-left: 0;\n margin-right: 0;\n border-radius: @radius;\n color: @g20-white;\n border: 2px solid fadeout(@g20-white, 60%);\n background-color: transparent;\n transition:\n background-color 0.25s ease,\n border-color 0.25s ease;\n padding: 0.75em 1.5em;\n font-weight: 700;\n display: inline-block;\n font-size: 1.125em;\n\n &:hover {\n background-color: fadeout(@g20-white, 85%);\n border-color: fadeout(@g20-white, 40%)\n }\n }\n }\n\n &.influx-days {\n padding: 1rem;\n background: url(\"/promos/assets/influx-days-bg.jpg\");\n background-repeat: no-repeat;\n background-size: cover;\n color: @g20-white;\n font-weight: bold;\n\n img {\n margin: .4rem 0 .8rem;\n }\n\n .text {\n font-size: 1.75rem;\n margin-bottom: .5rem;\n }\n .details {\n font-size: .9rem;\n line-height: 1.1rem;\n }\n .cta {\n display: inline-block;\n margin-top: .85rem;\n color: @g20-white;\n background: #5CBB47;\n font-size: 1.15rem;\n padding: .45rem 1.75rem;\n border-radius: @radius;\n }\n }\n}\n","/*\n\n\tINDIVIDUAL ARTICLE\n\n\t____________________________________________________________\n\n\tNotes:\n\t-\tTypography uses a type scale of 1.3\n\t-\tI've made use of EMs such that you can proportionally scale the type\n\t\tby changing the font size on .page using REMs as the unit\n\n\n*/\n\n::selection {\n\tbackground-color: @default-selection-bg;\n\tcolor: @default-selection-text; /* WebKit/Blink Browsers */\n}\n::-moz-selection {\n\tbackground-color: @default-selection-bg;\n\tcolor: @default-selection-text; /* Gecko Browsers */\n}\na {\n\ttext-decoration: none;\n\ttransition: color 0.2s ease;\n\n\t&:hover {\n\t\tcursor: pointer;\n\t}\n}\n\n.article {\n\tbackground-color: @article-bg;\n\toverflow: auto;\n\twidth: 100%;\n\n\t&::-webkit-scrollbar { background-color: @article-bg; width: @scrollbar-width; }\n\t&::-webkit-scrollbar-track { background-color: @article-bg; }\n\t&::-webkit-scrollbar-thumb { border: 4px solid @article-bg; background-color: @article-scrollbar; border-radius: @scrollbar-width/2; }\n\n}\n.article-section {\n\tdisplay: block;\n\twidth: 100%;\n\ttext-align: center;\n\tpadding: 2rem;\n\n\t&.article-heading {\n\t\tbackground-color: @article-bg-heading;\n\t\tbackground-position: center center;\n\t\tbackground-size: cover !important;\n\t\tbackground-repeat: no-repeat;\n\n\t\th1 {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t}\n\n\t&.article-footer {\n\t\t.gradient-v(@article-bg-footer,@article-bg);\n\t}\n}\n.article-content {\n\ttext-align: left;\n\twidth: 100%;\n\tmax-width: 760px;\n\tcolor: @article-text;\n\n\ta:link,\n\ta:active,\n\ta:visited {\n\t\tfont-weight: 700;\n\t\tcolor: @default-link-color;\n\t}\n\ta:hover {\n\t\tcolor: @default-link-hover;\n\t\tcursor: pointer;\n\t}\n\ta.top {\n\t\tfont-size: 6px;\n\t\tpadding: .25rem .25rem .35rem;\n\t\tborder-radius: @radius;\n\t\ttransition: all .2s;\n\t\t&:hover {\n\t\t\tcolor: @article-bg !important;\n\t\t\tbackground: @default-link-hover;\n\t\t}\n\t}\n\ta.off-page:link:after {\n\t\tcontent: '\\ea43';\n\t\tfont-family: 'icomoon';\n\t\tfont-size: .75em;\n\t\tfont-weight: normal;\n\t\tvertical-align: bottom;\n\t\tdisplay: inline;\n\t\tmargin-left: .5em;\n\t\topacity: .25;\n\t\ttransition: color 0.2s ease;\n\t\tcolor: @default-text-color;\n\t}\n\tp,li {\n\t\ta {\n\t\t\tcode {\n\t\t\t\tposition: relative;\n\t\t\t\t&:after {\n\t\t\t\t\tcontent: \"\";\n\t\t\t\t\tposition: absolute;\n\t\t\t\t\ttop: -1px;\n\t\t\t\t\tright: -1px;\n\t\t\t\t\twidth: 0;\n\t\t\t\t\theight: 0;\n\t\t\t\t\tborder-style: solid;\n\t\t\t\t\tborder-width: 0 .5em .5em 0;\n\t\t\t\t\tborder-color: transparent @article-code-color transparent transparent;\n\t\t\t\t\topacity: .5;\n\t\t\t\t\ttransition: all .2s;\n\t\t\t\t}\n\t\t\t\t&:hover:after {\n\t\t\t\t\topacity: 1;\n\t\t\t\t\tborder-color: transparent @default-link-hover transparent transparent;\n\t\t\t\t}\n\t\t\t}\n\t\t\t&.btn {\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tcolor: @g20-white;\n\t\t\t\tfont-size: .95rem;\n\t\t\t\tpadding: .5em 1em;\n\t\t\t\tmargin: 1em 0 1.5em;\n\n\t\t\t\t&.download:before {\n\t\t\t\t\tcontent: '\\e964';\n\t\t\t\t\tfont-family: 'icomoon';\n\t\t\t\t\tfont-size: 1.15em;\n\t\t\t\t\tfont-weight: normal;\n\t\t\t\t\tvertical-align: bottom;\n\t\t\t\t\tdisplay: inline;\n\t\t\t\t\tmargin-right: .5em;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t> * {\n\t\ttext-decoration: none;\n\t}\n\th1,\n\th2,\n\th3,\n\th4,\n\tp,\n\tul,\n\tol,\n\tli,\n\tblockquote,\n\t.note,\n\tdt,\n\t.warn,\n\tpre {\n\t\tdisplay: block;\n\t\tmargin-bottom: @margin-bottom-base;\n\t\tline-height: 1.45em;\n\t}\n\ttable {\n\t\tmargin: 1em 0 @margin-bottom-base;\n\t\toverflow-x: auto;\n\t\tbackground-color: @article-bg;\n\t}\n\n\t/* Headings */\n\th1,h2,h3,h4,h5,h6 {\n\t\twidth: 100%;\n\t\tcolor: @article-text-heading;\n\n\t\t/* Offset trick to prevent anchors being obscured by the navbar */\n\t\ta.offset-anchor {\n\t\t\tdisplay: block;\n\t\t\tposition: relative;\n\t\t\ttop: -120px;\n\t\t\tvisibility: hidden;\n\t\t}\n\n\t\t/* Maintain heading styles when anchors are present */\n\t\ta:link,\n\t\ta:active,\n\t\ta:visited,\n\t\ta:hover {\n\t\t\ttext-decoration: none;\n\t\t\tfont-weight: inherit;\n\t\t\tcolor: @article-text-heading !important;\n\t\t}\n\t\t&:first-child {\n\t\t\tmargin-top: 0;\n\t\t}\n\t}\n\th1 {\n\t\tfont-size: @heading1Size;\n\t\t.klavika-font;\n\t\tline-height: 1.2em;\n\t}\n\th2 {\n\t\tfont-size: @heading2Size;\n\t\tfont-weight: 600;\n\t\tmargin: 1.5em 0 .5em;\n\t}\n\th3 {\n\t\tfont-size: @heading3Size;\n\t\tfont-weight: 700;\n\t\tmargin: 1em 0 .5em;\n\t}\n\th4 {\n\t\tfont-size: @heading4Size;\n\t\tfont-weight: 400;\n\t\tfont-style: italic;\n\t\tmargin: 1.25em 0 .5em;\n\t}\n\th5 {\n\t\tline-height: 1.6em;\n\t}\n\th6 {\n\t\tfont-size: @paragraphSize*.95;\n\t\tfont-style: italic;\n\t\tline-height: 1.6em;\n\t}\n\n\t&.section-landing{\n\t\th2 a.off-page:link:hover {\n\t\t\tcolor: @default-link-color !important;\n\t\t}\n\t}\n\n\t/* Markdown Elements */\n\tp {\n\t\tfont-size: 1em;\n\t}\n\tol,ul {\n\t\tfont-size: 1em;\n\t\tpadding-left: 1.125em;\n\n\t\tli {\n\t\t\tdisplay: list-item;;\n\t\t\tlist-style-position: outside;\n\t\t\tpadding-left: 0.5em;\n\t\t\tmargin-bottom: .25em;\n\t\t}\n\t\tp {\n\t\t\tmargin-left: 0;\n\t\t}\n\t}\n\tul > li {\n\t\tlist-style-type: disc !important;\n\t}\n\tol li,\n\tul ol li {\n\t\tlist-style-type: decimal;\n\t}\n\tol ol li {\n\t\tlist-style-type: lower-alpha;\n\t}\n\tol ol ol li {\n\t\tlist-style-type: decimal;\n\t}\n\tul ul ul li {\n\t\tlist-style-type: square;\n\t}\n\tli:last-child {\n\t\tmargin-bottom: 0;\n\t}\n\tol ol,\n\tul ul,\n\tol ul,\n\tul ol {\n\t\twidth: 100%;\n\t\tmargin-left: 0;\n\t\tmargin-bottom: 0;\n\t\tmargin-top: .25em;\n\t}\n\thr {\n\t\twidth: 100%;\n\t\theight: 2px;\n\t\tmargin-top: 0.25em;\n\t\tmargin-bottom: 1em;\n\t\tborder: none;\n\t\tdisplay: block;\n\t\tbackground-color: @article-line-color;\n\t}\n\timg {\n\t\tmax-width: 100%;\n\t\theight: auto;\n\t\tborder-radius: @radius;\n\t}\n\ttd,\n\tth {\n\t\tborder: @border-small-screen solid @article-line-color;\n\t\tfont-size: 0.875em;\n\t\tline-height: 1.2em;\n\t\tpadding: 0.75em 1.5em;\n\t}\n\ttr:nth-child(even) {\n\t\tbackground-color: @article-bg-darken;\n\t}\n\tthead {\n\t\ttr {\n\t\t\tbackground-color: @article-bg-highlight !important;\n\t\t}\n\t\tth {\n\t\t\tpadding: 1.25em 1.5em;\n\t\t}\n\t}\n\t/* Notes
    and Gotchas
    */\n\tdt,\n\t.warn,\n\tblockquote,\n\t.note {\n\t\tfont-size: @smallTextSize;\n\t\tpadding: 1em 1.5em;\n\t\tborder-radius: @radius;\n\t\tborder-style: solid;\n\t\tborder-left-width: @thick-left-border;\n\n\t\tpre,h4,p,ol,ul {\n\t\t\twidth: 100%;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t> *:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.tooltip {\n\t\t\tcolor: @article-tooltip-nested;\n\t\t}\n\t}\n\tblockquote,\n\t.note {\n\t\tfont-style: italic;\n\t\tcolor: @article-note-text;\n\t\tborder-color: @article-note-border;\n\t\tbackground-color: @article-note-bg;\n\t\tcode {\n\t\t\tcolor: @article-note-code;\n\t\t\tbackground: @article-note-code-bg;\n\t\t\tborder: 1px solid @article-note-code-border;\n\t\t}\n\t\tpre {\n\t\t\tbackground: @article-note-code-bg;\n\t\t\tborder-color: @article-note-code-border;\n\t\t\tcode { border: none; }\n\t\t}\n\t}\n\tdt,\n\t.warn {\n\t\tcolor: @article-gotcha-text;\n\t\tborder-color: @article-gotcha-border;\n\t\tbackground-color: @article-gotcha-bg;\n\t\tcode {\n\t\t\tcolor: @article-gotcha-code;\n\t\t\tbackground: @article-gotcha-code-bg;\n\t\t\tborder: 1px solid @article-gotcha-code-border;\n\t\t}\n\t\tpre {\n\t\t\tbackground: @article-gotcha-code-bg;\n\t\t\tborder-color: @article-gotcha-code-border;\n\t\t\tcode { border: none; }\n\t\t}\n\t}\n\t/* Inline Code & Code Blocks */\n\tcode {\n\t\tfont-family: Consolas, \"Lucida Console\", Monaco, monospace;\n\t\t-moz-tab-size: 1;\n\t\t-o-tab-size: 1;\n\t\ttab-size: 1;\n\t\tdirection: ltr;\n\t\t-webkit-hyphens: none;\n\t\t-moz-hyphens: none;\n\t\t-ms-hyphens: none;\n\t\thyphens: none;\n\t\tfont-size: @tinyTextSize !important;\n\t\tfont-style:normal !important;\n\t\tdisplay: inline;\n\t\tborder-radius: @radius;\n\t\tborder-width: @border-small-screen;\n\t\tborder-color: @article-code-border;\n\t\tborder-style: solid;\n\t\tpadding: 0.1em 0.5em;\n\t\t-webkit-font-smoothing: subpixel-antialiased !important;\n\t\t-moz-osx-font-smoothing: auto !important;\n\t\tfont-weight: 400 !important;\n\t\tcolor: @article-code-color;\n\t\tbackground-color: @article-code-bg;\n\t}\n\tpre {\n\t\tdisplay: block;\n\t\tpadding: 0.75em 1em;\n\t\toverflow: auto;\n\t\tborder-radius: @radius;\n\t\tborder-style: solid;\n\t\tborder-width: @border-small-screen @border-small-screen @border-small-screen @thick-left-border;\n\t\tbackground-color: @article-code-bg;\n\t\tborder-color: @article-code-border;\n z-index: 99;\n\t\tline-height: 1.1em !important;\n\n\t\tcode {\n\t\t\twhite-space: pre;\n\t\t\tword-spacing: normal;\n\t\t\tword-break: normal;\n\t\t\tborder: none;\n\t\t\tpadding: 0;\n\t\t\tborder-radius: 0;\n\t\t\tbackground-color: transparent;\n\t\t}\n\n\t\t&::-webkit-scrollbar { background-color: @article-code-bg;width: @scrollbar-width; }\n\t\t&::-webkit-scrollbar-track { background-color: @article-code-bg; }\n\t\t&::-webkit-scrollbar-thumb {\n\t\t\tborder: 4px solid @article-code-bg;\n\t\t\tbackground-color: @article-code-scrollbar;\n\t\t\tborder-radius: calc(@scrollbar-width / 2);\n\t\t}\n\t}\n}\n\n.page-nav-btns {\n\tdisplay: flex;\n\tposition: relative;\n\tjustify-content: space-between;\n\tmargin: 3em 0 2em;\n\n\ta {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolor: @g20-white !important;\n\t\tfont-size: .95rem;\n\t\tpadding: .75rem 1rem;\n\t\tmargin: 0 .15rem;\n\n\t\t&.prev {\n\t\t\tposition: absolute;\n\t\t\tleft: 0;\n\t\t\t&:before {\n\t\t\t\tcontent: '\\e804';\n\t\t\t\tfont-family: 'icomoon';\n\t\t\t\tfont-size: .85rem;\n\t\t\t\tfont-weight: normal;\n\t\t\t\tvertical-align: middle;\n\t\t\t\tdisplay: inline;\n\t\t\t\tmargin-right: .85rem;\n\t\t\t}\n\t\t}\n\n\t\t&.next {\n\t\t\tposition: absolute;\n\t\t\tright: 0;\n\t\t\t&:after {\n\t\t\t\tcontent: '\\e805';\n\t\t\t\tfont-family: 'icomoon';\n\t\t\t\tfont-size: .85rem;\n\t\t\t\tfont-weight: normal;\n\t\t\t\tvertical-align: middle;\n\t\t\t\tdisplay: inline;\n\t\t\t\tmargin-left: .85rem;\n\t\t\t}\n\t\t}\n\t}\n}\n\n//\n// Content truncater\n// --------------------------------------------------\n\n.truncate {\n\tposition: relative;\n\tmargin-bottom: 3.5rem;\n\n\t.truncate-bottom {\n\t\tposition: absolute;\n\t\tbottom: -30px;\n\t\twidth: 100%;\n\t\tz-index: 100%;\n\t\theight: auto;\n\t}\n\n\ta.truncate-toggle {\n\t\tdisplay: block;\n\t\twidth: 100px;\n\t\tmargin: 0 auto;\n\t\tcolor: @article-text;\n\t\tbackground: @article-bg;\n\t\tpadding: .45rem;\n\t\ttext-align: center;\n\t\tfont-size: .75rem;\n\t\ttext-transform: uppercase;\n\t\tborder-radius: @radius;\n\t\ttransition: color .2s;\n\t\t&:before{\n\t\t\tcontent: \"Show Less\"\n\t\t}\n\t\t&:hover {\n\t\t\tcolor: @default-link-color;\n\t\t}\n\t}\n\t&.closed {\n\t\tmin-height: 200px;\n\t\tmax-height: 25vh;\n\t\toverflow: hidden;\n\n\t\t.truncate-bottom {\n\t\t\tbottom: 0;\n\t\t\tbackground-image: linear-gradient(to bottom, @article-bg-rgba-0, @article-bg-rgba-1);\n\t\t\theight: 100px;\n\t\t}\n\n\t\ta.truncate-toggle {\n\t\t\tmargin-top: 75px;\n\t\t\t&:before {\n\t\t\t\tcontent: \"Show More\"\n\t\t\t}\n\t\t}\n\t}\n}\n\n//\n// Tooltips\n// --------------------------------------------------\n.tooltip {\n\tposition: relative;\n\tdisplay: inline-block;\n\tz-index: 10;\n\tfont-weight: 900;\n\tcolor: @article-tooltip;\n}\n.tooltip-container {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 50%;\n\ttransform: translateX(-50%);\n\toverflow: visible;\n\tvisibility: hidden;\n}\n.tooltip-text {\n\tfont-weight: 600;\n\tline-height: 2em;\n\theight: 2em;\n\tposition: absolute;\n\tborder-radius: @radius;\n\tpadding: 0 0.75em;\n\tfont-size: 0.9rem;\n\tleft: 50%;\n\ttransform: translate(-50%,-1.875rem);\n\ttransition: all 0.2s ease;\n\twhite-space: nowrap;\n\topacity: 0;\n\tfont-style: normal !important;\n\tcolor: @article-tooltip-text;\n\tbackground-color: @article-tooltip-bg;\n}\n.tooltip-text:after {\n\tcontent: '';\n\tposition: absolute;\n\tleft: 50%;\n\tbottom: -14px;\n\ttransform: translateX(-50%);\n\tborder-top: 8px solid @article-tooltip-bg;\n\tborder-right: 8px solid transparent;\n\tborder-bottom: 8px solid transparent;\n\tborder-left: 8px solid transparent;\n}\n.tooltip:hover .tooltip-container {\n\tvisibility: visible;\n}\n.tooltip:hover .tooltip-text {\n\topacity: 1;\n\ttransform: translate(-50%,-2rem);\n}\n\n//\n// Old Version Warning\n// --------------------------------------------------\n.old-version {\n\twidth: 100%;\n\tdisplay: inline-block;\n\tborder-radius: @radius;\n\tfont-size: 1em;\n\tline-height: 1.25em;\n\tpadding: 1.5em 1.5em 1.5em 4em;\n\tcolor: @old-version-text;\n\tbackground-color: @old-version-bg;\n\tposition: relative;\n\tmargin-bottom: 1em;\n\n\t&:after {\n\t\tcontent: \"\\ea0a\";\n\t\tfont-family: 'icomoon';\n\t\tposition: absolute;\n\t\ttop: 50%;\n\t\tleft: 2em;\n\t\ttransform: translate(-50%,-50%) scale(1.5,1.5);\n\t\tfont-size: 1em;\n\t}\n}\n\n//\n// Landing Page h2s\n// --------------------------------------------------\n.section-landing{\n\th2.no-paragraph {\n\t\tmargin: 0 0 1rem;\n\t\tborder: none;\n\t}\n}\n\n//\n// View in Chronograph Button\n// --------------------------------------------------\n.view-in-chronograf {\n\tdisplay: flex;\n\tjustify-content: flex-end;\n\tposition: relative;\n\tbackground-color: @article-code-border;\n\tmargin-top: -1.1rem;\n\tmargin-bottom: 1rem;\n\tpadding: .15rem;\n\tfont-size: .8rem;\n\tborder-radius: 0 0 @radius @radius;\n\talign-items: center;\n\n\t.chronograf-btn {\n\t\tdisplay: inline-block;\n\t\tpadding: .45rem .6rem;\n\t\tcolor: #fff !important;\n\t\tbackground: linear-gradient(to left, @chronograf-dropdown-gradient-a, @c-pool);\n\t\tborder-radius: calc(~\"\"@radius~\" / 2\");\n\t\ttransition: all .5s ease;\n\n\t\t&:after {\n\t\t\tcontent: '\\e801';\n\t\t\tmargin-left: .4rem;\n\t\t\tfont-family: 'icomoon';\n\t\t}\n\n\t\t&:hover {\n\t\t\tcolor: #fff !important;\n\t\t\topacity: 1;\n\t\t}\n\t}\n\n\t.settings {\n\t\topacity: .25;\n\t\tcolor: @article-text !important;\n\t\tmargin-right: .75em;\n\t\ttransition: opacity .2s ease;\n\n\t\t&:hover {\n\t\t\topacity: 1;\n\t\t}\n\t}\n}\n\n// Modal Styles\n.modal-overlay {\n\tdisplay: none;\n position: fixed;\n z-index: 1000;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n overflow: auto;\n\topacity: .75;\n background: linear-gradient(@chronograf-dropdown-gradient-a, @chronograf-dropdown-gradient-b)\n}\n\n.modal-content {\n\tdisplay: none;\n\tbackground: @article-bg;\n\tpadding: 2rem 2rem 1.5rem;\n\tborder-radius: @radius;\n\tposition: fixed;\n\ttop: 10vh;\n\tleft: 50%;\n\ttransform: translateX(-50%);\n\tz-index: 1001;\n\twidth: 90vw;\n\tmax-width: 38rem;\n\ttransition: top .4s ease;\n\n\t&.open {\n\t\ttop: 40vh;\n\t}\n\n\tinput {\n\t\twidth: 100%;\n\t\tmin-width: 10rem;\n\t\tborder-radius: @radius;\n\t\tborder: 2px solid @modal-input-bg;\n\t\tbackground-color: @modal-input-bg;\n\t\tpadding: .5rem;\n\t\tfont-weight: 400;\n\t\tfont-size: 1rem;\n\t\toutline: none;\n\t\ttransition:\n\t\t\tborder-color 0.3s ease,\n\t\t\tcolor 0.3s ease;\n\t\t&:focus {\n\t\t\tborder-color: @nav-search-border-focus;\n\t\t}\n\t}\n\n\tbutton {\n\t\tborder: none;\n\t\toutline: none;\n\t\t&:focus {\n\t\t\tbackground: @chronograf-dropdown-gradient-b !important;\n\t\t}\n\t}\n\n\tlabel {\n\t\tdisplay: block;\n\t\tmargin-bottom: .4rem;\n\t\tfont-weight: 600;\n\t}\n}\n\n#default-chronograf-url {\n\tdisplay: inline-block;\n\tmargin: .5rem 0 0 .25rem;\n\tfont-size: .8rem;\n\tfont-style: italic;\n\tfont-weight: 400;\n\n\t&:hover {\n\t\ttext-transform: underline;\n\t}\n}\n\n.flex-form {\n\tdisplay: flex;\n\tjustify-content: space-between;\n\n\t.save-btn {\n\t\twidth: 5.5rem;\n\t\tmargin: 0 0 0 .25rem;\n\t\ttext-align: center;\n\t\tpadding: .75rem 1rem;\n\t\tcolor: #fff;\n\t\tborder-radius: @radius;\n\t\tfont-weight: 600;\n\t\ttransition: background .2s;\n\t}\n}\n\n//\n// Chronograf modal media queries\n// --------------------------------------------------\n@media (max-width: 500px) {\n\t.flex-form {\n\t\tflex-flow: column;\n\t\t.save-btn {\n\t\t\twidth: 100%;\n\t\t\tmargin: .25rem 0 0;\n\t\t}\n\t}\n\t#default-chronograf-url {\n\t\tdisplay: block;\n\t\tmargin: 1rem auto 0;\n\t}\n}\n\n#save-chronograf-url button {\n\tbackground: @chronograf-link;\n\t&:hover {\n\t\tbackground: @chronograf-dropdown-gradient-b;\n\t}\n}\n\n//\n// Media Queries\n// --------------------------------------------------\n@media (min-width: @breakpoint-small) {\n\t.article {\n\t\tpadding-left: @sidebar-small-width;\n\t}\n\t.article-section {\n\t\tpadding: 3rem;\n\t}\n\t.article-content {\n\t\tcode,\n\t\tpre,\n\t\ttd,\n\t\tth {\n\t\t\tborder-width: @border-large-screen;\n\t\t}\n\t\tpre {\n\t\t\tborder-left-width: @thick-left-border;\n\t\t}\n\t}\n}\n@media (min-width: @breakpoint-large) {\n\t.article {\n\t\tpadding-left: @sidebar-large-width;\n\t}\n\t.article-section {\n\t\tpadding: 4.5rem;\n\t}\n\t.old-version {\n\t\twidth: 60%;\n\t}\n}\n@media (min-width: @breakpoint-huge) {\n\t.article {\n\t\tpadding-left: @sidebar-huge-width;\n\t}\n\t.article-section {\n\t\tpadding: 5rem 11rem;\n\t}\n\t.article-content {\n\t\tfont-size: 1.125rem;\n\t}\n}\n","/*\n\n\tHOME\n\n\t____________________________________________________________\n\n\tNotes:\n\t-\tSimple index view with links to the different products\n\n*/\n.homepage {\n\toverflow: auto;\n\tmin-height: calc(100vh - @nav-height);\n\twidth: 100%;\n\tz-index: 2;\n\t.gradient-h(@g4-onyx,@g0-obsidian);\n\tfont-size: 0;\n\tdisplay: flex;\n\tflex-direction: column;\n\tflex-wrap: wrap;\n\tjustify-content: space-between;\n\n\t.cards-special, .cards-oss, .cards-enterprise {\n\t\tdisplay: flex;\n\t\tflex-direction: row;\n\t\twidth: 100%;\n\t\tflex-wrap: wrap;\n\t\tflex: 1;\n\t}\n\n\t&--card {\n\t\twidth: 100%;\n\t\tdisplay: inline-block;\n\t\toverflow: hidden;\n\t\tposition: relative;\n\n\t\t&-mask {\n\t\t\tposition: absolute;\n\t\t\ttop: 0;\n\t\t\tleft: 0;\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t\topacity: 0.1;\n\t\t\ttransition:\n\t\t\t\topacity 0.75s ease,\n\t\t\t\ttransform 0.75s ease;\n\t\t\tz-index: 1;\n\t\t\tbackground-attachment: scroll;\n\t\t\tbackground-size: cover;\n\t\t\tbackground-position: center center;\n\t\t\tbackground-repeat: no-repeat;\n\t\t\ttransform: scale(1,1);\n\t\t}\n\t\t&:hover {\n\t\t\t.homepage--card-mask {\n\t\t\t\topacity: 1;\n\t\t\t\ttransform: scale(1.2,1.2);\n\t\t\t}\n\t\t\t.homepage--card-title {\n\t\t\t\tcolor: @g20-white !important;\n\t\t\t}\n\t\t}\n\n\t\t&-container {\n\t\t\tposition: relative;\n\t\t\tz-index: 2;\n\t\t\twidth: 100%;\n\t\t\tdisplay: inline-block;\n\t\t\ttext-align: center;\n\t\t\tpadding: 4rem 3rem;\n\t\t\tfont-size: 0;\n\n\t\t\ta:link,\n\t\t\ta:active,\n\t\t\ta:visited {\n\t\t\t\tcolor: @default-link-color;\n\t\t\t\ttransition: color 0.25s ease;\n\t\t\t\ttext-decoration: none;\n\t\t\t}\n\t\t\ta:hover {\n\t\t\t\tcolor: @default-link-hover;\n\t\t\t}\n\t\t}\n\t\t&-title,\n\t\t&-description {\n\t\t\ttext-align: left;\n\t\t\tdisplay: inline-block;\n\t\t\twidth: 100%;\n\t\t\tvertical-align: middle;\n\t\t}\n\t\t&-title {\n\t\t\tfont-size: 2rem;\n\t\t\tfont-family: Klavika-Light, sans-serif;\n\t\t\tfont-weight: 200;\n\t\t\tfont-style: italic;\n\t\t\tcolor: @sidebar-title-color;\n\t\t\tmargin-bottom: 0.5em;\n\t\t\ttransition: color 0.75s ease;\n\t\t}\n\t\t&-description {\n\t\t\tfont-size: 1rem;\n\t\t\tcolor: @article-text;\n\t\t\tline-height: 1.4em;\n\t\t\tfont-weight: 400;\n\t\t}\n\t\t&-link {\n\t\t\tdisplay: inline-block;\n\t\t\tfont-size: 0.875rem;\n\t\t\tfont-weight: 600;\n\t\t\tmargin-left: 0.25rem;\n\t\t\tpadding: 2px 11px;\n\t\t\tborder-radius: 3px;\n\n\t\t\t&:first-of-type {\n\t\t\t\tmargin-top: 1rem;\n\t\t\t}\n\t\t}\n\n\t\t// Themes\n\t\t&.card-telegraf {\n\t\t\t.homepage--card-mask {\n\t\t\t\tbackground-image: url(/img/home-telegraf.svg);\n\t\t\t\tbackground-color: @c-curacao;\n\t\t\t}\n\t\t\t.homepage--card-description {\n\t\t\t\tcolor: @g20-white;\n\t\t\t}\n\t\t\t.homepage--card-title {\n\t\t\t\tcolor: @c-dreamsicle;\n\t\t\t}\n\t\t\ta.homepage--card-link:link,\n\t\t\ta.homepage--card-link:active,\n\t\t\ta.homepage--card-link:visited {\n\t\t\t\tcolor: @g20-white;\n\t\t\t\ttransition:\n\t\t\t\t\tbackground-color 0.25s ease,\n\t\t\t\t\tcolor 0.25s ease;\n\t\t\t}\n\t\t\ta.homepage--card-link:hover {\n\t\t\t\tcolor: @c-dreamsicle;\n\t\t\t\tbackground-color: @g20-white;\n\t\t\t}\n\t\t}\n\t\t&.card-influxdb {\n\t\t\t.homepage--card-mask {\n\t\t\t\tbackground-image: url(/img/home-influxdb.svg);\n\t\t\t\tbackground-color: @c-ocean;\n\t\t\t}\n\t\t\t.homepage--card-description {\n\t\t\t\tcolor: @g20-white;\n\t\t\t}\n\t\t\t.homepage--card-title {\n\t\t\t\tcolor: @c-laser;\n\t\t\t}\n\t\t\ta.homepage--card-link:link,\n\t\t\ta.homepage--card-link:active,\n\t\t\ta.homepage--card-link:visited {\n\t\t\t\tcolor: @g20-white;\n\t\t\t\ttransition:\n\t\t\t\t\tbackground-color 0.25s ease,\n\t\t\t\t\tcolor 0.25s ease;\n\t\t\t}\n\t\t\ta.homepage--card-link:hover {\n\t\t\t\tcolor: @c-pool;\n\t\t\t\tbackground-color: @g20-white;\n\t\t\t}\n\t\t}\n\t\t&.card-chronograf {\n\t\t\t.homepage--card-mask {\n\t\t\t\tbackground-image: url(/img/home-chronograf.svg);\n\t\t\t\tbackground-color: @c-star;\n\t\t\t}\n\t\t\t.homepage--card-description {\n\t\t\t\tcolor: @g20-white;\n\t\t\t}\n\t\t\t.homepage--card-title {\n\t\t\t\tcolor: @c-comet;\n\t\t\t}\n\t\t\ta.homepage--card-link:link,\n\t\t\ta.homepage--card-link:active,\n\t\t\ta.homepage--card-link:visited {\n\t\t\t\tcolor: @g20-white;\n\t\t\t\ttransition:\n\t\t\t\t\tbackground-color 0.25s ease,\n\t\t\t\t\tcolor 0.25s ease;\n\t\t\t}\n\t\t\ta.homepage--card-link:hover {\n\t\t\t\tcolor: @c-comet;\n\t\t\t\tbackground-color: @g20-white;\n\t\t\t}\n\t\t}\n\t\t&.card-kapacitor {\n\t\t\t.homepage--card-mask {\n\t\t\t\tbackground-image: url(/img/home-kapacitor.svg);\n\t\t\t\tbackground-color: @c-rainforest;\n\t\t\t}\n\t\t\t.homepage--card-description {\n\t\t\t\tcolor: @g20-white;\n\t\t\t}\n\t\t\t.homepage--card-title {\n\t\t\t\tcolor: @c-rainforest;\n\t\t\t}\n\t\t\ta.homepage--card-link:link,\n\t\t\ta.homepage--card-link:active,\n\t\t\ta.homepage--card-link:visited {\n\t\t\t\tcolor: @g20-white;\n\t\t\t\ttransition:\n\t\t\t\t\tbackground-color 0.25s ease,\n\t\t\t\t\tcolor 0.25s ease;\n\t\t\t}\n\t\t\ta.homepage--card-link:hover {\n\t\t\t\tcolor: @c-rainforest;\n\t\t\t\tbackground-color: @g20-white;\n\t\t\t}\n\t\t}\n\n\t\t&.card-enterprise_kapacitor {\n\t\t\t.homepage--card-mask {\n\t\t\t\tbackground-image: url(/img/home-kapacitor.svg);\n\t\t\t\tbackground-color: @c-rainforest;\n\t\t\t}\n\t\t\t.homepage--card-description {\n\t\t\t\tcolor: @g20-white;\n\t\t\t}\n\t\t\t.homepage--card-title {\n\t\t\t\tcolor: @c-rainforest;\n\t\t\t}\n\t\t\ta.homepage--card-link:link,\n\t\t\ta.homepage--card-link:active,\n\t\t\ta.homepage--card-link:visited {\n\t\t\t\tcolor: @g20-white;\n\t\t\t\ttransition:\n\t\t\t\t\tbackground-color 0.25s ease,\n\t\t\t\t\tcolor 0.25s ease;\n\t\t\t}\n\t\t\ta.homepage--card-link:hover {\n\t\t\t\tcolor: @c-rainforest;\n\t\t\t\tbackground-color: @g20-white;\n\t\t\t}\n\t\t}\n\n\t\t&.card-enterprise_influxdb {\n\t\t\t.homepage--card-mask {\n\t\t\t\tbackground-image: url(/img/home-influxdb.svg);\n\t\t\t\tbackground-color: @c-ocean;\n\t\t\t}\n\t\t\t.homepage--card-description {\n\t\t\t\tcolor: @g20-white;\n\t\t\t}\n\t\t\t.homepage--card-title {\n\t\t\t\tcolor: @c-laser;\n\t\t\t}\n\t\t\ta.homepage--card-link:link,\n\t\t\ta.homepage--card-link:active,\n\t\t\ta.homepage--card-link:visited {\n\t\t\t\tcolor: @g20-white;\n\t\t\t\ttransition:\n\t\t\t\t\tbackground-color 0.25s ease,\n\t\t\t\t\tcolor 0.25s ease;\n\t\t\t}\n\t\t\ta.homepage--card-link:hover {\n\t\t\t\tcolor: @c-pool;\n\t\t\t\tbackground-color: @g20-white;\n\t\t\t}\n\t\t}\n\n\t\t&.card-flux {\n\t\t\t.homepage--card-mask {\n\t\t\t\tbackground-image: url(/img/home-flux.svg);\n\t\t\t\tbackground-color: #15a194;\n\t\t\t\topacity: 1;\n\t\t\t}\n\t\t\t.homepage--card-description {\n\t\t\t\tcolor: @g20-white;\n\t\t\t}\n\t\t\t.homepage--card-title {\n\t\t\t\tcolor: @g20-white ;\n\t\t\t}\n\t\t\ta.homepage--card-link:link,\n\t\t\ta.homepage--card-link:active,\n\t\t\ta.homepage--card-link:visited {\n\t\t\t\tcolor: @g20-white;\n\t\t\t\ttransition:\n\t\t\t\t\tbackground-color 0.25s ease,\n\t\t\t\t\tcolor 0.25s ease;\n\t\t\t\t&.download{\n\t\t\t\t\tdisplay: none;\n\t\t\t\t}\n\t\t\t}\n\t\t\ta.homepage--card-link:hover {\n\t\t\t\tcolor: @c-viridian;\n\t\t\t\tbackground-color: @g20-white;\n\t\t\t}\n\t\t}\n\n\t\t&.card-platform {\n\t\t\twidth: 100%;\n\t\t\tbackground: linear-gradient(to right, @c-ocean, @c-pool);\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\n\t\t\t.homepage--card-container {\n\t\t\t\tpadding-bottom: 3rem;\n\t\t\t}\n\n\t\t\t.homepage--card-mask {\n\t\t\t\tbackground-image: url(/img/home-influxdb.svg);\n\t\t\t\tbackground-color: @c-ocean;\n\t\t\t\topacity: .9;\n\t\t\t}\n\t\t\t.homepage--card-description {\n\t\t\t\tcolor: @g20-white;\n\t\t\t\ttext-align: center;\n\t\t\t}\n\t\t\t.homepage--card-title {\n\t\t\t\tcolor: @g20-white;\n\t\t\t\ttext-align: center;\n\t\t\t\tfont-size: 2.15rem;\n\t\t\t}\n\t\t\ta.homepage--card-link:link,\n\t\t\ta.homepage--card-link:active,\n\t\t\ta.homepage--card-link:visited {\n\t\t\t\tcolor: @g20-white;\n\t\t\t\ttransition:\n\t\t\t\t\tbackground-color 0.25s ease,\n\t\t\t\t\tcolor 0.25s ease;\n\t\t\t}\n\t\t\ta.homepage--card-link:hover {\n\t\t\t\tcolor: @c-pool;\n\t\t\t\tbackground-color: @g20-white;\n\t\t\t}\n\t\t\ta.btn {\n\t\t\t\tmargin: 1.75rem 0 1rem;\n\t\t\t\tpadding: 1em 1.5em;\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tbackground: @g20-white;\n\t\t\t\tcolor: @c-pool;\n\t\t\t\tborder-radius: 3px;\n\t\t\t\tfont-size: 1rem;\n\t\t\t\tfont-weight: bold;\n\t\t\t\ttransition: all .2s;\n\t\t\t\tbox-shadow: 0 0 15px rgba(255,255,255,0);\n\n\t\t\t\t&:hover {\n\t\t\t\t\tbox-shadow: 0 0 15px rgba(255,255,255,1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n/*\n\tMedia Queries\n\t--------------------------------------------------\n*/\n@media (min-width: @breakpoint-small) {\n\t.homepage--card {\n\t\twidth: 50%;\n\t\tflex-grow: 1;\n\t}\n}\n@media (min-width: @breakpoint-large) {\n\t.homepage--card-container {\n\t\tpadding: 3.5rem;\n\t}\n\t.homepage--card-description {\n\t\tfont-size: 1.075rem;\n\t}\n\t.homepage--card {\n\t\twidth: 25%;\n\t\theight: auto;\n\n\t\t&.card-platform {\n\t\t\twidth: 75%;\n\t\t}\n\n\t\t&.card-enterprise_influxdb,\n\t\t&.card-enterprise_kapacitor {\n\t\t\twidth: 50%;\n\t\t}\n\t}\n}\n@media (min-width: @breakpoint-huge) {\n\t.homepage--card-container {\n\t\tpadding: 4rem;\n\t}\n\t.homepage--card-description {\n\t\tfont-size: 1.125rem;\n\t}\n}\n","/*\n\n\tERROR PAGES\n\n\t____________________________________________________________\n\n\tNotes:\n\t-\tSimple index view with links to the different products\n\n*/\n.error-page {\n\toverflow: scroll;\n\ttop: @nav-height;\n\theight: 100%;\n\twidth: 100%;\n\t.gradient-v(@error-bg,@error-bg-accent);\n}\n.error-content {\n\tmargin: 15vh auto;\n\twidth: 85%;\n\tmax-width: 400px;\n\tmin-width: 240px;\n\tfont-size: 15px;\n\tline-height: 19px;\n\tcolor: @error-text;\n\n\th1 {\n\t\tcolor: @error-decor;\n\t\tdisplay: block;\n\t\tmargin: 0 auto 50px;\n\t\tpadding-top: 15px;\n\t\twidth: 212px;\n\t\theight: 212px;\n\t\tborder-radius: 50%;\n\t\ttext-align: center;\n\t\tfont-size: 90px;\n\t\tfont-weight: 200;\n\t\tline-height: 180px;\n\t\tposition: relative;\n\t\tborder: 2px solid @error-decor;\n\n\t\t// &:after {\n\t\t// \tcontent: '';\n\t\t// \tposition: absolute;\n\t\t// \ttop: 50%;\n\t\t// \tleft: 50%;\n\t\t//\n\t\t// \ttransform: translate(-50%,-50%);\n\t\t// \tborder-radius: 50%;\n\t\t//\n\t\t// }\n\t}\n}\n\n.flex {\n\tdisplay: flex;\n\tjustify-content: space-around;\n}\n\n.wayfinding {\n\tmargin-bottom: 2rem;\n}\n\n.btn {\n\tdisplay: block;\n\tpadding: .5rem;\n\tbackground: @error-decor;\n\tcolor: #fff;\n\tborder-radius: @radius;\n\ttext-align: center;\n\ttransition: background .2s;\n\n\t&.back {\n\t\tflex-grow: 1;\n\t\tmargin-right: .35rem;\n\n\t\t&:before {\n\t\t\tcontent: \"\\ea41\";\n\t\t\tfont-family: 'icomoon';\n\t\t\tmargin-right: .5rem;\n\t\t\tfont-size: 1rem;\n\t\t}\n\t}\n\n\t&.project{\n\t\tflex-grow: 3;\n\t\tdisplay: none;\n\n\t\t&:before {\n\t\t\tcontent: \"\\e801\";\n\t\t\tfont-family: 'icomoon';\n\t\t\tmargin-right: .5rem;\n\t\t\tflex-grow: 3;\n\t\t}\n\t}\n\n\t&:hover {\n\t\tbackground: @c-pool;\n\t}\n}\n\n/*\n\tMedia Queries\n\t--------------------------------------------------\n*/\n@media (min-width: @breakpoint-small) {\n\t.error-content {\n\t\tfont-size: 17px;\n\t\tline-height: 22px;\n\t}\n}\n@media (min-width: @breakpoint-large) {\n}\n@media (min-width: @breakpoint-huge) {\n\t.error-content {\n\t\tfont-size: 21px;\n\t\tline-height: 32px;\n\t}\n}\n",".tabs-container {\n margin: 2em 0 2em;\n}\n.tabs {\n flex-grow: 1;\n border-radius: @radius 0 0 @radius;\n}\n.tabs p {\n display: flex;\n flex-wrap: wrap;\n}\n.tabs a {\n flex-grow: 1;\n margin: 2px;\n font-size: 0.875em;\n color: @tabs-link !important;\n padding: .5em 1em;\n display: inline-block;\n text-align: center;\n border-radius: @radius;\n background-color: fadeout(@tabs-link-bg, 50%);\n transition: background-color .2s, color .2s;\n\n &:hover {\n color: @tabs-link-hover !important;\n }\n &.is-active {\n color: @g20-white !important;\n background: @default-link-color;\n }\n}\n\n.tab-content {\n width: 100%;\n\n & > * {\n width: 100% !important;\n margin-left: 0 !important;\n }\n}\n\n.tab-content:not(:first-child) {\n display: none;\n}\n\n.tab-content-container {\n position: relative;\n border-radius: 0 @radius @radius @radius;\n}\n\n////////////////////////////////// Code Tabs //////////////////////////////////\n\n.code-tabs-content {\n margin: .75rem 0 3rem;\n width: 100%;\n\n & > * {\n width: 100% !important;\n margin-left: 0 !important;\n }\n}\n\n.code-tabs-wrapper {\n margin: 1.5rem 0 .5rem;\n\n .code-tabs {\n p {\n margin: 0;\n text-align: right;\n display: block;\n font-size: .9rem;\n }\n a {\n padding: .25rem .75rem;\n margin: 0;\n border-radius: @radius @radius 0 0;\n display: inline-block;\n background: fadeout(@article-code-border, 40%) ;\n color: fadeout(@tabs-link, 50%) !important;\n &:hover {\n color: @tabs-link-hover !important;\n }\n &.is-active {\n background-color: @article-code-border ;\n color: @tabs-link-active !important;\n }\n }\n }\n\n .code-tab-content {\n padding: 0;\n pre {\n margin: 0 0 3rem;\n border-radius: @radius 0 @radius @radius;\n }\n &:not(:first-of-type) {\n display: none;\n }\n }\n}\n\n//\n// Media Queries\n// -------------\n\n@media (min-width: @breakpoint-small) {\n .tabs-container .tabs a {\n flex-grow: 0;\n }\n}\n","/////////////////////// Styles for Telegraf plugin cards ///////////////////////\n\n.plugin-card {\n position: relative;\n padding: 1rem 1.5rem;\n margin-bottom: .5rem;\n justify-content: center;\n align-items: center;\n background: @article-bg-darken;\n border-radius: @radius;\n\n h3 {\n padding: 0;\n margin-top: .25rem;\n }\n\n &.new h3:after {\n content: \"New\";\n margin-left: .3rem;\n padding: .25rem .5rem;\n font-style: italic;\n color: @sidebar-title-color;\n font-size: 1.2rem;\n }\n\n p {\n &.meta {\n margin: .75rem 0;\n font-weight: 500;\n color: @article-text;\n line-height: 1.75rem;\n\n .deprecated {\n margin-left: .5rem;\n font-style: italic;\n color: @article-code-accent7;\n }\n }\n }\n\n & .info {\n & > p:last-child { margin-bottom: .5rem; }\n & > ul:last-child { margin-bottom: .5rem; }\n & > ol:last-child { margin-bottom: .5rem; }\n }\n\n .github-link {\n position: absolute;\n color: @g20-white !important;\n top: .5rem;\n right: .5rem;\n opacity: 0;\n transition: opacity .2s, background .2s, color 2s;\n\n .icon-github {\n font-size: 1.2rem;\n margin: 0 .25rem 0 0;\n }\n }\n\n &:hover {\n .github-link { opacity: 1; }\n }\n\n // Special use-case for using block quotes in the yaml provided by the data file\n blockquote {\n border-color: @article-note-border;\n background: fade(@article-note-bg, 50%);\n h3,h4,h5,h6 { color: @article-text-heading; }\n p, li {\n color: @article-note-text;\n font-size: 1rem;\n font-style: normal;\n }\n strong { color: inherit; }\n a {\n color: @telegraf-link;\n code:after {\n border-color: transparent fade(@article-note-code, 35%) transparent transparent;\n }\n &:hover {\n color: @telegraf-link-hover;\n code:after {\n border-color: transparent @telegraf-link-hover transparent transparent;\n }\n }\n }\n ol li:before { color: @article-note-text; }\n code, pre{\n color: @article-note-code;\n background: @article-note-code-bg;\n }\n }\n}\n\n//////////////////////////////// Plugin Filters ////////////////////////////////\n\n#plugin-filters {\n display: flex;\n flex-flow: row wrap;\n align-items: flex-start;\n\n .filter-category {\n flex: 1 1 200px;\n margin: 0 1.25rem 1.25rem 0;\n max-width: 33%;\n\n &.two-columns {\n flex: 1 2 400px;\n max-width: 66%;\n .filter-list {\n columns: 2;\n }\n }\n }\n\n h5 {\n border-bottom: 1px solid fade(@article-text, 25%);\n padding-bottom: .65rem;\n }\n\n .filter-list {\n padding: 0;\n margin: .5rem 0 0;\n list-style: none;\n li {\n padding: 0;\n margin: 0;\n line-height: 1.35rem;\n list-style-type: none !important;\n }\n }\n\n label {\n display: block;\n padding: .25rem 0;\n color: @article-text;\n position: relative;\n\n &:after {\n content: attr(data-count);\n margin-left: .25rem;\n font-size: .85rem;\n opacity: .5;\n }\n }\n\n .checkbox {\n display: inline-block;\n height: 1.15em;\n width: 1.15em;\n background: fade(@article-text, 5%);\n margin-right: .3rem;\n vertical-align: text-top;\n border-radius: @radius;\n cursor: pointer;\n border: 1.5px solid fade(@article-text, 20%);\n user-select: none;\n }\n\n input[type='checkbox'] {\n margin-right: -1.1rem ;\n padding: 0;\n vertical-align: top;\n opacity: 0;\n cursor: pointer;\n\n & + .checkbox:after {\n content: \"\";\n display: block;\n position: absolute;\n height: .5rem;\n width: .5rem;\n border-radius: 50%;\n background: @telegraf-link;\n top: .65rem;\n left: .35rem;\n opacity: 0;\n transform: scale(2);\n transition: all .2s;\n }\n\n &:checked + .checkbox:after {\n opacity: 1;\n transform: scale(1);\n }\n }\n}\n\n////////////////////////////////////////////////////////////////////////////////\n///////////////////////////////// MEDIA QUERIES ////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////\n\n@media(max-width: 1100px) {\n #plugin-filters {\n .filter-category {\n max-width: 50%;\n &.two-columns, &.three-columns {\n max-width: 100%;\n }\n }\n }\n}\n\n@media(max-width: 800px) {\n #plugin-filters{\n .filter-category {\n max-width: 100%;\n }\n }\n\n .plugin-card {\n .github-link {\n opacity: 1;\n padding: .25rem .35rem .35rem;\n line-height: 0;\n font-size: 1.35rem;\n .icon-github { margin: 0; }\n .hide { display: none; }\n }\n }\n}\n","/*\n\n T E L E G R A F T H E M E\n\n ____________________________________________________________\n\n Notes:\n - Only contains color overrides for layout-article.less\n\n*/\n\n\n//\n// Override only if class is applied to body\n// -------------------------------------------------------------\nbody.docs-theme--telegraf {\n\n //\n // Article Styles\n // ---------------------------------------------------------\n .article-content {\n a:link,\n a:active,\n a:visited {\n color: @telegraf-link;\n }\n a:hover {\n color: @telegraf-link-hover;\n }\n a.top:hover {\n background: @telegraf-link-hover;\n }\n a.btn {\n background: @telegraf-btn;\n &:hover {\n background: @telegraf-btn-hover;\n }\n }\n &.section-landing{\n \t\th2 a.off-page:link:hover {\n \t\t\tcolor: @telegraf-link !important;\n \t\t}\n \t}\n }\n\n //\n // Sidebar Styles\n // ---------------------------------------------------------\n .sidebar--mask-container {\n .sidebar--mask {\n .gradient-v(@telegraf-dropdown-gradient-a,@telegraf-dropdown-gradient-b);\n }\n }\n .sidebar--section-title {\n a:link,\n a:active,\n a:visited {\n color: @telegraf-section-title;\n font-weight: 400;\n }\n a:hover {\n color: @telegraf-link-hover;\n }\n }\n a.sidebar--page {\n &:hover {\n color: @telegraf-link-hover;\n }\n }\n\n //\n // Navbar Styles\n // ---------------------------------------------------------\n .navbar--product-dropdown {\n background-color: @telegraf-dropdown;\n &:hover {\n background-color: @telegraf-dropdown-hover;\n }\n }\n .navbar--product-menu {\n .gradient-v(@telegraf-dropdown-gradient-a,@telegraf-dropdown-gradient-b);\n }\n\n // Tab Labels\n .tabs a.is-active {\n background: @telegraf-link;\n }\n}\n","/*\n\n C H R O N O G R A F T H E M E\n\n ____________________________________________________________\n\n Notes:\n - Only contains color overrides for layout-article.less\n\n*/\n\n\n//\n// Override only if class is applied to body\n// -------------------------------------------------------------\nbody.docs-theme--chronograf {\n\n //\n // Article Styles\n // ---------------------------------------------------------\n .article-content {\n a:link,\n a:active,\n a:visited {\n color: @chronograf-link;\n }\n a:hover {\n color: @chronograf-link-hover;\n }\n a.top:hover {\n background: @chronograf-link-hover;\n }\n a.btn {\n background: @chronograf-btn;\n &:hover {\n background: @chronograf-btn-hover;\n }\n }\n &.section-landing{\n \t\th2 a.off-page:link:hover {\n \t\t\tcolor: @chronograf-link !important;\n \t\t}\n \t}\n }\n\n //\n // Sidebar Styles\n // ---------------------------------------------------------\n .sidebar--mask-container {\n .sidebar--mask {\n .gradient-v(@chronograf-dropdown-gradient-a,@chronograf-dropdown-gradient-b);\n }\n }\n .sidebar--section-title {\n a:link,\n a:active,\n a:visited {\n color: @chronograf-section-title;\n font-weight: 400;\n }\n a:hover {\n color: @chronograf-link-hover;\n }\n }\n a.sidebar--page {\n &:hover {\n color: @chronograf-link-hover;\n }\n }\n\n //\n // Navbar Styles\n // ---------------------------------------------------------\n .navbar--product-dropdown {\n background-color: @chronograf-dropdown;\n &:hover {\n background-color: @chronograf-dropdown-hover;\n }\n }\n .navbar--product-menu {\n .gradient-v(@chronograf-dropdown-gradient-a,@chronograf-dropdown-gradient-b);\n }\n\n // Tab Labels\n .tabs a.is-active {\n background: @chronograf-link;\n }\n}\n","/*\n\n K A P A C I T O R T H E M E\n\n ____________________________________________________________\n\n Notes:\n - Only contains color overrides for layout-article.less\n\n*/\n\n\n//\n// Override only if class is applied to body\n// -------------------------------------------------------------\nbody.docs-theme--kapacitor {\n\n //\n // Article Styles\n // ---------------------------------------------------------\n .article-content {\n a:link,\n a:active,\n a:visited {\n color: @kapacitor-link;\n }\n a:hover {\n color: @kapacitor-link-hover;\n }\n a.top:hover {\n background: @kapacitor-link-hover;\n }\n a.btn {\n background: @kapacitor-btn;\n &:hover {\n background: @kapacitor-btn-hover;\n }\n }\n &.section-landing{\n \t\th2 a.off-page:link:hover {\n \t\t\tcolor: @kapacitor-link !important;\n \t\t}\n \t}\n }\n\n //\n // Sidebar Styles\n // ---------------------------------------------------------\n .sidebar--mask-container {\n .sidebar--mask {\n .gradient-v(@kapacitor-dropdown-gradient-a,@kapacitor-dropdown-gradient-b);\n }\n }\n .sidebar--section-title {\n a:link,\n a:active,\n a:visited {\n color: @kapacitor-section-title;\n font-weight: 400;\n }\n a:hover {\n color: @kapacitor-link-hover;\n }\n }\n a.sidebar--page {\n &:hover {\n color: @kapacitor-link-hover;\n }\n }\n\n //\n // Navbar Styles\n // ---------------------------------------------------------\n .navbar--product-dropdown {\n background-color: @kapacitor-dropdown;\n &:hover {\n background-color: @kapacitor-dropdown-hover;\n }\n }\n .navbar--product-menu {\n .gradient-v(@kapacitor-dropdown-gradient-a,@kapacitor-dropdown-gradient-b);\n }\n\n // Tab Labels\n .tabs a.is-active {\n background: @kapacitor-link;\n }\n}\n","/*\n\n K A P A C I T O R T H E M E\n\n ____________________________________________________________\n\n Notes:\n - Only contains color overrides for layout-article.less\n\n*/\n\n\n//\n// Override only if class is applied to body\n// -------------------------------------------------------------\nbody.docs-theme--enterprise_kapacitor {\n\n //\n // Article Styles\n // ---------------------------------------------------------\n .article-content {\n a:link,\n a:active,\n a:visited {\n color: @kapacitor-link;\n }\n a:hover {\n color: @kapacitor-link-hover;\n }\n a.top:hover {\n background: @kapacitor-link-hover;\n }\n a.btn {\n background: @kapacitor-btn;\n &:hover {\n background: @kapacitor-btn-hover;\n }\n }\n &.section-landing{\n \t\th2 a.off-page:link:hover {\n \t\t\tcolor: @kapacitor-link !important;\n \t\t}\n \t}\n }\n\n //\n // Sidebar Styles\n // ---------------------------------------------------------\n .sidebar--mask-container {\n .sidebar--mask {\n .gradient-v(@kapacitor-dropdown-gradient-a,@kapacitor-dropdown-gradient-b);\n }\n }\n .sidebar--section-title {\n a:link,\n a:active,\n a:visited {\n color: @kapacitor-section-title;\n font-weight: 400;\n }\n a:hover {\n color: @kapacitor-link-hover;\n }\n }\n a.sidebar--page {\n &:hover {\n color: @kapacitor-link-hover;\n }\n }\n\n //\n // Navbar Styles\n // ---------------------------------------------------------\n .navbar--product-dropdown {\n background-color: @kapacitor-dropdown;\n &:hover {\n background-color: @kapacitor-dropdown-hover;\n }\n }\n .navbar--product-menu {\n .gradient-v(@kapacitor-dropdown-gradient-a,@kapacitor-dropdown-gradient-b);\n }\n\n // Tab Labels\n .tabs a.is-active {\n background: @kapacitor-link;\n }\n}\n","/*\n\n F L U X T H E M E\n\n ____________________________________________________________\n\n Notes:\n - Only contains color overrides for layout-article.less\n\n*/\n\n\n//\n// Override only if class is applied to body\n// -------------------------------------------------------------\nbody.docs-theme--flux {\n\n //\n // Article Styles\n // ---------------------------------------------------------\n .article-content {\n a:link,\n a:active,\n a:visited {\n color: @flux-link;\n }\n a:hover {\n color: @flux-link-hover;\n }\n a.top:hover {\n background: @flux-link-hover;\n }\n &.section-landing{\n \t\th2 a.off-page:link:hover {\n \t\t\tcolor: @flux-link !important;\n \t\t}\n \t}\n }\n\n //\n // Sidebar Styles\n // ---------------------------------------------------------\n .sidebar--mask-container {\n .sidebar--mask {\n .gradient-v(@flux-dropdown-gradient-a,@flux-dropdown-gradient-b);\n }\n }\n .sidebar--section-title {\n a:link,\n a:active,\n a:visited {\n color: @flux-section-title;\n font-weight: 400;\n }\n a:hover {\n color: @flux-link-hover;\n }\n }\n a.sidebar--page {\n &:hover {\n color: @flux-link-hover;\n }\n }\n\n //\n // Navbar Styles\n // ---------------------------------------------------------\n .navbar--product-dropdown {\n background-color: @flux-dropdown;\n &:hover {\n background-color: @flux-dropdown-hover;\n }\n }\n .navbar--product-menu {\n .gradient-v(@flux-dropdown-gradient-a,@flux-dropdown-gradient-b);\n }\n\n // Tab Labels\n .tabs a.is-active {\n background: @flux-link;\n }\n}\n"]} \ No newline at end of file +{"version":3,"sources":["variables.less","icon-font.less","theme-dark.less","docs-default.less","docs-default.css","normalize-3.0.2.less","syntax.less","layout.less","layout-navbar.less","layout-search-overrides.less","layout-sidebar.less","layout-sidebar-ads.less","layout-article.less","layout-home.less","layout-error-pages.less","tabs.less","telegraf-plugins.less","flex.less","svgs.less","theme-telegraf.less","theme-chronograf.less","theme-kapacitor.less","theme-enterprise_kapacitor.less","theme-flux.less"],"names":[],"mappings":"AAsBA,cACC,8FAA+C,CAC/C,eAAA,CCxBD,WACC,mBAAa,CACb,oCAAA,CACA,qRAI4C,CAC5C,eAAA,CACA,iBAAA,CAGD,MACC,mBAAa,CACb,UAAA,CACA,iBAAA,CACA,eAAA,CACA,mBAAA,CACA,mBAAA,CACA,aAAA,CAGA,kCAAA,CACA,iCAAA,CAGD,kBACI,eAAS,CAEb,kBACI,eAAS,CAEb,sBACI,eAAS,CAEb,kBACI,eAAS,CAEb,wBACI,eAAS,CAEb,sBACI,eAAS,CAEb,wBACI,eAAS,CAEb,yBACI,eAAS,CAEb,oBACI,eAAS,CAEb,uBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,kBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,uBACI,eAAS,CAEb,uBACI,eAAS,CAEb,yBACI,eAAS,CAEb,iBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,uBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,mBACI,eAAS,CAEb,iBACI,eAAS,CAEb,kBACI,eAAS,CAEb,wBACI,eAAS,CAEb,qBACI,eAAS,CAEb,0BACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,oBACI,eAAS,CAEb,wBACI,eAAS,CAEb,mBACI,eAAS,CAEb,kBACI,eAAS,CAEb,kBACI,eAAS,CAEb,0BACI,eAAS,CAEb,kBACI,eAAS,CAEb,oBACI,eAAS,CAEb,oBACI,eAAS,CAEb,mBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,wBACI,eAAS,CAEb,qBACI,eAAS,CAEb,kBACI,eAAS,CAEb,iBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,qBACI,eAAS,CAEb,uBACI,eAAS,CAEb,qBACI,eAAS,CAEb,wBACI,eAAS,CAEb,yBACI,eAAS,CAEb,wBACI,eAAS,CAEb,0BACI,eAAS,CAEb,wBACI,eAAS,CAEb,uBACI,eAAS,CAEb,wBACI,eAAS,CAEb,sBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,yBACI,eAAS,CAEb,yBACI,eAAS,CAEb,0BACI,eAAS,CAEb,6BACI,eAAS,CAEb,2BACI,eAAS,CAEb,uBACI,eAAS,CAEb,wBACI,eAAS,CAEb,qBACI,eAAS,CAEb,oBACI,eAAS,CAEb,oBACI,eAAS,CAEb,kBACI,eAAS,CAEb,yBACI,eAAS,CAEb,uBACI,eAAS,CAEb,wBACI,eAAS,CAEb,sBACI,eAAS,CAEb,yBACI,eAAS,CAEb,wBACI,eAAS,CAEb,sBACI,eAAS,CAEb,mBACI,eAAS,CAEb,2BACI,eAAS,CAEb,0BACI,eAAS,CAEb,qBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,uBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,iBACI,eAAS,CAEb,kBACI,eAAS,CAEb,qBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,mBACI,eAAS,CAEb,kBACI,eAAS,CAEb,uBACI,eAAS,CAEb,sBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,qBACI,eAAS,CAEb,oBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,oBACI,eAAS,CAEb,gBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,qBACI,eAAS,CAEb,wBACI,eAAS,CAEb,sBACI,eAAS,CAEb,oBACI,eAAS,CAEb,yBACI,eAAS,CAEb,mBACI,eAAS,CAEb,sBACI,eAAS,CAEb,kBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,qBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,uBACI,eAAS,CAEb,wBACI,eAAS,CAEb,wBACI,eAAS,CAEb,sBACI,eAAS,CAEb,yBACI,eAAS,CAEb,0BACI,eAAS,CAEb,wBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,uBACI,eAAS,CAEb,uBACI,eAAS,CAEb,wBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,qBACI,eAAS,CAEb,oBACI,eAAS,CAEb,sBACI,eAAS,CAEb,qBACI,eAAS,CAEb,iBACI,eAAS,CAEb,kBACI,eAAS,CAEb,kBACI,eAAS,CAEb,sBACI,eAAS,CAEb,oBACI,eAAS,CAEb,uBACI,eAAS,CAEb,wBACI,eAAS,CAEb,iBACI,eAAS,CAEb,kBACI,eAAS,CAEb,oBACI,eAAS,CAEb,wBACI,eAAS,CAEb,qBACI,eAAS,CAEb,iBACI,eAAS,CAEb,uBACI,eAAS,CAEb,wBACI,eAAS,CAEb,wBACI,eAAS,CAEb,yBACI,eAAS,CAEb,oBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,iBACI,eAAS,CAEb,yBACI,eAAS,CAEb,kBACI,eAAS,CAEb,oBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,kBACI,eAAS,CAEb,iBACI,eAAS,CAEb,oBACI,eAAS,CAEb,iBACI,eAAS,CAEb,kBACI,eAAS,CAEb,uBACI,eAAS,CAEb,sBACI,eAAS,CAEb,mBACI,eAAS,CAEb,kBACI,eAAS,CAEb,2BACI,eAAS,CAEb,oBACI,eAAS,CAEb,oBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,wBACI,eAAS,CAEb,uBACI,eAAS,CAEb,2BACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,kBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,4BACI,eAAS,CAEb,0BACI,eAAS,CAEb,yBACI,eAAS,CAEb,uBACI,eAAS,CAEb,qBACI,eAAS,CAEb,uBACI,eAAS,CAEb,qBACI,eAAS,CAEb,oBACI,eAAS,CAEb,mBACI,eAAS,CAEb,kBACI,eAAS,CAEb,kBACI,eAAS,CAEb,wBACI,eAAS,CAEb,iBACI,eAAS,CAEb,sBACI,eAAS,CAEb,uBACI,eAAS,CAEb,yBACI,eAAS,CAEb,sBACI,eAAS,CAEb,uBACI,eAAS,CAEb,iBACI,eAAS,CAEb,sBACI,eAAS,CAEb,iCACI,eAAS,CAEb,wBACI,eAAS,CAEb,uBACI,eAAS,CAEb,uBACI,eAAS,CAEb,mBACI,eAAS,CAEb,0BACI,eAAS,CAEb,iBACI,eAAS,CAEb,mBACI,eAAS,CAEb,uBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,iBACI,eAAS,CAEb,kBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,uBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,uBACI,eAAS,CAEb,wBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,wBACI,eAAS,CAEb,yBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,yBACI,eAAS,CAEb,wBACI,eAAS,CAEb,wBACI,eAAS,CAEb,qBACI,eAAS,CAEb,0BACI,eAAS,CAEb,sBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,kBACI,eAAS,CAEb,2BACI,eAAS,CAEb,qBACI,eAAS,CAEb,mBACI,eAAS,CAEb,uBACI,eAAS,CAEb,wBACI,eAAS,CAEb,yBACI,eAAS,CAEb,mBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,kBACI,eAAS,CAEb,sBACI,eAAS,CAEb,kBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,mBACI,eAAS,CAEb,uBACI,eAAS,CAEb,sBACI,eAAS,CAEb,mBACI,eAAS,CAEb,kBACI,eAAS,CAEb,uBACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,yBACI,eAAS,CAEb,2BACI,eAAS,CAEb,wBACI,eAAS,CAEb,yBACI,eAAS,CAEb,0BACI,eAAS,CAEb,6BACI,eAAS,CAEb,6BACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,uBACI,eAAS,CAEb,qBACI,eAAS,CAEb,2BACI,eAAS,CAEb,uBACI,eAAS,CAEb,4BACI,eAAS,CAEb,0BACI,eAAS,CAEb,8BACI,eAAS,CAEb,yBACI,eAAS,CAEb,6BACI,eAAS,CAEb,yBACI,eAAS,CAEb,4BACI,eAAS,CAEb,uBACI,eAAS,CAEb,6BACI,eAAS,CAEb,0BACI,eAAS,CAEb,+BACI,eAAS,CAEb,yBACI,eAAS,CAEb,8BACI,eAAS,CAEb,yBACI,eAAS,CAEb,uBACI,eAAS,CAEb,0BACI,eAAS,CAEb,yBACI,eAAS,CAEb,yBACI,eAAS,CAEb,iBACI,eAAS,CAEb,qBACI,eAAS,CAEb,uBACI,eAAS,CAEb,4BACI,eAAS,CAEb,6BACI,eAAS,CAEb,8BACI,eAAS,CAEb,gCACI,eAAS,CAEb,6BACI,eAAS,CAEb,8BACI,eAAS,CAEb,qBACI,eAAS,CAEb,mBACI,eAAS,CAEb,kBACI,eAAS,CAEb,iBACI,eAAS,CAEb,8BACI,eAAS,CAEb,gCACI,eAAS,CAEb,2BACI,eAAS,CAEb,4BACI,eAAS,CAEb,6BACI,eAAS,CAEb,kBACI,eAAS,CAEb,wBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,oBACI,eAAS,CAEb,kBACI,eAAS,CAEb,sBACI,eAAS,CAEb,uBACI,eAAS,CAEb,yBACI,eAAS,CAEb,wBACI,eAAS,CAEb,uBACI,eAAS,CAEb,kBACI,eAAS,CAEb,uBACI,eAAS,CAEb,oBACI,eAAS,CAEb,2BACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,wBACI,eAAS,CAEb,yBACI,eAAS,CAEb,uBACI,eAAS,CAEb,0BACI,eAAS,CAEb,wBACI,eAAS,CAEb,wBACI,eAAS,CAEb,uBACI,eAAS,CAEb,8BACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,6BACI,eAAS,CAEb,qBACI,eAAS,CAEb,iBACI,eAAS,CAEb,iBACI,eAAS,CAEb,qBACI,eAAS,CAEb,4BACI,eAAS,CAEb,8BACI,eAAS,CAEb,6BACI,eAAS,CAEb,+BACI,eAAS,CAEb,6BACI,eAAS,CAEb,6BACI,eAAS,CAEb,mBACI,eAAS,CAEb,qBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,sBACI,eAAS,CAEb,oBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,qBACI,eAAS,CAEb,yBACI,eAAS,CAEb,0BACI,eAAS,CAEb,0BACI,eAAS,CAEb,0BACI,eAAS,CAEb,sBACI,eAAS,CAEb,uBACI,eAAS,CAEb,uBACI,eAAS,CAEb,kBACI,eAAS,CAEb,uBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,oBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,oBACI,eAAS,CAEb,oBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,qBACI,eAAS,CAEb,qBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,uBACI,eAAS,CAEb,uBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,wBACI,eAAS,CAEb,yBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,qBACI,eAAS,CAEb,qBACI,eAAS,CAEb,qBACI,eAAS,CAEb,uBACI,eAAS,CAEb,wBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,mBACI,eAAS,CAEb,iBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,wBACI,eAAS,CAEb,yBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,sBACI,eAAS,CAEb,uBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,uBACI,eAAS,CAEb,yBACI,eAAS,CAEb,0BACI,eAAS,CAEb,2BACI,eAAS,CAEb,uBACI,eAAS,CAEb,wBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,wBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,qBACI,eAAS,CAEb,kBACI,eAAS,CAEb,sBACI,eAAS,CAEb,6BACI,eAAS,CAEb,uBACI,eAAS,CAEb,wBACI,eAAS,CAEb,yBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,kBACI,eAAS,CAEb,iBACI,eAAS,CAEb,iBACI,eAAS,CAEb,qBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,gBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CC76Cb,qBAEE,2BAAA,CACA,2BAAA,CACA,iCAAA,CACA,mBAAA,CALF,wBAQE,aAAA,CARF,wHAYG,oBAAA,CCjGH,mBAAqB,YAAA,CCqiDrB,2DAAA,CChjDA,KACE,sBAAA,CACA,yBAAA,CACA,6BAAA,CAOF,KACE,QAAA,CACA,4DAAa,CACb,kCAAA,CACA,iCAAA,CAaF,2FAaE,aAAA,CAQF,4BAIE,oBAAA,CACA,uBAAA,CAQF,sBACE,YAAA,CACA,QAAA,CAQF,kBAEE,YAAA,CAUF,EACE,4BAAA,CAOF,iBAEE,SAAA,CAUF,YACE,wBAAA,CAOF,SAEE,eAAA,CAOF,IACE,iBAAA,CAQF,GACE,aAAA,CACA,cAAA,CAOF,KACE,eAAA,CACA,UAAA,CAOF,MACE,aAAA,CAOF,QAEE,aAAA,CACA,aAAA,CACA,iBAAA,CACA,uBAAA,CAGF,IACE,SAAA,CAGF,IACE,aAAA,CAUF,IACE,QAAA,CAOF,eACE,eAAA,CAUF,OACE,eAAA,CAOF,GAEE,8BAAA,CAAA,sBAAA,CACA,QAAA,CAOF,IACE,aAAA,CAOF,kBAIE,+BAAA,CACA,aAAA,CAkBF,sCAKE,aAAA,CACA,YAAA,CACA,QAAA,CAOF,OACE,gBAAA,CAUF,cAEE,mBAAA,CAWF,oEAIE,yBAAA,CACA,cAAA,CAOF,sCAEE,cAAA,CAOF,iDAEE,QAAA,CACA,SAAA,CAQF,MACE,kBAAA,CAWF,uCAEE,6BAAA,CAAA,qBAAA,CACA,SAAA,CASF,4FAEE,WAAA,CASF,mBACE,4BAAA,CAEA,8BAAA,CACA,sBAAA,CASF,+FAEE,uBAAA,CAOF,SACE,uBAAA,CACA,YAAA,CACA,0BAAA,CAQF,OACE,QAAA,CACA,SAAA,CAOF,SACE,aAAA,CAQF,SACE,eAAA,CAUF,MACE,wBAAA,CACA,gBAAA,CAGF,MAEE,SAAA,CC5aF,6CAGC,aAAA,CACA,eAAA,CACA,eAAA,CACG,oBAAA,CACA,yBAAA,CACH,uBAAA,CACA,mBAAA,CACA,iBAAA,CACA,gBAAA,CAEA,eAAA,CACA,aAAA,CACA,UAAA,CAEA,oBAAA,CAEA,gBAAA,CACA,YAAA,CAIyC,4JACzC,gBAAA,CAIoC,wIACpC,gBAAA,CAGD,aACC,6CAEC,gBAAA,CAAA,CAKF,sBACC,aAAA,CAQD,iCACC,kBAAA,CAGD,WAAc,aAAA,CAAd,0FAUO,aAAA,CAVP,wGAmBO,aAAA,CAnBP,eAsBO,wBAAA,CAtBP,wGA+BO,aAAA,CA/BP,6RAoDO,aAAA,CApDP,wIA+DO,aAAA,CA/DP,mLA6EO,aAAA,CA7EP,6BAiFO,aAAA,CAjFP,eAoFO,UAAA,CApFP,sQA2GO,eAAA,CA3GP,sIAsHO,iBAAA,CCxKP,WACI,yBAAA,CACA,2CAAA,CACA,eAAA,CACA,iBAAA,CAEJ,WACI,wBAAA,CACA,2CAAA,CACA,eAAA,CACA,iBAAA,CAOJ,KACC,aAAA,CAEI,UACJ,UAAA,CACA,WAAA,CACA,wBAAA,CACC,gCAAA,CAEF,KACC,aAAA,CACA,aAAA,CACA,aAAA,CAED,EACC,6BAAA,CAAA,qBAAA,CAiBD,sZAiEC,QAAA,CACA,SAAA,CACA,QAAA,CACA,cAAA,CACA,uBAAA,CAED,8EAWC,aAAA,CAED,MAEC,eAAA,CAED,aAEC,WAAA,CAGD,oDAGC,UAAS,CACT,YAAA,CAED,MACC,wBAAA,CACA,gBAAA,CC9ID,QACC,KAAA,CACA,MAAA,CACA,cAAA,CACA,WAAA,CACA,UAAA,CACA,wBAAA,CACA,WAAA,CACA,iBAAA,CAGD,2FAIC,iBAAA,CAED,cACC,QAAA,CACA,UAAA,CAFD,gBAIE,gBAAA,CACA,aAAA,CACA,kCAAA,CAAA,0BAAA,CACA,sBACC,aAAA,CARH,uBAYE,6BAAA,CACE,sBAAA,CACA,uBAAA,CACF,WAAA,CACA,kBAAA,CAhBF,4BAmBE,gBAAA,CAGF,mBACC,UAAA,CACA,WAAA,CACA,OAAA,CAHD,0CAME,YAAA,CACA,UAAA,CACA,wBAAA,CACA,iBAAA,CACA,iBAAA,CACA,QAAA,CACA,+BAAA,CAAA,uBAAA,CAEA,8CACC,OAAA,CACA,sCAAW,CAAX,8BAAW,CAEZ,iDACC,OAAA,CACA,sCAAW,CAAX,8BAAW,CAEZ,iDACC,OAAA,CACA,sCAAW,CAAX,8BAAW,CAIb,yBACC,cAAA,CADD,gDAIE,wBAAA,CAMA,mDACC,OAAA,CACA,oDAAgC,CAAhC,4CAAgC,CAEjC,sDACC,SAAA,CAED,sDACC,OAAA,CACA,qDAAgC,CAAhC,6CAAgC,CAKpC,sBACC,UAAA,CACA,iBAAA,CACA,QAAA,CACA,WAAA,CACA,SAAA,CACA,oCAAA,CAAA,4BAAA,CR7BA,kBAAA,CAGA,4FAAY,CAAZ,4DAAY,CQ6Bb,2BACC,UAAA,CACA,WAAA,CACA,iBAAA,CACA,oBAAK,CACL,MAAA,CACA,iBAAA,CACA,gCAAA,CAAA,wBAAA,CAEA,WAAA,CAEA,gCACC,kBAAA,CADD,sDAIE,SAAA,CAIH,yBACC,cAAA,CACA,UAAA,CACA,kCAAA,CAED,iBACC,cAAA,CAEA,uEAEC,UAAA,CACA,6DAAA,CAAA,qDAAA,CAGA,4BAAA,CACA,oBAAA,CACA,aAAA,CACA,UAAA,CAED,uBACC,mCAAA,CACA,UAAA,CAGF,0BACC,YAAA,CACA,QAAA,CACA,wBAAA,CACA,WAAA,CACA,iBAAA,CACA,6DAAA,CAAA,qDAAA,CAGA,gCACC,cAAA,CACA,wBAAA,CAXF,6GAeE,iBAAA,CACA,OAAA,CACA,kCAAW,CAAX,0BAAW,CACX,UAAA,CAlBF,mDAsBE,eAAA,CACA,SAAA,CACA,cAAA,CACA,eAAA,CAzBF,0DA4BE,UAAA,CACA,gBAAA,CAGF,gBACC,WAAA,CACA,SAAA,CACA,UAAA,CACA,QAAA,CAJD,kBAOE,2BAAA,CACA,KAAA,CACA,MAAA,CACA,UAAA,CACA,WAAA,CAGF,sBACC,iBAAA,CACA,KAAA,CACA,MAAA,CACA,UAAA,CACA,WAAA,CACA,iBAAA,CACA,wBAAA,CACA,aAAA,CACA,qBAAA,CACA,cAAA,CACA,eAAA,CACA,cAAA,CACA,SAAA,CACA,uDAAA,CAAA,+CAAA,CAGA,4BACC,oBAAA,CACA,aAAA,CAGF,sBACC,UAAA,CADD,+DAKE,UAAA,CALF,+BAQE,SAAA,CARF,wCAWE,kBAAA,CACA,UAAA,CACA,cAAA,CACA,kCAAA,CACA,QAAA,CAfF,iFAkBG,aAAA,CAlBH,uDAsBG,cAAA,CACA,SAAA,CAvBH,qFA0BI,wBAAA,CACA,iBAAA,CACA,eAAA,CA5BJ,gGA+BI,WAAA,CACA,cAAA,CAED,4GACC,YAAA,CAnCJ,sGAsCI,yBAAA,CACA,wBAAA,CACA,aAAA,CACA,mBAAA,CACA,eAAA,CA1CJ,+IA6CK,4BAAA,CA7CL,yGAiDI,WAAA,CACA,wBAAA,CAlDJ,8FAqDI,qBAAA,CArDJ,4FAwDI,oBAAA,CACA,oBAAA,CACA,aAAA,CA1DJ,2FA6DI,aAAA,CA7DJ,8GAgEI,eAAA,CACA,iBAAA,CACA,aAAA,CAGD,wGR3NF,kBAAA,CAGA,0FAAY,CAAZ,2DAAY,CQwNV,2MAOE,aAAA,CAPF,6RASG,oBAAA,CA9EN,0DAmFI,eAAA,CACA,iBAAA,CApFJ,gDAyFE,WAAA,CACA,oBAAA,CAGF,gBACC,YAAA,CACA,UAAA,CACA,WAAA,CACA,OAAA,CACA,QAAA,CACA,SAAA,CACA,wBAAA,CACA,aAAA,CARD,sBAWE,kCAAA,CAAA,0BAAA,CAXF,sBAcE,gBAAA,CAdF,sBAiBE,gBAAA,CAGD,sBACC,aAAA,CACA,cAAA,CAOF,yBACC,wBAEE,YAAA,CAFF,oBAKE,cAAA,CAAA,CAIH,yBACC,wBAEE,cAAA,CAFF,oBAKE,YAAA,CAAA,CASH,yBACC,gBACC,aAAA,CAED,0BACC,aAAA,CACA,UAAA,CACA,WAAA,CAED,2BACC,UAAA,CACA,WAAA,CACA,SAAA,CAEA,0DAEE,WAAA,CACA,YAAA,CACA,cAAA,CACA,KAAA,CACA,MAAA,CACA,WAAA,CAEA,gEACC,cAAA,CAKJ,sBACC,yBAAA,CACA,eAAA,CACA,WAAA,CAED,gBACC,YAAA,CACA,uDAAA,CAED,mBACC,YAAA,CAED,0BACC,eAAA,CAAA,CAGF,0BACC,0BACC,UAAA,CACA,aAAA,CAED,2BACC,UAAA,CACA,aAAA,CAED,gBACC,UAAA,CACA,yDAAA,CAAA,CAGF,0BACC,0BACC,UAAA,CACA,aAAA,CAED,2BACC,UAAA,CACA,aAAA,CAED,gBACC,UAAA,CACA,yDAAA,CAAA,CCxbF,mEACC,iBAAA,CACA,mBAAA,CACA,yBAAA,CACA,yBAAA,CAEA,0EACC,YAAA,CAKA,2FAAa,eAAA,CACb,sGAAwB,YAAA,CACxB,2FACE,cAAA,CACA,UAAA,CACA,UAAA,CACA,kGACE,YAAA,CAKN,gDACE,SAAA,CAGF,0BACC,mEACC,oBAAA,CACA,gBAAA,CAAA,CAIF,yBACC,kDACC,sBAAA,CAED,uCACC,wBAAA,CAAA,CAIF,yBACC,mEACC,wBAAA,CACA,mBAAA,CACA,MAAA,CACA,eAAA,CAAA,CCrCF,iBACE,WAAA,CACA,iBAAA,CACA,WAAA,CACA,WAAA,CACA,UAAA,CACA,wBAAA,CACA,eAAA,CACA,iBAAA,CACA,aAAA,CACA,eAAA,CACA,6DAAA,CAAA,qDAAA,CAIA,uBACE,UAAA,CACA,wBAAA,CACA,cAAA,CAIF,+CACE,UAAS,CACT,iBAAA,CACA,aAAA,CACA,SAAA,CACA,UAAA,CACA,UAAA,CACA,UAAA,CACA,kBAAA,CAGF,wBACE,+BAAW,CAAX,uBAAW,CACX,0BAAA,CAAA,kBAAA,CAGF,6BACE,gCAAW,CAAX,wBAAW,CAIf,SACE,wBAAA,CACA,WAAA,CACA,eAAA,CACA,0CAAA,CAAA,kCAAA,CAEA,4BAAuB,wBAAA,CAA+B,UAAA,CACtD,kCAA6B,wBAAA,CAC7B,kCAA6B,wBAAA,CAA+B,wBAAA,CAAsC,iBAAA,CAElG,cACE,iBAAA,CACA,yCAAA,CAAA,iCAAA,CAGF,kBACE,4BAAA,CACA,aAAA,CAEA,8BACE,WAAA,CAGF,wBACE,aAAA,CACA,uBAAA,CACA,gBAAA,CAHF,kGAQI,aAAA,CACA,eAAA,CATJ,gCAYI,UAAA,CApBN,qBAyBI,iBAAA,CAzBJ,wBA2BM,iBAAA,CACA,oBAAA,CAMR,qBAEE,oBAAA,CACA,QAAA,CACA,eAAA,CAEA,0BACE,WAAA,CACA,gBAAA,CACA,6BAAA,CAGF,oCACE,iBAAA,CAIJ,0BACE,iBAAA,CACA,aAAA,CACA,SAAA,CACA,YAAA,CACA,WAAA,CACA,kBAAA,CACA,iBAAA,CACA,0BAAA,CAAA,kBAAA,CAEA,iCACE,WAAS,CACT,aAAA,CACA,aAAA,CACA,iBAAA,CAGF,sCACE,WAAS,CAGX,gCACE,kBAAA,CACA,uCACE,UAAA,CAOJ,oEAEE,oBAAA,CACA,aAAA,CACA,eAAA,CACA,iBAAA,CACA,gBAAA,CAEF,sBACE,UAAA,CAOJ,yBACE,SACE,WAAA,CACA,YAAA,CAAA,CAIJ,yBACE,iBACE,YAAA,CAEF,uBAEE,cAAA,CACA,WAAA,CACA,WAAA,CACA,sBAAA,CAAA,cAAA,CACA,uBAAA,CAAA,eAAA,CACA,QAAA,CACA,eAAA,CACA,aAAA,CACA,mBAAA,CAAA,CAGJ,0BACE,uBAEE,WAAA,CAAA,CAGJ,0BACE,uBAEE,WAAA,CAEF,qBACE,mBAAA,CAEA,2BACE,eAAA,CAAA,CC/MN,aACE,mBAAA,CACA,iBAAA,CAEA,mBACE,iDAAY,CACZ,qBAAA,CACA,iBAAA,CAHF,yBAMI,iBAAA,CACA,UAAA,CACA,iBAAA,CACA,eAAA,CACA,eAAA,CAVJ,wBAcI,aAAA,CACA,cAAA,CACA,iBAAA,CACA,UAAA,CACA,qCAAA,CACA,4BAAA,CACA,oEAAA,CAAA,4DAAA,CAGA,mBAAA,CACA,eAAA,CACA,oBAAA,CACA,iBAAA,CAEA,8BACE,sCAAA,CACA,iCAAA,CAKN,wBACE,iFAAY,CAAZ,oDAAY,CACZ,qBAAA,CACA,iBAAA,CAHF,8BAMI,iBAAA,CACA,UAAA,CACA,iBAAA,CAEA,eAAA,CAVJ,6BAcI,aAAA,CACA,cAAA,CACA,iBAAA,CACA,UAAA,CACA,qCAAA,CACA,4BAAA,CACA,oEAAA,CAAA,4DAAA,CAGA,mBAAA,CACA,eAAA,CACA,oBAAA,CACA,iBAAA,CAEA,mCACE,sCAAA,CACA,iCAAA,CAKN,yBACE,YAAA,CACA,iDAAA,CACA,2BAAA,CACA,qBAAA,CACA,UAAA,CACA,eAAA,CANF,6BASI,oBAAA,CATJ,+BAaI,iBAAA,CACA,mBAAA,CAdJ,kCAiBI,eAAA,CACA,kBAAA,CAlBJ,8BAqBI,oBAAA,CACA,iBAAA,CACA,UAAA,CACA,kBAAA,CACA,iBAAA,CACA,sBAAA,CACA,iBAAA,CCvFN,iBACC,wBAAA,CACA,UAAA,CAFD,YACC,wBAAA,CACA,UAAA,CAED,iBACC,wBAAA,CACA,UAAA,CAED,EACC,oBAAA,CACA,iCAAA,CAAA,yBAAA,CAEA,QACC,cAAA,CAIF,SACC,wBAAA,CACA,aAAA,CACA,UAAA,CAEA,4BAAuB,wBAAA,CAA+B,UAAA,CACtD,kCAA6B,wBAAA,CAC7B,kCAA6B,wBAAA,CAA+B,wBAAA,CAAsC,iBAAA,CAGnG,iBACC,aAAA,CACA,UAAA,CACA,iBAAA,CACA,YAAA,CAEA,iCACC,wBAAA,CACA,iCAAA,CACA,+BAAA,CACA,2BAAA,CAJD,oCAOE,eAAA,CAIF,gCZsBA,kBAAA,CAGA,4FAAY,CAAZ,4DAAY,CYrBb,iBACC,eAAA,CACA,UAAA,CACA,eAAA,CACA,aAAA,CAJD,6EASE,eAAA,CACA,aAAA,CAVF,yBAaE,aAAA,CACA,cAAA,CAdF,uBAiBE,aAAA,CACA,4BAAA,CACA,iBAAA,CACA,0BAAA,CAAA,kBAAA,CACA,6BACC,uBAAA,CACA,kBAAA,CAvBH,uCA2BE,eAAS,CACT,mBAAa,CACb,eAAA,CACA,eAAA,CACA,qBAAA,CACA,cAAA,CACA,gBAAA,CACA,WAAA,CACA,iCAAA,CAAA,yBAAA,CACA,aAAA,CApCF,qDAyCI,iBAAA,CACA,iEACC,UAAS,CACT,iBAAA,CACA,QAAA,CACA,UAAA,CACA,OAAA,CACA,QAAA,CACA,kBAAA,CACA,0BAAA,CACA,wDAAA,CACA,UAAA,CACA,0BAAA,CAAA,kBAAA,CAED,6EACC,SAAA,CACA,wDAAA,CAGF,mDACC,oBAAA,CACA,UAAA,CACA,gBAAA,CACA,gBAAA,CACA,kBAAA,CAEA,mFACC,eAAS,CACT,mBAAa,CACb,gBAAA,CACA,eAAA,CACA,qBAAA,CACA,cAAA,CACA,iBAAA,CA1EL,mBAiFE,oBAAA,CAjFF,kRAgGE,aAAA,CACA,iBAAA,CACA,kBAAA,CAlGF,uBAqGE,gBAAA,CACA,eAAA,CACA,wBAAA,CAvGF,wHA4GE,UAAA,CACA,aAAA,CA7GF,wNAiHG,aAAA,CACA,iBAAA,CACA,UAAA,CACA,iBAAA,CApHH,4qBA4HG,oBAAA,CACA,mBAAA,CACA,uBAAA,CAED,gMACC,YAAA,CAjIH,oBAqIE,eAAA,CZ5KD,8FAA+C,CAC/C,eAAA,CY6KC,iBAAA,CAvIF,oBA0IE,eAAA,CACA,eAAA,CACA,mBAAA,CA5IF,oBA+IE,eAAA,CACA,eAAA,CACA,iBAAA,CAjJF,oBAoJE,eAAA,CACA,eAAA,CACA,iBAAA,CACA,oBAAA,CAvJF,oBA0JE,iBAAA,CA1JF,oBA6JE,eAAA,CACA,iBAAA,CACA,iBAAA,CAGD,0DAEE,uBAAA,CApKH,mBA0KE,aAAA,CA1KF,wCA6KE,aAAA,CACA,oBAAA,CA9KF,8CAiLG,iBAAA,CACA,2BAAA,CACA,iBAAA,CACA,mBAAA,CApLH,4CAuLG,aAAA,CAvLH,uBA2LE,8BAAA,CA3LF,iDA+LE,uBAAA,CA/LF,0BAkME,2BAAA,CAlMF,6BAqME,uBAAA,CArMF,6BAwME,sBAAA,CAxMF,+BA2ME,eAAA,CA3MF,4FAiNE,UAAA,CACA,aAAA,CACA,eAAA,CACA,gBAAA,CApNF,oBAuNE,UAAA,CACA,UAAA,CACA,gBAAA,CACA,iBAAA,CACA,WAAA,CACA,aAAA,CACA,wBAAA,CA7NF,qBAgOE,cAAA,CACA,WAAA,CACA,iBAAA,CAlOF,wCAsOE,wBAAA,CACA,gBAAA,CACA,iBAAA,CACA,mBAAA,CAzOF,oCA4OE,wBAAA,CA5OF,0BAgPG,kCAAA,CAhPH,0BAmPG,oBAAA,CAnPH,8FA2PE,cAAA,CACA,iBAAA,CACA,iBAAA,CACA,kBAAA,CACA,qBAAA,CA/PF,khBAkQG,UAAA,CACA,aAAA,CAnQH,8IAuQG,eAAA,CAvQH,kIA0QG,UAAA,CA1QH,mDA+QE,iBAAA,CACA,aAAA,CACA,oBAAA,CACA,wBAAA,CAlRF,6DAoRG,aAAA,CACA,kBAAA,CACA,wBAAA,CAtRH,2DAyRG,kBAAA,CACA,oBAAA,CA1RH,qEA2RU,WAAA,CA3RV,2CAgSE,aAAA,CACA,oBAAA,CACA,wBAAA,CAlSF,qDAoSG,aAAA,CACA,kBAAA,CACA,wBAAA,CAtSH,mDAySG,kBAAA,CACA,oBAAA,CA1SH,6DA2SU,WAAA,CA3SV,sBAgTE,sDAAuB,CACvB,eAAA,CACA,aAAA,CACA,UAAA,CACA,aAAA,CACA,oBAAA,CAEA,gBAAA,CACA,YAAA,CACA,wBAAA,CACA,2BAAA,CACA,cAAA,CACA,iBAAA,CACA,gBAAA,CACA,oBAAA,CACA,kBAAA,CACA,iBAAA,CACA,qDAAA,CACA,sCAAA,CACA,yBAAA,CACA,aAAA,CACA,wBAAA,CArUF,qBAwUE,aAAA,CACA,iBAAA,CACA,aAAA,CACA,iBAAA,CACA,kBAAA,CACA,4BAAA,CACA,wBAAA,CACA,oBAAA,CACE,UAAA,CACF,2BAAA,CAjVF,0BAoVG,eAAA,CACA,mBAAA,CACA,iBAAA,CACA,WAAA,CACA,SAAA,CACA,eAAA,CACA,4BAAA,CAGD,wCAAuB,wBAAA,CAAmC,UAAA,CAC1D,8CAA6B,wBAAA,CAC7B,8CACC,wBAAA,CACA,wBAAA,CACA,4BAAe,CAKlB,eACC,mBAAA,CAAA,mBAAA,CAAA,YAAA,CACA,iBAAA,CACA,wBAAA,CAAA,qBAAA,CAAA,6BAAA,CACA,gBAAA,CAJD,iBAOE,mBAAA,CAAA,mBAAA,CAAA,YAAA,CACA,wBAAA,CAAA,qBAAA,CAAA,kBAAA,CACA,oBAAA,CACA,gBAAA,CACA,mBAAA,CACA,eAAA,CAEA,sBACC,iBAAA,CACA,MAAA,CACA,6BACC,eAAS,CACT,mBAAa,CACb,gBAAA,CACA,eAAA,CACA,qBAAA,CACA,cAAA,CACA,mBAAA,CAIF,sBACC,iBAAA,CACA,OAAA,CACA,4BACC,eAAS,CACT,mBAAa,CACb,gBAAA,CACA,eAAA,CACA,qBAAA,CACA,cAAA,CACA,kBAAA,CAUJ,UACC,iBAAA,CACA,oBAAA,CAFD,2BAKE,iBAAA,CACA,YAAA,CACA,UAAA,CACA,YAAA,CACA,WAAA,CATF,4BAaE,aAAA,CACA,WAAA,CACA,aAAA,CACA,aAAA,CACA,kBAAA,CACA,cAAA,CACA,iBAAA,CACA,gBAAA,CACA,wBAAA,CACA,iBAAA,CACA,4BAAA,CAAA,oBAAA,CACA,mCACC,mBAAS,CAEV,kCACC,aAAA,CAGF,iBACC,gBAAA,CACA,eAAA,CACA,eAAA,CAHD,kCAME,QAAA,CACA,kGAAkB,CAAlB,oEAAkB,CAClB,YAAA,CARF,mCAYE,eAAA,CACA,0CACC,mBAAS,CASb,SACC,iBAAA,CACA,oBAAA,CACA,UAAA,CACA,eAAA,CACA,aAAA,CAED,mBACC,iBAAA,CACA,KAAA,CACA,QAAA,CACA,kCAAW,CAAX,0BAAW,CACX,gBAAA,CACA,iBAAA,CAED,cACC,eAAA,CACA,eAAA,CACA,UAAA,CACA,iBAAA,CACA,iBAAA,CACA,eAAA,CACA,eAAA,CACA,QAAA,CACA,2CAAW,CAAX,mCAAW,CACX,+BAAA,CAAA,uBAAA,CACA,kBAAA,CACA,SAAA,CACA,2BAAA,CACA,aAAA,CACA,wBAAA,CAED,oBACC,UAAS,CACT,iBAAA,CACA,QAAA,CACA,YAAA,CACA,kCAAW,CAAX,0BAAW,CACX,4BAAA,CACA,kCAAA,CACA,mCAAA,CACA,iCAAA,CAED,kCACC,kBAAA,CAED,6BACC,SAAA,CACA,uCAAW,CAAX,+BAAW,CAMZ,aACC,UAAA,CACA,oBAAA,CACA,iBAAA,CACA,aAAA,CACA,kBAAA,CACA,6BAAA,CACA,aAAA,CACA,wBAAA,CACA,iBAAA,CACA,iBAAA,CAEA,mBACC,eAAS,CACT,mBAAa,CACb,iBAAA,CACA,OAAA,CACA,QAAA,CACA,qDAAgC,CAAhC,6CAAgC,CAChC,aAAA,CAOF,iCAEE,eAAA,CACA,WAAA,CAOF,oBACC,mBAAA,CAAA,mBAAA,CAAA,YAAA,CACA,oBAAA,CAAA,iBAAA,CAAA,wBAAA,CACA,iBAAA,CACA,wBAAA,CACA,kBAAA,CACA,kBAAA,CACA,cAAA,CACA,eAAA,CACA,yBAAA,CACA,wBAAA,CAAA,qBAAA,CAAA,kBAAA,CAVD,oCAaE,oBAAA,CACA,oBAAA,CACA,oBAAA,CACA,iFAAY,CAAZ,mDAAY,CACZ,2BAAe,CACf,+BAAA,CAAA,uBAAA,CAEA,0CACC,eAAS,CACT,iBAAA,CACA,mBAAa,CAGd,0CACC,oBAAA,CACA,SAAA,CA5BH,8BAiCE,WAAA,CACA,uBAAA,CACA,kBAAA,CACA,mCAAA,CAAA,2BAAA,CAEA,oCACC,SAAA,CAMH,eACC,YAAA,CACC,cAAA,CACA,YAAA,CACA,MAAA,CACA,KAAA,CACA,UAAA,CACA,WAAA,CACA,aAAA,CACD,WAAA,CACC,mFAAY,CAAZ,2CAAY,CAGd,eACC,YAAA,CACA,kBAAA,CACA,wBAAA,CACA,iBAAA,CACA,cAAA,CACA,QAAA,CACA,QAAA,CACA,kCAAW,CAAX,0BAAW,CACX,YAAA,CACA,UAAA,CACA,eAAA,CACA,+BAAA,CAAA,uBAAA,CAEA,oBACC,QAAA,CAfF,qBAmBE,UAAA,CACA,eAAA,CACA,iBAAA,CACA,wBAAA,CACA,wBAAA,CACA,aAAA,CACA,eAAA,CACA,cAAA,CACA,SAAA,CACA,uDAAA,CAAA,+CAAA,CAGA,2BACC,oBAAA,CAhCH,sBAqCE,WAAA,CACA,SAAA,CACA,4BACC,4BAAA,CAxCH,qBA6CE,aAAA,CACA,mBAAA,CACA,eAAA,CAIF,wBACC,oBAAA,CACA,uBAAA,CACA,eAAA,CACA,iBAAA,CACA,eAAA,CAEA,8BACC,wBAAA,CAIF,WACC,mBAAA,CAAA,mBAAA,CAAA,YAAA,CACA,wBAAA,CAAA,qBAAA,CAAA,6BAAA,CAFD,qBAKE,YAAA,CACA,mBAAA,CACA,iBAAA,CACA,mBAAA,CACA,UAAA,CACA,iBAAA,CACA,eAAA,CACA,iCAAA,CAAA,yBAAA,CAOF,yBACC,WACC,2BAAA,CAAA,4BAAA,CAAA,oBAAA,CAAA,gBAAA,CADD,qBAGE,UAAA,CACA,iBAAA,CAGF,wBACC,aAAA,CACA,kBAAA,CAAA,CAIF,4BACC,kBAAA,CACA,kCACC,kBAAA,CAOF,yBACC,SACC,kBAAA,CAED,iBACC,YAAA,CAED,mFAKE,gBAAA,CALF,qBAQE,qBAAA,CAAA,CAIH,0BACC,SACC,kBAAA,CAED,iBACC,cAAA,CAED,aACC,SAAA,CAAA,CAGF,0BACC,SACC,kBAAA,CAED,iBACC,kBAAA,CAED,iBACC,kBAAA,CAAA,CCryBF,UACC,aAAA,CACA,6BAAY,CACZ,UAAA,CACA,SAAA,Cb2DA,kBAAA,CAGA,0FAAY,CAAZ,2DAAY,Ca5DZ,WAAA,CACA,mBAAA,CAAA,mBAAA,CAAA,YAAA,CACA,2BAAA,CAAA,4BAAA,CAAA,yBAAA,CAAA,qBAAA,CACA,kBAAA,CAAA,cAAA,CACA,wBAAA,CAAA,qBAAA,CAAA,6BAAA,CAVD,0EAaE,mBAAA,CAAA,mBAAA,CAAA,YAAA,CACA,6BAAA,CAAA,4BAAA,CAAA,sBAAA,CAAA,kBAAA,CACA,UAAA,CACA,kBAAA,CAAA,cAAA,CACA,kBAAA,CAAA,UAAA,CAAA,MAAA,CAGD,gBACC,UAAA,CACA,oBAAA,CACA,eAAA,CACA,iBAAA,CAEA,qBACC,iBAAA,CACA,KAAA,CACA,MAAA,CACA,UAAA,CACA,WAAA,CACA,UAAA,CACA,gEAAA,CAAA,wDAAA,CAAA,gDAAA,CAAA,4EAAA,CAGA,SAAA,CACA,4BAAA,CACA,qBAAA,CACA,iCAAA,CACA,2BAAA,CACA,4BAAW,CAAX,oBAAW,CAEZ,2CAEE,SAAA,CACA,gCAAW,CAAX,wBAAW,CAHb,4CAME,oBAAA,CAIF,0BACC,iBAAA,CACA,SAAA,CACA,UAAA,CACA,oBAAA,CACA,iBAAA,CACA,iBAAA,CACA,WAAA,CAPD,wGAYE,aAAA,CACA,kCAAA,CAAA,0BAAA,CACA,oBAAA,CAdF,kCAiBE,aAAA,CAIF,kDACC,eAAA,CACA,oBAAA,CACA,UAAA,CACA,qBAAA,CAED,sBACC,cAAA,CACA,oCAAA,CACA,eAAA,CACA,iBAAA,CACA,aAAA,CACA,kBAAA,CACA,kCAAA,CAAA,0BAAA,CAED,4BACC,cAAA,CACA,aAAA,CACA,iBAAA,CACA,eAAA,CAED,qBACC,oBAAA,CACA,iBAAA,CACA,eAAA,CACA,kBAAA,CACA,gBAAA,CACA,iBAAA,CAEA,mCACC,eAAA,CAKF,mDAEE,4CAAA,CACA,wBAAA,CAHF,0DAME,UAAA,CANF,oDASE,aAAA,CATF,gLAcE,UAAA,CACA,6DAAA,CAAA,qDAAA,CAfF,0DAoBE,aAAA,CACA,qBAAA,CAGF,mDAEE,4CAAA,CACA,wBAAA,CAHF,0DAME,UAAA,CANF,oDASE,aAAA,CATF,gLAcE,UAAA,CACA,6DAAA,CAAA,qDAAA,CAfF,0DAoBE,aAAA,CACA,qBAAA,CAGF,qDAEE,8CAAA,CACA,wBAAA,CAHF,4DAME,UAAA,CANF,sDASE,aAAA,CATF,sLAcE,UAAA,CACA,6DAAA,CAAA,qDAAA,CAfF,4DAoBE,aAAA,CACA,qBAAA,CAGF,oDAEE,6CAAA,CACA,wBAAA,CAHF,2DAME,UAAA,CANF,qDASE,aAAA,CATF,mLAcE,UAAA,CACA,6DAAA,CAAA,qDAAA,CAfF,2DAoBE,aAAA,CACA,qBAAA,CAIF,+DAEE,6CAAA,CACA,wBAAA,CAHF,sEAME,UAAA,CANF,gEASE,aAAA,CATF,oNAcE,UAAA,CACA,6DAAA,CAAA,qDAAA,CAfF,sEAoBE,aAAA,CACA,qBAAA,CAIF,8DAEE,4CAAA,CACA,wBAAA,CAHF,qEAME,UAAA,CANF,+DASE,aAAA,CATF,iNAcE,UAAA,CACA,6DAAA,CAAA,qDAAA,CAfF,qEAoBE,aAAA,CACA,qBAAA,CAIF,+CAEE,wCAAA,CACA,wBAAA,CACA,SAAA,CAJF,sDAOE,UAAA,CAPF,gDAUE,UAAA,CAVF,oKAeE,UAAA,CACA,6DAAA,CAAA,qDAAA,CAGA,+LACC,YAAA,CApBH,sDAwBE,aAAA,CACA,qBAAA,CAIF,8BACC,UAAA,CACA,iFAAY,CAAZ,oDAAY,CACZ,mBAAA,CAAA,mBAAA,CAAA,YAAA,CACA,wBAAA,CAAA,qBAAA,CAAA,kBAAA,CAJD,wDAOE,mBAAA,CAPF,mDAWE,4CAAA,CACA,wBAAA,CACA,UAAA,CAbF,0DAgBE,UAAA,CACA,iBAAA,CAjBF,oDAoBE,UAAA,CACA,iBAAA,CACA,iBAAA,CAtBF,gLA2BE,UAAA,CACA,6DAAA,CAAA,qDAAA,CA5BF,0DAiCE,aAAA,CACA,qBAAA,CAlCF,oCAqCE,qBAAA,CACA,iBAAA,CACA,oBAAA,CACA,eAAA,CACA,aAAA,CACA,iBAAA,CACA,cAAA,CACA,eAAA,CACA,0BAAA,CAAA,kBAAA,CACA,+CAAA,CAAA,uCAAA,CAEA,0CACC,gCAAA,CAAA,wBAAA,CAWL,yBACC,gBACC,SAAA,CACA,kBAAA,CAAA,mBAAA,CAAA,WAAA,CAAA,CAGF,0BACC,0BACC,cAAA,CAED,4BACC,kBAAA,CAED,gBACC,SAAA,CACA,WAAA,CAEA,8BACC,SAAA,CAGD,mFAEC,SAAA,CAAA,CAIH,0BACC,0BACC,YAAA,CAED,4BACC,kBAAA,CAAA,CCzXF,YACC,eAAA,CACA,QAAA,CACA,WAAA,CACA,UAAA,CdkEA,kBAAA,CAGA,4FAAY,CAAZ,4DAAY,CclEb,eACC,gBAAA,CACA,SAAA,CACA,eAAA,CACA,eAAA,CACA,cAAA,CACA,gBAAA,CACA,aAAA,CAPD,kBAUE,aAAA,CACA,aAAA,CACA,kBAAA,CACA,gBAAA,CACA,WAAA,CACA,YAAA,CACA,iBAAA,CACA,iBAAA,CACA,cAAA,CACA,eAAA,CACA,iBAAA,CACA,iBAAA,CACA,wBAAA,CAeF,MACC,mBAAA,CAAA,mBAAA,CAAA,YAAA,CACA,wBAAA,CAAA,4BAAA,CAGD,YACC,kBAAA,CAGD,KACC,aAAA,CACA,aAAA,CACA,kBAAA,CACA,UAAA,CACA,iBAAA,CACA,iBAAA,CACA,iCAAA,CAAA,yBAAA,CAEA,UACC,kBAAA,CAAA,mBAAA,CAAA,WAAA,CACA,mBAAA,CAEA,iBACC,eAAS,CACT,mBAAa,CACb,kBAAA,CACA,cAAA,CAIF,aACC,kBAAA,CAAA,mBAAA,CAAA,WAAA,CACA,YAAA,CAEA,oBACC,eAAS,CACT,mBAAa,CACb,kBAAA,CACA,kBAAA,CAAA,mBAAA,CAAA,WAAA,CAIF,WACC,kBAAA,CAQF,yBACC,eACC,cAAA,CACA,gBAAA,CAAA,CAKF,0BACC,eACC,cAAA,CACA,gBAAA,CAAA,CCpHF,gBACE,gBAAA,CAEF,MACE,kBAAA,CAAA,mBAAA,CAAA,WAAA,CACA,yBAAA,CAEF,QACE,mBAAA,CAAA,mBAAA,CAAA,YAAA,CACA,kBAAA,CAAA,cAAA,CAEF,QACE,kBAAA,CAAA,mBAAA,CAAA,WAAA,CACA,UAAA,CACA,gBAAA,CACA,uBAAA,CACA,gBAAA,CACA,oBAAA,CACA,iBAAA,CACA,iBAAA,CACA,kCAAA,CACA,iDAAA,CAAA,yCAAA,CAEA,cACE,uBAAA,CAEF,kBACE,oBAAA,CACA,kBAAA,CAIJ,aACE,UAAA,CAEA,eACE,oBAAA,CACA,uBAAA,CAIJ,+BACE,YAAA,CAGF,uBACE,iBAAA,CACA,2BAAA,CAKF,mBACE,oBAAA,CACA,UAAA,CAEA,qBACE,oBAAA,CACA,uBAAA,CAIJ,mBACE,qBAAA,CADF,gCAKM,QAAA,CACA,gBAAA,CACA,aAAA,CACA,eAAA,CARN,gCAWM,qBAAA,CACA,QAAA,CACA,yBAAA,CACA,oBAAA,CACA,4BAAA,CACA,oCAAA,CACA,sCACC,uBAAA,CAED,0CACC,wBAAA,CACA,uBAAA,CAtBP,qCA4BI,SAAA,CA5BJ,yCA8BM,eAAA,CACA,2BAAA,CAEF,yDACE,YAAA,CASN,yBACE,wBACE,kBAAA,CAAA,mBAAA,CAAA,WAAA,CAAA,CCzGJ,aACE,iBAAA,CACA,mBAAA,CACA,mBAAA,CACA,uBAAA,CAAA,oBAAA,CAAA,sBAAA,CACA,wBAAA,CAAA,qBAAA,CAAA,kBAAA,CACA,kBAAA,CACA,iBAAA,CAPF,gBAUI,SAAA,CACA,iBAAA,CAGF,0BACE,aAAS,CACT,iBAAA,CACA,oBAAA,CACA,iBAAA,CACA,aAAA,CACA,gBAAA,CAIA,oBACE,eAAA,CACA,eAAA,CACA,aAAA,CACA,mBAAA,CAJF,gCAOI,iBAAA,CACA,iBAAA,CACA,UAAA,CAMJ,gCAAmB,mBAAA,CACnB,iCAAoB,mBAAA,CACpB,iCAAoB,mBAAA,CAzCxB,0BA6CI,iBAAA,CACA,oBAAA,CACA,SAAA,CACA,WAAA,CACA,SAAA,CACA,sDAAA,CAAA,8CAAA,CAlDJ,uCAqDM,gBAAA,CACA,mBAAA,CAIJ,gCACiB,SAAA,CA3DnB,wBAgEI,oBAAA,CACA,4BAAA,CAjEJ,4GAkEkB,aAAA,CAlElB,qDAoEM,aAAA,CACA,cAAA,CACA,iBAAA,CAtEN,+BAwEa,aAAA,CAxEb,0BA0EM,aAAA,CA1EN,qCA4EQ,sEAAA,CAEF,gCACE,UAAA,CADF,2CAGI,qDAAA,CAjFV,qCAqFmB,aAAA,CArFnB,yDAuFM,aAAA,CACA,kBAAA,CAON,gBACE,mBAAA,CAAA,mBAAA,CAAA,YAAA,CACA,6BAAA,CAAA,4BAAA,CAAA,sBAAA,CAAA,kBAAA,CACA,uBAAA,CAAA,oBAAA,CAAA,sBAAA,CAHF,iCAMI,kBAAA,CAAA,kBAAA,CAAA,cAAA,CACA,0BAAA,CACA,aAAA,CAEA,6CACE,kBAAA,CAAA,kBAAA,CAAA,cAAA,CACA,aAAA,CAFF,0DAII,iBAAA,CAAA,cAAA,CAAA,SAAA,CAdR,mBAoBI,6CAAA,CACA,qBAAA,CArBJ,6BAyBI,SAAA,CACA,gBAAA,CACA,eAAA,CA3BJ,gCA6BM,SAAA,CACA,QAAA,CACA,mBAAA,CACA,8BAAA,CAhCN,sBAqCI,aAAA,CACA,gBAAA,CACA,aAAA,CACA,iBAAA,CAEA,4BACE,wBAAS,CACT,kBAAA,CACA,gBAAA,CACA,UAAA,CA9CN,0BAmDI,oBAAA,CACA,aAAA,CACA,YAAA,CACA,gCAAA,CACA,kBAAA,CACA,uBAAA,CACA,iBAAA,CACA,cAAA,CACA,uCAAA,CACA,wBAAA,CAAA,qBAAA,CAAA,oBAAA,CAAA,gBAAA,CA5DJ,qCAgEI,oBAAA,CACA,SAAA,CACA,kBAAA,CACA,SAAA,CACA,cAAA,CAEA,qDACE,UAAS,CACT,aAAA,CACA,iBAAA,CACA,YAAA,CACA,WAAA,CACA,iBAAA,CACA,kBAAA,CACA,UAAA,CACA,WAAA,CACA,SAAA,CACA,0BAAW,CAAX,kBAAW,CACX,0BAAA,CAAA,kBAAA,CAGF,6DACE,SAAA,CACA,0BAAW,CAAX,kBAAW,CASjB,0BACE,iCAEI,aAAA,CACe,4FACb,cAAA,CAAA,CAMR,yBACE,iCAEI,cAAA,CAIJ,0BAEI,SAAA,CACA,4BAAA,CACA,aAAA,CACA,iBAAA,CALJ,uCAMmB,QAAA,CANnB,gCAOY,YAAA,CAAA,CT7Cd,yBACC,KACC,gBAAA,CAAA,CU7KF,+BAEI,mBAAA,CAAA,mBAAA,CAAA,YAAA,CACA,kBAAA,CAAA,cAAA,CAHJ,iCAOI,iBAAA,CACA,sCAAS,sBAAA,CACT,uCAAU,yBAAA,CACV,yCAAY,sBAAA,CAWZ,yCAAY,sBAAA,CCnBhB,iCAEY,yBAAA,CAAiC,cAAA,CAAwB,cAAA,CAAe,qBAAA,CAAsB,oBAAA,CAF1G,mCAGa,0BAAA,CAAgC,cAAA,CAAuB,cAAA,CAAe,qBAAA,CAAsB,oBAAA,CAHzG,kCAIY,YAAA,CAGZ,kBACE,oBAAA,CACA,qBAAA,CACA,uBAAA,CACA,WAAA,CACA,YAAA,CACA,wBAAA,CACA,+BAAA,CACA,iBAAA,CAEF,oBACE,oBAAA,CACA,qBAAA,CACA,uBAAA,CACA,WAAA,CACA,YAAA,CACA,wBAAA,CACA,gCAAA,CACA,iBAAA,CAEF,mBACE,oBAAA,CACA,uBAAA,CACA,YAAA,CACA,aAAA,CACA,iBAAA,CACA,kBAAA,CCtBF,2JASM,aAAA,CATN,mDAYM,UAAA,CAZN,uDAeM,eAAA,CAfN,iDAkBM,kBAAA,CACA,uDACE,kBAAA,CAGJ,oFAEC,uBAAA,CAzBL,kEnBiEC,kBAAA,CAGA,4FAAY,CAAZ,4DAAY,CmBpEb,gLA0CM,aAAA,CACA,eAAA,CA3CN,0DA8CM,UAAA,CAIF,gDACE,UAAA,CAnDN,oDA2DI,wBAAA,CACA,0DACE,wBAAA,CA7DN,gDnBiEC,kBAAA,CAGA,4FAAY,CAAZ,4DAAY,CmBpEb,4CAsEI,kBAAA,CCtEJ,iKASM,aAAA,CATN,qDAYM,UAAA,CAZN,yDAeM,eAAA,CAfN,mDAkBM,kBAAA,CACA,yDACE,kBAAA,CAGJ,sFAEC,uBAAA,CAzBL,oEpBiEC,kBAAA,CAGA,4FAAY,CAAZ,4DAAY,CoBpEb,sLA0CM,aAAA,CACA,eAAA,CA3CN,4DA8CM,UAAA,CAIF,kDACE,UAAA,CAnDN,sDA2DI,wBAAA,CACA,4DACE,wBAAA,CA7DN,kDpBiEC,kBAAA,CAGA,4FAAY,CAAZ,4DAAY,CoBpEb,8CAsEI,kBAAA,CCtEJ,8JASM,aAAA,CATN,oDAYM,UAAA,CAZN,wDAeM,eAAA,CAfN,kDAkBM,kBAAA,CACA,wDACE,kBAAA,CAGJ,qFAEC,uBAAA,CAzBL,mErBiEC,kBAAA,CAGA,4FAAY,CAAZ,4DAAY,CqBpEb,mLA0CM,aAAA,CACA,eAAA,CA3CN,2DA8CM,UAAA,CAIF,iDACE,UAAA,CAnDN,qDA2DI,wBAAA,CACA,2DACE,wBAAA,CA7DN,iDrBiEC,kBAAA,CAGA,4FAAY,CAAZ,4DAAY,CqBpEb,6CAsEI,kBAAA,CCtEJ,+LASM,aAAA,CATN,+DAYM,UAAA,CAZN,mEAeM,eAAA,CAfN,6DAkBM,kBAAA,CACA,mEACE,kBAAA,CAGJ,gGAEC,uBAAA,CAzBL,8EtBiEC,kBAAA,CAGA,4FAAY,CAAZ,4DAAY,CsBpEb,oNA0CM,aAAA,CACA,eAAA,CA3CN,sEA8CM,UAAA,CAIF,4DACE,UAAA,CAnDN,gEA2DI,wBAAA,CACA,sEACE,wBAAA,CA7DN,4DtBiEC,kBAAA,CAGA,4FAAY,CAAZ,4DAAY,CsBpEb,wDAsEI,kBAAA,CCtEJ,+IASM,aAAA,CATN,+CAYM,UAAA,CAZN,mDAeM,eAAA,CAEF,gFAEC,uBAAA,CAnBL,8DvBiEC,kBAAA,CAGA,4FAAY,CAAZ,4DAAY,CuBpEb,oKAoCM,aAAA,CACA,eAAA,CArCN,sDAwCM,UAAA,CAIF,4CACE,UAAA,CA7CN,gDAqDI,wBAAA,CACA,sDACE,wBAAA,CAvDN,4CvBiEC,kBAAA,CAGA,4FAAY,CAAZ,4DAAY,CuBpEb,wCAgEI,kBAAA","file":"docs-default.css","sourcesContent":["//\n// UI Variables\n// --------------------------------------------------\n\n@radius: 3px;\n\n//\n// Typography Variables\n// --------------------------------------------------\n\n@type-scale:\t\t1.2;\n\n@heading1Size:\t\t2.2em;\n@heading2Size:\t\t1.9em;\n@heading3Size:\t\t1.5em;\n@heading4Size:\t\t1.3em;\n@paragraphSize:\t\t1.0em;\n@smallTextSize:\t\t0.9em;\n@tinyTextSize:\t\t0.8em;\n\n@margin-bottom-base: 1em;\n@indented-element-size: 2rem;\n.klavika-font {\n\tfont-family: 'Klavika-Light','Helvetica Neue', 'Helvetica', Helvetica, Arial, Tahoma, Verdana, sans-serif;\n\tfont-weight: 200;\n}\n@thick-left-border: 6px;\n@scrollbar-width: 1rem;\n@border-small-screen: 1px;\n@border-large-screen: 2px;\n\n//\n// Size Variables\n// --------------------------------------------------\n@nav-height: \t\t\t\t4rem;\n@sidebar--toggle-height: \t3rem;\n@nav-gap:\t\t\t\t\t0.5rem;\n@nav-component-height:\t\t3rem;\n@search-offset:\t\t\t\t(@nav-height - @nav-component-height)/2;\n\n@sidebar-small-width:\t\t18rem;\n@sidebar-large-width:\t\t23rem;\n@sidebar-huge-width:\t\t28rem;\n\n@scrollbar-width:\t\t\t16px;\n\n@product-dropdown-small-width:\t17rem;\n@product-dropdown-large-width:\t17.5rem;\n@product-dropdown-huge-width:\t17.5rem;\n\n@search-default-width:\t\t40%;\n@search-small-width:\t\t~\"calc( 100% - \"@sidebar-small-width~\" - \"@nav-gap~\" - \"@nav-gap~\" - \"@nav-height~\" - \"@product-dropdown-small-width~\")\";\n@search-large-width:\t\t~\"calc( 100% - \"@sidebar-large-width~\" - \"@nav-gap~\" - \"@nav-gap~\" - \"@nav-height~\" - \"@product-dropdown-large-width~\")\";\n@search-huge-width:\t\t\t~\"calc( 100% - \"@sidebar-huge-width~\" - \"@nav-gap~\" - \"@nav-gap~\" - \"@nav-height~\" - \"@product-dropdown-huge-width~\")\";\n\n@search-small-position:\t\t@sidebar-small-width + @product-dropdown-small-width + @nav-gap;\n@search-large-position:\t\t@sidebar-large-width + @product-dropdown-large-width + @nav-gap;\n@search-huge-position:\t\t@sidebar-huge-width + @product-dropdown-huge-width + @nav-gap;\n\n\n//\n// Z Index Variables\n// --------------------------------------------------\n@z-sidebar:\t\t\t\t\t250;\n@z-sidebar--mask:\t\t\t200;\n@z-nav:\t\t\t\t\t\t150;\n@z-sidebar-desktop:\t\t\t100;\n@z-sidebar--toggle:\t\t\t100;\n\n//\n// Gradient Mixin\n// --------------------------------------------------\n.gradient-h(@color1,@color2) {\n\tbackground: @color1;\n\tbackground: -moz-linear-gradient(left, @color1 0%, @color2 100%);\n\tbackground: -webkit-linear-gradient(left, @color1 0%,@color2 100%);\n\tbackground: linear-gradient(to right, @color1 0%,@color2 100%);\n\tfilter: progid:DXImageTransform.Microsoft.gradient( startColorstr='@color1', endColorstr='@color2',GradientType=1 );\n}\n.gradient-v(@color1,@color2) {\n\tbackground: @color1;\n\tbackground: -moz-linear-gradient(top, @color1 0%, @color2 100%);\n\tbackground: -webkit-linear-gradient(top, @color1 0%,@color2 100%);\n\tbackground: linear-gradient(to bottom, @color1 0%,@color2 100%);\n\tfilter: progid:DXImageTransform.Microsoft.gradient( startColorstr='@color1', endColorstr='@color2',GradientType=0 );\n}\n\n//\n// Breakpoints\n// --------------------------------------------------\n@breakpoint-small:\t\t\t900px;\n@breakpoint-large:\t\t\t1200px;\n@breakpoint-huge:\t\t\t1900px;\n","@font-face {\n\tfont-family: 'icomoon';\n\tsrc:url('../fonts/icomoon.eot?c3omf0');\n\tsrc:url('../fonts/icomoon.eot?c3omf0#iefix') format('embedded-opentype'),\n\t\turl('../fonts/icomoon.woff2?c3omf0') format('woff2'),\n\t\turl('../fonts/icomoon.ttf?c3omf0') format('truetype'),\n\t\turl('../fonts/icomoon.woff?c3omf0') format('woff'),\n\t\turl('../fonts/icomoon.svg?c3omf0#icomoon') format('svg');\n\tfont-weight: normal;\n\tfont-style: normal;\n}\n\n.icon {\n\tfont-family: 'icomoon';\n\tspeak: none;\n\tfont-style: normal;\n\tfont-weight: normal;\n\tfont-variant: normal;\n\ttext-transform: none;\n\tline-height: 1;\n\n\t/* Better Font Rendering =========== */\n\t-webkit-font-smoothing: antialiased;\n\t-moz-osx-font-smoothing: grayscale;\n}\n\n.icon.sun2:before {\n content: \"\\eae2\";\n}\n.icon.moon:before {\n content: \"\\eae3\";\n}\n.icon.logotype:before {\n content: \"\\e800\";\n}\n.icon.logo:before {\n content: \"\\e801\";\n}\n.icon.arrow-down:before {\n content: \"\\e802\";\n}\n.icon.arrow-up:before {\n content: \"\\e803\";\n}\n.icon.arrow-left:before {\n content: \"\\e804\";\n}\n.icon.arrow-right:before {\n content: \"\\e805\";\n}\n.icon.health:before {\n content: \"\\e806\";\n}\n.icon.lightning:before {\n content: \"\\e807\";\n}\n.icon.matrix:before {\n content: \"\\e808\";\n}\n.icon.cluster:before {\n content: \"\\e809\";\n}\n.icon.data:before {\n content: \"\\e80a\";\n}\n.icon.google:before {\n content: \"\\e81a\";\n}\n.icon.eyeball:before {\n content: \"\\e901\";\n}\n.icon.infinite:before {\n content: \"\\e902\";\n}\n.icon.dashboard:before {\n content: \"\\eade\";\n}\n.icon.analytics:before {\n content: \"\\eadf\";\n}\n.icon.cloud-stack:before {\n content: \"\\eae0\";\n}\n.icon.iot:before {\n content: \"\\eae1\";\n}\n.icon.home:before {\n content: \"\\e904\";\n}\n.icon.home2:before {\n content: \"\\e905\";\n}\n.icon.home3:before {\n content: \"\\e906\";\n}\n.icon.office:before {\n content: \"\\e907\";\n}\n.icon.newspaper:before {\n content: \"\\e908\";\n}\n.icon.pencil:before {\n content: \"\\e909\";\n}\n.icon.pencil2:before {\n content: \"\\e90a\";\n}\n.icon.quill:before {\n content: \"\\e90b\";\n}\n.icon.pen:before {\n content: \"\\e90c\";\n}\n.icon.blog:before {\n content: \"\\e90d\";\n}\n.icon.eyedropper:before {\n content: \"\\e90e\";\n}\n.icon.droplet:before {\n content: \"\\e90f\";\n}\n.icon.paint-format:before {\n content: \"\\e910\";\n}\n.icon.image:before {\n content: \"\\e911\";\n}\n.icon.images:before {\n content: \"\\e912\";\n}\n.icon.camera:before {\n content: \"\\e913\";\n}\n.icon.headphones:before {\n content: \"\\e914\";\n}\n.icon.music:before {\n content: \"\\e915\";\n}\n.icon.play:before {\n content: \"\\e916\";\n}\n.icon.film:before {\n content: \"\\e917\";\n}\n.icon.video-camera:before {\n content: \"\\e918\";\n}\n.icon.dice:before {\n content: \"\\e919\";\n}\n.icon.pacman:before {\n content: \"\\e91a\";\n}\n.icon.spades:before {\n content: \"\\e91b\";\n}\n.icon.clubs:before {\n content: \"\\e91c\";\n}\n.icon.diamonds:before {\n content: \"\\e91d\";\n}\n.icon.bullhorn:before {\n content: \"\\e91e\";\n}\n.icon.connection:before {\n content: \"\\e91f\";\n}\n.icon.podcast:before {\n content: \"\\e920\";\n}\n.icon.feed:before {\n content: \"\\e921\";\n}\n.icon.mic:before {\n content: \"\\e922\";\n}\n.icon.book:before {\n content: \"\\e923\";\n}\n.icon.books:before {\n content: \"\\e924\";\n}\n.icon.library:before {\n content: \"\\e925\";\n}\n.icon.file-text:before {\n content: \"\\e926\";\n}\n.icon.profile:before {\n content: \"\\e927\";\n}\n.icon.file-empty:before {\n content: \"\\e928\";\n}\n.icon.files-empty:before {\n content: \"\\e929\";\n}\n.icon.file-text2:before {\n content: \"\\e92a\";\n}\n.icon.file-picture:before {\n content: \"\\e92b\";\n}\n.icon.file-music:before {\n content: \"\\e92c\";\n}\n.icon.file-play:before {\n content: \"\\e92d\";\n}\n.icon.file-video:before {\n content: \"\\e92e\";\n}\n.icon.file-zip:before {\n content: \"\\e92f\";\n}\n.icon.copy:before {\n content: \"\\e930\";\n}\n.icon.paste:before {\n content: \"\\e931\";\n}\n.icon.stack:before {\n content: \"\\e932\";\n}\n.icon.folder:before {\n content: \"\\e933\";\n}\n.icon.folder-open:before {\n content: \"\\e934\";\n}\n.icon.folder-plus:before {\n content: \"\\e935\";\n}\n.icon.folder-minus:before {\n content: \"\\e936\";\n}\n.icon.folder-download:before {\n content: \"\\e937\";\n}\n.icon.folder-upload:before {\n content: \"\\e938\";\n}\n.icon.price-tag:before {\n content: \"\\e939\";\n}\n.icon.price-tags:before {\n content: \"\\e93a\";\n}\n.icon.barcode:before {\n content: \"\\e93b\";\n}\n.icon.qrcode:before {\n content: \"\\e93c\";\n}\n.icon.ticket:before {\n content: \"\\e93d\";\n}\n.icon.cart:before {\n content: \"\\e93e\";\n}\n.icon.coin-dollar:before {\n content: \"\\e93f\";\n}\n.icon.coin-euro:before {\n content: \"\\e940\";\n}\n.icon.coin-pound:before {\n content: \"\\e941\";\n}\n.icon.coin-yen:before {\n content: \"\\e942\";\n}\n.icon.credit-card:before {\n content: \"\\e943\";\n}\n.icon.calculator:before {\n content: \"\\e944\";\n}\n.icon.lifebuoy:before {\n content: \"\\e945\";\n}\n.icon.phone:before {\n content: \"\\e946\";\n}\n.icon.phone-hang-up:before {\n content: \"\\e947\";\n}\n.icon.address-book:before {\n content: \"\\e948\";\n}\n.icon.envelop:before {\n content: \"\\e949\";\n}\n.icon.pushpin:before {\n content: \"\\e94a\";\n}\n.icon.location:before {\n content: \"\\e94b\";\n}\n.icon.location2:before {\n content: \"\\e94c\";\n}\n.icon.compass:before {\n content: \"\\e94d\";\n}\n.icon.compass2:before {\n content: \"\\e94e\";\n}\n.icon.map:before {\n content: \"\\e94f\";\n}\n.icon.map2:before {\n content: \"\\e950\";\n}\n.icon.history:before {\n content: \"\\e951\";\n}\n.icon.clock:before {\n content: \"\\e952\";\n}\n.icon.clock2:before {\n content: \"\\e953\";\n}\n.icon.alarm:before {\n content: \"\\e954\";\n}\n.icon.bell:before {\n content: \"\\e955\";\n}\n.icon.stopwatch:before {\n content: \"\\e956\";\n}\n.icon.calendar:before {\n content: \"\\e957\";\n}\n.icon.printer:before {\n content: \"\\e958\";\n}\n.icon.keyboard:before {\n content: \"\\e959\";\n}\n.icon.display:before {\n content: \"\\e95a\";\n}\n.icon.laptop:before {\n content: \"\\e95b\";\n}\n.icon.mobile:before {\n content: \"\\e95c\";\n}\n.icon.mobile2:before {\n content: \"\\e95d\";\n}\n.icon.tablet:before {\n content: \"\\e95e\";\n}\n.icon.tv:before {\n content: \"\\e95f\";\n}\n.icon.drawer:before {\n content: \"\\e960\";\n}\n.icon.drawer2:before {\n content: \"\\e961\";\n}\n.icon.box-add:before {\n content: \"\\e962\";\n}\n.icon.box-remove:before {\n content: \"\\e963\";\n}\n.icon.download:before {\n content: \"\\e964\";\n}\n.icon.upload:before {\n content: \"\\e965\";\n}\n.icon.floppy-disk:before {\n content: \"\\e966\";\n}\n.icon.drive:before {\n content: \"\\e967\";\n}\n.icon.database:before {\n content: \"\\e968\";\n}\n.icon.undo:before {\n content: \"\\e969\";\n}\n.icon.redo:before {\n content: \"\\e96a\";\n}\n.icon.undo2:before {\n content: \"\\e96b\";\n}\n.icon.redo2:before {\n content: \"\\e96c\";\n}\n.icon.forward:before {\n content: \"\\e96d\";\n}\n.icon.reply:before {\n content: \"\\e96e\";\n}\n.icon.bubble:before {\n content: \"\\e96f\";\n}\n.icon.bubbles:before {\n content: \"\\e970\";\n}\n.icon.bubbles2:before {\n content: \"\\e971\";\n}\n.icon.bubble2:before {\n content: \"\\e972\";\n}\n.icon.bubbles3:before {\n content: \"\\e973\";\n}\n.icon.bubbles4:before {\n content: \"\\e974\";\n}\n.icon.user:before {\n content: \"\\e975\";\n}\n.icon.users:before {\n content: \"\\e976\";\n}\n.icon.user-plus:before {\n content: \"\\e977\";\n}\n.icon.user-minus:before {\n content: \"\\e978\";\n}\n.icon.user-check:before {\n content: \"\\e979\";\n}\n.icon.user-tie:before {\n content: \"\\e97a\";\n}\n.icon.quotes-left:before {\n content: \"\\e97b\";\n}\n.icon.quotes-right:before {\n content: \"\\e97c\";\n}\n.icon.hour-glass:before {\n content: \"\\e97d\";\n}\n.icon.spinner:before {\n content: \"\\e97e\";\n}\n.icon.spinner2:before {\n content: \"\\e97f\";\n}\n.icon.spinner3:before {\n content: \"\\e980\";\n}\n.icon.spinner4:before {\n content: \"\\e981\";\n}\n.icon.spinner5:before {\n content: \"\\e982\";\n}\n.icon.spinner6:before {\n content: \"\\e983\";\n}\n.icon.spinner7:before {\n content: \"\\e984\";\n}\n.icon.spinner8:before {\n content: \"\\e985\";\n}\n.icon.spinner9:before {\n content: \"\\e986\";\n}\n.icon.spinner10:before {\n content: \"\\e987\";\n}\n.icon.spinner11:before {\n content: \"\\e988\";\n}\n.icon.binoculars:before {\n content: \"\\e989\";\n}\n.icon.search:before {\n content: \"\\e98a\";\n}\n.icon.zoom-in:before {\n content: \"\\e98b\";\n}\n.icon.zoom-out:before {\n content: \"\\e98c\";\n}\n.icon.enlarge:before {\n content: \"\\e98d\";\n}\n.icon.shrink:before {\n content: \"\\e98e\";\n}\n.icon.enlarge2:before {\n content: \"\\e98f\";\n}\n.icon.shrink2:before {\n content: \"\\e990\";\n}\n.icon.key:before {\n content: \"\\e991\";\n}\n.icon.key2:before {\n content: \"\\e992\";\n}\n.icon.lock:before {\n content: \"\\e993\";\n}\n.icon.unlocked:before {\n content: \"\\e994\";\n}\n.icon.wrench:before {\n content: \"\\e995\";\n}\n.icon.equalizer:before {\n content: \"\\e996\";\n}\n.icon.equalizer2:before {\n content: \"\\e997\";\n}\n.icon.cog:before {\n content: \"\\e900\";\n}\n.icon.cogs:before {\n content: \"\\e998\";\n}\n.icon.hammer:before {\n content: \"\\e999\";\n}\n.icon.magic-wand:before {\n content: \"\\e99a\";\n}\n.icon.aid-kit:before {\n content: \"\\e99b\";\n}\n.icon.bug:before {\n content: \"\\e99c\";\n}\n.icon.pie-chart:before {\n content: \"\\e99d\";\n}\n.icon.stats-dots:before {\n content: \"\\e99e\";\n}\n.icon.stats-bars:before {\n content: \"\\e99f\";\n}\n.icon.stats-bars2:before {\n content: \"\\e9a0\";\n}\n.icon.trophy:before {\n content: \"\\e9a1\";\n}\n.icon.gift:before {\n content: \"\\e9a2\";\n}\n.icon.glass:before {\n content: \"\\e9a3\";\n}\n.icon.glass2:before {\n content: \"\\e9a4\";\n}\n.icon.mug:before {\n content: \"\\e9a5\";\n}\n.icon.spoon-knife:before {\n content: \"\\e9a6\";\n}\n.icon.leaf:before {\n content: \"\\e9a7\";\n}\n.icon.rocket:before {\n content: \"\\e9a8\";\n}\n.icon.meter:before {\n content: \"\\e9a9\";\n}\n.icon.meter2:before {\n content: \"\\e9aa\";\n}\n.icon.hammer2:before {\n content: \"\\e9ab\";\n}\n.icon.fire:before {\n content: \"\\e9ac\";\n}\n.icon.lab:before {\n content: \"\\e9ad\";\n}\n.icon.magnet:before {\n content: \"\\e9ae\";\n}\n.icon.bin:before {\n content: \"\\e9af\";\n}\n.icon.bin2:before {\n content: \"\\e9b0\";\n}\n.icon.briefcase:before {\n content: \"\\e9b1\";\n}\n.icon.airplane:before {\n content: \"\\e9b2\";\n}\n.icon.truck:before {\n content: \"\\e9b3\";\n}\n.icon.road:before {\n content: \"\\e9b4\";\n}\n.icon.accessibility:before {\n content: \"\\e9b5\";\n}\n.icon.target:before {\n content: \"\\e9b6\";\n}\n.icon.shield:before {\n content: \"\\e9b7\";\n}\n.icon.power:before {\n content: \"\\e9b8\";\n}\n.icon.switch:before {\n content: \"\\e9b9\";\n}\n.icon.power-cord:before {\n content: \"\\e9ba\";\n}\n.icon.clipboard:before {\n content: \"\\e9bb\";\n}\n.icon.list-numbered:before {\n content: \"\\e9bc\";\n}\n.icon.list:before {\n content: \"\\e9bd\";\n}\n.icon.list2:before {\n content: \"\\e9be\";\n}\n.icon.tree:before {\n content: \"\\e9bf\";\n}\n.icon.menu:before {\n content: \"\\e9c0\";\n}\n.icon.menu2:before {\n content: \"\\e9c1\";\n}\n.icon.menu3:before {\n content: \"\\e9c2\";\n}\n.icon.menu4:before {\n content: \"\\e9c3\";\n}\n.icon.cloud:before {\n content: \"\\e9c4\";\n}\n.icon.cloud-download:before {\n content: \"\\e9c5\";\n}\n.icon.cloud-upload:before {\n content: \"\\e9c6\";\n}\n.icon.cloud-check:before {\n content: \"\\e9c7\";\n}\n.icon.download2:before {\n content: \"\\e9c8\";\n}\n.icon.upload2:before {\n content: \"\\e9c9\";\n}\n.icon.download3:before {\n content: \"\\e9ca\";\n}\n.icon.upload3:before {\n content: \"\\e9cb\";\n}\n.icon.sphere:before {\n content: \"\\e9cc\";\n}\n.icon.earth:before {\n content: \"\\e9cd\";\n}\n.icon.link:before {\n content: \"\\e9ce\";\n}\n.icon.flag:before {\n content: \"\\e9cf\";\n}\n.icon.attachment:before {\n content: \"\\e9d0\";\n}\n.icon.eye:before {\n content: \"\\e9d1\";\n}\n.icon.eye-plus:before {\n content: \"\\e9d2\";\n}\n.icon.eye-minus:before {\n content: \"\\e9d3\";\n}\n.icon.eye-blocked:before {\n content: \"\\e9d4\";\n}\n.icon.bookmark:before {\n content: \"\\e9d5\";\n}\n.icon.bookmarks:before {\n content: \"\\e9d6\";\n}\n.icon.sun:before {\n content: \"\\e9d7\";\n}\n.icon.contrast:before {\n content: \"\\e9d8\";\n}\n.icon.brightness-contrast:before {\n content: \"\\e9d9\";\n}\n.icon.star-empty:before {\n content: \"\\e9da\";\n}\n.icon.star-half:before {\n content: \"\\e9db\";\n}\n.icon.star-full:before {\n content: \"\\e9dc\";\n}\n.icon.heart:before {\n content: \"\\e9dd\";\n}\n.icon.heart-broken:before {\n content: \"\\e9de\";\n}\n.icon.man:before {\n content: \"\\e9df\";\n}\n.icon.woman:before {\n content: \"\\e9e0\";\n}\n.icon.man-woman:before {\n content: \"\\e9e1\";\n}\n.icon.happy:before {\n content: \"\\e9e2\";\n}\n.icon.happy2:before {\n content: \"\\e9e3\";\n}\n.icon.smile:before {\n content: \"\\e9e4\";\n}\n.icon.smile2:before {\n content: \"\\e9e5\";\n}\n.icon.tongue:before {\n content: \"\\e9e6\";\n}\n.icon.tongue2:before {\n content: \"\\e9e7\";\n}\n.icon.sad:before {\n content: \"\\e9e8\";\n}\n.icon.sad2:before {\n content: \"\\e9e9\";\n}\n.icon.wink:before {\n content: \"\\e9ea\";\n}\n.icon.wink2:before {\n content: \"\\e9eb\";\n}\n.icon.grin:before {\n content: \"\\e9ec\";\n}\n.icon.grin2:before {\n content: \"\\e9ed\";\n}\n.icon.cool:before {\n content: \"\\e9ee\";\n}\n.icon.cool2:before {\n content: \"\\e9ef\";\n}\n.icon.angry:before {\n content: \"\\e9f0\";\n}\n.icon.angry2:before {\n content: \"\\e9f1\";\n}\n.icon.evil:before {\n content: \"\\e9f2\";\n}\n.icon.evil2:before {\n content: \"\\e9f3\";\n}\n.icon.shocked:before {\n content: \"\\e9f4\";\n}\n.icon.shocked2:before {\n content: \"\\e9f5\";\n}\n.icon.baffled:before {\n content: \"\\e9f6\";\n}\n.icon.baffled2:before {\n content: \"\\e9f7\";\n}\n.icon.confused:before {\n content: \"\\e9f8\";\n}\n.icon.confused2:before {\n content: \"\\e9f9\";\n}\n.icon.neutral:before {\n content: \"\\e9fa\";\n}\n.icon.neutral2:before {\n content: \"\\e9fb\";\n}\n.icon.hipster:before {\n content: \"\\e9fc\";\n}\n.icon.hipster2:before {\n content: \"\\e9fd\";\n}\n.icon.wondering:before {\n content: \"\\e9fe\";\n}\n.icon.wondering2:before {\n content: \"\\e9ff\";\n}\n.icon.sleepy:before {\n content: \"\\ea00\";\n}\n.icon.sleepy2:before {\n content: \"\\ea01\";\n}\n.icon.frustrated:before {\n content: \"\\ea02\";\n}\n.icon.frustrated2:before {\n content: \"\\ea03\";\n}\n.icon.crying:before {\n content: \"\\ea04\";\n}\n.icon.crying2:before {\n content: \"\\ea05\";\n}\n.icon.point-up:before {\n content: \"\\ea06\";\n}\n.icon.point-right:before {\n content: \"\\ea07\";\n}\n.icon.point-down:before {\n content: \"\\ea08\";\n}\n.icon.point-left:before {\n content: \"\\ea09\";\n}\n.icon.warning:before {\n content: \"\\ea0a\";\n}\n.icon.notification:before {\n content: \"\\ea0b\";\n}\n.icon.question:before {\n content: \"\\ea0c\";\n}\n.icon.plus:before {\n content: \"\\ea0d\";\n}\n.icon.minus:before {\n content: \"\\ea0e\";\n}\n.icon.info:before {\n content: \"\\ea0f\";\n}\n.icon.cancel-circle:before {\n content: \"\\ea10\";\n}\n.icon.blocked:before {\n content: \"\\ea11\";\n}\n.icon.cross:before {\n content: \"\\e80b\";\n}\n.icon.checkmark:before {\n content: \"\\e80c\";\n}\n.icon.checkmark2:before {\n content: \"\\ea12\";\n}\n.icon.spell-check:before {\n content: \"\\ea13\";\n}\n.icon.enter:before {\n content: \"\\ea14\";\n}\n.icon.exit:before {\n content: \"\\ea15\";\n}\n.icon.play2:before {\n content: \"\\ea16\";\n}\n.icon.pause:before {\n content: \"\\ea17\";\n}\n.icon.stop:before {\n content: \"\\ea18\";\n}\n.icon.previous:before {\n content: \"\\ea19\";\n}\n.icon.next:before {\n content: \"\\ea1a\";\n}\n.icon.backward:before {\n content: \"\\ea1b\";\n}\n.icon.forward2:before {\n content: \"\\ea1c\";\n}\n.icon.play3:before {\n content: \"\\ea1d\";\n}\n.icon.pause2:before {\n content: \"\\ea1e\";\n}\n.icon.stop2:before {\n content: \"\\ea1f\";\n}\n.icon.backward2:before {\n content: \"\\ea20\";\n}\n.icon.forward3:before {\n content: \"\\ea21\";\n}\n.icon.first:before {\n content: \"\\ea22\";\n}\n.icon.last:before {\n content: \"\\ea23\";\n}\n.icon.previous2:before {\n content: \"\\ea24\";\n}\n.icon.next2:before {\n content: \"\\ea25\";\n}\n.icon.eject:before {\n content: \"\\ea26\";\n}\n.icon.volume-high:before {\n content: \"\\ea27\";\n}\n.icon.volume-medium:before {\n content: \"\\ea28\";\n}\n.icon.volume-low:before {\n content: \"\\ea29\";\n}\n.icon.volume-mute:before {\n content: \"\\ea2a\";\n}\n.icon.volume-mute2:before {\n content: \"\\ea2b\";\n}\n.icon.volume-increase:before {\n content: \"\\ea2c\";\n}\n.icon.volume-decrease:before {\n content: \"\\ea2d\";\n}\n.icon.loop:before {\n content: \"\\ea2e\";\n}\n.icon.loop2:before {\n content: \"\\ea2f\";\n}\n.icon.infinite2:before {\n content: \"\\ea30\";\n}\n.icon.shuffle:before {\n content: \"\\ea31\";\n}\n.icon.arrow-up-left:before {\n content: \"\\ea32\";\n}\n.icon.arrow-up3:before {\n content: \"\\ea33\";\n}\n.icon.arrow-up-right:before {\n content: \"\\ea34\";\n}\n.icon.arrow-right3:before {\n content: \"\\ea35\";\n}\n.icon.arrow-down-right:before {\n content: \"\\ea36\";\n}\n.icon.arrow-down3:before {\n content: \"\\ea37\";\n}\n.icon.arrow-down-left:before {\n content: \"\\ea38\";\n}\n.icon.arrow-left3:before {\n content: \"\\ea39\";\n}\n.icon.arrow-up-left2:before {\n content: \"\\ea3a\";\n}\n.icon.arrow-up2:before {\n content: \"\\ea3b\";\n}\n.icon.arrow-up-right2:before {\n content: \"\\ea3c\";\n}\n.icon.arrow-right2:before {\n content: \"\\ea3d\";\n}\n.icon.arrow-down-right2:before {\n content: \"\\ea3e\";\n}\n.icon.arrow-down2:before {\n content: \"\\ea3f\";\n}\n.icon.arrow-down-left2:before {\n content: \"\\ea40\";\n}\n.icon.arrow-left2:before {\n content: \"\\ea41\";\n}\n.icon.circle-up:before {\n content: \"\\ea42\";\n}\n.icon.circle-right:before {\n content: \"\\ea43\";\n}\n.icon.circle-down:before {\n content: \"\\ea44\";\n}\n.icon.circle-left:before {\n content: \"\\ea45\";\n}\n.icon.tab:before {\n content: \"\\ea46\";\n}\n.icon.move-up:before {\n content: \"\\ea47\";\n}\n.icon.move-down:before {\n content: \"\\ea48\";\n}\n.icon.sort-alpha-asc:before {\n content: \"\\ea49\";\n}\n.icon.sort-alpha-desc:before {\n content: \"\\ea4a\";\n}\n.icon.sort-numeric-asc:before {\n content: \"\\ea4b\";\n}\n.icon.sort-numberic-desc:before {\n content: \"\\ea4c\";\n}\n.icon.sort-amount-asc:before {\n content: \"\\ea4d\";\n}\n.icon.sort-amount-desc:before {\n content: \"\\ea4e\";\n}\n.icon.command:before {\n content: \"\\ea4f\";\n}\n.icon.shift:before {\n content: \"\\ea50\";\n}\n.icon.ctrl:before {\n content: \"\\ea51\";\n}\n.icon.opt:before {\n content: \"\\ea52\";\n}\n.icon.checkbox-checked:before {\n content: \"\\ea53\";\n}\n.icon.checkbox-unchecked:before {\n content: \"\\ea54\";\n}\n.icon.radio-checked:before {\n content: \"\\ea55\";\n}\n.icon.radio-checked2:before {\n content: \"\\ea56\";\n}\n.icon.radio-unchecked:before {\n content: \"\\ea57\";\n}\n.icon.crop:before {\n content: \"\\ea58\";\n}\n.icon.make-group:before {\n content: \"\\ea59\";\n}\n.icon.ungroup:before {\n content: \"\\ea5a\";\n}\n.icon.scissors:before {\n content: \"\\ea5b\";\n}\n.icon.filter:before {\n content: \"\\ea5c\";\n}\n.icon.font:before {\n content: \"\\ea5d\";\n}\n.icon.ligature:before {\n content: \"\\ea5e\";\n}\n.icon.ligature2:before {\n content: \"\\ea5f\";\n}\n.icon.text-height:before {\n content: \"\\ea60\";\n}\n.icon.text-width:before {\n content: \"\\ea61\";\n}\n.icon.font-size:before {\n content: \"\\ea62\";\n}\n.icon.bold:before {\n content: \"\\ea63\";\n}\n.icon.underline:before {\n content: \"\\ea64\";\n}\n.icon.italic:before {\n content: \"\\ea65\";\n}\n.icon.strikethrough:before {\n content: \"\\ea66\";\n}\n.icon.omega:before {\n content: \"\\ea67\";\n}\n.icon.sigma:before {\n content: \"\\ea68\";\n}\n.icon.page-break:before {\n content: \"\\ea69\";\n}\n.icon.superscript:before {\n content: \"\\ea6a\";\n}\n.icon.subscript:before {\n content: \"\\ea6b\";\n}\n.icon.superscript2:before {\n content: \"\\ea6c\";\n}\n.icon.subscript2:before {\n content: \"\\ea6d\";\n}\n.icon.text-color:before {\n content: \"\\ea6e\";\n}\n.icon.pagebreak:before {\n content: \"\\ea6f\";\n}\n.icon.clear-formatting:before {\n content: \"\\ea70\";\n}\n.icon.table:before {\n content: \"\\ea71\";\n}\n.icon.table2:before {\n content: \"\\ea72\";\n}\n.icon.insert-template:before {\n content: \"\\ea73\";\n}\n.icon.pilcrow:before {\n content: \"\\ea74\";\n}\n.icon.ltr:before {\n content: \"\\ea75\";\n}\n.icon.rtl:before {\n content: \"\\ea76\";\n}\n.icon.section:before {\n content: \"\\ea77\";\n}\n.icon.paragraph-left:before {\n content: \"\\e903\";\n}\n.icon.paragraph-center:before {\n content: \"\\ea78\";\n}\n.icon.paragraph-right:before {\n content: \"\\ea79\";\n}\n.icon.paragraph-justify:before {\n content: \"\\ea7a\";\n}\n.icon.indent-increase:before {\n content: \"\\ea7b\";\n}\n.icon.indent-decrease:before {\n content: \"\\ea7c\";\n}\n.icon.share:before {\n content: \"\\ea7d\";\n}\n.icon.new-tab:before {\n content: \"\\ea7e\";\n}\n.icon.embed:before {\n content: \"\\ea7f\";\n}\n.icon.embed2:before {\n content: \"\\ea80\";\n}\n.icon.terminal:before {\n content: \"\\ea81\";\n}\n.icon.share2:before {\n content: \"\\ea82\";\n}\n.icon.mail:before {\n content: \"\\ea83\";\n}\n.icon.mail2:before {\n content: \"\\ea84\";\n}\n.icon.mail3:before {\n content: \"\\ea85\";\n}\n.icon.mail4:before {\n content: \"\\ea86\";\n}\n.icon.google2:before {\n content: \"\\ea87\";\n}\n.icon.google-plus:before {\n content: \"\\ea88\";\n}\n.icon.google-plus2:before {\n content: \"\\ea89\";\n}\n.icon.google-plus3:before {\n content: \"\\ea8a\";\n}\n.icon.google-drive:before {\n content: \"\\ea8b\";\n}\n.icon.facebook:before {\n content: \"\\e80d\";\n}\n.icon.facebook2:before {\n content: \"\\e80e\";\n}\n.icon.facebook3:before {\n content: \"\\e80f\";\n}\n.icon.ello:before {\n content: \"\\ea8c\";\n}\n.icon.instagram:before {\n content: \"\\ea8d\";\n}\n.icon.twitter:before {\n content: \"\\e810\";\n}\n.icon.twitter2:before {\n content: \"\\e811\";\n}\n.icon.twitter3:before {\n content: \"\\e812\";\n}\n.icon.feed2:before {\n content: \"\\ea8e\";\n}\n.icon.feed3:before {\n content: \"\\ea8f\";\n}\n.icon.feed4:before {\n content: \"\\ea90\";\n}\n.icon.youtube:before {\n content: \"\\ea91\";\n}\n.icon.youtube2:before {\n content: \"\\ea92\";\n}\n.icon.youtube3:before {\n content: \"\\ea93\";\n}\n.icon.youtube4:before {\n content: \"\\ea94\";\n}\n.icon.twitch:before {\n content: \"\\ea95\";\n}\n.icon.vimeo:before {\n content: \"\\ea96\";\n}\n.icon.vimeo2:before {\n content: \"\\ea97\";\n}\n.icon.vimeo3:before {\n content: \"\\ea98\";\n}\n.icon.lanyrd:before {\n content: \"\\ea99\";\n}\n.icon.flickr:before {\n content: \"\\ea9a\";\n}\n.icon.flickr2:before {\n content: \"\\ea9b\";\n}\n.icon.flickr3:before {\n content: \"\\ea9c\";\n}\n.icon.flickr4:before {\n content: \"\\ea9d\";\n}\n.icon.picassa:before {\n content: \"\\ea9e\";\n}\n.icon.picassa2:before {\n content: \"\\ea9f\";\n}\n.icon.dribbble:before {\n content: \"\\eaa0\";\n}\n.icon.dribbble2:before {\n content: \"\\eaa1\";\n}\n.icon.dribbble3:before {\n content: \"\\eaa2\";\n}\n.icon.forrst:before {\n content: \"\\eaa3\";\n}\n.icon.forrst2:before {\n content: \"\\eaa4\";\n}\n.icon.deviantart:before {\n content: \"\\eaa5\";\n}\n.icon.deviantart2:before {\n content: \"\\eaa6\";\n}\n.icon.steam:before {\n content: \"\\eaa7\";\n}\n.icon.steam2:before {\n content: \"\\eaa8\";\n}\n.icon.dropbox:before {\n content: \"\\eaa9\";\n}\n.icon.onedrive:before {\n content: \"\\eaaa\";\n}\n.icon.github:before {\n content: \"\\e813\";\n}\n.icon.github2:before {\n content: \"\\e814\";\n}\n.icon.github3:before {\n content: \"\\e815\";\n}\n.icon.github4:before {\n content: \"\\e816\";\n}\n.icon.github5:before {\n content: \"\\eaab\";\n}\n.icon.wordpress:before {\n content: \"\\eaac\";\n}\n.icon.wordpress2:before {\n content: \"\\eaad\";\n}\n.icon.joomla:before {\n content: \"\\eaae\";\n}\n.icon.blogger:before {\n content: \"\\eaaf\";\n}\n.icon.blogger2:before {\n content: \"\\eab0\";\n}\n.icon.tumblr:before {\n content: \"\\eab1\";\n}\n.icon.tumblr2:before {\n content: \"\\eab2\";\n}\n.icon.yahoo:before {\n content: \"\\eab3\";\n}\n.icon.tux:before {\n content: \"\\eab4\";\n}\n.icon.apple:before {\n content: \"\\eab5\";\n}\n.icon.finder:before {\n content: \"\\eab6\";\n}\n.icon.android:before {\n content: \"\\eab7\";\n}\n.icon.windows:before {\n content: \"\\eab8\";\n}\n.icon.windows8:before {\n content: \"\\eab9\";\n}\n.icon.soundcloud:before {\n content: \"\\eaba\";\n}\n.icon.soundcloud2:before {\n content: \"\\eabb\";\n}\n.icon.skype:before {\n content: \"\\eabc\";\n}\n.icon.reddit:before {\n content: \"\\eabd\";\n}\n.icon.linkedin:before {\n content: \"\\e817\";\n}\n.icon.linkedin2:before {\n content: \"\\e818\";\n}\n.icon.lastfm:before {\n content: \"\\eabe\";\n}\n.icon.lastfm2:before {\n content: \"\\eabf\";\n}\n.icon.delicious:before {\n content: \"\\eac0\";\n}\n.icon.stumbleupon:before {\n content: \"\\eac1\";\n}\n.icon.stumbleupon2:before {\n content: \"\\eac2\";\n}\n.icon.stackoverflow:before {\n content: \"\\e819\";\n}\n.icon.pinterest:before {\n content: \"\\eac3\";\n}\n.icon.pinterest2:before {\n content: \"\\eac4\";\n}\n.icon.xing:before {\n content: \"\\eac5\";\n}\n.icon.xing2:before {\n content: \"\\eac6\";\n}\n.icon.flattr:before {\n content: \"\\eac7\";\n}\n.icon.foursquare:before {\n content: \"\\eac8\";\n}\n.icon.paypal:before {\n content: \"\\eac9\";\n}\n.icon.paypal2:before {\n content: \"\\eaca\";\n}\n.icon.paypal3:before {\n content: \"\\eacb\";\n}\n.icon.yelp:before {\n content: \"\\eacc\";\n}\n.icon.file-pdf:before {\n content: \"\\eacd\";\n}\n.icon.file-openoffice:before {\n content: \"\\eace\";\n}\n.icon.file-word:before {\n content: \"\\eacf\";\n}\n.icon.file-excel:before {\n content: \"\\ead0\";\n}\n.icon.libreoffice:before {\n content: \"\\ead1\";\n}\n.icon.html5:before {\n content: \"\\ead2\";\n}\n.icon.html52:before {\n content: \"\\ead3\";\n}\n.icon.css3:before {\n content: \"\\ead4\";\n}\n.icon.git:before {\n content: \"\\ead5\";\n}\n.icon.svg:before {\n content: \"\\ead6\";\n}\n.icon.codepen:before {\n content: \"\\ead7\";\n}\n.icon.chrome:before {\n content: \"\\ead8\";\n}\n.icon.firefox:before {\n content: \"\\ead9\";\n}\n.icon.IE:before {\n content: \"\\eada\";\n}\n.icon.opera:before {\n content: \"\\eadb\";\n}\n.icon.safari:before {\n content: \"\\eadc\";\n}\n.icon.IcoMoon:before {\n content: \"\\eadd\";\n}","/*\n\n\tD A R K T H E M E\n\n\t____________________________________________________________\n\n\tNotes:\n\t- This file is interchangeable with theme-light.less\n\t- Only contains color variables\n\n*/\n\n//\n// General Styles\n// --------------------------------------------------\n@body-bg-color:\t\t\t\t\t@g2-kevlar;\n\n@default-text-color:\t\t\t@g13-mist;\n@default-link-color:\t\t\t@c-ocean;\n@default-link-hover:\t\t\t@c-laser;\n@default-btn-color:\t\t\t\t@c-ocean;\n@default-btn-hover:\t\t\t\t@c-laser;\n@default-selection-text:\t@g20-white;\n@default-selection-bg:\t\t@g9-mountain;\n\n//\n// Navigation Bar\n// --------------------------------------------------\n@nav-bg:\t\t\t\t\t\t@g19-ghost;\n@nav-logo:\t\t\t\t\t\t@g7-graphite;\n@nav-logo-hover:\t\t\t\t@c-ocean;\n@nav-hamburger:\t\t\t\t\t@g8-storm;\n@nav-hamburger-hover:\t\t\t@g10-wolf;\n@nav-search-bg:\t\t\t\t\t@g20-white;\n@nav-search-border:\t\t\t\t@g17-whisper;\n@nav-search-border-focus:\t\t@c-pool;\n@nav-search-placeholder:\t\t#00f;\n@nav-search-text:\t\t\t\t@g7-graphite;\n\n@algolia-background:\t\t\t@g6-smoke;\n@algolia-category-header:\t\t@g4-onyx;\n@algolia-category-header-text:\t@g12-forge;\n@algolia-suggestion-column:\t\t@g18-cloud;\n@algolia-suggestion-text:\t\t@g7-graphite;\n@algolia-suggestion-text-alt:\t@g9-mountain;\n@algolia-suggestion-content:\t@g20-white;\n\n@algolia-highlight-color:\t\t@c-ocean;\n\n@algolia-cursor-text:\t\t\t@c-neutrino;\n@algolia-cursor-bg1:\t\t\t@c-ocean;\n@algolia-cursor-bg2:\t\t\t@c-laser;\n@algolia-cursor-highlight:\t\t@g20-white;\n\n//\n// Article\n// --------------------------------------------------\n@article-bg:\t\t\t\t\t@g2-kevlar;\n@article-bg-rgba-0:\t\t\t\t\trgba(32,32,40,0);\n@article-bg-rgba-1:\t\t\t\t\trgba(32,32,40,1);\n@article-bg-heading:\t\t\t@g4-onyx;\n@article-bg-footer:\t\t\t\t@g3-castle;\n@article-bg-highlight:\t\t\t@g3-castle;\n@article-bg-darken:\t\t\t\t@g1-raven;\n@article-scrollbar:\t\t\t\t@g8-storm;\n\n@article-text:\t\t\t\t\t@g13-mist;\n@article-text-heading:\t\t\t@g18-cloud;\n@article-note-text:\t\t\t\t@c-rainforest;\n@article-note-bg:\t\t\t\t@g3-castle;\n@article-note-border:\t\t\t@c-rainforest;\n@article-note-code: @c-potassium;\n@article-note-code-bg: @g1-raven;\n@article-note-code-border: #3c4b4c;\n@article-gotcha-text:\t\t\t@c-dreamsicle;\n@article-gotcha-bg:\t\t\t\t@g3-castle;\n@article-gotcha-border:\t\t\t@c-dreamsicle;\n@article-gotcha-code: @c-potassium;\n@article-gotcha-code-bg: @g1-raven;\n@article-gotcha-code-border: #673c2c;\n\n@article-line-color:\t\t\t@g4-onyx;\n\n@article-code-color:\t\t\t@c-potassium;\n@article-code-border:\t\t\t@g4-onyx;\n@article-code-bg:\t\t\t\t@g1-raven;\n@article-code-scrollbar:\t\t@g4-onyx;\n@article-code-accent1:\t\t\t@g9-mountain;\n@article-code-accent2:\t\t\t@c-pool;\n@article-code-accent3:\t\t\t@c-viridian;\n@article-code-accent4:\t\t\t@c-ruby;\n@article-code-accent5:\t\t\t#ff6db0;\n@article-code-accent6:\t\t\t@c-pool;\n@article-code-accent7:\t\t\t#e90;\n\n@article-tooltip:\t\t\t\t@c-viridian;\n@article-tooltip-nested:\t\t@g20-white;\n@article-tooltip-text:\t\t\t@g6-smoke;\n@article-tooltip-bg:\t\t\t@g18-cloud;\n\n@old-version-text:\t\t\t\t@c-dreamsicle;\n@old-version-bg:\t\t\t\t@g3-castle;\n\n/* Fancy background on code blocks */\n.article-content {\n\tpre {\n\t\tbackground-attachment: fixed;\n\t\tbackground-repeat: no-repeat;\n\t\tbackground-position: center center;\n\t\tbackground-size: 70%;\n\t}\n\tstrong {\n\t\tcolor: @g16-pearl;\n\t}\n\tblockquote, dt > table {\n\t\tth,td {\n\t\t\tborder-color: @g5-pepper;\n\t\t}\n\t}\n}\n\n@tabs-body-bg:\t@g5-pepper;\n@tabs-link-bg: @g5-pepper;\n@tabs-link: @g13-mist;\n@tabs-link-hover: @g18-cloud;\n@tabs-link-active: @g18-cloud;\n\n//\n// Sidebar\n// --------------------------------------------------\n@sidebar-bg:\t\t\t\t\t@g1-raven;\n@sidebar-scrollbar:\t\t\t\t@g8-storm;\n@sidebar-divider:\t\t\t\t@g3-castle;\n@sidebar-title-color:\t\t\t@c-ocean;\n@sidebar-text:\t\t\t\t\t@g13-mist;\n@sidebar-hover:\t\t\t\t\t@g20-white;\n@sidebar-mask-a:\t\t\t\t@c-pool;\n@sidebar-mask-b:\t\t\t\t@c-ocean;\n@sidebar-toggle-icon: \t@g16-pearl;\n@sidebar-toggle-bg: \t\t@g6-smoke;\n\n//\n// Error Pages\n// --------------------------------------------------\n@error-bg:\t\t\t\t\t\t@g19-ghost;\n@error-bg-accent:\t\t\t\t@c-yeti;\n@error-text:\t\t\t\t\t@g8-storm;\n@error-decor:\t\t\t\t\t@c-ocean;\n\n//\n// Modal Form Fields\n// --------------------------------------------------\n@modal-input-bg: @g5-pepper;\n\n//\n// Telegraf Theme\n// --------------------------------------------------\n@telegraf-link:\t\t\t\t\t\t@c-dreamsicle;\n@telegraf-link-hover:\t\t\t\t@g20-white;\n@telegraf-btn:\t\t\t\t\t\t@c-dreamsicle;\n@telegraf-btn-hover:\t\t\t\t@c-tungsten;\n@telegraf-section-title:\t\t\t@c-dreamsicle;\n@telegraf-dropdown:\t\t\t\t\t@c-dreamsicle;\n@telegraf-dropdown-hover:\t\t\t@c-tungsten;\n@telegraf-dropdown-gradient-a:\t\t@c-dreamsicle;\n@telegraf-dropdown-gradient-b:\t\t@c-star;\n\n//\n// Chronograf Theme\n// --------------------------------------------------\n@chronograf-link:\t\t\t\t\t@c-comet;\n@chronograf-link-hover:\t\t\t\t@g20-white;\n@chronograf-btn:\t\t\t\t\t@c-comet;\n@chronograf-btn-hover:\t\t\t\t@c-potassium;\n@chronograf-section-title:\t\t\t@c-comet;\n@chronograf-dropdown:\t\t\t\t@c-comet;\n@chronograf-dropdown-hover:\t\t\t@c-potassium;\n@chronograf-dropdown-gradient-a:\t@c-comet;\n@chronograf-dropdown-gradient-b:\t@c-ocean;\n\n//\n// Kapacitor Theme\n// --------------------------------------------------\n@kapacitor-link:\t\t\t\t\t@c-rainforest;\n@kapacitor-link-hover:\t\t\t\t@g20-white;\n@kapacitor-btn:\t\t\t\t\t@c-rainforest-darker;\n@kapacitor-btn-hover:\t\t\t\t@c-rainforest;\n@kapacitor-section-title:\t\t\t@c-rainforest;\n@kapacitor-dropdown:\t\t\t\t@c-rainforest;\n@kapacitor-dropdown-hover:\t\t\t@c-honeydew;\n@kapacitor-dropdown-gradient-a:\t\t@c-rainforest;\n@kapacitor-dropdown-gradient-b:\t\t@c-pool;\n\n//\n// Flux Theme\n// --------------------------------------------------\n@flux-link:\t\t\t\t\t@c-rainforest;\n@flux-link-hover:\t\t\t\t@g20-white;\n@flux-section-title:\t\t\t@c-rainforest;\n@flux-dropdown:\t\t\t\t@c-rainforest;\n@flux-dropdown-hover:\t\t\t@c-honeydew;\n@flux-dropdown-gradient-a:\t\t@c-rainforest;\n@flux-dropdown-gradient-b:\t\t@c-pool;\n","/*\n\n\tInfluxData Docs Theme File\n\n\t\"Default Theme\" (Dark)\n*/\n\n//\n// Import Tools\n// --------------------------------------------------\n\n@import \"influx-palette.less\";\n@import \"variables.less\";\n@import \"icon-font.less\";\n\n//\n// Import Base Theme File\n// --------------------------------------------------\n@import \"theme-dark.less\";\n#theme-switch-dark { display: none; }\n\n//\n// Import UI Element styles\n// --------------------------------------------------\n@import \"normalize-3.0.2.less\";\n@import \"syntax.less\";\n@import \"layout.less\";\n@import \"flex.less\";\n@import \"svgs.less\";\n\n//\n// Import Product Specific Themes\n// --------------------------------------------------\n@import \"theme-telegraf.less\";\n@import \"theme-chronograf.less\";\n@import \"theme-kapacitor.less\";\n@import \"theme-enterprise_kapacitor.less\";\n@import \"theme-flux.less\";\n",".klavika-font{font-family:Klavika-Light,'Helvetica Neue',Helvetica,Helvetica,Arial,Tahoma,Verdana,sans-serif;font-weight:200}@font-face{font-family:icomoon;src:url(../fonts/icomoon.eot?c3omf0);src:url(../fonts/icomoon.eot?c3omf0#iefix) format('embedded-opentype'),url(../fonts/icomoon.woff2?c3omf0) format('woff2'),url(../fonts/icomoon.ttf?c3omf0) format('truetype'),url(../fonts/icomoon.woff?c3omf0) format('woff'),url(../fonts/icomoon.svg?c3omf0#icomoon) format('svg');font-weight:400;font-style:normal}.icon{font-family:icomoon;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon.sun2:before{content:\"\\eae2\"}.icon.moon:before{content:\"\\eae3\"}.icon.logotype:before{content:\"\\e800\"}.icon.logo:before{content:\"\\e801\"}.icon.arrow-down:before{content:\"\\e802\"}.icon.arrow-up:before{content:\"\\e803\"}.icon.arrow-left:before{content:\"\\e804\"}.icon.arrow-right:before{content:\"\\e805\"}.icon.health:before{content:\"\\e806\"}.icon.lightning:before{content:\"\\e807\"}.icon.matrix:before{content:\"\\e808\"}.icon.cluster:before{content:\"\\e809\"}.icon.data:before{content:\"\\e80a\"}.icon.google:before{content:\"\\e81a\"}.icon.eyeball:before{content:\"\\e901\"}.icon.infinite:before{content:\"\\e902\"}.icon.dashboard:before{content:\"\\eade\"}.icon.analytics:before{content:\"\\eadf\"}.icon.cloud-stack:before{content:\"\\eae0\"}.icon.iot:before{content:\"\\eae1\"}.icon.home:before{content:\"\\e904\"}.icon.home2:before{content:\"\\e905\"}.icon.home3:before{content:\"\\e906\"}.icon.office:before{content:\"\\e907\"}.icon.newspaper:before{content:\"\\e908\"}.icon.pencil:before{content:\"\\e909\"}.icon.pencil2:before{content:\"\\e90a\"}.icon.quill:before{content:\"\\e90b\"}.icon.pen:before{content:\"\\e90c\"}.icon.blog:before{content:\"\\e90d\"}.icon.eyedropper:before{content:\"\\e90e\"}.icon.droplet:before{content:\"\\e90f\"}.icon.paint-format:before{content:\"\\e910\"}.icon.image:before{content:\"\\e911\"}.icon.images:before{content:\"\\e912\"}.icon.camera:before{content:\"\\e913\"}.icon.headphones:before{content:\"\\e914\"}.icon.music:before{content:\"\\e915\"}.icon.play:before{content:\"\\e916\"}.icon.film:before{content:\"\\e917\"}.icon.video-camera:before{content:\"\\e918\"}.icon.dice:before{content:\"\\e919\"}.icon.pacman:before{content:\"\\e91a\"}.icon.spades:before{content:\"\\e91b\"}.icon.clubs:before{content:\"\\e91c\"}.icon.diamonds:before{content:\"\\e91d\"}.icon.bullhorn:before{content:\"\\e91e\"}.icon.connection:before{content:\"\\e91f\"}.icon.podcast:before{content:\"\\e920\"}.icon.feed:before{content:\"\\e921\"}.icon.mic:before{content:\"\\e922\"}.icon.book:before{content:\"\\e923\"}.icon.books:before{content:\"\\e924\"}.icon.library:before{content:\"\\e925\"}.icon.file-text:before{content:\"\\e926\"}.icon.profile:before{content:\"\\e927\"}.icon.file-empty:before{content:\"\\e928\"}.icon.files-empty:before{content:\"\\e929\"}.icon.file-text2:before{content:\"\\e92a\"}.icon.file-picture:before{content:\"\\e92b\"}.icon.file-music:before{content:\"\\e92c\"}.icon.file-play:before{content:\"\\e92d\"}.icon.file-video:before{content:\"\\e92e\"}.icon.file-zip:before{content:\"\\e92f\"}.icon.copy:before{content:\"\\e930\"}.icon.paste:before{content:\"\\e931\"}.icon.stack:before{content:\"\\e932\"}.icon.folder:before{content:\"\\e933\"}.icon.folder-open:before{content:\"\\e934\"}.icon.folder-plus:before{content:\"\\e935\"}.icon.folder-minus:before{content:\"\\e936\"}.icon.folder-download:before{content:\"\\e937\"}.icon.folder-upload:before{content:\"\\e938\"}.icon.price-tag:before{content:\"\\e939\"}.icon.price-tags:before{content:\"\\e93a\"}.icon.barcode:before{content:\"\\e93b\"}.icon.qrcode:before{content:\"\\e93c\"}.icon.ticket:before{content:\"\\e93d\"}.icon.cart:before{content:\"\\e93e\"}.icon.coin-dollar:before{content:\"\\e93f\"}.icon.coin-euro:before{content:\"\\e940\"}.icon.coin-pound:before{content:\"\\e941\"}.icon.coin-yen:before{content:\"\\e942\"}.icon.credit-card:before{content:\"\\e943\"}.icon.calculator:before{content:\"\\e944\"}.icon.lifebuoy:before{content:\"\\e945\"}.icon.phone:before{content:\"\\e946\"}.icon.phone-hang-up:before{content:\"\\e947\"}.icon.address-book:before{content:\"\\e948\"}.icon.envelop:before{content:\"\\e949\"}.icon.pushpin:before{content:\"\\e94a\"}.icon.location:before{content:\"\\e94b\"}.icon.location2:before{content:\"\\e94c\"}.icon.compass:before{content:\"\\e94d\"}.icon.compass2:before{content:\"\\e94e\"}.icon.map:before{content:\"\\e94f\"}.icon.map2:before{content:\"\\e950\"}.icon.history:before{content:\"\\e951\"}.icon.clock:before{content:\"\\e952\"}.icon.clock2:before{content:\"\\e953\"}.icon.alarm:before{content:\"\\e954\"}.icon.bell:before{content:\"\\e955\"}.icon.stopwatch:before{content:\"\\e956\"}.icon.calendar:before{content:\"\\e957\"}.icon.printer:before{content:\"\\e958\"}.icon.keyboard:before{content:\"\\e959\"}.icon.display:before{content:\"\\e95a\"}.icon.laptop:before{content:\"\\e95b\"}.icon.mobile:before{content:\"\\e95c\"}.icon.mobile2:before{content:\"\\e95d\"}.icon.tablet:before{content:\"\\e95e\"}.icon.tv:before{content:\"\\e95f\"}.icon.drawer:before{content:\"\\e960\"}.icon.drawer2:before{content:\"\\e961\"}.icon.box-add:before{content:\"\\e962\"}.icon.box-remove:before{content:\"\\e963\"}.icon.download:before{content:\"\\e964\"}.icon.upload:before{content:\"\\e965\"}.icon.floppy-disk:before{content:\"\\e966\"}.icon.drive:before{content:\"\\e967\"}.icon.database:before{content:\"\\e968\"}.icon.undo:before{content:\"\\e969\"}.icon.redo:before{content:\"\\e96a\"}.icon.undo2:before{content:\"\\e96b\"}.icon.redo2:before{content:\"\\e96c\"}.icon.forward:before{content:\"\\e96d\"}.icon.reply:before{content:\"\\e96e\"}.icon.bubble:before{content:\"\\e96f\"}.icon.bubbles:before{content:\"\\e970\"}.icon.bubbles2:before{content:\"\\e971\"}.icon.bubble2:before{content:\"\\e972\"}.icon.bubbles3:before{content:\"\\e973\"}.icon.bubbles4:before{content:\"\\e974\"}.icon.user:before{content:\"\\e975\"}.icon.users:before{content:\"\\e976\"}.icon.user-plus:before{content:\"\\e977\"}.icon.user-minus:before{content:\"\\e978\"}.icon.user-check:before{content:\"\\e979\"}.icon.user-tie:before{content:\"\\e97a\"}.icon.quotes-left:before{content:\"\\e97b\"}.icon.quotes-right:before{content:\"\\e97c\"}.icon.hour-glass:before{content:\"\\e97d\"}.icon.spinner:before{content:\"\\e97e\"}.icon.spinner2:before{content:\"\\e97f\"}.icon.spinner3:before{content:\"\\e980\"}.icon.spinner4:before{content:\"\\e981\"}.icon.spinner5:before{content:\"\\e982\"}.icon.spinner6:before{content:\"\\e983\"}.icon.spinner7:before{content:\"\\e984\"}.icon.spinner8:before{content:\"\\e985\"}.icon.spinner9:before{content:\"\\e986\"}.icon.spinner10:before{content:\"\\e987\"}.icon.spinner11:before{content:\"\\e988\"}.icon.binoculars:before{content:\"\\e989\"}.icon.search:before{content:\"\\e98a\"}.icon.zoom-in:before{content:\"\\e98b\"}.icon.zoom-out:before{content:\"\\e98c\"}.icon.enlarge:before{content:\"\\e98d\"}.icon.shrink:before{content:\"\\e98e\"}.icon.enlarge2:before{content:\"\\e98f\"}.icon.shrink2:before{content:\"\\e990\"}.icon.key:before{content:\"\\e991\"}.icon.key2:before{content:\"\\e992\"}.icon.lock:before{content:\"\\e993\"}.icon.unlocked:before{content:\"\\e994\"}.icon.wrench:before{content:\"\\e995\"}.icon.equalizer:before{content:\"\\e996\"}.icon.equalizer2:before{content:\"\\e997\"}.icon.cog:before{content:\"\\e900\"}.icon.cogs:before{content:\"\\e998\"}.icon.hammer:before{content:\"\\e999\"}.icon.magic-wand:before{content:\"\\e99a\"}.icon.aid-kit:before{content:\"\\e99b\"}.icon.bug:before{content:\"\\e99c\"}.icon.pie-chart:before{content:\"\\e99d\"}.icon.stats-dots:before{content:\"\\e99e\"}.icon.stats-bars:before{content:\"\\e99f\"}.icon.stats-bars2:before{content:\"\\e9a0\"}.icon.trophy:before{content:\"\\e9a1\"}.icon.gift:before{content:\"\\e9a2\"}.icon.glass:before{content:\"\\e9a3\"}.icon.glass2:before{content:\"\\e9a4\"}.icon.mug:before{content:\"\\e9a5\"}.icon.spoon-knife:before{content:\"\\e9a6\"}.icon.leaf:before{content:\"\\e9a7\"}.icon.rocket:before{content:\"\\e9a8\"}.icon.meter:before{content:\"\\e9a9\"}.icon.meter2:before{content:\"\\e9aa\"}.icon.hammer2:before{content:\"\\e9ab\"}.icon.fire:before{content:\"\\e9ac\"}.icon.lab:before{content:\"\\e9ad\"}.icon.magnet:before{content:\"\\e9ae\"}.icon.bin:before{content:\"\\e9af\"}.icon.bin2:before{content:\"\\e9b0\"}.icon.briefcase:before{content:\"\\e9b1\"}.icon.airplane:before{content:\"\\e9b2\"}.icon.truck:before{content:\"\\e9b3\"}.icon.road:before{content:\"\\e9b4\"}.icon.accessibility:before{content:\"\\e9b5\"}.icon.target:before{content:\"\\e9b6\"}.icon.shield:before{content:\"\\e9b7\"}.icon.power:before{content:\"\\e9b8\"}.icon.switch:before{content:\"\\e9b9\"}.icon.power-cord:before{content:\"\\e9ba\"}.icon.clipboard:before{content:\"\\e9bb\"}.icon.list-numbered:before{content:\"\\e9bc\"}.icon.list:before{content:\"\\e9bd\"}.icon.list2:before{content:\"\\e9be\"}.icon.tree:before{content:\"\\e9bf\"}.icon.menu:before{content:\"\\e9c0\"}.icon.menu2:before{content:\"\\e9c1\"}.icon.menu3:before{content:\"\\e9c2\"}.icon.menu4:before{content:\"\\e9c3\"}.icon.cloud:before{content:\"\\e9c4\"}.icon.cloud-download:before{content:\"\\e9c5\"}.icon.cloud-upload:before{content:\"\\e9c6\"}.icon.cloud-check:before{content:\"\\e9c7\"}.icon.download2:before{content:\"\\e9c8\"}.icon.upload2:before{content:\"\\e9c9\"}.icon.download3:before{content:\"\\e9ca\"}.icon.upload3:before{content:\"\\e9cb\"}.icon.sphere:before{content:\"\\e9cc\"}.icon.earth:before{content:\"\\e9cd\"}.icon.link:before{content:\"\\e9ce\"}.icon.flag:before{content:\"\\e9cf\"}.icon.attachment:before{content:\"\\e9d0\"}.icon.eye:before{content:\"\\e9d1\"}.icon.eye-plus:before{content:\"\\e9d2\"}.icon.eye-minus:before{content:\"\\e9d3\"}.icon.eye-blocked:before{content:\"\\e9d4\"}.icon.bookmark:before{content:\"\\e9d5\"}.icon.bookmarks:before{content:\"\\e9d6\"}.icon.sun:before{content:\"\\e9d7\"}.icon.contrast:before{content:\"\\e9d8\"}.icon.brightness-contrast:before{content:\"\\e9d9\"}.icon.star-empty:before{content:\"\\e9da\"}.icon.star-half:before{content:\"\\e9db\"}.icon.star-full:before{content:\"\\e9dc\"}.icon.heart:before{content:\"\\e9dd\"}.icon.heart-broken:before{content:\"\\e9de\"}.icon.man:before{content:\"\\e9df\"}.icon.woman:before{content:\"\\e9e0\"}.icon.man-woman:before{content:\"\\e9e1\"}.icon.happy:before{content:\"\\e9e2\"}.icon.happy2:before{content:\"\\e9e3\"}.icon.smile:before{content:\"\\e9e4\"}.icon.smile2:before{content:\"\\e9e5\"}.icon.tongue:before{content:\"\\e9e6\"}.icon.tongue2:before{content:\"\\e9e7\"}.icon.sad:before{content:\"\\e9e8\"}.icon.sad2:before{content:\"\\e9e9\"}.icon.wink:before{content:\"\\e9ea\"}.icon.wink2:before{content:\"\\e9eb\"}.icon.grin:before{content:\"\\e9ec\"}.icon.grin2:before{content:\"\\e9ed\"}.icon.cool:before{content:\"\\e9ee\"}.icon.cool2:before{content:\"\\e9ef\"}.icon.angry:before{content:\"\\e9f0\"}.icon.angry2:before{content:\"\\e9f1\"}.icon.evil:before{content:\"\\e9f2\"}.icon.evil2:before{content:\"\\e9f3\"}.icon.shocked:before{content:\"\\e9f4\"}.icon.shocked2:before{content:\"\\e9f5\"}.icon.baffled:before{content:\"\\e9f6\"}.icon.baffled2:before{content:\"\\e9f7\"}.icon.confused:before{content:\"\\e9f8\"}.icon.confused2:before{content:\"\\e9f9\"}.icon.neutral:before{content:\"\\e9fa\"}.icon.neutral2:before{content:\"\\e9fb\"}.icon.hipster:before{content:\"\\e9fc\"}.icon.hipster2:before{content:\"\\e9fd\"}.icon.wondering:before{content:\"\\e9fe\"}.icon.wondering2:before{content:\"\\e9ff\"}.icon.sleepy:before{content:\"\\ea00\"}.icon.sleepy2:before{content:\"\\ea01\"}.icon.frustrated:before{content:\"\\ea02\"}.icon.frustrated2:before{content:\"\\ea03\"}.icon.crying:before{content:\"\\ea04\"}.icon.crying2:before{content:\"\\ea05\"}.icon.point-up:before{content:\"\\ea06\"}.icon.point-right:before{content:\"\\ea07\"}.icon.point-down:before{content:\"\\ea08\"}.icon.point-left:before{content:\"\\ea09\"}.icon.warning:before{content:\"\\ea0a\"}.icon.notification:before{content:\"\\ea0b\"}.icon.question:before{content:\"\\ea0c\"}.icon.plus:before{content:\"\\ea0d\"}.icon.minus:before{content:\"\\ea0e\"}.icon.info:before{content:\"\\ea0f\"}.icon.cancel-circle:before{content:\"\\ea10\"}.icon.blocked:before{content:\"\\ea11\"}.icon.cross:before{content:\"\\e80b\"}.icon.checkmark:before{content:\"\\e80c\"}.icon.checkmark2:before{content:\"\\ea12\"}.icon.spell-check:before{content:\"\\ea13\"}.icon.enter:before{content:\"\\ea14\"}.icon.exit:before{content:\"\\ea15\"}.icon.play2:before{content:\"\\ea16\"}.icon.pause:before{content:\"\\ea17\"}.icon.stop:before{content:\"\\ea18\"}.icon.previous:before{content:\"\\ea19\"}.icon.next:before{content:\"\\ea1a\"}.icon.backward:before{content:\"\\ea1b\"}.icon.forward2:before{content:\"\\ea1c\"}.icon.play3:before{content:\"\\ea1d\"}.icon.pause2:before{content:\"\\ea1e\"}.icon.stop2:before{content:\"\\ea1f\"}.icon.backward2:before{content:\"\\ea20\"}.icon.forward3:before{content:\"\\ea21\"}.icon.first:before{content:\"\\ea22\"}.icon.last:before{content:\"\\ea23\"}.icon.previous2:before{content:\"\\ea24\"}.icon.next2:before{content:\"\\ea25\"}.icon.eject:before{content:\"\\ea26\"}.icon.volume-high:before{content:\"\\ea27\"}.icon.volume-medium:before{content:\"\\ea28\"}.icon.volume-low:before{content:\"\\ea29\"}.icon.volume-mute:before{content:\"\\ea2a\"}.icon.volume-mute2:before{content:\"\\ea2b\"}.icon.volume-increase:before{content:\"\\ea2c\"}.icon.volume-decrease:before{content:\"\\ea2d\"}.icon.loop:before{content:\"\\ea2e\"}.icon.loop2:before{content:\"\\ea2f\"}.icon.infinite2:before{content:\"\\ea30\"}.icon.shuffle:before{content:\"\\ea31\"}.icon.arrow-up-left:before{content:\"\\ea32\"}.icon.arrow-up3:before{content:\"\\ea33\"}.icon.arrow-up-right:before{content:\"\\ea34\"}.icon.arrow-right3:before{content:\"\\ea35\"}.icon.arrow-down-right:before{content:\"\\ea36\"}.icon.arrow-down3:before{content:\"\\ea37\"}.icon.arrow-down-left:before{content:\"\\ea38\"}.icon.arrow-left3:before{content:\"\\ea39\"}.icon.arrow-up-left2:before{content:\"\\ea3a\"}.icon.arrow-up2:before{content:\"\\ea3b\"}.icon.arrow-up-right2:before{content:\"\\ea3c\"}.icon.arrow-right2:before{content:\"\\ea3d\"}.icon.arrow-down-right2:before{content:\"\\ea3e\"}.icon.arrow-down2:before{content:\"\\ea3f\"}.icon.arrow-down-left2:before{content:\"\\ea40\"}.icon.arrow-left2:before{content:\"\\ea41\"}.icon.circle-up:before{content:\"\\ea42\"}.icon.circle-right:before{content:\"\\ea43\"}.icon.circle-down:before{content:\"\\ea44\"}.icon.circle-left:before{content:\"\\ea45\"}.icon.tab:before{content:\"\\ea46\"}.icon.move-up:before{content:\"\\ea47\"}.icon.move-down:before{content:\"\\ea48\"}.icon.sort-alpha-asc:before{content:\"\\ea49\"}.icon.sort-alpha-desc:before{content:\"\\ea4a\"}.icon.sort-numeric-asc:before{content:\"\\ea4b\"}.icon.sort-numberic-desc:before{content:\"\\ea4c\"}.icon.sort-amount-asc:before{content:\"\\ea4d\"}.icon.sort-amount-desc:before{content:\"\\ea4e\"}.icon.command:before{content:\"\\ea4f\"}.icon.shift:before{content:\"\\ea50\"}.icon.ctrl:before{content:\"\\ea51\"}.icon.opt:before{content:\"\\ea52\"}.icon.checkbox-checked:before{content:\"\\ea53\"}.icon.checkbox-unchecked:before{content:\"\\ea54\"}.icon.radio-checked:before{content:\"\\ea55\"}.icon.radio-checked2:before{content:\"\\ea56\"}.icon.radio-unchecked:before{content:\"\\ea57\"}.icon.crop:before{content:\"\\ea58\"}.icon.make-group:before{content:\"\\ea59\"}.icon.ungroup:before{content:\"\\ea5a\"}.icon.scissors:before{content:\"\\ea5b\"}.icon.filter:before{content:\"\\ea5c\"}.icon.font:before{content:\"\\ea5d\"}.icon.ligature:before{content:\"\\ea5e\"}.icon.ligature2:before{content:\"\\ea5f\"}.icon.text-height:before{content:\"\\ea60\"}.icon.text-width:before{content:\"\\ea61\"}.icon.font-size:before{content:\"\\ea62\"}.icon.bold:before{content:\"\\ea63\"}.icon.underline:before{content:\"\\ea64\"}.icon.italic:before{content:\"\\ea65\"}.icon.strikethrough:before{content:\"\\ea66\"}.icon.omega:before{content:\"\\ea67\"}.icon.sigma:before{content:\"\\ea68\"}.icon.page-break:before{content:\"\\ea69\"}.icon.superscript:before{content:\"\\ea6a\"}.icon.subscript:before{content:\"\\ea6b\"}.icon.superscript2:before{content:\"\\ea6c\"}.icon.subscript2:before{content:\"\\ea6d\"}.icon.text-color:before{content:\"\\ea6e\"}.icon.pagebreak:before{content:\"\\ea6f\"}.icon.clear-formatting:before{content:\"\\ea70\"}.icon.table:before{content:\"\\ea71\"}.icon.table2:before{content:\"\\ea72\"}.icon.insert-template:before{content:\"\\ea73\"}.icon.pilcrow:before{content:\"\\ea74\"}.icon.ltr:before{content:\"\\ea75\"}.icon.rtl:before{content:\"\\ea76\"}.icon.section:before{content:\"\\ea77\"}.icon.paragraph-left:before{content:\"\\e903\"}.icon.paragraph-center:before{content:\"\\ea78\"}.icon.paragraph-right:before{content:\"\\ea79\"}.icon.paragraph-justify:before{content:\"\\ea7a\"}.icon.indent-increase:before{content:\"\\ea7b\"}.icon.indent-decrease:before{content:\"\\ea7c\"}.icon.share:before{content:\"\\ea7d\"}.icon.new-tab:before{content:\"\\ea7e\"}.icon.embed:before{content:\"\\ea7f\"}.icon.embed2:before{content:\"\\ea80\"}.icon.terminal:before{content:\"\\ea81\"}.icon.share2:before{content:\"\\ea82\"}.icon.mail:before{content:\"\\ea83\"}.icon.mail2:before{content:\"\\ea84\"}.icon.mail3:before{content:\"\\ea85\"}.icon.mail4:before{content:\"\\ea86\"}.icon.google2:before{content:\"\\ea87\"}.icon.google-plus:before{content:\"\\ea88\"}.icon.google-plus2:before{content:\"\\ea89\"}.icon.google-plus3:before{content:\"\\ea8a\"}.icon.google-drive:before{content:\"\\ea8b\"}.icon.facebook:before{content:\"\\e80d\"}.icon.facebook2:before{content:\"\\e80e\"}.icon.facebook3:before{content:\"\\e80f\"}.icon.ello:before{content:\"\\ea8c\"}.icon.instagram:before{content:\"\\ea8d\"}.icon.twitter:before{content:\"\\e810\"}.icon.twitter2:before{content:\"\\e811\"}.icon.twitter3:before{content:\"\\e812\"}.icon.feed2:before{content:\"\\ea8e\"}.icon.feed3:before{content:\"\\ea8f\"}.icon.feed4:before{content:\"\\ea90\"}.icon.youtube:before{content:\"\\ea91\"}.icon.youtube2:before{content:\"\\ea92\"}.icon.youtube3:before{content:\"\\ea93\"}.icon.youtube4:before{content:\"\\ea94\"}.icon.twitch:before{content:\"\\ea95\"}.icon.vimeo:before{content:\"\\ea96\"}.icon.vimeo2:before{content:\"\\ea97\"}.icon.vimeo3:before{content:\"\\ea98\"}.icon.lanyrd:before{content:\"\\ea99\"}.icon.flickr:before{content:\"\\ea9a\"}.icon.flickr2:before{content:\"\\ea9b\"}.icon.flickr3:before{content:\"\\ea9c\"}.icon.flickr4:before{content:\"\\ea9d\"}.icon.picassa:before{content:\"\\ea9e\"}.icon.picassa2:before{content:\"\\ea9f\"}.icon.dribbble:before{content:\"\\eaa0\"}.icon.dribbble2:before{content:\"\\eaa1\"}.icon.dribbble3:before{content:\"\\eaa2\"}.icon.forrst:before{content:\"\\eaa3\"}.icon.forrst2:before{content:\"\\eaa4\"}.icon.deviantart:before{content:\"\\eaa5\"}.icon.deviantart2:before{content:\"\\eaa6\"}.icon.steam:before{content:\"\\eaa7\"}.icon.steam2:before{content:\"\\eaa8\"}.icon.dropbox:before{content:\"\\eaa9\"}.icon.onedrive:before{content:\"\\eaaa\"}.icon.github:before{content:\"\\e813\"}.icon.github2:before{content:\"\\e814\"}.icon.github3:before{content:\"\\e815\"}.icon.github4:before{content:\"\\e816\"}.icon.github5:before{content:\"\\eaab\"}.icon.wordpress:before{content:\"\\eaac\"}.icon.wordpress2:before{content:\"\\eaad\"}.icon.joomla:before{content:\"\\eaae\"}.icon.blogger:before{content:\"\\eaaf\"}.icon.blogger2:before{content:\"\\eab0\"}.icon.tumblr:before{content:\"\\eab1\"}.icon.tumblr2:before{content:\"\\eab2\"}.icon.yahoo:before{content:\"\\eab3\"}.icon.tux:before{content:\"\\eab4\"}.icon.apple:before{content:\"\\eab5\"}.icon.finder:before{content:\"\\eab6\"}.icon.android:before{content:\"\\eab7\"}.icon.windows:before{content:\"\\eab8\"}.icon.windows8:before{content:\"\\eab9\"}.icon.soundcloud:before{content:\"\\eaba\"}.icon.soundcloud2:before{content:\"\\eabb\"}.icon.skype:before{content:\"\\eabc\"}.icon.reddit:before{content:\"\\eabd\"}.icon.linkedin:before{content:\"\\e817\"}.icon.linkedin2:before{content:\"\\e818\"}.icon.lastfm:before{content:\"\\eabe\"}.icon.lastfm2:before{content:\"\\eabf\"}.icon.delicious:before{content:\"\\eac0\"}.icon.stumbleupon:before{content:\"\\eac1\"}.icon.stumbleupon2:before{content:\"\\eac2\"}.icon.stackoverflow:before{content:\"\\e819\"}.icon.pinterest:before{content:\"\\eac3\"}.icon.pinterest2:before{content:\"\\eac4\"}.icon.xing:before{content:\"\\eac5\"}.icon.xing2:before{content:\"\\eac6\"}.icon.flattr:before{content:\"\\eac7\"}.icon.foursquare:before{content:\"\\eac8\"}.icon.paypal:before{content:\"\\eac9\"}.icon.paypal2:before{content:\"\\eaca\"}.icon.paypal3:before{content:\"\\eacb\"}.icon.yelp:before{content:\"\\eacc\"}.icon.file-pdf:before{content:\"\\eacd\"}.icon.file-openoffice:before{content:\"\\eace\"}.icon.file-word:before{content:\"\\eacf\"}.icon.file-excel:before{content:\"\\ead0\"}.icon.libreoffice:before{content:\"\\ead1\"}.icon.html5:before{content:\"\\ead2\"}.icon.html52:before{content:\"\\ead3\"}.icon.css3:before{content:\"\\ead4\"}.icon.git:before{content:\"\\ead5\"}.icon.svg:before{content:\"\\ead6\"}.icon.codepen:before{content:\"\\ead7\"}.icon.chrome:before{content:\"\\ead8\"}.icon.firefox:before{content:\"\\ead9\"}.icon.IE:before{content:\"\\eada\"}.icon.opera:before{content:\"\\eadb\"}.icon.safari:before{content:\"\\eadc\"}.icon.IcoMoon:before{content:\"\\eadd\"}.article-content pre{background-attachment:fixed;background-repeat:no-repeat;background-position:center center;background-size:70%}.article-content strong{color:#e7e8eb}.article-content blockquote td,.article-content blockquote th,.article-content dt>table td,.article-content dt>table th{border-color:#383846}#theme-switch-dark{display:none}/*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0;font-family:Roboto,Helvetica,Arial,Tahoma,Verdana,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}code[class*=language-],pre[class*=language-]{direction:ltr;text-align:left;white-space:pre;white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-o-pre-wrap;word-spacing:normal;word-break:normal;word-wrap:normal;-moz-tab-size:1;-o-tab-size:1;tab-size:1;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow:none}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{overflow:auto}:not(pre)>code[class*=language-]{white-space:normal}.highlight{color:#b1b6ff}.highlight .gh,.highlight .go,.highlight .na,.highlight .nt,.highlight .nv,.highlight .ow{color:#b1b6ff}.highlight .c,.highlight .c1,.highlight .ch,.highlight .cm,.highlight .cpf,.highlight .cs,.highlight .w{color:#757888}.highlight .gi{background-color:#757888}.highlight .k,.highlight .kc,.highlight .kd,.highlight .kn,.highlight .kp,.highlight .kr,.highlight .nn{color:#22adf6}.highlight .bp,.highlight .cp,.highlight .dl,.highlight .gt,.highlight .gu,.highlight .kt,.highlight .nb,.highlight .nc,.highlight .no,.highlight .s1,.highlight .s2,.highlight .sa,.highlight .sb,.highlight .sc,.highlight .sd,.highlight .se,.highlight .sh,.highlight .sr,.highlight .sx{color:#32b08c}.highlight .err,.highlight .fm,.highlight .gd,.highlight .gr,.highlight .nd,.highlight .ne,.highlight .nf,.highlight .nl,.highlight .si{color:#bf3d5e}.highlight .il,.highlight .m,.highlight .mb,.highlight .mf,.highlight .mh,.highlight .mi,.highlight .mo,.highlight .ni,.highlight .vc,.highlight .vg,.highlight .vi,.highlight .vm{color:#ff6db0}.highlight .gp,.highlight .o{color:#22adf6}.highlight .ss{color:#e90}.highlight .cs .gh,.highlight .gp,.highlight .gs,.highlight .gu,.highlight .k,.highlight .kc,.highlight .kd,.highlight .kn,.highlight .kp,.highlight .kr,.highlight .kt,.highlight .nc,.highlight .ne,.highlight .ni,.highlight .nn .nt,.highlight .ow,.highlight .se{font-weight:700}.highlight .c,.highlight .c1,.highlight .ch,.highlight .cm,.highlight .cpf,.highlight .cs,.highlight .ge,.highlight .sd,.highlight .w{font-style:italic}@font-face{font-family:Klavika-Light;src:url(../fonts/KlavikaLight-ItalicTF.otf);font-weight:200;font-style:italic}@font-face{font-family:Klavika-Bold;src:url(../fonts/KlavikaBoldBoldItalic.otf);font-weight:700;font-style:italic}html{overflow:auto}body,html{width:100%;height:100%;background-color:#202028;-webkit-overflow-scrolling:touch}body{color:#bec2cc;line-height:1;overflow:auto}*{box-sizing:border-box}a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0;font-size:100%;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:'';content:none}table{border-collapse:collapse;border-spacing:0}.navbar{top:0;left:0;font-size:1rem;height:4rem;width:100%;background-color:#fafafc;z-index:150;position:relative}.navbar--hamburger,.navbar--logo,.navbar--product-dropdown,.navbar--search,.theme-switcher{position:absolute}.navbar--logo{left:1em;top:1.05em}.navbar--logo a{font-size:1.5rem;color:#545667;transition:color .25s ease}.navbar--logo a:hover{color:#4591ed}.navbar--logo .divider{border-left:1px solid #545667;margin:0 .8rem 0 .5rem;vertical-align:text-top;opacity:.35;line-height:1.15em}.navbar--logo .navbar--docs{font-size:1.3rem}.navbar--hamburger{width:4rem;height:4rem;right:0}.navbar--hamburger .navbar--hamburger-bar{width:1.2rem;height:2px;background-color:#676978;border-radius:1px;position:absolute;left:50%;transition:all .3s ease}.navbar--hamburger .navbar--hamburger-bar.top{top:40%;transform:translate(-50%,-50%)}.navbar--hamburger .navbar--hamburger-bar.middle{top:50%;transform:translate(-50%,-50%)}.navbar--hamburger .navbar--hamburger-bar.bottom{top:60%;transform:translate(-50%,-50%)}.navbar--hamburger:hover{cursor:pointer}.navbar--hamburger:hover .navbar--hamburger-bar{background-color:#8e91a1}.navbar--hamburger.open .navbar--hamburger-bar.top{top:50%;transform:translate(-50%,-50%) rotate(45deg)}.navbar--hamburger.open .navbar--hamburger-bar.middle{opacity:0}.navbar--hamburger.open .navbar--hamburger-bar.bottom{top:50%;transform:translate(-50%,-50%) rotate(-45deg)}.navbar--product-menu{width:100%;position:absolute;top:.5em;height:auto;opacity:0;transition:opacity .25s ease;background:#4591ed;background:-moz-linear-gradient(top,#4591ed 0,#22adf6 100%);background:-webkit-linear-gradient(top,#4591ed 0,#22adf6 100%);background:linear-gradient(to bottom,#4591ed 0,#22adf6 100%)}.navbar--product-container{width:100%;height:auto;position:absolute;top:calc(4rem * .85);left:0;visibility:hidden;transition:all .25s ease;z-index:100}.navbar--product-container.open{visibility:visible}.navbar--product-container.open .navbar--product-menu{opacity:1}.navbar--product-divider{margin:.25em 0;height:2px;background-color:rgba(67,68,83,.1)}.navbar--product{font-size:19px}.navbar--product:active,.navbar--product:link,.navbar--product:visited{color:#fff;transition:background-color .25s ease,color .25s ease;background-color:transparent;padding:1.25rem 1rem;display:block;width:100%}.navbar--product:hover{background-color:rgba(56,56,70,.12);color:#fff}.navbar--product-dropdown{display:none;top:.5em;background-color:#4591ed;height:3rem;border-radius:3px;transition:background-color .25s ease,color .25s ease}.navbar--product-dropdown:hover{cursor:pointer;background-color:#22adf6}.navbar--product-dropdown .navbar--current-product,.navbar--product-dropdown .navbar--product-dropdown-caret{position:absolute;top:50%;transform:translateY(-50%);color:#fff}.navbar--product-dropdown .navbar--current-product{font-weight:700;left:1rem;font-size:19px;font-weight:400}.navbar--product-dropdown .navbar--product-dropdown-caret{right:1rem;font-size:.625em}.navbar--search{height:3rem;width:40%;right:4rem;top:.5em}.navbar--search>*{position:absolute!important;top:0;left:0;width:100%;height:100%}.navbar--search-field{position:absolute;top:0;left:0;width:100%;height:100%;border-radius:3px;border:2px solid #eeeff2;color:#545667;background-color:#fff;padding:0 1rem;font-weight:400;font-size:19px;outline:0;transition:border-color .3s ease,color .3s ease}.navbar--search-field:focus{border-color:#22adf6;color:#22adf6}.algolia-autocomplete{width:100%}.algolia-autocomplete .aa-hint,.algolia-autocomplete .aa-input{width:100%}.algolia-autocomplete .aa-hint{color:red}.algolia-autocomplete .aa-dropdown-menu{margin:.5rem 0 0 0;width:100%;padding:.75rem;background-color:rgba(67,68,83,.7);border:0}.algolia-autocomplete .aa-dropdown-menu .algolia-docsearch-suggestion--highlight{color:#4591ed}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion{cursor:pointer;padding:0}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion{background-color:#2c2c38;border-radius:3px;overflow:hidden}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion__secondary{border:none;margin-top:2px}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion:first-child .algolia-docsearch-suggestion__secondary{margin-top:0}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--category-header{border-radius:3px 3px 0 0;background-color:#2c2c38;color:#a4a8b6;padding:.75rem 1rem;font-weight:500}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--highlight{background-color:transparent}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--subcategory-column{border:none;background-color:#f6f6f8}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--content{background-color:#fff}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--title{margin-bottom:.25rem;display:inline-block;color:#545667}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--text{color:#757888}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--subcategory-column-text{font-size:.8rem;line-height:1.4em;color:#757888}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor .algolia-docsearch-suggestion--content{background:#4591ed;background:-moz-linear-gradient(left,#4591ed 0,#00c9ff 100%);background:-webkit-linear-gradient(left,#4591ed 0,#00c9ff 100%);background:linear-gradient(to right,#4591ed 0,#00c9ff 100%)}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor .algolia-docsearch-suggestion--text,.algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor .algolia-docsearch-suggestion--title{color:#bef0ff}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight,.algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor .algolia-docsearch-suggestion--title .algolia-docsearch-suggestion--highlight{color:#fff!important}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion em{font-weight:700;font-style:normal}.algolia-autocomplete .algolia-docsearch-footer{border:none;padding:.75rem 0 0 0}.theme-switcher{display:none;width:4rem;height:4rem;right:0;border:0;outline:0;background-color:#fafafc;color:#545667}.theme-switcher .icon{transition:color .25s ease}.theme-switcher .sun2{font-size:1.5rem}.theme-switcher .moon{font-size:1.2rem}.theme-switcher:hover{color:#4591ed;cursor:pointer}@media (max-width:500px){.navbar--logo .logotype{display:none}.navbar--logo .logo{display:inline}}@media (min-width:500px){.navbar--logo .logotype{display:inline}.navbar--logo .logo{display:none}}@media (min-width:900px){.theme-switcher{display:block}.navbar--product-dropdown{display:block;left:18rem;width:17rem}.navbar--product-container{left:18rem;width:17rem;top:2.9em}.navbar--product-container.open .navbar--dropdown-dismiss{width:100vw;height:100vh;position:fixed;top:0;left:0;z-index:100}.navbar--product-container.open .navbar--dropdown-dismiss:hover{cursor:pointer}.navbar--product-menu{border-radius:0 0 3px 3px;overflow:hidden;z-index:110}.navbar--search{left:35.5rem;width:calc(100% - 18rem - .5rem - .5rem - 4rem - 17rem)}.navbar--hamburger{display:none}.navbar--product.external{font-size:.8rem}}@media (min-width:1200px){.navbar--product-dropdown{left:23rem;width:17.5rem}.navbar--product-container{left:23rem;width:17.5rem}.navbar--search{left:41rem;width:calc(100% - 23rem - .5rem - .5rem - 4rem - 17.5rem)}}@media (min-width:1900px){.navbar--product-dropdown{left:28rem;width:17.5rem}.navbar--product-container{left:28rem;width:17.5rem}.navbar--search{left:46rem;width:calc(100% - 28rem - .5rem - .5rem - 4rem - 17.5rem)}}.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu{right:0!important;left:auto!important;overflow:scroll!important;max-height:90vh!important}.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu:before{display:none}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--wrapper{padding:.2rem 0}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column{display:none}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--content{padding:.75rem;width:100%;float:none}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--content:before{display:none}.algolia-autocomplete .algolia-docsearch-footer{padding:0}@media (min-width:1330px){.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu{right:auto!important;left:0!important}}@media (max-width:768px){.algolia-docsearch-suggestion--subcategory-column{display:none!important}.algolia-docsearch-suggestion--wrapper{margin:.25em 0!important}}@media (max-width:570px){.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu{position:fixed!important;top:3.5em!important;left:0;min-width:100vw}}.sidebar--toggle{padding:1em;position:relative;z-index:100;height:3rem;width:100%;background-color:#434453;text-align:left;font-style:italic;color:#f6f6f8;font-weight:500;transition:background-color .25s ease,color .25s ease}.sidebar--toggle:hover{color:#fff;background-color:#545667;cursor:pointer}.sidebar--toggle:after,.sidebar--toggle:before{content:\"\";position:absolute;display:block;right:1em;top:1.45em;height:2px;width:15px;background:#999dab}.sidebar--toggle:before{transform:rotate(90deg);transition:all .2s}.sidebar--toggle.open:before{transform:rotate(180deg)}.sidebar{background-color:#1c1c21;height:100%;overflow:hidden;transition:max-height .2s ease-out}.sidebar::-webkit-scrollbar{background-color:#1c1c21;width:16px}.sidebar::-webkit-scrollbar-track{background-color:#1c1c21}.sidebar::-webkit-scrollbar-thumb{border:4px solid #1c1c21;background-color:#676978;border-radius:8px}.sidebar.open{max-height:4000px;transition:max-height .5s ease-in}.sidebar--section{border-top:2px solid #292933;padding:2em 0}.sidebar--section:first-child{border:none}.sidebar--section-title{color:#4591ed;padding:0 2rem 1em 2rem;font-size:1.25em}.sidebar--section-title a:active,.sidebar--section-title a:link,.sidebar--section-title a:visited{color:#4591ed;font-weight:400}.sidebar--section-title a:hover{color:#fff}.sidebar--section ul{padding-left:3rem}.sidebar--section ul li{position:relative;margin-bottom:.25rem}ul.sidebar--children{margin-left:-1.85rem;height:0;overflow:hidden}ul.sidebar--children.open{height:auto;overflow:visible;border-left:2px solid #292933}ul.sidebar--children li:first-child{margin-top:.25rem}.sidebar--children-toggle{position:absolute;left:-2.25rem;top:.2rem;height:.9rem;width:.9rem;background:#434453;border-radius:50%;transition:all .2s}.sidebar--children-toggle:before{content:\"+\";color:#e7e8eb;display:block;text-align:center}.sidebar--children-toggle.open:before{content:\"–\"}.sidebar--children-toggle:hover{background:#4591ed}.sidebar--children-toggle:hover:before{color:#fff}a.sidebar--page:active,a.sidebar--page:link,a.sidebar--page:visited{display:inline-block;color:#bec2cc;font-weight:500;text-indent:-1rem;line-height:1.25}a.sidebar--page:hover{color:#fff}@media (max-width:900px){.sidebar{height:auto;max-height:0}}@media (min-width:900px){.sidebar--toggle{display:none}.sidebar,.sidebar.open{position:fixed;z-index:100;width:18rem;transform:none;transition:none;top:4rem;max-height:100%;overflow:auto;padding-bottom:4rem}}@media (min-width:1200px){.sidebar,.sidebar.open{width:23rem}}@media (min-width:1900px){.sidebar,.sidebar.open{width:28rem}.sidebar--support-ad{padding:2rem 1.5rem}.sidebar--support-ad--desc{font-size:1.2em}}#sidebar--ad{margin:-.75rem 1rem;border-radius:3px}#sidebar--ad.cloud{background:linear-gradient(45deg,#9394ff,#22adf6);padding:1.5rem 1.5rem;text-align:center}#sidebar--ad.cloud .text{margin:0 0 1rem 0;color:#fff;line-height:1.3em;font-size:1.1em;font-weight:500}#sidebar--ad.cloud .cta{margin-left:0;margin-right:0;border-radius:3px;color:#fff;border:2px solid rgba(255,255,255,.4);background-color:transparent;transition:background-color .25s ease,border-color .25s ease;padding:.75em 1.5em;font-weight:700;display:inline-block;font-size:1.125em}#sidebar--ad.cloud .cta:hover{background-color:rgba(255,255,255,.15);border-color:rgba(255,255,255,.6)}#sidebar--ad.enterprise{background:linear-gradient(to right,#4ed8a0,#22adf6);padding:1.5rem 1.5rem;text-align:center}#sidebar--ad.enterprise .text{margin:0 0 1rem 0;color:#fff;line-height:1.3em;font-weight:500}#sidebar--ad.enterprise .cta{margin-left:0;margin-right:0;border-radius:3px;color:#fff;border:2px solid rgba(255,255,255,.4);background-color:transparent;transition:background-color .25s ease,border-color .25s ease;padding:.75em 1.5em;font-weight:700;display:inline-block;font-size:1.125em}#sidebar--ad.enterprise .cta:hover{background-color:rgba(255,255,255,.15);border-color:rgba(255,255,255,.6)}#sidebar--ad.influx-days{padding:1rem;background:url(/promos/assets/influx-days-bg.jpg);background-repeat:no-repeat;background-size:cover;color:#fff;font-weight:700}#sidebar--ad.influx-days img{margin:.4rem 0 .8rem}#sidebar--ad.influx-days .text{font-size:1.75rem;margin-bottom:.5rem}#sidebar--ad.influx-days .details{font-size:.9rem;line-height:1.1rem}#sidebar--ad.influx-days .cta{display:inline-block;margin-top:.85rem;color:#fff;background:#5cbb47;font-size:1.15rem;padding:.45rem 1.75rem;border-radius:3px}::selection{background-color:#757888;color:#fff}::-moz-selection{background-color:#757888;color:#fff}a{text-decoration:none;transition:color .2s ease}a:hover{cursor:pointer}.article{background-color:#202028;overflow:auto;width:100%}.article::-webkit-scrollbar{background-color:#202028;width:16px}.article::-webkit-scrollbar-track{background-color:#202028}.article::-webkit-scrollbar-thumb{border:4px solid #202028;background-color:#676978;border-radius:8px}.article-section{display:block;width:100%;text-align:center;padding:2rem}.article-section.article-heading{background-color:#2c2c38;background-position:center center;background-size:cover!important;background-repeat:no-repeat}.article-section.article-heading h1{margin-bottom:0}.article-section.article-footer{background:#292933;background:-moz-linear-gradient(top,#292933 0,#202028 100%);background:-webkit-linear-gradient(top,#292933 0,#202028 100%);background:linear-gradient(to bottom,#292933 0,#202028 100%)}.article-content{text-align:left;width:100%;max-width:760px;color:#bec2cc}.article-content a:active,.article-content a:link,.article-content a:visited{font-weight:700;color:#4591ed}.article-content a:hover{color:#00c9ff;cursor:pointer}.article-content a.top{font-size:6px;padding:.25rem .25rem .35rem;border-radius:3px;transition:all .2s}.article-content a.top:hover{color:#202028!important;background:#00c9ff}.article-content a.off-page:link:after{content:'\\ea43';font-family:icomoon;font-size:.75em;font-weight:400;vertical-align:bottom;display:inline;margin-left:.5em;opacity:.25;transition:color .2s ease;color:#bec2cc}.article-content li a code,.article-content p a code{position:relative}.article-content li a code:after,.article-content p a code:after{content:\"\";position:absolute;top:-1px;right:-1px;width:0;height:0;border-style:solid;border-width:0 .5em .5em 0;border-color:transparent #b1b6ff transparent transparent;opacity:.5;transition:all .2s}.article-content li a code:hover:after,.article-content p a code:hover:after{opacity:1;border-color:transparent #00c9ff transparent transparent}.article-content li a.btn,.article-content p a.btn{display:inline-block;color:#fff;font-size:.95rem;padding:.5em 1em;margin:1em 0 1.5em}.article-content li a.btn.download:before,.article-content p a.btn.download:before{content:'\\e964';font-family:icomoon;font-size:1.15em;font-weight:400;vertical-align:bottom;display:inline;margin-right:.5em}.article-content>*{text-decoration:none}.article-content .note,.article-content .warn,.article-content blockquote,.article-content dt,.article-content h1,.article-content h2,.article-content h3,.article-content h4,.article-content li,.article-content ol,.article-content p,.article-content pre,.article-content ul{display:block;margin-bottom:1em;line-height:1.45em}.article-content table{margin:1em 0 1em;overflow-x:auto;background-color:#202028}.article-content h1,.article-content h2,.article-content h3,.article-content h4,.article-content h5,.article-content h6{width:100%;color:#f6f6f8}.article-content h1 a.offset-anchor,.article-content h2 a.offset-anchor,.article-content h3 a.offset-anchor,.article-content h4 a.offset-anchor,.article-content h5 a.offset-anchor,.article-content h6 a.offset-anchor{display:block;position:relative;top:-120px;visibility:hidden}.article-content h1 a:active,.article-content h1 a:hover,.article-content h1 a:link,.article-content h1 a:visited,.article-content h2 a:active,.article-content h2 a:hover,.article-content h2 a:link,.article-content h2 a:visited,.article-content h3 a:active,.article-content h3 a:hover,.article-content h3 a:link,.article-content h3 a:visited,.article-content h4 a:active,.article-content h4 a:hover,.article-content h4 a:link,.article-content h4 a:visited,.article-content h5 a:active,.article-content h5 a:hover,.article-content h5 a:link,.article-content h5 a:visited,.article-content h6 a:active,.article-content h6 a:hover,.article-content h6 a:link,.article-content h6 a:visited{text-decoration:none;font-weight:inherit;color:#f6f6f8!important}.article-content h1:first-child,.article-content h2:first-child,.article-content h3:first-child,.article-content h4:first-child,.article-content h5:first-child,.article-content h6:first-child{margin-top:0}.article-content h1{font-size:2.2em;font-family:Klavika-Light,'Helvetica Neue',Helvetica,Helvetica,Arial,Tahoma,Verdana,sans-serif;font-weight:200;line-height:1.2em}.article-content h2{font-size:1.9em;font-weight:600;margin:1.5em 0 .5em}.article-content h3{font-size:1.5em;font-weight:700;margin:1em 0 .5em}.article-content h4{font-size:1.3em;font-weight:400;font-style:italic;margin:1.25em 0 .5em}.article-content h5{line-height:1.6em}.article-content h6{font-size:.95em;font-style:italic;line-height:1.6em}.article-content.section-landing h2 a.off-page:link:hover{color:#4591ed!important}.article-content p{font-size:1em}.article-content ol,.article-content ul{font-size:1em;padding-left:1.125em}.article-content ol li,.article-content ul li{display:list-item;list-style-position:outside;padding-left:.5em;margin-bottom:.25em}.article-content ol p,.article-content ul p{margin-left:0}.article-content ul>li{list-style-type:disc!important}.article-content ol li,.article-content ul ol li{list-style-type:decimal}.article-content ol ol li{list-style-type:lower-alpha}.article-content ol ol ol li{list-style-type:decimal}.article-content ul ul ul li{list-style-type:square}.article-content li:last-child{margin-bottom:0}.article-content ol ol,.article-content ol ul,.article-content ul ol,.article-content ul ul{width:100%;margin-left:0;margin-bottom:0;margin-top:.25em}.article-content hr{width:100%;height:2px;margin-top:.25em;margin-bottom:1em;border:none;display:block;background-color:#2c2c38}.article-content img{max-width:100%;height:auto;border-radius:3px}.article-content td,.article-content th{border:1px solid #2c2c38;font-size:.875em;line-height:1.2em;padding:.75em 1.5em}.article-content tr:nth-child(even){background-color:#1c1c21}.article-content thead tr{background-color:#292933!important}.article-content thead th{padding:1.25em 1.5em}.article-content .note,.article-content .warn,.article-content blockquote,.article-content dt{font-size:.9em;padding:1em 1.5em;border-radius:3px;border-style:solid;border-left-width:6px}.article-content .note h4,.article-content .note ol,.article-content .note p,.article-content .note pre,.article-content .note ul,.article-content .warn h4,.article-content .warn ol,.article-content .warn p,.article-content .warn pre,.article-content .warn ul,.article-content blockquote h4,.article-content blockquote ol,.article-content blockquote p,.article-content blockquote pre,.article-content blockquote ul,.article-content dt h4,.article-content dt ol,.article-content dt p,.article-content dt pre,.article-content dt ul{width:100%;margin-left:0}.article-content .note>:last-child,.article-content .warn>:last-child,.article-content blockquote>:last-child,.article-content dt>:last-child{margin-bottom:0}.article-content .note .tooltip,.article-content .warn .tooltip,.article-content blockquote .tooltip,.article-content dt .tooltip{color:#fff}.article-content .note,.article-content blockquote{font-style:italic;color:#4ed8a0;border-color:#4ed8a0;background-color:#292933}.article-content .note code,.article-content blockquote code{color:#b1b6ff;background:#1c1c21;border:1px solid #3c4b4c}.article-content .note pre,.article-content blockquote pre{background:#1c1c21;border-color:#3c4b4c}.article-content .note pre code,.article-content blockquote pre code{border:none}.article-content .warn,.article-content dt{color:#ff8564;border-color:#ff8564;background-color:#292933}.article-content .warn code,.article-content dt code{color:#b1b6ff;background:#1c1c21;border:1px solid #673c2c}.article-content .warn pre,.article-content dt pre{background:#1c1c21;border-color:#673c2c}.article-content .warn pre code,.article-content dt pre code{border:none}.article-content code{font-family:Consolas,\"Lucida Console\",Monaco,monospace;-moz-tab-size:1;-o-tab-size:1;tab-size:1;direction:ltr;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;font-size:.8em!important;font-style:normal!important;display:inline;border-radius:3px;border-width:1px;border-color:#2c2c38;border-style:solid;padding:.1em .5em;-webkit-font-smoothing:subpixel-antialiased!important;-moz-osx-font-smoothing:auto!important;font-weight:400!important;color:#b1b6ff;background-color:#1c1c21}.article-content pre{display:block;padding:.75em 1em;overflow:auto;border-radius:3px;border-style:solid;border-width:1px 1px 1px 6px;background-color:#1c1c21;border-color:#2c2c38;z-index:99;line-height:1.1em!important}.article-content pre code{white-space:pre;word-spacing:normal;word-break:normal;border:none;padding:0;border-radius:0;background-color:transparent}.article-content pre::-webkit-scrollbar{background-color:#1c1c21;width:16px}.article-content pre::-webkit-scrollbar-track{background-color:#1c1c21}.article-content pre::-webkit-scrollbar-thumb{border:4px solid #1c1c21;background-color:#2c2c38;border-radius:calc(16px / 2)}.page-nav-btns{display:flex;position:relative;justify-content:space-between;margin:3em 0 2em}.page-nav-btns a{display:flex;align-items:center;color:#fff!important;font-size:.95rem;padding:.75rem 1rem;margin:0 .15rem}.page-nav-btns a.prev{position:absolute;left:0}.page-nav-btns a.prev:before{content:'\\e804';font-family:icomoon;font-size:.85rem;font-weight:400;vertical-align:middle;display:inline;margin-right:.85rem}.page-nav-btns a.next{position:absolute;right:0}.page-nav-btns a.next:after{content:'\\e805';font-family:icomoon;font-size:.85rem;font-weight:400;vertical-align:middle;display:inline;margin-left:.85rem}.truncate{position:relative;margin-bottom:3.5rem}.truncate .truncate-bottom{position:absolute;bottom:-30px;width:100%;z-index:100%;height:auto}.truncate a.truncate-toggle{display:block;width:100px;margin:0 auto;color:#bec2cc;background:#202028;padding:.45rem;text-align:center;font-size:.75rem;text-transform:uppercase;border-radius:3px;transition:color .2s}.truncate a.truncate-toggle:before{content:\"Show Less\"}.truncate a.truncate-toggle:hover{color:#4591ed}.truncate.closed{min-height:200px;max-height:25vh;overflow:hidden}.truncate.closed .truncate-bottom{bottom:0;background-image:linear-gradient(to bottom,rgba(32,32,40,0),#202028);height:100px}.truncate.closed a.truncate-toggle{margin-top:75px}.truncate.closed a.truncate-toggle:before{content:\"Show More\"}.tooltip{position:relative;display:inline-block;z-index:10;font-weight:900;color:#32b08c}.tooltip-container{position:absolute;top:0;left:50%;transform:translateX(-50%);overflow:visible;visibility:hidden}.tooltip-text{font-weight:600;line-height:2em;height:2em;position:absolute;border-radius:3px;padding:0 .75em;font-size:.9rem;left:50%;transform:translate(-50%,-1.875rem);transition:all .2s ease;white-space:nowrap;opacity:0;font-style:normal!important;color:#434453;background-color:#f6f6f8}.tooltip-text:after{content:'';position:absolute;left:50%;bottom:-14px;transform:translateX(-50%);border-top:8px solid #f6f6f8;border-right:8px solid transparent;border-bottom:8px solid transparent;border-left:8px solid transparent}.tooltip:hover .tooltip-container{visibility:visible}.tooltip:hover .tooltip-text{opacity:1;transform:translate(-50%,-2rem)}.old-version{width:100%;display:inline-block;border-radius:3px;font-size:1em;line-height:1.25em;padding:1.5em 1.5em 1.5em 4em;color:#ff8564;background-color:#292933;position:relative;margin-bottom:1em}.old-version:after{content:\"\\ea0a\";font-family:icomoon;position:absolute;top:50%;left:2em;transform:translate(-50%,-50%) scale(1.5,1.5);font-size:1em}.section-landing h2.no-paragraph{margin:0 0 1rem;border:none}.view-in-chronograf{display:flex;justify-content:flex-end;position:relative;background-color:#2c2c38;margin-top:-1.1rem;margin-bottom:1rem;padding:.15rem;font-size:.8rem;border-radius:0 0 3px 3px;align-items:center}.view-in-chronograf .chronograf-btn{display:inline-block;padding:.45rem .6rem;color:#fff!important;background:linear-gradient(to left,#9394ff,#22adf6);border-radius:calc(3px / 2);transition:all .5s ease}.view-in-chronograf .chronograf-btn:after{content:'\\e801';margin-left:.4rem;font-family:icomoon}.view-in-chronograf .chronograf-btn:hover{color:#fff!important;opacity:1}.view-in-chronograf .settings{opacity:.25;color:#bec2cc!important;margin-right:.75em;transition:opacity .2s ease}.view-in-chronograf .settings:hover{opacity:1}.modal-overlay{display:none;position:fixed;z-index:1000;left:0;top:0;width:100%;height:100%;overflow:auto;opacity:.75;background:linear-gradient(#9394ff,#4591ed)}.modal-content{display:none;background:#202028;padding:2rem 2rem 1.5rem;border-radius:3px;position:fixed;top:10vh;left:50%;transform:translateX(-50%);z-index:1001;width:90vw;max-width:38rem;transition:top .4s ease}.modal-content.open{top:40vh}.modal-content input{width:100%;min-width:10rem;border-radius:3px;border:2px solid #383846;background-color:#383846;padding:.5rem;font-weight:400;font-size:1rem;outline:0;transition:border-color .3s ease,color .3s ease}.modal-content input:focus{border-color:#22adf6}.modal-content button{border:none;outline:0}.modal-content button:focus{background:#4591ed!important}.modal-content label{display:block;margin-bottom:.4rem;font-weight:600}#default-chronograf-url{display:inline-block;margin:.5rem 0 0 .25rem;font-size:.8rem;font-style:italic;font-weight:400}#default-chronograf-url:hover{text-transform:underline}.flex-form{display:flex;justify-content:space-between}.flex-form .save-btn{width:5.5rem;margin:0 0 0 .25rem;text-align:center;padding:.75rem 1rem;color:#fff;border-radius:3px;font-weight:600;transition:background .2s}@media (max-width:500px){.flex-form{flex-flow:column}.flex-form .save-btn{width:100%;margin:.25rem 0 0}#default-chronograf-url{display:block;margin:1rem auto 0}}#save-chronograf-url button{background:#9394ff}#save-chronograf-url button:hover{background:#4591ed}@media (min-width:900px){.article{padding-left:18rem}.article-section{padding:3rem}.article-content code,.article-content pre,.article-content td,.article-content th{border-width:2px}.article-content pre{border-left-width:6px}}@media (min-width:1200px){.article{padding-left:23rem}.article-section{padding:4.5rem}.old-version{width:60%}}@media (min-width:1900px){.article{padding-left:28rem}.article-section{padding:5rem 11rem}.article-content{font-size:1.125rem}}.homepage{overflow:auto;min-height:calc(100vh - 4rem);width:100%;z-index:2;background:#2c2c38;background:-moz-linear-gradient(left,#2c2c38 0,#0f0e15 100%);background:-webkit-linear-gradient(left,#2c2c38 0,#0f0e15 100%);background:linear-gradient(to right,#2c2c38 0,#0f0e15 100%);font-size:0;display:flex;flex-direction:column;flex-wrap:wrap;justify-content:space-between}.homepage .cards-enterprise,.homepage .cards-oss,.homepage .cards-special{display:flex;flex-direction:row;width:100%;flex-wrap:wrap;flex:1}.homepage--card{width:100%;display:inline-block;overflow:hidden;position:relative}.homepage--card-mask{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.1;transition:opacity .75s ease,transform .75s ease;z-index:1;background-attachment:scroll;background-size:cover;background-position:center center;background-repeat:no-repeat;transform:scale(1,1)}.homepage--card:hover .homepage--card-mask{opacity:1;transform:scale(1.2,1.2)}.homepage--card:hover .homepage--card-title{color:#fff!important}.homepage--card-container{position:relative;z-index:2;width:100%;display:inline-block;text-align:center;padding:4rem 3rem;font-size:0}.homepage--card-container a:active,.homepage--card-container a:link,.homepage--card-container a:visited{color:#4591ed;transition:color .25s ease;text-decoration:none}.homepage--card-container a:hover{color:#00c9ff}.homepage--card-description,.homepage--card-title{text-align:left;display:inline-block;width:100%;vertical-align:middle}.homepage--card-title{font-size:2rem;font-family:Klavika-Light,sans-serif;font-weight:200;font-style:italic;color:#4591ed;margin-bottom:.5em;transition:color .75s ease}.homepage--card-description{font-size:1rem;color:#bec2cc;line-height:1.4em;font-weight:400}.homepage--card-link{display:inline-block;font-size:.875rem;font-weight:600;margin-left:.25rem;padding:2px 11px;border-radius:3px}.homepage--card-link:first-of-type{margin-top:1rem}.homepage--card.card-telegraf .homepage--card-mask{background-image:url(/img/home-telegraf.svg);background-color:#f95f53}.homepage--card.card-telegraf .homepage--card-description{color:#fff}.homepage--card.card-telegraf .homepage--card-title{color:#ff8564}.homepage--card.card-telegraf a.homepage--card-link:active,.homepage--card.card-telegraf a.homepage--card-link:link,.homepage--card.card-telegraf a.homepage--card-link:visited{color:#fff;transition:background-color .25s ease,color .25s ease}.homepage--card.card-telegraf a.homepage--card-link:hover{color:#ff8564;background-color:#fff}.homepage--card.card-influxdb .homepage--card-mask{background-image:url(/img/home-influxdb.svg);background-color:#4591ed}.homepage--card.card-influxdb .homepage--card-description{color:#fff}.homepage--card.card-influxdb .homepage--card-title{color:#00c9ff}.homepage--card.card-influxdb a.homepage--card-link:active,.homepage--card.card-influxdb a.homepage--card-link:link,.homepage--card.card-influxdb a.homepage--card-link:visited{color:#fff;transition:background-color .25s ease,color .25s ease}.homepage--card.card-influxdb a.homepage--card-link:hover{color:#22adf6;background-color:#fff}.homepage--card.card-chronograf .homepage--card-mask{background-image:url(/img/home-chronograf.svg);background-color:#7a65f2}.homepage--card.card-chronograf .homepage--card-description{color:#fff}.homepage--card.card-chronograf .homepage--card-title{color:#9394ff}.homepage--card.card-chronograf a.homepage--card-link:active,.homepage--card.card-chronograf a.homepage--card-link:link,.homepage--card.card-chronograf a.homepage--card-link:visited{color:#fff;transition:background-color .25s ease,color .25s ease}.homepage--card.card-chronograf a.homepage--card-link:hover{color:#9394ff;background-color:#fff}.homepage--card.card-kapacitor .homepage--card-mask{background-image:url(/img/home-kapacitor.svg);background-color:#4ed8a0}.homepage--card.card-kapacitor .homepage--card-description{color:#fff}.homepage--card.card-kapacitor .homepage--card-title{color:#4ed8a0}.homepage--card.card-kapacitor a.homepage--card-link:active,.homepage--card.card-kapacitor a.homepage--card-link:link,.homepage--card.card-kapacitor a.homepage--card-link:visited{color:#fff;transition:background-color .25s ease,color .25s ease}.homepage--card.card-kapacitor a.homepage--card-link:hover{color:#4ed8a0;background-color:#fff}.homepage--card.card-enterprise_kapacitor .homepage--card-mask{background-image:url(/img/home-kapacitor.svg);background-color:#4ed8a0}.homepage--card.card-enterprise_kapacitor .homepage--card-description{color:#fff}.homepage--card.card-enterprise_kapacitor .homepage--card-title{color:#4ed8a0}.homepage--card.card-enterprise_kapacitor a.homepage--card-link:active,.homepage--card.card-enterprise_kapacitor a.homepage--card-link:link,.homepage--card.card-enterprise_kapacitor a.homepage--card-link:visited{color:#fff;transition:background-color .25s ease,color .25s ease}.homepage--card.card-enterprise_kapacitor a.homepage--card-link:hover{color:#4ed8a0;background-color:#fff}.homepage--card.card-enterprise_influxdb .homepage--card-mask{background-image:url(/img/home-influxdb.svg);background-color:#4591ed}.homepage--card.card-enterprise_influxdb .homepage--card-description{color:#fff}.homepage--card.card-enterprise_influxdb .homepage--card-title{color:#00c9ff}.homepage--card.card-enterprise_influxdb a.homepage--card-link:active,.homepage--card.card-enterprise_influxdb a.homepage--card-link:link,.homepage--card.card-enterprise_influxdb a.homepage--card-link:visited{color:#fff;transition:background-color .25s ease,color .25s ease}.homepage--card.card-enterprise_influxdb a.homepage--card-link:hover{color:#22adf6;background-color:#fff}.homepage--card.card-flux .homepage--card-mask{background-image:url(/img/home-flux.svg);background-color:#15a194;opacity:1}.homepage--card.card-flux .homepage--card-description{color:#fff}.homepage--card.card-flux .homepage--card-title{color:#fff}.homepage--card.card-flux a.homepage--card-link:active,.homepage--card.card-flux a.homepage--card-link:link,.homepage--card.card-flux a.homepage--card-link:visited{color:#fff;transition:background-color .25s ease,color .25s ease}.homepage--card.card-flux a.homepage--card-link:active.download,.homepage--card.card-flux a.homepage--card-link:link.download,.homepage--card.card-flux a.homepage--card-link:visited.download{display:none}.homepage--card.card-flux a.homepage--card-link:hover{color:#32b08c;background-color:#fff}.homepage--card.card-platform{width:100%;background:linear-gradient(to right,#4591ed,#22adf6);display:flex;align-items:center}.homepage--card.card-platform .homepage--card-container{padding-bottom:3rem}.homepage--card.card-platform .homepage--card-mask{background-image:url(/img/home-influxdb.svg);background-color:#4591ed;opacity:.9}.homepage--card.card-platform .homepage--card-description{color:#fff;text-align:center}.homepage--card.card-platform .homepage--card-title{color:#fff;text-align:center;font-size:2.15rem}.homepage--card.card-platform a.homepage--card-link:active,.homepage--card.card-platform a.homepage--card-link:link,.homepage--card.card-platform a.homepage--card-link:visited{color:#fff;transition:background-color .25s ease,color .25s ease}.homepage--card.card-platform a.homepage--card-link:hover{color:#22adf6;background-color:#fff}.homepage--card.card-platform a.btn{margin:1.75rem 0 1rem;padding:1em 1.5em;display:inline-block;background:#fff;color:#22adf6;border-radius:3px;font-size:1rem;font-weight:700;transition:all .2s;box-shadow:0 0 15px rgba(255,255,255,0)}.homepage--card.card-platform a.btn:hover{box-shadow:0 0 15px #fff}@media (min-width:900px){.homepage--card{width:50%;flex-grow:1}}@media (min-width:1200px){.homepage--card-container{padding:3.5rem}.homepage--card-description{font-size:1.075rem}.homepage--card{width:25%;height:auto}.homepage--card.card-platform{width:75%}.homepage--card.card-enterprise_influxdb,.homepage--card.card-enterprise_kapacitor{width:50%}}@media (min-width:1900px){.homepage--card-container{padding:4rem}.homepage--card-description{font-size:1.125rem}}.error-page{overflow:scroll;top:4rem;height:100%;width:100%;background:#fafafc;background:-moz-linear-gradient(top,#fafafc 0,#f0fcff 100%);background:-webkit-linear-gradient(top,#fafafc 0,#f0fcff 100%);background:linear-gradient(to bottom,#fafafc 0,#f0fcff 100%)}.error-content{margin:15vh auto;width:85%;max-width:400px;min-width:240px;font-size:15px;line-height:19px;color:#676978}.error-content h1{color:#4591ed;display:block;margin:0 auto 50px;padding-top:15px;width:212px;height:212px;border-radius:50%;text-align:center;font-size:90px;font-weight:200;line-height:180px;position:relative;border:2px solid #4591ed}.flex{display:flex;justify-content:space-around}.wayfinding{margin-bottom:2rem}.btn{display:block;padding:.5rem;background:#4591ed;color:#fff;border-radius:3px;text-align:center;transition:background .2s}.btn.back{flex-grow:1;margin-right:.35rem}.btn.back:before{content:\"\\ea41\";font-family:icomoon;margin-right:.5rem;font-size:1rem}.btn.project{flex-grow:3;display:none}.btn.project:before{content:\"\\e801\";font-family:icomoon;margin-right:.5rem;flex-grow:3}.btn:hover{background:#22adf6}@media (min-width:900px){.error-content{font-size:17px;line-height:22px}}@media (min-width:1900px){.error-content{font-size:21px;line-height:32px}}.tabs-container{margin:2em 0 2em}.tabs{flex-grow:1;border-radius:3px 0 0 3px}.tabs p{display:flex;flex-wrap:wrap}.tabs a{flex-grow:1;margin:2px;font-size:.875em;color:#bec2cc!important;padding:.5em 1em;display:inline-block;text-align:center;border-radius:3px;background-color:rgba(56,56,70,.5);transition:background-color .2s,color .2s}.tabs a:hover{color:#f6f6f8!important}.tabs a.is-active{color:#fff!important;background:#4591ed}.tab-content{width:100%}.tab-content>*{width:100%!important;margin-left:0!important}.tab-content:not(:first-child){display:none}.tab-content-container{position:relative;border-radius:0 3px 3px 3px}.code-tabs-content{margin:.75rem 0 3rem;width:100%}.code-tabs-content>*{width:100%!important;margin-left:0!important}.code-tabs-wrapper{margin:1.5rem 0 .5rem}.code-tabs-wrapper .code-tabs p{margin:0;text-align:right;display:block;font-size:.9rem}.code-tabs-wrapper .code-tabs a{padding:.25rem .75rem;margin:0;border-radius:3px 3px 0 0;display:inline-block;background:rgba(44,44,56,.6);color:rgba(190,194,204,.5)!important}.code-tabs-wrapper .code-tabs a:hover{color:#f6f6f8!important}.code-tabs-wrapper .code-tabs a.is-active{background-color:#2c2c38;color:#f6f6f8!important}.code-tabs-wrapper .code-tab-content{padding:0}.code-tabs-wrapper .code-tab-content pre{margin:0 0 3rem;border-radius:3px 0 3px 3px}.code-tabs-wrapper .code-tab-content:not(:first-of-type){display:none}@media (min-width:900px){.tabs-container .tabs a{flex-grow:0}}.plugin-card{position:relative;padding:1rem 1.5rem;margin-bottom:.5rem;justify-content:center;align-items:center;background:#1c1c21;border-radius:3px}.plugin-card h3{padding:0;margin-top:.25rem}.plugin-card.new h3:after{content:\"New\";margin-left:.3rem;padding:.25rem .5rem;font-style:italic;color:#4591ed;font-size:1.2rem}.plugin-card p.meta{margin:.75rem 0;font-weight:500;color:#bec2cc;line-height:1.75rem}.plugin-card p.meta .deprecated{margin-left:.5rem;font-style:italic;color:#e90}.plugin-card .info>p:last-child{margin-bottom:.5rem}.plugin-card .info>ul:last-child{margin-bottom:.5rem}.plugin-card .info>ol:last-child{margin-bottom:.5rem}.plugin-card .github-link{position:absolute;color:#fff!important;top:.5rem;right:.5rem;opacity:0;transition:opacity .2s,background .2s,color 2s}.plugin-card .github-link .icon-github{font-size:1.2rem;margin:0 .25rem 0 0}.plugin-card:hover .github-link{opacity:1}.plugin-card blockquote{border-color:#4ed8a0;background:rgba(41,41,51,.5)}.plugin-card blockquote h3,.plugin-card blockquote h4,.plugin-card blockquote h5,.plugin-card blockquote h6{color:#f6f6f8}.plugin-card blockquote li,.plugin-card blockquote p{color:#4ed8a0;font-size:1rem;font-style:normal}.plugin-card blockquote strong{color:inherit}.plugin-card blockquote a{color:#ff8564}.plugin-card blockquote a code:after{border-color:transparent rgba(177,182,255,.35) transparent transparent}.plugin-card blockquote a:hover{color:#fff}.plugin-card blockquote a:hover code:after{border-color:transparent #fff transparent transparent}.plugin-card blockquote ol li:before{color:#4ed8a0}.plugin-card blockquote code,.plugin-card blockquote pre{color:#b1b6ff;background:#1c1c21}#plugin-filters{display:flex;flex-flow:row wrap;align-items:flex-start}#plugin-filters .filter-category{flex:1 1 200px;margin:0 1.25rem 1.25rem 0;max-width:33%}#plugin-filters .filter-category.two-columns{flex:1 2 400px;max-width:66%}#plugin-filters .filter-category.two-columns .filter-list{columns:2}#plugin-filters h5{border-bottom:1px solid rgba(190,194,204,.25);padding-bottom:.65rem}#plugin-filters .filter-list{padding:0;margin:.5rem 0 0;list-style:none}#plugin-filters .filter-list li{padding:0;margin:0;line-height:1.35rem;list-style-type:none!important}#plugin-filters label{display:block;padding:.25rem 0;color:#bec2cc;position:relative}#plugin-filters label:after{content:attr(data-count);margin-left:.25rem;font-size:.85rem;opacity:.5}#plugin-filters .checkbox{display:inline-block;height:1.15em;width:1.15em;background:rgba(190,194,204,.05);margin-right:.3rem;vertical-align:text-top;border-radius:3px;cursor:pointer;border:1.5px solid rgba(190,194,204,.2);user-select:none}#plugin-filters input[type=checkbox]{margin-right:-1.1rem;padding:0;vertical-align:top;opacity:0;cursor:pointer}#plugin-filters input[type=checkbox]+.checkbox:after{content:\"\";display:block;position:absolute;height:.5rem;width:.5rem;border-radius:50%;background:#ff8564;top:.65rem;left:.35rem;opacity:0;transform:scale(2);transition:all .2s}#plugin-filters input[type=checkbox]:checked+.checkbox:after{opacity:1;transform:scale(1)}@media (max-width:1100px){#plugin-filters .filter-category{max-width:50%}#plugin-filters .filter-category.three-columns,#plugin-filters .filter-category.two-columns{max-width:100%}}@media (max-width:800px){#plugin-filters .filter-category{max-width:100%}.plugin-card .github-link{opacity:1;padding:.25rem .35rem .35rem;line-height:0;font-size:1.35rem}.plugin-card .github-link .icon-github{margin:0}.plugin-card .github-link .hide{display:none}}@media (min-width:900px){body{padding-bottom:0}}.article-content .flex-wrapper{display:flex;flex-wrap:wrap}.article-content .flex-container{margin-right:2rem}.article-content .flex-container.half{width:calc(50% - 2rem)}.article-content .flex-container.third{width:calc(33.33% - 2rem)}.article-content .flex-container.quarter{width:calc(25% - 2rem)}.article-content .flex-container.quarter{width:calc(50% - 2rem)}svg[id^=geo-s2-cells-] .geo-cell{fill:rgba(34,173,246,.25);stroke:#22adf6;stroke-width:3;stroke-linejoin:round;stroke-miterlimit:10}svg[id^=geo-s2-cells-] .geo-region{fill:rgba(122,101,242,.35);stroke:#7a65f2;stroke-width:3;stroke-linejoin:round;stroke-miterlimit:10}svg[id^=geo-s2-cells-] .geo-point{fill:#ff8564}span.key-geo-cell{display:inline-block;vertical-align:middle;margin:0 .5rem .25rem 0;width:1.1em;height:1.1em;border:2px solid #22adf6;background:rgba(34,173,246,.25);border-radius:2px}span.key-geo-region{display:inline-block;vertical-align:middle;margin:0 .5rem .25rem 0;width:1.1em;height:1.1em;border:2px solid #7a65f2;background:rgba(122,101,242,.35);border-radius:2px}span.key-geo-point{display:inline-block;margin:0 .7rem 0 .25rem;width:.65rem;height:.65rem;border-radius:50%;background:#ff8564}body.docs-theme--telegraf .article-content a:active,body.docs-theme--telegraf .article-content a:link,body.docs-theme--telegraf .article-content a:visited{color:#ff8564}body.docs-theme--telegraf .article-content a:hover{color:#fff}body.docs-theme--telegraf .article-content a.top:hover{background:#fff}body.docs-theme--telegraf .article-content a.btn{background:#ff8564}body.docs-theme--telegraf .article-content a.btn:hover{background:#ffb6a0}body.docs-theme--telegraf .article-content.section-landing h2 a.off-page:link:hover{color:#ff8564!important}body.docs-theme--telegraf .sidebar--mask-container .sidebar--mask{background:#ff8564;background:-moz-linear-gradient(top,#ff8564 0,#7a65f2 100%);background:-webkit-linear-gradient(top,#ff8564 0,#7a65f2 100%);background:linear-gradient(to bottom,#ff8564 0,#7a65f2 100%)}body.docs-theme--telegraf .sidebar--section-title a:active,body.docs-theme--telegraf .sidebar--section-title a:link,body.docs-theme--telegraf .sidebar--section-title a:visited{color:#ff8564;font-weight:400}body.docs-theme--telegraf .sidebar--section-title a:hover{color:#fff}body.docs-theme--telegraf a.sidebar--page:hover{color:#fff}body.docs-theme--telegraf .navbar--product-dropdown{background-color:#ff8564}body.docs-theme--telegraf .navbar--product-dropdown:hover{background-color:#ffb6a0}body.docs-theme--telegraf .navbar--product-menu{background:#ff8564;background:-moz-linear-gradient(top,#ff8564 0,#7a65f2 100%);background:-webkit-linear-gradient(top,#ff8564 0,#7a65f2 100%);background:linear-gradient(to bottom,#ff8564 0,#7a65f2 100%)}body.docs-theme--telegraf .tabs a.is-active{background:#ff8564}body.docs-theme--chronograf .article-content a:active,body.docs-theme--chronograf .article-content a:link,body.docs-theme--chronograf .article-content a:visited{color:#9394ff}body.docs-theme--chronograf .article-content a:hover{color:#fff}body.docs-theme--chronograf .article-content a.top:hover{background:#fff}body.docs-theme--chronograf .article-content a.btn{background:#9394ff}body.docs-theme--chronograf .article-content a.btn:hover{background:#b1b6ff}body.docs-theme--chronograf .article-content.section-landing h2 a.off-page:link:hover{color:#9394ff!important}body.docs-theme--chronograf .sidebar--mask-container .sidebar--mask{background:#9394ff;background:-moz-linear-gradient(top,#9394ff 0,#4591ed 100%);background:-webkit-linear-gradient(top,#9394ff 0,#4591ed 100%);background:linear-gradient(to bottom,#9394ff 0,#4591ed 100%)}body.docs-theme--chronograf .sidebar--section-title a:active,body.docs-theme--chronograf .sidebar--section-title a:link,body.docs-theme--chronograf .sidebar--section-title a:visited{color:#9394ff;font-weight:400}body.docs-theme--chronograf .sidebar--section-title a:hover{color:#fff}body.docs-theme--chronograf a.sidebar--page:hover{color:#fff}body.docs-theme--chronograf .navbar--product-dropdown{background-color:#9394ff}body.docs-theme--chronograf .navbar--product-dropdown:hover{background-color:#b1b6ff}body.docs-theme--chronograf .navbar--product-menu{background:#9394ff;background:-moz-linear-gradient(top,#9394ff 0,#4591ed 100%);background:-webkit-linear-gradient(top,#9394ff 0,#4591ed 100%);background:linear-gradient(to bottom,#9394ff 0,#4591ed 100%)}body.docs-theme--chronograf .tabs a.is-active{background:#9394ff}body.docs-theme--kapacitor .article-content a:active,body.docs-theme--kapacitor .article-content a:link,body.docs-theme--kapacitor .article-content a:visited{color:#4ed8a0}body.docs-theme--kapacitor .article-content a:hover{color:#fff}body.docs-theme--kapacitor .article-content a.top:hover{background:#fff}body.docs-theme--kapacitor .article-content a.btn{background:#20b76f}body.docs-theme--kapacitor .article-content a.btn:hover{background:#4ed8a0}body.docs-theme--kapacitor .article-content.section-landing h2 a.off-page:link:hover{color:#4ed8a0!important}body.docs-theme--kapacitor .sidebar--mask-container .sidebar--mask{background:#4ed8a0;background:-moz-linear-gradient(top,#4ed8a0 0,#22adf6 100%);background:-webkit-linear-gradient(top,#4ed8a0 0,#22adf6 100%);background:linear-gradient(to bottom,#4ed8a0 0,#22adf6 100%)}body.docs-theme--kapacitor .sidebar--section-title a:active,body.docs-theme--kapacitor .sidebar--section-title a:link,body.docs-theme--kapacitor .sidebar--section-title a:visited{color:#4ed8a0;font-weight:400}body.docs-theme--kapacitor .sidebar--section-title a:hover{color:#fff}body.docs-theme--kapacitor a.sidebar--page:hover{color:#fff}body.docs-theme--kapacitor .navbar--product-dropdown{background-color:#4ed8a0}body.docs-theme--kapacitor .navbar--product-dropdown:hover{background-color:#7ce490}body.docs-theme--kapacitor .navbar--product-menu{background:#4ed8a0;background:-moz-linear-gradient(top,#4ed8a0 0,#22adf6 100%);background:-webkit-linear-gradient(top,#4ed8a0 0,#22adf6 100%);background:linear-gradient(to bottom,#4ed8a0 0,#22adf6 100%)}body.docs-theme--kapacitor .tabs a.is-active{background:#4ed8a0}body.docs-theme--enterprise_kapacitor .article-content a:active,body.docs-theme--enterprise_kapacitor .article-content a:link,body.docs-theme--enterprise_kapacitor .article-content a:visited{color:#4ed8a0}body.docs-theme--enterprise_kapacitor .article-content a:hover{color:#fff}body.docs-theme--enterprise_kapacitor .article-content a.top:hover{background:#fff}body.docs-theme--enterprise_kapacitor .article-content a.btn{background:#20b76f}body.docs-theme--enterprise_kapacitor .article-content a.btn:hover{background:#4ed8a0}body.docs-theme--enterprise_kapacitor .article-content.section-landing h2 a.off-page:link:hover{color:#4ed8a0!important}body.docs-theme--enterprise_kapacitor .sidebar--mask-container .sidebar--mask{background:#4ed8a0;background:-moz-linear-gradient(top,#4ed8a0 0,#22adf6 100%);background:-webkit-linear-gradient(top,#4ed8a0 0,#22adf6 100%);background:linear-gradient(to bottom,#4ed8a0 0,#22adf6 100%)}body.docs-theme--enterprise_kapacitor .sidebar--section-title a:active,body.docs-theme--enterprise_kapacitor .sidebar--section-title a:link,body.docs-theme--enterprise_kapacitor .sidebar--section-title a:visited{color:#4ed8a0;font-weight:400}body.docs-theme--enterprise_kapacitor .sidebar--section-title a:hover{color:#fff}body.docs-theme--enterprise_kapacitor a.sidebar--page:hover{color:#fff}body.docs-theme--enterprise_kapacitor .navbar--product-dropdown{background-color:#4ed8a0}body.docs-theme--enterprise_kapacitor .navbar--product-dropdown:hover{background-color:#7ce490}body.docs-theme--enterprise_kapacitor .navbar--product-menu{background:#4ed8a0;background:-moz-linear-gradient(top,#4ed8a0 0,#22adf6 100%);background:-webkit-linear-gradient(top,#4ed8a0 0,#22adf6 100%);background:linear-gradient(to bottom,#4ed8a0 0,#22adf6 100%)}body.docs-theme--enterprise_kapacitor .tabs a.is-active{background:#4ed8a0}body.docs-theme--flux .article-content a:active,body.docs-theme--flux .article-content a:link,body.docs-theme--flux .article-content a:visited{color:#4ed8a0}body.docs-theme--flux .article-content a:hover{color:#fff}body.docs-theme--flux .article-content a.top:hover{background:#fff}body.docs-theme--flux .article-content.section-landing h2 a.off-page:link:hover{color:#4ed8a0!important}body.docs-theme--flux .sidebar--mask-container .sidebar--mask{background:#4ed8a0;background:-moz-linear-gradient(top,#4ed8a0 0,#22adf6 100%);background:-webkit-linear-gradient(top,#4ed8a0 0,#22adf6 100%);background:linear-gradient(to bottom,#4ed8a0 0,#22adf6 100%)}body.docs-theme--flux .sidebar--section-title a:active,body.docs-theme--flux .sidebar--section-title a:link,body.docs-theme--flux .sidebar--section-title a:visited{color:#4ed8a0;font-weight:400}body.docs-theme--flux .sidebar--section-title a:hover{color:#fff}body.docs-theme--flux a.sidebar--page:hover{color:#fff}body.docs-theme--flux .navbar--product-dropdown{background-color:#4ed8a0}body.docs-theme--flux .navbar--product-dropdown:hover{background-color:#7ce490}body.docs-theme--flux .navbar--product-menu{background:#4ed8a0;background:-moz-linear-gradient(top,#4ed8a0 0,#22adf6 100%);background:-webkit-linear-gradient(top,#4ed8a0 0,#22adf6 100%);background:linear-gradient(to bottom,#4ed8a0 0,#22adf6 100%)}body.docs-theme--flux .tabs a.is-active{background:#4ed8a0}","/*! normalize.css v3.0.2 | MIT License | git.io/normalize */\n\n/**\n * 1. Set default font family to sans-serif.\n * 2. Prevent iOS text size adjust after orientation change, without disabling\n * user zoom.\n */\n\nhtml {\n font-family: sans-serif; /* 1 */\n -ms-text-size-adjust: 100%; /* 2 */\n -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/**\n * Remove default margin.\n */\n\nbody {\n margin: 0;\n font-family: 'Roboto',Helvetica,Arial,Tahoma, Verdana, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n/* HTML5 display definitions\n ========================================================================== */\n\n/**\n * Correct `block` display not defined for any HTML5 element in IE 8/9.\n * Correct `block` display not defined for `details` or `summary` in IE 10/11\n * and Firefox.\n * Correct `block` display not defined for `main` in IE 11.\n */\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\n\n/**\n * 1. Correct `inline-block` display not defined in IE 8/9.\n * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n */\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block; /* 1 */\n vertical-align: baseline; /* 2 */\n}\n\n/**\n * Prevent modern browsers from displaying `audio` without controls.\n * Remove excess height in iOS 5 devices.\n */\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n/**\n * Address `[hidden]` styling not present in IE 8/9/10.\n * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.\n */\n\n[hidden],\ntemplate {\n display: none;\n}\n\n/* Links\n ========================================================================== */\n\n/**\n * Remove the gray background color from active links in IE 10.\n */\n\na {\n background-color: transparent;\n}\n\n/**\n * Improve readability when focused and also mouse hovered in all browsers.\n */\n\na:active,\na:hover {\n outline: 0;\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n */\n\nabbr[title] {\n border-bottom: 1px dotted;\n}\n\n/**\n * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n */\n\nb,\nstrong {\n font-weight: bold;\n}\n\n/**\n * Address styling not present in Safari and Chrome.\n */\n\ndfn {\n font-style: italic;\n}\n\n/**\n * Address variable `h1` font-size and margin within `section` and `article`\n * contexts in Firefox 4+, Safari, and Chrome.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/**\n * Address styling not present in IE 8/9.\n */\n\nmark {\n background: #ff0;\n color: #000;\n}\n\n/**\n * Address inconsistent and variable font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` affecting `line-height` in all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Remove border when inside `a` element in IE 8/9/10.\n */\n\nimg {\n border: 0;\n}\n\n/**\n * Correct overflow not hidden in IE 9/10/11.\n */\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * Address margin not present in IE 8/9 and Safari.\n */\n\nfigure {\n margin: 1em 40px;\n}\n\n/**\n * Address differences between Firefox and other browsers.\n */\n\nhr {\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n height: 0;\n}\n\n/**\n * Contain overflow in all browsers.\n */\n\npre {\n overflow: auto;\n}\n\n/**\n * Address odd `em`-unit font size rendering in all browsers.\n */\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * Known limitation: by default, Chrome and Safari on OS X allow very limited\n * styling of `select`, unless a `border` property is set.\n */\n\n/**\n * 1. Correct color not being inherited.\n * Known issue: affects color of disabled elements.\n * 2. Correct font properties not being inherited.\n * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit; /* 1 */\n font: inherit; /* 2 */\n margin: 0; /* 3 */\n}\n\n/**\n * Address `overflow` set to `hidden` in IE 8/9/10/11.\n */\n\nbutton {\n overflow: visible;\n}\n\n/**\n * Address inconsistent `text-transform` inheritance for `button` and `select`.\n * All other form control elements do not inherit `text-transform` values.\n * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n * Correct `select` style inheritance in Firefox.\n */\n\nbutton,\nselect {\n text-transform: none;\n}\n\n/**\n * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n * and `video` controls.\n * 2. Correct inability to style clickable `input` types in iOS.\n * 3. Improve usability and consistency of cursor style between image-type\n * `input` and others.\n */\n\nbutton,\nhtml input[type=\"button\"], /* 1 */\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; /* 2 */\n cursor: pointer; /* 3 */\n}\n\n/**\n * Re-set default cursor for disabled elements.\n */\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\n/**\n * Remove inner padding and border in Firefox 4+.\n */\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\n/**\n * Address Firefox 4+ setting `line-height` on `input` using `!important` in\n * the UA stylesheet.\n */\n\ninput {\n line-height: normal;\n}\n\n/**\n * It's recommended that you don't attempt to style these elements.\n * Firefox's implementation doesn't respect box-sizing, padding, or width.\n *\n * 1. Address box sizing set to `content-box` in IE 8/9/10.\n * 2. Remove excess padding in IE 8/9/10.\n */\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Fix the cursor style for Chrome's increment/decrement buttons. For certain\n * `font-size` values of the `input`, it causes the cursor style of the\n * decrement button to change from `default` to `text`.\n */\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n * 2. Address `box-sizing` set to `border-box` in Safari and Chrome\n * (include `-moz` to future-proof).\n */\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; /* 1 */\n -moz-box-sizing: content-box;\n -webkit-box-sizing: content-box; /* 2 */\n box-sizing: content-box;\n}\n\n/**\n * Remove inner padding and search cancel button in Safari and Chrome on OS X.\n * Safari (but not Chrome) clips the cancel button when the search input has\n * padding (and `textfield` appearance).\n */\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/**\n * Define consistent border, margin, and padding.\n */\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n/**\n * 1. Correct `color` not being inherited in IE 8/9/10/11.\n * 2. Remove padding so people aren't caught out if they zero out fieldsets.\n */\n\nlegend {\n border: 0; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Remove default vertical scrollbar in IE 8/9/10/11.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * Don't inherit the `font-weight` (applied by a rule above).\n * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n */\n\noptgroup {\n font-weight: bold;\n}\n\n/* Tables\n ========================================================================== */\n\n/**\n * Remove most spacing between table cells.\n */\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\ntd,\nth {\n padding: 0;\n}\n","code[class*=\"language-\"],\npre[class*=\"language-\"] {\n\t/*text-shadow: 0 1px #101419;*/\n\tdirection: ltr;\n\ttext-align: left;\n\twhite-space: pre;\n white-space: pre-wrap;\n white-space: -moz-pre-wrap;\n\twhite-space: -o-pre-wrap;\n\tword-spacing: normal;\n\tword-break: normal;\n\tword-wrap: normal;\n\n\t-moz-tab-size: 1;\n\t-o-tab-size: 1;\n\ttab-size: 1;\n\n\t-webkit-hyphens: none;\n\t-moz-hyphens: none;\n\t-ms-hyphens: none;\n\thyphens: none;\n}\n\npre[class*=\"language-\"]::-moz-selection, pre[class*=\"language-\"] ::-moz-selection,\ncode[class*=\"language-\"]::-moz-selection, code[class*=\"language-\"] ::-moz-selection {\n\ttext-shadow: none;\n}\n\npre[class*=\"language-\"]::selection, pre[class*=\"language-\"] ::selection,\ncode[class*=\"language-\"]::selection, code[class*=\"language-\"] ::selection {\n\ttext-shadow: none;\n}\n\n@media print {\n\tcode[class*=\"language-\"],\n\tpre[class*=\"language-\"] {\n\t\ttext-shadow: none;\n\t}\n}\n\n/* Code blocks */\npre[class*=\"language-\"] {\n\toverflow: auto;\n}\n\n:not(pre) > code[class*=\"language-\"],\npre[class*=\"language-\"] {\n}\n\n/* Inline code */\n:not(pre) > code[class*=\"language-\"] {\n\twhite-space: normal;\n}\n\n.highlight { color: @article-code-color;\n\n\t// COLORS\n\n\t.gh, \t\t/* Generic.Heading */\n\t.go, \t\t/* Generic.Output */\n\t.na, \t\t/* Name.Attribute */\n\t.nt, \t\t/* Name.Tag */\n\t.nv, \t\t/* Name.Variable */\n\t.ow \t\t/* Operator.Word */\n\t\t\t\t\t{ color: @article-code-color }\n\n\t.c, \t\t/* Comment */\n\t.ch, \t\t/* Comment.Hashbang */\n\t.cm, \t\t/* Comment.Multiline */\n\t.cpf, \t/* Comment.PreprocFile */\n\t.c1, \t\t/* Comment.Single */\n\t.cs,\t\t/* Comment.Special */\n\t.w \t\t/* Text.Whitespace */\n\t\t\t\t\t{ color: @article-code-accent1; }\n\n\t.gi \t\t/* Generic.Inserted */\n\t\t\t\t\t{ background-color: @article-code-accent1; }\n\n\t.k, \t\t/* Keyword */\n\t.kc, \t\t/* Keyword.Constant */\n\t.kd, \t\t/* Keyword.Declaration */\n\t.kn, \t\t/* Keyword.Namespace */\n\t.kp, \t\t/* Keyword.Pseudo */\n\t.kr, \t\t/* Keyword.Reserved */\n\t.nn \t\t/* Name.Namespace */\n\t\t\t\t\t{ color: @article-code-accent2; }\n\n\t.bp, \t\t/* Name.Builtin.Pseudo */\n\t.cp, \t\t/* Comment.Preproc */\n\t.dl, \t\t/* Literal.String.Delimiter */\n\t.gt, \t\t/* Generic.Traceback */\n\t.gu, \t\t/* Generic.Subheading */\n\t.kt, \t\t/* Keyword.Type */\n\t.nb, \t\t/* Name.Builtin */\n\t.nc, \t\t/* Name.Class */\n\t.no, \t\t/* Name.Constant */\n\t.sa, \t\t/* Literal.String.Affix */\n\t.sb, \t\t/* Literal.String.Backtick */\n\t.sc, \t\t/* Literal.String.Char */\n\t.sd, \t\t/* Literal.String.Doc */\n\t.se, \t\t/* Literal.String.Escape */\n\t.sh, \t\t/* Literal.String.Heredoc */\n\t.sx, \t\t/* Literal.String.Other */\n\t.sr, \t\t/* Literal.String.Regex */\n\t.s1, \t\t/* Literal.String.Single */\n\t.s2 \t\t/* Literal.String.Double */\n\t\t\t\t\t{ color: @article-code-accent3 }\n\n\t.err, /* Error */\n\t.fm, \t\t/* Name.Function.Magic */\n\t.gr, \t\t/* Generic.Error */\n\t.gd, \t\t/* Generic.Deleted */\n\t.nd, \t\t/* Name.Decorator */\n\t.ne, \t\t/* Name.Exception */\n\t.nf, \t\t/* Name.Function */\n\t.nl, \t\t/* Name.Label */\n\t.si \t\t/* Literal.String.Interpol */\n\t\t\t\t\t{ color: @article-code-accent4 }\n\n\t.m, \t\t/* Literal.Number */\n\t.ni, \t\t/* Name.Entity */\n\t.mb, \t\t/* Literal.Number.Bin */\n\t.mf, \t\t/* Literal.Number.Float */\n\t.mh, \t\t/* Literal.Number.Hex */\n\t.mi, \t\t/* Literal.Number.Integer */\n\t.mo, \t\t/* Literal.Number.Oct */\n\t.vc, \t\t/* Name.Variable.Class */\n\t.vg, \t\t/* Name.Variable.Global */\n\t.vi, \t\t/* Name.Variable.Instance */\n\t.vm, \t\t/* Name.Variable.Magic */\n\t.il \t\t/* Literal.Number.Integer.Long */\n\t\t\t\t\t{ color: @article-code-accent5 }\n\n\t.gp, \t\t/* Generic.Prompt */\n\t.o \t\t/* Operator */\n\t\t\t\t\t{ color: @article-code-accent6 }\n\n\t.ss \t\t/* Literal.String.Symbol */\n\t\t\t\t\t{ color: @article-code-accent7 }\n\n\t// FONT STYLES\n\n\t.cs \t\t/* Comment.Special */\n\t.gh, \t\t/* Generic.Heading */\n\t.gu, \t\t/* Generic.Subheading */\n\t.gp, \t\t/* Generic.Prompt */\n\t.gs, \t\t/* Generic.Strong */\n\t.k, \t\t/* Keyword */\n\t.kc, \t\t/* Keyword.Constant */\n\t.kd, \t\t/* Keyword.Declaration */\n\t.kn, \t\t/* Keyword.Namespace */\n\t.kp, \t\t/* Keyword.Pseudo */\n\t.kr, \t\t/* Keyword.Reserved */\n\t.kt, \t\t/* Keyword.Type */\n\t.nc, \t\t/* Name.Class */\n\t.ne, \t\t/* Name.Exception */\n\t.ni, \t\t/* Name.Entity */\n\t.nn \t\t/* Name.Namespace */\n\t.nt, \t\t/* Name.Tag */\n\t.ow, \t\t/* Operator.Word */\n\t.se \t\t/* Literal.String.Escape */\n\t\t\t\t\t{ font-weight: bold }\n\n\t.c, \t\t/* Comment */\n\t.ch, \t\t/* Comment.Hashbang */\n\t.cm, \t\t/* Comment.Multiline */\n\t.cpf, \t/* Comment.PreprocFile */\n\t.c1, \t\t/* Comment.Single */\n\t.cs,\t\t/* Comment.Special */\n\t.ge, \t\t/* Generic.Emph */\n\t.sd ,\t\t/* Literal.String.Doc */\n\t.w \t\t/* Text.Whitespace */\n\t\t\t\t\t{ font-style: italic }\n}\n","//\n// Custom Font (Klavika)\n// --------------------------------------------------\n\n@font-face {\n font-family: Klavika-Light;\n src: url(../fonts/KlavikaLight-ItalicTF.otf);\n font-weight: 200;\n font-style: italic;\n}\n@font-face {\n font-family: Klavika-Bold;\n src: url(../fonts/KlavikaBoldBoldItalic.otf);\n font-weight: 700;\n font-style: italic;\n}\n\n//\n// Resets\n// --------------------------------------------------\n\nhtml {\n\toverflow: auto;\n}\nhtml,body {\n\twidth: 100%;\n\theight: 100%;\n\tbackground-color: @body-bg-color;\n -webkit-overflow-scrolling: touch;\n}\nbody {\n\tcolor: @default-text-color;\n\tline-height: 1;\n\toverflow: auto;\n}\n* {\n\tbox-sizing: border-box;\n}\nhtml,\ndiv,\nspan,\napplet,\nobject,\niframe,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\np,\nblockquote,\npre,\na,\nabbr,\nacronym,\naddress,\nbig,\ncite,\ncode,\ndel,\ndfn,\nem,\nimg,\nins,\nkbd,\nq,\ns,\nsamp,\nsmall,\nstrike,\nstrong,\nsub,\nsup,\ntt,\nvar,\nb,\nu,\ni,\ncenter,\ndl,\ndt,\ndd,\nol,\nul,\nli,\nfieldset,\nform,\nlabel,\nlegend,\ntable,\ncaption,\ntbody,\ntfoot,\nthead,\ntr,\nth,\ntd,\narticle,\naside,\ncanvas,\ndetails,\nembed,\nfigure,\nfigcaption,\nfooter,\nheader,\nhgroup,\nmenu,\nnav,\noutput,\nruby,\nsection,\nsummary,\ntime,\nmark,\naudio,\nvideo {\n\tmargin: 0;\n\tpadding: 0;\n\tborder: 0;\n\tfont-size: 100%;\n\tvertical-align: baseline;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmenu,\nnav,\nsection {\n\tdisplay: block;\n}\nol,\nul {\n\tlist-style: none;\n}\nblockquote,\nq {\n\tquotes: none;\n}\nblockquote:before,\nblockquote:after,\nq:before,\nq:after {\n\tcontent: '';\n\tcontent: none;\n}\ntable {\n\tborder-collapse: collapse;\n\tborder-spacing: 0;\n}\n\n//\n// Import Modules\n// --------------------------------------------------\n@import \"layout-navbar.less\";\n@import \"layout-search-overrides.less\";\n@import \"layout-sidebar.less\";\n@import \"layout-sidebar-ads.less\";\n@import \"layout-article.less\";\n@import \"layout-home.less\";\n@import \"layout-error-pages.less\";\n@import \"tabs.less\";\n@import \"telegraf-plugins.less\";\n\n//\n// Media Queries\n// --------------------------------------------------\n@media (min-width: @breakpoint-small) {\n\tbody {\n\t\tpadding-bottom: 0;\n\t}\n}\n","/*\n\n\tNAVIGATION BAR\n\n\t____________________________________________________________\n\n\tNotes:\n\t-\tOnly contains styles relevant to the navbar module\n\n*/\n@nav-font-size: 19px;\n\n.navbar {\n\ttop: 0;\n\tleft: 0;\n\tfont-size: 1rem;\n\theight: @nav-height;\n\twidth: 100%;\n\tbackground-color: @nav-bg;\n\tz-index: @z-nav;\n\tposition: relative;\n}\n.navbar--logo,\n.navbar--hamburger,\n.navbar--product-dropdown,\n.navbar--search,\n.theme-switcher {\n\tposition: absolute;\n}\n.navbar--logo {\n\tleft: 1em;\n\ttop: 1.05em;\n\ta {\n\t\tfont-size: 1.5rem;\n\t\tcolor: @nav-logo;\n\t\ttransition: color 0.25s ease;\n\t\t&:hover {\n\t\t\tcolor: @nav-logo-hover;\n\t\t}\n\t}\n\t.divider {\n\t\tborder-left: 1px solid @nav-logo;\n margin: 0 .8rem 0 .5rem;\n vertical-align: text-top;\n\t\topacity: .35;\n\t\tline-height: 1.15em;\n\t}\n\t.navbar--docs {\n\t\tfont-size: 1.3rem;\n\t}\n}\n.navbar--hamburger {\n\twidth: @nav-height;\n\theight: @nav-height;\n\tright: 0;\n\n\t.navbar--hamburger-bar {\n\t\twidth: @nav-height * 0.3em;\n\t\theight: 2px;\n\t\tbackground-color: @nav-hamburger;\n\t\tborder-radius: 1px;\n\t\tposition: absolute;\n\t\tleft: 50%;\n\t\ttransition: all 0.3s ease;\n\n\t\t&.top {\n\t\t\ttop: 40%;\n\t\t\ttransform: translate(-50%,-50%);\n\t\t}\n\t\t&.middle {\n\t\t\ttop: 50%;\n\t\t\ttransform: translate(-50%,-50%);\n\t\t}\n\t\t&.bottom {\n\t\t\ttop: 60%;\n\t\t\ttransform: translate(-50%,-50%);\n\t\t}\n\t}\n\n\t&:hover {\n\t\tcursor: pointer;\n\n\t\t.navbar--hamburger-bar {\n\t\t\tbackground-color: @nav-hamburger-hover;\n\t\t}\n\t}\n\n\t&.open {\n\t\t.navbar--hamburger-bar {\n\t\t\t&.top {\n\t\t\t\ttop: 50%;\n\t\t\t\ttransform: translate(-50%,-50%) rotate(45deg);\n\t\t\t}\n\t\t\t&.middle {\n\t\t\t\topacity: 0;\n\t\t\t}\n\t\t\t&.bottom {\n\t\t\t\ttop: 50%;\n\t\t\t\ttransform: translate(-50%,-50%) rotate(-45deg);\n\t\t\t}\n\t\t}\n\t}\n}\n.navbar--product-menu {\n\twidth: 100%;\n\tposition: absolute;\n\ttop: .5em;\n\theight: auto;\n\topacity: 0;\n\ttransition: opacity 0.25s ease;\n\t.gradient-v(@c-ocean,@c-pool);\n}\n.navbar--product-container {\n\twidth: 100%;\n\theight: auto;\n\tposition: absolute;\n\ttop: calc(@nav-height * .85);\n\tleft: 0;\n\tvisibility: hidden;\n\ttransition: all 0.25s ease;\n\n\tz-index: 100;\n\n\t&.open {\n\t\tvisibility: visible;\n\n\t\t.navbar--product-menu {\n\t\t\topacity: 1;\n\t\t}\n\t}\n}\n.navbar--product-divider {\n\tmargin: 0.25em 0;\n\theight: 2px;\n\tbackground-color: fadeout(@g6-smoke, 90%);\n}\n.navbar--product {\n\tfont-size: @nav-font-size;\n\t&:link,\n\t&:active,\n\t&:visited {\n\t\tcolor: @g20-white;\n\t\ttransition:\n\t\t\tbackground-color 0.25s ease,\n\t\t\tcolor 0.25s ease;\n\t\tbackground-color: transparent;\n\t\tpadding: 1.25rem 1rem;\n\t\tdisplay: block;\n\t\twidth: 100%;\n\t}\n\t&:hover {\n\t\tbackground-color: fadeout(@g5-pepper, 88%);\n\t\tcolor: @g20-white;\n\t}\n}\n.navbar--product-dropdown {\n\tdisplay: none;\n\ttop: .5em;\n\tbackground-color: @c-ocean;\n\theight: @nav-component-height;\n\tborder-radius: @radius;\n\ttransition:\n\t\tbackground-color 0.25s ease,\n\t\tcolor 0.25s ease;\n\t&:hover {\n\t\tcursor: pointer;\n\t\tbackground-color: @c-pool;\n\t}\n\t.navbar--current-product,\n\t.navbar--product-dropdown-caret {\n\t\tposition: absolute;\n\t\ttop: 50%;\n\t\ttransform: translateY(-50%);\n\t\tcolor: @g20-white;\n\t}\n\n\t.navbar--current-product {\n\t\tfont-weight: 700;\n\t\tleft: 1rem;\n\t\tfont-size: @nav-font-size;\n\t\tfont-weight: 400;\n\t}\n\t.navbar--product-dropdown-caret {\n\t\tright: 1rem;\n\t\tfont-size: 0.625em;\n\t}\n}\n.navbar--search {\n\theight: @nav-component-height;\n\twidth: @search-default-width;\n\tright: @nav-height;\n\ttop: .5em;\n\n\t> * {\n\t\tposition: absolute !important;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t}\n}\n.navbar--search-field {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\twidth: 100%;\n\theight: 100%;\n\tborder-radius: @radius;\n\tborder: 2px solid @nav-search-border;\n\tcolor: @nav-search-text;\n\tbackground-color: @nav-search-bg;\n\tpadding: 0 1rem;\n\tfont-weight: 400;\n\tfont-size: @nav-font-size;\n\toutline: none;\n\ttransition:\n\t\tborder-color 0.3s ease,\n\t\tcolor 0.3s ease;\n\t&:focus {\n\t\tborder-color: @nav-search-border-focus;\n\t\tcolor: @nav-search-border-focus;\n\t}\n}\n.algolia-autocomplete {\n\twidth: 100%;\n\n\t.aa-input,\n\t.aa-hint {\n\t\twidth: 100%;\n\t}\n\t.aa-hint {\n\t\tcolor: #f00;\n\t}\n\t.aa-dropdown-menu {\n\t\tmargin: @search-offset 0 0 0;\n\t\twidth: 100%;\n\t\tpadding: 0.75rem;\n\t\tbackground-color: fadeout(@algolia-background, 30%);\n\t\tborder: 0px;\n\n\t\t.algolia-docsearch-suggestion--highlight {\n\t\t\tcolor: @algolia-highlight-color;\n\t\t}\n\n\t\t.aa-suggestion {\n\t\t\tcursor: pointer;\n\t\t\tpadding: 0;\n\n\t\t\t.algolia-docsearch-suggestion {\n\t\t\t\tbackground-color: @algolia-category-header;\n\t\t\t\tborder-radius: @radius;\n\t\t\t\toverflow: hidden;\n\t\t\t}\n\t\t\t.algolia-docsearch-suggestion__secondary {\n\t\t\t\tborder: none;\n\t\t\t\tmargin-top: 2px;\n\t\t\t}\n\t\t\t&:first-child .algolia-docsearch-suggestion__secondary {\n\t\t\t\tmargin-top: 0;\n\t\t\t}\n\t\t\t.algolia-docsearch-suggestion--category-header {\n\t\t\t\tborder-radius: @radius @radius 0 0;\n\t\t\t\tbackground-color: @algolia-category-header;\n\t\t\t\tcolor: @algolia-category-header-text;\n\t\t\t\tpadding: 0.75rem 1rem;\n\t\t\t\tfont-weight: 500;\n\n\t\t\t\t.algolia-docsearch-suggestion--highlight {\n\t\t\t\t\tbackground-color: transparent;\n\t\t\t\t}\n\t\t\t}\n\t\t\t.algolia-docsearch-suggestion--subcategory-column {\n\t\t\t\tborder: none;\n\t\t\t\tbackground-color: @algolia-suggestion-column;\n\t\t\t}\n\t\t\t.algolia-docsearch-suggestion--content {\n\t\t\t\tbackground-color: @algolia-suggestion-content;\n\t\t\t}\n\t\t\t.algolia-docsearch-suggestion--title {\n\t\t\t\tmargin-bottom: 0.25rem;\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tcolor: @algolia-suggestion-text;\n\t\t\t}\n\t\t\t.algolia-docsearch-suggestion--text {\n\t\t\t\tcolor: @algolia-suggestion-text-alt;\n\t\t\t}\n\t\t\t.algolia-docsearch-suggestion--subcategory-column-text {\n\t\t\t\tfont-size: 0.8rem;\n\t\t\t\tline-height: 1.4em;\n\t\t\t\tcolor: @algolia-suggestion-text-alt;\n\t\t\t}\n\t\t\t// Highlight style\n\t\t\t&.aa-cursor {\n\n\t\t\t\t.algolia-docsearch-suggestion--content {\n\t\t\t\t\t.gradient-h(@algolia-cursor-bg1,@algolia-cursor-bg2);\n\t\t\t\t}\n\t\t\t\t.algolia-docsearch-suggestion--text,\n\t\t\t\t.algolia-docsearch-suggestion--title {\n\t\t\t\t\tcolor: @algolia-cursor-text;\n\t\t\t\t\t.algolia-docsearch-suggestion--highlight {\n\t\t\t\t\t\tcolor: @algolia-cursor-highlight !important;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tem {\n\t\t\t\tfont-weight: bold;\n\t\t\t\tfont-style: normal;\n\t\t\t}\n\t\t}\n\t}\n\t.algolia-docsearch-footer {\n\t\tborder: none;\n\t\tpadding: 0.75rem 0 0 0;\n\t}\n}\n.theme-switcher {\n\tdisplay: none;\n\twidth: @nav-height;\n\theight: @nav-height;\n\tright: 0;\n\tborder: 0;\n\toutline: none;\n\tbackground-color: @nav-bg;\n\tcolor: @nav-logo;\n\n\t.icon {\n\t\ttransition: color 0.25s ease;\n\t}\n\t.sun2 {\n\t\tfont-size: 1.5rem;\n\t}\n\t.moon {\n\t\tfont-size: 1.2rem;\n\t}\n\n\t&:hover {\n\t\tcolor: @nav-logo-hover;\n\t\tcursor: pointer;\n\t}\n}\n\n//\n// Media Queries\n// --------------------------------------------------\n@media (max-width: 500px) {\n\t.navbar--logo {\n\t\t.logotype {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.logo {\n\t\t\tdisplay: inline;\n\t\t}\n\t}\n}\n@media (min-width: 500px) {\n\t.navbar--logo {\n\t\t.logotype {\n\t\t\tdisplay: inline;\n\t\t}\n\t\t.logo {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n}\n\n@media (min-width: 501px) {\n\n}\n\n@media (min-width: @breakpoint-small) {\n\t.theme-switcher {\n\t\tdisplay: block;\n\t}\n\t.navbar--product-dropdown {\n\t\tdisplay: block;\n\t\tleft: @sidebar-small-width;\n\t\twidth: @product-dropdown-small-width;\n\t}\n\t.navbar--product-container {\n\t\tleft: @sidebar-small-width;\n\t\twidth: @product-dropdown-small-width;\n\t\ttop: 2.9em;\n\n\t\t&.open {\n\t\t\t.navbar--dropdown-dismiss {\n\t\t\t\twidth: 100vw;\n\t\t\t\theight: 100vh;\n\t\t\t\tposition: fixed;\n\t\t\t\ttop: 0;\n\t\t\t\tleft: 0;\n\t\t\t\tz-index: 100;\n\n\t\t\t\t&:hover {\n\t\t\t\t\tcursor: pointer;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t.navbar--product-menu {\n\t\tborder-radius: 0 0 @radius @radius;\n\t\toverflow: hidden;\n\t\tz-index: 110;\n\t}\n\t.navbar--search {\n\t\tleft: @search-small-position;\n\t\twidth: @search-small-width;\n\t}\n\t.navbar--hamburger {\n\t\tdisplay: none;\n\t}\n\t.navbar--product.external {\n\t\tfont-size: 0.8rem;\n\t}\n}\n@media (min-width: @breakpoint-large) {\n\t.navbar--product-dropdown {\n\t\tleft: @sidebar-large-width;\n\t\twidth: @product-dropdown-large-width;\n\t}\n\t.navbar--product-container {\n\t\tleft: @sidebar-large-width;\n\t\twidth: @product-dropdown-large-width;\n\t}\n\t.navbar--search {\n\t\tleft: @search-large-position;\n\t\twidth: @search-large-width;\n\t}\n}\n@media (min-width: @breakpoint-huge) {\n\t.navbar--product-dropdown {\n\t\tleft: @sidebar-huge-width;\n\t\twidth: @product-dropdown-huge-width;\n\t}\n\t.navbar--product-container {\n\t\tleft: @sidebar-huge-width;\n\t\twidth: @product-dropdown-huge-width;\n\t}\n\t.navbar--search {\n\t\tleft: @search-huge-position;\n\t\twidth: @search-huge-width;\n\t}\n}\n",".algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu {\n\tright: 0 !important;\n\tleft: auto !important;\n\toverflow: scroll !important;\n\tmax-height: 90vh !important;\n\n\t&:before {\n\t\tdisplay: none;\n\t}\n}\n\n.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion {\n &--wrapper { padding: .2rem 0; }\n &--subcategory-column { display: none; }\n &--content {\n padding: .75rem;\n width: 100%;\n float: none;\n &:before {\n display: none;\n }\n }\n}\n\n.algolia-autocomplete .algolia-docsearch-footer {\n padding: 0;\n}\n\n@media (min-width: 1330px) {\n\t.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu {\n\t\tright: auto !important;\n\t\tleft: 0 !important;\n\t}\n}\n\n@media (max-width: 768px) {\n\t.algolia-docsearch-suggestion--subcategory-column {\n\t\tdisplay: none !important;\n\t}\n\t.algolia-docsearch-suggestion--wrapper {\n\t\tmargin: .25em 0 !important;\n\t}\n}\n\n@media (max-width: 570px) {\n\t.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu {\n\t\tposition: fixed !important;\n\t\ttop: 3.5em !important;\n\t\tleft: 0;\n\t\tmin-width: 100vw;\n\t}\n}\n","/*\n\n SIDEBAR\n\n ____________________________________________________________\n\n Notes:\n - Only contains styles relevant to the sidebar module\n - .sidebar--toggle only appears on small screens\n\n*/\n\n.sidebar--toggle {\n padding: 1em;\n position: relative;\n z-index: @z-sidebar--toggle;\n height: @sidebar--toggle-height;\n width: 100%;\n background-color: @g6-smoke;\n text-align: left;\n font-style: italic;\n color: @g18-cloud;\n font-weight: 500;\n transition:\n background-color 0.25s ease,\n color 0.25s ease;\n\n &:hover {\n color: @g20-white;\n background-color: @g7-graphite;\n cursor: pointer;\n }\n\n &:before,\n &:after {\n content: \"\";\n position: absolute;\n display: block;\n right: 1em;\n top: 1.45em;\n height: 2px;\n width: 15px;\n background: @g11-sidewalk;\n }\n\n &:before {\n transform: rotate(90deg);\n transition: all .2s;\n }\n\n &.open:before {\n transform: rotate(180deg);\n }\n}\n\n.sidebar {\n background-color: @sidebar-bg;\n height: 100%;\n overflow: hidden;\n transition: max-height 0.2s ease-out;\n\n &::-webkit-scrollbar { background-color: @sidebar-bg; width: @scrollbar-width; }\n &::-webkit-scrollbar-track { background-color: @sidebar-bg; }\n &::-webkit-scrollbar-thumb { border: 4px solid @sidebar-bg; background-color: @sidebar-scrollbar; border-radius: @scrollbar-width/2; }\n\n &.open {\n max-height: 4000px;\n transition: max-height 0.5s ease-in;\n }\n\n &--section {\n border-top: 2px solid @sidebar-divider;\n padding: 2em 0;\n\n &:first-child {\n border: none;\n }\n\n &-title {\n color: @sidebar-title-color;\n padding: 0 2rem 1em 2rem;\n font-size: 1.25em;\n\n a:link,\n a:active,\n a:visited {\n color: @sidebar-title-color;\n font-weight: 400;\n }\n a:hover {\n color: @sidebar-hover;\n }\n }\n\n ul {\n padding-left: 3rem;\n li {\n position: relative;\n margin-bottom: .25rem;\n }\n }\n }\n}\n\nul.sidebar--children {\n // padding-left: 1.5rem;\n margin-left: -1.85rem;\n height: 0;\n overflow: hidden;\n\n &.open {\n height: auto;\n overflow: visible;\n border-left: 2px solid @sidebar-divider;\n }\n\n & li:first-child {\n margin-top: .25rem;\n }\n}\n\n.sidebar--children-toggle {\n position: absolute;\n left: -2.25rem;\n top: .2rem;\n height: .9rem;\n width: .9rem;\n background: @sidebar-toggle-bg;\n border-radius: 50%;\n transition: all .2s;\n\n &:before {\n content: \"+\";\n color: @sidebar-toggle-icon;\n display: block;\n text-align: center;\n }\n\n &.open:before {\n content: \"–\";\n }\n\n &:hover {\n background: @sidebar-title-color;\n &:before {\n color: @g20-white;\n }\n }\n}\n\na.sidebar--page {\n &:link,\n &:active,\n &:visited {\n display: inline-block;\n color: @sidebar-text;\n font-weight: 500;\n text-indent: -1rem;\n line-height: 1.25;\n }\n &:hover {\n color: @sidebar-hover;\n }\n}\n\n//\n// Media Queries\n// --------------------------------------------------\n@media (max-width: @breakpoint-small) {\n .sidebar {\n height: auto;\n max-height: 0;\n }\n}\n\n@media (min-width: @breakpoint-small) {\n .sidebar--toggle {\n display: none;\n }\n .sidebar,\n .sidebar.open {\n position: fixed;\n z-index: @z-sidebar-desktop;\n width: @sidebar-small-width;\n transform: none;\n transition: none;\n top: @nav-height;\n max-height: 100%;\n overflow: auto;\n padding-bottom: @nav-height;\n }\n}\n@media (min-width: @breakpoint-large) {\n .sidebar,\n .sidebar.open {\n width: @sidebar-large-width;\n }\n}\n@media (min-width: @breakpoint-huge) {\n .sidebar,\n .sidebar.open {\n width: @sidebar-huge-width;\n }\n .sidebar--support-ad {\n padding: 2rem 1.5rem;\n\n &--desc {\n font-size: 1.2em;\n }\n }\n}\n","#sidebar--ad {\n margin: -0.75rem 1rem;\n border-radius: @radius;\n\n &.cloud {\n background: linear-gradient(45deg, #9394FF, #22ADF6);\n padding: 1.5rem 1.5rem;\n text-align: center;\n\n .text {\n margin: 0 0 1rem 0;\n color: @g20-white;\n line-height: 1.3em;\n font-size: 1.1em;\n font-weight: 500;\n }\n\n .cta {\n margin-left: 0;\n margin-right: 0;\n border-radius: @radius;\n color: @g20-white;\n border: 2px solid fadeout(@g20-white, 60%);\n background-color: transparent;\n transition:\n background-color 0.25s ease,\n border-color 0.25s ease;\n padding: 0.75em 1.5em;\n font-weight: 700;\n display: inline-block;\n font-size: 1.125em;\n\n &:hover {\n background-color: fadeout(@g20-white, 85%);\n border-color: fadeout(@g20-white, 40%)\n }\n }\n }\n\n &.enterprise {\n background: linear-gradient(to right, @c-rainforest,@c-pool);\n padding: 1.5rem 1.5rem;\n text-align: center;\n\n .text {\n margin: 0 0 1rem 0;\n color: @g20-white;\n line-height: 1.3em;\n // font-size: 1.2em;\n font-weight: 500;\n }\n\n .cta {\n margin-left: 0;\n margin-right: 0;\n border-radius: @radius;\n color: @g20-white;\n border: 2px solid fadeout(@g20-white, 60%);\n background-color: transparent;\n transition:\n background-color 0.25s ease,\n border-color 0.25s ease;\n padding: 0.75em 1.5em;\n font-weight: 700;\n display: inline-block;\n font-size: 1.125em;\n\n &:hover {\n background-color: fadeout(@g20-white, 85%);\n border-color: fadeout(@g20-white, 40%)\n }\n }\n }\n\n &.influx-days {\n padding: 1rem;\n background: url(\"/promos/assets/influx-days-bg.jpg\");\n background-repeat: no-repeat;\n background-size: cover;\n color: @g20-white;\n font-weight: bold;\n\n img {\n margin: .4rem 0 .8rem;\n }\n\n .text {\n font-size: 1.75rem;\n margin-bottom: .5rem;\n }\n .details {\n font-size: .9rem;\n line-height: 1.1rem;\n }\n .cta {\n display: inline-block;\n margin-top: .85rem;\n color: @g20-white;\n background: #5CBB47;\n font-size: 1.15rem;\n padding: .45rem 1.75rem;\n border-radius: @radius;\n }\n }\n}\n","/*\n\n\tINDIVIDUAL ARTICLE\n\n\t____________________________________________________________\n\n\tNotes:\n\t-\tTypography uses a type scale of 1.3\n\t-\tI've made use of EMs such that you can proportionally scale the type\n\t\tby changing the font size on .page using REMs as the unit\n\n\n*/\n\n::selection {\n\tbackground-color: @default-selection-bg;\n\tcolor: @default-selection-text; /* WebKit/Blink Browsers */\n}\n::-moz-selection {\n\tbackground-color: @default-selection-bg;\n\tcolor: @default-selection-text; /* Gecko Browsers */\n}\na {\n\ttext-decoration: none;\n\ttransition: color 0.2s ease;\n\n\t&:hover {\n\t\tcursor: pointer;\n\t}\n}\n\n.article {\n\tbackground-color: @article-bg;\n\toverflow: auto;\n\twidth: 100%;\n\n\t&::-webkit-scrollbar { background-color: @article-bg; width: @scrollbar-width; }\n\t&::-webkit-scrollbar-track { background-color: @article-bg; }\n\t&::-webkit-scrollbar-thumb { border: 4px solid @article-bg; background-color: @article-scrollbar; border-radius: @scrollbar-width/2; }\n\n}\n.article-section {\n\tdisplay: block;\n\twidth: 100%;\n\ttext-align: center;\n\tpadding: 2rem;\n\n\t&.article-heading {\n\t\tbackground-color: @article-bg-heading;\n\t\tbackground-position: center center;\n\t\tbackground-size: cover !important;\n\t\tbackground-repeat: no-repeat;\n\n\t\th1 {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t}\n\n\t&.article-footer {\n\t\t.gradient-v(@article-bg-footer,@article-bg);\n\t}\n}\n.article-content {\n\ttext-align: left;\n\twidth: 100%;\n\tmax-width: 760px;\n\tcolor: @article-text;\n\n\ta:link,\n\ta:active,\n\ta:visited {\n\t\tfont-weight: 700;\n\t\tcolor: @default-link-color;\n\t}\n\ta:hover {\n\t\tcolor: @default-link-hover;\n\t\tcursor: pointer;\n\t}\n\ta.top {\n\t\tfont-size: 6px;\n\t\tpadding: .25rem .25rem .35rem;\n\t\tborder-radius: @radius;\n\t\ttransition: all .2s;\n\t\t&:hover {\n\t\t\tcolor: @article-bg !important;\n\t\t\tbackground: @default-link-hover;\n\t\t}\n\t}\n\ta.off-page:link:after {\n\t\tcontent: '\\ea43';\n\t\tfont-family: 'icomoon';\n\t\tfont-size: .75em;\n\t\tfont-weight: normal;\n\t\tvertical-align: bottom;\n\t\tdisplay: inline;\n\t\tmargin-left: .5em;\n\t\topacity: .25;\n\t\ttransition: color 0.2s ease;\n\t\tcolor: @default-text-color;\n\t}\n\tp,li {\n\t\ta {\n\t\t\tcode {\n\t\t\t\tposition: relative;\n\t\t\t\t&:after {\n\t\t\t\t\tcontent: \"\";\n\t\t\t\t\tposition: absolute;\n\t\t\t\t\ttop: -1px;\n\t\t\t\t\tright: -1px;\n\t\t\t\t\twidth: 0;\n\t\t\t\t\theight: 0;\n\t\t\t\t\tborder-style: solid;\n\t\t\t\t\tborder-width: 0 .5em .5em 0;\n\t\t\t\t\tborder-color: transparent @article-code-color transparent transparent;\n\t\t\t\t\topacity: .5;\n\t\t\t\t\ttransition: all .2s;\n\t\t\t\t}\n\t\t\t\t&:hover:after {\n\t\t\t\t\topacity: 1;\n\t\t\t\t\tborder-color: transparent @default-link-hover transparent transparent;\n\t\t\t\t}\n\t\t\t}\n\t\t\t&.btn {\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tcolor: @g20-white;\n\t\t\t\tfont-size: .95rem;\n\t\t\t\tpadding: .5em 1em;\n\t\t\t\tmargin: 1em 0 1.5em;\n\n\t\t\t\t&.download:before {\n\t\t\t\t\tcontent: '\\e964';\n\t\t\t\t\tfont-family: 'icomoon';\n\t\t\t\t\tfont-size: 1.15em;\n\t\t\t\t\tfont-weight: normal;\n\t\t\t\t\tvertical-align: bottom;\n\t\t\t\t\tdisplay: inline;\n\t\t\t\t\tmargin-right: .5em;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t> * {\n\t\ttext-decoration: none;\n\t}\n\th1,\n\th2,\n\th3,\n\th4,\n\tp,\n\tul,\n\tol,\n\tli,\n\tblockquote,\n\t.note,\n\tdt,\n\t.warn,\n\tpre {\n\t\tdisplay: block;\n\t\tmargin-bottom: @margin-bottom-base;\n\t\tline-height: 1.45em;\n\t}\n\ttable {\n\t\tmargin: 1em 0 @margin-bottom-base;\n\t\toverflow-x: auto;\n\t\tbackground-color: @article-bg;\n\t}\n\n\t/* Headings */\n\th1,h2,h3,h4,h5,h6 {\n\t\twidth: 100%;\n\t\tcolor: @article-text-heading;\n\n\t\t/* Offset trick to prevent anchors being obscured by the navbar */\n\t\ta.offset-anchor {\n\t\t\tdisplay: block;\n\t\t\tposition: relative;\n\t\t\ttop: -120px;\n\t\t\tvisibility: hidden;\n\t\t}\n\n\t\t/* Maintain heading styles when anchors are present */\n\t\ta:link,\n\t\ta:active,\n\t\ta:visited,\n\t\ta:hover {\n\t\t\ttext-decoration: none;\n\t\t\tfont-weight: inherit;\n\t\t\tcolor: @article-text-heading !important;\n\t\t}\n\t\t&:first-child {\n\t\t\tmargin-top: 0;\n\t\t}\n\t}\n\th1 {\n\t\tfont-size: @heading1Size;\n\t\t.klavika-font;\n\t\tline-height: 1.2em;\n\t}\n\th2 {\n\t\tfont-size: @heading2Size;\n\t\tfont-weight: 600;\n\t\tmargin: 1.5em 0 .5em;\n\t}\n\th3 {\n\t\tfont-size: @heading3Size;\n\t\tfont-weight: 700;\n\t\tmargin: 1em 0 .5em;\n\t}\n\th4 {\n\t\tfont-size: @heading4Size;\n\t\tfont-weight: 400;\n\t\tfont-style: italic;\n\t\tmargin: 1.25em 0 .5em;\n\t}\n\th5 {\n\t\tline-height: 1.6em;\n\t}\n\th6 {\n\t\tfont-size: @paragraphSize*.95;\n\t\tfont-style: italic;\n\t\tline-height: 1.6em;\n\t}\n\n\t&.section-landing{\n\t\th2 a.off-page:link:hover {\n\t\t\tcolor: @default-link-color !important;\n\t\t}\n\t}\n\n\t/* Markdown Elements */\n\tp {\n\t\tfont-size: 1em;\n\t}\n\tol,ul {\n\t\tfont-size: 1em;\n\t\tpadding-left: 1.125em;\n\n\t\tli {\n\t\t\tdisplay: list-item;;\n\t\t\tlist-style-position: outside;\n\t\t\tpadding-left: 0.5em;\n\t\t\tmargin-bottom: .25em;\n\t\t}\n\t\tp {\n\t\t\tmargin-left: 0;\n\t\t}\n\t}\n\tul > li {\n\t\tlist-style-type: disc !important;\n\t}\n\tol li,\n\tul ol li {\n\t\tlist-style-type: decimal;\n\t}\n\tol ol li {\n\t\tlist-style-type: lower-alpha;\n\t}\n\tol ol ol li {\n\t\tlist-style-type: decimal;\n\t}\n\tul ul ul li {\n\t\tlist-style-type: square;\n\t}\n\tli:last-child {\n\t\tmargin-bottom: 0;\n\t}\n\tol ol,\n\tul ul,\n\tol ul,\n\tul ol {\n\t\twidth: 100%;\n\t\tmargin-left: 0;\n\t\tmargin-bottom: 0;\n\t\tmargin-top: .25em;\n\t}\n\thr {\n\t\twidth: 100%;\n\t\theight: 2px;\n\t\tmargin-top: 0.25em;\n\t\tmargin-bottom: 1em;\n\t\tborder: none;\n\t\tdisplay: block;\n\t\tbackground-color: @article-line-color;\n\t}\n\timg {\n\t\tmax-width: 100%;\n\t\theight: auto;\n\t\tborder-radius: @radius;\n\t}\n\ttd,\n\tth {\n\t\tborder: @border-small-screen solid @article-line-color;\n\t\tfont-size: 0.875em;\n\t\tline-height: 1.2em;\n\t\tpadding: 0.75em 1.5em;\n\t}\n\ttr:nth-child(even) {\n\t\tbackground-color: @article-bg-darken;\n\t}\n\tthead {\n\t\ttr {\n\t\t\tbackground-color: @article-bg-highlight !important;\n\t\t}\n\t\tth {\n\t\t\tpadding: 1.25em 1.5em;\n\t\t}\n\t}\n\t/* Notes
    and Gotchas
    */\n\tdt,\n\t.warn,\n\tblockquote,\n\t.note {\n\t\tfont-size: @smallTextSize;\n\t\tpadding: 1em 1.5em;\n\t\tborder-radius: @radius;\n\t\tborder-style: solid;\n\t\tborder-left-width: @thick-left-border;\n\n\t\tpre,h4,p,ol,ul {\n\t\t\twidth: 100%;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t> *:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.tooltip {\n\t\t\tcolor: @article-tooltip-nested;\n\t\t}\n\t}\n\tblockquote,\n\t.note {\n\t\tfont-style: italic;\n\t\tcolor: @article-note-text;\n\t\tborder-color: @article-note-border;\n\t\tbackground-color: @article-note-bg;\n\t\tcode {\n\t\t\tcolor: @article-note-code;\n\t\t\tbackground: @article-note-code-bg;\n\t\t\tborder: 1px solid @article-note-code-border;\n\t\t}\n\t\tpre {\n\t\t\tbackground: @article-note-code-bg;\n\t\t\tborder-color: @article-note-code-border;\n\t\t\tcode { border: none; }\n\t\t}\n\t}\n\tdt,\n\t.warn {\n\t\tcolor: @article-gotcha-text;\n\t\tborder-color: @article-gotcha-border;\n\t\tbackground-color: @article-gotcha-bg;\n\t\tcode {\n\t\t\tcolor: @article-gotcha-code;\n\t\t\tbackground: @article-gotcha-code-bg;\n\t\t\tborder: 1px solid @article-gotcha-code-border;\n\t\t}\n\t\tpre {\n\t\t\tbackground: @article-gotcha-code-bg;\n\t\t\tborder-color: @article-gotcha-code-border;\n\t\t\tcode { border: none; }\n\t\t}\n\t}\n\t/* Inline Code & Code Blocks */\n\tcode {\n\t\tfont-family: Consolas, \"Lucida Console\", Monaco, monospace;\n\t\t-moz-tab-size: 1;\n\t\t-o-tab-size: 1;\n\t\ttab-size: 1;\n\t\tdirection: ltr;\n\t\t-webkit-hyphens: none;\n\t\t-moz-hyphens: none;\n\t\t-ms-hyphens: none;\n\t\thyphens: none;\n\t\tfont-size: @tinyTextSize !important;\n\t\tfont-style:normal !important;\n\t\tdisplay: inline;\n\t\tborder-radius: @radius;\n\t\tborder-width: @border-small-screen;\n\t\tborder-color: @article-code-border;\n\t\tborder-style: solid;\n\t\tpadding: 0.1em 0.5em;\n\t\t-webkit-font-smoothing: subpixel-antialiased !important;\n\t\t-moz-osx-font-smoothing: auto !important;\n\t\tfont-weight: 400 !important;\n\t\tcolor: @article-code-color;\n\t\tbackground-color: @article-code-bg;\n\t}\n\tpre {\n\t\tdisplay: block;\n\t\tpadding: 0.75em 1em;\n\t\toverflow: auto;\n\t\tborder-radius: @radius;\n\t\tborder-style: solid;\n\t\tborder-width: @border-small-screen @border-small-screen @border-small-screen @thick-left-border;\n\t\tbackground-color: @article-code-bg;\n\t\tborder-color: @article-code-border;\n z-index: 99;\n\t\tline-height: 1.1em !important;\n\n\t\tcode {\n\t\t\twhite-space: pre;\n\t\t\tword-spacing: normal;\n\t\t\tword-break: normal;\n\t\t\tborder: none;\n\t\t\tpadding: 0;\n\t\t\tborder-radius: 0;\n\t\t\tbackground-color: transparent;\n\t\t}\n\n\t\t&::-webkit-scrollbar { background-color: @article-code-bg;width: @scrollbar-width; }\n\t\t&::-webkit-scrollbar-track { background-color: @article-code-bg; }\n\t\t&::-webkit-scrollbar-thumb {\n\t\t\tborder: 4px solid @article-code-bg;\n\t\t\tbackground-color: @article-code-scrollbar;\n\t\t\tborder-radius: calc(@scrollbar-width / 2);\n\t\t}\n\t}\n}\n\n.page-nav-btns {\n\tdisplay: flex;\n\tposition: relative;\n\tjustify-content: space-between;\n\tmargin: 3em 0 2em;\n\n\ta {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolor: @g20-white !important;\n\t\tfont-size: .95rem;\n\t\tpadding: .75rem 1rem;\n\t\tmargin: 0 .15rem;\n\n\t\t&.prev {\n\t\t\tposition: absolute;\n\t\t\tleft: 0;\n\t\t\t&:before {\n\t\t\t\tcontent: '\\e804';\n\t\t\t\tfont-family: 'icomoon';\n\t\t\t\tfont-size: .85rem;\n\t\t\t\tfont-weight: normal;\n\t\t\t\tvertical-align: middle;\n\t\t\t\tdisplay: inline;\n\t\t\t\tmargin-right: .85rem;\n\t\t\t}\n\t\t}\n\n\t\t&.next {\n\t\t\tposition: absolute;\n\t\t\tright: 0;\n\t\t\t&:after {\n\t\t\t\tcontent: '\\e805';\n\t\t\t\tfont-family: 'icomoon';\n\t\t\t\tfont-size: .85rem;\n\t\t\t\tfont-weight: normal;\n\t\t\t\tvertical-align: middle;\n\t\t\t\tdisplay: inline;\n\t\t\t\tmargin-left: .85rem;\n\t\t\t}\n\t\t}\n\t}\n}\n\n//\n// Content truncater\n// --------------------------------------------------\n\n.truncate {\n\tposition: relative;\n\tmargin-bottom: 3.5rem;\n\n\t.truncate-bottom {\n\t\tposition: absolute;\n\t\tbottom: -30px;\n\t\twidth: 100%;\n\t\tz-index: 100%;\n\t\theight: auto;\n\t}\n\n\ta.truncate-toggle {\n\t\tdisplay: block;\n\t\twidth: 100px;\n\t\tmargin: 0 auto;\n\t\tcolor: @article-text;\n\t\tbackground: @article-bg;\n\t\tpadding: .45rem;\n\t\ttext-align: center;\n\t\tfont-size: .75rem;\n\t\ttext-transform: uppercase;\n\t\tborder-radius: @radius;\n\t\ttransition: color .2s;\n\t\t&:before{\n\t\t\tcontent: \"Show Less\"\n\t\t}\n\t\t&:hover {\n\t\t\tcolor: @default-link-color;\n\t\t}\n\t}\n\t&.closed {\n\t\tmin-height: 200px;\n\t\tmax-height: 25vh;\n\t\toverflow: hidden;\n\n\t\t.truncate-bottom {\n\t\t\tbottom: 0;\n\t\t\tbackground-image: linear-gradient(to bottom, @article-bg-rgba-0, @article-bg-rgba-1);\n\t\t\theight: 100px;\n\t\t}\n\n\t\ta.truncate-toggle {\n\t\t\tmargin-top: 75px;\n\t\t\t&:before {\n\t\t\t\tcontent: \"Show More\"\n\t\t\t}\n\t\t}\n\t}\n}\n\n//\n// Tooltips\n// --------------------------------------------------\n.tooltip {\n\tposition: relative;\n\tdisplay: inline-block;\n\tz-index: 10;\n\tfont-weight: 900;\n\tcolor: @article-tooltip;\n}\n.tooltip-container {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 50%;\n\ttransform: translateX(-50%);\n\toverflow: visible;\n\tvisibility: hidden;\n}\n.tooltip-text {\n\tfont-weight: 600;\n\tline-height: 2em;\n\theight: 2em;\n\tposition: absolute;\n\tborder-radius: @radius;\n\tpadding: 0 0.75em;\n\tfont-size: 0.9rem;\n\tleft: 50%;\n\ttransform: translate(-50%,-1.875rem);\n\ttransition: all 0.2s ease;\n\twhite-space: nowrap;\n\topacity: 0;\n\tfont-style: normal !important;\n\tcolor: @article-tooltip-text;\n\tbackground-color: @article-tooltip-bg;\n}\n.tooltip-text:after {\n\tcontent: '';\n\tposition: absolute;\n\tleft: 50%;\n\tbottom: -14px;\n\ttransform: translateX(-50%);\n\tborder-top: 8px solid @article-tooltip-bg;\n\tborder-right: 8px solid transparent;\n\tborder-bottom: 8px solid transparent;\n\tborder-left: 8px solid transparent;\n}\n.tooltip:hover .tooltip-container {\n\tvisibility: visible;\n}\n.tooltip:hover .tooltip-text {\n\topacity: 1;\n\ttransform: translate(-50%,-2rem);\n}\n\n//\n// Old Version Warning\n// --------------------------------------------------\n.old-version {\n\twidth: 100%;\n\tdisplay: inline-block;\n\tborder-radius: @radius;\n\tfont-size: 1em;\n\tline-height: 1.25em;\n\tpadding: 1.5em 1.5em 1.5em 4em;\n\tcolor: @old-version-text;\n\tbackground-color: @old-version-bg;\n\tposition: relative;\n\tmargin-bottom: 1em;\n\n\t&:after {\n\t\tcontent: \"\\ea0a\";\n\t\tfont-family: 'icomoon';\n\t\tposition: absolute;\n\t\ttop: 50%;\n\t\tleft: 2em;\n\t\ttransform: translate(-50%,-50%) scale(1.5,1.5);\n\t\tfont-size: 1em;\n\t}\n}\n\n//\n// Landing Page h2s\n// --------------------------------------------------\n.section-landing{\n\th2.no-paragraph {\n\t\tmargin: 0 0 1rem;\n\t\tborder: none;\n\t}\n}\n\n//\n// View in Chronograph Button\n// --------------------------------------------------\n.view-in-chronograf {\n\tdisplay: flex;\n\tjustify-content: flex-end;\n\tposition: relative;\n\tbackground-color: @article-code-border;\n\tmargin-top: -1.1rem;\n\tmargin-bottom: 1rem;\n\tpadding: .15rem;\n\tfont-size: .8rem;\n\tborder-radius: 0 0 @radius @radius;\n\talign-items: center;\n\n\t.chronograf-btn {\n\t\tdisplay: inline-block;\n\t\tpadding: .45rem .6rem;\n\t\tcolor: #fff !important;\n\t\tbackground: linear-gradient(to left, @chronograf-dropdown-gradient-a, @c-pool);\n\t\tborder-radius: calc(~\"\"@radius~\" / 2\");\n\t\ttransition: all .5s ease;\n\n\t\t&:after {\n\t\t\tcontent: '\\e801';\n\t\t\tmargin-left: .4rem;\n\t\t\tfont-family: 'icomoon';\n\t\t}\n\n\t\t&:hover {\n\t\t\tcolor: #fff !important;\n\t\t\topacity: 1;\n\t\t}\n\t}\n\n\t.settings {\n\t\topacity: .25;\n\t\tcolor: @article-text !important;\n\t\tmargin-right: .75em;\n\t\ttransition: opacity .2s ease;\n\n\t\t&:hover {\n\t\t\topacity: 1;\n\t\t}\n\t}\n}\n\n// Modal Styles\n.modal-overlay {\n\tdisplay: none;\n position: fixed;\n z-index: 1000;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n overflow: auto;\n\topacity: .75;\n background: linear-gradient(@chronograf-dropdown-gradient-a, @chronograf-dropdown-gradient-b)\n}\n\n.modal-content {\n\tdisplay: none;\n\tbackground: @article-bg;\n\tpadding: 2rem 2rem 1.5rem;\n\tborder-radius: @radius;\n\tposition: fixed;\n\ttop: 10vh;\n\tleft: 50%;\n\ttransform: translateX(-50%);\n\tz-index: 1001;\n\twidth: 90vw;\n\tmax-width: 38rem;\n\ttransition: top .4s ease;\n\n\t&.open {\n\t\ttop: 40vh;\n\t}\n\n\tinput {\n\t\twidth: 100%;\n\t\tmin-width: 10rem;\n\t\tborder-radius: @radius;\n\t\tborder: 2px solid @modal-input-bg;\n\t\tbackground-color: @modal-input-bg;\n\t\tpadding: .5rem;\n\t\tfont-weight: 400;\n\t\tfont-size: 1rem;\n\t\toutline: none;\n\t\ttransition:\n\t\t\tborder-color 0.3s ease,\n\t\t\tcolor 0.3s ease;\n\t\t&:focus {\n\t\t\tborder-color: @nav-search-border-focus;\n\t\t}\n\t}\n\n\tbutton {\n\t\tborder: none;\n\t\toutline: none;\n\t\t&:focus {\n\t\t\tbackground: @chronograf-dropdown-gradient-b !important;\n\t\t}\n\t}\n\n\tlabel {\n\t\tdisplay: block;\n\t\tmargin-bottom: .4rem;\n\t\tfont-weight: 600;\n\t}\n}\n\n#default-chronograf-url {\n\tdisplay: inline-block;\n\tmargin: .5rem 0 0 .25rem;\n\tfont-size: .8rem;\n\tfont-style: italic;\n\tfont-weight: 400;\n\n\t&:hover {\n\t\ttext-transform: underline;\n\t}\n}\n\n.flex-form {\n\tdisplay: flex;\n\tjustify-content: space-between;\n\n\t.save-btn {\n\t\twidth: 5.5rem;\n\t\tmargin: 0 0 0 .25rem;\n\t\ttext-align: center;\n\t\tpadding: .75rem 1rem;\n\t\tcolor: #fff;\n\t\tborder-radius: @radius;\n\t\tfont-weight: 600;\n\t\ttransition: background .2s;\n\t}\n}\n\n//\n// Chronograf modal media queries\n// --------------------------------------------------\n@media (max-width: 500px) {\n\t.flex-form {\n\t\tflex-flow: column;\n\t\t.save-btn {\n\t\t\twidth: 100%;\n\t\t\tmargin: .25rem 0 0;\n\t\t}\n\t}\n\t#default-chronograf-url {\n\t\tdisplay: block;\n\t\tmargin: 1rem auto 0;\n\t}\n}\n\n#save-chronograf-url button {\n\tbackground: @chronograf-link;\n\t&:hover {\n\t\tbackground: @chronograf-dropdown-gradient-b;\n\t}\n}\n\n//\n// Media Queries\n// --------------------------------------------------\n@media (min-width: @breakpoint-small) {\n\t.article {\n\t\tpadding-left: @sidebar-small-width;\n\t}\n\t.article-section {\n\t\tpadding: 3rem;\n\t}\n\t.article-content {\n\t\tcode,\n\t\tpre,\n\t\ttd,\n\t\tth {\n\t\t\tborder-width: @border-large-screen;\n\t\t}\n\t\tpre {\n\t\t\tborder-left-width: @thick-left-border;\n\t\t}\n\t}\n}\n@media (min-width: @breakpoint-large) {\n\t.article {\n\t\tpadding-left: @sidebar-large-width;\n\t}\n\t.article-section {\n\t\tpadding: 4.5rem;\n\t}\n\t.old-version {\n\t\twidth: 60%;\n\t}\n}\n@media (min-width: @breakpoint-huge) {\n\t.article {\n\t\tpadding-left: @sidebar-huge-width;\n\t}\n\t.article-section {\n\t\tpadding: 5rem 11rem;\n\t}\n\t.article-content {\n\t\tfont-size: 1.125rem;\n\t}\n}\n","/*\n\n\tHOME\n\n\t____________________________________________________________\n\n\tNotes:\n\t-\tSimple index view with links to the different products\n\n*/\n.homepage {\n\toverflow: auto;\n\tmin-height: calc(100vh - @nav-height);\n\twidth: 100%;\n\tz-index: 2;\n\t.gradient-h(@g4-onyx,@g0-obsidian);\n\tfont-size: 0;\n\tdisplay: flex;\n\tflex-direction: column;\n\tflex-wrap: wrap;\n\tjustify-content: space-between;\n\n\t.cards-special, .cards-oss, .cards-enterprise {\n\t\tdisplay: flex;\n\t\tflex-direction: row;\n\t\twidth: 100%;\n\t\tflex-wrap: wrap;\n\t\tflex: 1;\n\t}\n\n\t&--card {\n\t\twidth: 100%;\n\t\tdisplay: inline-block;\n\t\toverflow: hidden;\n\t\tposition: relative;\n\n\t\t&-mask {\n\t\t\tposition: absolute;\n\t\t\ttop: 0;\n\t\t\tleft: 0;\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t\topacity: 0.1;\n\t\t\ttransition:\n\t\t\t\topacity 0.75s ease,\n\t\t\t\ttransform 0.75s ease;\n\t\t\tz-index: 1;\n\t\t\tbackground-attachment: scroll;\n\t\t\tbackground-size: cover;\n\t\t\tbackground-position: center center;\n\t\t\tbackground-repeat: no-repeat;\n\t\t\ttransform: scale(1,1);\n\t\t}\n\t\t&:hover {\n\t\t\t.homepage--card-mask {\n\t\t\t\topacity: 1;\n\t\t\t\ttransform: scale(1.2,1.2);\n\t\t\t}\n\t\t\t.homepage--card-title {\n\t\t\t\tcolor: @g20-white !important;\n\t\t\t}\n\t\t}\n\n\t\t&-container {\n\t\t\tposition: relative;\n\t\t\tz-index: 2;\n\t\t\twidth: 100%;\n\t\t\tdisplay: inline-block;\n\t\t\ttext-align: center;\n\t\t\tpadding: 4rem 3rem;\n\t\t\tfont-size: 0;\n\n\t\t\ta:link,\n\t\t\ta:active,\n\t\t\ta:visited {\n\t\t\t\tcolor: @default-link-color;\n\t\t\t\ttransition: color 0.25s ease;\n\t\t\t\ttext-decoration: none;\n\t\t\t}\n\t\t\ta:hover {\n\t\t\t\tcolor: @default-link-hover;\n\t\t\t}\n\t\t}\n\t\t&-title,\n\t\t&-description {\n\t\t\ttext-align: left;\n\t\t\tdisplay: inline-block;\n\t\t\twidth: 100%;\n\t\t\tvertical-align: middle;\n\t\t}\n\t\t&-title {\n\t\t\tfont-size: 2rem;\n\t\t\tfont-family: Klavika-Light, sans-serif;\n\t\t\tfont-weight: 200;\n\t\t\tfont-style: italic;\n\t\t\tcolor: @sidebar-title-color;\n\t\t\tmargin-bottom: 0.5em;\n\t\t\ttransition: color 0.75s ease;\n\t\t}\n\t\t&-description {\n\t\t\tfont-size: 1rem;\n\t\t\tcolor: @article-text;\n\t\t\tline-height: 1.4em;\n\t\t\tfont-weight: 400;\n\t\t}\n\t\t&-link {\n\t\t\tdisplay: inline-block;\n\t\t\tfont-size: 0.875rem;\n\t\t\tfont-weight: 600;\n\t\t\tmargin-left: 0.25rem;\n\t\t\tpadding: 2px 11px;\n\t\t\tborder-radius: 3px;\n\n\t\t\t&:first-of-type {\n\t\t\t\tmargin-top: 1rem;\n\t\t\t}\n\t\t}\n\n\t\t// Themes\n\t\t&.card-telegraf {\n\t\t\t.homepage--card-mask {\n\t\t\t\tbackground-image: url(/img/home-telegraf.svg);\n\t\t\t\tbackground-color: @c-curacao;\n\t\t\t}\n\t\t\t.homepage--card-description {\n\t\t\t\tcolor: @g20-white;\n\t\t\t}\n\t\t\t.homepage--card-title {\n\t\t\t\tcolor: @c-dreamsicle;\n\t\t\t}\n\t\t\ta.homepage--card-link:link,\n\t\t\ta.homepage--card-link:active,\n\t\t\ta.homepage--card-link:visited {\n\t\t\t\tcolor: @g20-white;\n\t\t\t\ttransition:\n\t\t\t\t\tbackground-color 0.25s ease,\n\t\t\t\t\tcolor 0.25s ease;\n\t\t\t}\n\t\t\ta.homepage--card-link:hover {\n\t\t\t\tcolor: @c-dreamsicle;\n\t\t\t\tbackground-color: @g20-white;\n\t\t\t}\n\t\t}\n\t\t&.card-influxdb {\n\t\t\t.homepage--card-mask {\n\t\t\t\tbackground-image: url(/img/home-influxdb.svg);\n\t\t\t\tbackground-color: @c-ocean;\n\t\t\t}\n\t\t\t.homepage--card-description {\n\t\t\t\tcolor: @g20-white;\n\t\t\t}\n\t\t\t.homepage--card-title {\n\t\t\t\tcolor: @c-laser;\n\t\t\t}\n\t\t\ta.homepage--card-link:link,\n\t\t\ta.homepage--card-link:active,\n\t\t\ta.homepage--card-link:visited {\n\t\t\t\tcolor: @g20-white;\n\t\t\t\ttransition:\n\t\t\t\t\tbackground-color 0.25s ease,\n\t\t\t\t\tcolor 0.25s ease;\n\t\t\t}\n\t\t\ta.homepage--card-link:hover {\n\t\t\t\tcolor: @c-pool;\n\t\t\t\tbackground-color: @g20-white;\n\t\t\t}\n\t\t}\n\t\t&.card-chronograf {\n\t\t\t.homepage--card-mask {\n\t\t\t\tbackground-image: url(/img/home-chronograf.svg);\n\t\t\t\tbackground-color: @c-star;\n\t\t\t}\n\t\t\t.homepage--card-description {\n\t\t\t\tcolor: @g20-white;\n\t\t\t}\n\t\t\t.homepage--card-title {\n\t\t\t\tcolor: @c-comet;\n\t\t\t}\n\t\t\ta.homepage--card-link:link,\n\t\t\ta.homepage--card-link:active,\n\t\t\ta.homepage--card-link:visited {\n\t\t\t\tcolor: @g20-white;\n\t\t\t\ttransition:\n\t\t\t\t\tbackground-color 0.25s ease,\n\t\t\t\t\tcolor 0.25s ease;\n\t\t\t}\n\t\t\ta.homepage--card-link:hover {\n\t\t\t\tcolor: @c-comet;\n\t\t\t\tbackground-color: @g20-white;\n\t\t\t}\n\t\t}\n\t\t&.card-kapacitor {\n\t\t\t.homepage--card-mask {\n\t\t\t\tbackground-image: url(/img/home-kapacitor.svg);\n\t\t\t\tbackground-color: @c-rainforest;\n\t\t\t}\n\t\t\t.homepage--card-description {\n\t\t\t\tcolor: @g20-white;\n\t\t\t}\n\t\t\t.homepage--card-title {\n\t\t\t\tcolor: @c-rainforest;\n\t\t\t}\n\t\t\ta.homepage--card-link:link,\n\t\t\ta.homepage--card-link:active,\n\t\t\ta.homepage--card-link:visited {\n\t\t\t\tcolor: @g20-white;\n\t\t\t\ttransition:\n\t\t\t\t\tbackground-color 0.25s ease,\n\t\t\t\t\tcolor 0.25s ease;\n\t\t\t}\n\t\t\ta.homepage--card-link:hover {\n\t\t\t\tcolor: @c-rainforest;\n\t\t\t\tbackground-color: @g20-white;\n\t\t\t}\n\t\t}\n\n\t\t&.card-enterprise_kapacitor {\n\t\t\t.homepage--card-mask {\n\t\t\t\tbackground-image: url(/img/home-kapacitor.svg);\n\t\t\t\tbackground-color: @c-rainforest;\n\t\t\t}\n\t\t\t.homepage--card-description {\n\t\t\t\tcolor: @g20-white;\n\t\t\t}\n\t\t\t.homepage--card-title {\n\t\t\t\tcolor: @c-rainforest;\n\t\t\t}\n\t\t\ta.homepage--card-link:link,\n\t\t\ta.homepage--card-link:active,\n\t\t\ta.homepage--card-link:visited {\n\t\t\t\tcolor: @g20-white;\n\t\t\t\ttransition:\n\t\t\t\t\tbackground-color 0.25s ease,\n\t\t\t\t\tcolor 0.25s ease;\n\t\t\t}\n\t\t\ta.homepage--card-link:hover {\n\t\t\t\tcolor: @c-rainforest;\n\t\t\t\tbackground-color: @g20-white;\n\t\t\t}\n\t\t}\n\n\t\t&.card-enterprise_influxdb {\n\t\t\t.homepage--card-mask {\n\t\t\t\tbackground-image: url(/img/home-influxdb.svg);\n\t\t\t\tbackground-color: @c-ocean;\n\t\t\t}\n\t\t\t.homepage--card-description {\n\t\t\t\tcolor: @g20-white;\n\t\t\t}\n\t\t\t.homepage--card-title {\n\t\t\t\tcolor: @c-laser;\n\t\t\t}\n\t\t\ta.homepage--card-link:link,\n\t\t\ta.homepage--card-link:active,\n\t\t\ta.homepage--card-link:visited {\n\t\t\t\tcolor: @g20-white;\n\t\t\t\ttransition:\n\t\t\t\t\tbackground-color 0.25s ease,\n\t\t\t\t\tcolor 0.25s ease;\n\t\t\t}\n\t\t\ta.homepage--card-link:hover {\n\t\t\t\tcolor: @c-pool;\n\t\t\t\tbackground-color: @g20-white;\n\t\t\t}\n\t\t}\n\n\t\t&.card-flux {\n\t\t\t.homepage--card-mask {\n\t\t\t\tbackground-image: url(/img/home-flux.svg);\n\t\t\t\tbackground-color: #15a194;\n\t\t\t\topacity: 1;\n\t\t\t}\n\t\t\t.homepage--card-description {\n\t\t\t\tcolor: @g20-white;\n\t\t\t}\n\t\t\t.homepage--card-title {\n\t\t\t\tcolor: @g20-white ;\n\t\t\t}\n\t\t\ta.homepage--card-link:link,\n\t\t\ta.homepage--card-link:active,\n\t\t\ta.homepage--card-link:visited {\n\t\t\t\tcolor: @g20-white;\n\t\t\t\ttransition:\n\t\t\t\t\tbackground-color 0.25s ease,\n\t\t\t\t\tcolor 0.25s ease;\n\t\t\t\t&.download{\n\t\t\t\t\tdisplay: none;\n\t\t\t\t}\n\t\t\t}\n\t\t\ta.homepage--card-link:hover {\n\t\t\t\tcolor: @c-viridian;\n\t\t\t\tbackground-color: @g20-white;\n\t\t\t}\n\t\t}\n\n\t\t&.card-platform {\n\t\t\twidth: 100%;\n\t\t\tbackground: linear-gradient(to right, @c-ocean, @c-pool);\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\n\t\t\t.homepage--card-container {\n\t\t\t\tpadding-bottom: 3rem;\n\t\t\t}\n\n\t\t\t.homepage--card-mask {\n\t\t\t\tbackground-image: url(/img/home-influxdb.svg);\n\t\t\t\tbackground-color: @c-ocean;\n\t\t\t\topacity: .9;\n\t\t\t}\n\t\t\t.homepage--card-description {\n\t\t\t\tcolor: @g20-white;\n\t\t\t\ttext-align: center;\n\t\t\t}\n\t\t\t.homepage--card-title {\n\t\t\t\tcolor: @g20-white;\n\t\t\t\ttext-align: center;\n\t\t\t\tfont-size: 2.15rem;\n\t\t\t}\n\t\t\ta.homepage--card-link:link,\n\t\t\ta.homepage--card-link:active,\n\t\t\ta.homepage--card-link:visited {\n\t\t\t\tcolor: @g20-white;\n\t\t\t\ttransition:\n\t\t\t\t\tbackground-color 0.25s ease,\n\t\t\t\t\tcolor 0.25s ease;\n\t\t\t}\n\t\t\ta.homepage--card-link:hover {\n\t\t\t\tcolor: @c-pool;\n\t\t\t\tbackground-color: @g20-white;\n\t\t\t}\n\t\t\ta.btn {\n\t\t\t\tmargin: 1.75rem 0 1rem;\n\t\t\t\tpadding: 1em 1.5em;\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tbackground: @g20-white;\n\t\t\t\tcolor: @c-pool;\n\t\t\t\tborder-radius: 3px;\n\t\t\t\tfont-size: 1rem;\n\t\t\t\tfont-weight: bold;\n\t\t\t\ttransition: all .2s;\n\t\t\t\tbox-shadow: 0 0 15px rgba(255,255,255,0);\n\n\t\t\t\t&:hover {\n\t\t\t\t\tbox-shadow: 0 0 15px rgba(255,255,255,1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n/*\n\tMedia Queries\n\t--------------------------------------------------\n*/\n@media (min-width: @breakpoint-small) {\n\t.homepage--card {\n\t\twidth: 50%;\n\t\tflex-grow: 1;\n\t}\n}\n@media (min-width: @breakpoint-large) {\n\t.homepage--card-container {\n\t\tpadding: 3.5rem;\n\t}\n\t.homepage--card-description {\n\t\tfont-size: 1.075rem;\n\t}\n\t.homepage--card {\n\t\twidth: 25%;\n\t\theight: auto;\n\n\t\t&.card-platform {\n\t\t\twidth: 75%;\n\t\t}\n\n\t\t&.card-enterprise_influxdb,\n\t\t&.card-enterprise_kapacitor {\n\t\t\twidth: 50%;\n\t\t}\n\t}\n}\n@media (min-width: @breakpoint-huge) {\n\t.homepage--card-container {\n\t\tpadding: 4rem;\n\t}\n\t.homepage--card-description {\n\t\tfont-size: 1.125rem;\n\t}\n}\n","/*\n\n\tERROR PAGES\n\n\t____________________________________________________________\n\n\tNotes:\n\t-\tSimple index view with links to the different products\n\n*/\n.error-page {\n\toverflow: scroll;\n\ttop: @nav-height;\n\theight: 100%;\n\twidth: 100%;\n\t.gradient-v(@error-bg,@error-bg-accent);\n}\n.error-content {\n\tmargin: 15vh auto;\n\twidth: 85%;\n\tmax-width: 400px;\n\tmin-width: 240px;\n\tfont-size: 15px;\n\tline-height: 19px;\n\tcolor: @error-text;\n\n\th1 {\n\t\tcolor: @error-decor;\n\t\tdisplay: block;\n\t\tmargin: 0 auto 50px;\n\t\tpadding-top: 15px;\n\t\twidth: 212px;\n\t\theight: 212px;\n\t\tborder-radius: 50%;\n\t\ttext-align: center;\n\t\tfont-size: 90px;\n\t\tfont-weight: 200;\n\t\tline-height: 180px;\n\t\tposition: relative;\n\t\tborder: 2px solid @error-decor;\n\n\t\t// &:after {\n\t\t// \tcontent: '';\n\t\t// \tposition: absolute;\n\t\t// \ttop: 50%;\n\t\t// \tleft: 50%;\n\t\t//\n\t\t// \ttransform: translate(-50%,-50%);\n\t\t// \tborder-radius: 50%;\n\t\t//\n\t\t// }\n\t}\n}\n\n.flex {\n\tdisplay: flex;\n\tjustify-content: space-around;\n}\n\n.wayfinding {\n\tmargin-bottom: 2rem;\n}\n\n.btn {\n\tdisplay: block;\n\tpadding: .5rem;\n\tbackground: @error-decor;\n\tcolor: #fff;\n\tborder-radius: @radius;\n\ttext-align: center;\n\ttransition: background .2s;\n\n\t&.back {\n\t\tflex-grow: 1;\n\t\tmargin-right: .35rem;\n\n\t\t&:before {\n\t\t\tcontent: \"\\ea41\";\n\t\t\tfont-family: 'icomoon';\n\t\t\tmargin-right: .5rem;\n\t\t\tfont-size: 1rem;\n\t\t}\n\t}\n\n\t&.project{\n\t\tflex-grow: 3;\n\t\tdisplay: none;\n\n\t\t&:before {\n\t\t\tcontent: \"\\e801\";\n\t\t\tfont-family: 'icomoon';\n\t\t\tmargin-right: .5rem;\n\t\t\tflex-grow: 3;\n\t\t}\n\t}\n\n\t&:hover {\n\t\tbackground: @c-pool;\n\t}\n}\n\n/*\n\tMedia Queries\n\t--------------------------------------------------\n*/\n@media (min-width: @breakpoint-small) {\n\t.error-content {\n\t\tfont-size: 17px;\n\t\tline-height: 22px;\n\t}\n}\n@media (min-width: @breakpoint-large) {\n}\n@media (min-width: @breakpoint-huge) {\n\t.error-content {\n\t\tfont-size: 21px;\n\t\tline-height: 32px;\n\t}\n}\n",".tabs-container {\n margin: 2em 0 2em;\n}\n.tabs {\n flex-grow: 1;\n border-radius: @radius 0 0 @radius;\n}\n.tabs p {\n display: flex;\n flex-wrap: wrap;\n}\n.tabs a {\n flex-grow: 1;\n margin: 2px;\n font-size: 0.875em;\n color: @tabs-link !important;\n padding: .5em 1em;\n display: inline-block;\n text-align: center;\n border-radius: @radius;\n background-color: fadeout(@tabs-link-bg, 50%);\n transition: background-color .2s, color .2s;\n\n &:hover {\n color: @tabs-link-hover !important;\n }\n &.is-active {\n color: @g20-white !important;\n background: @default-link-color;\n }\n}\n\n.tab-content {\n width: 100%;\n\n & > * {\n width: 100% !important;\n margin-left: 0 !important;\n }\n}\n\n.tab-content:not(:first-child) {\n display: none;\n}\n\n.tab-content-container {\n position: relative;\n border-radius: 0 @radius @radius @radius;\n}\n\n////////////////////////////////// Code Tabs //////////////////////////////////\n\n.code-tabs-content {\n margin: .75rem 0 3rem;\n width: 100%;\n\n & > * {\n width: 100% !important;\n margin-left: 0 !important;\n }\n}\n\n.code-tabs-wrapper {\n margin: 1.5rem 0 .5rem;\n\n .code-tabs {\n p {\n margin: 0;\n text-align: right;\n display: block;\n font-size: .9rem;\n }\n a {\n padding: .25rem .75rem;\n margin: 0;\n border-radius: @radius @radius 0 0;\n display: inline-block;\n background: fadeout(@article-code-border, 40%) ;\n color: fadeout(@tabs-link, 50%) !important;\n &:hover {\n color: @tabs-link-hover !important;\n }\n &.is-active {\n background-color: @article-code-border ;\n color: @tabs-link-active !important;\n }\n }\n }\n\n .code-tab-content {\n padding: 0;\n pre {\n margin: 0 0 3rem;\n border-radius: @radius 0 @radius @radius;\n }\n &:not(:first-of-type) {\n display: none;\n }\n }\n}\n\n//\n// Media Queries\n// -------------\n\n@media (min-width: @breakpoint-small) {\n .tabs-container .tabs a {\n flex-grow: 0;\n }\n}\n","/////////////////////// Styles for Telegraf plugin cards ///////////////////////\n\n.plugin-card {\n position: relative;\n padding: 1rem 1.5rem;\n margin-bottom: .5rem;\n justify-content: center;\n align-items: center;\n background: @article-bg-darken;\n border-radius: @radius;\n\n h3 {\n padding: 0;\n margin-top: .25rem;\n }\n\n &.new h3:after {\n content: \"New\";\n margin-left: .3rem;\n padding: .25rem .5rem;\n font-style: italic;\n color: @sidebar-title-color;\n font-size: 1.2rem;\n }\n\n p {\n &.meta {\n margin: .75rem 0;\n font-weight: 500;\n color: @article-text;\n line-height: 1.75rem;\n\n .deprecated {\n margin-left: .5rem;\n font-style: italic;\n color: @article-code-accent7;\n }\n }\n }\n\n & .info {\n & > p:last-child { margin-bottom: .5rem; }\n & > ul:last-child { margin-bottom: .5rem; }\n & > ol:last-child { margin-bottom: .5rem; }\n }\n\n .github-link {\n position: absolute;\n color: @g20-white !important;\n top: .5rem;\n right: .5rem;\n opacity: 0;\n transition: opacity .2s, background .2s, color 2s;\n\n .icon-github {\n font-size: 1.2rem;\n margin: 0 .25rem 0 0;\n }\n }\n\n &:hover {\n .github-link { opacity: 1; }\n }\n\n // Special use-case for using block quotes in the yaml provided by the data file\n blockquote {\n border-color: @article-note-border;\n background: fade(@article-note-bg, 50%);\n h3,h4,h5,h6 { color: @article-text-heading; }\n p, li {\n color: @article-note-text;\n font-size: 1rem;\n font-style: normal;\n }\n strong { color: inherit; }\n a {\n color: @telegraf-link;\n code:after {\n border-color: transparent fade(@article-note-code, 35%) transparent transparent;\n }\n &:hover {\n color: @telegraf-link-hover;\n code:after {\n border-color: transparent @telegraf-link-hover transparent transparent;\n }\n }\n }\n ol li:before { color: @article-note-text; }\n code, pre{\n color: @article-note-code;\n background: @article-note-code-bg;\n }\n }\n}\n\n//////////////////////////////// Plugin Filters ////////////////////////////////\n\n#plugin-filters {\n display: flex;\n flex-flow: row wrap;\n align-items: flex-start;\n\n .filter-category {\n flex: 1 1 200px;\n margin: 0 1.25rem 1.25rem 0;\n max-width: 33%;\n\n &.two-columns {\n flex: 1 2 400px;\n max-width: 66%;\n .filter-list {\n columns: 2;\n }\n }\n }\n\n h5 {\n border-bottom: 1px solid fade(@article-text, 25%);\n padding-bottom: .65rem;\n }\n\n .filter-list {\n padding: 0;\n margin: .5rem 0 0;\n list-style: none;\n li {\n padding: 0;\n margin: 0;\n line-height: 1.35rem;\n list-style-type: none !important;\n }\n }\n\n label {\n display: block;\n padding: .25rem 0;\n color: @article-text;\n position: relative;\n\n &:after {\n content: attr(data-count);\n margin-left: .25rem;\n font-size: .85rem;\n opacity: .5;\n }\n }\n\n .checkbox {\n display: inline-block;\n height: 1.15em;\n width: 1.15em;\n background: fade(@article-text, 5%);\n margin-right: .3rem;\n vertical-align: text-top;\n border-radius: @radius;\n cursor: pointer;\n border: 1.5px solid fade(@article-text, 20%);\n user-select: none;\n }\n\n input[type='checkbox'] {\n margin-right: -1.1rem ;\n padding: 0;\n vertical-align: top;\n opacity: 0;\n cursor: pointer;\n\n & + .checkbox:after {\n content: \"\";\n display: block;\n position: absolute;\n height: .5rem;\n width: .5rem;\n border-radius: 50%;\n background: @telegraf-link;\n top: .65rem;\n left: .35rem;\n opacity: 0;\n transform: scale(2);\n transition: all .2s;\n }\n\n &:checked + .checkbox:after {\n opacity: 1;\n transform: scale(1);\n }\n }\n}\n\n////////////////////////////////////////////////////////////////////////////////\n///////////////////////////////// MEDIA QUERIES ////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////\n\n@media(max-width: 1100px) {\n #plugin-filters {\n .filter-category {\n max-width: 50%;\n &.two-columns, &.three-columns {\n max-width: 100%;\n }\n }\n }\n}\n\n@media(max-width: 800px) {\n #plugin-filters{\n .filter-category {\n max-width: 100%;\n }\n }\n\n .plugin-card {\n .github-link {\n opacity: 1;\n padding: .25rem .35rem .35rem;\n line-height: 0;\n font-size: 1.35rem;\n .icon-github { margin: 0; }\n .hide { display: none; }\n }\n }\n}\n","/////////////////////////// Flex Content Blocks ///////////////////////////\n\n.article-content {\n .flex-wrapper {\n display: flex;\n flex-wrap: wrap;\n }\n\n .flex-container {\n margin-right: 2rem;\n &.half { width: ~\"calc(50% - 2rem)\"; }\n &.third { width: ~\"calc(33.33% - 2rem)\"; }\n &.quarter { width: ~\"calc(25% - 2rem)\"; }\n }\n}\n\n////////////////////////////////////////////////////////////////////////////////\n///////////////////////////////// MEDIA QUERIES ////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////\n\n@include media(small) {\n .article-content .flex-container {\n &.half, &.third { width: ~\"calc(100% - 2rem)\"; }\n &.quarter { width: ~\"calc(50% - 2rem)\"; }\n }\n}\n","@svg-geo-s2-cell: @c-pool;\n@svg-geo-region: @c-star;\n@svg-geo-point: @c-dreamsicle;\n\nsvg[id^='geo-s2-cells-'] {\n max-width: 250px;\n .geo-cell{fill:fade(@svg-geo-s2-cell, 25%);stroke:@svg-geo-s2-cell;stroke-width:3;stroke-linejoin:round;stroke-miterlimit:10;}\n\t.geo-region{fill:fade(@svg-geo-region, 35%);stroke:@svg-geo-region;stroke-width:3;stroke-linejoin:round;stroke-miterlimit:10;}\n\t.geo-point{fill:@svg-geo-point;}\n}\n\nspan.key-geo-cell {\n display: inline-block;\n vertical-align: middle;\n margin: 0 .5rem .25rem 0;\n width: 1.1em;\n height: 1.1em;\n border: 2px solid @svg-geo-s2-cell;\n background: fade(@svg-geo-s2-cell, 25%);\n border-radius: 2px;\n}\nspan.key-geo-region {\n display: inline-block;\n vertical-align: middle;\n margin: 0 .5rem .25rem 0;\n width: 1.1em;\n height: 1.1em;\n border: 2px solid @svg-geo-region;\n background: fade(@svg-geo-region, 35%);\n border-radius: 2px;\n}\nspan.key-geo-point {\n display: inline-block;\n margin: 0 .7rem 0 .25rem;\n width: .65rem;\n height: .65rem;\n border-radius: 50%;\n background: @svg-geo-point;\n}\n","/*\n\n T E L E G R A F T H E M E\n\n ____________________________________________________________\n\n Notes:\n - Only contains color overrides for layout-article.less\n\n*/\n\n\n//\n// Override only if class is applied to body\n// -------------------------------------------------------------\nbody.docs-theme--telegraf {\n\n //\n // Article Styles\n // ---------------------------------------------------------\n .article-content {\n a:link,\n a:active,\n a:visited {\n color: @telegraf-link;\n }\n a:hover {\n color: @telegraf-link-hover;\n }\n a.top:hover {\n background: @telegraf-link-hover;\n }\n a.btn {\n background: @telegraf-btn;\n &:hover {\n background: @telegraf-btn-hover;\n }\n }\n &.section-landing{\n \t\th2 a.off-page:link:hover {\n \t\t\tcolor: @telegraf-link !important;\n \t\t}\n \t}\n }\n\n //\n // Sidebar Styles\n // ---------------------------------------------------------\n .sidebar--mask-container {\n .sidebar--mask {\n .gradient-v(@telegraf-dropdown-gradient-a,@telegraf-dropdown-gradient-b);\n }\n }\n .sidebar--section-title {\n a:link,\n a:active,\n a:visited {\n color: @telegraf-section-title;\n font-weight: 400;\n }\n a:hover {\n color: @telegraf-link-hover;\n }\n }\n a.sidebar--page {\n &:hover {\n color: @telegraf-link-hover;\n }\n }\n\n //\n // Navbar Styles\n // ---------------------------------------------------------\n .navbar--product-dropdown {\n background-color: @telegraf-dropdown;\n &:hover {\n background-color: @telegraf-dropdown-hover;\n }\n }\n .navbar--product-menu {\n .gradient-v(@telegraf-dropdown-gradient-a,@telegraf-dropdown-gradient-b);\n }\n\n // Tab Labels\n .tabs a.is-active {\n background: @telegraf-link;\n }\n}\n","/*\n\n C H R O N O G R A F T H E M E\n\n ____________________________________________________________\n\n Notes:\n - Only contains color overrides for layout-article.less\n\n*/\n\n\n//\n// Override only if class is applied to body\n// -------------------------------------------------------------\nbody.docs-theme--chronograf {\n\n //\n // Article Styles\n // ---------------------------------------------------------\n .article-content {\n a:link,\n a:active,\n a:visited {\n color: @chronograf-link;\n }\n a:hover {\n color: @chronograf-link-hover;\n }\n a.top:hover {\n background: @chronograf-link-hover;\n }\n a.btn {\n background: @chronograf-btn;\n &:hover {\n background: @chronograf-btn-hover;\n }\n }\n &.section-landing{\n \t\th2 a.off-page:link:hover {\n \t\t\tcolor: @chronograf-link !important;\n \t\t}\n \t}\n }\n\n //\n // Sidebar Styles\n // ---------------------------------------------------------\n .sidebar--mask-container {\n .sidebar--mask {\n .gradient-v(@chronograf-dropdown-gradient-a,@chronograf-dropdown-gradient-b);\n }\n }\n .sidebar--section-title {\n a:link,\n a:active,\n a:visited {\n color: @chronograf-section-title;\n font-weight: 400;\n }\n a:hover {\n color: @chronograf-link-hover;\n }\n }\n a.sidebar--page {\n &:hover {\n color: @chronograf-link-hover;\n }\n }\n\n //\n // Navbar Styles\n // ---------------------------------------------------------\n .navbar--product-dropdown {\n background-color: @chronograf-dropdown;\n &:hover {\n background-color: @chronograf-dropdown-hover;\n }\n }\n .navbar--product-menu {\n .gradient-v(@chronograf-dropdown-gradient-a,@chronograf-dropdown-gradient-b);\n }\n\n // Tab Labels\n .tabs a.is-active {\n background: @chronograf-link;\n }\n}\n","/*\n\n K A P A C I T O R T H E M E\n\n ____________________________________________________________\n\n Notes:\n - Only contains color overrides for layout-article.less\n\n*/\n\n\n//\n// Override only if class is applied to body\n// -------------------------------------------------------------\nbody.docs-theme--kapacitor {\n\n //\n // Article Styles\n // ---------------------------------------------------------\n .article-content {\n a:link,\n a:active,\n a:visited {\n color: @kapacitor-link;\n }\n a:hover {\n color: @kapacitor-link-hover;\n }\n a.top:hover {\n background: @kapacitor-link-hover;\n }\n a.btn {\n background: @kapacitor-btn;\n &:hover {\n background: @kapacitor-btn-hover;\n }\n }\n &.section-landing{\n \t\th2 a.off-page:link:hover {\n \t\t\tcolor: @kapacitor-link !important;\n \t\t}\n \t}\n }\n\n //\n // Sidebar Styles\n // ---------------------------------------------------------\n .sidebar--mask-container {\n .sidebar--mask {\n .gradient-v(@kapacitor-dropdown-gradient-a,@kapacitor-dropdown-gradient-b);\n }\n }\n .sidebar--section-title {\n a:link,\n a:active,\n a:visited {\n color: @kapacitor-section-title;\n font-weight: 400;\n }\n a:hover {\n color: @kapacitor-link-hover;\n }\n }\n a.sidebar--page {\n &:hover {\n color: @kapacitor-link-hover;\n }\n }\n\n //\n // Navbar Styles\n // ---------------------------------------------------------\n .navbar--product-dropdown {\n background-color: @kapacitor-dropdown;\n &:hover {\n background-color: @kapacitor-dropdown-hover;\n }\n }\n .navbar--product-menu {\n .gradient-v(@kapacitor-dropdown-gradient-a,@kapacitor-dropdown-gradient-b);\n }\n\n // Tab Labels\n .tabs a.is-active {\n background: @kapacitor-link;\n }\n}\n","/*\n\n K A P A C I T O R T H E M E\n\n ____________________________________________________________\n\n Notes:\n - Only contains color overrides for layout-article.less\n\n*/\n\n\n//\n// Override only if class is applied to body\n// -------------------------------------------------------------\nbody.docs-theme--enterprise_kapacitor {\n\n //\n // Article Styles\n // ---------------------------------------------------------\n .article-content {\n a:link,\n a:active,\n a:visited {\n color: @kapacitor-link;\n }\n a:hover {\n color: @kapacitor-link-hover;\n }\n a.top:hover {\n background: @kapacitor-link-hover;\n }\n a.btn {\n background: @kapacitor-btn;\n &:hover {\n background: @kapacitor-btn-hover;\n }\n }\n &.section-landing{\n \t\th2 a.off-page:link:hover {\n \t\t\tcolor: @kapacitor-link !important;\n \t\t}\n \t}\n }\n\n //\n // Sidebar Styles\n // ---------------------------------------------------------\n .sidebar--mask-container {\n .sidebar--mask {\n .gradient-v(@kapacitor-dropdown-gradient-a,@kapacitor-dropdown-gradient-b);\n }\n }\n .sidebar--section-title {\n a:link,\n a:active,\n a:visited {\n color: @kapacitor-section-title;\n font-weight: 400;\n }\n a:hover {\n color: @kapacitor-link-hover;\n }\n }\n a.sidebar--page {\n &:hover {\n color: @kapacitor-link-hover;\n }\n }\n\n //\n // Navbar Styles\n // ---------------------------------------------------------\n .navbar--product-dropdown {\n background-color: @kapacitor-dropdown;\n &:hover {\n background-color: @kapacitor-dropdown-hover;\n }\n }\n .navbar--product-menu {\n .gradient-v(@kapacitor-dropdown-gradient-a,@kapacitor-dropdown-gradient-b);\n }\n\n // Tab Labels\n .tabs a.is-active {\n background: @kapacitor-link;\n }\n}\n","/*\n\n F L U X T H E M E\n\n ____________________________________________________________\n\n Notes:\n - Only contains color overrides for layout-article.less\n\n*/\n\n\n//\n// Override only if class is applied to body\n// -------------------------------------------------------------\nbody.docs-theme--flux {\n\n //\n // Article Styles\n // ---------------------------------------------------------\n .article-content {\n a:link,\n a:active,\n a:visited {\n color: @flux-link;\n }\n a:hover {\n color: @flux-link-hover;\n }\n a.top:hover {\n background: @flux-link-hover;\n }\n &.section-landing{\n \t\th2 a.off-page:link:hover {\n \t\t\tcolor: @flux-link !important;\n \t\t}\n \t}\n }\n\n //\n // Sidebar Styles\n // ---------------------------------------------------------\n .sidebar--mask-container {\n .sidebar--mask {\n .gradient-v(@flux-dropdown-gradient-a,@flux-dropdown-gradient-b);\n }\n }\n .sidebar--section-title {\n a:link,\n a:active,\n a:visited {\n color: @flux-section-title;\n font-weight: 400;\n }\n a:hover {\n color: @flux-link-hover;\n }\n }\n a.sidebar--page {\n &:hover {\n color: @flux-link-hover;\n }\n }\n\n //\n // Navbar Styles\n // ---------------------------------------------------------\n .navbar--product-dropdown {\n background-color: @flux-dropdown;\n &:hover {\n background-color: @flux-dropdown-hover;\n }\n }\n .navbar--product-menu {\n .gradient-v(@flux-dropdown-gradient-a,@flux-dropdown-gradient-b);\n }\n\n // Tab Labels\n .tabs a.is-active {\n background: @flux-link;\n }\n}\n"]} \ No newline at end of file diff --git a/static/css/docs-light.css b/static/css/docs-light.css index cceca127a8..7c541abc87 100644 --- a/static/css/docs-light.css +++ b/static/css/docs-light.css @@ -1,2 +1,2 @@ -.klavika-font{font-family:Klavika-Light,'Helvetica Neue',Helvetica,Helvetica,Arial,Tahoma,Verdana,sans-serif;font-weight:200}@font-face{font-family:icomoon;src:url(../fonts/icomoon.eot?c3omf0);src:url(../fonts/icomoon.eot?c3omf0#iefix) format('embedded-opentype'),url(../fonts/icomoon.woff2?c3omf0) format('woff2'),url(../fonts/icomoon.ttf?c3omf0) format('truetype'),url(../fonts/icomoon.woff?c3omf0) format('woff'),url(../fonts/icomoon.svg?c3omf0#icomoon) format('svg');font-weight:400;font-style:normal}.icon{font-family:icomoon;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon.sun2:before{content:"\eae2"}.icon.moon:before{content:"\eae3"}.icon.logotype:before{content:"\e800"}.icon.logo:before{content:"\e801"}.icon.arrow-down:before{content:"\e802"}.icon.arrow-up:before{content:"\e803"}.icon.arrow-left:before{content:"\e804"}.icon.arrow-right:before{content:"\e805"}.icon.health:before{content:"\e806"}.icon.lightning:before{content:"\e807"}.icon.matrix:before{content:"\e808"}.icon.cluster:before{content:"\e809"}.icon.data:before{content:"\e80a"}.icon.google:before{content:"\e81a"}.icon.eyeball:before{content:"\e901"}.icon.infinite:before{content:"\e902"}.icon.dashboard:before{content:"\eade"}.icon.analytics:before{content:"\eadf"}.icon.cloud-stack:before{content:"\eae0"}.icon.iot:before{content:"\eae1"}.icon.home:before{content:"\e904"}.icon.home2:before{content:"\e905"}.icon.home3:before{content:"\e906"}.icon.office:before{content:"\e907"}.icon.newspaper:before{content:"\e908"}.icon.pencil:before{content:"\e909"}.icon.pencil2:before{content:"\e90a"}.icon.quill:before{content:"\e90b"}.icon.pen:before{content:"\e90c"}.icon.blog:before{content:"\e90d"}.icon.eyedropper:before{content:"\e90e"}.icon.droplet:before{content:"\e90f"}.icon.paint-format:before{content:"\e910"}.icon.image:before{content:"\e911"}.icon.images:before{content:"\e912"}.icon.camera:before{content:"\e913"}.icon.headphones:before{content:"\e914"}.icon.music:before{content:"\e915"}.icon.play:before{content:"\e916"}.icon.film:before{content:"\e917"}.icon.video-camera:before{content:"\e918"}.icon.dice:before{content:"\e919"}.icon.pacman:before{content:"\e91a"}.icon.spades:before{content:"\e91b"}.icon.clubs:before{content:"\e91c"}.icon.diamonds:before{content:"\e91d"}.icon.bullhorn:before{content:"\e91e"}.icon.connection:before{content:"\e91f"}.icon.podcast:before{content:"\e920"}.icon.feed:before{content:"\e921"}.icon.mic:before{content:"\e922"}.icon.book:before{content:"\e923"}.icon.books:before{content:"\e924"}.icon.library:before{content:"\e925"}.icon.file-text:before{content:"\e926"}.icon.profile:before{content:"\e927"}.icon.file-empty:before{content:"\e928"}.icon.files-empty:before{content:"\e929"}.icon.file-text2:before{content:"\e92a"}.icon.file-picture:before{content:"\e92b"}.icon.file-music:before{content:"\e92c"}.icon.file-play:before{content:"\e92d"}.icon.file-video:before{content:"\e92e"}.icon.file-zip:before{content:"\e92f"}.icon.copy:before{content:"\e930"}.icon.paste:before{content:"\e931"}.icon.stack:before{content:"\e932"}.icon.folder:before{content:"\e933"}.icon.folder-open:before{content:"\e934"}.icon.folder-plus:before{content:"\e935"}.icon.folder-minus:before{content:"\e936"}.icon.folder-download:before{content:"\e937"}.icon.folder-upload:before{content:"\e938"}.icon.price-tag:before{content:"\e939"}.icon.price-tags:before{content:"\e93a"}.icon.barcode:before{content:"\e93b"}.icon.qrcode:before{content:"\e93c"}.icon.ticket:before{content:"\e93d"}.icon.cart:before{content:"\e93e"}.icon.coin-dollar:before{content:"\e93f"}.icon.coin-euro:before{content:"\e940"}.icon.coin-pound:before{content:"\e941"}.icon.coin-yen:before{content:"\e942"}.icon.credit-card:before{content:"\e943"}.icon.calculator:before{content:"\e944"}.icon.lifebuoy:before{content:"\e945"}.icon.phone:before{content:"\e946"}.icon.phone-hang-up:before{content:"\e947"}.icon.address-book:before{content:"\e948"}.icon.envelop:before{content:"\e949"}.icon.pushpin:before{content:"\e94a"}.icon.location:before{content:"\e94b"}.icon.location2:before{content:"\e94c"}.icon.compass:before{content:"\e94d"}.icon.compass2:before{content:"\e94e"}.icon.map:before{content:"\e94f"}.icon.map2:before{content:"\e950"}.icon.history:before{content:"\e951"}.icon.clock:before{content:"\e952"}.icon.clock2:before{content:"\e953"}.icon.alarm:before{content:"\e954"}.icon.bell:before{content:"\e955"}.icon.stopwatch:before{content:"\e956"}.icon.calendar:before{content:"\e957"}.icon.printer:before{content:"\e958"}.icon.keyboard:before{content:"\e959"}.icon.display:before{content:"\e95a"}.icon.laptop:before{content:"\e95b"}.icon.mobile:before{content:"\e95c"}.icon.mobile2:before{content:"\e95d"}.icon.tablet:before{content:"\e95e"}.icon.tv:before{content:"\e95f"}.icon.drawer:before{content:"\e960"}.icon.drawer2:before{content:"\e961"}.icon.box-add:before{content:"\e962"}.icon.box-remove:before{content:"\e963"}.icon.download:before{content:"\e964"}.icon.upload:before{content:"\e965"}.icon.floppy-disk:before{content:"\e966"}.icon.drive:before{content:"\e967"}.icon.database:before{content:"\e968"}.icon.undo:before{content:"\e969"}.icon.redo:before{content:"\e96a"}.icon.undo2:before{content:"\e96b"}.icon.redo2:before{content:"\e96c"}.icon.forward:before{content:"\e96d"}.icon.reply:before{content:"\e96e"}.icon.bubble:before{content:"\e96f"}.icon.bubbles:before{content:"\e970"}.icon.bubbles2:before{content:"\e971"}.icon.bubble2:before{content:"\e972"}.icon.bubbles3:before{content:"\e973"}.icon.bubbles4:before{content:"\e974"}.icon.user:before{content:"\e975"}.icon.users:before{content:"\e976"}.icon.user-plus:before{content:"\e977"}.icon.user-minus:before{content:"\e978"}.icon.user-check:before{content:"\e979"}.icon.user-tie:before{content:"\e97a"}.icon.quotes-left:before{content:"\e97b"}.icon.quotes-right:before{content:"\e97c"}.icon.hour-glass:before{content:"\e97d"}.icon.spinner:before{content:"\e97e"}.icon.spinner2:before{content:"\e97f"}.icon.spinner3:before{content:"\e980"}.icon.spinner4:before{content:"\e981"}.icon.spinner5:before{content:"\e982"}.icon.spinner6:before{content:"\e983"}.icon.spinner7:before{content:"\e984"}.icon.spinner8:before{content:"\e985"}.icon.spinner9:before{content:"\e986"}.icon.spinner10:before{content:"\e987"}.icon.spinner11:before{content:"\e988"}.icon.binoculars:before{content:"\e989"}.icon.search:before{content:"\e98a"}.icon.zoom-in:before{content:"\e98b"}.icon.zoom-out:before{content:"\e98c"}.icon.enlarge:before{content:"\e98d"}.icon.shrink:before{content:"\e98e"}.icon.enlarge2:before{content:"\e98f"}.icon.shrink2:before{content:"\e990"}.icon.key:before{content:"\e991"}.icon.key2:before{content:"\e992"}.icon.lock:before{content:"\e993"}.icon.unlocked:before{content:"\e994"}.icon.wrench:before{content:"\e995"}.icon.equalizer:before{content:"\e996"}.icon.equalizer2:before{content:"\e997"}.icon.cog:before{content:"\e900"}.icon.cogs:before{content:"\e998"}.icon.hammer:before{content:"\e999"}.icon.magic-wand:before{content:"\e99a"}.icon.aid-kit:before{content:"\e99b"}.icon.bug:before{content:"\e99c"}.icon.pie-chart:before{content:"\e99d"}.icon.stats-dots:before{content:"\e99e"}.icon.stats-bars:before{content:"\e99f"}.icon.stats-bars2:before{content:"\e9a0"}.icon.trophy:before{content:"\e9a1"}.icon.gift:before{content:"\e9a2"}.icon.glass:before{content:"\e9a3"}.icon.glass2:before{content:"\e9a4"}.icon.mug:before{content:"\e9a5"}.icon.spoon-knife:before{content:"\e9a6"}.icon.leaf:before{content:"\e9a7"}.icon.rocket:before{content:"\e9a8"}.icon.meter:before{content:"\e9a9"}.icon.meter2:before{content:"\e9aa"}.icon.hammer2:before{content:"\e9ab"}.icon.fire:before{content:"\e9ac"}.icon.lab:before{content:"\e9ad"}.icon.magnet:before{content:"\e9ae"}.icon.bin:before{content:"\e9af"}.icon.bin2:before{content:"\e9b0"}.icon.briefcase:before{content:"\e9b1"}.icon.airplane:before{content:"\e9b2"}.icon.truck:before{content:"\e9b3"}.icon.road:before{content:"\e9b4"}.icon.accessibility:before{content:"\e9b5"}.icon.target:before{content:"\e9b6"}.icon.shield:before{content:"\e9b7"}.icon.power:before{content:"\e9b8"}.icon.switch:before{content:"\e9b9"}.icon.power-cord:before{content:"\e9ba"}.icon.clipboard:before{content:"\e9bb"}.icon.list-numbered:before{content:"\e9bc"}.icon.list:before{content:"\e9bd"}.icon.list2:before{content:"\e9be"}.icon.tree:before{content:"\e9bf"}.icon.menu:before{content:"\e9c0"}.icon.menu2:before{content:"\e9c1"}.icon.menu3:before{content:"\e9c2"}.icon.menu4:before{content:"\e9c3"}.icon.cloud:before{content:"\e9c4"}.icon.cloud-download:before{content:"\e9c5"}.icon.cloud-upload:before{content:"\e9c6"}.icon.cloud-check:before{content:"\e9c7"}.icon.download2:before{content:"\e9c8"}.icon.upload2:before{content:"\e9c9"}.icon.download3:before{content:"\e9ca"}.icon.upload3:before{content:"\e9cb"}.icon.sphere:before{content:"\e9cc"}.icon.earth:before{content:"\e9cd"}.icon.link:before{content:"\e9ce"}.icon.flag:before{content:"\e9cf"}.icon.attachment:before{content:"\e9d0"}.icon.eye:before{content:"\e9d1"}.icon.eye-plus:before{content:"\e9d2"}.icon.eye-minus:before{content:"\e9d3"}.icon.eye-blocked:before{content:"\e9d4"}.icon.bookmark:before{content:"\e9d5"}.icon.bookmarks:before{content:"\e9d6"}.icon.sun:before{content:"\e9d7"}.icon.contrast:before{content:"\e9d8"}.icon.brightness-contrast:before{content:"\e9d9"}.icon.star-empty:before{content:"\e9da"}.icon.star-half:before{content:"\e9db"}.icon.star-full:before{content:"\e9dc"}.icon.heart:before{content:"\e9dd"}.icon.heart-broken:before{content:"\e9de"}.icon.man:before{content:"\e9df"}.icon.woman:before{content:"\e9e0"}.icon.man-woman:before{content:"\e9e1"}.icon.happy:before{content:"\e9e2"}.icon.happy2:before{content:"\e9e3"}.icon.smile:before{content:"\e9e4"}.icon.smile2:before{content:"\e9e5"}.icon.tongue:before{content:"\e9e6"}.icon.tongue2:before{content:"\e9e7"}.icon.sad:before{content:"\e9e8"}.icon.sad2:before{content:"\e9e9"}.icon.wink:before{content:"\e9ea"}.icon.wink2:before{content:"\e9eb"}.icon.grin:before{content:"\e9ec"}.icon.grin2:before{content:"\e9ed"}.icon.cool:before{content:"\e9ee"}.icon.cool2:before{content:"\e9ef"}.icon.angry:before{content:"\e9f0"}.icon.angry2:before{content:"\e9f1"}.icon.evil:before{content:"\e9f2"}.icon.evil2:before{content:"\e9f3"}.icon.shocked:before{content:"\e9f4"}.icon.shocked2:before{content:"\e9f5"}.icon.baffled:before{content:"\e9f6"}.icon.baffled2:before{content:"\e9f7"}.icon.confused:before{content:"\e9f8"}.icon.confused2:before{content:"\e9f9"}.icon.neutral:before{content:"\e9fa"}.icon.neutral2:before{content:"\e9fb"}.icon.hipster:before{content:"\e9fc"}.icon.hipster2:before{content:"\e9fd"}.icon.wondering:before{content:"\e9fe"}.icon.wondering2:before{content:"\e9ff"}.icon.sleepy:before{content:"\ea00"}.icon.sleepy2:before{content:"\ea01"}.icon.frustrated:before{content:"\ea02"}.icon.frustrated2:before{content:"\ea03"}.icon.crying:before{content:"\ea04"}.icon.crying2:before{content:"\ea05"}.icon.point-up:before{content:"\ea06"}.icon.point-right:before{content:"\ea07"}.icon.point-down:before{content:"\ea08"}.icon.point-left:before{content:"\ea09"}.icon.warning:before{content:"\ea0a"}.icon.notification:before{content:"\ea0b"}.icon.question:before{content:"\ea0c"}.icon.plus:before{content:"\ea0d"}.icon.minus:before{content:"\ea0e"}.icon.info:before{content:"\ea0f"}.icon.cancel-circle:before{content:"\ea10"}.icon.blocked:before{content:"\ea11"}.icon.cross:before{content:"\e80b"}.icon.checkmark:before{content:"\e80c"}.icon.checkmark2:before{content:"\ea12"}.icon.spell-check:before{content:"\ea13"}.icon.enter:before{content:"\ea14"}.icon.exit:before{content:"\ea15"}.icon.play2:before{content:"\ea16"}.icon.pause:before{content:"\ea17"}.icon.stop:before{content:"\ea18"}.icon.previous:before{content:"\ea19"}.icon.next:before{content:"\ea1a"}.icon.backward:before{content:"\ea1b"}.icon.forward2:before{content:"\ea1c"}.icon.play3:before{content:"\ea1d"}.icon.pause2:before{content:"\ea1e"}.icon.stop2:before{content:"\ea1f"}.icon.backward2:before{content:"\ea20"}.icon.forward3:before{content:"\ea21"}.icon.first:before{content:"\ea22"}.icon.last:before{content:"\ea23"}.icon.previous2:before{content:"\ea24"}.icon.next2:before{content:"\ea25"}.icon.eject:before{content:"\ea26"}.icon.volume-high:before{content:"\ea27"}.icon.volume-medium:before{content:"\ea28"}.icon.volume-low:before{content:"\ea29"}.icon.volume-mute:before{content:"\ea2a"}.icon.volume-mute2:before{content:"\ea2b"}.icon.volume-increase:before{content:"\ea2c"}.icon.volume-decrease:before{content:"\ea2d"}.icon.loop:before{content:"\ea2e"}.icon.loop2:before{content:"\ea2f"}.icon.infinite2:before{content:"\ea30"}.icon.shuffle:before{content:"\ea31"}.icon.arrow-up-left:before{content:"\ea32"}.icon.arrow-up3:before{content:"\ea33"}.icon.arrow-up-right:before{content:"\ea34"}.icon.arrow-right3:before{content:"\ea35"}.icon.arrow-down-right:before{content:"\ea36"}.icon.arrow-down3:before{content:"\ea37"}.icon.arrow-down-left:before{content:"\ea38"}.icon.arrow-left3:before{content:"\ea39"}.icon.arrow-up-left2:before{content:"\ea3a"}.icon.arrow-up2:before{content:"\ea3b"}.icon.arrow-up-right2:before{content:"\ea3c"}.icon.arrow-right2:before{content:"\ea3d"}.icon.arrow-down-right2:before{content:"\ea3e"}.icon.arrow-down2:before{content:"\ea3f"}.icon.arrow-down-left2:before{content:"\ea40"}.icon.arrow-left2:before{content:"\ea41"}.icon.circle-up:before{content:"\ea42"}.icon.circle-right:before{content:"\ea43"}.icon.circle-down:before{content:"\ea44"}.icon.circle-left:before{content:"\ea45"}.icon.tab:before{content:"\ea46"}.icon.move-up:before{content:"\ea47"}.icon.move-down:before{content:"\ea48"}.icon.sort-alpha-asc:before{content:"\ea49"}.icon.sort-alpha-desc:before{content:"\ea4a"}.icon.sort-numeric-asc:before{content:"\ea4b"}.icon.sort-numberic-desc:before{content:"\ea4c"}.icon.sort-amount-asc:before{content:"\ea4d"}.icon.sort-amount-desc:before{content:"\ea4e"}.icon.command:before{content:"\ea4f"}.icon.shift:before{content:"\ea50"}.icon.ctrl:before{content:"\ea51"}.icon.opt:before{content:"\ea52"}.icon.checkbox-checked:before{content:"\ea53"}.icon.checkbox-unchecked:before{content:"\ea54"}.icon.radio-checked:before{content:"\ea55"}.icon.radio-checked2:before{content:"\ea56"}.icon.radio-unchecked:before{content:"\ea57"}.icon.crop:before{content:"\ea58"}.icon.make-group:before{content:"\ea59"}.icon.ungroup:before{content:"\ea5a"}.icon.scissors:before{content:"\ea5b"}.icon.filter:before{content:"\ea5c"}.icon.font:before{content:"\ea5d"}.icon.ligature:before{content:"\ea5e"}.icon.ligature2:before{content:"\ea5f"}.icon.text-height:before{content:"\ea60"}.icon.text-width:before{content:"\ea61"}.icon.font-size:before{content:"\ea62"}.icon.bold:before{content:"\ea63"}.icon.underline:before{content:"\ea64"}.icon.italic:before{content:"\ea65"}.icon.strikethrough:before{content:"\ea66"}.icon.omega:before{content:"\ea67"}.icon.sigma:before{content:"\ea68"}.icon.page-break:before{content:"\ea69"}.icon.superscript:before{content:"\ea6a"}.icon.subscript:before{content:"\ea6b"}.icon.superscript2:before{content:"\ea6c"}.icon.subscript2:before{content:"\ea6d"}.icon.text-color:before{content:"\ea6e"}.icon.pagebreak:before{content:"\ea6f"}.icon.clear-formatting:before{content:"\ea70"}.icon.table:before{content:"\ea71"}.icon.table2:before{content:"\ea72"}.icon.insert-template:before{content:"\ea73"}.icon.pilcrow:before{content:"\ea74"}.icon.ltr:before{content:"\ea75"}.icon.rtl:before{content:"\ea76"}.icon.section:before{content:"\ea77"}.icon.paragraph-left:before{content:"\e903"}.icon.paragraph-center:before{content:"\ea78"}.icon.paragraph-right:before{content:"\ea79"}.icon.paragraph-justify:before{content:"\ea7a"}.icon.indent-increase:before{content:"\ea7b"}.icon.indent-decrease:before{content:"\ea7c"}.icon.share:before{content:"\ea7d"}.icon.new-tab:before{content:"\ea7e"}.icon.embed:before{content:"\ea7f"}.icon.embed2:before{content:"\ea80"}.icon.terminal:before{content:"\ea81"}.icon.share2:before{content:"\ea82"}.icon.mail:before{content:"\ea83"}.icon.mail2:before{content:"\ea84"}.icon.mail3:before{content:"\ea85"}.icon.mail4:before{content:"\ea86"}.icon.google2:before{content:"\ea87"}.icon.google-plus:before{content:"\ea88"}.icon.google-plus2:before{content:"\ea89"}.icon.google-plus3:before{content:"\ea8a"}.icon.google-drive:before{content:"\ea8b"}.icon.facebook:before{content:"\e80d"}.icon.facebook2:before{content:"\e80e"}.icon.facebook3:before{content:"\e80f"}.icon.ello:before{content:"\ea8c"}.icon.instagram:before{content:"\ea8d"}.icon.twitter:before{content:"\e810"}.icon.twitter2:before{content:"\e811"}.icon.twitter3:before{content:"\e812"}.icon.feed2:before{content:"\ea8e"}.icon.feed3:before{content:"\ea8f"}.icon.feed4:before{content:"\ea90"}.icon.youtube:before{content:"\ea91"}.icon.youtube2:before{content:"\ea92"}.icon.youtube3:before{content:"\ea93"}.icon.youtube4:before{content:"\ea94"}.icon.twitch:before{content:"\ea95"}.icon.vimeo:before{content:"\ea96"}.icon.vimeo2:before{content:"\ea97"}.icon.vimeo3:before{content:"\ea98"}.icon.lanyrd:before{content:"\ea99"}.icon.flickr:before{content:"\ea9a"}.icon.flickr2:before{content:"\ea9b"}.icon.flickr3:before{content:"\ea9c"}.icon.flickr4:before{content:"\ea9d"}.icon.picassa:before{content:"\ea9e"}.icon.picassa2:before{content:"\ea9f"}.icon.dribbble:before{content:"\eaa0"}.icon.dribbble2:before{content:"\eaa1"}.icon.dribbble3:before{content:"\eaa2"}.icon.forrst:before{content:"\eaa3"}.icon.forrst2:before{content:"\eaa4"}.icon.deviantart:before{content:"\eaa5"}.icon.deviantart2:before{content:"\eaa6"}.icon.steam:before{content:"\eaa7"}.icon.steam2:before{content:"\eaa8"}.icon.dropbox:before{content:"\eaa9"}.icon.onedrive:before{content:"\eaaa"}.icon.github:before{content:"\e813"}.icon.github2:before{content:"\e814"}.icon.github3:before{content:"\e815"}.icon.github4:before{content:"\e816"}.icon.github5:before{content:"\eaab"}.icon.wordpress:before{content:"\eaac"}.icon.wordpress2:before{content:"\eaad"}.icon.joomla:before{content:"\eaae"}.icon.blogger:before{content:"\eaaf"}.icon.blogger2:before{content:"\eab0"}.icon.tumblr:before{content:"\eab1"}.icon.tumblr2:before{content:"\eab2"}.icon.yahoo:before{content:"\eab3"}.icon.tux:before{content:"\eab4"}.icon.apple:before{content:"\eab5"}.icon.finder:before{content:"\eab6"}.icon.android:before{content:"\eab7"}.icon.windows:before{content:"\eab8"}.icon.windows8:before{content:"\eab9"}.icon.soundcloud:before{content:"\eaba"}.icon.soundcloud2:before{content:"\eabb"}.icon.skype:before{content:"\eabc"}.icon.reddit:before{content:"\eabd"}.icon.linkedin:before{content:"\e817"}.icon.linkedin2:before{content:"\e818"}.icon.lastfm:before{content:"\eabe"}.icon.lastfm2:before{content:"\eabf"}.icon.delicious:before{content:"\eac0"}.icon.stumbleupon:before{content:"\eac1"}.icon.stumbleupon2:before{content:"\eac2"}.icon.stackoverflow:before{content:"\e819"}.icon.pinterest:before{content:"\eac3"}.icon.pinterest2:before{content:"\eac4"}.icon.xing:before{content:"\eac5"}.icon.xing2:before{content:"\eac6"}.icon.flattr:before{content:"\eac7"}.icon.foursquare:before{content:"\eac8"}.icon.paypal:before{content:"\eac9"}.icon.paypal2:before{content:"\eaca"}.icon.paypal3:before{content:"\eacb"}.icon.yelp:before{content:"\eacc"}.icon.file-pdf:before{content:"\eacd"}.icon.file-openoffice:before{content:"\eace"}.icon.file-word:before{content:"\eacf"}.icon.file-excel:before{content:"\ead0"}.icon.libreoffice:before{content:"\ead1"}.icon.html5:before{content:"\ead2"}.icon.html52:before{content:"\ead3"}.icon.css3:before{content:"\ead4"}.icon.git:before{content:"\ead5"}.icon.svg:before{content:"\ead6"}.icon.codepen:before{content:"\ead7"}.icon.chrome:before{content:"\ead8"}.icon.firefox:before{content:"\ead9"}.icon.IE:before{content:"\eada"}.icon.opera:before{content:"\eadb"}.icon.safari:before{content:"\eadc"}.icon.IcoMoon:before{content:"\eadd"}#theme-switch-light{display:none}/*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0;font-family:Roboto,Helvetica,Arial,Tahoma,Verdana,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}code[class*=language-],pre[class*=language-]{direction:ltr;text-align:left;white-space:pre;white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-o-pre-wrap;word-spacing:normal;word-break:normal;word-wrap:normal;-moz-tab-size:1;-o-tab-size:1;tab-size:1;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow:none}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{overflow:auto}:not(pre)>code[class*=language-]{white-space:normal}.highlight{color:#7a65f2}.highlight .gh,.highlight .go,.highlight .na,.highlight .nt,.highlight .nv,.highlight .ow{color:#7a65f2}.highlight .c,.highlight .c1,.highlight .ch,.highlight .cm,.highlight .cpf,.highlight .cs,.highlight .w{color:#b1b6ff}.highlight .gi{background-color:#b1b6ff}.highlight .k,.highlight .kc,.highlight .kd,.highlight .kn,.highlight .kp,.highlight .kr,.highlight .nn{color:#4591ed}.highlight .bp,.highlight .cp,.highlight .dl,.highlight .gt,.highlight .gu,.highlight .kt,.highlight .nb,.highlight .nc,.highlight .no,.highlight .s1,.highlight .s2,.highlight .sa,.highlight .sb,.highlight .sc,.highlight .sd,.highlight .se,.highlight .sh,.highlight .sr,.highlight .sx{color:#0e9e75}.highlight .err,.highlight .fm,.highlight .gd,.highlight .gr,.highlight .nd,.highlight .ne,.highlight .nf,.highlight .nl,.highlight .si{color:#bf3d5e}.highlight .il,.highlight .m,.highlight .mb,.highlight .mf,.highlight .mh,.highlight .mi,.highlight .mo,.highlight .ni,.highlight .vc,.highlight .vg,.highlight .vi,.highlight .vm{color:#e24bbb}.highlight .gp,.highlight .o{color:#22adf6}.highlight .ss{color:#e90}.highlight .cs .gh,.highlight .gp,.highlight .gs,.highlight .gu,.highlight .k,.highlight .kc,.highlight .kd,.highlight .kn,.highlight .kp,.highlight .kr,.highlight .kt,.highlight .nc,.highlight .ne,.highlight .ni,.highlight .nn .nt,.highlight .ow,.highlight .se{font-weight:700}.highlight .c,.highlight .c1,.highlight .ch,.highlight .cm,.highlight .cpf,.highlight .cs,.highlight .ge,.highlight .sd,.highlight .w{font-style:italic}@font-face{font-family:Klavika-Light;src:url(../fonts/KlavikaLight-ItalicTF.otf);font-weight:200;font-style:italic}@font-face{font-family:Klavika-Bold;src:url(../fonts/KlavikaBoldBoldItalic.otf);font-weight:700;font-style:italic}html{overflow:auto}body,html{width:100%;height:100%;background-color:#fff;-webkit-overflow-scrolling:touch}body{color:#757888;line-height:1;overflow:auto}*{-webkit-box-sizing:border-box;box-sizing:border-box}a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0;font-size:100%;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:'';content:none}table{border-collapse:collapse;border-spacing:0}.navbar{top:0;left:0;font-size:1rem;height:4rem;width:100%;background-color:#383846;z-index:150;position:relative}.navbar--hamburger,.navbar--logo,.navbar--product-dropdown,.navbar--search,.theme-switcher{position:absolute}.navbar--logo{left:1em;top:1.05em}.navbar--logo a{font-size:1.5rem;color:#f6f6f8;-webkit-transition:color .25s ease;transition:color .25s ease}.navbar--logo a:hover{color:#fff}.navbar--logo .divider{border-left:1px solid #f6f6f8;margin:0 .8rem 0 .5rem;vertical-align:text-top;opacity:.35;line-height:1.15em}.navbar--logo .navbar--docs{font-size:1.3rem}.navbar--hamburger{width:4rem;height:4rem;right:0}.navbar--hamburger .navbar--hamburger-bar{width:1.2rem;height:2px;background-color:#f6f6f8;border-radius:1px;position:absolute;left:50%;-webkit-transition:all .3s ease;transition:all .3s ease}.navbar--hamburger .navbar--hamburger-bar.top{top:40%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.navbar--hamburger .navbar--hamburger-bar.middle{top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.navbar--hamburger .navbar--hamburger-bar.bottom{top:60%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.navbar--hamburger:hover{cursor:pointer}.navbar--hamburger:hover .navbar--hamburger-bar{background-color:#fff}.navbar--hamburger.open .navbar--hamburger-bar.top{top:50%;-webkit-transform:translate(-50%,-50%) rotate(45deg);transform:translate(-50%,-50%) rotate(45deg)}.navbar--hamburger.open .navbar--hamburger-bar.middle{opacity:0}.navbar--hamburger.open .navbar--hamburger-bar.bottom{top:50%;-webkit-transform:translate(-50%,-50%) rotate(-45deg);transform:translate(-50%,-50%) rotate(-45deg)}.navbar--product-menu{width:100%;position:absolute;top:.5em;height:auto;opacity:0;-webkit-transition:opacity .25s ease;transition:opacity .25s ease;background:#4591ed;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #4591ed),to(#22adf6));background:linear-gradient(to bottom,#4591ed 0,#22adf6 100%)}.navbar--product-container{width:100%;height:auto;position:absolute;top:calc(4rem * .85);left:0;visibility:hidden;-webkit-transition:all .25s ease;transition:all .25s ease;z-index:100}.navbar--product-container.open{visibility:visible}.navbar--product-container.open .navbar--product-menu{opacity:1}.navbar--product-divider{margin:.25em 0;height:2px;background-color:rgba(67,68,83,.1)}.navbar--product{font-size:19px}.navbar--product:active,.navbar--product:link,.navbar--product:visited{color:#fff;-webkit-transition:background-color .25s ease,color .25s ease;transition:background-color .25s ease,color .25s ease;background-color:transparent;padding:1.25rem 1rem;display:block;width:100%}.navbar--product:hover{background-color:rgba(56,56,70,.12);color:#fff}.navbar--product-dropdown{display:none;top:.5em;background-color:#4591ed;height:3rem;border-radius:3px;-webkit-transition:background-color .25s ease,color .25s ease;transition:background-color .25s ease,color .25s ease}.navbar--product-dropdown:hover{cursor:pointer;background-color:#22adf6}.navbar--product-dropdown .navbar--current-product,.navbar--product-dropdown .navbar--product-dropdown-caret{position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);color:#fff}.navbar--product-dropdown .navbar--current-product{font-weight:700;left:1rem;font-size:19px;font-weight:400}.navbar--product-dropdown .navbar--product-dropdown-caret{right:1rem;font-size:.625em}.navbar--search{height:3rem;width:40%;right:4rem;top:.5em}.navbar--search>*{position:absolute!important;top:0;left:0;width:100%;height:100%}.navbar--search-field{position:absolute;top:0;left:0;width:100%;height:100%;border-radius:3px;border:2px solid #545667;color:#f6f6f8;background-color:#292933;padding:0 1rem;font-weight:400;font-size:19px;outline:0;-webkit-transition:border-color .3s ease,color .3s ease;transition:border-color .3s ease,color .3s ease}.navbar--search-field:focus{border-color:#00c9ff;color:#00c9ff}.algolia-autocomplete{width:100%}.algolia-autocomplete .aa-hint,.algolia-autocomplete .aa-input{width:100%}.algolia-autocomplete .aa-hint{color:red}.algolia-autocomplete .aa-dropdown-menu{margin:.5rem 0 0 0;width:100%;padding:.75rem;background-color:rgba(238,239,242,.7);border:0}.algolia-autocomplete .aa-dropdown-menu .algolia-docsearch-suggestion--highlight{color:#22adf6}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion{cursor:pointer;padding:0}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion{background-color:#fff;border-radius:3px;overflow:hidden}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion__secondary{border:none;margin-top:2px}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion:first-child .algolia-docsearch-suggestion__secondary{margin-top:0}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--category-header{border-radius:3px 3px 0 0;background-color:#fff;color:#8e91a1;padding:.75rem 1rem;font-weight:500}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--highlight{background-color:transparent}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--subcategory-column{border:none;background-color:#545667}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--content{background-color:#434453}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--title{margin-bottom:.25rem;display:inline-block;color:#eeeff2}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--text{color:#bec2cc}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--subcategory-column-text{font-size:.8rem;line-height:1.4em;color:#bec2cc}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor .algolia-docsearch-suggestion--content{background:#4591ed;background:-webkit-gradient(linear,left top, right top,color-stop(0, #4591ed),to(#00c9ff));background:linear-gradient(to right,#4591ed 0,#00c9ff 100%)}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor .algolia-docsearch-suggestion--text,.algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor .algolia-docsearch-suggestion--title{color:#bef0ff}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight,.algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor .algolia-docsearch-suggestion--title .algolia-docsearch-suggestion--highlight{color:#fff!important}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion em{font-weight:700;font-style:normal}.algolia-autocomplete .algolia-docsearch-footer{border:none;padding:.75rem 0 0 0}.theme-switcher{display:none;width:4rem;height:4rem;right:0;border:0;outline:0;background-color:#383846;color:#f6f6f8}.theme-switcher .icon{-webkit-transition:color .25s ease;transition:color .25s ease}.theme-switcher .sun2{font-size:1.5rem}.theme-switcher .moon{font-size:1.2rem}.theme-switcher:hover{color:#fff;cursor:pointer}@media (max-width:500px){.navbar--logo .logotype{display:none}.navbar--logo .logo{display:inline}}@media (min-width:500px){.navbar--logo .logotype{display:inline}.navbar--logo .logo{display:none}}@media (min-width:900px){.theme-switcher{display:block}.navbar--product-dropdown{display:block;left:18rem;width:17rem}.navbar--product-container{left:18rem;width:17rem;top:2.9em}.navbar--product-container.open .navbar--dropdown-dismiss{width:100vw;height:100vh;position:fixed;top:0;left:0;z-index:100}.navbar--product-container.open .navbar--dropdown-dismiss:hover{cursor:pointer}.navbar--product-menu{border-radius:0 0 3px 3px;overflow:hidden;z-index:110}.navbar--search{left:35.5rem;width:calc(100% - 18rem - .5rem - .5rem - 4rem - 17rem)}.navbar--hamburger{display:none}.navbar--product.external{font-size:.8rem}}@media (min-width:1200px){.navbar--product-dropdown{left:23rem;width:17.5rem}.navbar--product-container{left:23rem;width:17.5rem}.navbar--search{left:41rem;width:calc(100% - 23rem - .5rem - .5rem - 4rem - 17.5rem)}}@media (min-width:1900px){.navbar--product-dropdown{left:28rem;width:17.5rem}.navbar--product-container{left:28rem;width:17.5rem}.navbar--search{left:46rem;width:calc(100% - 28rem - .5rem - .5rem - 4rem - 17.5rem)}}.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu{right:0!important;left:auto!important;overflow:scroll!important;max-height:90vh!important}.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu:before{display:none}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--wrapper{padding:.2rem 0}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column{display:none}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--content{padding:.75rem;width:100%;float:none}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--content:before{display:none}.algolia-autocomplete .algolia-docsearch-footer{padding:0}@media (min-width:1330px){.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu{right:auto!important;left:0!important}}@media (max-width:768px){.algolia-docsearch-suggestion--subcategory-column{display:none!important}.algolia-docsearch-suggestion--wrapper{margin:.25em 0!important}}@media (max-width:570px){.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu{position:fixed!important;top:3.5em!important;left:0;min-width:100vw}}.sidebar--toggle{padding:1em;position:relative;z-index:100;height:3rem;width:100%;background-color:#434453;text-align:left;font-style:italic;color:#f6f6f8;font-weight:500;-webkit-transition:background-color .25s ease,color .25s ease;transition:background-color .25s ease,color .25s ease}.sidebar--toggle:hover{color:#fff;background-color:#545667;cursor:pointer}.sidebar--toggle:after,.sidebar--toggle:before{content:"";position:absolute;display:block;right:1em;top:1.45em;height:2px;width:15px;background:#999dab}.sidebar--toggle:before{-webkit-transform:rotate(90deg);transform:rotate(90deg);-webkit-transition:all .2s;transition:all .2s}.sidebar--toggle.open:before{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.sidebar{background-color:#f6f6f8;height:100%;overflow:hidden;-webkit-transition:max-height .2s ease-out;transition:max-height .2s ease-out}.sidebar::-webkit-scrollbar{background-color:#f6f6f8;width:16px}.sidebar::-webkit-scrollbar-track{background-color:#f6f6f8}.sidebar::-webkit-scrollbar-thumb{border:4px solid #f6f6f8;background-color:#d4d7dd;border-radius:8px}.sidebar.open{max-height:4000px;-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in}.sidebar--section{border-top:2px solid #eeeff2;padding:2em 0}.sidebar--section:first-child{border:none}.sidebar--section-title{color:#4591ed;padding:0 2rem 1em 2rem;font-size:1.25em}.sidebar--section-title a:active,.sidebar--section-title a:link,.sidebar--section-title a:visited{color:#4591ed;font-weight:400}.sidebar--section-title a:hover{color:#00c9ff}.sidebar--section ul{padding-left:3rem}.sidebar--section ul li{position:relative;margin-bottom:.25rem}ul.sidebar--children{margin-left:-1.85rem;height:0;overflow:hidden}ul.sidebar--children.open{height:auto;overflow:visible;border-left:2px solid #eeeff2}ul.sidebar--children li:first-child{margin-top:.25rem}.sidebar--children-toggle{position:absolute;left:-2.25rem;top:.2rem;height:.9rem;width:.9rem;background:#bec2cc;border-radius:50%;-webkit-transition:all .2s;transition:all .2s}.sidebar--children-toggle:before{content:"+";color:#fff;display:block;text-align:center}.sidebar--children-toggle.open:before{content:"–"}.sidebar--children-toggle:hover{background:#4591ed}.sidebar--children-toggle:hover:before{color:#fff}a.sidebar--page:active,a.sidebar--page:link,a.sidebar--page:visited{display:inline-block;color:#757888;font-weight:500;text-indent:-1rem;line-height:1.25}a.sidebar--page:hover{color:#00c9ff}@media (max-width:900px){.sidebar{height:auto;max-height:0}}@media (min-width:900px){.sidebar--toggle{display:none}.sidebar,.sidebar.open{position:fixed;z-index:100;width:18rem;-webkit-transform:none;transform:none;-webkit-transition:none;transition:none;top:4rem;max-height:100%;overflow:auto;padding-bottom:4rem}}@media (min-width:1200px){.sidebar,.sidebar.open{width:23rem}}@media (min-width:1900px){.sidebar,.sidebar.open{width:28rem}.sidebar--support-ad{padding:2rem 1.5rem}.sidebar--support-ad--desc{font-size:1.2em}}#sidebar--ad{margin:-.75rem 1rem;border-radius:3px}#sidebar--ad.cloud{background:linear-gradient(45deg,#9394ff,#22adf6);padding:1.5rem 1.5rem;text-align:center}#sidebar--ad.cloud .text{margin:0 0 1rem 0;color:#fff;line-height:1.3em;font-size:1.1em;font-weight:500}#sidebar--ad.cloud .cta{margin-left:0;margin-right:0;border-radius:3px;color:#fff;border:2px solid rgba(255,255,255,.4);background-color:transparent;-webkit-transition:background-color .25s ease,border-color .25s ease;transition:background-color .25s ease,border-color .25s ease;padding:.75em 1.5em;font-weight:700;display:inline-block;font-size:1.125em}#sidebar--ad.cloud .cta:hover{background-color:rgba(255,255,255,.15);border-color:rgba(255,255,255,.6)}#sidebar--ad.enterprise{background:-webkit-gradient(linear,left top, right top,from(#4ed8a0),to(#22adf6));background:linear-gradient(to right,#4ed8a0,#22adf6);padding:1.5rem 1.5rem;text-align:center}#sidebar--ad.enterprise .text{margin:0 0 1rem 0;color:#fff;line-height:1.3em;font-weight:500}#sidebar--ad.enterprise .cta{margin-left:0;margin-right:0;border-radius:3px;color:#fff;border:2px solid rgba(255,255,255,.4);background-color:transparent;-webkit-transition:background-color .25s ease,border-color .25s ease;transition:background-color .25s ease,border-color .25s ease;padding:.75em 1.5em;font-weight:700;display:inline-block;font-size:1.125em}#sidebar--ad.enterprise .cta:hover{background-color:rgba(255,255,255,.15);border-color:rgba(255,255,255,.6)}#sidebar--ad.influx-days{padding:1rem;background:url(/promos/assets/influx-days-bg.jpg);background-repeat:no-repeat;background-size:cover;color:#fff;font-weight:700}#sidebar--ad.influx-days img{margin:.4rem 0 .8rem}#sidebar--ad.influx-days .text{font-size:1.75rem;margin-bottom:.5rem}#sidebar--ad.influx-days .details{font-size:.9rem;line-height:1.1rem}#sidebar--ad.influx-days .cta{display:inline-block;margin-top:.85rem;color:#fff;background:#5cbb47;font-size:1.15rem;padding:.45rem 1.75rem;border-radius:3px}::-moz-selection{background-color:#757888;color:#fff}::selection{background-color:#757888;color:#fff}::-moz-selection{background-color:#757888;color:#fff}a{text-decoration:none;-webkit-transition:color .2s ease;transition:color .2s ease}a:hover{cursor:pointer}.article{background-color:#fff;overflow:auto;width:100%}.article::-webkit-scrollbar{background-color:#fff;width:16px}.article::-webkit-scrollbar-track{background-color:#fff}.article::-webkit-scrollbar-thumb{border:4px solid #fff;background-color:#d4d7dd;border-radius:8px}.article-section{display:block;width:100%;text-align:center;padding:2rem}.article-section.article-heading{background-color:#fafafc;background-position:center center;background-size:cover!important;background-repeat:no-repeat}.article-section.article-heading h1{margin-bottom:0}.article-section.article-footer{background:#fafafc;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #fafafc),to(#fff));background:linear-gradient(to bottom,#fafafc 0,#fff 100%)}.article-content{text-align:left;width:100%;max-width:760px;color:#757888}.article-content a:active,.article-content a:link,.article-content a:visited{font-weight:700;color:#4591ed}.article-content a:hover{color:#00c9ff;cursor:pointer}.article-content a.top{font-size:6px;padding:.25rem .25rem .35rem;border-radius:3px;-webkit-transition:all .2s;transition:all .2s}.article-content a.top:hover{color:#fff!important;background:#00c9ff}.article-content a.off-page:link:after{content:'\ea43';font-family:icomoon;font-size:.75em;font-weight:400;vertical-align:bottom;display:inline;margin-left:.5em;opacity:.25;-webkit-transition:color .2s ease;transition:color .2s ease;color:#757888}.article-content li a code,.article-content p a code{position:relative}.article-content li a code:after,.article-content p a code:after{content:"";position:absolute;top:-1px;right:-1px;width:0;height:0;border-style:solid;border-width:0 .5em .5em 0;border-color:transparent #7a65f2 transparent transparent;opacity:.5;-webkit-transition:all .2s;transition:all .2s}.article-content li a code:hover:after,.article-content p a code:hover:after{opacity:1;border-color:transparent #00c9ff transparent transparent}.article-content li a.btn,.article-content p a.btn{display:inline-block;color:#fff;font-size:.95rem;padding:.5em 1em;margin:1em 0 1.5em}.article-content li a.btn.download:before,.article-content p a.btn.download:before{content:'\e964';font-family:icomoon;font-size:1.15em;font-weight:400;vertical-align:bottom;display:inline;margin-right:.5em}.article-content>*{text-decoration:none}.article-content .note,.article-content .warn,.article-content blockquote,.article-content dt,.article-content h1,.article-content h2,.article-content h3,.article-content h4,.article-content li,.article-content ol,.article-content p,.article-content pre,.article-content ul{display:block;margin-bottom:1em;line-height:1.45em}.article-content table{margin:1em 0 1em;overflow-x:auto;background-color:#fff}.article-content h1,.article-content h2,.article-content h3,.article-content h4,.article-content h5,.article-content h6{width:100%;color:#757888}.article-content h1 a.offset-anchor,.article-content h2 a.offset-anchor,.article-content h3 a.offset-anchor,.article-content h4 a.offset-anchor,.article-content h5 a.offset-anchor,.article-content h6 a.offset-anchor{display:block;position:relative;top:-120px;visibility:hidden}.article-content h1 a:active,.article-content h1 a:hover,.article-content h1 a:link,.article-content h1 a:visited,.article-content h2 a:active,.article-content h2 a:hover,.article-content h2 a:link,.article-content h2 a:visited,.article-content h3 a:active,.article-content h3 a:hover,.article-content h3 a:link,.article-content h3 a:visited,.article-content h4 a:active,.article-content h4 a:hover,.article-content h4 a:link,.article-content h4 a:visited,.article-content h5 a:active,.article-content h5 a:hover,.article-content h5 a:link,.article-content h5 a:visited,.article-content h6 a:active,.article-content h6 a:hover,.article-content h6 a:link,.article-content h6 a:visited{text-decoration:none;font-weight:inherit;color:#757888!important}.article-content h1:first-child,.article-content h2:first-child,.article-content h3:first-child,.article-content h4:first-child,.article-content h5:first-child,.article-content h6:first-child{margin-top:0}.article-content h1{font-size:2.2em;font-family:Klavika-Light,'Helvetica Neue',Helvetica,Helvetica,Arial,Tahoma,Verdana,sans-serif;font-weight:200;line-height:1.2em}.article-content h2{font-size:1.9em;font-weight:600;margin:1.5em 0 .5em}.article-content h3{font-size:1.5em;font-weight:700;margin:1em 0 .5em}.article-content h4{font-size:1.3em;font-weight:400;font-style:italic;margin:1.25em 0 .5em}.article-content h5{line-height:1.6em}.article-content h6{font-size:.95em;font-style:italic;line-height:1.6em}.article-content.section-landing h2 a.off-page:link:hover{color:#4591ed!important}.article-content p{font-size:1em}.article-content ol,.article-content ul{font-size:1em;padding-left:1.125em}.article-content ol li,.article-content ul li{display:list-item;list-style-position:outside;padding-left:.5em;margin-bottom:.25em}.article-content ol p,.article-content ul p{margin-left:0}.article-content ul>li{list-style-type:disc!important}.article-content ol li,.article-content ul ol li{list-style-type:decimal}.article-content ol ol li{list-style-type:lower-alpha}.article-content ol ol ol li{list-style-type:decimal}.article-content ul ul ul li{list-style-type:square}.article-content li:last-child{margin-bottom:0}.article-content ol ol,.article-content ol ul,.article-content ul ol,.article-content ul ul{width:100%;margin-left:0;margin-bottom:0;margin-top:.25em}.article-content hr{width:100%;height:2px;margin-top:.25em;margin-bottom:1em;border:none;display:block;background-color:#eeeff2}.article-content img{max-width:100%;height:auto;border-radius:3px}.article-content td,.article-content th{border:1px solid #eeeff2;font-size:.875em;line-height:1.2em;padding:.75em 1.5em}.article-content tr:nth-child(even){background-color:#f6f6f8}.article-content thead tr{background-color:#fafafc!important}.article-content thead th{padding:1.25em 1.5em}.article-content .note,.article-content .warn,.article-content blockquote,.article-content dt{font-size:.9em;padding:1em 1.5em;border-radius:3px;border-style:solid;border-left-width:6px}.article-content .note h4,.article-content .note ol,.article-content .note p,.article-content .note pre,.article-content .note ul,.article-content .warn h4,.article-content .warn ol,.article-content .warn p,.article-content .warn pre,.article-content .warn ul,.article-content blockquote h4,.article-content blockquote ol,.article-content blockquote p,.article-content blockquote pre,.article-content blockquote ul,.article-content dt h4,.article-content dt ol,.article-content dt p,.article-content dt pre,.article-content dt ul{width:100%;margin-left:0}.article-content .note>:last-child,.article-content .warn>:last-child,.article-content blockquote>:last-child,.article-content dt>:last-child{margin-bottom:0}.article-content .note .tooltip,.article-content .warn .tooltip,.article-content blockquote .tooltip,.article-content dt .tooltip{color:#22adf6}.article-content .note,.article-content blockquote{font-style:italic;color:#676978;border-color:#c6ffd0;background-color:#f2fff4}.article-content .note code,.article-content blockquote code{color:#2b7098;background:#c6ffd0;border:1px solid #c6ffd0}.article-content .note pre,.article-content blockquote pre{background:#c6ffd0;border-color:#c6ffd0}.article-content .note pre code,.article-content blockquote pre code{border:none}.article-content .warn,.article-content dt{color:#676978;border-color:#ffdccf;background-color:#fff7f4}.article-content .warn code,.article-content dt code{color:#2b7098;background:#ffdccf;border:1px solid #ffdccf}.article-content .warn pre,.article-content dt pre{background:#ffdccf;border-color:#ffdccf}.article-content .warn pre code,.article-content dt pre code{border:none}.article-content code{font-family:Consolas,"Lucida Console",Monaco,monospace;-moz-tab-size:1;-o-tab-size:1;tab-size:1;direction:ltr;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none;font-size:.8em!important;font-style:normal!important;display:inline;border-radius:3px;border-width:1px;border-color:#f2f4ff;border-style:solid;padding:.1em .5em;-webkit-font-smoothing:subpixel-antialiased!important;-moz-osx-font-smoothing:auto!important;font-weight:400!important;color:#7a65f2;background-color:#f2f4ff}.article-content pre{display:block;padding:.75em 1em;overflow:auto;border-radius:3px;border-style:solid;border-width:1px 1px 1px 6px;background-color:#f2f4ff;border-color:#f2f4ff;z-index:99;line-height:1.1em!important}.article-content pre code{white-space:pre;word-spacing:normal;word-break:normal;border:none;padding:0;border-radius:0;background-color:transparent}.article-content pre::-webkit-scrollbar{background-color:#f2f4ff;width:16px}.article-content pre::-webkit-scrollbar-track{background-color:#f2f4ff}.article-content pre::-webkit-scrollbar-thumb{border:4px solid #f2f4ff;background-color:#c9d0ff;border-radius:calc(16px / 2)}.page-nav-btns{display:-webkit-box;display:-ms-flexbox;display:flex;position:relative;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin:3em 0 2em}.page-nav-btns a{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#fff!important;font-size:.95rem;padding:.75rem 1rem;margin:0 .15rem}.page-nav-btns a.prev{position:absolute;left:0}.page-nav-btns a.prev:before{content:'\e804';font-family:icomoon;font-size:.85rem;font-weight:400;vertical-align:middle;display:inline;margin-right:.85rem}.page-nav-btns a.next{position:absolute;right:0}.page-nav-btns a.next:after{content:'\e805';font-family:icomoon;font-size:.85rem;font-weight:400;vertical-align:middle;display:inline;margin-left:.85rem}.truncate{position:relative;margin-bottom:3.5rem}.truncate .truncate-bottom{position:absolute;bottom:-30px;width:100%;z-index:100%;height:auto}.truncate a.truncate-toggle{display:block;width:100px;margin:0 auto;color:#757888;background:#fff;padding:.45rem;text-align:center;font-size:.75rem;text-transform:uppercase;border-radius:3px;-webkit-transition:color .2s;transition:color .2s}.truncate a.truncate-toggle:before{content:"Show Less"}.truncate a.truncate-toggle:hover{color:#4591ed}.truncate.closed{min-height:200px;max-height:25vh;overflow:hidden}.truncate.closed .truncate-bottom{bottom:0;background-image:-webkit-gradient(linear,left top, left bottom,from(rgba(255,255,255,0)),to(#fff));background-image:linear-gradient(to bottom,rgba(255,255,255,0),#fff);height:100px}.truncate.closed a.truncate-toggle{margin-top:75px}.truncate.closed a.truncate-toggle:before{content:"Show More"}.tooltip{position:relative;display:inline-block;z-index:10;font-weight:900;color:#4ed8a0}.tooltip-container{position:absolute;top:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);overflow:visible;visibility:hidden}.tooltip-text{font-weight:600;line-height:2em;height:2em;position:absolute;border-radius:3px;padding:0 .75em;font-size:.9rem;left:50%;-webkit-transform:translate(-50%,-1.875rem);transform:translate(-50%,-1.875rem);-webkit-transition:all .2s ease;transition:all .2s ease;white-space:nowrap;opacity:0;font-style:normal!important;color:#f6f6f8;background-color:#383846}.tooltip-text:after{content:'';position:absolute;left:50%;bottom:-14px;-webkit-transform:translateX(-50%);transform:translateX(-50%);border-top:8px solid #383846;border-right:8px solid transparent;border-bottom:8px solid transparent;border-left:8px solid transparent}.tooltip:hover .tooltip-container{visibility:visible}.tooltip:hover .tooltip-text{opacity:1;-webkit-transform:translate(-50%,-2rem);transform:translate(-50%,-2rem)}.old-version{width:100%;display:inline-block;border-radius:3px;font-size:1em;line-height:1.25em;padding:1.5em 1.5em 1.5em 4em;color:#f95f53;background-color:#fff7f4;position:relative;margin-bottom:1em}.old-version:after{content:"\ea0a";font-family:icomoon;position:absolute;top:50%;left:2em;-webkit-transform:translate(-50%,-50%) scale(1.5,1.5);transform:translate(-50%,-50%) scale(1.5,1.5);font-size:1em}.section-landing h2.no-paragraph{margin:0 0 1rem;border:none}.view-in-chronograf{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;position:relative;background-color:#f2f4ff;margin-top:-1.1rem;margin-bottom:1rem;padding:.15rem;font-size:.8rem;border-radius:0 0 3px 3px;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.view-in-chronograf .chronograf-btn{display:inline-block;padding:.45rem .6rem;color:#fff!important;background:-webkit-gradient(linear,right top, left top,from(#9394ff),to(#22adf6));background:linear-gradient(to left,#9394ff,#22adf6);border-radius:calc(3px / 2);-webkit-transition:all .5s ease;transition:all .5s ease}.view-in-chronograf .chronograf-btn:after{content:'\e801';margin-left:.4rem;font-family:icomoon}.view-in-chronograf .chronograf-btn:hover{color:#fff!important;opacity:1}.view-in-chronograf .settings{opacity:.25;color:#757888!important;margin-right:.75em;-webkit-transition:opacity .2s ease;transition:opacity .2s ease}.view-in-chronograf .settings:hover{opacity:1}.modal-overlay{display:none;position:fixed;z-index:1000;left:0;top:0;width:100%;height:100%;overflow:auto;opacity:.75;background:-webkit-gradient(linear,left top, left bottom,from(#9394ff),to(#4591ed));background:linear-gradient(#9394ff,#4591ed)}.modal-content{display:none;background:#fff;padding:2rem 2rem 1.5rem;border-radius:3px;position:fixed;top:10vh;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);z-index:1001;width:90vw;max-width:38rem;-webkit-transition:top .4s ease;transition:top .4s ease}.modal-content.open{top:40vh}.modal-content input{width:100%;min-width:10rem;border-radius:3px;border:2px solid #f2f4ff;background-color:#f2f4ff;padding:.5rem;font-weight:400;font-size:1rem;outline:0;-webkit-transition:border-color .3s ease,color .3s ease;transition:border-color .3s ease,color .3s ease}.modal-content input:focus{border-color:#00c9ff}.modal-content button{border:none;outline:0}.modal-content button:focus{background:#4591ed!important}.modal-content label{display:block;margin-bottom:.4rem;font-weight:600}#default-chronograf-url{display:inline-block;margin:.5rem 0 0 .25rem;font-size:.8rem;font-style:italic;font-weight:400}#default-chronograf-url:hover{text-transform:underline}.flex-form{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.flex-form .save-btn{width:5.5rem;margin:0 0 0 .25rem;text-align:center;padding:.75rem 1rem;color:#fff;border-radius:3px;font-weight:600;-webkit-transition:background .2s;transition:background .2s}@media (max-width:500px){.flex-form{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column;flex-flow:column}.flex-form .save-btn{width:100%;margin:.25rem 0 0}#default-chronograf-url{display:block;margin:1rem auto 0}}#save-chronograf-url button{background:#9394ff}#save-chronograf-url button:hover{background:#4591ed}@media (min-width:900px){.article{padding-left:18rem}.article-section{padding:3rem}.article-content code,.article-content pre,.article-content td,.article-content th{border-width:2px}.article-content pre{border-left-width:6px}}@media (min-width:1200px){.article{padding-left:23rem}.article-section{padding:4.5rem}.old-version{width:60%}}@media (min-width:1900px){.article{padding-left:28rem}.article-section{padding:5rem 11rem}.article-content{font-size:1.125rem}}.homepage{overflow:auto;min-height:calc(100vh - 4rem);width:100%;z-index:2;background:#2c2c38;background:-webkit-gradient(linear,left top, right top,color-stop(0, #2c2c38),to(#0f0e15));background:linear-gradient(to right,#2c2c38 0,#0f0e15 100%);font-size:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.homepage .cards-enterprise,.homepage .cards-oss,.homepage .cards-special{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;width:100%;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-flex:1;-ms-flex:1;flex:1}.homepage--card{width:100%;display:inline-block;overflow:hidden;position:relative}.homepage--card-mask{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.1;-webkit-transition:opacity .75s ease,-webkit-transform .75s ease;transition:opacity .75s ease,-webkit-transform .75s ease;transition:opacity .75s ease,transform .75s ease;transition:opacity .75s ease,transform .75s ease,-webkit-transform .75s ease;z-index:1;background-attachment:scroll;background-size:cover;background-position:center center;background-repeat:no-repeat;-webkit-transform:scale(1,1);transform:scale(1,1)}.homepage--card:hover .homepage--card-mask{opacity:1;-webkit-transform:scale(1.2,1.2);transform:scale(1.2,1.2)}.homepage--card:hover .homepage--card-title{color:#fff!important}.homepage--card-container{position:relative;z-index:2;width:100%;display:inline-block;text-align:center;padding:4rem 3rem;font-size:0}.homepage--card-container a:active,.homepage--card-container a:link,.homepage--card-container a:visited{color:#4591ed;-webkit-transition:color .25s ease;transition:color .25s ease;text-decoration:none}.homepage--card-container a:hover{color:#00c9ff}.homepage--card-description,.homepage--card-title{text-align:left;display:inline-block;width:100%;vertical-align:middle}.homepage--card-title{font-size:2rem;font-family:Klavika-Light,sans-serif;font-weight:200;font-style:italic;color:#4591ed;margin-bottom:.5em;-webkit-transition:color .75s ease;transition:color .75s ease}.homepage--card-description{font-size:1rem;color:#757888;line-height:1.4em;font-weight:400}.homepage--card-link{display:inline-block;font-size:.875rem;font-weight:600;margin-left:.25rem;padding:2px 11px;border-radius:3px}.homepage--card-link:first-of-type{margin-top:1rem}.homepage--card.card-telegraf .homepage--card-mask{background-image:url(/img/home-telegraf.svg);background-color:#f95f53}.homepage--card.card-telegraf .homepage--card-description{color:#fff}.homepage--card.card-telegraf .homepage--card-title{color:#ff8564}.homepage--card.card-telegraf a.homepage--card-link:active,.homepage--card.card-telegraf a.homepage--card-link:link,.homepage--card.card-telegraf a.homepage--card-link:visited{color:#fff;-webkit-transition:background-color .25s ease,color .25s ease;transition:background-color .25s ease,color .25s ease}.homepage--card.card-telegraf a.homepage--card-link:hover{color:#ff8564;background-color:#fff}.homepage--card.card-influxdb .homepage--card-mask{background-image:url(/img/home-influxdb.svg);background-color:#4591ed}.homepage--card.card-influxdb .homepage--card-description{color:#fff}.homepage--card.card-influxdb .homepage--card-title{color:#00c9ff}.homepage--card.card-influxdb a.homepage--card-link:active,.homepage--card.card-influxdb a.homepage--card-link:link,.homepage--card.card-influxdb a.homepage--card-link:visited{color:#fff;-webkit-transition:background-color .25s ease,color .25s ease;transition:background-color .25s ease,color .25s ease}.homepage--card.card-influxdb a.homepage--card-link:hover{color:#22adf6;background-color:#fff}.homepage--card.card-chronograf .homepage--card-mask{background-image:url(/img/home-chronograf.svg);background-color:#7a65f2}.homepage--card.card-chronograf .homepage--card-description{color:#fff}.homepage--card.card-chronograf .homepage--card-title{color:#9394ff}.homepage--card.card-chronograf a.homepage--card-link:active,.homepage--card.card-chronograf a.homepage--card-link:link,.homepage--card.card-chronograf a.homepage--card-link:visited{color:#fff;-webkit-transition:background-color .25s ease,color .25s ease;transition:background-color .25s ease,color .25s ease}.homepage--card.card-chronograf a.homepage--card-link:hover{color:#9394ff;background-color:#fff}.homepage--card.card-kapacitor .homepage--card-mask{background-image:url(/img/home-kapacitor.svg);background-color:#4ed8a0}.homepage--card.card-kapacitor .homepage--card-description{color:#fff}.homepage--card.card-kapacitor .homepage--card-title{color:#4ed8a0}.homepage--card.card-kapacitor a.homepage--card-link:active,.homepage--card.card-kapacitor a.homepage--card-link:link,.homepage--card.card-kapacitor a.homepage--card-link:visited{color:#fff;-webkit-transition:background-color .25s ease,color .25s ease;transition:background-color .25s ease,color .25s ease}.homepage--card.card-kapacitor a.homepage--card-link:hover{color:#4ed8a0;background-color:#fff}.homepage--card.card-enterprise_kapacitor .homepage--card-mask{background-image:url(/img/home-kapacitor.svg);background-color:#4ed8a0}.homepage--card.card-enterprise_kapacitor .homepage--card-description{color:#fff}.homepage--card.card-enterprise_kapacitor .homepage--card-title{color:#4ed8a0}.homepage--card.card-enterprise_kapacitor a.homepage--card-link:active,.homepage--card.card-enterprise_kapacitor a.homepage--card-link:link,.homepage--card.card-enterprise_kapacitor a.homepage--card-link:visited{color:#fff;-webkit-transition:background-color .25s ease,color .25s ease;transition:background-color .25s ease,color .25s ease}.homepage--card.card-enterprise_kapacitor a.homepage--card-link:hover{color:#4ed8a0;background-color:#fff}.homepage--card.card-enterprise_influxdb .homepage--card-mask{background-image:url(/img/home-influxdb.svg);background-color:#4591ed}.homepage--card.card-enterprise_influxdb .homepage--card-description{color:#fff}.homepage--card.card-enterprise_influxdb .homepage--card-title{color:#00c9ff}.homepage--card.card-enterprise_influxdb a.homepage--card-link:active,.homepage--card.card-enterprise_influxdb a.homepage--card-link:link,.homepage--card.card-enterprise_influxdb a.homepage--card-link:visited{color:#fff;-webkit-transition:background-color .25s ease,color .25s ease;transition:background-color .25s ease,color .25s ease}.homepage--card.card-enterprise_influxdb a.homepage--card-link:hover{color:#22adf6;background-color:#fff}.homepage--card.card-flux .homepage--card-mask{background-image:url(/img/home-flux.svg);background-color:#15a194;opacity:1}.homepage--card.card-flux .homepage--card-description{color:#fff}.homepage--card.card-flux .homepage--card-title{color:#fff}.homepage--card.card-flux a.homepage--card-link:active,.homepage--card.card-flux a.homepage--card-link:link,.homepage--card.card-flux a.homepage--card-link:visited{color:#fff;-webkit-transition:background-color .25s ease,color .25s ease;transition:background-color .25s ease,color .25s ease}.homepage--card.card-flux a.homepage--card-link:active.download,.homepage--card.card-flux a.homepage--card-link:link.download,.homepage--card.card-flux a.homepage--card-link:visited.download{display:none}.homepage--card.card-flux a.homepage--card-link:hover{color:#32b08c;background-color:#fff}.homepage--card.card-platform{width:100%;background:-webkit-gradient(linear,left top, right top,from(#4591ed),to(#22adf6));background:linear-gradient(to right,#4591ed,#22adf6);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.homepage--card.card-platform .homepage--card-container{padding-bottom:3rem}.homepage--card.card-platform .homepage--card-mask{background-image:url(/img/home-influxdb.svg);background-color:#4591ed;opacity:.9}.homepage--card.card-platform .homepage--card-description{color:#fff;text-align:center}.homepage--card.card-platform .homepage--card-title{color:#fff;text-align:center;font-size:2.15rem}.homepage--card.card-platform a.homepage--card-link:active,.homepage--card.card-platform a.homepage--card-link:link,.homepage--card.card-platform a.homepage--card-link:visited{color:#fff;-webkit-transition:background-color .25s ease,color .25s ease;transition:background-color .25s ease,color .25s ease}.homepage--card.card-platform a.homepage--card-link:hover{color:#22adf6;background-color:#fff}.homepage--card.card-platform a.btn{margin:1.75rem 0 1rem;padding:1em 1.5em;display:inline-block;background:#fff;color:#22adf6;border-radius:3px;font-size:1rem;font-weight:700;-webkit-transition:all .2s;transition:all .2s;-webkit-box-shadow:0 0 15px rgba(255,255,255,0);box-shadow:0 0 15px rgba(255,255,255,0)}.homepage--card.card-platform a.btn:hover{-webkit-box-shadow:0 0 15px #fff;box-shadow:0 0 15px #fff}@media (min-width:900px){.homepage--card{width:50%;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}}@media (min-width:1200px){.homepage--card-container{padding:3.5rem}.homepage--card-description{font-size:1.075rem}.homepage--card{width:25%;height:auto}.homepage--card.card-platform{width:75%}.homepage--card.card-enterprise_influxdb,.homepage--card.card-enterprise_kapacitor{width:50%}}@media (min-width:1900px){.homepage--card-container{padding:4rem}.homepage--card-description{font-size:1.125rem}}.error-page{overflow:scroll;top:4rem;height:100%;width:100%;background:#383846;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #383846),to(#1f2039));background:linear-gradient(to bottom,#383846 0,#1f2039 100%)}.error-content{margin:15vh auto;width:85%;max-width:400px;min-width:240px;font-size:15px;line-height:19px;color:#c6cad3}.error-content h1{color:#4591ed;display:block;margin:0 auto 50px;padding-top:15px;width:212px;height:212px;border-radius:50%;text-align:center;font-size:90px;font-weight:200;line-height:180px;position:relative;border:2px solid #4591ed}.flex{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-pack:distribute;justify-content:space-around}.wayfinding{margin-bottom:2rem}.btn{display:block;padding:.5rem;background:#4591ed;color:#fff;border-radius:3px;text-align:center;-webkit-transition:background .2s;transition:background .2s}.btn.back{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;margin-right:.35rem}.btn.back:before{content:"\ea41";font-family:icomoon;margin-right:.5rem;font-size:1rem}.btn.project{-webkit-box-flex:3;-ms-flex-positive:3;flex-grow:3;display:none}.btn.project:before{content:"\e801";font-family:icomoon;margin-right:.5rem;-webkit-box-flex:3;-ms-flex-positive:3;flex-grow:3}.btn:hover{background:#22adf6}@media (min-width:900px){.error-content{font-size:17px;line-height:22px}}@media (min-width:1900px){.error-content{font-size:21px;line-height:32px}}.tabs-container{margin:2em 0 2em}.tabs{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;border-radius:3px 0 0 3px}.tabs p{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.tabs a{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;margin:2px;font-size:.875em;color:#8e91a1!important;padding:.5em 1em;display:inline-block;text-align:center;border-radius:3px;background-color:rgba(231,232,235,.5);-webkit-transition:background-color .2s,color .2s;transition:background-color .2s,color .2s}.tabs a:hover{color:#676978!important}.tabs a.is-active{color:#fff!important;background:#4591ed}.tab-content{width:100%}.tab-content>*{width:100%!important;margin-left:0!important}.tab-content:not(:first-child){display:none}.tab-content-container{position:relative;border-radius:0 3px 3px 3px}.code-tabs-content{margin:.75rem 0 3rem;width:100%}.code-tabs-content>*{width:100%!important;margin-left:0!important}.code-tabs-wrapper{margin:1.5rem 0 .5rem}.code-tabs-wrapper .code-tabs p{margin:0;text-align:right;display:block;font-size:.9rem}.code-tabs-wrapper .code-tabs a{padding:.25rem .75rem;margin:0;border-radius:3px 3px 0 0;display:inline-block;background:rgba(242,244,255,.6);color:rgba(142,145,161,.5)!important}.code-tabs-wrapper .code-tabs a:hover{color:#676978!important}.code-tabs-wrapper .code-tabs a.is-active{background-color:#f2f4ff;color:#676978!important}.code-tabs-wrapper .code-tab-content{padding:0}.code-tabs-wrapper .code-tab-content pre{margin:0 0 3rem;border-radius:3px 0 3px 3px}.code-tabs-wrapper .code-tab-content:not(:first-of-type){display:none}@media (min-width:900px){.tabs-container .tabs a{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0}}.plugin-card{position:relative;padding:1rem 1.5rem;margin-bottom:.5rem;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#f6f6f8;border-radius:3px}.plugin-card h3{padding:0;margin-top:.25rem}.plugin-card.new h3:after{content:"New";margin-left:.3rem;padding:.25rem .5rem;font-style:italic;color:#4591ed;font-size:1.2rem}.plugin-card p.meta{margin:.75rem 0;font-weight:500;color:#757888;line-height:1.75rem}.plugin-card p.meta .deprecated{margin-left:.5rem;font-style:italic;color:#e90}.plugin-card .info>p:last-child{margin-bottom:.5rem}.plugin-card .info>ul:last-child{margin-bottom:.5rem}.plugin-card .info>ol:last-child{margin-bottom:.5rem}.plugin-card .github-link{position:absolute;color:#fff!important;top:.5rem;right:.5rem;opacity:0;-webkit-transition:opacity .2s,background .2s,color 2s;transition:opacity .2s,background .2s,color 2s}.plugin-card .github-link .icon-github{font-size:1.2rem;margin:0 .25rem 0 0}.plugin-card:hover .github-link{opacity:1}.plugin-card blockquote{border-color:#c6ffd0;background:rgba(242,255,244,.5)}.plugin-card blockquote h3,.plugin-card blockquote h4,.plugin-card blockquote h5,.plugin-card blockquote h6{color:#757888}.plugin-card blockquote li,.plugin-card blockquote p{color:#676978;font-size:1rem;font-style:normal}.plugin-card blockquote strong{color:inherit}.plugin-card blockquote a{color:#ff8564}.plugin-card blockquote a code:after{border-color:transparent rgba(43,112,152,.35) transparent transparent}.plugin-card blockquote a:hover{color:#ffb6a0}.plugin-card blockquote a:hover code:after{border-color:transparent #ffb6a0 transparent transparent}.plugin-card blockquote ol li:before{color:#676978}.plugin-card blockquote code,.plugin-card blockquote pre{color:#2b7098;background:#c6ffd0}#plugin-filters{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}#plugin-filters .filter-category{-webkit-box-flex:1;-ms-flex:1 1 200px;flex:1 1 200px;margin:0 1.25rem 1.25rem 0;max-width:33%}#plugin-filters .filter-category.two-columns{-webkit-box-flex:1;-ms-flex:1 2 400px;flex:1 2 400px;max-width:66%}#plugin-filters .filter-category.two-columns .filter-list{-webkit-columns:2;columns:2}#plugin-filters h5{border-bottom:1px solid rgba(117,120,136,.25);padding-bottom:.65rem}#plugin-filters .filter-list{padding:0;margin:.5rem 0 0;list-style:none}#plugin-filters .filter-list li{padding:0;margin:0;line-height:1.35rem;list-style-type:none!important}#plugin-filters label{display:block;padding:.25rem 0;color:#757888;position:relative}#plugin-filters label:after{content:attr(data-count);margin-left:.25rem;font-size:.85rem;opacity:.5}#plugin-filters .checkbox{display:inline-block;height:1.15em;width:1.15em;background:rgba(117,120,136,.05);margin-right:.3rem;vertical-align:text-top;border-radius:3px;cursor:pointer;border:1.5px solid rgba(117,120,136,.2);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#plugin-filters input[type=checkbox]{margin-right:-1.1rem;padding:0;vertical-align:top;opacity:0;cursor:pointer}#plugin-filters input[type=checkbox]+.checkbox:after{content:"";display:block;position:absolute;height:.5rem;width:.5rem;border-radius:50%;background:#ff8564;top:.65rem;left:.35rem;opacity:0;-webkit-transform:scale(2);transform:scale(2);-webkit-transition:all .2s;transition:all .2s}#plugin-filters input[type=checkbox]:checked+.checkbox:after{opacity:1;-webkit-transform:scale(1);transform:scale(1)}@media (max-width:1100px){#plugin-filters .filter-category{max-width:50%}#plugin-filters .filter-category.three-columns,#plugin-filters .filter-category.two-columns{max-width:100%}}@media (max-width:800px){#plugin-filters .filter-category{max-width:100%}.plugin-card .github-link{opacity:1;padding:.25rem .35rem .35rem;line-height:0;font-size:1.35rem}.plugin-card .github-link .icon-github{margin:0}.plugin-card .github-link .hide{display:none}}@media (min-width:900px){body{padding-bottom:0}}body.docs-theme--telegraf .article-content a:active,body.docs-theme--telegraf .article-content a:link,body.docs-theme--telegraf .article-content a:visited{color:#ff8564}body.docs-theme--telegraf .article-content a:hover{color:#ffb6a0}body.docs-theme--telegraf .article-content a.top:hover{background:#ffb6a0}body.docs-theme--telegraf .article-content a.btn{background:#ff8564}body.docs-theme--telegraf .article-content a.btn:hover{background:#ffb6a0}body.docs-theme--telegraf .article-content.section-landing h2 a.off-page:link:hover{color:#ff8564!important}body.docs-theme--telegraf .sidebar--mask-container .sidebar--mask{background:#ff8564;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #ff8564),to(#7a65f2));background:linear-gradient(to bottom,#ff8564 0,#7a65f2 100%)}body.docs-theme--telegraf .sidebar--section-title a:active,body.docs-theme--telegraf .sidebar--section-title a:link,body.docs-theme--telegraf .sidebar--section-title a:visited{color:#ff8564;font-weight:400}body.docs-theme--telegraf .sidebar--section-title a:hover{color:#ffb6a0}body.docs-theme--telegraf a.sidebar--page:hover{color:#ffb6a0}body.docs-theme--telegraf .navbar--product-dropdown{background-color:#ff8564}body.docs-theme--telegraf .navbar--product-dropdown:hover{background-color:#ffb6a0}body.docs-theme--telegraf .navbar--product-menu{background:#ff8564;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #ff8564),to(#7a65f2));background:linear-gradient(to bottom,#ff8564 0,#7a65f2 100%)}body.docs-theme--telegraf .tabs a.is-active{background:#ff8564}body.docs-theme--chronograf .article-content a:active,body.docs-theme--chronograf .article-content a:link,body.docs-theme--chronograf .article-content a:visited{color:#9394ff}body.docs-theme--chronograf .article-content a:hover{color:#b1b6ff}body.docs-theme--chronograf .article-content a.top:hover{background:#b1b6ff}body.docs-theme--chronograf .article-content a.btn{background:#9394ff}body.docs-theme--chronograf .article-content a.btn:hover{background:#b1b6ff}body.docs-theme--chronograf .article-content.section-landing h2 a.off-page:link:hover{color:#9394ff!important}body.docs-theme--chronograf .sidebar--mask-container .sidebar--mask{background:#9394ff;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #9394ff),to(#4591ed));background:linear-gradient(to bottom,#9394ff 0,#4591ed 100%)}body.docs-theme--chronograf .sidebar--section-title a:active,body.docs-theme--chronograf .sidebar--section-title a:link,body.docs-theme--chronograf .sidebar--section-title a:visited{color:#9394ff;font-weight:400}body.docs-theme--chronograf .sidebar--section-title a:hover{color:#b1b6ff}body.docs-theme--chronograf a.sidebar--page:hover{color:#b1b6ff}body.docs-theme--chronograf .navbar--product-dropdown{background-color:#9394ff}body.docs-theme--chronograf .navbar--product-dropdown:hover{background-color:#b1b6ff}body.docs-theme--chronograf .navbar--product-menu{background:#9394ff;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #9394ff),to(#4591ed));background:linear-gradient(to bottom,#9394ff 0,#4591ed 100%)}body.docs-theme--chronograf .tabs a.is-active{background:#9394ff}body.docs-theme--kapacitor .article-content a:active,body.docs-theme--kapacitor .article-content a:link,body.docs-theme--kapacitor .article-content a:visited{color:#20b76f}body.docs-theme--kapacitor .article-content a:hover{color:#108174}body.docs-theme--kapacitor .article-content a.top:hover{background:#108174}body.docs-theme--kapacitor .article-content a.btn{background:#20b76f}body.docs-theme--kapacitor .article-content a.btn:hover{background:#4ed8a0}body.docs-theme--kapacitor .article-content.section-landing h2 a.off-page:link:hover{color:#20b76f!important}body.docs-theme--kapacitor .sidebar--mask-container .sidebar--mask{background:#4ed8a0;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #4ed8a0),to(#22adf6));background:linear-gradient(to bottom,#4ed8a0 0,#22adf6 100%)}body.docs-theme--kapacitor .sidebar--section-title a:active,body.docs-theme--kapacitor .sidebar--section-title a:link,body.docs-theme--kapacitor .sidebar--section-title a:visited{color:#20b76f;font-weight:400}body.docs-theme--kapacitor .sidebar--section-title a:hover{color:#108174}body.docs-theme--kapacitor a.sidebar--page:hover{color:#108174}body.docs-theme--kapacitor .navbar--product-dropdown{background-color:#4ed8a0}body.docs-theme--kapacitor .navbar--product-dropdown:hover{background-color:#7ce490}body.docs-theme--kapacitor .navbar--product-menu{background:#4ed8a0;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #4ed8a0),to(#22adf6));background:linear-gradient(to bottom,#4ed8a0 0,#22adf6 100%)}body.docs-theme--kapacitor .tabs a.is-active{background:#20b76f}body.docs-theme--enterprise_kapacitor .article-content a:active,body.docs-theme--enterprise_kapacitor .article-content a:link,body.docs-theme--enterprise_kapacitor .article-content a:visited{color:#20b76f}body.docs-theme--enterprise_kapacitor .article-content a:hover{color:#108174}body.docs-theme--enterprise_kapacitor .article-content a.top:hover{background:#108174}body.docs-theme--enterprise_kapacitor .article-content a.btn{background:#20b76f}body.docs-theme--enterprise_kapacitor .article-content a.btn:hover{background:#4ed8a0}body.docs-theme--enterprise_kapacitor .article-content.section-landing h2 a.off-page:link:hover{color:#20b76f!important}body.docs-theme--enterprise_kapacitor .sidebar--mask-container .sidebar--mask{background:#4ed8a0;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #4ed8a0),to(#22adf6));background:linear-gradient(to bottom,#4ed8a0 0,#22adf6 100%)}body.docs-theme--enterprise_kapacitor .sidebar--section-title a:active,body.docs-theme--enterprise_kapacitor .sidebar--section-title a:link,body.docs-theme--enterprise_kapacitor .sidebar--section-title a:visited{color:#20b76f;font-weight:400}body.docs-theme--enterprise_kapacitor .sidebar--section-title a:hover{color:#108174}body.docs-theme--enterprise_kapacitor a.sidebar--page:hover{color:#108174}body.docs-theme--enterprise_kapacitor .navbar--product-dropdown{background-color:#4ed8a0}body.docs-theme--enterprise_kapacitor .navbar--product-dropdown:hover{background-color:#7ce490}body.docs-theme--enterprise_kapacitor .navbar--product-menu{background:#4ed8a0;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #4ed8a0),to(#22adf6));background:linear-gradient(to bottom,#4ed8a0 0,#22adf6 100%)}body.docs-theme--enterprise_kapacitor .tabs a.is-active{background:#20b76f}body.docs-theme--flux .article-content a:active,body.docs-theme--flux .article-content a:link,body.docs-theme--flux .article-content a:visited{color:#20b76f}body.docs-theme--flux .article-content a:hover{color:#108174}body.docs-theme--flux .article-content a.top:hover{background:#108174}body.docs-theme--flux .article-content.section-landing h2 a.off-page:link:hover{color:#20b76f!important}body.docs-theme--flux .sidebar--mask-container .sidebar--mask{background:#4ed8a0;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #4ed8a0),to(#22adf6));background:linear-gradient(to bottom,#4ed8a0 0,#22adf6 100%)}body.docs-theme--flux .sidebar--section-title a:active,body.docs-theme--flux .sidebar--section-title a:link,body.docs-theme--flux .sidebar--section-title a:visited{color:#20b76f;font-weight:400}body.docs-theme--flux .sidebar--section-title a:hover{color:#108174}body.docs-theme--flux a.sidebar--page:hover{color:#108174}body.docs-theme--flux .navbar--product-dropdown{background-color:#4ed8a0}body.docs-theme--flux .navbar--product-dropdown:hover{background-color:#7ce490}body.docs-theme--flux .navbar--product-menu{background:#4ed8a0;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #4ed8a0),to(#22adf6));background:linear-gradient(to bottom,#4ed8a0 0,#22adf6 100%)}body.docs-theme--flux .tabs a.is-active{background:#20b76f} +.klavika-font{font-family:Klavika-Light,'Helvetica Neue',Helvetica,Helvetica,Arial,Tahoma,Verdana,sans-serif;font-weight:200}@font-face{font-family:icomoon;src:url(../fonts/icomoon.eot?c3omf0);src:url(../fonts/icomoon.eot?c3omf0#iefix) format('embedded-opentype'),url(../fonts/icomoon.woff2?c3omf0) format('woff2'),url(../fonts/icomoon.ttf?c3omf0) format('truetype'),url(../fonts/icomoon.woff?c3omf0) format('woff'),url(../fonts/icomoon.svg?c3omf0#icomoon) format('svg');font-weight:400;font-style:normal}.icon{font-family:icomoon;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon.sun2:before{content:"\eae2"}.icon.moon:before{content:"\eae3"}.icon.logotype:before{content:"\e800"}.icon.logo:before{content:"\e801"}.icon.arrow-down:before{content:"\e802"}.icon.arrow-up:before{content:"\e803"}.icon.arrow-left:before{content:"\e804"}.icon.arrow-right:before{content:"\e805"}.icon.health:before{content:"\e806"}.icon.lightning:before{content:"\e807"}.icon.matrix:before{content:"\e808"}.icon.cluster:before{content:"\e809"}.icon.data:before{content:"\e80a"}.icon.google:before{content:"\e81a"}.icon.eyeball:before{content:"\e901"}.icon.infinite:before{content:"\e902"}.icon.dashboard:before{content:"\eade"}.icon.analytics:before{content:"\eadf"}.icon.cloud-stack:before{content:"\eae0"}.icon.iot:before{content:"\eae1"}.icon.home:before{content:"\e904"}.icon.home2:before{content:"\e905"}.icon.home3:before{content:"\e906"}.icon.office:before{content:"\e907"}.icon.newspaper:before{content:"\e908"}.icon.pencil:before{content:"\e909"}.icon.pencil2:before{content:"\e90a"}.icon.quill:before{content:"\e90b"}.icon.pen:before{content:"\e90c"}.icon.blog:before{content:"\e90d"}.icon.eyedropper:before{content:"\e90e"}.icon.droplet:before{content:"\e90f"}.icon.paint-format:before{content:"\e910"}.icon.image:before{content:"\e911"}.icon.images:before{content:"\e912"}.icon.camera:before{content:"\e913"}.icon.headphones:before{content:"\e914"}.icon.music:before{content:"\e915"}.icon.play:before{content:"\e916"}.icon.film:before{content:"\e917"}.icon.video-camera:before{content:"\e918"}.icon.dice:before{content:"\e919"}.icon.pacman:before{content:"\e91a"}.icon.spades:before{content:"\e91b"}.icon.clubs:before{content:"\e91c"}.icon.diamonds:before{content:"\e91d"}.icon.bullhorn:before{content:"\e91e"}.icon.connection:before{content:"\e91f"}.icon.podcast:before{content:"\e920"}.icon.feed:before{content:"\e921"}.icon.mic:before{content:"\e922"}.icon.book:before{content:"\e923"}.icon.books:before{content:"\e924"}.icon.library:before{content:"\e925"}.icon.file-text:before{content:"\e926"}.icon.profile:before{content:"\e927"}.icon.file-empty:before{content:"\e928"}.icon.files-empty:before{content:"\e929"}.icon.file-text2:before{content:"\e92a"}.icon.file-picture:before{content:"\e92b"}.icon.file-music:before{content:"\e92c"}.icon.file-play:before{content:"\e92d"}.icon.file-video:before{content:"\e92e"}.icon.file-zip:before{content:"\e92f"}.icon.copy:before{content:"\e930"}.icon.paste:before{content:"\e931"}.icon.stack:before{content:"\e932"}.icon.folder:before{content:"\e933"}.icon.folder-open:before{content:"\e934"}.icon.folder-plus:before{content:"\e935"}.icon.folder-minus:before{content:"\e936"}.icon.folder-download:before{content:"\e937"}.icon.folder-upload:before{content:"\e938"}.icon.price-tag:before{content:"\e939"}.icon.price-tags:before{content:"\e93a"}.icon.barcode:before{content:"\e93b"}.icon.qrcode:before{content:"\e93c"}.icon.ticket:before{content:"\e93d"}.icon.cart:before{content:"\e93e"}.icon.coin-dollar:before{content:"\e93f"}.icon.coin-euro:before{content:"\e940"}.icon.coin-pound:before{content:"\e941"}.icon.coin-yen:before{content:"\e942"}.icon.credit-card:before{content:"\e943"}.icon.calculator:before{content:"\e944"}.icon.lifebuoy:before{content:"\e945"}.icon.phone:before{content:"\e946"}.icon.phone-hang-up:before{content:"\e947"}.icon.address-book:before{content:"\e948"}.icon.envelop:before{content:"\e949"}.icon.pushpin:before{content:"\e94a"}.icon.location:before{content:"\e94b"}.icon.location2:before{content:"\e94c"}.icon.compass:before{content:"\e94d"}.icon.compass2:before{content:"\e94e"}.icon.map:before{content:"\e94f"}.icon.map2:before{content:"\e950"}.icon.history:before{content:"\e951"}.icon.clock:before{content:"\e952"}.icon.clock2:before{content:"\e953"}.icon.alarm:before{content:"\e954"}.icon.bell:before{content:"\e955"}.icon.stopwatch:before{content:"\e956"}.icon.calendar:before{content:"\e957"}.icon.printer:before{content:"\e958"}.icon.keyboard:before{content:"\e959"}.icon.display:before{content:"\e95a"}.icon.laptop:before{content:"\e95b"}.icon.mobile:before{content:"\e95c"}.icon.mobile2:before{content:"\e95d"}.icon.tablet:before{content:"\e95e"}.icon.tv:before{content:"\e95f"}.icon.drawer:before{content:"\e960"}.icon.drawer2:before{content:"\e961"}.icon.box-add:before{content:"\e962"}.icon.box-remove:before{content:"\e963"}.icon.download:before{content:"\e964"}.icon.upload:before{content:"\e965"}.icon.floppy-disk:before{content:"\e966"}.icon.drive:before{content:"\e967"}.icon.database:before{content:"\e968"}.icon.undo:before{content:"\e969"}.icon.redo:before{content:"\e96a"}.icon.undo2:before{content:"\e96b"}.icon.redo2:before{content:"\e96c"}.icon.forward:before{content:"\e96d"}.icon.reply:before{content:"\e96e"}.icon.bubble:before{content:"\e96f"}.icon.bubbles:before{content:"\e970"}.icon.bubbles2:before{content:"\e971"}.icon.bubble2:before{content:"\e972"}.icon.bubbles3:before{content:"\e973"}.icon.bubbles4:before{content:"\e974"}.icon.user:before{content:"\e975"}.icon.users:before{content:"\e976"}.icon.user-plus:before{content:"\e977"}.icon.user-minus:before{content:"\e978"}.icon.user-check:before{content:"\e979"}.icon.user-tie:before{content:"\e97a"}.icon.quotes-left:before{content:"\e97b"}.icon.quotes-right:before{content:"\e97c"}.icon.hour-glass:before{content:"\e97d"}.icon.spinner:before{content:"\e97e"}.icon.spinner2:before{content:"\e97f"}.icon.spinner3:before{content:"\e980"}.icon.spinner4:before{content:"\e981"}.icon.spinner5:before{content:"\e982"}.icon.spinner6:before{content:"\e983"}.icon.spinner7:before{content:"\e984"}.icon.spinner8:before{content:"\e985"}.icon.spinner9:before{content:"\e986"}.icon.spinner10:before{content:"\e987"}.icon.spinner11:before{content:"\e988"}.icon.binoculars:before{content:"\e989"}.icon.search:before{content:"\e98a"}.icon.zoom-in:before{content:"\e98b"}.icon.zoom-out:before{content:"\e98c"}.icon.enlarge:before{content:"\e98d"}.icon.shrink:before{content:"\e98e"}.icon.enlarge2:before{content:"\e98f"}.icon.shrink2:before{content:"\e990"}.icon.key:before{content:"\e991"}.icon.key2:before{content:"\e992"}.icon.lock:before{content:"\e993"}.icon.unlocked:before{content:"\e994"}.icon.wrench:before{content:"\e995"}.icon.equalizer:before{content:"\e996"}.icon.equalizer2:before{content:"\e997"}.icon.cog:before{content:"\e900"}.icon.cogs:before{content:"\e998"}.icon.hammer:before{content:"\e999"}.icon.magic-wand:before{content:"\e99a"}.icon.aid-kit:before{content:"\e99b"}.icon.bug:before{content:"\e99c"}.icon.pie-chart:before{content:"\e99d"}.icon.stats-dots:before{content:"\e99e"}.icon.stats-bars:before{content:"\e99f"}.icon.stats-bars2:before{content:"\e9a0"}.icon.trophy:before{content:"\e9a1"}.icon.gift:before{content:"\e9a2"}.icon.glass:before{content:"\e9a3"}.icon.glass2:before{content:"\e9a4"}.icon.mug:before{content:"\e9a5"}.icon.spoon-knife:before{content:"\e9a6"}.icon.leaf:before{content:"\e9a7"}.icon.rocket:before{content:"\e9a8"}.icon.meter:before{content:"\e9a9"}.icon.meter2:before{content:"\e9aa"}.icon.hammer2:before{content:"\e9ab"}.icon.fire:before{content:"\e9ac"}.icon.lab:before{content:"\e9ad"}.icon.magnet:before{content:"\e9ae"}.icon.bin:before{content:"\e9af"}.icon.bin2:before{content:"\e9b0"}.icon.briefcase:before{content:"\e9b1"}.icon.airplane:before{content:"\e9b2"}.icon.truck:before{content:"\e9b3"}.icon.road:before{content:"\e9b4"}.icon.accessibility:before{content:"\e9b5"}.icon.target:before{content:"\e9b6"}.icon.shield:before{content:"\e9b7"}.icon.power:before{content:"\e9b8"}.icon.switch:before{content:"\e9b9"}.icon.power-cord:before{content:"\e9ba"}.icon.clipboard:before{content:"\e9bb"}.icon.list-numbered:before{content:"\e9bc"}.icon.list:before{content:"\e9bd"}.icon.list2:before{content:"\e9be"}.icon.tree:before{content:"\e9bf"}.icon.menu:before{content:"\e9c0"}.icon.menu2:before{content:"\e9c1"}.icon.menu3:before{content:"\e9c2"}.icon.menu4:before{content:"\e9c3"}.icon.cloud:before{content:"\e9c4"}.icon.cloud-download:before{content:"\e9c5"}.icon.cloud-upload:before{content:"\e9c6"}.icon.cloud-check:before{content:"\e9c7"}.icon.download2:before{content:"\e9c8"}.icon.upload2:before{content:"\e9c9"}.icon.download3:before{content:"\e9ca"}.icon.upload3:before{content:"\e9cb"}.icon.sphere:before{content:"\e9cc"}.icon.earth:before{content:"\e9cd"}.icon.link:before{content:"\e9ce"}.icon.flag:before{content:"\e9cf"}.icon.attachment:before{content:"\e9d0"}.icon.eye:before{content:"\e9d1"}.icon.eye-plus:before{content:"\e9d2"}.icon.eye-minus:before{content:"\e9d3"}.icon.eye-blocked:before{content:"\e9d4"}.icon.bookmark:before{content:"\e9d5"}.icon.bookmarks:before{content:"\e9d6"}.icon.sun:before{content:"\e9d7"}.icon.contrast:before{content:"\e9d8"}.icon.brightness-contrast:before{content:"\e9d9"}.icon.star-empty:before{content:"\e9da"}.icon.star-half:before{content:"\e9db"}.icon.star-full:before{content:"\e9dc"}.icon.heart:before{content:"\e9dd"}.icon.heart-broken:before{content:"\e9de"}.icon.man:before{content:"\e9df"}.icon.woman:before{content:"\e9e0"}.icon.man-woman:before{content:"\e9e1"}.icon.happy:before{content:"\e9e2"}.icon.happy2:before{content:"\e9e3"}.icon.smile:before{content:"\e9e4"}.icon.smile2:before{content:"\e9e5"}.icon.tongue:before{content:"\e9e6"}.icon.tongue2:before{content:"\e9e7"}.icon.sad:before{content:"\e9e8"}.icon.sad2:before{content:"\e9e9"}.icon.wink:before{content:"\e9ea"}.icon.wink2:before{content:"\e9eb"}.icon.grin:before{content:"\e9ec"}.icon.grin2:before{content:"\e9ed"}.icon.cool:before{content:"\e9ee"}.icon.cool2:before{content:"\e9ef"}.icon.angry:before{content:"\e9f0"}.icon.angry2:before{content:"\e9f1"}.icon.evil:before{content:"\e9f2"}.icon.evil2:before{content:"\e9f3"}.icon.shocked:before{content:"\e9f4"}.icon.shocked2:before{content:"\e9f5"}.icon.baffled:before{content:"\e9f6"}.icon.baffled2:before{content:"\e9f7"}.icon.confused:before{content:"\e9f8"}.icon.confused2:before{content:"\e9f9"}.icon.neutral:before{content:"\e9fa"}.icon.neutral2:before{content:"\e9fb"}.icon.hipster:before{content:"\e9fc"}.icon.hipster2:before{content:"\e9fd"}.icon.wondering:before{content:"\e9fe"}.icon.wondering2:before{content:"\e9ff"}.icon.sleepy:before{content:"\ea00"}.icon.sleepy2:before{content:"\ea01"}.icon.frustrated:before{content:"\ea02"}.icon.frustrated2:before{content:"\ea03"}.icon.crying:before{content:"\ea04"}.icon.crying2:before{content:"\ea05"}.icon.point-up:before{content:"\ea06"}.icon.point-right:before{content:"\ea07"}.icon.point-down:before{content:"\ea08"}.icon.point-left:before{content:"\ea09"}.icon.warning:before{content:"\ea0a"}.icon.notification:before{content:"\ea0b"}.icon.question:before{content:"\ea0c"}.icon.plus:before{content:"\ea0d"}.icon.minus:before{content:"\ea0e"}.icon.info:before{content:"\ea0f"}.icon.cancel-circle:before{content:"\ea10"}.icon.blocked:before{content:"\ea11"}.icon.cross:before{content:"\e80b"}.icon.checkmark:before{content:"\e80c"}.icon.checkmark2:before{content:"\ea12"}.icon.spell-check:before{content:"\ea13"}.icon.enter:before{content:"\ea14"}.icon.exit:before{content:"\ea15"}.icon.play2:before{content:"\ea16"}.icon.pause:before{content:"\ea17"}.icon.stop:before{content:"\ea18"}.icon.previous:before{content:"\ea19"}.icon.next:before{content:"\ea1a"}.icon.backward:before{content:"\ea1b"}.icon.forward2:before{content:"\ea1c"}.icon.play3:before{content:"\ea1d"}.icon.pause2:before{content:"\ea1e"}.icon.stop2:before{content:"\ea1f"}.icon.backward2:before{content:"\ea20"}.icon.forward3:before{content:"\ea21"}.icon.first:before{content:"\ea22"}.icon.last:before{content:"\ea23"}.icon.previous2:before{content:"\ea24"}.icon.next2:before{content:"\ea25"}.icon.eject:before{content:"\ea26"}.icon.volume-high:before{content:"\ea27"}.icon.volume-medium:before{content:"\ea28"}.icon.volume-low:before{content:"\ea29"}.icon.volume-mute:before{content:"\ea2a"}.icon.volume-mute2:before{content:"\ea2b"}.icon.volume-increase:before{content:"\ea2c"}.icon.volume-decrease:before{content:"\ea2d"}.icon.loop:before{content:"\ea2e"}.icon.loop2:before{content:"\ea2f"}.icon.infinite2:before{content:"\ea30"}.icon.shuffle:before{content:"\ea31"}.icon.arrow-up-left:before{content:"\ea32"}.icon.arrow-up3:before{content:"\ea33"}.icon.arrow-up-right:before{content:"\ea34"}.icon.arrow-right3:before{content:"\ea35"}.icon.arrow-down-right:before{content:"\ea36"}.icon.arrow-down3:before{content:"\ea37"}.icon.arrow-down-left:before{content:"\ea38"}.icon.arrow-left3:before{content:"\ea39"}.icon.arrow-up-left2:before{content:"\ea3a"}.icon.arrow-up2:before{content:"\ea3b"}.icon.arrow-up-right2:before{content:"\ea3c"}.icon.arrow-right2:before{content:"\ea3d"}.icon.arrow-down-right2:before{content:"\ea3e"}.icon.arrow-down2:before{content:"\ea3f"}.icon.arrow-down-left2:before{content:"\ea40"}.icon.arrow-left2:before{content:"\ea41"}.icon.circle-up:before{content:"\ea42"}.icon.circle-right:before{content:"\ea43"}.icon.circle-down:before{content:"\ea44"}.icon.circle-left:before{content:"\ea45"}.icon.tab:before{content:"\ea46"}.icon.move-up:before{content:"\ea47"}.icon.move-down:before{content:"\ea48"}.icon.sort-alpha-asc:before{content:"\ea49"}.icon.sort-alpha-desc:before{content:"\ea4a"}.icon.sort-numeric-asc:before{content:"\ea4b"}.icon.sort-numberic-desc:before{content:"\ea4c"}.icon.sort-amount-asc:before{content:"\ea4d"}.icon.sort-amount-desc:before{content:"\ea4e"}.icon.command:before{content:"\ea4f"}.icon.shift:before{content:"\ea50"}.icon.ctrl:before{content:"\ea51"}.icon.opt:before{content:"\ea52"}.icon.checkbox-checked:before{content:"\ea53"}.icon.checkbox-unchecked:before{content:"\ea54"}.icon.radio-checked:before{content:"\ea55"}.icon.radio-checked2:before{content:"\ea56"}.icon.radio-unchecked:before{content:"\ea57"}.icon.crop:before{content:"\ea58"}.icon.make-group:before{content:"\ea59"}.icon.ungroup:before{content:"\ea5a"}.icon.scissors:before{content:"\ea5b"}.icon.filter:before{content:"\ea5c"}.icon.font:before{content:"\ea5d"}.icon.ligature:before{content:"\ea5e"}.icon.ligature2:before{content:"\ea5f"}.icon.text-height:before{content:"\ea60"}.icon.text-width:before{content:"\ea61"}.icon.font-size:before{content:"\ea62"}.icon.bold:before{content:"\ea63"}.icon.underline:before{content:"\ea64"}.icon.italic:before{content:"\ea65"}.icon.strikethrough:before{content:"\ea66"}.icon.omega:before{content:"\ea67"}.icon.sigma:before{content:"\ea68"}.icon.page-break:before{content:"\ea69"}.icon.superscript:before{content:"\ea6a"}.icon.subscript:before{content:"\ea6b"}.icon.superscript2:before{content:"\ea6c"}.icon.subscript2:before{content:"\ea6d"}.icon.text-color:before{content:"\ea6e"}.icon.pagebreak:before{content:"\ea6f"}.icon.clear-formatting:before{content:"\ea70"}.icon.table:before{content:"\ea71"}.icon.table2:before{content:"\ea72"}.icon.insert-template:before{content:"\ea73"}.icon.pilcrow:before{content:"\ea74"}.icon.ltr:before{content:"\ea75"}.icon.rtl:before{content:"\ea76"}.icon.section:before{content:"\ea77"}.icon.paragraph-left:before{content:"\e903"}.icon.paragraph-center:before{content:"\ea78"}.icon.paragraph-right:before{content:"\ea79"}.icon.paragraph-justify:before{content:"\ea7a"}.icon.indent-increase:before{content:"\ea7b"}.icon.indent-decrease:before{content:"\ea7c"}.icon.share:before{content:"\ea7d"}.icon.new-tab:before{content:"\ea7e"}.icon.embed:before{content:"\ea7f"}.icon.embed2:before{content:"\ea80"}.icon.terminal:before{content:"\ea81"}.icon.share2:before{content:"\ea82"}.icon.mail:before{content:"\ea83"}.icon.mail2:before{content:"\ea84"}.icon.mail3:before{content:"\ea85"}.icon.mail4:before{content:"\ea86"}.icon.google2:before{content:"\ea87"}.icon.google-plus:before{content:"\ea88"}.icon.google-plus2:before{content:"\ea89"}.icon.google-plus3:before{content:"\ea8a"}.icon.google-drive:before{content:"\ea8b"}.icon.facebook:before{content:"\e80d"}.icon.facebook2:before{content:"\e80e"}.icon.facebook3:before{content:"\e80f"}.icon.ello:before{content:"\ea8c"}.icon.instagram:before{content:"\ea8d"}.icon.twitter:before{content:"\e810"}.icon.twitter2:before{content:"\e811"}.icon.twitter3:before{content:"\e812"}.icon.feed2:before{content:"\ea8e"}.icon.feed3:before{content:"\ea8f"}.icon.feed4:before{content:"\ea90"}.icon.youtube:before{content:"\ea91"}.icon.youtube2:before{content:"\ea92"}.icon.youtube3:before{content:"\ea93"}.icon.youtube4:before{content:"\ea94"}.icon.twitch:before{content:"\ea95"}.icon.vimeo:before{content:"\ea96"}.icon.vimeo2:before{content:"\ea97"}.icon.vimeo3:before{content:"\ea98"}.icon.lanyrd:before{content:"\ea99"}.icon.flickr:before{content:"\ea9a"}.icon.flickr2:before{content:"\ea9b"}.icon.flickr3:before{content:"\ea9c"}.icon.flickr4:before{content:"\ea9d"}.icon.picassa:before{content:"\ea9e"}.icon.picassa2:before{content:"\ea9f"}.icon.dribbble:before{content:"\eaa0"}.icon.dribbble2:before{content:"\eaa1"}.icon.dribbble3:before{content:"\eaa2"}.icon.forrst:before{content:"\eaa3"}.icon.forrst2:before{content:"\eaa4"}.icon.deviantart:before{content:"\eaa5"}.icon.deviantart2:before{content:"\eaa6"}.icon.steam:before{content:"\eaa7"}.icon.steam2:before{content:"\eaa8"}.icon.dropbox:before{content:"\eaa9"}.icon.onedrive:before{content:"\eaaa"}.icon.github:before{content:"\e813"}.icon.github2:before{content:"\e814"}.icon.github3:before{content:"\e815"}.icon.github4:before{content:"\e816"}.icon.github5:before{content:"\eaab"}.icon.wordpress:before{content:"\eaac"}.icon.wordpress2:before{content:"\eaad"}.icon.joomla:before{content:"\eaae"}.icon.blogger:before{content:"\eaaf"}.icon.blogger2:before{content:"\eab0"}.icon.tumblr:before{content:"\eab1"}.icon.tumblr2:before{content:"\eab2"}.icon.yahoo:before{content:"\eab3"}.icon.tux:before{content:"\eab4"}.icon.apple:before{content:"\eab5"}.icon.finder:before{content:"\eab6"}.icon.android:before{content:"\eab7"}.icon.windows:before{content:"\eab8"}.icon.windows8:before{content:"\eab9"}.icon.soundcloud:before{content:"\eaba"}.icon.soundcloud2:before{content:"\eabb"}.icon.skype:before{content:"\eabc"}.icon.reddit:before{content:"\eabd"}.icon.linkedin:before{content:"\e817"}.icon.linkedin2:before{content:"\e818"}.icon.lastfm:before{content:"\eabe"}.icon.lastfm2:before{content:"\eabf"}.icon.delicious:before{content:"\eac0"}.icon.stumbleupon:before{content:"\eac1"}.icon.stumbleupon2:before{content:"\eac2"}.icon.stackoverflow:before{content:"\e819"}.icon.pinterest:before{content:"\eac3"}.icon.pinterest2:before{content:"\eac4"}.icon.xing:before{content:"\eac5"}.icon.xing2:before{content:"\eac6"}.icon.flattr:before{content:"\eac7"}.icon.foursquare:before{content:"\eac8"}.icon.paypal:before{content:"\eac9"}.icon.paypal2:before{content:"\eaca"}.icon.paypal3:before{content:"\eacb"}.icon.yelp:before{content:"\eacc"}.icon.file-pdf:before{content:"\eacd"}.icon.file-openoffice:before{content:"\eace"}.icon.file-word:before{content:"\eacf"}.icon.file-excel:before{content:"\ead0"}.icon.libreoffice:before{content:"\ead1"}.icon.html5:before{content:"\ead2"}.icon.html52:before{content:"\ead3"}.icon.css3:before{content:"\ead4"}.icon.git:before{content:"\ead5"}.icon.svg:before{content:"\ead6"}.icon.codepen:before{content:"\ead7"}.icon.chrome:before{content:"\ead8"}.icon.firefox:before{content:"\ead9"}.icon.IE:before{content:"\eada"}.icon.opera:before{content:"\eadb"}.icon.safari:before{content:"\eadc"}.icon.IcoMoon:before{content:"\eadd"}#theme-switch-light{display:none}/*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0;font-family:Roboto,Helvetica,Arial,Tahoma,Verdana,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}code[class*=language-],pre[class*=language-]{direction:ltr;text-align:left;white-space:pre;white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-o-pre-wrap;word-spacing:normal;word-break:normal;word-wrap:normal;-moz-tab-size:1;-o-tab-size:1;tab-size:1;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow:none}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{overflow:auto}:not(pre)>code[class*=language-]{white-space:normal}.highlight{color:#7a65f2}.highlight .gh,.highlight .go,.highlight .na,.highlight .nt,.highlight .nv,.highlight .ow{color:#7a65f2}.highlight .c,.highlight .c1,.highlight .ch,.highlight .cm,.highlight .cpf,.highlight .cs,.highlight .w{color:#b1b6ff}.highlight .gi{background-color:#b1b6ff}.highlight .k,.highlight .kc,.highlight .kd,.highlight .kn,.highlight .kp,.highlight .kr,.highlight .nn{color:#4591ed}.highlight .bp,.highlight .cp,.highlight .dl,.highlight .gt,.highlight .gu,.highlight .kt,.highlight .nb,.highlight .nc,.highlight .no,.highlight .s1,.highlight .s2,.highlight .sa,.highlight .sb,.highlight .sc,.highlight .sd,.highlight .se,.highlight .sh,.highlight .sr,.highlight .sx{color:#0e9e75}.highlight .err,.highlight .fm,.highlight .gd,.highlight .gr,.highlight .nd,.highlight .ne,.highlight .nf,.highlight .nl,.highlight .si{color:#bf3d5e}.highlight .il,.highlight .m,.highlight .mb,.highlight .mf,.highlight .mh,.highlight .mi,.highlight .mo,.highlight .ni,.highlight .vc,.highlight .vg,.highlight .vi,.highlight .vm{color:#e24bbb}.highlight .gp,.highlight .o{color:#22adf6}.highlight .ss{color:#e90}.highlight .cs .gh,.highlight .gp,.highlight .gs,.highlight .gu,.highlight .k,.highlight .kc,.highlight .kd,.highlight .kn,.highlight .kp,.highlight .kr,.highlight .kt,.highlight .nc,.highlight .ne,.highlight .ni,.highlight .nn .nt,.highlight .ow,.highlight .se{font-weight:700}.highlight .c,.highlight .c1,.highlight .ch,.highlight .cm,.highlight .cpf,.highlight .cs,.highlight .ge,.highlight .sd,.highlight .w{font-style:italic}@font-face{font-family:Klavika-Light;src:url(../fonts/KlavikaLight-ItalicTF.otf);font-weight:200;font-style:italic}@font-face{font-family:Klavika-Bold;src:url(../fonts/KlavikaBoldBoldItalic.otf);font-weight:700;font-style:italic}html{overflow:auto}body,html{width:100%;height:100%;background-color:#fff;-webkit-overflow-scrolling:touch}body{color:#757888;line-height:1;overflow:auto}*{-webkit-box-sizing:border-box;box-sizing:border-box}a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0;font-size:100%;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:'';content:none}table{border-collapse:collapse;border-spacing:0}.navbar{top:0;left:0;font-size:1rem;height:4rem;width:100%;background-color:#383846;z-index:150;position:relative}.navbar--hamburger,.navbar--logo,.navbar--product-dropdown,.navbar--search,.theme-switcher{position:absolute}.navbar--logo{left:1em;top:1.05em}.navbar--logo a{font-size:1.5rem;color:#f6f6f8;-webkit-transition:color .25s ease;transition:color .25s ease}.navbar--logo a:hover{color:#fff}.navbar--logo .divider{border-left:1px solid #f6f6f8;margin:0 .8rem 0 .5rem;vertical-align:text-top;opacity:.35;line-height:1.15em}.navbar--logo .navbar--docs{font-size:1.3rem}.navbar--hamburger{width:4rem;height:4rem;right:0}.navbar--hamburger .navbar--hamburger-bar{width:1.2rem;height:2px;background-color:#f6f6f8;border-radius:1px;position:absolute;left:50%;-webkit-transition:all .3s ease;transition:all .3s ease}.navbar--hamburger .navbar--hamburger-bar.top{top:40%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.navbar--hamburger .navbar--hamburger-bar.middle{top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.navbar--hamburger .navbar--hamburger-bar.bottom{top:60%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.navbar--hamburger:hover{cursor:pointer}.navbar--hamburger:hover .navbar--hamburger-bar{background-color:#fff}.navbar--hamburger.open .navbar--hamburger-bar.top{top:50%;-webkit-transform:translate(-50%,-50%) rotate(45deg);transform:translate(-50%,-50%) rotate(45deg)}.navbar--hamburger.open .navbar--hamburger-bar.middle{opacity:0}.navbar--hamburger.open .navbar--hamburger-bar.bottom{top:50%;-webkit-transform:translate(-50%,-50%) rotate(-45deg);transform:translate(-50%,-50%) rotate(-45deg)}.navbar--product-menu{width:100%;position:absolute;top:.5em;height:auto;opacity:0;-webkit-transition:opacity .25s ease;transition:opacity .25s ease;background:#4591ed;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #4591ed),to(#22adf6));background:linear-gradient(to bottom,#4591ed 0,#22adf6 100%)}.navbar--product-container{width:100%;height:auto;position:absolute;top:calc(4rem * .85);left:0;visibility:hidden;-webkit-transition:all .25s ease;transition:all .25s ease;z-index:100}.navbar--product-container.open{visibility:visible}.navbar--product-container.open .navbar--product-menu{opacity:1}.navbar--product-divider{margin:.25em 0;height:2px;background-color:rgba(67,68,83,.1)}.navbar--product{font-size:19px}.navbar--product:active,.navbar--product:link,.navbar--product:visited{color:#fff;-webkit-transition:background-color .25s ease,color .25s ease;transition:background-color .25s ease,color .25s ease;background-color:transparent;padding:1.25rem 1rem;display:block;width:100%}.navbar--product:hover{background-color:rgba(56,56,70,.12);color:#fff}.navbar--product-dropdown{display:none;top:.5em;background-color:#4591ed;height:3rem;border-radius:3px;-webkit-transition:background-color .25s ease,color .25s ease;transition:background-color .25s ease,color .25s ease}.navbar--product-dropdown:hover{cursor:pointer;background-color:#22adf6}.navbar--product-dropdown .navbar--current-product,.navbar--product-dropdown .navbar--product-dropdown-caret{position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);color:#fff}.navbar--product-dropdown .navbar--current-product{font-weight:700;left:1rem;font-size:19px;font-weight:400}.navbar--product-dropdown .navbar--product-dropdown-caret{right:1rem;font-size:.625em}.navbar--search{height:3rem;width:40%;right:4rem;top:.5em}.navbar--search>*{position:absolute!important;top:0;left:0;width:100%;height:100%}.navbar--search-field{position:absolute;top:0;left:0;width:100%;height:100%;border-radius:3px;border:2px solid #545667;color:#f6f6f8;background-color:#292933;padding:0 1rem;font-weight:400;font-size:19px;outline:0;-webkit-transition:border-color .3s ease,color .3s ease;transition:border-color .3s ease,color .3s ease}.navbar--search-field:focus{border-color:#00c9ff;color:#00c9ff}.algolia-autocomplete{width:100%}.algolia-autocomplete .aa-hint,.algolia-autocomplete .aa-input{width:100%}.algolia-autocomplete .aa-hint{color:red}.algolia-autocomplete .aa-dropdown-menu{margin:.5rem 0 0 0;width:100%;padding:.75rem;background-color:rgba(238,239,242,.7);border:0}.algolia-autocomplete .aa-dropdown-menu .algolia-docsearch-suggestion--highlight{color:#22adf6}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion{cursor:pointer;padding:0}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion{background-color:#fff;border-radius:3px;overflow:hidden}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion__secondary{border:none;margin-top:2px}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion:first-child .algolia-docsearch-suggestion__secondary{margin-top:0}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--category-header{border-radius:3px 3px 0 0;background-color:#fff;color:#8e91a1;padding:.75rem 1rem;font-weight:500}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--highlight{background-color:transparent}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--subcategory-column{border:none;background-color:#545667}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--content{background-color:#434453}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--title{margin-bottom:.25rem;display:inline-block;color:#eeeff2}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--text{color:#bec2cc}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--subcategory-column-text{font-size:.8rem;line-height:1.4em;color:#bec2cc}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor .algolia-docsearch-suggestion--content{background:#4591ed;background:-webkit-gradient(linear,left top, right top,color-stop(0, #4591ed),to(#00c9ff));background:linear-gradient(to right,#4591ed 0,#00c9ff 100%)}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor .algolia-docsearch-suggestion--text,.algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor .algolia-docsearch-suggestion--title{color:#bef0ff}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight,.algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor .algolia-docsearch-suggestion--title .algolia-docsearch-suggestion--highlight{color:#fff!important}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion em{font-weight:700;font-style:normal}.algolia-autocomplete .algolia-docsearch-footer{border:none;padding:.75rem 0 0 0}.theme-switcher{display:none;width:4rem;height:4rem;right:0;border:0;outline:0;background-color:#383846;color:#f6f6f8}.theme-switcher .icon{-webkit-transition:color .25s ease;transition:color .25s ease}.theme-switcher .sun2{font-size:1.5rem}.theme-switcher .moon{font-size:1.2rem}.theme-switcher:hover{color:#fff;cursor:pointer}@media (max-width:500px){.navbar--logo .logotype{display:none}.navbar--logo .logo{display:inline}}@media (min-width:500px){.navbar--logo .logotype{display:inline}.navbar--logo .logo{display:none}}@media (min-width:900px){.theme-switcher{display:block}.navbar--product-dropdown{display:block;left:18rem;width:17rem}.navbar--product-container{left:18rem;width:17rem;top:2.9em}.navbar--product-container.open .navbar--dropdown-dismiss{width:100vw;height:100vh;position:fixed;top:0;left:0;z-index:100}.navbar--product-container.open .navbar--dropdown-dismiss:hover{cursor:pointer}.navbar--product-menu{border-radius:0 0 3px 3px;overflow:hidden;z-index:110}.navbar--search{left:35.5rem;width:calc(100% - 18rem - .5rem - .5rem - 4rem - 17rem)}.navbar--hamburger{display:none}.navbar--product.external{font-size:.8rem}}@media (min-width:1200px){.navbar--product-dropdown{left:23rem;width:17.5rem}.navbar--product-container{left:23rem;width:17.5rem}.navbar--search{left:41rem;width:calc(100% - 23rem - .5rem - .5rem - 4rem - 17.5rem)}}@media (min-width:1900px){.navbar--product-dropdown{left:28rem;width:17.5rem}.navbar--product-container{left:28rem;width:17.5rem}.navbar--search{left:46rem;width:calc(100% - 28rem - .5rem - .5rem - 4rem - 17.5rem)}}.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu{right:0!important;left:auto!important;overflow:scroll!important;max-height:90vh!important}.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu:before{display:none}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--wrapper{padding:.2rem 0}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column{display:none}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--content{padding:.75rem;width:100%;float:none}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--content:before{display:none}.algolia-autocomplete .algolia-docsearch-footer{padding:0}@media (min-width:1330px){.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu{right:auto!important;left:0!important}}@media (max-width:768px){.algolia-docsearch-suggestion--subcategory-column{display:none!important}.algolia-docsearch-suggestion--wrapper{margin:.25em 0!important}}@media (max-width:570px){.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu{position:fixed!important;top:3.5em!important;left:0;min-width:100vw}}.sidebar--toggle{padding:1em;position:relative;z-index:100;height:3rem;width:100%;background-color:#434453;text-align:left;font-style:italic;color:#f6f6f8;font-weight:500;-webkit-transition:background-color .25s ease,color .25s ease;transition:background-color .25s ease,color .25s ease}.sidebar--toggle:hover{color:#fff;background-color:#545667;cursor:pointer}.sidebar--toggle:after,.sidebar--toggle:before{content:"";position:absolute;display:block;right:1em;top:1.45em;height:2px;width:15px;background:#999dab}.sidebar--toggle:before{-webkit-transform:rotate(90deg);transform:rotate(90deg);-webkit-transition:all .2s;transition:all .2s}.sidebar--toggle.open:before{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.sidebar{background-color:#f6f6f8;height:100%;overflow:hidden;-webkit-transition:max-height .2s ease-out;transition:max-height .2s ease-out}.sidebar::-webkit-scrollbar{background-color:#f6f6f8;width:16px}.sidebar::-webkit-scrollbar-track{background-color:#f6f6f8}.sidebar::-webkit-scrollbar-thumb{border:4px solid #f6f6f8;background-color:#d4d7dd;border-radius:8px}.sidebar.open{max-height:4000px;-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in}.sidebar--section{border-top:2px solid #eeeff2;padding:2em 0}.sidebar--section:first-child{border:none}.sidebar--section-title{color:#4591ed;padding:0 2rem 1em 2rem;font-size:1.25em}.sidebar--section-title a:active,.sidebar--section-title a:link,.sidebar--section-title a:visited{color:#4591ed;font-weight:400}.sidebar--section-title a:hover{color:#00c9ff}.sidebar--section ul{padding-left:3rem}.sidebar--section ul li{position:relative;margin-bottom:.25rem}ul.sidebar--children{margin-left:-1.85rem;height:0;overflow:hidden}ul.sidebar--children.open{height:auto;overflow:visible;border-left:2px solid #eeeff2}ul.sidebar--children li:first-child{margin-top:.25rem}.sidebar--children-toggle{position:absolute;left:-2.25rem;top:.2rem;height:.9rem;width:.9rem;background:#bec2cc;border-radius:50%;-webkit-transition:all .2s;transition:all .2s}.sidebar--children-toggle:before{content:"+";color:#fff;display:block;text-align:center}.sidebar--children-toggle.open:before{content:"–"}.sidebar--children-toggle:hover{background:#4591ed}.sidebar--children-toggle:hover:before{color:#fff}a.sidebar--page:active,a.sidebar--page:link,a.sidebar--page:visited{display:inline-block;color:#757888;font-weight:500;text-indent:-1rem;line-height:1.25}a.sidebar--page:hover{color:#00c9ff}@media (max-width:900px){.sidebar{height:auto;max-height:0}}@media (min-width:900px){.sidebar--toggle{display:none}.sidebar,.sidebar.open{position:fixed;z-index:100;width:18rem;-webkit-transform:none;transform:none;-webkit-transition:none;transition:none;top:4rem;max-height:100%;overflow:auto;padding-bottom:4rem}}@media (min-width:1200px){.sidebar,.sidebar.open{width:23rem}}@media (min-width:1900px){.sidebar,.sidebar.open{width:28rem}.sidebar--support-ad{padding:2rem 1.5rem}.sidebar--support-ad--desc{font-size:1.2em}}#sidebar--ad{margin:-.75rem 1rem;border-radius:3px}#sidebar--ad.cloud{background:linear-gradient(45deg,#9394ff,#22adf6);padding:1.5rem 1.5rem;text-align:center}#sidebar--ad.cloud .text{margin:0 0 1rem 0;color:#fff;line-height:1.3em;font-size:1.1em;font-weight:500}#sidebar--ad.cloud .cta{margin-left:0;margin-right:0;border-radius:3px;color:#fff;border:2px solid rgba(255,255,255,.4);background-color:transparent;-webkit-transition:background-color .25s ease,border-color .25s ease;transition:background-color .25s ease,border-color .25s ease;padding:.75em 1.5em;font-weight:700;display:inline-block;font-size:1.125em}#sidebar--ad.cloud .cta:hover{background-color:rgba(255,255,255,.15);border-color:rgba(255,255,255,.6)}#sidebar--ad.enterprise{background:-webkit-gradient(linear,left top, right top,from(#4ed8a0),to(#22adf6));background:linear-gradient(to right,#4ed8a0,#22adf6);padding:1.5rem 1.5rem;text-align:center}#sidebar--ad.enterprise .text{margin:0 0 1rem 0;color:#fff;line-height:1.3em;font-weight:500}#sidebar--ad.enterprise .cta{margin-left:0;margin-right:0;border-radius:3px;color:#fff;border:2px solid rgba(255,255,255,.4);background-color:transparent;-webkit-transition:background-color .25s ease,border-color .25s ease;transition:background-color .25s ease,border-color .25s ease;padding:.75em 1.5em;font-weight:700;display:inline-block;font-size:1.125em}#sidebar--ad.enterprise .cta:hover{background-color:rgba(255,255,255,.15);border-color:rgba(255,255,255,.6)}#sidebar--ad.influx-days{padding:1rem;background:url(/promos/assets/influx-days-bg.jpg);background-repeat:no-repeat;background-size:cover;color:#fff;font-weight:700}#sidebar--ad.influx-days img{margin:.4rem 0 .8rem}#sidebar--ad.influx-days .text{font-size:1.75rem;margin-bottom:.5rem}#sidebar--ad.influx-days .details{font-size:.9rem;line-height:1.1rem}#sidebar--ad.influx-days .cta{display:inline-block;margin-top:.85rem;color:#fff;background:#5cbb47;font-size:1.15rem;padding:.45rem 1.75rem;border-radius:3px}::-moz-selection{background-color:#757888;color:#fff}::selection{background-color:#757888;color:#fff}::-moz-selection{background-color:#757888;color:#fff}a{text-decoration:none;-webkit-transition:color .2s ease;transition:color .2s ease}a:hover{cursor:pointer}.article{background-color:#fff;overflow:auto;width:100%}.article::-webkit-scrollbar{background-color:#fff;width:16px}.article::-webkit-scrollbar-track{background-color:#fff}.article::-webkit-scrollbar-thumb{border:4px solid #fff;background-color:#d4d7dd;border-radius:8px}.article-section{display:block;width:100%;text-align:center;padding:2rem}.article-section.article-heading{background-color:#fafafc;background-position:center center;background-size:cover!important;background-repeat:no-repeat}.article-section.article-heading h1{margin-bottom:0}.article-section.article-footer{background:#fafafc;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #fafafc),to(#fff));background:linear-gradient(to bottom,#fafafc 0,#fff 100%)}.article-content{text-align:left;width:100%;max-width:760px;color:#757888}.article-content a:active,.article-content a:link,.article-content a:visited{font-weight:700;color:#4591ed}.article-content a:hover{color:#00c9ff;cursor:pointer}.article-content a.top{font-size:6px;padding:.25rem .25rem .35rem;border-radius:3px;-webkit-transition:all .2s;transition:all .2s}.article-content a.top:hover{color:#fff!important;background:#00c9ff}.article-content a.off-page:link:after{content:'\ea43';font-family:icomoon;font-size:.75em;font-weight:400;vertical-align:bottom;display:inline;margin-left:.5em;opacity:.25;-webkit-transition:color .2s ease;transition:color .2s ease;color:#757888}.article-content li a code,.article-content p a code{position:relative}.article-content li a code:after,.article-content p a code:after{content:"";position:absolute;top:-1px;right:-1px;width:0;height:0;border-style:solid;border-width:0 .5em .5em 0;border-color:transparent #7a65f2 transparent transparent;opacity:.5;-webkit-transition:all .2s;transition:all .2s}.article-content li a code:hover:after,.article-content p a code:hover:after{opacity:1;border-color:transparent #00c9ff transparent transparent}.article-content li a.btn,.article-content p a.btn{display:inline-block;color:#fff;font-size:.95rem;padding:.5em 1em;margin:1em 0 1.5em}.article-content li a.btn.download:before,.article-content p a.btn.download:before{content:'\e964';font-family:icomoon;font-size:1.15em;font-weight:400;vertical-align:bottom;display:inline;margin-right:.5em}.article-content>*{text-decoration:none}.article-content .note,.article-content .warn,.article-content blockquote,.article-content dt,.article-content h1,.article-content h2,.article-content h3,.article-content h4,.article-content li,.article-content ol,.article-content p,.article-content pre,.article-content ul{display:block;margin-bottom:1em;line-height:1.45em}.article-content table{margin:1em 0 1em;overflow-x:auto;background-color:#fff}.article-content h1,.article-content h2,.article-content h3,.article-content h4,.article-content h5,.article-content h6{width:100%;color:#757888}.article-content h1 a.offset-anchor,.article-content h2 a.offset-anchor,.article-content h3 a.offset-anchor,.article-content h4 a.offset-anchor,.article-content h5 a.offset-anchor,.article-content h6 a.offset-anchor{display:block;position:relative;top:-120px;visibility:hidden}.article-content h1 a:active,.article-content h1 a:hover,.article-content h1 a:link,.article-content h1 a:visited,.article-content h2 a:active,.article-content h2 a:hover,.article-content h2 a:link,.article-content h2 a:visited,.article-content h3 a:active,.article-content h3 a:hover,.article-content h3 a:link,.article-content h3 a:visited,.article-content h4 a:active,.article-content h4 a:hover,.article-content h4 a:link,.article-content h4 a:visited,.article-content h5 a:active,.article-content h5 a:hover,.article-content h5 a:link,.article-content h5 a:visited,.article-content h6 a:active,.article-content h6 a:hover,.article-content h6 a:link,.article-content h6 a:visited{text-decoration:none;font-weight:inherit;color:#757888!important}.article-content h1:first-child,.article-content h2:first-child,.article-content h3:first-child,.article-content h4:first-child,.article-content h5:first-child,.article-content h6:first-child{margin-top:0}.article-content h1{font-size:2.2em;font-family:Klavika-Light,'Helvetica Neue',Helvetica,Helvetica,Arial,Tahoma,Verdana,sans-serif;font-weight:200;line-height:1.2em}.article-content h2{font-size:1.9em;font-weight:600;margin:1.5em 0 .5em}.article-content h3{font-size:1.5em;font-weight:700;margin:1em 0 .5em}.article-content h4{font-size:1.3em;font-weight:400;font-style:italic;margin:1.25em 0 .5em}.article-content h5{line-height:1.6em}.article-content h6{font-size:.95em;font-style:italic;line-height:1.6em}.article-content.section-landing h2 a.off-page:link:hover{color:#4591ed!important}.article-content p{font-size:1em}.article-content ol,.article-content ul{font-size:1em;padding-left:1.125em}.article-content ol li,.article-content ul li{display:list-item;list-style-position:outside;padding-left:.5em;margin-bottom:.25em}.article-content ol p,.article-content ul p{margin-left:0}.article-content ul>li{list-style-type:disc!important}.article-content ol li,.article-content ul ol li{list-style-type:decimal}.article-content ol ol li{list-style-type:lower-alpha}.article-content ol ol ol li{list-style-type:decimal}.article-content ul ul ul li{list-style-type:square}.article-content li:last-child{margin-bottom:0}.article-content ol ol,.article-content ol ul,.article-content ul ol,.article-content ul ul{width:100%;margin-left:0;margin-bottom:0;margin-top:.25em}.article-content hr{width:100%;height:2px;margin-top:.25em;margin-bottom:1em;border:none;display:block;background-color:#eeeff2}.article-content img{max-width:100%;height:auto;border-radius:3px}.article-content td,.article-content th{border:1px solid #eeeff2;font-size:.875em;line-height:1.2em;padding:.75em 1.5em}.article-content tr:nth-child(even){background-color:#f6f6f8}.article-content thead tr{background-color:#fafafc!important}.article-content thead th{padding:1.25em 1.5em}.article-content .note,.article-content .warn,.article-content blockquote,.article-content dt{font-size:.9em;padding:1em 1.5em;border-radius:3px;border-style:solid;border-left-width:6px}.article-content .note h4,.article-content .note ol,.article-content .note p,.article-content .note pre,.article-content .note ul,.article-content .warn h4,.article-content .warn ol,.article-content .warn p,.article-content .warn pre,.article-content .warn ul,.article-content blockquote h4,.article-content blockquote ol,.article-content blockquote p,.article-content blockquote pre,.article-content blockquote ul,.article-content dt h4,.article-content dt ol,.article-content dt p,.article-content dt pre,.article-content dt ul{width:100%;margin-left:0}.article-content .note>:last-child,.article-content .warn>:last-child,.article-content blockquote>:last-child,.article-content dt>:last-child{margin-bottom:0}.article-content .note .tooltip,.article-content .warn .tooltip,.article-content blockquote .tooltip,.article-content dt .tooltip{color:#22adf6}.article-content .note,.article-content blockquote{font-style:italic;color:#676978;border-color:#c6ffd0;background-color:#f2fff4}.article-content .note code,.article-content blockquote code{color:#2b7098;background:#c6ffd0;border:1px solid #c6ffd0}.article-content .note pre,.article-content blockquote pre{background:#c6ffd0;border-color:#c6ffd0}.article-content .note pre code,.article-content blockquote pre code{border:none}.article-content .warn,.article-content dt{color:#676978;border-color:#ffdccf;background-color:#fff7f4}.article-content .warn code,.article-content dt code{color:#2b7098;background:#ffdccf;border:1px solid #ffdccf}.article-content .warn pre,.article-content dt pre{background:#ffdccf;border-color:#ffdccf}.article-content .warn pre code,.article-content dt pre code{border:none}.article-content code{font-family:Consolas,"Lucida Console",Monaco,monospace;-moz-tab-size:1;-o-tab-size:1;tab-size:1;direction:ltr;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none;font-size:.8em!important;font-style:normal!important;display:inline;border-radius:3px;border-width:1px;border-color:#f2f4ff;border-style:solid;padding:.1em .5em;-webkit-font-smoothing:subpixel-antialiased!important;-moz-osx-font-smoothing:auto!important;font-weight:400!important;color:#7a65f2;background-color:#f2f4ff}.article-content pre{display:block;padding:.75em 1em;overflow:auto;border-radius:3px;border-style:solid;border-width:1px 1px 1px 6px;background-color:#f2f4ff;border-color:#f2f4ff;z-index:99;line-height:1.1em!important}.article-content pre code{white-space:pre;word-spacing:normal;word-break:normal;border:none;padding:0;border-radius:0;background-color:transparent}.article-content pre::-webkit-scrollbar{background-color:#f2f4ff;width:16px}.article-content pre::-webkit-scrollbar-track{background-color:#f2f4ff}.article-content pre::-webkit-scrollbar-thumb{border:4px solid #f2f4ff;background-color:#c9d0ff;border-radius:calc(16px / 2)}.page-nav-btns{display:-webkit-box;display:-ms-flexbox;display:flex;position:relative;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin:3em 0 2em}.page-nav-btns a{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#fff!important;font-size:.95rem;padding:.75rem 1rem;margin:0 .15rem}.page-nav-btns a.prev{position:absolute;left:0}.page-nav-btns a.prev:before{content:'\e804';font-family:icomoon;font-size:.85rem;font-weight:400;vertical-align:middle;display:inline;margin-right:.85rem}.page-nav-btns a.next{position:absolute;right:0}.page-nav-btns a.next:after{content:'\e805';font-family:icomoon;font-size:.85rem;font-weight:400;vertical-align:middle;display:inline;margin-left:.85rem}.truncate{position:relative;margin-bottom:3.5rem}.truncate .truncate-bottom{position:absolute;bottom:-30px;width:100%;z-index:100%;height:auto}.truncate a.truncate-toggle{display:block;width:100px;margin:0 auto;color:#757888;background:#fff;padding:.45rem;text-align:center;font-size:.75rem;text-transform:uppercase;border-radius:3px;-webkit-transition:color .2s;transition:color .2s}.truncate a.truncate-toggle:before{content:"Show Less"}.truncate a.truncate-toggle:hover{color:#4591ed}.truncate.closed{min-height:200px;max-height:25vh;overflow:hidden}.truncate.closed .truncate-bottom{bottom:0;background-image:-webkit-gradient(linear,left top, left bottom,from(rgba(255,255,255,0)),to(#fff));background-image:linear-gradient(to bottom,rgba(255,255,255,0),#fff);height:100px}.truncate.closed a.truncate-toggle{margin-top:75px}.truncate.closed a.truncate-toggle:before{content:"Show More"}.tooltip{position:relative;display:inline-block;z-index:10;font-weight:900;color:#4ed8a0}.tooltip-container{position:absolute;top:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);overflow:visible;visibility:hidden}.tooltip-text{font-weight:600;line-height:2em;height:2em;position:absolute;border-radius:3px;padding:0 .75em;font-size:.9rem;left:50%;-webkit-transform:translate(-50%,-1.875rem);transform:translate(-50%,-1.875rem);-webkit-transition:all .2s ease;transition:all .2s ease;white-space:nowrap;opacity:0;font-style:normal!important;color:#f6f6f8;background-color:#383846}.tooltip-text:after{content:'';position:absolute;left:50%;bottom:-14px;-webkit-transform:translateX(-50%);transform:translateX(-50%);border-top:8px solid #383846;border-right:8px solid transparent;border-bottom:8px solid transparent;border-left:8px solid transparent}.tooltip:hover .tooltip-container{visibility:visible}.tooltip:hover .tooltip-text{opacity:1;-webkit-transform:translate(-50%,-2rem);transform:translate(-50%,-2rem)}.old-version{width:100%;display:inline-block;border-radius:3px;font-size:1em;line-height:1.25em;padding:1.5em 1.5em 1.5em 4em;color:#f95f53;background-color:#fff7f4;position:relative;margin-bottom:1em}.old-version:after{content:"\ea0a";font-family:icomoon;position:absolute;top:50%;left:2em;-webkit-transform:translate(-50%,-50%) scale(1.5,1.5);transform:translate(-50%,-50%) scale(1.5,1.5);font-size:1em}.section-landing h2.no-paragraph{margin:0 0 1rem;border:none}.view-in-chronograf{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;position:relative;background-color:#f2f4ff;margin-top:-1.1rem;margin-bottom:1rem;padding:.15rem;font-size:.8rem;border-radius:0 0 3px 3px;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.view-in-chronograf .chronograf-btn{display:inline-block;padding:.45rem .6rem;color:#fff!important;background:-webkit-gradient(linear,right top, left top,from(#9394ff),to(#22adf6));background:linear-gradient(to left,#9394ff,#22adf6);border-radius:calc(3px / 2);-webkit-transition:all .5s ease;transition:all .5s ease}.view-in-chronograf .chronograf-btn:after{content:'\e801';margin-left:.4rem;font-family:icomoon}.view-in-chronograf .chronograf-btn:hover{color:#fff!important;opacity:1}.view-in-chronograf .settings{opacity:.25;color:#757888!important;margin-right:.75em;-webkit-transition:opacity .2s ease;transition:opacity .2s ease}.view-in-chronograf .settings:hover{opacity:1}.modal-overlay{display:none;position:fixed;z-index:1000;left:0;top:0;width:100%;height:100%;overflow:auto;opacity:.75;background:-webkit-gradient(linear,left top, left bottom,from(#9394ff),to(#4591ed));background:linear-gradient(#9394ff,#4591ed)}.modal-content{display:none;background:#fff;padding:2rem 2rem 1.5rem;border-radius:3px;position:fixed;top:10vh;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);z-index:1001;width:90vw;max-width:38rem;-webkit-transition:top .4s ease;transition:top .4s ease}.modal-content.open{top:40vh}.modal-content input{width:100%;min-width:10rem;border-radius:3px;border:2px solid #f2f4ff;background-color:#f2f4ff;padding:.5rem;font-weight:400;font-size:1rem;outline:0;-webkit-transition:border-color .3s ease,color .3s ease;transition:border-color .3s ease,color .3s ease}.modal-content input:focus{border-color:#00c9ff}.modal-content button{border:none;outline:0}.modal-content button:focus{background:#4591ed!important}.modal-content label{display:block;margin-bottom:.4rem;font-weight:600}#default-chronograf-url{display:inline-block;margin:.5rem 0 0 .25rem;font-size:.8rem;font-style:italic;font-weight:400}#default-chronograf-url:hover{text-transform:underline}.flex-form{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.flex-form .save-btn{width:5.5rem;margin:0 0 0 .25rem;text-align:center;padding:.75rem 1rem;color:#fff;border-radius:3px;font-weight:600;-webkit-transition:background .2s;transition:background .2s}@media (max-width:500px){.flex-form{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column;flex-flow:column}.flex-form .save-btn{width:100%;margin:.25rem 0 0}#default-chronograf-url{display:block;margin:1rem auto 0}}#save-chronograf-url button{background:#9394ff}#save-chronograf-url button:hover{background:#4591ed}@media (min-width:900px){.article{padding-left:18rem}.article-section{padding:3rem}.article-content code,.article-content pre,.article-content td,.article-content th{border-width:2px}.article-content pre{border-left-width:6px}}@media (min-width:1200px){.article{padding-left:23rem}.article-section{padding:4.5rem}.old-version{width:60%}}@media (min-width:1900px){.article{padding-left:28rem}.article-section{padding:5rem 11rem}.article-content{font-size:1.125rem}}.homepage{overflow:auto;min-height:calc(100vh - 4rem);width:100%;z-index:2;background:#2c2c38;background:-webkit-gradient(linear,left top, right top,color-stop(0, #2c2c38),to(#0f0e15));background:linear-gradient(to right,#2c2c38 0,#0f0e15 100%);font-size:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.homepage .cards-enterprise,.homepage .cards-oss,.homepage .cards-special{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;width:100%;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-flex:1;-ms-flex:1;flex:1}.homepage--card{width:100%;display:inline-block;overflow:hidden;position:relative}.homepage--card-mask{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.1;-webkit-transition:opacity .75s ease,-webkit-transform .75s ease;transition:opacity .75s ease,-webkit-transform .75s ease;transition:opacity .75s ease,transform .75s ease;transition:opacity .75s ease,transform .75s ease,-webkit-transform .75s ease;z-index:1;background-attachment:scroll;background-size:cover;background-position:center center;background-repeat:no-repeat;-webkit-transform:scale(1,1);transform:scale(1,1)}.homepage--card:hover .homepage--card-mask{opacity:1;-webkit-transform:scale(1.2,1.2);transform:scale(1.2,1.2)}.homepage--card:hover .homepage--card-title{color:#fff!important}.homepage--card-container{position:relative;z-index:2;width:100%;display:inline-block;text-align:center;padding:4rem 3rem;font-size:0}.homepage--card-container a:active,.homepage--card-container a:link,.homepage--card-container a:visited{color:#4591ed;-webkit-transition:color .25s ease;transition:color .25s ease;text-decoration:none}.homepage--card-container a:hover{color:#00c9ff}.homepage--card-description,.homepage--card-title{text-align:left;display:inline-block;width:100%;vertical-align:middle}.homepage--card-title{font-size:2rem;font-family:Klavika-Light,sans-serif;font-weight:200;font-style:italic;color:#4591ed;margin-bottom:.5em;-webkit-transition:color .75s ease;transition:color .75s ease}.homepage--card-description{font-size:1rem;color:#757888;line-height:1.4em;font-weight:400}.homepage--card-link{display:inline-block;font-size:.875rem;font-weight:600;margin-left:.25rem;padding:2px 11px;border-radius:3px}.homepage--card-link:first-of-type{margin-top:1rem}.homepage--card.card-telegraf .homepage--card-mask{background-image:url(/img/home-telegraf.svg);background-color:#f95f53}.homepage--card.card-telegraf .homepage--card-description{color:#fff}.homepage--card.card-telegraf .homepage--card-title{color:#ff8564}.homepage--card.card-telegraf a.homepage--card-link:active,.homepage--card.card-telegraf a.homepage--card-link:link,.homepage--card.card-telegraf a.homepage--card-link:visited{color:#fff;-webkit-transition:background-color .25s ease,color .25s ease;transition:background-color .25s ease,color .25s ease}.homepage--card.card-telegraf a.homepage--card-link:hover{color:#ff8564;background-color:#fff}.homepage--card.card-influxdb .homepage--card-mask{background-image:url(/img/home-influxdb.svg);background-color:#4591ed}.homepage--card.card-influxdb .homepage--card-description{color:#fff}.homepage--card.card-influxdb .homepage--card-title{color:#00c9ff}.homepage--card.card-influxdb a.homepage--card-link:active,.homepage--card.card-influxdb a.homepage--card-link:link,.homepage--card.card-influxdb a.homepage--card-link:visited{color:#fff;-webkit-transition:background-color .25s ease,color .25s ease;transition:background-color .25s ease,color .25s ease}.homepage--card.card-influxdb a.homepage--card-link:hover{color:#22adf6;background-color:#fff}.homepage--card.card-chronograf .homepage--card-mask{background-image:url(/img/home-chronograf.svg);background-color:#7a65f2}.homepage--card.card-chronograf .homepage--card-description{color:#fff}.homepage--card.card-chronograf .homepage--card-title{color:#9394ff}.homepage--card.card-chronograf a.homepage--card-link:active,.homepage--card.card-chronograf a.homepage--card-link:link,.homepage--card.card-chronograf a.homepage--card-link:visited{color:#fff;-webkit-transition:background-color .25s ease,color .25s ease;transition:background-color .25s ease,color .25s ease}.homepage--card.card-chronograf a.homepage--card-link:hover{color:#9394ff;background-color:#fff}.homepage--card.card-kapacitor .homepage--card-mask{background-image:url(/img/home-kapacitor.svg);background-color:#4ed8a0}.homepage--card.card-kapacitor .homepage--card-description{color:#fff}.homepage--card.card-kapacitor .homepage--card-title{color:#4ed8a0}.homepage--card.card-kapacitor a.homepage--card-link:active,.homepage--card.card-kapacitor a.homepage--card-link:link,.homepage--card.card-kapacitor a.homepage--card-link:visited{color:#fff;-webkit-transition:background-color .25s ease,color .25s ease;transition:background-color .25s ease,color .25s ease}.homepage--card.card-kapacitor a.homepage--card-link:hover{color:#4ed8a0;background-color:#fff}.homepage--card.card-enterprise_kapacitor .homepage--card-mask{background-image:url(/img/home-kapacitor.svg);background-color:#4ed8a0}.homepage--card.card-enterprise_kapacitor .homepage--card-description{color:#fff}.homepage--card.card-enterprise_kapacitor .homepage--card-title{color:#4ed8a0}.homepage--card.card-enterprise_kapacitor a.homepage--card-link:active,.homepage--card.card-enterprise_kapacitor a.homepage--card-link:link,.homepage--card.card-enterprise_kapacitor a.homepage--card-link:visited{color:#fff;-webkit-transition:background-color .25s ease,color .25s ease;transition:background-color .25s ease,color .25s ease}.homepage--card.card-enterprise_kapacitor a.homepage--card-link:hover{color:#4ed8a0;background-color:#fff}.homepage--card.card-enterprise_influxdb .homepage--card-mask{background-image:url(/img/home-influxdb.svg);background-color:#4591ed}.homepage--card.card-enterprise_influxdb .homepage--card-description{color:#fff}.homepage--card.card-enterprise_influxdb .homepage--card-title{color:#00c9ff}.homepage--card.card-enterprise_influxdb a.homepage--card-link:active,.homepage--card.card-enterprise_influxdb a.homepage--card-link:link,.homepage--card.card-enterprise_influxdb a.homepage--card-link:visited{color:#fff;-webkit-transition:background-color .25s ease,color .25s ease;transition:background-color .25s ease,color .25s ease}.homepage--card.card-enterprise_influxdb a.homepage--card-link:hover{color:#22adf6;background-color:#fff}.homepage--card.card-flux .homepage--card-mask{background-image:url(/img/home-flux.svg);background-color:#15a194;opacity:1}.homepage--card.card-flux .homepage--card-description{color:#fff}.homepage--card.card-flux .homepage--card-title{color:#fff}.homepage--card.card-flux a.homepage--card-link:active,.homepage--card.card-flux a.homepage--card-link:link,.homepage--card.card-flux a.homepage--card-link:visited{color:#fff;-webkit-transition:background-color .25s ease,color .25s ease;transition:background-color .25s ease,color .25s ease}.homepage--card.card-flux a.homepage--card-link:active.download,.homepage--card.card-flux a.homepage--card-link:link.download,.homepage--card.card-flux a.homepage--card-link:visited.download{display:none}.homepage--card.card-flux a.homepage--card-link:hover{color:#32b08c;background-color:#fff}.homepage--card.card-platform{width:100%;background:-webkit-gradient(linear,left top, right top,from(#4591ed),to(#22adf6));background:linear-gradient(to right,#4591ed,#22adf6);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.homepage--card.card-platform .homepage--card-container{padding-bottom:3rem}.homepage--card.card-platform .homepage--card-mask{background-image:url(/img/home-influxdb.svg);background-color:#4591ed;opacity:.9}.homepage--card.card-platform .homepage--card-description{color:#fff;text-align:center}.homepage--card.card-platform .homepage--card-title{color:#fff;text-align:center;font-size:2.15rem}.homepage--card.card-platform a.homepage--card-link:active,.homepage--card.card-platform a.homepage--card-link:link,.homepage--card.card-platform a.homepage--card-link:visited{color:#fff;-webkit-transition:background-color .25s ease,color .25s ease;transition:background-color .25s ease,color .25s ease}.homepage--card.card-platform a.homepage--card-link:hover{color:#22adf6;background-color:#fff}.homepage--card.card-platform a.btn{margin:1.75rem 0 1rem;padding:1em 1.5em;display:inline-block;background:#fff;color:#22adf6;border-radius:3px;font-size:1rem;font-weight:700;-webkit-transition:all .2s;transition:all .2s;-webkit-box-shadow:0 0 15px rgba(255,255,255,0);box-shadow:0 0 15px rgba(255,255,255,0)}.homepage--card.card-platform a.btn:hover{-webkit-box-shadow:0 0 15px #fff;box-shadow:0 0 15px #fff}@media (min-width:900px){.homepage--card{width:50%;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}}@media (min-width:1200px){.homepage--card-container{padding:3.5rem}.homepage--card-description{font-size:1.075rem}.homepage--card{width:25%;height:auto}.homepage--card.card-platform{width:75%}.homepage--card.card-enterprise_influxdb,.homepage--card.card-enterprise_kapacitor{width:50%}}@media (min-width:1900px){.homepage--card-container{padding:4rem}.homepage--card-description{font-size:1.125rem}}.error-page{overflow:scroll;top:4rem;height:100%;width:100%;background:#383846;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #383846),to(#1f2039));background:linear-gradient(to bottom,#383846 0,#1f2039 100%)}.error-content{margin:15vh auto;width:85%;max-width:400px;min-width:240px;font-size:15px;line-height:19px;color:#c6cad3}.error-content h1{color:#4591ed;display:block;margin:0 auto 50px;padding-top:15px;width:212px;height:212px;border-radius:50%;text-align:center;font-size:90px;font-weight:200;line-height:180px;position:relative;border:2px solid #4591ed}.flex{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-pack:distribute;justify-content:space-around}.wayfinding{margin-bottom:2rem}.btn{display:block;padding:.5rem;background:#4591ed;color:#fff;border-radius:3px;text-align:center;-webkit-transition:background .2s;transition:background .2s}.btn.back{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;margin-right:.35rem}.btn.back:before{content:"\ea41";font-family:icomoon;margin-right:.5rem;font-size:1rem}.btn.project{-webkit-box-flex:3;-ms-flex-positive:3;flex-grow:3;display:none}.btn.project:before{content:"\e801";font-family:icomoon;margin-right:.5rem;-webkit-box-flex:3;-ms-flex-positive:3;flex-grow:3}.btn:hover{background:#22adf6}@media (min-width:900px){.error-content{font-size:17px;line-height:22px}}@media (min-width:1900px){.error-content{font-size:21px;line-height:32px}}.tabs-container{margin:2em 0 2em}.tabs{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;border-radius:3px 0 0 3px}.tabs p{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.tabs a{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;margin:2px;font-size:.875em;color:#8e91a1!important;padding:.5em 1em;display:inline-block;text-align:center;border-radius:3px;background-color:rgba(231,232,235,.5);-webkit-transition:background-color .2s,color .2s;transition:background-color .2s,color .2s}.tabs a:hover{color:#676978!important}.tabs a.is-active{color:#fff!important;background:#4591ed}.tab-content{width:100%}.tab-content>*{width:100%!important;margin-left:0!important}.tab-content:not(:first-child){display:none}.tab-content-container{position:relative;border-radius:0 3px 3px 3px}.code-tabs-content{margin:.75rem 0 3rem;width:100%}.code-tabs-content>*{width:100%!important;margin-left:0!important}.code-tabs-wrapper{margin:1.5rem 0 .5rem}.code-tabs-wrapper .code-tabs p{margin:0;text-align:right;display:block;font-size:.9rem}.code-tabs-wrapper .code-tabs a{padding:.25rem .75rem;margin:0;border-radius:3px 3px 0 0;display:inline-block;background:rgba(242,244,255,.6);color:rgba(142,145,161,.5)!important}.code-tabs-wrapper .code-tabs a:hover{color:#676978!important}.code-tabs-wrapper .code-tabs a.is-active{background-color:#f2f4ff;color:#676978!important}.code-tabs-wrapper .code-tab-content{padding:0}.code-tabs-wrapper .code-tab-content pre{margin:0 0 3rem;border-radius:3px 0 3px 3px}.code-tabs-wrapper .code-tab-content:not(:first-of-type){display:none}@media (min-width:900px){.tabs-container .tabs a{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0}}.plugin-card{position:relative;padding:1rem 1.5rem;margin-bottom:.5rem;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#f6f6f8;border-radius:3px}.plugin-card h3{padding:0;margin-top:.25rem}.plugin-card.new h3:after{content:"New";margin-left:.3rem;padding:.25rem .5rem;font-style:italic;color:#4591ed;font-size:1.2rem}.plugin-card p.meta{margin:.75rem 0;font-weight:500;color:#757888;line-height:1.75rem}.plugin-card p.meta .deprecated{margin-left:.5rem;font-style:italic;color:#e90}.plugin-card .info>p:last-child{margin-bottom:.5rem}.plugin-card .info>ul:last-child{margin-bottom:.5rem}.plugin-card .info>ol:last-child{margin-bottom:.5rem}.plugin-card .github-link{position:absolute;color:#fff!important;top:.5rem;right:.5rem;opacity:0;-webkit-transition:opacity .2s,background .2s,color 2s;transition:opacity .2s,background .2s,color 2s}.plugin-card .github-link .icon-github{font-size:1.2rem;margin:0 .25rem 0 0}.plugin-card:hover .github-link{opacity:1}.plugin-card blockquote{border-color:#c6ffd0;background:rgba(242,255,244,.5)}.plugin-card blockquote h3,.plugin-card blockquote h4,.plugin-card blockquote h5,.plugin-card blockquote h6{color:#757888}.plugin-card blockquote li,.plugin-card blockquote p{color:#676978;font-size:1rem;font-style:normal}.plugin-card blockquote strong{color:inherit}.plugin-card blockquote a{color:#ff8564}.plugin-card blockquote a code:after{border-color:transparent rgba(43,112,152,.35) transparent transparent}.plugin-card blockquote a:hover{color:#ffb6a0}.plugin-card blockquote a:hover code:after{border-color:transparent #ffb6a0 transparent transparent}.plugin-card blockquote ol li:before{color:#676978}.plugin-card blockquote code,.plugin-card blockquote pre{color:#2b7098;background:#c6ffd0}#plugin-filters{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}#plugin-filters .filter-category{-webkit-box-flex:1;-ms-flex:1 1 200px;flex:1 1 200px;margin:0 1.25rem 1.25rem 0;max-width:33%}#plugin-filters .filter-category.two-columns{-webkit-box-flex:1;-ms-flex:1 2 400px;flex:1 2 400px;max-width:66%}#plugin-filters .filter-category.two-columns .filter-list{-webkit-columns:2;-moz-columns:2;columns:2}#plugin-filters h5{border-bottom:1px solid rgba(117,120,136,.25);padding-bottom:.65rem}#plugin-filters .filter-list{padding:0;margin:.5rem 0 0;list-style:none}#plugin-filters .filter-list li{padding:0;margin:0;line-height:1.35rem;list-style-type:none!important}#plugin-filters label{display:block;padding:.25rem 0;color:#757888;position:relative}#plugin-filters label:after{content:attr(data-count);margin-left:.25rem;font-size:.85rem;opacity:.5}#plugin-filters .checkbox{display:inline-block;height:1.15em;width:1.15em;background:rgba(117,120,136,.05);margin-right:.3rem;vertical-align:text-top;border-radius:3px;cursor:pointer;border:1.5px solid rgba(117,120,136,.2);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#plugin-filters input[type=checkbox]{margin-right:-1.1rem;padding:0;vertical-align:top;opacity:0;cursor:pointer}#plugin-filters input[type=checkbox]+.checkbox:after{content:"";display:block;position:absolute;height:.5rem;width:.5rem;border-radius:50%;background:#ff8564;top:.65rem;left:.35rem;opacity:0;-webkit-transform:scale(2);transform:scale(2);-webkit-transition:all .2s;transition:all .2s}#plugin-filters input[type=checkbox]:checked+.checkbox:after{opacity:1;-webkit-transform:scale(1);transform:scale(1)}@media (max-width:1100px){#plugin-filters .filter-category{max-width:50%}#plugin-filters .filter-category.three-columns,#plugin-filters .filter-category.two-columns{max-width:100%}}@media (max-width:800px){#plugin-filters .filter-category{max-width:100%}.plugin-card .github-link{opacity:1;padding:.25rem .35rem .35rem;line-height:0;font-size:1.35rem}.plugin-card .github-link .icon-github{margin:0}.plugin-card .github-link .hide{display:none}}@media (min-width:900px){body{padding-bottom:0}}.article-content .flex-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.article-content .flex-container{margin-right:2rem}.article-content .flex-container.half{width:calc(50% - 2rem)}.article-content .flex-container.third{width:calc(33.33% - 2rem)}.article-content .flex-container.quarter{width:calc(25% - 2rem)}.article-content .flex-container.quarter{width:calc(50% - 2rem)}svg[id^=geo-s2-cells-] .geo-cell{fill:rgba(34,173,246,.25);stroke:#22adf6;stroke-width:3;stroke-linejoin:round;stroke-miterlimit:10}svg[id^=geo-s2-cells-] .geo-region{fill:rgba(122,101,242,.35);stroke:#7a65f2;stroke-width:3;stroke-linejoin:round;stroke-miterlimit:10}svg[id^=geo-s2-cells-] .geo-point{fill:#ff8564}span.key-geo-cell{display:inline-block;vertical-align:middle;margin:0 .5rem .25rem 0;width:1.1em;height:1.1em;border:2px solid #22adf6;background:rgba(34,173,246,.25);border-radius:2px}span.key-geo-region{display:inline-block;vertical-align:middle;margin:0 .5rem .25rem 0;width:1.1em;height:1.1em;border:2px solid #7a65f2;background:rgba(122,101,242,.35);border-radius:2px}span.key-geo-point{display:inline-block;margin:0 .7rem 0 .25rem;width:.65rem;height:.65rem;border-radius:50%;background:#ff8564}body.docs-theme--telegraf .article-content a:active,body.docs-theme--telegraf .article-content a:link,body.docs-theme--telegraf .article-content a:visited{color:#ff8564}body.docs-theme--telegraf .article-content a:hover{color:#ffb6a0}body.docs-theme--telegraf .article-content a.top:hover{background:#ffb6a0}body.docs-theme--telegraf .article-content a.btn{background:#ff8564}body.docs-theme--telegraf .article-content a.btn:hover{background:#ffb6a0}body.docs-theme--telegraf .article-content.section-landing h2 a.off-page:link:hover{color:#ff8564!important}body.docs-theme--telegraf .sidebar--mask-container .sidebar--mask{background:#ff8564;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #ff8564),to(#7a65f2));background:linear-gradient(to bottom,#ff8564 0,#7a65f2 100%)}body.docs-theme--telegraf .sidebar--section-title a:active,body.docs-theme--telegraf .sidebar--section-title a:link,body.docs-theme--telegraf .sidebar--section-title a:visited{color:#ff8564;font-weight:400}body.docs-theme--telegraf .sidebar--section-title a:hover{color:#ffb6a0}body.docs-theme--telegraf a.sidebar--page:hover{color:#ffb6a0}body.docs-theme--telegraf .navbar--product-dropdown{background-color:#ff8564}body.docs-theme--telegraf .navbar--product-dropdown:hover{background-color:#ffb6a0}body.docs-theme--telegraf .navbar--product-menu{background:#ff8564;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #ff8564),to(#7a65f2));background:linear-gradient(to bottom,#ff8564 0,#7a65f2 100%)}body.docs-theme--telegraf .tabs a.is-active{background:#ff8564}body.docs-theme--chronograf .article-content a:active,body.docs-theme--chronograf .article-content a:link,body.docs-theme--chronograf .article-content a:visited{color:#9394ff}body.docs-theme--chronograf .article-content a:hover{color:#b1b6ff}body.docs-theme--chronograf .article-content a.top:hover{background:#b1b6ff}body.docs-theme--chronograf .article-content a.btn{background:#9394ff}body.docs-theme--chronograf .article-content a.btn:hover{background:#b1b6ff}body.docs-theme--chronograf .article-content.section-landing h2 a.off-page:link:hover{color:#9394ff!important}body.docs-theme--chronograf .sidebar--mask-container .sidebar--mask{background:#9394ff;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #9394ff),to(#4591ed));background:linear-gradient(to bottom,#9394ff 0,#4591ed 100%)}body.docs-theme--chronograf .sidebar--section-title a:active,body.docs-theme--chronograf .sidebar--section-title a:link,body.docs-theme--chronograf .sidebar--section-title a:visited{color:#9394ff;font-weight:400}body.docs-theme--chronograf .sidebar--section-title a:hover{color:#b1b6ff}body.docs-theme--chronograf a.sidebar--page:hover{color:#b1b6ff}body.docs-theme--chronograf .navbar--product-dropdown{background-color:#9394ff}body.docs-theme--chronograf .navbar--product-dropdown:hover{background-color:#b1b6ff}body.docs-theme--chronograf .navbar--product-menu{background:#9394ff;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #9394ff),to(#4591ed));background:linear-gradient(to bottom,#9394ff 0,#4591ed 100%)}body.docs-theme--chronograf .tabs a.is-active{background:#9394ff}body.docs-theme--kapacitor .article-content a:active,body.docs-theme--kapacitor .article-content a:link,body.docs-theme--kapacitor .article-content a:visited{color:#20b76f}body.docs-theme--kapacitor .article-content a:hover{color:#108174}body.docs-theme--kapacitor .article-content a.top:hover{background:#108174}body.docs-theme--kapacitor .article-content a.btn{background:#20b76f}body.docs-theme--kapacitor .article-content a.btn:hover{background:#4ed8a0}body.docs-theme--kapacitor .article-content.section-landing h2 a.off-page:link:hover{color:#20b76f!important}body.docs-theme--kapacitor .sidebar--mask-container .sidebar--mask{background:#4ed8a0;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #4ed8a0),to(#22adf6));background:linear-gradient(to bottom,#4ed8a0 0,#22adf6 100%)}body.docs-theme--kapacitor .sidebar--section-title a:active,body.docs-theme--kapacitor .sidebar--section-title a:link,body.docs-theme--kapacitor .sidebar--section-title a:visited{color:#20b76f;font-weight:400}body.docs-theme--kapacitor .sidebar--section-title a:hover{color:#108174}body.docs-theme--kapacitor a.sidebar--page:hover{color:#108174}body.docs-theme--kapacitor .navbar--product-dropdown{background-color:#4ed8a0}body.docs-theme--kapacitor .navbar--product-dropdown:hover{background-color:#7ce490}body.docs-theme--kapacitor .navbar--product-menu{background:#4ed8a0;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #4ed8a0),to(#22adf6));background:linear-gradient(to bottom,#4ed8a0 0,#22adf6 100%)}body.docs-theme--kapacitor .tabs a.is-active{background:#20b76f}body.docs-theme--enterprise_kapacitor .article-content a:active,body.docs-theme--enterprise_kapacitor .article-content a:link,body.docs-theme--enterprise_kapacitor .article-content a:visited{color:#20b76f}body.docs-theme--enterprise_kapacitor .article-content a:hover{color:#108174}body.docs-theme--enterprise_kapacitor .article-content a.top:hover{background:#108174}body.docs-theme--enterprise_kapacitor .article-content a.btn{background:#20b76f}body.docs-theme--enterprise_kapacitor .article-content a.btn:hover{background:#4ed8a0}body.docs-theme--enterprise_kapacitor .article-content.section-landing h2 a.off-page:link:hover{color:#20b76f!important}body.docs-theme--enterprise_kapacitor .sidebar--mask-container .sidebar--mask{background:#4ed8a0;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #4ed8a0),to(#22adf6));background:linear-gradient(to bottom,#4ed8a0 0,#22adf6 100%)}body.docs-theme--enterprise_kapacitor .sidebar--section-title a:active,body.docs-theme--enterprise_kapacitor .sidebar--section-title a:link,body.docs-theme--enterprise_kapacitor .sidebar--section-title a:visited{color:#20b76f;font-weight:400}body.docs-theme--enterprise_kapacitor .sidebar--section-title a:hover{color:#108174}body.docs-theme--enterprise_kapacitor a.sidebar--page:hover{color:#108174}body.docs-theme--enterprise_kapacitor .navbar--product-dropdown{background-color:#4ed8a0}body.docs-theme--enterprise_kapacitor .navbar--product-dropdown:hover{background-color:#7ce490}body.docs-theme--enterprise_kapacitor .navbar--product-menu{background:#4ed8a0;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #4ed8a0),to(#22adf6));background:linear-gradient(to bottom,#4ed8a0 0,#22adf6 100%)}body.docs-theme--enterprise_kapacitor .tabs a.is-active{background:#20b76f}body.docs-theme--flux .article-content a:active,body.docs-theme--flux .article-content a:link,body.docs-theme--flux .article-content a:visited{color:#20b76f}body.docs-theme--flux .article-content a:hover{color:#108174}body.docs-theme--flux .article-content a.top:hover{background:#108174}body.docs-theme--flux .article-content.section-landing h2 a.off-page:link:hover{color:#20b76f!important}body.docs-theme--flux .sidebar--mask-container .sidebar--mask{background:#4ed8a0;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #4ed8a0),to(#22adf6));background:linear-gradient(to bottom,#4ed8a0 0,#22adf6 100%)}body.docs-theme--flux .sidebar--section-title a:active,body.docs-theme--flux .sidebar--section-title a:link,body.docs-theme--flux .sidebar--section-title a:visited{color:#20b76f;font-weight:400}body.docs-theme--flux .sidebar--section-title a:hover{color:#108174}body.docs-theme--flux a.sidebar--page:hover{color:#108174}body.docs-theme--flux .navbar--product-dropdown{background-color:#4ed8a0}body.docs-theme--flux .navbar--product-dropdown:hover{background-color:#7ce490}body.docs-theme--flux .navbar--product-menu{background:#4ed8a0;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #4ed8a0),to(#22adf6));background:linear-gradient(to bottom,#4ed8a0 0,#22adf6 100%)}body.docs-theme--flux .tabs a.is-active{background:#20b76f} /*# sourceMappingURL=docs-light.css.map */ diff --git a/static/css/docs-light.css.map b/static/css/docs-light.css.map index 5354fe8f3f..6fca5c31c1 100644 --- a/static/css/docs-light.css.map +++ b/static/css/docs-light.css.map @@ -1 +1 @@ -{"version":3,"sources":["variables.less","icon-font.less","docs-light.less","docs-light.css","normalize-3.0.2.less","syntax.less","layout.less","layout-navbar.less","layout-search-overrides.less","layout-sidebar.less","layout-sidebar-ads.less","layout-article.less","layout-home.less","layout-error-pages.less","tabs.less","telegraf-plugins.less","theme-telegraf.less","theme-chronograf.less","theme-kapacitor.less","theme-enterprise_kapacitor.less","theme-flux.less"],"names":[],"mappings":"AAsBA,cACC,+FACA,eAAA,CCxBD,WACC,oBACA,qCACA,sRAKA,gBACA,iBAAA,CAGD,MACC,oBACA,WACA,kBACA,gBACA,oBACA,oBACA,cAGA,mCACA,iCAAA,CAGD,kBACI,eAAS,CAEb,kBACI,eAAS,CAEb,sBACI,eAAS,CAEb,kBACI,eAAS,CAEb,wBACI,eAAS,CAEb,sBACI,eAAS,CAEb,wBACI,eAAS,CAEb,yBACI,eAAS,CAEb,oBACI,eAAS,CAEb,uBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,kBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,uBACI,eAAS,CAEb,uBACI,eAAS,CAEb,yBACI,eAAS,CAEb,iBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,uBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,mBACI,eAAS,CAEb,iBACI,eAAS,CAEb,kBACI,eAAS,CAEb,wBACI,eAAS,CAEb,qBACI,eAAS,CAEb,0BACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,oBACI,eAAS,CAEb,wBACI,eAAS,CAEb,mBACI,eAAS,CAEb,kBACI,eAAS,CAEb,kBACI,eAAS,CAEb,0BACI,eAAS,CAEb,kBACI,eAAS,CAEb,oBACI,eAAS,CAEb,oBACI,eAAS,CAEb,mBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,wBACI,eAAS,CAEb,qBACI,eAAS,CAEb,kBACI,eAAS,CAEb,iBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,qBACI,eAAS,CAEb,uBACI,eAAS,CAEb,qBACI,eAAS,CAEb,wBACI,eAAS,CAEb,yBACI,eAAS,CAEb,wBACI,eAAS,CAEb,0BACI,eAAS,CAEb,wBACI,eAAS,CAEb,uBACI,eAAS,CAEb,wBACI,eAAS,CAEb,sBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,yBACI,eAAS,CAEb,yBACI,eAAS,CAEb,0BACI,eAAS,CAEb,6BACI,eAAS,CAEb,2BACI,eAAS,CAEb,uBACI,eAAS,CAEb,wBACI,eAAS,CAEb,qBACI,eAAS,CAEb,oBACI,eAAS,CAEb,oBACI,eAAS,CAEb,kBACI,eAAS,CAEb,yBACI,eAAS,CAEb,uBACI,eAAS,CAEb,wBACI,eAAS,CAEb,sBACI,eAAS,CAEb,yBACI,eAAS,CAEb,wBACI,eAAS,CAEb,sBACI,eAAS,CAEb,mBACI,eAAS,CAEb,2BACI,eAAS,CAEb,0BACI,eAAS,CAEb,qBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,uBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,iBACI,eAAS,CAEb,kBACI,eAAS,CAEb,qBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,mBACI,eAAS,CAEb,kBACI,eAAS,CAEb,uBACI,eAAS,CAEb,sBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,qBACI,eAAS,CAEb,oBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,oBACI,eAAS,CAEb,gBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,qBACI,eAAS,CAEb,wBACI,eAAS,CAEb,sBACI,eAAS,CAEb,oBACI,eAAS,CAEb,yBACI,eAAS,CAEb,mBACI,eAAS,CAEb,sBACI,eAAS,CAEb,kBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,qBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,uBACI,eAAS,CAEb,wBACI,eAAS,CAEb,wBACI,eAAS,CAEb,sBACI,eAAS,CAEb,yBACI,eAAS,CAEb,0BACI,eAAS,CAEb,wBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,uBACI,eAAS,CAEb,uBACI,eAAS,CAEb,wBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,qBACI,eAAS,CAEb,oBACI,eAAS,CAEb,sBACI,eAAS,CAEb,qBACI,eAAS,CAEb,iBACI,eAAS,CAEb,kBACI,eAAS,CAEb,kBACI,eAAS,CAEb,sBACI,eAAS,CAEb,oBACI,eAAS,CAEb,uBACI,eAAS,CAEb,wBACI,eAAS,CAEb,iBACI,eAAS,CAEb,kBACI,eAAS,CAEb,oBACI,eAAS,CAEb,wBACI,eAAS,CAEb,qBACI,eAAS,CAEb,iBACI,eAAS,CAEb,uBACI,eAAS,CAEb,wBACI,eAAS,CAEb,wBACI,eAAS,CAEb,yBACI,eAAS,CAEb,oBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,iBACI,eAAS,CAEb,yBACI,eAAS,CAEb,kBACI,eAAS,CAEb,oBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,kBACI,eAAS,CAEb,iBACI,eAAS,CAEb,oBACI,eAAS,CAEb,iBACI,eAAS,CAEb,kBACI,eAAS,CAEb,uBACI,eAAS,CAEb,sBACI,eAAS,CAEb,mBACI,eAAS,CAEb,kBACI,eAAS,CAEb,2BACI,eAAS,CAEb,oBACI,eAAS,CAEb,oBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,wBACI,eAAS,CAEb,uBACI,eAAS,CAEb,2BACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,kBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,4BACI,eAAS,CAEb,0BACI,eAAS,CAEb,yBACI,eAAS,CAEb,uBACI,eAAS,CAEb,qBACI,eAAS,CAEb,uBACI,eAAS,CAEb,qBACI,eAAS,CAEb,oBACI,eAAS,CAEb,mBACI,eAAS,CAEb,kBACI,eAAS,CAEb,kBACI,eAAS,CAEb,wBACI,eAAS,CAEb,iBACI,eAAS,CAEb,sBACI,eAAS,CAEb,uBACI,eAAS,CAEb,yBACI,eAAS,CAEb,sBACI,eAAS,CAEb,uBACI,eAAS,CAEb,iBACI,eAAS,CAEb,sBACI,eAAS,CAEb,iCACI,eAAS,CAEb,wBACI,eAAS,CAEb,uBACI,eAAS,CAEb,uBACI,eAAS,CAEb,mBACI,eAAS,CAEb,0BACI,eAAS,CAEb,iBACI,eAAS,CAEb,mBACI,eAAS,CAEb,uBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,iBACI,eAAS,CAEb,kBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,uBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,uBACI,eAAS,CAEb,wBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,wBACI,eAAS,CAEb,yBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,yBACI,eAAS,CAEb,wBACI,eAAS,CAEb,wBACI,eAAS,CAEb,qBACI,eAAS,CAEb,0BACI,eAAS,CAEb,sBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,kBACI,eAAS,CAEb,2BACI,eAAS,CAEb,qBACI,eAAS,CAEb,mBACI,eAAS,CAEb,uBACI,eAAS,CAEb,wBACI,eAAS,CAEb,yBACI,eAAS,CAEb,mBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,kBACI,eAAS,CAEb,sBACI,eAAS,CAEb,kBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,mBACI,eAAS,CAEb,uBACI,eAAS,CAEb,sBACI,eAAS,CAEb,mBACI,eAAS,CAEb,kBACI,eAAS,CAEb,uBACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,yBACI,eAAS,CAEb,2BACI,eAAS,CAEb,wBACI,eAAS,CAEb,yBACI,eAAS,CAEb,0BACI,eAAS,CAEb,6BACI,eAAS,CAEb,6BACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,uBACI,eAAS,CAEb,qBACI,eAAS,CAEb,2BACI,eAAS,CAEb,uBACI,eAAS,CAEb,4BACI,eAAS,CAEb,0BACI,eAAS,CAEb,8BACI,eAAS,CAEb,yBACI,eAAS,CAEb,6BACI,eAAS,CAEb,yBACI,eAAS,CAEb,4BACI,eAAS,CAEb,uBACI,eAAS,CAEb,6BACI,eAAS,CAEb,0BACI,eAAS,CAEb,+BACI,eAAS,CAEb,yBACI,eAAS,CAEb,8BACI,eAAS,CAEb,yBACI,eAAS,CAEb,uBACI,eAAS,CAEb,0BACI,eAAS,CAEb,yBACI,eAAS,CAEb,yBACI,eAAS,CAEb,iBACI,eAAS,CAEb,qBACI,eAAS,CAEb,uBACI,eAAS,CAEb,4BACI,eAAS,CAEb,6BACI,eAAS,CAEb,8BACI,eAAS,CAEb,gCACI,eAAS,CAEb,6BACI,eAAS,CAEb,8BACI,eAAS,CAEb,qBACI,eAAS,CAEb,mBACI,eAAS,CAEb,kBACI,eAAS,CAEb,iBACI,eAAS,CAEb,8BACI,eAAS,CAEb,gCACI,eAAS,CAEb,2BACI,eAAS,CAEb,4BACI,eAAS,CAEb,6BACI,eAAS,CAEb,kBACI,eAAS,CAEb,wBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,oBACI,eAAS,CAEb,kBACI,eAAS,CAEb,sBACI,eAAS,CAEb,uBACI,eAAS,CAEb,yBACI,eAAS,CAEb,wBACI,eAAS,CAEb,uBACI,eAAS,CAEb,kBACI,eAAS,CAEb,uBACI,eAAS,CAEb,oBACI,eAAS,CAEb,2BACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,wBACI,eAAS,CAEb,yBACI,eAAS,CAEb,uBACI,eAAS,CAEb,0BACI,eAAS,CAEb,wBACI,eAAS,CAEb,wBACI,eAAS,CAEb,uBACI,eAAS,CAEb,8BACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,6BACI,eAAS,CAEb,qBACI,eAAS,CAEb,iBACI,eAAS,CAEb,iBACI,eAAS,CAEb,qBACI,eAAS,CAEb,4BACI,eAAS,CAEb,8BACI,eAAS,CAEb,6BACI,eAAS,CAEb,+BACI,eAAS,CAEb,6BACI,eAAS,CAEb,6BACI,eAAS,CAEb,mBACI,eAAS,CAEb,qBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,sBACI,eAAS,CAEb,oBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,qBACI,eAAS,CAEb,yBACI,eAAS,CAEb,0BACI,eAAS,CAEb,0BACI,eAAS,CAEb,0BACI,eAAS,CAEb,sBACI,eAAS,CAEb,uBACI,eAAS,CAEb,uBACI,eAAS,CAEb,kBACI,eAAS,CAEb,uBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,oBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,oBACI,eAAS,CAEb,oBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,qBACI,eAAS,CAEb,qBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,uBACI,eAAS,CAEb,uBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,wBACI,eAAS,CAEb,yBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,qBACI,eAAS,CAEb,qBACI,eAAS,CAEb,qBACI,eAAS,CAEb,uBACI,eAAS,CAEb,wBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,mBACI,eAAS,CAEb,iBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,wBACI,eAAS,CAEb,yBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,sBACI,eAAS,CAEb,uBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,uBACI,eAAS,CAEb,yBACI,eAAS,CAEb,0BACI,eAAS,CAEb,2BACI,eAAS,CAEb,uBACI,eAAS,CAEb,wBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,wBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,qBACI,eAAS,CAEb,kBACI,eAAS,CAEb,sBACI,eAAS,CAEb,6BACI,eAAS,CAEb,uBACI,eAAS,CAEb,wBACI,eAAS,CAEb,yBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,kBACI,eAAS,CAEb,iBACI,eAAS,CAEb,iBACI,eAAS,CAEb,qBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,gBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CClgDb,oBAAsB,YAAA,CCshDtB,4DCjiDA,KACE,uBACA,0BACA,6BAAA,CAOF,KACE,SACA,6DACA,mCACA,iCAAA,CAaF,2FAaE,aAAA,CAQF,4BAIE,qBACA,uBAAA,CAQF,sBACE,aACA,QAAA,CAQF,kBAEE,YAAA,CAUF,EACE,4BAAA,CAOF,iBAEE,SAAA,CAUF,YACE,wBAAA,CAOF,SAEE,eAAA,CAOF,IACE,iBAAA,CAQF,GACE,cACA,cAAA,CAOF,KACE,gBACA,UAAA,CAOF,MACE,aAAA,CAOF,QAEE,cACA,cACA,kBACA,uBAAA,CAGF,IACE,SAAA,CAGF,IACE,aAAA,CAUF,IACE,QAAA,CAOF,eACE,eAAA,CAUF,OACE,eAAA,CAOF,GAEE,+BAAA,AACA,uBAAA,QAAA,CAOF,IACE,aAAA,CAOF,kBAIE,gCACA,aAAA,CAkBF,sCAKE,cACA,aACA,QAAA,CAOF,OACE,gBAAA,CAUF,cAEE,mBAAA,CAWF,oEAIE,0BACA,cAAA,CAOF,sCAEE,cAAA,CAOF,iDAEE,SACA,SAAA,CAQF,MACE,kBAAA,CAWF,uCAEE,8BAAA,AACA,sBAAA,SAAA,CASF,4FAEE,WAAA,CASF,mBACE,6BACA,AACA,+BACA,sBAAA,CASF,+FAEE,uBAAA,CAOF,SACE,wBACA,aACA,0BAAA,CAQF,OACE,SACA,SAAA,CAOF,SACE,aAAA,CAQF,SACE,eAAA,CAUF,MACE,yBACA,gBAAA,CAGF,MAEE,SAAA,CC5aF,6CAGC,cACA,gBACA,gBACG,qBACA,0BACH,wBACA,oBACA,kBACA,iBAEA,gBACA,cACA,WAEA,qBACA,AACA,iBACA,YAAA,CAIyC,4JACzC,gBAAA,CAIoC,wIACpC,gBAAA,CAGD,aACC,6CAEC,gBAAA,CAAA,CAKF,sBACC,aAAA,CAQD,iCACC,kBAAA,CAGD,WAAc,aAAA,CAAd,0FAUO,aAAA,CAVP,wGAmBO,aAAA,CAnBP,eAsBO,wBAAA,CAtBP,wGA+BO,aAAA,CA/BP,6RAoDO,aAAA,CApDP,wIA+DO,aAAA,CA/DP,mLA6EO,aAAA,CA7EP,6BAiFO,aAAA,CAjFP,eAoFO,UAAA,CApFP,sQA2GO,eAAA,CA3GP,sIAsHO,iBAAA,CCxKP,WACI,0BACA,4CACA,gBACA,iBAAA,CAEJ,WACI,yBACA,4CACA,gBACA,iBAAA,CAOJ,KACC,aAAA,CAEI,UACJ,WACA,YACA,sBACC,gCAAA,CAEF,KACC,cACA,cACA,aAAA,CAED,EACC,8BAAA,qBAAA,CAiBD,sZAiEC,SACA,UACA,SACA,eACA,uBAAA,CAED,8EAWC,aAAA,CAED,MAEC,eAAA,CAED,aAEC,WAAA,CAGD,oDAGC,WACA,YAAA,CAED,MACC,yBACA,gBAAA,CC9ID,QACC,MACA,OACA,eACA,YACA,WACA,yBACA,YACA,iBAAA,CAGD,2FAIC,iBAAA,CAED,cACC,SACA,UAAA,CAFD,gBAIE,iBACA,cACA,mCAAA,0BAAA,CACA,sBACC,UAAA,CARH,uBAYE,8BACE,uBACA,wBACF,YACA,kBAAA,CAhBF,4BAmBE,gBAAA,CAGF,mBACC,WACA,YACA,OAAA,CAHD,0CAME,aACA,WACA,yBACA,kBACA,kBACA,SACA,gCAAA,uBAAA,CAEA,8CACC,QACA,uCAAA,AAAW,8BAAA,CAEZ,iDACC,QACA,uCAAA,AAAW,8BAAA,CAEZ,iDACC,QACA,uCAAA,AAAW,8BAAA,CAIb,yBACC,cAAA,CADD,gDAIE,qBAAA,CAMA,mDACC,QACA,qDAAA,AAAgC,4CAAA,CAEjC,sDACC,SAAA,CAED,sDACC,QACA,sDAAA,AAAgC,6CAAA,CAKpC,sBACC,WACA,kBACA,SACA,YACA,UACA,qCAAA,AP7BA,6BAAA,mBACA,AAEA,6FAAA,AAAY,4DAAA,CO6Bb,2BACC,WACA,YACA,kBACA,qBACA,OACA,kBACA,iCAAA,AAEA,yBAAA,WAAA,CAEA,gCACC,kBAAA,CADD,sDAIE,SAAA,CAIH,yBACC,eACA,WACA,kCAAA,CAED,iBACC,cAAA,CAEA,uEAEC,WACA,8DAAA,AAGA,sDAAA,6BACA,qBACA,cACA,UAAA,CAED,uBACC,oCACA,UAAA,CAGF,0BACC,aACA,SACA,yBACA,YACA,kBACA,8DAAA,qDAAA,CAGA,gCACC,eACA,wBAAA,CAXF,6GAeE,kBACA,QACA,mCAAA,AACA,2BAAA,UAAA,CAlBF,mDAsBE,gBACA,UACA,eACA,eAAA,CAzBF,0DA4BE,WACA,gBAAA,CAGF,gBACC,YACA,UACA,WACA,QAAA,CAJD,kBAOE,4BACA,MACA,OACA,WACA,WAAA,CAGF,sBACC,kBACA,MACA,OACA,WACA,YACA,kBACA,yBACA,cACA,yBACA,eACA,gBACA,eACA,UACA,wDAAA,+CAAA,CAGA,4BACC,qBACA,aAAA,CAGF,sBACC,UAAA,CADD,+DAKE,UAAA,CALF,+BAQE,SAAA,CARF,wCAWE,mBACA,WACA,eACA,sCACA,QAAA,CAfF,iFAkBG,aAAA,CAlBH,uDAsBG,eACA,SAAA,CAvBH,qFA0BI,sBACA,kBACA,eAAA,CA5BJ,gGA+BI,YACA,cAAA,CAED,4GACC,YAAA,CAnCJ,sGAsCI,0BACA,sBACA,cACA,oBACA,eAAA,CA1CJ,+IA6CK,4BAAA,CA7CL,yGAiDI,YACA,wBAAA,CAlDJ,8FAqDI,wBAAA,CArDJ,4FAwDI,qBACA,qBACA,aAAA,CA1DJ,2FA6DI,aAAA,CA7DJ,8GAgEI,gBACA,kBACA,aAAA,CAGD,wGP3NF,mBACA,AAEA,2FAAA,AAAY,2DAAA,COwNV,2MAOE,aAAA,CAPF,6RASG,oBAAA,CA9EN,0DAmFI,gBACA,iBAAA,CApFJ,gDAyFE,YACA,oBAAA,CAGF,gBACC,aACA,WACA,YACA,QACA,SACA,UACA,yBACA,aAAA,CARD,sBAWE,mCAAA,0BAAA,CAXF,sBAcE,gBAAA,CAdF,sBAiBE,gBAAA,CAGD,sBACC,WACA,cAAA,CAOF,yBACC,wBAEE,YAAA,CAFF,oBAKE,cAAA,CAAA,CAIH,yBACC,wBAEE,cAAA,CAFF,oBAKE,YAAA,CAAA,CASH,yBACC,gBACC,aAAA,CAED,0BACC,cACA,WACA,WAAA,CAED,2BACC,WACA,YACA,SAAA,CAEA,0DAEE,YACA,aACA,eACA,MACA,OACA,WAAA,CAEA,gEACC,cAAA,CAKJ,sBACC,0BACA,gBACA,WAAA,CAED,gBACC,aACA,uDAAA,CAED,mBACC,YAAA,CAED,0BACC,eAAA,CAAA,CAGF,0BACC,0BACC,WACA,aAAA,CAED,2BACC,WACA,aAAA,CAED,gBACC,WACA,yDAAA,CAAA,CAGF,0BACC,0BACC,WACA,aAAA,CAED,2BACC,WACA,aAAA,CAED,gBACC,WACA,yDAAA,CAAA,CCxbF,mEACC,kBACA,oBACA,0BACA,yBAAA,CAEA,0EACC,YAAA,CAKA,2FAAa,eAAA,CACb,sGAAwB,YAAA,CACxB,2FACE,eACA,WACA,UAAA,CACA,kGACE,YAAA,CAKN,gDACE,SAAA,CAGF,0BACC,mEACC,qBACA,gBAAA,CAAA,CAIF,yBACC,kDACC,sBAAA,CAED,uCACC,wBAAA,CAAA,CAIF,yBACC,mEACC,yBACA,oBACA,OACA,eAAA,CAAA,CCrCF,iBACE,YACA,kBACA,YACA,YACA,WACA,yBACA,gBACA,kBACA,cACA,gBACA,8DAAA,qDAAA,CAIA,uBACE,WACA,yBACA,cAAA,CAIF,+CACE,WACA,kBACA,cACA,UACA,WACA,WACA,WACA,kBAAA,CAGF,wBACE,gCAAA,AACA,wBAAA,2BAAA,kBAAA,CAGF,6BACE,iCAAA,AAAW,wBAAA,CAIf,SACE,yBACA,YACA,gBACA,2CAAA,kCAAA,CAEA,4BAAuB,yBAA+B,UAAA,CACtD,kCAA6B,wBAAA,CAC7B,kCAA6B,yBAA+B,yBAAsC,iBAAA,CAElG,cACE,kBACA,0CAAA,iCAAA,CAGF,kBACE,6BACA,aAAA,CAEA,8BACE,WAAA,CAGF,wBACE,cACA,wBACA,gBAAA,CAHF,kGAQI,cACA,eAAA,CATJ,gCAYI,aAAA,CApBN,qBAyBI,iBAAA,CAzBJ,wBA2BM,kBACA,oBAAA,CAMR,qBAEE,qBACA,SACA,eAAA,CAEA,0BACE,YACA,iBACA,6BAAA,CAGF,oCACE,iBAAA,CAIJ,0BACE,kBACA,cACA,UACA,aACA,YACA,mBACA,kBACA,2BAAA,kBAAA,CAEA,iCACE,YACA,WACA,cACA,iBAAA,CAGF,sCACE,WAAS,CAGX,gCACE,kBAAA,CACA,uCACE,UAAA,CAOJ,oEAEE,qBACA,cACA,gBACA,kBACA,gBAAA,CAEF,sBACE,aAAA,CAOJ,yBACE,SACE,YACA,YAAA,CAAA,CAIJ,yBACE,iBACE,YAAA,CAEF,uBAEE,eACA,YACA,YACA,uBAAA,AACA,eAAA,wBAAA,AACA,gBAAA,SACA,gBACA,cACA,mBAAA,CAAA,CAGJ,0BACE,uBAEE,WAAA,CAAA,CAGJ,0BACE,uBAEE,WAAA,CAEF,qBACE,mBAAA,CAEA,2BACE,eAAA,CAAA,CC/MN,aACE,oBACA,iBAAA,CAEA,mBACE,kDACA,sBACA,iBAAA,CAHF,yBAMI,kBACA,WACA,kBACA,gBACA,eAAA,CAVJ,wBAcI,cACA,eACA,kBACA,WACA,sCACA,6BACA,qEAAA,AAGA,6DAAA,oBACA,gBACA,qBACA,iBAAA,CAEA,8BACE,uCACA,iCAAA,CAKN,wBACE,kFAAA,AACA,qDAAA,sBACA,iBAAA,CAHF,8BAMI,kBACA,WACA,kBAEA,eAAA,CAVJ,6BAcI,cACA,eACA,kBACA,WACA,sCACA,6BACA,qEAAA,AAGA,6DAAA,oBACA,gBACA,qBACA,iBAAA,CAEA,mCACE,uCACA,iCAAA,CAKN,yBACE,aACA,kDACA,4BACA,sBACA,WACA,eAAA,CANF,6BASI,oBAAA,CATJ,+BAaI,kBACA,mBAAA,CAdJ,kCAiBI,gBACA,kBAAA,CAlBJ,8BAqBI,qBACA,kBACA,WACA,mBACA,kBACA,uBACA,iBAAA,CCvFN,iBACC,yBACA,UAAA,CAFD,AAIA,YAHC,yBACA,UAAA,CAED,iBACC,yBACA,UAAA,CAED,EACC,qBACA,kCAAA,yBAAA,CAEA,QACC,cAAA,CAIF,SACC,sBACA,cACA,UAAA,CAEA,4BAAuB,sBAA+B,UAAA,CACtD,kCAA6B,qBAAA,CAC7B,kCAA6B,sBAA+B,yBAAsC,iBAAA,CAGnG,iBACC,cACA,WACA,kBACA,YAAA,CAEA,iCACC,yBACA,kCACA,gCACA,2BAAA,CAJD,oCAOE,eAAA,CAIF,gCXsBA,mBACA,AAEA,0FAAA,AAAY,yDAAA,CWrBb,iBACC,gBACA,WACA,gBACA,aAAA,CAJD,6EASE,gBACA,aAAA,CAVF,yBAaE,cACA,cAAA,CAdF,uBAiBE,cACA,6BACA,kBACA,2BAAA,kBAAA,CACA,6BACC,qBACA,kBAAA,CAvBH,uCA2BE,gBACA,oBACA,gBACA,gBACA,sBACA,eACA,iBACA,YACA,kCAAA,AACA,0BAAA,aAAA,CApCF,qDAyCI,iBAAA,CACA,iEACC,WACA,kBACA,SACA,WACA,QACA,SACA,mBACA,2BACA,yDACA,WACA,2BAAA,kBAAA,CAED,6EACC,UACA,wDAAA,CAGF,mDACC,qBACA,WACA,iBACA,iBACA,kBAAA,CAEA,mFACC,gBACA,oBACA,iBACA,gBACA,sBACA,eACA,iBAAA,CA1EL,mBAiFE,oBAAA,CAjFF,kRAgGE,cACA,kBACA,kBAAA,CAlGF,uBAqGE,iBACA,gBACA,qBAAA,CAvGF,wHA4GE,WACA,aAAA,CA7GF,wNAiHG,cACA,kBACA,WACA,iBAAA,CApHH,4qBA4HG,qBACA,oBACA,uBAAA,CAED,gMACC,YAAA,CAjIH,oBAqIE,gBX5KD,+FACA,gBW6KC,iBAAA,CAvIF,oBA0IE,gBACA,gBACA,mBAAA,CA5IF,oBA+IE,gBACA,gBACA,iBAAA,CAjJF,oBAoJE,gBACA,gBACA,kBACA,oBAAA,CAvJF,oBA0JE,iBAAA,CA1JF,oBA6JE,gBACA,kBACA,iBAAA,CAGD,0DAEE,uBAAA,CApKH,mBA0KE,aAAA,CA1KF,wCA6KE,cACA,oBAAA,CA9KF,8CAiLG,kBACA,4BACA,kBACA,mBAAA,CApLH,4CAuLG,aAAA,CAvLH,uBA2LE,8BAAA,CA3LF,iDA+LE,uBAAA,CA/LF,0BAkME,2BAAA,CAlMF,6BAqME,uBAAA,CArMF,6BAwME,sBAAA,CAxMF,+BA2ME,eAAA,CA3MF,4FAiNE,WACA,cACA,gBACA,gBAAA,CApNF,oBAuNE,WACA,WACA,iBACA,kBACA,YACA,cACA,wBAAA,CA7NF,qBAgOE,eACA,YACA,iBAAA,CAlOF,wCAsOE,yBACA,iBACA,kBACA,mBAAA,CAzOF,oCA4OE,wBAAA,CA5OF,0BAgPG,kCAAA,CAhPH,0BAmPG,oBAAA,CAnPH,8FA2PE,eACA,kBACA,kBACA,mBACA,qBAAA,CA/PF,khBAkQG,WACA,aAAA,CAnQH,8IAuQG,eAAA,CAvQH,kIA0QG,aAAA,CA1QH,mDA+QE,kBACA,cACA,qBACA,wBAAA,CAlRF,6DAoRG,cACA,mBACA,wBAAA,CAtRH,2DAyRG,mBACA,oBAAA,CA1RH,qEA2RU,WAAA,CA3RV,2CAgSE,cACA,qBACA,wBAAA,CAlSF,qDAoSG,cACA,mBACA,wBAAA,CAtSH,mDAySG,mBACA,oBAAA,CA1SH,6DA2SU,WAAA,CA3SV,sBAgTE,uDACA,gBACA,cACA,WACA,cACA,qBACA,AACA,iBACA,aACA,yBACA,4BACA,eACA,kBACA,iBACA,qBACA,mBACA,kBACA,sDACA,uCACA,0BACA,cACA,wBAAA,CArUF,qBAwUE,cACA,kBACA,cACA,kBACA,mBACA,6BACA,yBACA,qBACE,WACF,2BAAA,CAjVF,0BAoVG,gBACA,oBACA,kBACA,YACA,UACA,gBACA,4BAAA,CAGD,wCAAuB,yBAAmC,UAAA,CAC1D,8CAA6B,wBAAA,CAC7B,8CACC,yBACA,yBACA,4BAAe,CAKlB,eACC,oBAAA,AACA,oBADA,AACA,aAAA,kBACA,yBAAA,AACA,sBADA,AACA,8BAAA,gBAAA,CAJD,iBAOE,oBAAA,AACA,oBADA,AACA,aAAA,yBAAA,AACA,sBADA,AACA,mBAAA,qBACA,iBACA,oBACA,eAAA,CAEA,sBACC,kBACA,MAAA,CACA,6BACC,gBACA,oBACA,iBACA,gBACA,sBACA,eACA,mBAAA,CAIF,sBACC,kBACA,OAAA,CACA,4BACC,gBACA,oBACA,iBACA,gBACA,sBACA,eACA,kBAAA,CAUJ,UACC,kBACA,oBAAA,CAFD,2BAKE,kBACA,aACA,WACA,aACA,WAAA,CATF,4BAaE,cACA,YACA,cACA,cACA,gBACA,eACA,kBACA,iBACA,yBACA,kBACA,6BAAA,oBAAA,CACA,mCACC,mBAAS,CAEV,kCACC,aAAA,CAGF,iBACC,iBACA,gBACA,eAAA,CAHD,kCAME,SACA,mGAAA,AACA,qEAAA,YAAA,CARF,mCAYE,eAAA,CACA,0CACC,mBAAS,CASb,SACC,kBACA,qBACA,WACA,gBACA,aAAA,CAED,mBACC,kBACA,MACA,SACA,mCAAA,AACA,2BAAA,iBACA,iBAAA,CAED,cACC,gBACA,gBACA,WACA,kBACA,kBACA,gBACA,gBACA,SACA,4CAAA,AACA,oCAAA,gCAAA,AACA,wBAAA,mBACA,UACA,4BACA,cACA,wBAAA,CAED,oBACC,WACA,kBACA,SACA,aACA,mCAAA,AACA,2BAAA,6BACA,mCACA,oCACA,iCAAA,CAED,kCACC,kBAAA,CAED,6BACC,UACA,wCAAA,AAAW,+BAAA,CAMZ,aACC,WACA,qBACA,kBACA,cACA,mBACA,8BACA,cACA,yBACA,kBACA,iBAAA,CAEA,mBACC,gBACA,oBACA,kBACA,QACA,SACA,sDAAA,AACA,8CAAA,aAAA,CAOF,iCAEE,gBACA,WAAA,CAOF,oBACC,oBAAA,AACA,oBADA,AACA,aAAA,qBAAA,AACA,kBADA,AACA,yBAAA,kBACA,yBACA,mBACA,mBACA,eACA,gBACA,0BACA,yBAAA,sBAAA,kBAAA,CAVD,oCAaE,qBACA,qBACA,qBACA,kFAAA,AACA,oDAAA,4BACA,gCAAA,uBAAA,CAEA,0CACC,gBACA,kBACA,mBAAa,CAGd,0CACC,qBACA,SAAA,CA5BH,8BAiCE,YACA,wBACA,mBACA,oCAAA,2BAAA,CAEA,oCACC,SAAA,CAMH,eACC,aACC,eACA,aACA,OACA,MACA,WACA,YACA,cACD,YACC,oFAAA,AAAY,2CAAA,CAGd,eACC,aACA,gBACA,yBACA,kBACA,eACA,SACA,SACA,mCAAA,AACA,2BAAA,aACA,WACA,gBACA,gCAAA,uBAAA,CAEA,oBACC,QAAA,CAfF,qBAmBE,WACA,gBACA,kBACA,yBACA,yBACA,cACA,gBACA,eACA,UACA,wDAAA,+CAAA,CAGA,2BACC,oBAAA,CAhCH,sBAqCE,YACA,SAAA,CACA,4BACC,4BAAA,CAxCH,qBA6CE,cACA,oBACA,eAAA,CAIF,wBACC,qBACA,wBACA,gBACA,kBACA,eAAA,CAEA,8BACC,wBAAA,CAIF,WACC,oBAAA,AACA,oBADA,AACA,aAAA,yBAAA,sBAAA,6BAAA,CAFD,qBAKE,aACA,oBACA,kBACA,oBACA,WACA,kBACA,gBACA,kCAAA,yBAAA,CAOF,yBACC,WACC,4BAAA,6BAAA,qBAAA,gBAAA,CADD,qBAGE,WACA,iBAAA,CAGF,wBACC,cACA,kBAAA,CAAA,CAIF,4BACC,kBAAA,CACA,kCACC,kBAAA,CAOF,yBACC,SACC,kBAAA,CAED,iBACC,YAAA,CAED,mFAKE,gBAAA,CALF,qBAQE,qBAAA,CAAA,CAIH,0BACC,SACC,kBAAA,CAED,iBACC,cAAA,CAED,aACC,SAAA,CAAA,CAGF,0BACC,SACC,kBAAA,CAED,iBACC,kBAAA,CAED,iBACC,kBAAA,CAAA,CCryBF,UACC,cACA,8BACA,WACA,UZ2DA,mBACA,AAEA,2FAAA,AY5DA,4DAAA,YACA,oBAAA,AACA,oBADA,AACA,aAAA,4BAAA,AACA,6BADA,AACA,0BADA,AACA,sBAAA,mBAAA,AACA,eAAA,yBAAA,sBAAA,6BAAA,CAVD,0EAaE,oBAAA,AACA,oBADA,AACA,aAAA,8BAAA,AACA,6BADA,AACA,uBADA,AACA,mBAAA,WACA,mBAAA,AACA,eAAA,mBAAA,WAAA,MAAA,CAGD,gBACC,WACA,qBACA,gBACA,iBAAA,CAEA,qBACC,kBACA,MACA,OACA,WACA,YACA,WACA,iEAAA,AAGA,yDAHA,AAGA,iDAHA,AAGA,6EAAA,UACA,6BACA,sBACA,kCACA,4BACA,6BAAA,AAAW,oBAAA,CAEZ,2CAEE,UACA,iCAAA,AAAW,wBAAA,CAHb,4CAME,oBAAA,CAIF,0BACC,kBACA,UACA,WACA,qBACA,kBACA,kBACA,WAAA,CAPD,wGAYE,cACA,mCAAA,AACA,2BAAA,oBAAA,CAdF,kCAiBE,aAAA,CAIF,kDACC,gBACA,qBACA,WACA,qBAAA,CAED,sBACC,eACA,qCACA,gBACA,kBACA,cACA,mBACA,mCAAA,0BAAA,CAED,4BACC,eACA,cACA,kBACA,eAAA,CAED,qBACC,qBACA,kBACA,gBACA,mBACA,iBACA,iBAAA,CAEA,mCACC,eAAA,CAKF,mDAEE,6CACA,wBAAA,CAHF,0DAME,UAAA,CANF,oDASE,aAAA,CATF,gLAcE,WACA,8DAAA,qDAAA,CAfF,0DAoBE,cACA,qBAAA,CAGF,mDAEE,6CACA,wBAAA,CAHF,0DAME,UAAA,CANF,oDASE,aAAA,CATF,gLAcE,WACA,8DAAA,qDAAA,CAfF,0DAoBE,cACA,qBAAA,CAGF,qDAEE,+CACA,wBAAA,CAHF,4DAME,UAAA,CANF,sDASE,aAAA,CATF,sLAcE,WACA,8DAAA,qDAAA,CAfF,4DAoBE,cACA,qBAAA,CAGF,oDAEE,8CACA,wBAAA,CAHF,2DAME,UAAA,CANF,qDASE,aAAA,CATF,mLAcE,WACA,8DAAA,qDAAA,CAfF,2DAoBE,cACA,qBAAA,CAIF,+DAEE,8CACA,wBAAA,CAHF,sEAME,UAAA,CANF,gEASE,aAAA,CATF,oNAcE,WACA,8DAAA,qDAAA,CAfF,sEAoBE,cACA,qBAAA,CAIF,8DAEE,6CACA,wBAAA,CAHF,qEAME,UAAA,CANF,+DASE,aAAA,CATF,iNAcE,WACA,8DAAA,qDAAA,CAfF,qEAoBE,cACA,qBAAA,CAIF,+CAEE,yCACA,yBACA,SAAA,CAJF,sDAOE,UAAA,CAPF,gDAUE,UAAA,CAVF,oKAeE,WACA,8DAAA,qDAAA,CAGA,+LACC,YAAA,CApBH,sDAwBE,cACA,qBAAA,CAIF,8BACC,WACA,kFAAA,AACA,qDAAA,oBAAA,AACA,oBADA,AACA,aAAA,yBAAA,sBAAA,kBAAA,CAJD,wDAOE,mBAAA,CAPF,mDAWE,6CACA,yBACA,UAAA,CAbF,0DAgBE,WACA,iBAAA,CAjBF,oDAoBE,WACA,kBACA,iBAAA,CAtBF,gLA2BE,WACA,8DAAA,qDAAA,CA5BF,0DAiCE,cACA,qBAAA,CAlCF,oCAqCE,sBACA,kBACA,qBACA,gBACA,cACA,kBACA,eACA,gBACA,2BAAA,AACA,mBAAA,gDAAA,uCAAA,CAEA,0CACC,iCAAA,wBAAA,CAWL,yBACC,gBACC,UACA,mBAAA,oBAAA,WAAA,CAAA,CAGF,0BACC,0BACC,cAAA,CAED,4BACC,kBAAA,CAED,gBACC,UACA,WAAA,CAEA,8BACC,SAAA,CAGD,mFAEC,SAAA,CAAA,CAIH,0BACC,0BACC,YAAA,CAED,4BACC,kBAAA,CAAA,CCzXF,YACC,gBACA,SACA,YACA,WbkEA,mBACA,AAEA,6FAAA,AAAY,4DAAA,CalEb,eACC,iBACA,UACA,gBACA,gBACA,eACA,iBACA,aAAA,CAPD,kBAUE,cACA,cACA,mBACA,iBACA,YACA,aACA,kBACA,kBACA,eACA,gBACA,kBACA,kBACA,wBAAA,CAeF,MACC,oBAAA,AACA,oBADA,AACA,aAAA,yBAAA,4BAAA,CAGD,YACC,kBAAA,CAGD,KACC,cACA,cACA,mBACA,WACA,kBACA,kBACA,kCAAA,yBAAA,CAEA,UACC,mBAAA,AACA,oBADA,AACA,YAAA,mBAAA,CAEA,iBACC,gBACA,oBACA,mBACA,cAAA,CAIF,aACC,mBAAA,AACA,oBADA,AACA,YAAA,YAAA,CAEA,oBACC,gBACA,oBACA,mBACA,mBAAA,oBAAA,WAAA,CAIF,WACC,kBAAA,CAQF,yBACC,eACC,eACA,gBAAA,CAAA,CAKF,0BACC,eACC,eACA,gBAAA,CAAA,CCpHF,gBACE,gBAAA,CAEF,MACE,mBAAA,AACA,oBADA,AACA,YAAA,yBAAA,CAEF,QACE,oBAAA,AACA,oBADA,AACA,aAAA,mBAAA,cAAA,CAEF,QACE,mBAAA,AACA,oBADA,AACA,YAAA,WACA,iBACA,wBACA,iBACA,qBACA,kBACA,kBACA,sCACA,kDAAA,yCAAA,CAEA,cACE,uBAAA,CAEF,kBACE,qBACA,kBAAA,CAIJ,aACE,UAAA,CAEA,eACE,qBACA,uBAAA,CAIJ,+BACE,YAAA,CAGF,uBACE,kBACA,2BAAA,CAKF,mBACE,qBACA,UAAA,CAEA,qBACE,qBACA,uBAAA,CAIJ,mBACE,qBAAA,CADF,gCAKM,SACA,iBACA,cACA,eAAA,CARN,gCAWM,sBACA,SACA,0BACA,qBACA,gCACA,oCAAA,CACA,sCACC,uBAAA,CAED,0CACC,yBACA,uBAAA,CAtBP,qCA4BI,SAAA,CA5BJ,yCA8BM,gBACA,2BAAA,CAEF,yDACE,YAAA,CASN,yBACE,wBACE,mBAAA,oBAAA,WAAA,CAAA,CCzGJ,aACE,kBACA,oBACA,oBACA,wBAAA,AACA,qBADA,AACA,uBAAA,yBAAA,AACA,sBADA,AACA,mBAAA,mBACA,iBAAA,CAPF,gBAUI,UACA,iBAAA,CAGF,0BACE,cACA,kBACA,qBACA,kBACA,cACA,gBAAA,CAIA,oBACE,gBACA,gBACA,cACA,mBAAA,CAJF,gCAOI,kBACA,kBACA,UAAA,CAMJ,gCAAmB,mBAAA,CACnB,iCAAoB,mBAAA,CACpB,iCAAoB,mBAAA,CAzCxB,0BA6CI,kBACA,qBACA,UACA,YACA,UACA,uDAAA,8CAAA,CAlDJ,uCAqDM,iBACA,mBAAA,CAIJ,gCACiB,SAAA,CA3DnB,wBAgEI,qBACA,+BAAA,CAjEJ,4GAkEkB,aAAA,CAlElB,qDAoEM,cACA,eACA,iBAAA,CAtEN,+BAwEa,aAAA,CAxEb,0BA0EM,aAAA,CA1EN,qCA4EQ,qEAAA,CAEF,gCACE,aAAA,CADF,2CAGI,wDAAA,CAjFV,qCAqFmB,aAAA,CArFnB,yDAuFM,cACA,kBAAA,CAON,gBACE,oBAAA,AACA,oBADA,AACA,aAAA,8BAAA,AACA,6BADA,AACA,uBADA,AACA,mBAAA,wBAAA,qBAAA,sBAAA,CAHF,iCAMI,mBAAA,AACA,mBADA,AACA,eAAA,2BACA,aAAA,CAEA,6CACE,mBAAA,AACA,mBADA,AACA,eAAA,aAAA,CAFF,0DAII,kBAAA,SAAA,CAdR,mBAoBI,8CACA,qBAAA,CArBJ,6BAyBI,UACA,iBACA,eAAA,CA3BJ,gCA6BM,UACA,SACA,oBACA,8BAAA,CAhCN,sBAqCI,cACA,iBACA,cACA,iBAAA,CAEA,4BACE,yBACA,mBACA,iBACA,UAAA,CA9CN,0BAmDI,qBACA,cACA,aACA,iCACA,mBACA,wBACA,kBACA,eACA,wCACA,yBAAA,sBAAA,qBAAA,gBAAA,CA5DJ,qCAgEI,qBACA,UACA,mBACA,UACA,cAAA,CAEA,qDACE,WACA,cACA,kBACA,aACA,YACA,kBACA,mBACA,WACA,YACA,UACA,2BAAA,AACA,mBAAA,2BAAA,kBAAA,CAGF,6DACE,UACA,2BAAA,AAAW,kBAAA,CASjB,0BACE,iCAEI,aAAA,CACe,4FACb,cAAA,CAAA,CAMR,yBACE,iCAEI,cAAA,CAIJ,0BAEI,UACA,6BACA,cACA,iBAAA,CALJ,uCAMmB,QAAA,CANnB,gCAOY,YAAA,CAAA,CT7Cd,yBACC,KACC,gBAAA,CAAA,CUhKF,2JASM,aAAA,CATN,mDAYM,aAAA,CAZN,uDAeM,kBAAA,CAfN,iDAkBM,kBAAA,CACA,uDACE,kBAAA,CAGJ,oFAEC,uBAAA,CAzBL,kEhBiEC,mBACA,AAEA,6FAAA,AAAY,4DAAA,CgBpEb,gLA0CM,cACA,eAAA,CA3CN,0DA8CM,aAAA,CAIF,gDACE,aAAA,CAnDN,oDA2DI,wBAAA,CACA,0DACE,wBAAA,CA7DN,gDhBiEC,mBACA,AAEA,6FAAA,AAAY,4DAAA,CgBpEb,4CAsEI,kBAAA,CCtEJ,iKASM,aAAA,CATN,qDAYM,aAAA,CAZN,yDAeM,kBAAA,CAfN,mDAkBM,kBAAA,CACA,yDACE,kBAAA,CAGJ,sFAEC,uBAAA,CAzBL,oEjBiEC,mBACA,AAEA,6FAAA,AAAY,4DAAA,CiBpEb,sLA0CM,cACA,eAAA,CA3CN,4DA8CM,aAAA,CAIF,kDACE,aAAA,CAnDN,sDA2DI,wBAAA,CACA,4DACE,wBAAA,CA7DN,kDjBiEC,mBACA,AAEA,6FAAA,AAAY,4DAAA,CiBpEb,8CAsEI,kBAAA,CCtEJ,8JASM,aAAA,CATN,oDAYM,aAAA,CAZN,wDAeM,kBAAA,CAfN,kDAkBM,kBAAA,CACA,wDACE,kBAAA,CAGJ,qFAEC,uBAAA,CAzBL,mElBiEC,mBACA,AAEA,6FAAA,AAAY,4DAAA,CkBpEb,mLA0CM,cACA,eAAA,CA3CN,2DA8CM,aAAA,CAIF,iDACE,aAAA,CAnDN,qDA2DI,wBAAA,CACA,2DACE,wBAAA,CA7DN,iDlBiEC,mBACA,AAEA,6FAAA,AAAY,4DAAA,CkBpEb,6CAsEI,kBAAA,CCtEJ,+LASM,aAAA,CATN,+DAYM,aAAA,CAZN,mEAeM,kBAAA,CAfN,6DAkBM,kBAAA,CACA,mEACE,kBAAA,CAGJ,gGAEC,uBAAA,CAzBL,8EnBiEC,mBACA,AAEA,6FAAA,AAAY,4DAAA,CmBpEb,oNA0CM,cACA,eAAA,CA3CN,sEA8CM,aAAA,CAIF,4DACE,aAAA,CAnDN,gEA2DI,wBAAA,CACA,sEACE,wBAAA,CA7DN,4DnBiEC,mBACA,AAEA,6FAAA,AAAY,4DAAA,CmBpEb,wDAsEI,kBAAA,CCtEJ,+IASM,aAAA,CATN,+CAYM,aAAA,CAZN,mDAeM,kBAAA,CAEF,gFAEC,uBAAA,CAnBL,8DpBiEC,mBACA,AAEA,6FAAA,AAAY,4DAAA,CoBpEb,oKAoCM,cACA,eAAA,CArCN,sDAwCM,aAAA,CAIF,4CACE,aAAA,CA7CN,gDAqDI,wBAAA,CACA,sDACE,wBAAA,CAvDN,4CpBiEC,mBACA,AAEA,6FAAA,AAAY,4DAAA,CoBpEb,wCAgEI,kBAAA,CAAA","file":"docs-light.css","sourcesContent":["//\n// UI Variables\n// --------------------------------------------------\n\n@radius: 3px;\n\n//\n// Typography Variables\n// --------------------------------------------------\n\n@type-scale:\t\t1.2;\n\n@heading1Size:\t\t2.2em;\n@heading2Size:\t\t1.9em;\n@heading3Size:\t\t1.5em;\n@heading4Size:\t\t1.3em;\n@paragraphSize:\t\t1.0em;\n@smallTextSize:\t\t0.9em;\n@tinyTextSize:\t\t0.8em;\n\n@margin-bottom-base: 1em;\n@indented-element-size: 2rem;\n.klavika-font {\n\tfont-family: 'Klavika-Light','Helvetica Neue', 'Helvetica', Helvetica, Arial, Tahoma, Verdana, sans-serif;\n\tfont-weight: 200;\n}\n@thick-left-border: 6px;\n@scrollbar-width: 1rem;\n@border-small-screen: 1px;\n@border-large-screen: 2px;\n\n//\n// Size Variables\n// --------------------------------------------------\n@nav-height: \t\t\t\t4rem;\n@sidebar--toggle-height: \t3rem;\n@nav-gap:\t\t\t\t\t0.5rem;\n@nav-component-height:\t\t3rem;\n@search-offset:\t\t\t\t(@nav-height - @nav-component-height)/2;\n\n@sidebar-small-width:\t\t18rem;\n@sidebar-large-width:\t\t23rem;\n@sidebar-huge-width:\t\t28rem;\n\n@scrollbar-width:\t\t\t16px;\n\n@product-dropdown-small-width:\t17rem;\n@product-dropdown-large-width:\t17.5rem;\n@product-dropdown-huge-width:\t17.5rem;\n\n@search-default-width:\t\t40%;\n@search-small-width:\t\t~\"calc( 100% - \"@sidebar-small-width~\" - \"@nav-gap~\" - \"@nav-gap~\" - \"@nav-height~\" - \"@product-dropdown-small-width~\")\";\n@search-large-width:\t\t~\"calc( 100% - \"@sidebar-large-width~\" - \"@nav-gap~\" - \"@nav-gap~\" - \"@nav-height~\" - \"@product-dropdown-large-width~\")\";\n@search-huge-width:\t\t\t~\"calc( 100% - \"@sidebar-huge-width~\" - \"@nav-gap~\" - \"@nav-gap~\" - \"@nav-height~\" - \"@product-dropdown-huge-width~\")\";\n\n@search-small-position:\t\t@sidebar-small-width + @product-dropdown-small-width + @nav-gap;\n@search-large-position:\t\t@sidebar-large-width + @product-dropdown-large-width + @nav-gap;\n@search-huge-position:\t\t@sidebar-huge-width + @product-dropdown-huge-width + @nav-gap;\n\n\n//\n// Z Index Variables\n// --------------------------------------------------\n@z-sidebar:\t\t\t\t\t250;\n@z-sidebar--mask:\t\t\t200;\n@z-nav:\t\t\t\t\t\t150;\n@z-sidebar-desktop:\t\t\t100;\n@z-sidebar--toggle:\t\t\t100;\n\n//\n// Gradient Mixin\n// --------------------------------------------------\n.gradient-h(@color1,@color2) {\n\tbackground: @color1;\n\tbackground: -moz-linear-gradient(left, @color1 0%, @color2 100%);\n\tbackground: -webkit-linear-gradient(left, @color1 0%,@color2 100%);\n\tbackground: linear-gradient(to right, @color1 0%,@color2 100%);\n\tfilter: progid:DXImageTransform.Microsoft.gradient( startColorstr='@color1', endColorstr='@color2',GradientType=1 );\n}\n.gradient-v(@color1,@color2) {\n\tbackground: @color1;\n\tbackground: -moz-linear-gradient(top, @color1 0%, @color2 100%);\n\tbackground: -webkit-linear-gradient(top, @color1 0%,@color2 100%);\n\tbackground: linear-gradient(to bottom, @color1 0%,@color2 100%);\n\tfilter: progid:DXImageTransform.Microsoft.gradient( startColorstr='@color1', endColorstr='@color2',GradientType=0 );\n}\n\n//\n// Breakpoints\n// --------------------------------------------------\n@breakpoint-small:\t\t\t900px;\n@breakpoint-large:\t\t\t1200px;\n@breakpoint-huge:\t\t\t1900px;\n","@font-face {\n\tfont-family: 'icomoon';\n\tsrc:url('../fonts/icomoon.eot?c3omf0');\n\tsrc:url('../fonts/icomoon.eot?c3omf0#iefix') format('embedded-opentype'),\n\t\turl('../fonts/icomoon.woff2?c3omf0') format('woff2'),\n\t\turl('../fonts/icomoon.ttf?c3omf0') format('truetype'),\n\t\turl('../fonts/icomoon.woff?c3omf0') format('woff'),\n\t\turl('../fonts/icomoon.svg?c3omf0#icomoon') format('svg');\n\tfont-weight: normal;\n\tfont-style: normal;\n}\n\n.icon {\n\tfont-family: 'icomoon';\n\tspeak: none;\n\tfont-style: normal;\n\tfont-weight: normal;\n\tfont-variant: normal;\n\ttext-transform: none;\n\tline-height: 1;\n\n\t/* Better Font Rendering =========== */\n\t-webkit-font-smoothing: antialiased;\n\t-moz-osx-font-smoothing: grayscale;\n}\n\n.icon.sun2:before {\n content: \"\\eae2\";\n}\n.icon.moon:before {\n content: \"\\eae3\";\n}\n.icon.logotype:before {\n content: \"\\e800\";\n}\n.icon.logo:before {\n content: \"\\e801\";\n}\n.icon.arrow-down:before {\n content: \"\\e802\";\n}\n.icon.arrow-up:before {\n content: \"\\e803\";\n}\n.icon.arrow-left:before {\n content: \"\\e804\";\n}\n.icon.arrow-right:before {\n content: \"\\e805\";\n}\n.icon.health:before {\n content: \"\\e806\";\n}\n.icon.lightning:before {\n content: \"\\e807\";\n}\n.icon.matrix:before {\n content: \"\\e808\";\n}\n.icon.cluster:before {\n content: \"\\e809\";\n}\n.icon.data:before {\n content: \"\\e80a\";\n}\n.icon.google:before {\n content: \"\\e81a\";\n}\n.icon.eyeball:before {\n content: \"\\e901\";\n}\n.icon.infinite:before {\n content: \"\\e902\";\n}\n.icon.dashboard:before {\n content: \"\\eade\";\n}\n.icon.analytics:before {\n content: \"\\eadf\";\n}\n.icon.cloud-stack:before {\n content: \"\\eae0\";\n}\n.icon.iot:before {\n content: \"\\eae1\";\n}\n.icon.home:before {\n content: \"\\e904\";\n}\n.icon.home2:before {\n content: \"\\e905\";\n}\n.icon.home3:before {\n content: \"\\e906\";\n}\n.icon.office:before {\n content: \"\\e907\";\n}\n.icon.newspaper:before {\n content: \"\\e908\";\n}\n.icon.pencil:before {\n content: \"\\e909\";\n}\n.icon.pencil2:before {\n content: \"\\e90a\";\n}\n.icon.quill:before {\n content: \"\\e90b\";\n}\n.icon.pen:before {\n content: \"\\e90c\";\n}\n.icon.blog:before {\n content: \"\\e90d\";\n}\n.icon.eyedropper:before {\n content: \"\\e90e\";\n}\n.icon.droplet:before {\n content: \"\\e90f\";\n}\n.icon.paint-format:before {\n content: \"\\e910\";\n}\n.icon.image:before {\n content: \"\\e911\";\n}\n.icon.images:before {\n content: \"\\e912\";\n}\n.icon.camera:before {\n content: \"\\e913\";\n}\n.icon.headphones:before {\n content: \"\\e914\";\n}\n.icon.music:before {\n content: \"\\e915\";\n}\n.icon.play:before {\n content: \"\\e916\";\n}\n.icon.film:before {\n content: \"\\e917\";\n}\n.icon.video-camera:before {\n content: \"\\e918\";\n}\n.icon.dice:before {\n content: \"\\e919\";\n}\n.icon.pacman:before {\n content: \"\\e91a\";\n}\n.icon.spades:before {\n content: \"\\e91b\";\n}\n.icon.clubs:before {\n content: \"\\e91c\";\n}\n.icon.diamonds:before {\n content: \"\\e91d\";\n}\n.icon.bullhorn:before {\n content: \"\\e91e\";\n}\n.icon.connection:before {\n content: \"\\e91f\";\n}\n.icon.podcast:before {\n content: \"\\e920\";\n}\n.icon.feed:before {\n content: \"\\e921\";\n}\n.icon.mic:before {\n content: \"\\e922\";\n}\n.icon.book:before {\n content: \"\\e923\";\n}\n.icon.books:before {\n content: \"\\e924\";\n}\n.icon.library:before {\n content: \"\\e925\";\n}\n.icon.file-text:before {\n content: \"\\e926\";\n}\n.icon.profile:before {\n content: \"\\e927\";\n}\n.icon.file-empty:before {\n content: \"\\e928\";\n}\n.icon.files-empty:before {\n content: \"\\e929\";\n}\n.icon.file-text2:before {\n content: \"\\e92a\";\n}\n.icon.file-picture:before {\n content: \"\\e92b\";\n}\n.icon.file-music:before {\n content: \"\\e92c\";\n}\n.icon.file-play:before {\n content: \"\\e92d\";\n}\n.icon.file-video:before {\n content: \"\\e92e\";\n}\n.icon.file-zip:before {\n content: \"\\e92f\";\n}\n.icon.copy:before {\n content: \"\\e930\";\n}\n.icon.paste:before {\n content: \"\\e931\";\n}\n.icon.stack:before {\n content: \"\\e932\";\n}\n.icon.folder:before {\n content: \"\\e933\";\n}\n.icon.folder-open:before {\n content: \"\\e934\";\n}\n.icon.folder-plus:before {\n content: \"\\e935\";\n}\n.icon.folder-minus:before {\n content: \"\\e936\";\n}\n.icon.folder-download:before {\n content: \"\\e937\";\n}\n.icon.folder-upload:before {\n content: \"\\e938\";\n}\n.icon.price-tag:before {\n content: \"\\e939\";\n}\n.icon.price-tags:before {\n content: \"\\e93a\";\n}\n.icon.barcode:before {\n content: \"\\e93b\";\n}\n.icon.qrcode:before {\n content: \"\\e93c\";\n}\n.icon.ticket:before {\n content: \"\\e93d\";\n}\n.icon.cart:before {\n content: \"\\e93e\";\n}\n.icon.coin-dollar:before {\n content: \"\\e93f\";\n}\n.icon.coin-euro:before {\n content: \"\\e940\";\n}\n.icon.coin-pound:before {\n content: \"\\e941\";\n}\n.icon.coin-yen:before {\n content: \"\\e942\";\n}\n.icon.credit-card:before {\n content: \"\\e943\";\n}\n.icon.calculator:before {\n content: \"\\e944\";\n}\n.icon.lifebuoy:before {\n content: \"\\e945\";\n}\n.icon.phone:before {\n content: \"\\e946\";\n}\n.icon.phone-hang-up:before {\n content: \"\\e947\";\n}\n.icon.address-book:before {\n content: \"\\e948\";\n}\n.icon.envelop:before {\n content: \"\\e949\";\n}\n.icon.pushpin:before {\n content: \"\\e94a\";\n}\n.icon.location:before {\n content: \"\\e94b\";\n}\n.icon.location2:before {\n content: \"\\e94c\";\n}\n.icon.compass:before {\n content: \"\\e94d\";\n}\n.icon.compass2:before {\n content: \"\\e94e\";\n}\n.icon.map:before {\n content: \"\\e94f\";\n}\n.icon.map2:before {\n content: \"\\e950\";\n}\n.icon.history:before {\n content: \"\\e951\";\n}\n.icon.clock:before {\n content: \"\\e952\";\n}\n.icon.clock2:before {\n content: \"\\e953\";\n}\n.icon.alarm:before {\n content: \"\\e954\";\n}\n.icon.bell:before {\n content: \"\\e955\";\n}\n.icon.stopwatch:before {\n content: \"\\e956\";\n}\n.icon.calendar:before {\n content: \"\\e957\";\n}\n.icon.printer:before {\n content: \"\\e958\";\n}\n.icon.keyboard:before {\n content: \"\\e959\";\n}\n.icon.display:before {\n content: \"\\e95a\";\n}\n.icon.laptop:before {\n content: \"\\e95b\";\n}\n.icon.mobile:before {\n content: \"\\e95c\";\n}\n.icon.mobile2:before {\n content: \"\\e95d\";\n}\n.icon.tablet:before {\n content: \"\\e95e\";\n}\n.icon.tv:before {\n content: \"\\e95f\";\n}\n.icon.drawer:before {\n content: \"\\e960\";\n}\n.icon.drawer2:before {\n content: \"\\e961\";\n}\n.icon.box-add:before {\n content: \"\\e962\";\n}\n.icon.box-remove:before {\n content: \"\\e963\";\n}\n.icon.download:before {\n content: \"\\e964\";\n}\n.icon.upload:before {\n content: \"\\e965\";\n}\n.icon.floppy-disk:before {\n content: \"\\e966\";\n}\n.icon.drive:before {\n content: \"\\e967\";\n}\n.icon.database:before {\n content: \"\\e968\";\n}\n.icon.undo:before {\n content: \"\\e969\";\n}\n.icon.redo:before {\n content: \"\\e96a\";\n}\n.icon.undo2:before {\n content: \"\\e96b\";\n}\n.icon.redo2:before {\n content: \"\\e96c\";\n}\n.icon.forward:before {\n content: \"\\e96d\";\n}\n.icon.reply:before {\n content: \"\\e96e\";\n}\n.icon.bubble:before {\n content: \"\\e96f\";\n}\n.icon.bubbles:before {\n content: \"\\e970\";\n}\n.icon.bubbles2:before {\n content: \"\\e971\";\n}\n.icon.bubble2:before {\n content: \"\\e972\";\n}\n.icon.bubbles3:before {\n content: \"\\e973\";\n}\n.icon.bubbles4:before {\n content: \"\\e974\";\n}\n.icon.user:before {\n content: \"\\e975\";\n}\n.icon.users:before {\n content: \"\\e976\";\n}\n.icon.user-plus:before {\n content: \"\\e977\";\n}\n.icon.user-minus:before {\n content: \"\\e978\";\n}\n.icon.user-check:before {\n content: \"\\e979\";\n}\n.icon.user-tie:before {\n content: \"\\e97a\";\n}\n.icon.quotes-left:before {\n content: \"\\e97b\";\n}\n.icon.quotes-right:before {\n content: \"\\e97c\";\n}\n.icon.hour-glass:before {\n content: \"\\e97d\";\n}\n.icon.spinner:before {\n content: \"\\e97e\";\n}\n.icon.spinner2:before {\n content: \"\\e97f\";\n}\n.icon.spinner3:before {\n content: \"\\e980\";\n}\n.icon.spinner4:before {\n content: \"\\e981\";\n}\n.icon.spinner5:before {\n content: \"\\e982\";\n}\n.icon.spinner6:before {\n content: \"\\e983\";\n}\n.icon.spinner7:before {\n content: \"\\e984\";\n}\n.icon.spinner8:before {\n content: \"\\e985\";\n}\n.icon.spinner9:before {\n content: \"\\e986\";\n}\n.icon.spinner10:before {\n content: \"\\e987\";\n}\n.icon.spinner11:before {\n content: \"\\e988\";\n}\n.icon.binoculars:before {\n content: \"\\e989\";\n}\n.icon.search:before {\n content: \"\\e98a\";\n}\n.icon.zoom-in:before {\n content: \"\\e98b\";\n}\n.icon.zoom-out:before {\n content: \"\\e98c\";\n}\n.icon.enlarge:before {\n content: \"\\e98d\";\n}\n.icon.shrink:before {\n content: \"\\e98e\";\n}\n.icon.enlarge2:before {\n content: \"\\e98f\";\n}\n.icon.shrink2:before {\n content: \"\\e990\";\n}\n.icon.key:before {\n content: \"\\e991\";\n}\n.icon.key2:before {\n content: \"\\e992\";\n}\n.icon.lock:before {\n content: \"\\e993\";\n}\n.icon.unlocked:before {\n content: \"\\e994\";\n}\n.icon.wrench:before {\n content: \"\\e995\";\n}\n.icon.equalizer:before {\n content: \"\\e996\";\n}\n.icon.equalizer2:before {\n content: \"\\e997\";\n}\n.icon.cog:before {\n content: \"\\e900\";\n}\n.icon.cogs:before {\n content: \"\\e998\";\n}\n.icon.hammer:before {\n content: \"\\e999\";\n}\n.icon.magic-wand:before {\n content: \"\\e99a\";\n}\n.icon.aid-kit:before {\n content: \"\\e99b\";\n}\n.icon.bug:before {\n content: \"\\e99c\";\n}\n.icon.pie-chart:before {\n content: \"\\e99d\";\n}\n.icon.stats-dots:before {\n content: \"\\e99e\";\n}\n.icon.stats-bars:before {\n content: \"\\e99f\";\n}\n.icon.stats-bars2:before {\n content: \"\\e9a0\";\n}\n.icon.trophy:before {\n content: \"\\e9a1\";\n}\n.icon.gift:before {\n content: \"\\e9a2\";\n}\n.icon.glass:before {\n content: \"\\e9a3\";\n}\n.icon.glass2:before {\n content: \"\\e9a4\";\n}\n.icon.mug:before {\n content: \"\\e9a5\";\n}\n.icon.spoon-knife:before {\n content: \"\\e9a6\";\n}\n.icon.leaf:before {\n content: \"\\e9a7\";\n}\n.icon.rocket:before {\n content: \"\\e9a8\";\n}\n.icon.meter:before {\n content: \"\\e9a9\";\n}\n.icon.meter2:before {\n content: \"\\e9aa\";\n}\n.icon.hammer2:before {\n content: \"\\e9ab\";\n}\n.icon.fire:before {\n content: \"\\e9ac\";\n}\n.icon.lab:before {\n content: \"\\e9ad\";\n}\n.icon.magnet:before {\n content: \"\\e9ae\";\n}\n.icon.bin:before {\n content: \"\\e9af\";\n}\n.icon.bin2:before {\n content: \"\\e9b0\";\n}\n.icon.briefcase:before {\n content: \"\\e9b1\";\n}\n.icon.airplane:before {\n content: \"\\e9b2\";\n}\n.icon.truck:before {\n content: \"\\e9b3\";\n}\n.icon.road:before {\n content: \"\\e9b4\";\n}\n.icon.accessibility:before {\n content: \"\\e9b5\";\n}\n.icon.target:before {\n content: \"\\e9b6\";\n}\n.icon.shield:before {\n content: \"\\e9b7\";\n}\n.icon.power:before {\n content: \"\\e9b8\";\n}\n.icon.switch:before {\n content: \"\\e9b9\";\n}\n.icon.power-cord:before {\n content: \"\\e9ba\";\n}\n.icon.clipboard:before {\n content: \"\\e9bb\";\n}\n.icon.list-numbered:before {\n content: \"\\e9bc\";\n}\n.icon.list:before {\n content: \"\\e9bd\";\n}\n.icon.list2:before {\n content: \"\\e9be\";\n}\n.icon.tree:before {\n content: \"\\e9bf\";\n}\n.icon.menu:before {\n content: \"\\e9c0\";\n}\n.icon.menu2:before {\n content: \"\\e9c1\";\n}\n.icon.menu3:before {\n content: \"\\e9c2\";\n}\n.icon.menu4:before {\n content: \"\\e9c3\";\n}\n.icon.cloud:before {\n content: \"\\e9c4\";\n}\n.icon.cloud-download:before {\n content: \"\\e9c5\";\n}\n.icon.cloud-upload:before {\n content: \"\\e9c6\";\n}\n.icon.cloud-check:before {\n content: \"\\e9c7\";\n}\n.icon.download2:before {\n content: \"\\e9c8\";\n}\n.icon.upload2:before {\n content: \"\\e9c9\";\n}\n.icon.download3:before {\n content: \"\\e9ca\";\n}\n.icon.upload3:before {\n content: \"\\e9cb\";\n}\n.icon.sphere:before {\n content: \"\\e9cc\";\n}\n.icon.earth:before {\n content: \"\\e9cd\";\n}\n.icon.link:before {\n content: \"\\e9ce\";\n}\n.icon.flag:before {\n content: \"\\e9cf\";\n}\n.icon.attachment:before {\n content: \"\\e9d0\";\n}\n.icon.eye:before {\n content: \"\\e9d1\";\n}\n.icon.eye-plus:before {\n content: \"\\e9d2\";\n}\n.icon.eye-minus:before {\n content: \"\\e9d3\";\n}\n.icon.eye-blocked:before {\n content: \"\\e9d4\";\n}\n.icon.bookmark:before {\n content: \"\\e9d5\";\n}\n.icon.bookmarks:before {\n content: \"\\e9d6\";\n}\n.icon.sun:before {\n content: \"\\e9d7\";\n}\n.icon.contrast:before {\n content: \"\\e9d8\";\n}\n.icon.brightness-contrast:before {\n content: \"\\e9d9\";\n}\n.icon.star-empty:before {\n content: \"\\e9da\";\n}\n.icon.star-half:before {\n content: \"\\e9db\";\n}\n.icon.star-full:before {\n content: \"\\e9dc\";\n}\n.icon.heart:before {\n content: \"\\e9dd\";\n}\n.icon.heart-broken:before {\n content: \"\\e9de\";\n}\n.icon.man:before {\n content: \"\\e9df\";\n}\n.icon.woman:before {\n content: \"\\e9e0\";\n}\n.icon.man-woman:before {\n content: \"\\e9e1\";\n}\n.icon.happy:before {\n content: \"\\e9e2\";\n}\n.icon.happy2:before {\n content: \"\\e9e3\";\n}\n.icon.smile:before {\n content: \"\\e9e4\";\n}\n.icon.smile2:before {\n content: \"\\e9e5\";\n}\n.icon.tongue:before {\n content: \"\\e9e6\";\n}\n.icon.tongue2:before {\n content: \"\\e9e7\";\n}\n.icon.sad:before {\n content: \"\\e9e8\";\n}\n.icon.sad2:before {\n content: \"\\e9e9\";\n}\n.icon.wink:before {\n content: \"\\e9ea\";\n}\n.icon.wink2:before {\n content: \"\\e9eb\";\n}\n.icon.grin:before {\n content: \"\\e9ec\";\n}\n.icon.grin2:before {\n content: \"\\e9ed\";\n}\n.icon.cool:before {\n content: \"\\e9ee\";\n}\n.icon.cool2:before {\n content: \"\\e9ef\";\n}\n.icon.angry:before {\n content: \"\\e9f0\";\n}\n.icon.angry2:before {\n content: \"\\e9f1\";\n}\n.icon.evil:before {\n content: \"\\e9f2\";\n}\n.icon.evil2:before {\n content: \"\\e9f3\";\n}\n.icon.shocked:before {\n content: \"\\e9f4\";\n}\n.icon.shocked2:before {\n content: \"\\e9f5\";\n}\n.icon.baffled:before {\n content: \"\\e9f6\";\n}\n.icon.baffled2:before {\n content: \"\\e9f7\";\n}\n.icon.confused:before {\n content: \"\\e9f8\";\n}\n.icon.confused2:before {\n content: \"\\e9f9\";\n}\n.icon.neutral:before {\n content: \"\\e9fa\";\n}\n.icon.neutral2:before {\n content: \"\\e9fb\";\n}\n.icon.hipster:before {\n content: \"\\e9fc\";\n}\n.icon.hipster2:before {\n content: \"\\e9fd\";\n}\n.icon.wondering:before {\n content: \"\\e9fe\";\n}\n.icon.wondering2:before {\n content: \"\\e9ff\";\n}\n.icon.sleepy:before {\n content: \"\\ea00\";\n}\n.icon.sleepy2:before {\n content: \"\\ea01\";\n}\n.icon.frustrated:before {\n content: \"\\ea02\";\n}\n.icon.frustrated2:before {\n content: \"\\ea03\";\n}\n.icon.crying:before {\n content: \"\\ea04\";\n}\n.icon.crying2:before {\n content: \"\\ea05\";\n}\n.icon.point-up:before {\n content: \"\\ea06\";\n}\n.icon.point-right:before {\n content: \"\\ea07\";\n}\n.icon.point-down:before {\n content: \"\\ea08\";\n}\n.icon.point-left:before {\n content: \"\\ea09\";\n}\n.icon.warning:before {\n content: \"\\ea0a\";\n}\n.icon.notification:before {\n content: \"\\ea0b\";\n}\n.icon.question:before {\n content: \"\\ea0c\";\n}\n.icon.plus:before {\n content: \"\\ea0d\";\n}\n.icon.minus:before {\n content: \"\\ea0e\";\n}\n.icon.info:before {\n content: \"\\ea0f\";\n}\n.icon.cancel-circle:before {\n content: \"\\ea10\";\n}\n.icon.blocked:before {\n content: \"\\ea11\";\n}\n.icon.cross:before {\n content: \"\\e80b\";\n}\n.icon.checkmark:before {\n content: \"\\e80c\";\n}\n.icon.checkmark2:before {\n content: \"\\ea12\";\n}\n.icon.spell-check:before {\n content: \"\\ea13\";\n}\n.icon.enter:before {\n content: \"\\ea14\";\n}\n.icon.exit:before {\n content: \"\\ea15\";\n}\n.icon.play2:before {\n content: \"\\ea16\";\n}\n.icon.pause:before {\n content: \"\\ea17\";\n}\n.icon.stop:before {\n content: \"\\ea18\";\n}\n.icon.previous:before {\n content: \"\\ea19\";\n}\n.icon.next:before {\n content: \"\\ea1a\";\n}\n.icon.backward:before {\n content: \"\\ea1b\";\n}\n.icon.forward2:before {\n content: \"\\ea1c\";\n}\n.icon.play3:before {\n content: \"\\ea1d\";\n}\n.icon.pause2:before {\n content: \"\\ea1e\";\n}\n.icon.stop2:before {\n content: \"\\ea1f\";\n}\n.icon.backward2:before {\n content: \"\\ea20\";\n}\n.icon.forward3:before {\n content: \"\\ea21\";\n}\n.icon.first:before {\n content: \"\\ea22\";\n}\n.icon.last:before {\n content: \"\\ea23\";\n}\n.icon.previous2:before {\n content: \"\\ea24\";\n}\n.icon.next2:before {\n content: \"\\ea25\";\n}\n.icon.eject:before {\n content: \"\\ea26\";\n}\n.icon.volume-high:before {\n content: \"\\ea27\";\n}\n.icon.volume-medium:before {\n content: \"\\ea28\";\n}\n.icon.volume-low:before {\n content: \"\\ea29\";\n}\n.icon.volume-mute:before {\n content: \"\\ea2a\";\n}\n.icon.volume-mute2:before {\n content: \"\\ea2b\";\n}\n.icon.volume-increase:before {\n content: \"\\ea2c\";\n}\n.icon.volume-decrease:before {\n content: \"\\ea2d\";\n}\n.icon.loop:before {\n content: \"\\ea2e\";\n}\n.icon.loop2:before {\n content: \"\\ea2f\";\n}\n.icon.infinite2:before {\n content: \"\\ea30\";\n}\n.icon.shuffle:before {\n content: \"\\ea31\";\n}\n.icon.arrow-up-left:before {\n content: \"\\ea32\";\n}\n.icon.arrow-up3:before {\n content: \"\\ea33\";\n}\n.icon.arrow-up-right:before {\n content: \"\\ea34\";\n}\n.icon.arrow-right3:before {\n content: \"\\ea35\";\n}\n.icon.arrow-down-right:before {\n content: \"\\ea36\";\n}\n.icon.arrow-down3:before {\n content: \"\\ea37\";\n}\n.icon.arrow-down-left:before {\n content: \"\\ea38\";\n}\n.icon.arrow-left3:before {\n content: \"\\ea39\";\n}\n.icon.arrow-up-left2:before {\n content: \"\\ea3a\";\n}\n.icon.arrow-up2:before {\n content: \"\\ea3b\";\n}\n.icon.arrow-up-right2:before {\n content: \"\\ea3c\";\n}\n.icon.arrow-right2:before {\n content: \"\\ea3d\";\n}\n.icon.arrow-down-right2:before {\n content: \"\\ea3e\";\n}\n.icon.arrow-down2:before {\n content: \"\\ea3f\";\n}\n.icon.arrow-down-left2:before {\n content: \"\\ea40\";\n}\n.icon.arrow-left2:before {\n content: \"\\ea41\";\n}\n.icon.circle-up:before {\n content: \"\\ea42\";\n}\n.icon.circle-right:before {\n content: \"\\ea43\";\n}\n.icon.circle-down:before {\n content: \"\\ea44\";\n}\n.icon.circle-left:before {\n content: \"\\ea45\";\n}\n.icon.tab:before {\n content: \"\\ea46\";\n}\n.icon.move-up:before {\n content: \"\\ea47\";\n}\n.icon.move-down:before {\n content: \"\\ea48\";\n}\n.icon.sort-alpha-asc:before {\n content: \"\\ea49\";\n}\n.icon.sort-alpha-desc:before {\n content: \"\\ea4a\";\n}\n.icon.sort-numeric-asc:before {\n content: \"\\ea4b\";\n}\n.icon.sort-numberic-desc:before {\n content: \"\\ea4c\";\n}\n.icon.sort-amount-asc:before {\n content: \"\\ea4d\";\n}\n.icon.sort-amount-desc:before {\n content: \"\\ea4e\";\n}\n.icon.command:before {\n content: \"\\ea4f\";\n}\n.icon.shift:before {\n content: \"\\ea50\";\n}\n.icon.ctrl:before {\n content: \"\\ea51\";\n}\n.icon.opt:before {\n content: \"\\ea52\";\n}\n.icon.checkbox-checked:before {\n content: \"\\ea53\";\n}\n.icon.checkbox-unchecked:before {\n content: \"\\ea54\";\n}\n.icon.radio-checked:before {\n content: \"\\ea55\";\n}\n.icon.radio-checked2:before {\n content: \"\\ea56\";\n}\n.icon.radio-unchecked:before {\n content: \"\\ea57\";\n}\n.icon.crop:before {\n content: \"\\ea58\";\n}\n.icon.make-group:before {\n content: \"\\ea59\";\n}\n.icon.ungroup:before {\n content: \"\\ea5a\";\n}\n.icon.scissors:before {\n content: \"\\ea5b\";\n}\n.icon.filter:before {\n content: \"\\ea5c\";\n}\n.icon.font:before {\n content: \"\\ea5d\";\n}\n.icon.ligature:before {\n content: \"\\ea5e\";\n}\n.icon.ligature2:before {\n content: \"\\ea5f\";\n}\n.icon.text-height:before {\n content: \"\\ea60\";\n}\n.icon.text-width:before {\n content: \"\\ea61\";\n}\n.icon.font-size:before {\n content: \"\\ea62\";\n}\n.icon.bold:before {\n content: \"\\ea63\";\n}\n.icon.underline:before {\n content: \"\\ea64\";\n}\n.icon.italic:before {\n content: \"\\ea65\";\n}\n.icon.strikethrough:before {\n content: \"\\ea66\";\n}\n.icon.omega:before {\n content: \"\\ea67\";\n}\n.icon.sigma:before {\n content: \"\\ea68\";\n}\n.icon.page-break:before {\n content: \"\\ea69\";\n}\n.icon.superscript:before {\n content: \"\\ea6a\";\n}\n.icon.subscript:before {\n content: \"\\ea6b\";\n}\n.icon.superscript2:before {\n content: \"\\ea6c\";\n}\n.icon.subscript2:before {\n content: \"\\ea6d\";\n}\n.icon.text-color:before {\n content: \"\\ea6e\";\n}\n.icon.pagebreak:before {\n content: \"\\ea6f\";\n}\n.icon.clear-formatting:before {\n content: \"\\ea70\";\n}\n.icon.table:before {\n content: \"\\ea71\";\n}\n.icon.table2:before {\n content: \"\\ea72\";\n}\n.icon.insert-template:before {\n content: \"\\ea73\";\n}\n.icon.pilcrow:before {\n content: \"\\ea74\";\n}\n.icon.ltr:before {\n content: \"\\ea75\";\n}\n.icon.rtl:before {\n content: \"\\ea76\";\n}\n.icon.section:before {\n content: \"\\ea77\";\n}\n.icon.paragraph-left:before {\n content: \"\\e903\";\n}\n.icon.paragraph-center:before {\n content: \"\\ea78\";\n}\n.icon.paragraph-right:before {\n content: \"\\ea79\";\n}\n.icon.paragraph-justify:before {\n content: \"\\ea7a\";\n}\n.icon.indent-increase:before {\n content: \"\\ea7b\";\n}\n.icon.indent-decrease:before {\n content: \"\\ea7c\";\n}\n.icon.share:before {\n content: \"\\ea7d\";\n}\n.icon.new-tab:before {\n content: \"\\ea7e\";\n}\n.icon.embed:before {\n content: \"\\ea7f\";\n}\n.icon.embed2:before {\n content: \"\\ea80\";\n}\n.icon.terminal:before {\n content: \"\\ea81\";\n}\n.icon.share2:before {\n content: \"\\ea82\";\n}\n.icon.mail:before {\n content: \"\\ea83\";\n}\n.icon.mail2:before {\n content: \"\\ea84\";\n}\n.icon.mail3:before {\n content: \"\\ea85\";\n}\n.icon.mail4:before {\n content: \"\\ea86\";\n}\n.icon.google2:before {\n content: \"\\ea87\";\n}\n.icon.google-plus:before {\n content: \"\\ea88\";\n}\n.icon.google-plus2:before {\n content: \"\\ea89\";\n}\n.icon.google-plus3:before {\n content: \"\\ea8a\";\n}\n.icon.google-drive:before {\n content: \"\\ea8b\";\n}\n.icon.facebook:before {\n content: \"\\e80d\";\n}\n.icon.facebook2:before {\n content: \"\\e80e\";\n}\n.icon.facebook3:before {\n content: \"\\e80f\";\n}\n.icon.ello:before {\n content: \"\\ea8c\";\n}\n.icon.instagram:before {\n content: \"\\ea8d\";\n}\n.icon.twitter:before {\n content: \"\\e810\";\n}\n.icon.twitter2:before {\n content: \"\\e811\";\n}\n.icon.twitter3:before {\n content: \"\\e812\";\n}\n.icon.feed2:before {\n content: \"\\ea8e\";\n}\n.icon.feed3:before {\n content: \"\\ea8f\";\n}\n.icon.feed4:before {\n content: \"\\ea90\";\n}\n.icon.youtube:before {\n content: \"\\ea91\";\n}\n.icon.youtube2:before {\n content: \"\\ea92\";\n}\n.icon.youtube3:before {\n content: \"\\ea93\";\n}\n.icon.youtube4:before {\n content: \"\\ea94\";\n}\n.icon.twitch:before {\n content: \"\\ea95\";\n}\n.icon.vimeo:before {\n content: \"\\ea96\";\n}\n.icon.vimeo2:before {\n content: \"\\ea97\";\n}\n.icon.vimeo3:before {\n content: \"\\ea98\";\n}\n.icon.lanyrd:before {\n content: \"\\ea99\";\n}\n.icon.flickr:before {\n content: \"\\ea9a\";\n}\n.icon.flickr2:before {\n content: \"\\ea9b\";\n}\n.icon.flickr3:before {\n content: \"\\ea9c\";\n}\n.icon.flickr4:before {\n content: \"\\ea9d\";\n}\n.icon.picassa:before {\n content: \"\\ea9e\";\n}\n.icon.picassa2:before {\n content: \"\\ea9f\";\n}\n.icon.dribbble:before {\n content: \"\\eaa0\";\n}\n.icon.dribbble2:before {\n content: \"\\eaa1\";\n}\n.icon.dribbble3:before {\n content: \"\\eaa2\";\n}\n.icon.forrst:before {\n content: \"\\eaa3\";\n}\n.icon.forrst2:before {\n content: \"\\eaa4\";\n}\n.icon.deviantart:before {\n content: \"\\eaa5\";\n}\n.icon.deviantart2:before {\n content: \"\\eaa6\";\n}\n.icon.steam:before {\n content: \"\\eaa7\";\n}\n.icon.steam2:before {\n content: \"\\eaa8\";\n}\n.icon.dropbox:before {\n content: \"\\eaa9\";\n}\n.icon.onedrive:before {\n content: \"\\eaaa\";\n}\n.icon.github:before {\n content: \"\\e813\";\n}\n.icon.github2:before {\n content: \"\\e814\";\n}\n.icon.github3:before {\n content: \"\\e815\";\n}\n.icon.github4:before {\n content: \"\\e816\";\n}\n.icon.github5:before {\n content: \"\\eaab\";\n}\n.icon.wordpress:before {\n content: \"\\eaac\";\n}\n.icon.wordpress2:before {\n content: \"\\eaad\";\n}\n.icon.joomla:before {\n content: \"\\eaae\";\n}\n.icon.blogger:before {\n content: \"\\eaaf\";\n}\n.icon.blogger2:before {\n content: \"\\eab0\";\n}\n.icon.tumblr:before {\n content: \"\\eab1\";\n}\n.icon.tumblr2:before {\n content: \"\\eab2\";\n}\n.icon.yahoo:before {\n content: \"\\eab3\";\n}\n.icon.tux:before {\n content: \"\\eab4\";\n}\n.icon.apple:before {\n content: \"\\eab5\";\n}\n.icon.finder:before {\n content: \"\\eab6\";\n}\n.icon.android:before {\n content: \"\\eab7\";\n}\n.icon.windows:before {\n content: \"\\eab8\";\n}\n.icon.windows8:before {\n content: \"\\eab9\";\n}\n.icon.soundcloud:before {\n content: \"\\eaba\";\n}\n.icon.soundcloud2:before {\n content: \"\\eabb\";\n}\n.icon.skype:before {\n content: \"\\eabc\";\n}\n.icon.reddit:before {\n content: \"\\eabd\";\n}\n.icon.linkedin:before {\n content: \"\\e817\";\n}\n.icon.linkedin2:before {\n content: \"\\e818\";\n}\n.icon.lastfm:before {\n content: \"\\eabe\";\n}\n.icon.lastfm2:before {\n content: \"\\eabf\";\n}\n.icon.delicious:before {\n content: \"\\eac0\";\n}\n.icon.stumbleupon:before {\n content: \"\\eac1\";\n}\n.icon.stumbleupon2:before {\n content: \"\\eac2\";\n}\n.icon.stackoverflow:before {\n content: \"\\e819\";\n}\n.icon.pinterest:before {\n content: \"\\eac3\";\n}\n.icon.pinterest2:before {\n content: \"\\eac4\";\n}\n.icon.xing:before {\n content: \"\\eac5\";\n}\n.icon.xing2:before {\n content: \"\\eac6\";\n}\n.icon.flattr:before {\n content: \"\\eac7\";\n}\n.icon.foursquare:before {\n content: \"\\eac8\";\n}\n.icon.paypal:before {\n content: \"\\eac9\";\n}\n.icon.paypal2:before {\n content: \"\\eaca\";\n}\n.icon.paypal3:before {\n content: \"\\eacb\";\n}\n.icon.yelp:before {\n content: \"\\eacc\";\n}\n.icon.file-pdf:before {\n content: \"\\eacd\";\n}\n.icon.file-openoffice:before {\n content: \"\\eace\";\n}\n.icon.file-word:before {\n content: \"\\eacf\";\n}\n.icon.file-excel:before {\n content: \"\\ead0\";\n}\n.icon.libreoffice:before {\n content: \"\\ead1\";\n}\n.icon.html5:before {\n content: \"\\ead2\";\n}\n.icon.html52:before {\n content: \"\\ead3\";\n}\n.icon.css3:before {\n content: \"\\ead4\";\n}\n.icon.git:before {\n content: \"\\ead5\";\n}\n.icon.svg:before {\n content: \"\\ead6\";\n}\n.icon.codepen:before {\n content: \"\\ead7\";\n}\n.icon.chrome:before {\n content: \"\\ead8\";\n}\n.icon.firefox:before {\n content: \"\\ead9\";\n}\n.icon.IE:before {\n content: \"\\eada\";\n}\n.icon.opera:before {\n content: \"\\eadb\";\n}\n.icon.safari:before {\n content: \"\\eadc\";\n}\n.icon.IcoMoon:before {\n content: \"\\eadd\";\n}","/*\n\n\tInfluxData Docs Theme File\n\n\t\"Alternate Theme\" (Light)\n*/\n\n//\n// Import Tools\n// --------------------------------------------------\n\n@import \"influx-palette.less\";\n@import \"variables.less\";\n@import \"icon-font.less\";\n\n//\n// Import Theme File\n// --------------------------------------------------\n@import \"theme-light.less\";\n#theme-switch-light { display: none; }\n\n//\n// Import UI Element styles\n// --------------------------------------------------\n@import \"normalize-3.0.2.less\";\n@import \"syntax.less\";\n@import \"layout.less\";\n\n//\n// Import Product Specific Themes\n// --------------------------------------------------\n@import \"theme-telegraf.less\";\n@import \"theme-chronograf.less\";\n@import \"theme-kapacitor.less\";\n@import \"theme-enterprise_kapacitor.less\";\n@import \"theme-flux.less\";\n",".klavika-font{font-family:Klavika-Light,'Helvetica Neue',Helvetica,Helvetica,Arial,Tahoma,Verdana,sans-serif;font-weight:200}@font-face{font-family:icomoon;src:url(../fonts/icomoon.eot?c3omf0);src:url(../fonts/icomoon.eot?c3omf0#iefix) format('embedded-opentype'),url(../fonts/icomoon.woff2?c3omf0) format('woff2'),url(../fonts/icomoon.ttf?c3omf0) format('truetype'),url(../fonts/icomoon.woff?c3omf0) format('woff'),url(../fonts/icomoon.svg?c3omf0#icomoon) format('svg');font-weight:400;font-style:normal}.icon{font-family:icomoon;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon.sun2:before{content:\"\\eae2\"}.icon.moon:before{content:\"\\eae3\"}.icon.logotype:before{content:\"\\e800\"}.icon.logo:before{content:\"\\e801\"}.icon.arrow-down:before{content:\"\\e802\"}.icon.arrow-up:before{content:\"\\e803\"}.icon.arrow-left:before{content:\"\\e804\"}.icon.arrow-right:before{content:\"\\e805\"}.icon.health:before{content:\"\\e806\"}.icon.lightning:before{content:\"\\e807\"}.icon.matrix:before{content:\"\\e808\"}.icon.cluster:before{content:\"\\e809\"}.icon.data:before{content:\"\\e80a\"}.icon.google:before{content:\"\\e81a\"}.icon.eyeball:before{content:\"\\e901\"}.icon.infinite:before{content:\"\\e902\"}.icon.dashboard:before{content:\"\\eade\"}.icon.analytics:before{content:\"\\eadf\"}.icon.cloud-stack:before{content:\"\\eae0\"}.icon.iot:before{content:\"\\eae1\"}.icon.home:before{content:\"\\e904\"}.icon.home2:before{content:\"\\e905\"}.icon.home3:before{content:\"\\e906\"}.icon.office:before{content:\"\\e907\"}.icon.newspaper:before{content:\"\\e908\"}.icon.pencil:before{content:\"\\e909\"}.icon.pencil2:before{content:\"\\e90a\"}.icon.quill:before{content:\"\\e90b\"}.icon.pen:before{content:\"\\e90c\"}.icon.blog:before{content:\"\\e90d\"}.icon.eyedropper:before{content:\"\\e90e\"}.icon.droplet:before{content:\"\\e90f\"}.icon.paint-format:before{content:\"\\e910\"}.icon.image:before{content:\"\\e911\"}.icon.images:before{content:\"\\e912\"}.icon.camera:before{content:\"\\e913\"}.icon.headphones:before{content:\"\\e914\"}.icon.music:before{content:\"\\e915\"}.icon.play:before{content:\"\\e916\"}.icon.film:before{content:\"\\e917\"}.icon.video-camera:before{content:\"\\e918\"}.icon.dice:before{content:\"\\e919\"}.icon.pacman:before{content:\"\\e91a\"}.icon.spades:before{content:\"\\e91b\"}.icon.clubs:before{content:\"\\e91c\"}.icon.diamonds:before{content:\"\\e91d\"}.icon.bullhorn:before{content:\"\\e91e\"}.icon.connection:before{content:\"\\e91f\"}.icon.podcast:before{content:\"\\e920\"}.icon.feed:before{content:\"\\e921\"}.icon.mic:before{content:\"\\e922\"}.icon.book:before{content:\"\\e923\"}.icon.books:before{content:\"\\e924\"}.icon.library:before{content:\"\\e925\"}.icon.file-text:before{content:\"\\e926\"}.icon.profile:before{content:\"\\e927\"}.icon.file-empty:before{content:\"\\e928\"}.icon.files-empty:before{content:\"\\e929\"}.icon.file-text2:before{content:\"\\e92a\"}.icon.file-picture:before{content:\"\\e92b\"}.icon.file-music:before{content:\"\\e92c\"}.icon.file-play:before{content:\"\\e92d\"}.icon.file-video:before{content:\"\\e92e\"}.icon.file-zip:before{content:\"\\e92f\"}.icon.copy:before{content:\"\\e930\"}.icon.paste:before{content:\"\\e931\"}.icon.stack:before{content:\"\\e932\"}.icon.folder:before{content:\"\\e933\"}.icon.folder-open:before{content:\"\\e934\"}.icon.folder-plus:before{content:\"\\e935\"}.icon.folder-minus:before{content:\"\\e936\"}.icon.folder-download:before{content:\"\\e937\"}.icon.folder-upload:before{content:\"\\e938\"}.icon.price-tag:before{content:\"\\e939\"}.icon.price-tags:before{content:\"\\e93a\"}.icon.barcode:before{content:\"\\e93b\"}.icon.qrcode:before{content:\"\\e93c\"}.icon.ticket:before{content:\"\\e93d\"}.icon.cart:before{content:\"\\e93e\"}.icon.coin-dollar:before{content:\"\\e93f\"}.icon.coin-euro:before{content:\"\\e940\"}.icon.coin-pound:before{content:\"\\e941\"}.icon.coin-yen:before{content:\"\\e942\"}.icon.credit-card:before{content:\"\\e943\"}.icon.calculator:before{content:\"\\e944\"}.icon.lifebuoy:before{content:\"\\e945\"}.icon.phone:before{content:\"\\e946\"}.icon.phone-hang-up:before{content:\"\\e947\"}.icon.address-book:before{content:\"\\e948\"}.icon.envelop:before{content:\"\\e949\"}.icon.pushpin:before{content:\"\\e94a\"}.icon.location:before{content:\"\\e94b\"}.icon.location2:before{content:\"\\e94c\"}.icon.compass:before{content:\"\\e94d\"}.icon.compass2:before{content:\"\\e94e\"}.icon.map:before{content:\"\\e94f\"}.icon.map2:before{content:\"\\e950\"}.icon.history:before{content:\"\\e951\"}.icon.clock:before{content:\"\\e952\"}.icon.clock2:before{content:\"\\e953\"}.icon.alarm:before{content:\"\\e954\"}.icon.bell:before{content:\"\\e955\"}.icon.stopwatch:before{content:\"\\e956\"}.icon.calendar:before{content:\"\\e957\"}.icon.printer:before{content:\"\\e958\"}.icon.keyboard:before{content:\"\\e959\"}.icon.display:before{content:\"\\e95a\"}.icon.laptop:before{content:\"\\e95b\"}.icon.mobile:before{content:\"\\e95c\"}.icon.mobile2:before{content:\"\\e95d\"}.icon.tablet:before{content:\"\\e95e\"}.icon.tv:before{content:\"\\e95f\"}.icon.drawer:before{content:\"\\e960\"}.icon.drawer2:before{content:\"\\e961\"}.icon.box-add:before{content:\"\\e962\"}.icon.box-remove:before{content:\"\\e963\"}.icon.download:before{content:\"\\e964\"}.icon.upload:before{content:\"\\e965\"}.icon.floppy-disk:before{content:\"\\e966\"}.icon.drive:before{content:\"\\e967\"}.icon.database:before{content:\"\\e968\"}.icon.undo:before{content:\"\\e969\"}.icon.redo:before{content:\"\\e96a\"}.icon.undo2:before{content:\"\\e96b\"}.icon.redo2:before{content:\"\\e96c\"}.icon.forward:before{content:\"\\e96d\"}.icon.reply:before{content:\"\\e96e\"}.icon.bubble:before{content:\"\\e96f\"}.icon.bubbles:before{content:\"\\e970\"}.icon.bubbles2:before{content:\"\\e971\"}.icon.bubble2:before{content:\"\\e972\"}.icon.bubbles3:before{content:\"\\e973\"}.icon.bubbles4:before{content:\"\\e974\"}.icon.user:before{content:\"\\e975\"}.icon.users:before{content:\"\\e976\"}.icon.user-plus:before{content:\"\\e977\"}.icon.user-minus:before{content:\"\\e978\"}.icon.user-check:before{content:\"\\e979\"}.icon.user-tie:before{content:\"\\e97a\"}.icon.quotes-left:before{content:\"\\e97b\"}.icon.quotes-right:before{content:\"\\e97c\"}.icon.hour-glass:before{content:\"\\e97d\"}.icon.spinner:before{content:\"\\e97e\"}.icon.spinner2:before{content:\"\\e97f\"}.icon.spinner3:before{content:\"\\e980\"}.icon.spinner4:before{content:\"\\e981\"}.icon.spinner5:before{content:\"\\e982\"}.icon.spinner6:before{content:\"\\e983\"}.icon.spinner7:before{content:\"\\e984\"}.icon.spinner8:before{content:\"\\e985\"}.icon.spinner9:before{content:\"\\e986\"}.icon.spinner10:before{content:\"\\e987\"}.icon.spinner11:before{content:\"\\e988\"}.icon.binoculars:before{content:\"\\e989\"}.icon.search:before{content:\"\\e98a\"}.icon.zoom-in:before{content:\"\\e98b\"}.icon.zoom-out:before{content:\"\\e98c\"}.icon.enlarge:before{content:\"\\e98d\"}.icon.shrink:before{content:\"\\e98e\"}.icon.enlarge2:before{content:\"\\e98f\"}.icon.shrink2:before{content:\"\\e990\"}.icon.key:before{content:\"\\e991\"}.icon.key2:before{content:\"\\e992\"}.icon.lock:before{content:\"\\e993\"}.icon.unlocked:before{content:\"\\e994\"}.icon.wrench:before{content:\"\\e995\"}.icon.equalizer:before{content:\"\\e996\"}.icon.equalizer2:before{content:\"\\e997\"}.icon.cog:before{content:\"\\e900\"}.icon.cogs:before{content:\"\\e998\"}.icon.hammer:before{content:\"\\e999\"}.icon.magic-wand:before{content:\"\\e99a\"}.icon.aid-kit:before{content:\"\\e99b\"}.icon.bug:before{content:\"\\e99c\"}.icon.pie-chart:before{content:\"\\e99d\"}.icon.stats-dots:before{content:\"\\e99e\"}.icon.stats-bars:before{content:\"\\e99f\"}.icon.stats-bars2:before{content:\"\\e9a0\"}.icon.trophy:before{content:\"\\e9a1\"}.icon.gift:before{content:\"\\e9a2\"}.icon.glass:before{content:\"\\e9a3\"}.icon.glass2:before{content:\"\\e9a4\"}.icon.mug:before{content:\"\\e9a5\"}.icon.spoon-knife:before{content:\"\\e9a6\"}.icon.leaf:before{content:\"\\e9a7\"}.icon.rocket:before{content:\"\\e9a8\"}.icon.meter:before{content:\"\\e9a9\"}.icon.meter2:before{content:\"\\e9aa\"}.icon.hammer2:before{content:\"\\e9ab\"}.icon.fire:before{content:\"\\e9ac\"}.icon.lab:before{content:\"\\e9ad\"}.icon.magnet:before{content:\"\\e9ae\"}.icon.bin:before{content:\"\\e9af\"}.icon.bin2:before{content:\"\\e9b0\"}.icon.briefcase:before{content:\"\\e9b1\"}.icon.airplane:before{content:\"\\e9b2\"}.icon.truck:before{content:\"\\e9b3\"}.icon.road:before{content:\"\\e9b4\"}.icon.accessibility:before{content:\"\\e9b5\"}.icon.target:before{content:\"\\e9b6\"}.icon.shield:before{content:\"\\e9b7\"}.icon.power:before{content:\"\\e9b8\"}.icon.switch:before{content:\"\\e9b9\"}.icon.power-cord:before{content:\"\\e9ba\"}.icon.clipboard:before{content:\"\\e9bb\"}.icon.list-numbered:before{content:\"\\e9bc\"}.icon.list:before{content:\"\\e9bd\"}.icon.list2:before{content:\"\\e9be\"}.icon.tree:before{content:\"\\e9bf\"}.icon.menu:before{content:\"\\e9c0\"}.icon.menu2:before{content:\"\\e9c1\"}.icon.menu3:before{content:\"\\e9c2\"}.icon.menu4:before{content:\"\\e9c3\"}.icon.cloud:before{content:\"\\e9c4\"}.icon.cloud-download:before{content:\"\\e9c5\"}.icon.cloud-upload:before{content:\"\\e9c6\"}.icon.cloud-check:before{content:\"\\e9c7\"}.icon.download2:before{content:\"\\e9c8\"}.icon.upload2:before{content:\"\\e9c9\"}.icon.download3:before{content:\"\\e9ca\"}.icon.upload3:before{content:\"\\e9cb\"}.icon.sphere:before{content:\"\\e9cc\"}.icon.earth:before{content:\"\\e9cd\"}.icon.link:before{content:\"\\e9ce\"}.icon.flag:before{content:\"\\e9cf\"}.icon.attachment:before{content:\"\\e9d0\"}.icon.eye:before{content:\"\\e9d1\"}.icon.eye-plus:before{content:\"\\e9d2\"}.icon.eye-minus:before{content:\"\\e9d3\"}.icon.eye-blocked:before{content:\"\\e9d4\"}.icon.bookmark:before{content:\"\\e9d5\"}.icon.bookmarks:before{content:\"\\e9d6\"}.icon.sun:before{content:\"\\e9d7\"}.icon.contrast:before{content:\"\\e9d8\"}.icon.brightness-contrast:before{content:\"\\e9d9\"}.icon.star-empty:before{content:\"\\e9da\"}.icon.star-half:before{content:\"\\e9db\"}.icon.star-full:before{content:\"\\e9dc\"}.icon.heart:before{content:\"\\e9dd\"}.icon.heart-broken:before{content:\"\\e9de\"}.icon.man:before{content:\"\\e9df\"}.icon.woman:before{content:\"\\e9e0\"}.icon.man-woman:before{content:\"\\e9e1\"}.icon.happy:before{content:\"\\e9e2\"}.icon.happy2:before{content:\"\\e9e3\"}.icon.smile:before{content:\"\\e9e4\"}.icon.smile2:before{content:\"\\e9e5\"}.icon.tongue:before{content:\"\\e9e6\"}.icon.tongue2:before{content:\"\\e9e7\"}.icon.sad:before{content:\"\\e9e8\"}.icon.sad2:before{content:\"\\e9e9\"}.icon.wink:before{content:\"\\e9ea\"}.icon.wink2:before{content:\"\\e9eb\"}.icon.grin:before{content:\"\\e9ec\"}.icon.grin2:before{content:\"\\e9ed\"}.icon.cool:before{content:\"\\e9ee\"}.icon.cool2:before{content:\"\\e9ef\"}.icon.angry:before{content:\"\\e9f0\"}.icon.angry2:before{content:\"\\e9f1\"}.icon.evil:before{content:\"\\e9f2\"}.icon.evil2:before{content:\"\\e9f3\"}.icon.shocked:before{content:\"\\e9f4\"}.icon.shocked2:before{content:\"\\e9f5\"}.icon.baffled:before{content:\"\\e9f6\"}.icon.baffled2:before{content:\"\\e9f7\"}.icon.confused:before{content:\"\\e9f8\"}.icon.confused2:before{content:\"\\e9f9\"}.icon.neutral:before{content:\"\\e9fa\"}.icon.neutral2:before{content:\"\\e9fb\"}.icon.hipster:before{content:\"\\e9fc\"}.icon.hipster2:before{content:\"\\e9fd\"}.icon.wondering:before{content:\"\\e9fe\"}.icon.wondering2:before{content:\"\\e9ff\"}.icon.sleepy:before{content:\"\\ea00\"}.icon.sleepy2:before{content:\"\\ea01\"}.icon.frustrated:before{content:\"\\ea02\"}.icon.frustrated2:before{content:\"\\ea03\"}.icon.crying:before{content:\"\\ea04\"}.icon.crying2:before{content:\"\\ea05\"}.icon.point-up:before{content:\"\\ea06\"}.icon.point-right:before{content:\"\\ea07\"}.icon.point-down:before{content:\"\\ea08\"}.icon.point-left:before{content:\"\\ea09\"}.icon.warning:before{content:\"\\ea0a\"}.icon.notification:before{content:\"\\ea0b\"}.icon.question:before{content:\"\\ea0c\"}.icon.plus:before{content:\"\\ea0d\"}.icon.minus:before{content:\"\\ea0e\"}.icon.info:before{content:\"\\ea0f\"}.icon.cancel-circle:before{content:\"\\ea10\"}.icon.blocked:before{content:\"\\ea11\"}.icon.cross:before{content:\"\\e80b\"}.icon.checkmark:before{content:\"\\e80c\"}.icon.checkmark2:before{content:\"\\ea12\"}.icon.spell-check:before{content:\"\\ea13\"}.icon.enter:before{content:\"\\ea14\"}.icon.exit:before{content:\"\\ea15\"}.icon.play2:before{content:\"\\ea16\"}.icon.pause:before{content:\"\\ea17\"}.icon.stop:before{content:\"\\ea18\"}.icon.previous:before{content:\"\\ea19\"}.icon.next:before{content:\"\\ea1a\"}.icon.backward:before{content:\"\\ea1b\"}.icon.forward2:before{content:\"\\ea1c\"}.icon.play3:before{content:\"\\ea1d\"}.icon.pause2:before{content:\"\\ea1e\"}.icon.stop2:before{content:\"\\ea1f\"}.icon.backward2:before{content:\"\\ea20\"}.icon.forward3:before{content:\"\\ea21\"}.icon.first:before{content:\"\\ea22\"}.icon.last:before{content:\"\\ea23\"}.icon.previous2:before{content:\"\\ea24\"}.icon.next2:before{content:\"\\ea25\"}.icon.eject:before{content:\"\\ea26\"}.icon.volume-high:before{content:\"\\ea27\"}.icon.volume-medium:before{content:\"\\ea28\"}.icon.volume-low:before{content:\"\\ea29\"}.icon.volume-mute:before{content:\"\\ea2a\"}.icon.volume-mute2:before{content:\"\\ea2b\"}.icon.volume-increase:before{content:\"\\ea2c\"}.icon.volume-decrease:before{content:\"\\ea2d\"}.icon.loop:before{content:\"\\ea2e\"}.icon.loop2:before{content:\"\\ea2f\"}.icon.infinite2:before{content:\"\\ea30\"}.icon.shuffle:before{content:\"\\ea31\"}.icon.arrow-up-left:before{content:\"\\ea32\"}.icon.arrow-up3:before{content:\"\\ea33\"}.icon.arrow-up-right:before{content:\"\\ea34\"}.icon.arrow-right3:before{content:\"\\ea35\"}.icon.arrow-down-right:before{content:\"\\ea36\"}.icon.arrow-down3:before{content:\"\\ea37\"}.icon.arrow-down-left:before{content:\"\\ea38\"}.icon.arrow-left3:before{content:\"\\ea39\"}.icon.arrow-up-left2:before{content:\"\\ea3a\"}.icon.arrow-up2:before{content:\"\\ea3b\"}.icon.arrow-up-right2:before{content:\"\\ea3c\"}.icon.arrow-right2:before{content:\"\\ea3d\"}.icon.arrow-down-right2:before{content:\"\\ea3e\"}.icon.arrow-down2:before{content:\"\\ea3f\"}.icon.arrow-down-left2:before{content:\"\\ea40\"}.icon.arrow-left2:before{content:\"\\ea41\"}.icon.circle-up:before{content:\"\\ea42\"}.icon.circle-right:before{content:\"\\ea43\"}.icon.circle-down:before{content:\"\\ea44\"}.icon.circle-left:before{content:\"\\ea45\"}.icon.tab:before{content:\"\\ea46\"}.icon.move-up:before{content:\"\\ea47\"}.icon.move-down:before{content:\"\\ea48\"}.icon.sort-alpha-asc:before{content:\"\\ea49\"}.icon.sort-alpha-desc:before{content:\"\\ea4a\"}.icon.sort-numeric-asc:before{content:\"\\ea4b\"}.icon.sort-numberic-desc:before{content:\"\\ea4c\"}.icon.sort-amount-asc:before{content:\"\\ea4d\"}.icon.sort-amount-desc:before{content:\"\\ea4e\"}.icon.command:before{content:\"\\ea4f\"}.icon.shift:before{content:\"\\ea50\"}.icon.ctrl:before{content:\"\\ea51\"}.icon.opt:before{content:\"\\ea52\"}.icon.checkbox-checked:before{content:\"\\ea53\"}.icon.checkbox-unchecked:before{content:\"\\ea54\"}.icon.radio-checked:before{content:\"\\ea55\"}.icon.radio-checked2:before{content:\"\\ea56\"}.icon.radio-unchecked:before{content:\"\\ea57\"}.icon.crop:before{content:\"\\ea58\"}.icon.make-group:before{content:\"\\ea59\"}.icon.ungroup:before{content:\"\\ea5a\"}.icon.scissors:before{content:\"\\ea5b\"}.icon.filter:before{content:\"\\ea5c\"}.icon.font:before{content:\"\\ea5d\"}.icon.ligature:before{content:\"\\ea5e\"}.icon.ligature2:before{content:\"\\ea5f\"}.icon.text-height:before{content:\"\\ea60\"}.icon.text-width:before{content:\"\\ea61\"}.icon.font-size:before{content:\"\\ea62\"}.icon.bold:before{content:\"\\ea63\"}.icon.underline:before{content:\"\\ea64\"}.icon.italic:before{content:\"\\ea65\"}.icon.strikethrough:before{content:\"\\ea66\"}.icon.omega:before{content:\"\\ea67\"}.icon.sigma:before{content:\"\\ea68\"}.icon.page-break:before{content:\"\\ea69\"}.icon.superscript:before{content:\"\\ea6a\"}.icon.subscript:before{content:\"\\ea6b\"}.icon.superscript2:before{content:\"\\ea6c\"}.icon.subscript2:before{content:\"\\ea6d\"}.icon.text-color:before{content:\"\\ea6e\"}.icon.pagebreak:before{content:\"\\ea6f\"}.icon.clear-formatting:before{content:\"\\ea70\"}.icon.table:before{content:\"\\ea71\"}.icon.table2:before{content:\"\\ea72\"}.icon.insert-template:before{content:\"\\ea73\"}.icon.pilcrow:before{content:\"\\ea74\"}.icon.ltr:before{content:\"\\ea75\"}.icon.rtl:before{content:\"\\ea76\"}.icon.section:before{content:\"\\ea77\"}.icon.paragraph-left:before{content:\"\\e903\"}.icon.paragraph-center:before{content:\"\\ea78\"}.icon.paragraph-right:before{content:\"\\ea79\"}.icon.paragraph-justify:before{content:\"\\ea7a\"}.icon.indent-increase:before{content:\"\\ea7b\"}.icon.indent-decrease:before{content:\"\\ea7c\"}.icon.share:before{content:\"\\ea7d\"}.icon.new-tab:before{content:\"\\ea7e\"}.icon.embed:before{content:\"\\ea7f\"}.icon.embed2:before{content:\"\\ea80\"}.icon.terminal:before{content:\"\\ea81\"}.icon.share2:before{content:\"\\ea82\"}.icon.mail:before{content:\"\\ea83\"}.icon.mail2:before{content:\"\\ea84\"}.icon.mail3:before{content:\"\\ea85\"}.icon.mail4:before{content:\"\\ea86\"}.icon.google2:before{content:\"\\ea87\"}.icon.google-plus:before{content:\"\\ea88\"}.icon.google-plus2:before{content:\"\\ea89\"}.icon.google-plus3:before{content:\"\\ea8a\"}.icon.google-drive:before{content:\"\\ea8b\"}.icon.facebook:before{content:\"\\e80d\"}.icon.facebook2:before{content:\"\\e80e\"}.icon.facebook3:before{content:\"\\e80f\"}.icon.ello:before{content:\"\\ea8c\"}.icon.instagram:before{content:\"\\ea8d\"}.icon.twitter:before{content:\"\\e810\"}.icon.twitter2:before{content:\"\\e811\"}.icon.twitter3:before{content:\"\\e812\"}.icon.feed2:before{content:\"\\ea8e\"}.icon.feed3:before{content:\"\\ea8f\"}.icon.feed4:before{content:\"\\ea90\"}.icon.youtube:before{content:\"\\ea91\"}.icon.youtube2:before{content:\"\\ea92\"}.icon.youtube3:before{content:\"\\ea93\"}.icon.youtube4:before{content:\"\\ea94\"}.icon.twitch:before{content:\"\\ea95\"}.icon.vimeo:before{content:\"\\ea96\"}.icon.vimeo2:before{content:\"\\ea97\"}.icon.vimeo3:before{content:\"\\ea98\"}.icon.lanyrd:before{content:\"\\ea99\"}.icon.flickr:before{content:\"\\ea9a\"}.icon.flickr2:before{content:\"\\ea9b\"}.icon.flickr3:before{content:\"\\ea9c\"}.icon.flickr4:before{content:\"\\ea9d\"}.icon.picassa:before{content:\"\\ea9e\"}.icon.picassa2:before{content:\"\\ea9f\"}.icon.dribbble:before{content:\"\\eaa0\"}.icon.dribbble2:before{content:\"\\eaa1\"}.icon.dribbble3:before{content:\"\\eaa2\"}.icon.forrst:before{content:\"\\eaa3\"}.icon.forrst2:before{content:\"\\eaa4\"}.icon.deviantart:before{content:\"\\eaa5\"}.icon.deviantart2:before{content:\"\\eaa6\"}.icon.steam:before{content:\"\\eaa7\"}.icon.steam2:before{content:\"\\eaa8\"}.icon.dropbox:before{content:\"\\eaa9\"}.icon.onedrive:before{content:\"\\eaaa\"}.icon.github:before{content:\"\\e813\"}.icon.github2:before{content:\"\\e814\"}.icon.github3:before{content:\"\\e815\"}.icon.github4:before{content:\"\\e816\"}.icon.github5:before{content:\"\\eaab\"}.icon.wordpress:before{content:\"\\eaac\"}.icon.wordpress2:before{content:\"\\eaad\"}.icon.joomla:before{content:\"\\eaae\"}.icon.blogger:before{content:\"\\eaaf\"}.icon.blogger2:before{content:\"\\eab0\"}.icon.tumblr:before{content:\"\\eab1\"}.icon.tumblr2:before{content:\"\\eab2\"}.icon.yahoo:before{content:\"\\eab3\"}.icon.tux:before{content:\"\\eab4\"}.icon.apple:before{content:\"\\eab5\"}.icon.finder:before{content:\"\\eab6\"}.icon.android:before{content:\"\\eab7\"}.icon.windows:before{content:\"\\eab8\"}.icon.windows8:before{content:\"\\eab9\"}.icon.soundcloud:before{content:\"\\eaba\"}.icon.soundcloud2:before{content:\"\\eabb\"}.icon.skype:before{content:\"\\eabc\"}.icon.reddit:before{content:\"\\eabd\"}.icon.linkedin:before{content:\"\\e817\"}.icon.linkedin2:before{content:\"\\e818\"}.icon.lastfm:before{content:\"\\eabe\"}.icon.lastfm2:before{content:\"\\eabf\"}.icon.delicious:before{content:\"\\eac0\"}.icon.stumbleupon:before{content:\"\\eac1\"}.icon.stumbleupon2:before{content:\"\\eac2\"}.icon.stackoverflow:before{content:\"\\e819\"}.icon.pinterest:before{content:\"\\eac3\"}.icon.pinterest2:before{content:\"\\eac4\"}.icon.xing:before{content:\"\\eac5\"}.icon.xing2:before{content:\"\\eac6\"}.icon.flattr:before{content:\"\\eac7\"}.icon.foursquare:before{content:\"\\eac8\"}.icon.paypal:before{content:\"\\eac9\"}.icon.paypal2:before{content:\"\\eaca\"}.icon.paypal3:before{content:\"\\eacb\"}.icon.yelp:before{content:\"\\eacc\"}.icon.file-pdf:before{content:\"\\eacd\"}.icon.file-openoffice:before{content:\"\\eace\"}.icon.file-word:before{content:\"\\eacf\"}.icon.file-excel:before{content:\"\\ead0\"}.icon.libreoffice:before{content:\"\\ead1\"}.icon.html5:before{content:\"\\ead2\"}.icon.html52:before{content:\"\\ead3\"}.icon.css3:before{content:\"\\ead4\"}.icon.git:before{content:\"\\ead5\"}.icon.svg:before{content:\"\\ead6\"}.icon.codepen:before{content:\"\\ead7\"}.icon.chrome:before{content:\"\\ead8\"}.icon.firefox:before{content:\"\\ead9\"}.icon.IE:before{content:\"\\eada\"}.icon.opera:before{content:\"\\eadb\"}.icon.safari:before{content:\"\\eadc\"}.icon.IcoMoon:before{content:\"\\eadd\"}#theme-switch-light{display:none}/*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0;font-family:Roboto,Helvetica,Arial,Tahoma,Verdana,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}code[class*=language-],pre[class*=language-]{direction:ltr;text-align:left;white-space:pre;white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-o-pre-wrap;word-spacing:normal;word-break:normal;word-wrap:normal;-moz-tab-size:1;-o-tab-size:1;tab-size:1;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow:none}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{overflow:auto}:not(pre)>code[class*=language-]{white-space:normal}.highlight{color:#7a65f2}.highlight .gh,.highlight .go,.highlight .na,.highlight .nt,.highlight .nv,.highlight .ow{color:#7a65f2}.highlight .c,.highlight .c1,.highlight .ch,.highlight .cm,.highlight .cpf,.highlight .cs,.highlight .w{color:#b1b6ff}.highlight .gi{background-color:#b1b6ff}.highlight .k,.highlight .kc,.highlight .kd,.highlight .kn,.highlight .kp,.highlight .kr,.highlight .nn{color:#4591ed}.highlight .bp,.highlight .cp,.highlight .dl,.highlight .gt,.highlight .gu,.highlight .kt,.highlight .nb,.highlight .nc,.highlight .no,.highlight .s1,.highlight .s2,.highlight .sa,.highlight .sb,.highlight .sc,.highlight .sd,.highlight .se,.highlight .sh,.highlight .sr,.highlight .sx{color:#0e9e75}.highlight .err,.highlight .fm,.highlight .gd,.highlight .gr,.highlight .nd,.highlight .ne,.highlight .nf,.highlight .nl,.highlight .si{color:#bf3d5e}.highlight .il,.highlight .m,.highlight .mb,.highlight .mf,.highlight .mh,.highlight .mi,.highlight .mo,.highlight .ni,.highlight .vc,.highlight .vg,.highlight .vi,.highlight .vm{color:#e24bbb}.highlight .gp,.highlight .o{color:#22adf6}.highlight .ss{color:#e90}.highlight .cs .gh,.highlight .gp,.highlight .gs,.highlight .gu,.highlight .k,.highlight .kc,.highlight .kd,.highlight .kn,.highlight .kp,.highlight .kr,.highlight .kt,.highlight .nc,.highlight .ne,.highlight .ni,.highlight .nn .nt,.highlight .ow,.highlight .se{font-weight:700}.highlight .c,.highlight .c1,.highlight .ch,.highlight .cm,.highlight .cpf,.highlight .cs,.highlight .ge,.highlight .sd,.highlight .w{font-style:italic}@font-face{font-family:Klavika-Light;src:url(../fonts/KlavikaLight-ItalicTF.otf);font-weight:200;font-style:italic}@font-face{font-family:Klavika-Bold;src:url(../fonts/KlavikaBoldBoldItalic.otf);font-weight:700;font-style:italic}html{overflow:auto}body,html{width:100%;height:100%;background-color:#fff;-webkit-overflow-scrolling:touch}body{color:#757888;line-height:1;overflow:auto}*{box-sizing:border-box}a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0;font-size:100%;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:'';content:none}table{border-collapse:collapse;border-spacing:0}.navbar{top:0;left:0;font-size:1rem;height:4rem;width:100%;background-color:#383846;z-index:150;position:relative}.navbar--hamburger,.navbar--logo,.navbar--product-dropdown,.navbar--search,.theme-switcher{position:absolute}.navbar--logo{left:1em;top:1.05em}.navbar--logo a{font-size:1.5rem;color:#f6f6f8;transition:color .25s ease}.navbar--logo a:hover{color:#fff}.navbar--logo .divider{border-left:1px solid #f6f6f8;margin:0 .8rem 0 .5rem;vertical-align:text-top;opacity:.35;line-height:1.15em}.navbar--logo .navbar--docs{font-size:1.3rem}.navbar--hamburger{width:4rem;height:4rem;right:0}.navbar--hamburger .navbar--hamburger-bar{width:1.2rem;height:2px;background-color:#f6f6f8;border-radius:1px;position:absolute;left:50%;transition:all .3s ease}.navbar--hamburger .navbar--hamburger-bar.top{top:40%;transform:translate(-50%,-50%)}.navbar--hamburger .navbar--hamburger-bar.middle{top:50%;transform:translate(-50%,-50%)}.navbar--hamburger .navbar--hamburger-bar.bottom{top:60%;transform:translate(-50%,-50%)}.navbar--hamburger:hover{cursor:pointer}.navbar--hamburger:hover .navbar--hamburger-bar{background-color:#fff}.navbar--hamburger.open .navbar--hamburger-bar.top{top:50%;transform:translate(-50%,-50%) rotate(45deg)}.navbar--hamburger.open .navbar--hamburger-bar.middle{opacity:0}.navbar--hamburger.open .navbar--hamburger-bar.bottom{top:50%;transform:translate(-50%,-50%) rotate(-45deg)}.navbar--product-menu{width:100%;position:absolute;top:.5em;height:auto;opacity:0;transition:opacity .25s ease;background:#4591ed;background:-moz-linear-gradient(top,#4591ed 0,#22adf6 100%);background:-webkit-linear-gradient(top,#4591ed 0,#22adf6 100%);background:linear-gradient(to bottom,#4591ed 0,#22adf6 100%)}.navbar--product-container{width:100%;height:auto;position:absolute;top:calc(4rem * .85);left:0;visibility:hidden;transition:all .25s ease;z-index:100}.navbar--product-container.open{visibility:visible}.navbar--product-container.open .navbar--product-menu{opacity:1}.navbar--product-divider{margin:.25em 0;height:2px;background-color:rgba(67,68,83,.1)}.navbar--product{font-size:19px}.navbar--product:active,.navbar--product:link,.navbar--product:visited{color:#fff;transition:background-color .25s ease,color .25s ease;background-color:transparent;padding:1.25rem 1rem;display:block;width:100%}.navbar--product:hover{background-color:rgba(56,56,70,.12);color:#fff}.navbar--product-dropdown{display:none;top:.5em;background-color:#4591ed;height:3rem;border-radius:3px;transition:background-color .25s ease,color .25s ease}.navbar--product-dropdown:hover{cursor:pointer;background-color:#22adf6}.navbar--product-dropdown .navbar--current-product,.navbar--product-dropdown .navbar--product-dropdown-caret{position:absolute;top:50%;transform:translateY(-50%);color:#fff}.navbar--product-dropdown .navbar--current-product{font-weight:700;left:1rem;font-size:19px;font-weight:400}.navbar--product-dropdown .navbar--product-dropdown-caret{right:1rem;font-size:.625em}.navbar--search{height:3rem;width:40%;right:4rem;top:.5em}.navbar--search>*{position:absolute!important;top:0;left:0;width:100%;height:100%}.navbar--search-field{position:absolute;top:0;left:0;width:100%;height:100%;border-radius:3px;border:2px solid #545667;color:#f6f6f8;background-color:#292933;padding:0 1rem;font-weight:400;font-size:19px;outline:0;transition:border-color .3s ease,color .3s ease}.navbar--search-field:focus{border-color:#00c9ff;color:#00c9ff}.algolia-autocomplete{width:100%}.algolia-autocomplete .aa-hint,.algolia-autocomplete .aa-input{width:100%}.algolia-autocomplete .aa-hint{color:red}.algolia-autocomplete .aa-dropdown-menu{margin:.5rem 0 0 0;width:100%;padding:.75rem;background-color:rgba(238,239,242,.7);border:0}.algolia-autocomplete .aa-dropdown-menu .algolia-docsearch-suggestion--highlight{color:#22adf6}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion{cursor:pointer;padding:0}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion{background-color:#fff;border-radius:3px;overflow:hidden}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion__secondary{border:none;margin-top:2px}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion:first-child .algolia-docsearch-suggestion__secondary{margin-top:0}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--category-header{border-radius:3px 3px 0 0;background-color:#fff;color:#8e91a1;padding:.75rem 1rem;font-weight:500}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--highlight{background-color:transparent}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--subcategory-column{border:none;background-color:#545667}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--content{background-color:#434453}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--title{margin-bottom:.25rem;display:inline-block;color:#eeeff2}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--text{color:#bec2cc}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--subcategory-column-text{font-size:.8rem;line-height:1.4em;color:#bec2cc}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor .algolia-docsearch-suggestion--content{background:#4591ed;background:-moz-linear-gradient(left,#4591ed 0,#00c9ff 100%);background:-webkit-linear-gradient(left,#4591ed 0,#00c9ff 100%);background:linear-gradient(to right,#4591ed 0,#00c9ff 100%)}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor .algolia-docsearch-suggestion--text,.algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor .algolia-docsearch-suggestion--title{color:#bef0ff}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight,.algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor .algolia-docsearch-suggestion--title .algolia-docsearch-suggestion--highlight{color:#fff!important}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion em{font-weight:700;font-style:normal}.algolia-autocomplete .algolia-docsearch-footer{border:none;padding:.75rem 0 0 0}.theme-switcher{display:none;width:4rem;height:4rem;right:0;border:0;outline:0;background-color:#383846;color:#f6f6f8}.theme-switcher .icon{transition:color .25s ease}.theme-switcher .sun2{font-size:1.5rem}.theme-switcher .moon{font-size:1.2rem}.theme-switcher:hover{color:#fff;cursor:pointer}@media (max-width:500px){.navbar--logo .logotype{display:none}.navbar--logo .logo{display:inline}}@media (min-width:500px){.navbar--logo .logotype{display:inline}.navbar--logo .logo{display:none}}@media (min-width:900px){.theme-switcher{display:block}.navbar--product-dropdown{display:block;left:18rem;width:17rem}.navbar--product-container{left:18rem;width:17rem;top:2.9em}.navbar--product-container.open .navbar--dropdown-dismiss{width:100vw;height:100vh;position:fixed;top:0;left:0;z-index:100}.navbar--product-container.open .navbar--dropdown-dismiss:hover{cursor:pointer}.navbar--product-menu{border-radius:0 0 3px 3px;overflow:hidden;z-index:110}.navbar--search{left:35.5rem;width:calc(100% - 18rem - .5rem - .5rem - 4rem - 17rem)}.navbar--hamburger{display:none}.navbar--product.external{font-size:.8rem}}@media (min-width:1200px){.navbar--product-dropdown{left:23rem;width:17.5rem}.navbar--product-container{left:23rem;width:17.5rem}.navbar--search{left:41rem;width:calc(100% - 23rem - .5rem - .5rem - 4rem - 17.5rem)}}@media (min-width:1900px){.navbar--product-dropdown{left:28rem;width:17.5rem}.navbar--product-container{left:28rem;width:17.5rem}.navbar--search{left:46rem;width:calc(100% - 28rem - .5rem - .5rem - 4rem - 17.5rem)}}.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu{right:0!important;left:auto!important;overflow:scroll!important;max-height:90vh!important}.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu:before{display:none}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--wrapper{padding:.2rem 0}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column{display:none}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--content{padding:.75rem;width:100%;float:none}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--content:before{display:none}.algolia-autocomplete .algolia-docsearch-footer{padding:0}@media (min-width:1330px){.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu{right:auto!important;left:0!important}}@media (max-width:768px){.algolia-docsearch-suggestion--subcategory-column{display:none!important}.algolia-docsearch-suggestion--wrapper{margin:.25em 0!important}}@media (max-width:570px){.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu{position:fixed!important;top:3.5em!important;left:0;min-width:100vw}}.sidebar--toggle{padding:1em;position:relative;z-index:100;height:3rem;width:100%;background-color:#434453;text-align:left;font-style:italic;color:#f6f6f8;font-weight:500;transition:background-color .25s ease,color .25s ease}.sidebar--toggle:hover{color:#fff;background-color:#545667;cursor:pointer}.sidebar--toggle:after,.sidebar--toggle:before{content:\"\";position:absolute;display:block;right:1em;top:1.45em;height:2px;width:15px;background:#999dab}.sidebar--toggle:before{transform:rotate(90deg);transition:all .2s}.sidebar--toggle.open:before{transform:rotate(180deg)}.sidebar{background-color:#f6f6f8;height:100%;overflow:hidden;transition:max-height .2s ease-out}.sidebar::-webkit-scrollbar{background-color:#f6f6f8;width:16px}.sidebar::-webkit-scrollbar-track{background-color:#f6f6f8}.sidebar::-webkit-scrollbar-thumb{border:4px solid #f6f6f8;background-color:#d4d7dd;border-radius:8px}.sidebar.open{max-height:4000px;transition:max-height .5s ease-in}.sidebar--section{border-top:2px solid #eeeff2;padding:2em 0}.sidebar--section:first-child{border:none}.sidebar--section-title{color:#4591ed;padding:0 2rem 1em 2rem;font-size:1.25em}.sidebar--section-title a:active,.sidebar--section-title a:link,.sidebar--section-title a:visited{color:#4591ed;font-weight:400}.sidebar--section-title a:hover{color:#00c9ff}.sidebar--section ul{padding-left:3rem}.sidebar--section ul li{position:relative;margin-bottom:.25rem}ul.sidebar--children{margin-left:-1.85rem;height:0;overflow:hidden}ul.sidebar--children.open{height:auto;overflow:visible;border-left:2px solid #eeeff2}ul.sidebar--children li:first-child{margin-top:.25rem}.sidebar--children-toggle{position:absolute;left:-2.25rem;top:.2rem;height:.9rem;width:.9rem;background:#bec2cc;border-radius:50%;transition:all .2s}.sidebar--children-toggle:before{content:\"+\";color:#fff;display:block;text-align:center}.sidebar--children-toggle.open:before{content:\"–\"}.sidebar--children-toggle:hover{background:#4591ed}.sidebar--children-toggle:hover:before{color:#fff}a.sidebar--page:active,a.sidebar--page:link,a.sidebar--page:visited{display:inline-block;color:#757888;font-weight:500;text-indent:-1rem;line-height:1.25}a.sidebar--page:hover{color:#00c9ff}@media (max-width:900px){.sidebar{height:auto;max-height:0}}@media (min-width:900px){.sidebar--toggle{display:none}.sidebar,.sidebar.open{position:fixed;z-index:100;width:18rem;transform:none;transition:none;top:4rem;max-height:100%;overflow:auto;padding-bottom:4rem}}@media (min-width:1200px){.sidebar,.sidebar.open{width:23rem}}@media (min-width:1900px){.sidebar,.sidebar.open{width:28rem}.sidebar--support-ad{padding:2rem 1.5rem}.sidebar--support-ad--desc{font-size:1.2em}}#sidebar--ad{margin:-.75rem 1rem;border-radius:3px}#sidebar--ad.cloud{background:linear-gradient(45deg,#9394ff,#22adf6);padding:1.5rem 1.5rem;text-align:center}#sidebar--ad.cloud .text{margin:0 0 1rem 0;color:#fff;line-height:1.3em;font-size:1.1em;font-weight:500}#sidebar--ad.cloud .cta{margin-left:0;margin-right:0;border-radius:3px;color:#fff;border:2px solid rgba(255,255,255,.4);background-color:transparent;transition:background-color .25s ease,border-color .25s ease;padding:.75em 1.5em;font-weight:700;display:inline-block;font-size:1.125em}#sidebar--ad.cloud .cta:hover{background-color:rgba(255,255,255,.15);border-color:rgba(255,255,255,.6)}#sidebar--ad.enterprise{background:linear-gradient(to right,#4ed8a0,#22adf6);padding:1.5rem 1.5rem;text-align:center}#sidebar--ad.enterprise .text{margin:0 0 1rem 0;color:#fff;line-height:1.3em;font-weight:500}#sidebar--ad.enterprise .cta{margin-left:0;margin-right:0;border-radius:3px;color:#fff;border:2px solid rgba(255,255,255,.4);background-color:transparent;transition:background-color .25s ease,border-color .25s ease;padding:.75em 1.5em;font-weight:700;display:inline-block;font-size:1.125em}#sidebar--ad.enterprise .cta:hover{background-color:rgba(255,255,255,.15);border-color:rgba(255,255,255,.6)}#sidebar--ad.influx-days{padding:1rem;background:url(/promos/assets/influx-days-bg.jpg);background-repeat:no-repeat;background-size:cover;color:#fff;font-weight:700}#sidebar--ad.influx-days img{margin:.4rem 0 .8rem}#sidebar--ad.influx-days .text{font-size:1.75rem;margin-bottom:.5rem}#sidebar--ad.influx-days .details{font-size:.9rem;line-height:1.1rem}#sidebar--ad.influx-days .cta{display:inline-block;margin-top:.85rem;color:#fff;background:#5cbb47;font-size:1.15rem;padding:.45rem 1.75rem;border-radius:3px}::selection{background-color:#757888;color:#fff}::-moz-selection{background-color:#757888;color:#fff}a{text-decoration:none;transition:color .2s ease}a:hover{cursor:pointer}.article{background-color:#fff;overflow:auto;width:100%}.article::-webkit-scrollbar{background-color:#fff;width:16px}.article::-webkit-scrollbar-track{background-color:#fff}.article::-webkit-scrollbar-thumb{border:4px solid #fff;background-color:#d4d7dd;border-radius:8px}.article-section{display:block;width:100%;text-align:center;padding:2rem}.article-section.article-heading{background-color:#fafafc;background-position:center center;background-size:cover!important;background-repeat:no-repeat}.article-section.article-heading h1{margin-bottom:0}.article-section.article-footer{background:#fafafc;background:-moz-linear-gradient(top,#fafafc 0,#fff 100%);background:-webkit-linear-gradient(top,#fafafc 0,#fff 100%);background:linear-gradient(to bottom,#fafafc 0,#fff 100%)}.article-content{text-align:left;width:100%;max-width:760px;color:#757888}.article-content a:active,.article-content a:link,.article-content a:visited{font-weight:700;color:#4591ed}.article-content a:hover{color:#00c9ff;cursor:pointer}.article-content a.top{font-size:6px;padding:.25rem .25rem .35rem;border-radius:3px;transition:all .2s}.article-content a.top:hover{color:#fff!important;background:#00c9ff}.article-content a.off-page:link:after{content:'\\ea43';font-family:icomoon;font-size:.75em;font-weight:400;vertical-align:bottom;display:inline;margin-left:.5em;opacity:.25;transition:color .2s ease;color:#757888}.article-content li a code,.article-content p a code{position:relative}.article-content li a code:after,.article-content p a code:after{content:\"\";position:absolute;top:-1px;right:-1px;width:0;height:0;border-style:solid;border-width:0 .5em .5em 0;border-color:transparent #7a65f2 transparent transparent;opacity:.5;transition:all .2s}.article-content li a code:hover:after,.article-content p a code:hover:after{opacity:1;border-color:transparent #00c9ff transparent transparent}.article-content li a.btn,.article-content p a.btn{display:inline-block;color:#fff;font-size:.95rem;padding:.5em 1em;margin:1em 0 1.5em}.article-content li a.btn.download:before,.article-content p a.btn.download:before{content:'\\e964';font-family:icomoon;font-size:1.15em;font-weight:400;vertical-align:bottom;display:inline;margin-right:.5em}.article-content>*{text-decoration:none}.article-content .note,.article-content .warn,.article-content blockquote,.article-content dt,.article-content h1,.article-content h2,.article-content h3,.article-content h4,.article-content li,.article-content ol,.article-content p,.article-content pre,.article-content ul{display:block;margin-bottom:1em;line-height:1.45em}.article-content table{margin:1em 0 1em;overflow-x:auto;background-color:#fff}.article-content h1,.article-content h2,.article-content h3,.article-content h4,.article-content h5,.article-content h6{width:100%;color:#757888}.article-content h1 a.offset-anchor,.article-content h2 a.offset-anchor,.article-content h3 a.offset-anchor,.article-content h4 a.offset-anchor,.article-content h5 a.offset-anchor,.article-content h6 a.offset-anchor{display:block;position:relative;top:-120px;visibility:hidden}.article-content h1 a:active,.article-content h1 a:hover,.article-content h1 a:link,.article-content h1 a:visited,.article-content h2 a:active,.article-content h2 a:hover,.article-content h2 a:link,.article-content h2 a:visited,.article-content h3 a:active,.article-content h3 a:hover,.article-content h3 a:link,.article-content h3 a:visited,.article-content h4 a:active,.article-content h4 a:hover,.article-content h4 a:link,.article-content h4 a:visited,.article-content h5 a:active,.article-content h5 a:hover,.article-content h5 a:link,.article-content h5 a:visited,.article-content h6 a:active,.article-content h6 a:hover,.article-content h6 a:link,.article-content h6 a:visited{text-decoration:none;font-weight:inherit;color:#757888!important}.article-content h1:first-child,.article-content h2:first-child,.article-content h3:first-child,.article-content h4:first-child,.article-content h5:first-child,.article-content h6:first-child{margin-top:0}.article-content h1{font-size:2.2em;font-family:Klavika-Light,'Helvetica Neue',Helvetica,Helvetica,Arial,Tahoma,Verdana,sans-serif;font-weight:200;line-height:1.2em}.article-content h2{font-size:1.9em;font-weight:600;margin:1.5em 0 .5em}.article-content h3{font-size:1.5em;font-weight:700;margin:1em 0 .5em}.article-content h4{font-size:1.3em;font-weight:400;font-style:italic;margin:1.25em 0 .5em}.article-content h5{line-height:1.6em}.article-content h6{font-size:.95em;font-style:italic;line-height:1.6em}.article-content.section-landing h2 a.off-page:link:hover{color:#4591ed!important}.article-content p{font-size:1em}.article-content ol,.article-content ul{font-size:1em;padding-left:1.125em}.article-content ol li,.article-content ul li{display:list-item;list-style-position:outside;padding-left:.5em;margin-bottom:.25em}.article-content ol p,.article-content ul p{margin-left:0}.article-content ul>li{list-style-type:disc!important}.article-content ol li,.article-content ul ol li{list-style-type:decimal}.article-content ol ol li{list-style-type:lower-alpha}.article-content ol ol ol li{list-style-type:decimal}.article-content ul ul ul li{list-style-type:square}.article-content li:last-child{margin-bottom:0}.article-content ol ol,.article-content ol ul,.article-content ul ol,.article-content ul ul{width:100%;margin-left:0;margin-bottom:0;margin-top:.25em}.article-content hr{width:100%;height:2px;margin-top:.25em;margin-bottom:1em;border:none;display:block;background-color:#eeeff2}.article-content img{max-width:100%;height:auto;border-radius:3px}.article-content td,.article-content th{border:1px solid #eeeff2;font-size:.875em;line-height:1.2em;padding:.75em 1.5em}.article-content tr:nth-child(even){background-color:#f6f6f8}.article-content thead tr{background-color:#fafafc!important}.article-content thead th{padding:1.25em 1.5em}.article-content .note,.article-content .warn,.article-content blockquote,.article-content dt{font-size:.9em;padding:1em 1.5em;border-radius:3px;border-style:solid;border-left-width:6px}.article-content .note h4,.article-content .note ol,.article-content .note p,.article-content .note pre,.article-content .note ul,.article-content .warn h4,.article-content .warn ol,.article-content .warn p,.article-content .warn pre,.article-content .warn ul,.article-content blockquote h4,.article-content blockquote ol,.article-content blockquote p,.article-content blockquote pre,.article-content blockquote ul,.article-content dt h4,.article-content dt ol,.article-content dt p,.article-content dt pre,.article-content dt ul{width:100%;margin-left:0}.article-content .note>:last-child,.article-content .warn>:last-child,.article-content blockquote>:last-child,.article-content dt>:last-child{margin-bottom:0}.article-content .note .tooltip,.article-content .warn .tooltip,.article-content blockquote .tooltip,.article-content dt .tooltip{color:#22adf6}.article-content .note,.article-content blockquote{font-style:italic;color:#676978;border-color:#c6ffd0;background-color:#f2fff4}.article-content .note code,.article-content blockquote code{color:#2b7098;background:#c6ffd0;border:1px solid #c6ffd0}.article-content .note pre,.article-content blockquote pre{background:#c6ffd0;border-color:#c6ffd0}.article-content .note pre code,.article-content blockquote pre code{border:none}.article-content .warn,.article-content dt{color:#676978;border-color:#ffdccf;background-color:#fff7f4}.article-content .warn code,.article-content dt code{color:#2b7098;background:#ffdccf;border:1px solid #ffdccf}.article-content .warn pre,.article-content dt pre{background:#ffdccf;border-color:#ffdccf}.article-content .warn pre code,.article-content dt pre code{border:none}.article-content code{font-family:Consolas,\"Lucida Console\",Monaco,monospace;-moz-tab-size:1;-o-tab-size:1;tab-size:1;direction:ltr;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;font-size:.8em!important;font-style:normal!important;display:inline;border-radius:3px;border-width:1px;border-color:#f2f4ff;border-style:solid;padding:.1em .5em;-webkit-font-smoothing:subpixel-antialiased!important;-moz-osx-font-smoothing:auto!important;font-weight:400!important;color:#7a65f2;background-color:#f2f4ff}.article-content pre{display:block;padding:.75em 1em;overflow:auto;border-radius:3px;border-style:solid;border-width:1px 1px 1px 6px;background-color:#f2f4ff;border-color:#f2f4ff;z-index:99;line-height:1.1em!important}.article-content pre code{white-space:pre;word-spacing:normal;word-break:normal;border:none;padding:0;border-radius:0;background-color:transparent}.article-content pre::-webkit-scrollbar{background-color:#f2f4ff;width:16px}.article-content pre::-webkit-scrollbar-track{background-color:#f2f4ff}.article-content pre::-webkit-scrollbar-thumb{border:4px solid #f2f4ff;background-color:#c9d0ff;border-radius:calc(16px / 2)}.page-nav-btns{display:flex;position:relative;justify-content:space-between;margin:3em 0 2em}.page-nav-btns a{display:flex;align-items:center;color:#fff!important;font-size:.95rem;padding:.75rem 1rem;margin:0 .15rem}.page-nav-btns a.prev{position:absolute;left:0}.page-nav-btns a.prev:before{content:'\\e804';font-family:icomoon;font-size:.85rem;font-weight:400;vertical-align:middle;display:inline;margin-right:.85rem}.page-nav-btns a.next{position:absolute;right:0}.page-nav-btns a.next:after{content:'\\e805';font-family:icomoon;font-size:.85rem;font-weight:400;vertical-align:middle;display:inline;margin-left:.85rem}.truncate{position:relative;margin-bottom:3.5rem}.truncate .truncate-bottom{position:absolute;bottom:-30px;width:100%;z-index:100%;height:auto}.truncate a.truncate-toggle{display:block;width:100px;margin:0 auto;color:#757888;background:#fff;padding:.45rem;text-align:center;font-size:.75rem;text-transform:uppercase;border-radius:3px;transition:color .2s}.truncate a.truncate-toggle:before{content:\"Show Less\"}.truncate a.truncate-toggle:hover{color:#4591ed}.truncate.closed{min-height:200px;max-height:25vh;overflow:hidden}.truncate.closed .truncate-bottom{bottom:0;background-image:linear-gradient(to bottom,rgba(255,255,255,0),#fff);height:100px}.truncate.closed a.truncate-toggle{margin-top:75px}.truncate.closed a.truncate-toggle:before{content:\"Show More\"}.tooltip{position:relative;display:inline-block;z-index:10;font-weight:900;color:#4ed8a0}.tooltip-container{position:absolute;top:0;left:50%;transform:translateX(-50%);overflow:visible;visibility:hidden}.tooltip-text{font-weight:600;line-height:2em;height:2em;position:absolute;border-radius:3px;padding:0 .75em;font-size:.9rem;left:50%;transform:translate(-50%,-1.875rem);transition:all .2s ease;white-space:nowrap;opacity:0;font-style:normal!important;color:#f6f6f8;background-color:#383846}.tooltip-text:after{content:'';position:absolute;left:50%;bottom:-14px;transform:translateX(-50%);border-top:8px solid #383846;border-right:8px solid transparent;border-bottom:8px solid transparent;border-left:8px solid transparent}.tooltip:hover .tooltip-container{visibility:visible}.tooltip:hover .tooltip-text{opacity:1;transform:translate(-50%,-2rem)}.old-version{width:100%;display:inline-block;border-radius:3px;font-size:1em;line-height:1.25em;padding:1.5em 1.5em 1.5em 4em;color:#f95f53;background-color:#fff7f4;position:relative;margin-bottom:1em}.old-version:after{content:\"\\ea0a\";font-family:icomoon;position:absolute;top:50%;left:2em;transform:translate(-50%,-50%) scale(1.5,1.5);font-size:1em}.section-landing h2.no-paragraph{margin:0 0 1rem;border:none}.view-in-chronograf{display:flex;justify-content:flex-end;position:relative;background-color:#f2f4ff;margin-top:-1.1rem;margin-bottom:1rem;padding:.15rem;font-size:.8rem;border-radius:0 0 3px 3px;align-items:center}.view-in-chronograf .chronograf-btn{display:inline-block;padding:.45rem .6rem;color:#fff!important;background:linear-gradient(to left,#9394ff,#22adf6);border-radius:calc(3px / 2);transition:all .5s ease}.view-in-chronograf .chronograf-btn:after{content:'\\e801';margin-left:.4rem;font-family:icomoon}.view-in-chronograf .chronograf-btn:hover{color:#fff!important;opacity:1}.view-in-chronograf .settings{opacity:.25;color:#757888!important;margin-right:.75em;transition:opacity .2s ease}.view-in-chronograf .settings:hover{opacity:1}.modal-overlay{display:none;position:fixed;z-index:1000;left:0;top:0;width:100%;height:100%;overflow:auto;opacity:.75;background:linear-gradient(#9394ff,#4591ed)}.modal-content{display:none;background:#fff;padding:2rem 2rem 1.5rem;border-radius:3px;position:fixed;top:10vh;left:50%;transform:translateX(-50%);z-index:1001;width:90vw;max-width:38rem;transition:top .4s ease}.modal-content.open{top:40vh}.modal-content input{width:100%;min-width:10rem;border-radius:3px;border:2px solid #f2f4ff;background-color:#f2f4ff;padding:.5rem;font-weight:400;font-size:1rem;outline:0;transition:border-color .3s ease,color .3s ease}.modal-content input:focus{border-color:#00c9ff}.modal-content button{border:none;outline:0}.modal-content button:focus{background:#4591ed!important}.modal-content label{display:block;margin-bottom:.4rem;font-weight:600}#default-chronograf-url{display:inline-block;margin:.5rem 0 0 .25rem;font-size:.8rem;font-style:italic;font-weight:400}#default-chronograf-url:hover{text-transform:underline}.flex-form{display:flex;justify-content:space-between}.flex-form .save-btn{width:5.5rem;margin:0 0 0 .25rem;text-align:center;padding:.75rem 1rem;color:#fff;border-radius:3px;font-weight:600;transition:background .2s}@media (max-width:500px){.flex-form{flex-flow:column}.flex-form .save-btn{width:100%;margin:.25rem 0 0}#default-chronograf-url{display:block;margin:1rem auto 0}}#save-chronograf-url button{background:#9394ff}#save-chronograf-url button:hover{background:#4591ed}@media (min-width:900px){.article{padding-left:18rem}.article-section{padding:3rem}.article-content code,.article-content pre,.article-content td,.article-content th{border-width:2px}.article-content pre{border-left-width:6px}}@media (min-width:1200px){.article{padding-left:23rem}.article-section{padding:4.5rem}.old-version{width:60%}}@media (min-width:1900px){.article{padding-left:28rem}.article-section{padding:5rem 11rem}.article-content{font-size:1.125rem}}.homepage{overflow:auto;min-height:calc(100vh - 4rem);width:100%;z-index:2;background:#2c2c38;background:-moz-linear-gradient(left,#2c2c38 0,#0f0e15 100%);background:-webkit-linear-gradient(left,#2c2c38 0,#0f0e15 100%);background:linear-gradient(to right,#2c2c38 0,#0f0e15 100%);font-size:0;display:flex;flex-direction:column;flex-wrap:wrap;justify-content:space-between}.homepage .cards-enterprise,.homepage .cards-oss,.homepage .cards-special{display:flex;flex-direction:row;width:100%;flex-wrap:wrap;flex:1}.homepage--card{width:100%;display:inline-block;overflow:hidden;position:relative}.homepage--card-mask{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.1;transition:opacity .75s ease,transform .75s ease;z-index:1;background-attachment:scroll;background-size:cover;background-position:center center;background-repeat:no-repeat;transform:scale(1,1)}.homepage--card:hover .homepage--card-mask{opacity:1;transform:scale(1.2,1.2)}.homepage--card:hover .homepage--card-title{color:#fff!important}.homepage--card-container{position:relative;z-index:2;width:100%;display:inline-block;text-align:center;padding:4rem 3rem;font-size:0}.homepage--card-container a:active,.homepage--card-container a:link,.homepage--card-container a:visited{color:#4591ed;transition:color .25s ease;text-decoration:none}.homepage--card-container a:hover{color:#00c9ff}.homepage--card-description,.homepage--card-title{text-align:left;display:inline-block;width:100%;vertical-align:middle}.homepage--card-title{font-size:2rem;font-family:Klavika-Light,sans-serif;font-weight:200;font-style:italic;color:#4591ed;margin-bottom:.5em;transition:color .75s ease}.homepage--card-description{font-size:1rem;color:#757888;line-height:1.4em;font-weight:400}.homepage--card-link{display:inline-block;font-size:.875rem;font-weight:600;margin-left:.25rem;padding:2px 11px;border-radius:3px}.homepage--card-link:first-of-type{margin-top:1rem}.homepage--card.card-telegraf .homepage--card-mask{background-image:url(/img/home-telegraf.svg);background-color:#f95f53}.homepage--card.card-telegraf .homepage--card-description{color:#fff}.homepage--card.card-telegraf .homepage--card-title{color:#ff8564}.homepage--card.card-telegraf a.homepage--card-link:active,.homepage--card.card-telegraf a.homepage--card-link:link,.homepage--card.card-telegraf a.homepage--card-link:visited{color:#fff;transition:background-color .25s ease,color .25s ease}.homepage--card.card-telegraf a.homepage--card-link:hover{color:#ff8564;background-color:#fff}.homepage--card.card-influxdb .homepage--card-mask{background-image:url(/img/home-influxdb.svg);background-color:#4591ed}.homepage--card.card-influxdb .homepage--card-description{color:#fff}.homepage--card.card-influxdb .homepage--card-title{color:#00c9ff}.homepage--card.card-influxdb a.homepage--card-link:active,.homepage--card.card-influxdb a.homepage--card-link:link,.homepage--card.card-influxdb a.homepage--card-link:visited{color:#fff;transition:background-color .25s ease,color .25s ease}.homepage--card.card-influxdb a.homepage--card-link:hover{color:#22adf6;background-color:#fff}.homepage--card.card-chronograf .homepage--card-mask{background-image:url(/img/home-chronograf.svg);background-color:#7a65f2}.homepage--card.card-chronograf .homepage--card-description{color:#fff}.homepage--card.card-chronograf .homepage--card-title{color:#9394ff}.homepage--card.card-chronograf a.homepage--card-link:active,.homepage--card.card-chronograf a.homepage--card-link:link,.homepage--card.card-chronograf a.homepage--card-link:visited{color:#fff;transition:background-color .25s ease,color .25s ease}.homepage--card.card-chronograf a.homepage--card-link:hover{color:#9394ff;background-color:#fff}.homepage--card.card-kapacitor .homepage--card-mask{background-image:url(/img/home-kapacitor.svg);background-color:#4ed8a0}.homepage--card.card-kapacitor .homepage--card-description{color:#fff}.homepage--card.card-kapacitor .homepage--card-title{color:#4ed8a0}.homepage--card.card-kapacitor a.homepage--card-link:active,.homepage--card.card-kapacitor a.homepage--card-link:link,.homepage--card.card-kapacitor a.homepage--card-link:visited{color:#fff;transition:background-color .25s ease,color .25s ease}.homepage--card.card-kapacitor a.homepage--card-link:hover{color:#4ed8a0;background-color:#fff}.homepage--card.card-enterprise_kapacitor .homepage--card-mask{background-image:url(/img/home-kapacitor.svg);background-color:#4ed8a0}.homepage--card.card-enterprise_kapacitor .homepage--card-description{color:#fff}.homepage--card.card-enterprise_kapacitor .homepage--card-title{color:#4ed8a0}.homepage--card.card-enterprise_kapacitor a.homepage--card-link:active,.homepage--card.card-enterprise_kapacitor a.homepage--card-link:link,.homepage--card.card-enterprise_kapacitor a.homepage--card-link:visited{color:#fff;transition:background-color .25s ease,color .25s ease}.homepage--card.card-enterprise_kapacitor a.homepage--card-link:hover{color:#4ed8a0;background-color:#fff}.homepage--card.card-enterprise_influxdb .homepage--card-mask{background-image:url(/img/home-influxdb.svg);background-color:#4591ed}.homepage--card.card-enterprise_influxdb .homepage--card-description{color:#fff}.homepage--card.card-enterprise_influxdb .homepage--card-title{color:#00c9ff}.homepage--card.card-enterprise_influxdb a.homepage--card-link:active,.homepage--card.card-enterprise_influxdb a.homepage--card-link:link,.homepage--card.card-enterprise_influxdb a.homepage--card-link:visited{color:#fff;transition:background-color .25s ease,color .25s ease}.homepage--card.card-enterprise_influxdb a.homepage--card-link:hover{color:#22adf6;background-color:#fff}.homepage--card.card-flux .homepage--card-mask{background-image:url(/img/home-flux.svg);background-color:#15a194;opacity:1}.homepage--card.card-flux .homepage--card-description{color:#fff}.homepage--card.card-flux .homepage--card-title{color:#fff}.homepage--card.card-flux a.homepage--card-link:active,.homepage--card.card-flux a.homepage--card-link:link,.homepage--card.card-flux a.homepage--card-link:visited{color:#fff;transition:background-color .25s ease,color .25s ease}.homepage--card.card-flux a.homepage--card-link:active.download,.homepage--card.card-flux a.homepage--card-link:link.download,.homepage--card.card-flux a.homepage--card-link:visited.download{display:none}.homepage--card.card-flux a.homepage--card-link:hover{color:#32b08c;background-color:#fff}.homepage--card.card-platform{width:100%;background:linear-gradient(to right,#4591ed,#22adf6);display:flex;align-items:center}.homepage--card.card-platform .homepage--card-container{padding-bottom:3rem}.homepage--card.card-platform .homepage--card-mask{background-image:url(/img/home-influxdb.svg);background-color:#4591ed;opacity:.9}.homepage--card.card-platform .homepage--card-description{color:#fff;text-align:center}.homepage--card.card-platform .homepage--card-title{color:#fff;text-align:center;font-size:2.15rem}.homepage--card.card-platform a.homepage--card-link:active,.homepage--card.card-platform a.homepage--card-link:link,.homepage--card.card-platform a.homepage--card-link:visited{color:#fff;transition:background-color .25s ease,color .25s ease}.homepage--card.card-platform a.homepage--card-link:hover{color:#22adf6;background-color:#fff}.homepage--card.card-platform a.btn{margin:1.75rem 0 1rem;padding:1em 1.5em;display:inline-block;background:#fff;color:#22adf6;border-radius:3px;font-size:1rem;font-weight:700;transition:all .2s;box-shadow:0 0 15px rgba(255,255,255,0)}.homepage--card.card-platform a.btn:hover{box-shadow:0 0 15px #fff}@media (min-width:900px){.homepage--card{width:50%;flex-grow:1}}@media (min-width:1200px){.homepage--card-container{padding:3.5rem}.homepage--card-description{font-size:1.075rem}.homepage--card{width:25%;height:auto}.homepage--card.card-platform{width:75%}.homepage--card.card-enterprise_influxdb,.homepage--card.card-enterprise_kapacitor{width:50%}}@media (min-width:1900px){.homepage--card-container{padding:4rem}.homepage--card-description{font-size:1.125rem}}.error-page{overflow:scroll;top:4rem;height:100%;width:100%;background:#383846;background:-moz-linear-gradient(top,#383846 0,#1f2039 100%);background:-webkit-linear-gradient(top,#383846 0,#1f2039 100%);background:linear-gradient(to bottom,#383846 0,#1f2039 100%)}.error-content{margin:15vh auto;width:85%;max-width:400px;min-width:240px;font-size:15px;line-height:19px;color:#c6cad3}.error-content h1{color:#4591ed;display:block;margin:0 auto 50px;padding-top:15px;width:212px;height:212px;border-radius:50%;text-align:center;font-size:90px;font-weight:200;line-height:180px;position:relative;border:2px solid #4591ed}.flex{display:flex;justify-content:space-around}.wayfinding{margin-bottom:2rem}.btn{display:block;padding:.5rem;background:#4591ed;color:#fff;border-radius:3px;text-align:center;transition:background .2s}.btn.back{flex-grow:1;margin-right:.35rem}.btn.back:before{content:\"\\ea41\";font-family:icomoon;margin-right:.5rem;font-size:1rem}.btn.project{flex-grow:3;display:none}.btn.project:before{content:\"\\e801\";font-family:icomoon;margin-right:.5rem;flex-grow:3}.btn:hover{background:#22adf6}@media (min-width:900px){.error-content{font-size:17px;line-height:22px}}@media (min-width:1900px){.error-content{font-size:21px;line-height:32px}}.tabs-container{margin:2em 0 2em}.tabs{flex-grow:1;border-radius:3px 0 0 3px}.tabs p{display:flex;flex-wrap:wrap}.tabs a{flex-grow:1;margin:2px;font-size:.875em;color:#8e91a1!important;padding:.5em 1em;display:inline-block;text-align:center;border-radius:3px;background-color:rgba(231,232,235,.5);transition:background-color .2s,color .2s}.tabs a:hover{color:#676978!important}.tabs a.is-active{color:#fff!important;background:#4591ed}.tab-content{width:100%}.tab-content>*{width:100%!important;margin-left:0!important}.tab-content:not(:first-child){display:none}.tab-content-container{position:relative;border-radius:0 3px 3px 3px}.code-tabs-content{margin:.75rem 0 3rem;width:100%}.code-tabs-content>*{width:100%!important;margin-left:0!important}.code-tabs-wrapper{margin:1.5rem 0 .5rem}.code-tabs-wrapper .code-tabs p{margin:0;text-align:right;display:block;font-size:.9rem}.code-tabs-wrapper .code-tabs a{padding:.25rem .75rem;margin:0;border-radius:3px 3px 0 0;display:inline-block;background:rgba(242,244,255,.6);color:rgba(142,145,161,.5)!important}.code-tabs-wrapper .code-tabs a:hover{color:#676978!important}.code-tabs-wrapper .code-tabs a.is-active{background-color:#f2f4ff;color:#676978!important}.code-tabs-wrapper .code-tab-content{padding:0}.code-tabs-wrapper .code-tab-content pre{margin:0 0 3rem;border-radius:3px 0 3px 3px}.code-tabs-wrapper .code-tab-content:not(:first-of-type){display:none}@media (min-width:900px){.tabs-container .tabs a{flex-grow:0}}.plugin-card{position:relative;padding:1rem 1.5rem;margin-bottom:.5rem;justify-content:center;align-items:center;background:#f6f6f8;border-radius:3px}.plugin-card h3{padding:0;margin-top:.25rem}.plugin-card.new h3:after{content:\"New\";margin-left:.3rem;padding:.25rem .5rem;font-style:italic;color:#4591ed;font-size:1.2rem}.plugin-card p.meta{margin:.75rem 0;font-weight:500;color:#757888;line-height:1.75rem}.plugin-card p.meta .deprecated{margin-left:.5rem;font-style:italic;color:#e90}.plugin-card .info>p:last-child{margin-bottom:.5rem}.plugin-card .info>ul:last-child{margin-bottom:.5rem}.plugin-card .info>ol:last-child{margin-bottom:.5rem}.plugin-card .github-link{position:absolute;color:#fff!important;top:.5rem;right:.5rem;opacity:0;transition:opacity .2s,background .2s,color 2s}.plugin-card .github-link .icon-github{font-size:1.2rem;margin:0 .25rem 0 0}.plugin-card:hover .github-link{opacity:1}.plugin-card blockquote{border-color:#c6ffd0;background:rgba(242,255,244,.5)}.plugin-card blockquote h3,.plugin-card blockquote h4,.plugin-card blockquote h5,.plugin-card blockquote h6{color:#757888}.plugin-card blockquote li,.plugin-card blockquote p{color:#676978;font-size:1rem;font-style:normal}.plugin-card blockquote strong{color:inherit}.plugin-card blockquote a{color:#ff8564}.plugin-card blockquote a code:after{border-color:transparent rgba(43,112,152,.35) transparent transparent}.plugin-card blockquote a:hover{color:#ffb6a0}.plugin-card blockquote a:hover code:after{border-color:transparent #ffb6a0 transparent transparent}.plugin-card blockquote ol li:before{color:#676978}.plugin-card blockquote code,.plugin-card blockquote pre{color:#2b7098;background:#c6ffd0}#plugin-filters{display:flex;flex-flow:row wrap;align-items:flex-start}#plugin-filters .filter-category{flex:1 1 200px;margin:0 1.25rem 1.25rem 0;max-width:33%}#plugin-filters .filter-category.two-columns{flex:1 2 400px;max-width:66%}#plugin-filters .filter-category.two-columns .filter-list{columns:2}#plugin-filters h5{border-bottom:1px solid rgba(117,120,136,.25);padding-bottom:.65rem}#plugin-filters .filter-list{padding:0;margin:.5rem 0 0;list-style:none}#plugin-filters .filter-list li{padding:0;margin:0;line-height:1.35rem;list-style-type:none!important}#plugin-filters label{display:block;padding:.25rem 0;color:#757888;position:relative}#plugin-filters label:after{content:attr(data-count);margin-left:.25rem;font-size:.85rem;opacity:.5}#plugin-filters .checkbox{display:inline-block;height:1.15em;width:1.15em;background:rgba(117,120,136,.05);margin-right:.3rem;vertical-align:text-top;border-radius:3px;cursor:pointer;border:1.5px solid rgba(117,120,136,.2);user-select:none}#plugin-filters input[type=checkbox]{margin-right:-1.1rem;padding:0;vertical-align:top;opacity:0;cursor:pointer}#plugin-filters input[type=checkbox]+.checkbox:after{content:\"\";display:block;position:absolute;height:.5rem;width:.5rem;border-radius:50%;background:#ff8564;top:.65rem;left:.35rem;opacity:0;transform:scale(2);transition:all .2s}#plugin-filters input[type=checkbox]:checked+.checkbox:after{opacity:1;transform:scale(1)}@media (max-width:1100px){#plugin-filters .filter-category{max-width:50%}#plugin-filters .filter-category.three-columns,#plugin-filters .filter-category.two-columns{max-width:100%}}@media (max-width:800px){#plugin-filters .filter-category{max-width:100%}.plugin-card .github-link{opacity:1;padding:.25rem .35rem .35rem;line-height:0;font-size:1.35rem}.plugin-card .github-link .icon-github{margin:0}.plugin-card .github-link .hide{display:none}}@media (min-width:900px){body{padding-bottom:0}}body.docs-theme--telegraf .article-content a:active,body.docs-theme--telegraf .article-content a:link,body.docs-theme--telegraf .article-content a:visited{color:#ff8564}body.docs-theme--telegraf .article-content a:hover{color:#ffb6a0}body.docs-theme--telegraf .article-content a.top:hover{background:#ffb6a0}body.docs-theme--telegraf .article-content a.btn{background:#ff8564}body.docs-theme--telegraf .article-content a.btn:hover{background:#ffb6a0}body.docs-theme--telegraf .article-content.section-landing h2 a.off-page:link:hover{color:#ff8564!important}body.docs-theme--telegraf .sidebar--mask-container .sidebar--mask{background:#ff8564;background:-moz-linear-gradient(top,#ff8564 0,#7a65f2 100%);background:-webkit-linear-gradient(top,#ff8564 0,#7a65f2 100%);background:linear-gradient(to bottom,#ff8564 0,#7a65f2 100%)}body.docs-theme--telegraf .sidebar--section-title a:active,body.docs-theme--telegraf .sidebar--section-title a:link,body.docs-theme--telegraf .sidebar--section-title a:visited{color:#ff8564;font-weight:400}body.docs-theme--telegraf .sidebar--section-title a:hover{color:#ffb6a0}body.docs-theme--telegraf a.sidebar--page:hover{color:#ffb6a0}body.docs-theme--telegraf .navbar--product-dropdown{background-color:#ff8564}body.docs-theme--telegraf .navbar--product-dropdown:hover{background-color:#ffb6a0}body.docs-theme--telegraf .navbar--product-menu{background:#ff8564;background:-moz-linear-gradient(top,#ff8564 0,#7a65f2 100%);background:-webkit-linear-gradient(top,#ff8564 0,#7a65f2 100%);background:linear-gradient(to bottom,#ff8564 0,#7a65f2 100%)}body.docs-theme--telegraf .tabs a.is-active{background:#ff8564}body.docs-theme--chronograf .article-content a:active,body.docs-theme--chronograf .article-content a:link,body.docs-theme--chronograf .article-content a:visited{color:#9394ff}body.docs-theme--chronograf .article-content a:hover{color:#b1b6ff}body.docs-theme--chronograf .article-content a.top:hover{background:#b1b6ff}body.docs-theme--chronograf .article-content a.btn{background:#9394ff}body.docs-theme--chronograf .article-content a.btn:hover{background:#b1b6ff}body.docs-theme--chronograf .article-content.section-landing h2 a.off-page:link:hover{color:#9394ff!important}body.docs-theme--chronograf .sidebar--mask-container .sidebar--mask{background:#9394ff;background:-moz-linear-gradient(top,#9394ff 0,#4591ed 100%);background:-webkit-linear-gradient(top,#9394ff 0,#4591ed 100%);background:linear-gradient(to bottom,#9394ff 0,#4591ed 100%)}body.docs-theme--chronograf .sidebar--section-title a:active,body.docs-theme--chronograf .sidebar--section-title a:link,body.docs-theme--chronograf .sidebar--section-title a:visited{color:#9394ff;font-weight:400}body.docs-theme--chronograf .sidebar--section-title a:hover{color:#b1b6ff}body.docs-theme--chronograf a.sidebar--page:hover{color:#b1b6ff}body.docs-theme--chronograf .navbar--product-dropdown{background-color:#9394ff}body.docs-theme--chronograf .navbar--product-dropdown:hover{background-color:#b1b6ff}body.docs-theme--chronograf .navbar--product-menu{background:#9394ff;background:-moz-linear-gradient(top,#9394ff 0,#4591ed 100%);background:-webkit-linear-gradient(top,#9394ff 0,#4591ed 100%);background:linear-gradient(to bottom,#9394ff 0,#4591ed 100%)}body.docs-theme--chronograf .tabs a.is-active{background:#9394ff}body.docs-theme--kapacitor .article-content a:active,body.docs-theme--kapacitor .article-content a:link,body.docs-theme--kapacitor .article-content a:visited{color:#20b76f}body.docs-theme--kapacitor .article-content a:hover{color:#108174}body.docs-theme--kapacitor .article-content a.top:hover{background:#108174}body.docs-theme--kapacitor .article-content a.btn{background:#20b76f}body.docs-theme--kapacitor .article-content a.btn:hover{background:#4ed8a0}body.docs-theme--kapacitor .article-content.section-landing h2 a.off-page:link:hover{color:#20b76f!important}body.docs-theme--kapacitor .sidebar--mask-container .sidebar--mask{background:#4ed8a0;background:-moz-linear-gradient(top,#4ed8a0 0,#22adf6 100%);background:-webkit-linear-gradient(top,#4ed8a0 0,#22adf6 100%);background:linear-gradient(to bottom,#4ed8a0 0,#22adf6 100%)}body.docs-theme--kapacitor .sidebar--section-title a:active,body.docs-theme--kapacitor .sidebar--section-title a:link,body.docs-theme--kapacitor .sidebar--section-title a:visited{color:#20b76f;font-weight:400}body.docs-theme--kapacitor .sidebar--section-title a:hover{color:#108174}body.docs-theme--kapacitor a.sidebar--page:hover{color:#108174}body.docs-theme--kapacitor .navbar--product-dropdown{background-color:#4ed8a0}body.docs-theme--kapacitor .navbar--product-dropdown:hover{background-color:#7ce490}body.docs-theme--kapacitor .navbar--product-menu{background:#4ed8a0;background:-moz-linear-gradient(top,#4ed8a0 0,#22adf6 100%);background:-webkit-linear-gradient(top,#4ed8a0 0,#22adf6 100%);background:linear-gradient(to bottom,#4ed8a0 0,#22adf6 100%)}body.docs-theme--kapacitor .tabs a.is-active{background:#20b76f}body.docs-theme--enterprise_kapacitor .article-content a:active,body.docs-theme--enterprise_kapacitor .article-content a:link,body.docs-theme--enterprise_kapacitor .article-content a:visited{color:#20b76f}body.docs-theme--enterprise_kapacitor .article-content a:hover{color:#108174}body.docs-theme--enterprise_kapacitor .article-content a.top:hover{background:#108174}body.docs-theme--enterprise_kapacitor .article-content a.btn{background:#20b76f}body.docs-theme--enterprise_kapacitor .article-content a.btn:hover{background:#4ed8a0}body.docs-theme--enterprise_kapacitor .article-content.section-landing h2 a.off-page:link:hover{color:#20b76f!important}body.docs-theme--enterprise_kapacitor .sidebar--mask-container .sidebar--mask{background:#4ed8a0;background:-moz-linear-gradient(top,#4ed8a0 0,#22adf6 100%);background:-webkit-linear-gradient(top,#4ed8a0 0,#22adf6 100%);background:linear-gradient(to bottom,#4ed8a0 0,#22adf6 100%)}body.docs-theme--enterprise_kapacitor .sidebar--section-title a:active,body.docs-theme--enterprise_kapacitor .sidebar--section-title a:link,body.docs-theme--enterprise_kapacitor .sidebar--section-title a:visited{color:#20b76f;font-weight:400}body.docs-theme--enterprise_kapacitor .sidebar--section-title a:hover{color:#108174}body.docs-theme--enterprise_kapacitor a.sidebar--page:hover{color:#108174}body.docs-theme--enterprise_kapacitor .navbar--product-dropdown{background-color:#4ed8a0}body.docs-theme--enterprise_kapacitor .navbar--product-dropdown:hover{background-color:#7ce490}body.docs-theme--enterprise_kapacitor .navbar--product-menu{background:#4ed8a0;background:-moz-linear-gradient(top,#4ed8a0 0,#22adf6 100%);background:-webkit-linear-gradient(top,#4ed8a0 0,#22adf6 100%);background:linear-gradient(to bottom,#4ed8a0 0,#22adf6 100%)}body.docs-theme--enterprise_kapacitor .tabs a.is-active{background:#20b76f}body.docs-theme--flux .article-content a:active,body.docs-theme--flux .article-content a:link,body.docs-theme--flux .article-content a:visited{color:#20b76f}body.docs-theme--flux .article-content a:hover{color:#108174}body.docs-theme--flux .article-content a.top:hover{background:#108174}body.docs-theme--flux .article-content.section-landing h2 a.off-page:link:hover{color:#20b76f!important}body.docs-theme--flux .sidebar--mask-container .sidebar--mask{background:#4ed8a0;background:-moz-linear-gradient(top,#4ed8a0 0,#22adf6 100%);background:-webkit-linear-gradient(top,#4ed8a0 0,#22adf6 100%);background:linear-gradient(to bottom,#4ed8a0 0,#22adf6 100%)}body.docs-theme--flux .sidebar--section-title a:active,body.docs-theme--flux .sidebar--section-title a:link,body.docs-theme--flux .sidebar--section-title a:visited{color:#20b76f;font-weight:400}body.docs-theme--flux .sidebar--section-title a:hover{color:#108174}body.docs-theme--flux a.sidebar--page:hover{color:#108174}body.docs-theme--flux .navbar--product-dropdown{background-color:#4ed8a0}body.docs-theme--flux .navbar--product-dropdown:hover{background-color:#7ce490}body.docs-theme--flux .navbar--product-menu{background:#4ed8a0;background:-moz-linear-gradient(top,#4ed8a0 0,#22adf6 100%);background:-webkit-linear-gradient(top,#4ed8a0 0,#22adf6 100%);background:linear-gradient(to bottom,#4ed8a0 0,#22adf6 100%)}body.docs-theme--flux .tabs a.is-active{background:#20b76f}","/*! normalize.css v3.0.2 | MIT License | git.io/normalize */\n\n/**\n * 1. Set default font family to sans-serif.\n * 2. Prevent iOS text size adjust after orientation change, without disabling\n * user zoom.\n */\n\nhtml {\n font-family: sans-serif; /* 1 */\n -ms-text-size-adjust: 100%; /* 2 */\n -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/**\n * Remove default margin.\n */\n\nbody {\n margin: 0;\n font-family: 'Roboto',Helvetica,Arial,Tahoma, Verdana, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n/* HTML5 display definitions\n ========================================================================== */\n\n/**\n * Correct `block` display not defined for any HTML5 element in IE 8/9.\n * Correct `block` display not defined for `details` or `summary` in IE 10/11\n * and Firefox.\n * Correct `block` display not defined for `main` in IE 11.\n */\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\n\n/**\n * 1. Correct `inline-block` display not defined in IE 8/9.\n * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n */\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block; /* 1 */\n vertical-align: baseline; /* 2 */\n}\n\n/**\n * Prevent modern browsers from displaying `audio` without controls.\n * Remove excess height in iOS 5 devices.\n */\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n/**\n * Address `[hidden]` styling not present in IE 8/9/10.\n * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.\n */\n\n[hidden],\ntemplate {\n display: none;\n}\n\n/* Links\n ========================================================================== */\n\n/**\n * Remove the gray background color from active links in IE 10.\n */\n\na {\n background-color: transparent;\n}\n\n/**\n * Improve readability when focused and also mouse hovered in all browsers.\n */\n\na:active,\na:hover {\n outline: 0;\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n */\n\nabbr[title] {\n border-bottom: 1px dotted;\n}\n\n/**\n * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n */\n\nb,\nstrong {\n font-weight: bold;\n}\n\n/**\n * Address styling not present in Safari and Chrome.\n */\n\ndfn {\n font-style: italic;\n}\n\n/**\n * Address variable `h1` font-size and margin within `section` and `article`\n * contexts in Firefox 4+, Safari, and Chrome.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/**\n * Address styling not present in IE 8/9.\n */\n\nmark {\n background: #ff0;\n color: #000;\n}\n\n/**\n * Address inconsistent and variable font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` affecting `line-height` in all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Remove border when inside `a` element in IE 8/9/10.\n */\n\nimg {\n border: 0;\n}\n\n/**\n * Correct overflow not hidden in IE 9/10/11.\n */\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * Address margin not present in IE 8/9 and Safari.\n */\n\nfigure {\n margin: 1em 40px;\n}\n\n/**\n * Address differences between Firefox and other browsers.\n */\n\nhr {\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n height: 0;\n}\n\n/**\n * Contain overflow in all browsers.\n */\n\npre {\n overflow: auto;\n}\n\n/**\n * Address odd `em`-unit font size rendering in all browsers.\n */\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * Known limitation: by default, Chrome and Safari on OS X allow very limited\n * styling of `select`, unless a `border` property is set.\n */\n\n/**\n * 1. Correct color not being inherited.\n * Known issue: affects color of disabled elements.\n * 2. Correct font properties not being inherited.\n * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit; /* 1 */\n font: inherit; /* 2 */\n margin: 0; /* 3 */\n}\n\n/**\n * Address `overflow` set to `hidden` in IE 8/9/10/11.\n */\n\nbutton {\n overflow: visible;\n}\n\n/**\n * Address inconsistent `text-transform` inheritance for `button` and `select`.\n * All other form control elements do not inherit `text-transform` values.\n * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n * Correct `select` style inheritance in Firefox.\n */\n\nbutton,\nselect {\n text-transform: none;\n}\n\n/**\n * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n * and `video` controls.\n * 2. Correct inability to style clickable `input` types in iOS.\n * 3. Improve usability and consistency of cursor style between image-type\n * `input` and others.\n */\n\nbutton,\nhtml input[type=\"button\"], /* 1 */\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; /* 2 */\n cursor: pointer; /* 3 */\n}\n\n/**\n * Re-set default cursor for disabled elements.\n */\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\n/**\n * Remove inner padding and border in Firefox 4+.\n */\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\n/**\n * Address Firefox 4+ setting `line-height` on `input` using `!important` in\n * the UA stylesheet.\n */\n\ninput {\n line-height: normal;\n}\n\n/**\n * It's recommended that you don't attempt to style these elements.\n * Firefox's implementation doesn't respect box-sizing, padding, or width.\n *\n * 1. Address box sizing set to `content-box` in IE 8/9/10.\n * 2. Remove excess padding in IE 8/9/10.\n */\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Fix the cursor style for Chrome's increment/decrement buttons. For certain\n * `font-size` values of the `input`, it causes the cursor style of the\n * decrement button to change from `default` to `text`.\n */\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n * 2. Address `box-sizing` set to `border-box` in Safari and Chrome\n * (include `-moz` to future-proof).\n */\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; /* 1 */\n -moz-box-sizing: content-box;\n -webkit-box-sizing: content-box; /* 2 */\n box-sizing: content-box;\n}\n\n/**\n * Remove inner padding and search cancel button in Safari and Chrome on OS X.\n * Safari (but not Chrome) clips the cancel button when the search input has\n * padding (and `textfield` appearance).\n */\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/**\n * Define consistent border, margin, and padding.\n */\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n/**\n * 1. Correct `color` not being inherited in IE 8/9/10/11.\n * 2. Remove padding so people aren't caught out if they zero out fieldsets.\n */\n\nlegend {\n border: 0; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Remove default vertical scrollbar in IE 8/9/10/11.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * Don't inherit the `font-weight` (applied by a rule above).\n * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n */\n\noptgroup {\n font-weight: bold;\n}\n\n/* Tables\n ========================================================================== */\n\n/**\n * Remove most spacing between table cells.\n */\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\ntd,\nth {\n padding: 0;\n}\n","code[class*=\"language-\"],\npre[class*=\"language-\"] {\n\t/*text-shadow: 0 1px #101419;*/\n\tdirection: ltr;\n\ttext-align: left;\n\twhite-space: pre;\n white-space: pre-wrap;\n white-space: -moz-pre-wrap;\n\twhite-space: -o-pre-wrap;\n\tword-spacing: normal;\n\tword-break: normal;\n\tword-wrap: normal;\n\n\t-moz-tab-size: 1;\n\t-o-tab-size: 1;\n\ttab-size: 1;\n\n\t-webkit-hyphens: none;\n\t-moz-hyphens: none;\n\t-ms-hyphens: none;\n\thyphens: none;\n}\n\npre[class*=\"language-\"]::-moz-selection, pre[class*=\"language-\"] ::-moz-selection,\ncode[class*=\"language-\"]::-moz-selection, code[class*=\"language-\"] ::-moz-selection {\n\ttext-shadow: none;\n}\n\npre[class*=\"language-\"]::selection, pre[class*=\"language-\"] ::selection,\ncode[class*=\"language-\"]::selection, code[class*=\"language-\"] ::selection {\n\ttext-shadow: none;\n}\n\n@media print {\n\tcode[class*=\"language-\"],\n\tpre[class*=\"language-\"] {\n\t\ttext-shadow: none;\n\t}\n}\n\n/* Code blocks */\npre[class*=\"language-\"] {\n\toverflow: auto;\n}\n\n:not(pre) > code[class*=\"language-\"],\npre[class*=\"language-\"] {\n}\n\n/* Inline code */\n:not(pre) > code[class*=\"language-\"] {\n\twhite-space: normal;\n}\n\n.highlight { color: @article-code-color;\n\n\t// COLORS\n\n\t.gh, \t\t/* Generic.Heading */\n\t.go, \t\t/* Generic.Output */\n\t.na, \t\t/* Name.Attribute */\n\t.nt, \t\t/* Name.Tag */\n\t.nv, \t\t/* Name.Variable */\n\t.ow \t\t/* Operator.Word */\n\t\t\t\t\t{ color: @article-code-color }\n\n\t.c, \t\t/* Comment */\n\t.ch, \t\t/* Comment.Hashbang */\n\t.cm, \t\t/* Comment.Multiline */\n\t.cpf, \t/* Comment.PreprocFile */\n\t.c1, \t\t/* Comment.Single */\n\t.cs,\t\t/* Comment.Special */\n\t.w \t\t/* Text.Whitespace */\n\t\t\t\t\t{ color: @article-code-accent1; }\n\n\t.gi \t\t/* Generic.Inserted */\n\t\t\t\t\t{ background-color: @article-code-accent1; }\n\n\t.k, \t\t/* Keyword */\n\t.kc, \t\t/* Keyword.Constant */\n\t.kd, \t\t/* Keyword.Declaration */\n\t.kn, \t\t/* Keyword.Namespace */\n\t.kp, \t\t/* Keyword.Pseudo */\n\t.kr, \t\t/* Keyword.Reserved */\n\t.nn \t\t/* Name.Namespace */\n\t\t\t\t\t{ color: @article-code-accent2; }\n\n\t.bp, \t\t/* Name.Builtin.Pseudo */\n\t.cp, \t\t/* Comment.Preproc */\n\t.dl, \t\t/* Literal.String.Delimiter */\n\t.gt, \t\t/* Generic.Traceback */\n\t.gu, \t\t/* Generic.Subheading */\n\t.kt, \t\t/* Keyword.Type */\n\t.nb, \t\t/* Name.Builtin */\n\t.nc, \t\t/* Name.Class */\n\t.no, \t\t/* Name.Constant */\n\t.sa, \t\t/* Literal.String.Affix */\n\t.sb, \t\t/* Literal.String.Backtick */\n\t.sc, \t\t/* Literal.String.Char */\n\t.sd, \t\t/* Literal.String.Doc */\n\t.se, \t\t/* Literal.String.Escape */\n\t.sh, \t\t/* Literal.String.Heredoc */\n\t.sx, \t\t/* Literal.String.Other */\n\t.sr, \t\t/* Literal.String.Regex */\n\t.s1, \t\t/* Literal.String.Single */\n\t.s2 \t\t/* Literal.String.Double */\n\t\t\t\t\t{ color: @article-code-accent3 }\n\n\t.err, /* Error */\n\t.fm, \t\t/* Name.Function.Magic */\n\t.gr, \t\t/* Generic.Error */\n\t.gd, \t\t/* Generic.Deleted */\n\t.nd, \t\t/* Name.Decorator */\n\t.ne, \t\t/* Name.Exception */\n\t.nf, \t\t/* Name.Function */\n\t.nl, \t\t/* Name.Label */\n\t.si \t\t/* Literal.String.Interpol */\n\t\t\t\t\t{ color: @article-code-accent4 }\n\n\t.m, \t\t/* Literal.Number */\n\t.ni, \t\t/* Name.Entity */\n\t.mb, \t\t/* Literal.Number.Bin */\n\t.mf, \t\t/* Literal.Number.Float */\n\t.mh, \t\t/* Literal.Number.Hex */\n\t.mi, \t\t/* Literal.Number.Integer */\n\t.mo, \t\t/* Literal.Number.Oct */\n\t.vc, \t\t/* Name.Variable.Class */\n\t.vg, \t\t/* Name.Variable.Global */\n\t.vi, \t\t/* Name.Variable.Instance */\n\t.vm, \t\t/* Name.Variable.Magic */\n\t.il \t\t/* Literal.Number.Integer.Long */\n\t\t\t\t\t{ color: @article-code-accent5 }\n\n\t.gp, \t\t/* Generic.Prompt */\n\t.o \t\t/* Operator */\n\t\t\t\t\t{ color: @article-code-accent6 }\n\n\t.ss \t\t/* Literal.String.Symbol */\n\t\t\t\t\t{ color: @article-code-accent7 }\n\n\t// FONT STYLES\n\n\t.cs \t\t/* Comment.Special */\n\t.gh, \t\t/* Generic.Heading */\n\t.gu, \t\t/* Generic.Subheading */\n\t.gp, \t\t/* Generic.Prompt */\n\t.gs, \t\t/* Generic.Strong */\n\t.k, \t\t/* Keyword */\n\t.kc, \t\t/* Keyword.Constant */\n\t.kd, \t\t/* Keyword.Declaration */\n\t.kn, \t\t/* Keyword.Namespace */\n\t.kp, \t\t/* Keyword.Pseudo */\n\t.kr, \t\t/* Keyword.Reserved */\n\t.kt, \t\t/* Keyword.Type */\n\t.nc, \t\t/* Name.Class */\n\t.ne, \t\t/* Name.Exception */\n\t.ni, \t\t/* Name.Entity */\n\t.nn \t\t/* Name.Namespace */\n\t.nt, \t\t/* Name.Tag */\n\t.ow, \t\t/* Operator.Word */\n\t.se \t\t/* Literal.String.Escape */\n\t\t\t\t\t{ font-weight: bold }\n\n\t.c, \t\t/* Comment */\n\t.ch, \t\t/* Comment.Hashbang */\n\t.cm, \t\t/* Comment.Multiline */\n\t.cpf, \t/* Comment.PreprocFile */\n\t.c1, \t\t/* Comment.Single */\n\t.cs,\t\t/* Comment.Special */\n\t.ge, \t\t/* Generic.Emph */\n\t.sd ,\t\t/* Literal.String.Doc */\n\t.w \t\t/* Text.Whitespace */\n\t\t\t\t\t{ font-style: italic }\n}\n","//\n// Custom Font (Klavika)\n// --------------------------------------------------\n\n@font-face {\n font-family: Klavika-Light;\n src: url(../fonts/KlavikaLight-ItalicTF.otf);\n font-weight: 200;\n font-style: italic;\n}\n@font-face {\n font-family: Klavika-Bold;\n src: url(../fonts/KlavikaBoldBoldItalic.otf);\n font-weight: 700;\n font-style: italic;\n}\n\n//\n// Resets\n// --------------------------------------------------\n\nhtml {\n\toverflow: auto;\n}\nhtml,body {\n\twidth: 100%;\n\theight: 100%;\n\tbackground-color: @body-bg-color;\n -webkit-overflow-scrolling: touch;\n}\nbody {\n\tcolor: @default-text-color;\n\tline-height: 1;\n\toverflow: auto;\n}\n* {\n\tbox-sizing: border-box;\n}\nhtml,\ndiv,\nspan,\napplet,\nobject,\niframe,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\np,\nblockquote,\npre,\na,\nabbr,\nacronym,\naddress,\nbig,\ncite,\ncode,\ndel,\ndfn,\nem,\nimg,\nins,\nkbd,\nq,\ns,\nsamp,\nsmall,\nstrike,\nstrong,\nsub,\nsup,\ntt,\nvar,\nb,\nu,\ni,\ncenter,\ndl,\ndt,\ndd,\nol,\nul,\nli,\nfieldset,\nform,\nlabel,\nlegend,\ntable,\ncaption,\ntbody,\ntfoot,\nthead,\ntr,\nth,\ntd,\narticle,\naside,\ncanvas,\ndetails,\nembed,\nfigure,\nfigcaption,\nfooter,\nheader,\nhgroup,\nmenu,\nnav,\noutput,\nruby,\nsection,\nsummary,\ntime,\nmark,\naudio,\nvideo {\n\tmargin: 0;\n\tpadding: 0;\n\tborder: 0;\n\tfont-size: 100%;\n\tvertical-align: baseline;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmenu,\nnav,\nsection {\n\tdisplay: block;\n}\nol,\nul {\n\tlist-style: none;\n}\nblockquote,\nq {\n\tquotes: none;\n}\nblockquote:before,\nblockquote:after,\nq:before,\nq:after {\n\tcontent: '';\n\tcontent: none;\n}\ntable {\n\tborder-collapse: collapse;\n\tborder-spacing: 0;\n}\n\n//\n// Import Modules\n// --------------------------------------------------\n@import \"layout-navbar.less\";\n@import \"layout-search-overrides.less\";\n@import \"layout-sidebar.less\";\n@import \"layout-sidebar-ads.less\";\n@import \"layout-article.less\";\n@import \"layout-home.less\";\n@import \"layout-error-pages.less\";\n@import \"tabs.less\";\n@import \"telegraf-plugins.less\";\n\n//\n// Media Queries\n// --------------------------------------------------\n@media (min-width: @breakpoint-small) {\n\tbody {\n\t\tpadding-bottom: 0;\n\t}\n}\n","/*\n\n\tNAVIGATION BAR\n\n\t____________________________________________________________\n\n\tNotes:\n\t-\tOnly contains styles relevant to the navbar module\n\n*/\n@nav-font-size: 19px;\n\n.navbar {\n\ttop: 0;\n\tleft: 0;\n\tfont-size: 1rem;\n\theight: @nav-height;\n\twidth: 100%;\n\tbackground-color: @nav-bg;\n\tz-index: @z-nav;\n\tposition: relative;\n}\n.navbar--logo,\n.navbar--hamburger,\n.navbar--product-dropdown,\n.navbar--search,\n.theme-switcher {\n\tposition: absolute;\n}\n.navbar--logo {\n\tleft: 1em;\n\ttop: 1.05em;\n\ta {\n\t\tfont-size: 1.5rem;\n\t\tcolor: @nav-logo;\n\t\ttransition: color 0.25s ease;\n\t\t&:hover {\n\t\t\tcolor: @nav-logo-hover;\n\t\t}\n\t}\n\t.divider {\n\t\tborder-left: 1px solid @nav-logo;\n margin: 0 .8rem 0 .5rem;\n vertical-align: text-top;\n\t\topacity: .35;\n\t\tline-height: 1.15em;\n\t}\n\t.navbar--docs {\n\t\tfont-size: 1.3rem;\n\t}\n}\n.navbar--hamburger {\n\twidth: @nav-height;\n\theight: @nav-height;\n\tright: 0;\n\n\t.navbar--hamburger-bar {\n\t\twidth: @nav-height * 0.3em;\n\t\theight: 2px;\n\t\tbackground-color: @nav-hamburger;\n\t\tborder-radius: 1px;\n\t\tposition: absolute;\n\t\tleft: 50%;\n\t\ttransition: all 0.3s ease;\n\n\t\t&.top {\n\t\t\ttop: 40%;\n\t\t\ttransform: translate(-50%,-50%);\n\t\t}\n\t\t&.middle {\n\t\t\ttop: 50%;\n\t\t\ttransform: translate(-50%,-50%);\n\t\t}\n\t\t&.bottom {\n\t\t\ttop: 60%;\n\t\t\ttransform: translate(-50%,-50%);\n\t\t}\n\t}\n\n\t&:hover {\n\t\tcursor: pointer;\n\n\t\t.navbar--hamburger-bar {\n\t\t\tbackground-color: @nav-hamburger-hover;\n\t\t}\n\t}\n\n\t&.open {\n\t\t.navbar--hamburger-bar {\n\t\t\t&.top {\n\t\t\t\ttop: 50%;\n\t\t\t\ttransform: translate(-50%,-50%) rotate(45deg);\n\t\t\t}\n\t\t\t&.middle {\n\t\t\t\topacity: 0;\n\t\t\t}\n\t\t\t&.bottom {\n\t\t\t\ttop: 50%;\n\t\t\t\ttransform: translate(-50%,-50%) rotate(-45deg);\n\t\t\t}\n\t\t}\n\t}\n}\n.navbar--product-menu {\n\twidth: 100%;\n\tposition: absolute;\n\ttop: .5em;\n\theight: auto;\n\topacity: 0;\n\ttransition: opacity 0.25s ease;\n\t.gradient-v(@c-ocean,@c-pool);\n}\n.navbar--product-container {\n\twidth: 100%;\n\theight: auto;\n\tposition: absolute;\n\ttop: calc(@nav-height * .85);\n\tleft: 0;\n\tvisibility: hidden;\n\ttransition: all 0.25s ease;\n\n\tz-index: 100;\n\n\t&.open {\n\t\tvisibility: visible;\n\n\t\t.navbar--product-menu {\n\t\t\topacity: 1;\n\t\t}\n\t}\n}\n.navbar--product-divider {\n\tmargin: 0.25em 0;\n\theight: 2px;\n\tbackground-color: fadeout(@g6-smoke, 90%);\n}\n.navbar--product {\n\tfont-size: @nav-font-size;\n\t&:link,\n\t&:active,\n\t&:visited {\n\t\tcolor: @g20-white;\n\t\ttransition:\n\t\t\tbackground-color 0.25s ease,\n\t\t\tcolor 0.25s ease;\n\t\tbackground-color: transparent;\n\t\tpadding: 1.25rem 1rem;\n\t\tdisplay: block;\n\t\twidth: 100%;\n\t}\n\t&:hover {\n\t\tbackground-color: fadeout(@g5-pepper, 88%);\n\t\tcolor: @g20-white;\n\t}\n}\n.navbar--product-dropdown {\n\tdisplay: none;\n\ttop: .5em;\n\tbackground-color: @c-ocean;\n\theight: @nav-component-height;\n\tborder-radius: @radius;\n\ttransition:\n\t\tbackground-color 0.25s ease,\n\t\tcolor 0.25s ease;\n\t&:hover {\n\t\tcursor: pointer;\n\t\tbackground-color: @c-pool;\n\t}\n\t.navbar--current-product,\n\t.navbar--product-dropdown-caret {\n\t\tposition: absolute;\n\t\ttop: 50%;\n\t\ttransform: translateY(-50%);\n\t\tcolor: @g20-white;\n\t}\n\n\t.navbar--current-product {\n\t\tfont-weight: 700;\n\t\tleft: 1rem;\n\t\tfont-size: @nav-font-size;\n\t\tfont-weight: 400;\n\t}\n\t.navbar--product-dropdown-caret {\n\t\tright: 1rem;\n\t\tfont-size: 0.625em;\n\t}\n}\n.navbar--search {\n\theight: @nav-component-height;\n\twidth: @search-default-width;\n\tright: @nav-height;\n\ttop: .5em;\n\n\t> * {\n\t\tposition: absolute !important;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t}\n}\n.navbar--search-field {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\twidth: 100%;\n\theight: 100%;\n\tborder-radius: @radius;\n\tborder: 2px solid @nav-search-border;\n\tcolor: @nav-search-text;\n\tbackground-color: @nav-search-bg;\n\tpadding: 0 1rem;\n\tfont-weight: 400;\n\tfont-size: @nav-font-size;\n\toutline: none;\n\ttransition:\n\t\tborder-color 0.3s ease,\n\t\tcolor 0.3s ease;\n\t&:focus {\n\t\tborder-color: @nav-search-border-focus;\n\t\tcolor: @nav-search-border-focus;\n\t}\n}\n.algolia-autocomplete {\n\twidth: 100%;\n\n\t.aa-input,\n\t.aa-hint {\n\t\twidth: 100%;\n\t}\n\t.aa-hint {\n\t\tcolor: #f00;\n\t}\n\t.aa-dropdown-menu {\n\t\tmargin: @search-offset 0 0 0;\n\t\twidth: 100%;\n\t\tpadding: 0.75rem;\n\t\tbackground-color: fadeout(@algolia-background, 30%);\n\t\tborder: 0px;\n\n\t\t.algolia-docsearch-suggestion--highlight {\n\t\t\tcolor: @algolia-highlight-color;\n\t\t}\n\n\t\t.aa-suggestion {\n\t\t\tcursor: pointer;\n\t\t\tpadding: 0;\n\n\t\t\t.algolia-docsearch-suggestion {\n\t\t\t\tbackground-color: @algolia-category-header;\n\t\t\t\tborder-radius: @radius;\n\t\t\t\toverflow: hidden;\n\t\t\t}\n\t\t\t.algolia-docsearch-suggestion__secondary {\n\t\t\t\tborder: none;\n\t\t\t\tmargin-top: 2px;\n\t\t\t}\n\t\t\t&:first-child .algolia-docsearch-suggestion__secondary {\n\t\t\t\tmargin-top: 0;\n\t\t\t}\n\t\t\t.algolia-docsearch-suggestion--category-header {\n\t\t\t\tborder-radius: @radius @radius 0 0;\n\t\t\t\tbackground-color: @algolia-category-header;\n\t\t\t\tcolor: @algolia-category-header-text;\n\t\t\t\tpadding: 0.75rem 1rem;\n\t\t\t\tfont-weight: 500;\n\n\t\t\t\t.algolia-docsearch-suggestion--highlight {\n\t\t\t\t\tbackground-color: transparent;\n\t\t\t\t}\n\t\t\t}\n\t\t\t.algolia-docsearch-suggestion--subcategory-column {\n\t\t\t\tborder: none;\n\t\t\t\tbackground-color: @algolia-suggestion-column;\n\t\t\t}\n\t\t\t.algolia-docsearch-suggestion--content {\n\t\t\t\tbackground-color: @algolia-suggestion-content;\n\t\t\t}\n\t\t\t.algolia-docsearch-suggestion--title {\n\t\t\t\tmargin-bottom: 0.25rem;\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tcolor: @algolia-suggestion-text;\n\t\t\t}\n\t\t\t.algolia-docsearch-suggestion--text {\n\t\t\t\tcolor: @algolia-suggestion-text-alt;\n\t\t\t}\n\t\t\t.algolia-docsearch-suggestion--subcategory-column-text {\n\t\t\t\tfont-size: 0.8rem;\n\t\t\t\tline-height: 1.4em;\n\t\t\t\tcolor: @algolia-suggestion-text-alt;\n\t\t\t}\n\t\t\t// Highlight style\n\t\t\t&.aa-cursor {\n\n\t\t\t\t.algolia-docsearch-suggestion--content {\n\t\t\t\t\t.gradient-h(@algolia-cursor-bg1,@algolia-cursor-bg2);\n\t\t\t\t}\n\t\t\t\t.algolia-docsearch-suggestion--text,\n\t\t\t\t.algolia-docsearch-suggestion--title {\n\t\t\t\t\tcolor: @algolia-cursor-text;\n\t\t\t\t\t.algolia-docsearch-suggestion--highlight {\n\t\t\t\t\t\tcolor: @algolia-cursor-highlight !important;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tem {\n\t\t\t\tfont-weight: bold;\n\t\t\t\tfont-style: normal;\n\t\t\t}\n\t\t}\n\t}\n\t.algolia-docsearch-footer {\n\t\tborder: none;\n\t\tpadding: 0.75rem 0 0 0;\n\t}\n}\n.theme-switcher {\n\tdisplay: none;\n\twidth: @nav-height;\n\theight: @nav-height;\n\tright: 0;\n\tborder: 0;\n\toutline: none;\n\tbackground-color: @nav-bg;\n\tcolor: @nav-logo;\n\n\t.icon {\n\t\ttransition: color 0.25s ease;\n\t}\n\t.sun2 {\n\t\tfont-size: 1.5rem;\n\t}\n\t.moon {\n\t\tfont-size: 1.2rem;\n\t}\n\n\t&:hover {\n\t\tcolor: @nav-logo-hover;\n\t\tcursor: pointer;\n\t}\n}\n\n//\n// Media Queries\n// --------------------------------------------------\n@media (max-width: 500px) {\n\t.navbar--logo {\n\t\t.logotype {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.logo {\n\t\t\tdisplay: inline;\n\t\t}\n\t}\n}\n@media (min-width: 500px) {\n\t.navbar--logo {\n\t\t.logotype {\n\t\t\tdisplay: inline;\n\t\t}\n\t\t.logo {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n}\n\n@media (min-width: 501px) {\n\n}\n\n@media (min-width: @breakpoint-small) {\n\t.theme-switcher {\n\t\tdisplay: block;\n\t}\n\t.navbar--product-dropdown {\n\t\tdisplay: block;\n\t\tleft: @sidebar-small-width;\n\t\twidth: @product-dropdown-small-width;\n\t}\n\t.navbar--product-container {\n\t\tleft: @sidebar-small-width;\n\t\twidth: @product-dropdown-small-width;\n\t\ttop: 2.9em;\n\n\t\t&.open {\n\t\t\t.navbar--dropdown-dismiss {\n\t\t\t\twidth: 100vw;\n\t\t\t\theight: 100vh;\n\t\t\t\tposition: fixed;\n\t\t\t\ttop: 0;\n\t\t\t\tleft: 0;\n\t\t\t\tz-index: 100;\n\n\t\t\t\t&:hover {\n\t\t\t\t\tcursor: pointer;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t.navbar--product-menu {\n\t\tborder-radius: 0 0 @radius @radius;\n\t\toverflow: hidden;\n\t\tz-index: 110;\n\t}\n\t.navbar--search {\n\t\tleft: @search-small-position;\n\t\twidth: @search-small-width;\n\t}\n\t.navbar--hamburger {\n\t\tdisplay: none;\n\t}\n\t.navbar--product.external {\n\t\tfont-size: 0.8rem;\n\t}\n}\n@media (min-width: @breakpoint-large) {\n\t.navbar--product-dropdown {\n\t\tleft: @sidebar-large-width;\n\t\twidth: @product-dropdown-large-width;\n\t}\n\t.navbar--product-container {\n\t\tleft: @sidebar-large-width;\n\t\twidth: @product-dropdown-large-width;\n\t}\n\t.navbar--search {\n\t\tleft: @search-large-position;\n\t\twidth: @search-large-width;\n\t}\n}\n@media (min-width: @breakpoint-huge) {\n\t.navbar--product-dropdown {\n\t\tleft: @sidebar-huge-width;\n\t\twidth: @product-dropdown-huge-width;\n\t}\n\t.navbar--product-container {\n\t\tleft: @sidebar-huge-width;\n\t\twidth: @product-dropdown-huge-width;\n\t}\n\t.navbar--search {\n\t\tleft: @search-huge-position;\n\t\twidth: @search-huge-width;\n\t}\n}\n",".algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu {\n\tright: 0 !important;\n\tleft: auto !important;\n\toverflow: scroll !important;\n\tmax-height: 90vh !important;\n\n\t&:before {\n\t\tdisplay: none;\n\t}\n}\n\n.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion {\n &--wrapper { padding: .2rem 0; }\n &--subcategory-column { display: none; }\n &--content {\n padding: .75rem;\n width: 100%;\n float: none;\n &:before {\n display: none;\n }\n }\n}\n\n.algolia-autocomplete .algolia-docsearch-footer {\n padding: 0;\n}\n\n@media (min-width: 1330px) {\n\t.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu {\n\t\tright: auto !important;\n\t\tleft: 0 !important;\n\t}\n}\n\n@media (max-width: 768px) {\n\t.algolia-docsearch-suggestion--subcategory-column {\n\t\tdisplay: none !important;\n\t}\n\t.algolia-docsearch-suggestion--wrapper {\n\t\tmargin: .25em 0 !important;\n\t}\n}\n\n@media (max-width: 570px) {\n\t.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu {\n\t\tposition: fixed !important;\n\t\ttop: 3.5em !important;\n\t\tleft: 0;\n\t\tmin-width: 100vw;\n\t}\n}\n","/*\n\n SIDEBAR\n\n ____________________________________________________________\n\n Notes:\n - Only contains styles relevant to the sidebar module\n - .sidebar--toggle only appears on small screens\n\n*/\n\n.sidebar--toggle {\n padding: 1em;\n position: relative;\n z-index: @z-sidebar--toggle;\n height: @sidebar--toggle-height;\n width: 100%;\n background-color: @g6-smoke;\n text-align: left;\n font-style: italic;\n color: @g18-cloud;\n font-weight: 500;\n transition:\n background-color 0.25s ease,\n color 0.25s ease;\n\n &:hover {\n color: @g20-white;\n background-color: @g7-graphite;\n cursor: pointer;\n }\n\n &:before,\n &:after {\n content: \"\";\n position: absolute;\n display: block;\n right: 1em;\n top: 1.45em;\n height: 2px;\n width: 15px;\n background: @g11-sidewalk;\n }\n\n &:before {\n transform: rotate(90deg);\n transition: all .2s;\n }\n\n &.open:before {\n transform: rotate(180deg);\n }\n}\n\n.sidebar {\n background-color: @sidebar-bg;\n height: 100%;\n overflow: hidden;\n transition: max-height 0.2s ease-out;\n\n &::-webkit-scrollbar { background-color: @sidebar-bg; width: @scrollbar-width; }\n &::-webkit-scrollbar-track { background-color: @sidebar-bg; }\n &::-webkit-scrollbar-thumb { border: 4px solid @sidebar-bg; background-color: @sidebar-scrollbar; border-radius: @scrollbar-width/2; }\n\n &.open {\n max-height: 4000px;\n transition: max-height 0.5s ease-in;\n }\n\n &--section {\n border-top: 2px solid @sidebar-divider;\n padding: 2em 0;\n\n &:first-child {\n border: none;\n }\n\n &-title {\n color: @sidebar-title-color;\n padding: 0 2rem 1em 2rem;\n font-size: 1.25em;\n\n a:link,\n a:active,\n a:visited {\n color: @sidebar-title-color;\n font-weight: 400;\n }\n a:hover {\n color: @sidebar-hover;\n }\n }\n\n ul {\n padding-left: 3rem;\n li {\n position: relative;\n margin-bottom: .25rem;\n }\n }\n }\n}\n\nul.sidebar--children {\n // padding-left: 1.5rem;\n margin-left: -1.85rem;\n height: 0;\n overflow: hidden;\n\n &.open {\n height: auto;\n overflow: visible;\n border-left: 2px solid @sidebar-divider;\n }\n\n & li:first-child {\n margin-top: .25rem;\n }\n}\n\n.sidebar--children-toggle {\n position: absolute;\n left: -2.25rem;\n top: .2rem;\n height: .9rem;\n width: .9rem;\n background: @sidebar-toggle-bg;\n border-radius: 50%;\n transition: all .2s;\n\n &:before {\n content: \"+\";\n color: @sidebar-toggle-icon;\n display: block;\n text-align: center;\n }\n\n &.open:before {\n content: \"–\";\n }\n\n &:hover {\n background: @sidebar-title-color;\n &:before {\n color: @g20-white;\n }\n }\n}\n\na.sidebar--page {\n &:link,\n &:active,\n &:visited {\n display: inline-block;\n color: @sidebar-text;\n font-weight: 500;\n text-indent: -1rem;\n line-height: 1.25;\n }\n &:hover {\n color: @sidebar-hover;\n }\n}\n\n//\n// Media Queries\n// --------------------------------------------------\n@media (max-width: @breakpoint-small) {\n .sidebar {\n height: auto;\n max-height: 0;\n }\n}\n\n@media (min-width: @breakpoint-small) {\n .sidebar--toggle {\n display: none;\n }\n .sidebar,\n .sidebar.open {\n position: fixed;\n z-index: @z-sidebar-desktop;\n width: @sidebar-small-width;\n transform: none;\n transition: none;\n top: @nav-height;\n max-height: 100%;\n overflow: auto;\n padding-bottom: @nav-height;\n }\n}\n@media (min-width: @breakpoint-large) {\n .sidebar,\n .sidebar.open {\n width: @sidebar-large-width;\n }\n}\n@media (min-width: @breakpoint-huge) {\n .sidebar,\n .sidebar.open {\n width: @sidebar-huge-width;\n }\n .sidebar--support-ad {\n padding: 2rem 1.5rem;\n\n &--desc {\n font-size: 1.2em;\n }\n }\n}\n","#sidebar--ad {\n margin: -0.75rem 1rem;\n border-radius: @radius;\n\n &.cloud {\n background: linear-gradient(45deg, #9394FF, #22ADF6);\n padding: 1.5rem 1.5rem;\n text-align: center;\n\n .text {\n margin: 0 0 1rem 0;\n color: @g20-white;\n line-height: 1.3em;\n font-size: 1.1em;\n font-weight: 500;\n }\n\n .cta {\n margin-left: 0;\n margin-right: 0;\n border-radius: @radius;\n color: @g20-white;\n border: 2px solid fadeout(@g20-white, 60%);\n background-color: transparent;\n transition:\n background-color 0.25s ease,\n border-color 0.25s ease;\n padding: 0.75em 1.5em;\n font-weight: 700;\n display: inline-block;\n font-size: 1.125em;\n\n &:hover {\n background-color: fadeout(@g20-white, 85%);\n border-color: fadeout(@g20-white, 40%)\n }\n }\n }\n\n &.enterprise {\n background: linear-gradient(to right, @c-rainforest,@c-pool);\n padding: 1.5rem 1.5rem;\n text-align: center;\n\n .text {\n margin: 0 0 1rem 0;\n color: @g20-white;\n line-height: 1.3em;\n // font-size: 1.2em;\n font-weight: 500;\n }\n\n .cta {\n margin-left: 0;\n margin-right: 0;\n border-radius: @radius;\n color: @g20-white;\n border: 2px solid fadeout(@g20-white, 60%);\n background-color: transparent;\n transition:\n background-color 0.25s ease,\n border-color 0.25s ease;\n padding: 0.75em 1.5em;\n font-weight: 700;\n display: inline-block;\n font-size: 1.125em;\n\n &:hover {\n background-color: fadeout(@g20-white, 85%);\n border-color: fadeout(@g20-white, 40%)\n }\n }\n }\n\n &.influx-days {\n padding: 1rem;\n background: url(\"/promos/assets/influx-days-bg.jpg\");\n background-repeat: no-repeat;\n background-size: cover;\n color: @g20-white;\n font-weight: bold;\n\n img {\n margin: .4rem 0 .8rem;\n }\n\n .text {\n font-size: 1.75rem;\n margin-bottom: .5rem;\n }\n .details {\n font-size: .9rem;\n line-height: 1.1rem;\n }\n .cta {\n display: inline-block;\n margin-top: .85rem;\n color: @g20-white;\n background: #5CBB47;\n font-size: 1.15rem;\n padding: .45rem 1.75rem;\n border-radius: @radius;\n }\n }\n}\n","/*\n\n\tINDIVIDUAL ARTICLE\n\n\t____________________________________________________________\n\n\tNotes:\n\t-\tTypography uses a type scale of 1.3\n\t-\tI've made use of EMs such that you can proportionally scale the type\n\t\tby changing the font size on .page using REMs as the unit\n\n\n*/\n\n::selection {\n\tbackground-color: @default-selection-bg;\n\tcolor: @default-selection-text; /* WebKit/Blink Browsers */\n}\n::-moz-selection {\n\tbackground-color: @default-selection-bg;\n\tcolor: @default-selection-text; /* Gecko Browsers */\n}\na {\n\ttext-decoration: none;\n\ttransition: color 0.2s ease;\n\n\t&:hover {\n\t\tcursor: pointer;\n\t}\n}\n\n.article {\n\tbackground-color: @article-bg;\n\toverflow: auto;\n\twidth: 100%;\n\n\t&::-webkit-scrollbar { background-color: @article-bg; width: @scrollbar-width; }\n\t&::-webkit-scrollbar-track { background-color: @article-bg; }\n\t&::-webkit-scrollbar-thumb { border: 4px solid @article-bg; background-color: @article-scrollbar; border-radius: @scrollbar-width/2; }\n\n}\n.article-section {\n\tdisplay: block;\n\twidth: 100%;\n\ttext-align: center;\n\tpadding: 2rem;\n\n\t&.article-heading {\n\t\tbackground-color: @article-bg-heading;\n\t\tbackground-position: center center;\n\t\tbackground-size: cover !important;\n\t\tbackground-repeat: no-repeat;\n\n\t\th1 {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t}\n\n\t&.article-footer {\n\t\t.gradient-v(@article-bg-footer,@article-bg);\n\t}\n}\n.article-content {\n\ttext-align: left;\n\twidth: 100%;\n\tmax-width: 760px;\n\tcolor: @article-text;\n\n\ta:link,\n\ta:active,\n\ta:visited {\n\t\tfont-weight: 700;\n\t\tcolor: @default-link-color;\n\t}\n\ta:hover {\n\t\tcolor: @default-link-hover;\n\t\tcursor: pointer;\n\t}\n\ta.top {\n\t\tfont-size: 6px;\n\t\tpadding: .25rem .25rem .35rem;\n\t\tborder-radius: @radius;\n\t\ttransition: all .2s;\n\t\t&:hover {\n\t\t\tcolor: @article-bg !important;\n\t\t\tbackground: @default-link-hover;\n\t\t}\n\t}\n\ta.off-page:link:after {\n\t\tcontent: '\\ea43';\n\t\tfont-family: 'icomoon';\n\t\tfont-size: .75em;\n\t\tfont-weight: normal;\n\t\tvertical-align: bottom;\n\t\tdisplay: inline;\n\t\tmargin-left: .5em;\n\t\topacity: .25;\n\t\ttransition: color 0.2s ease;\n\t\tcolor: @default-text-color;\n\t}\n\tp,li {\n\t\ta {\n\t\t\tcode {\n\t\t\t\tposition: relative;\n\t\t\t\t&:after {\n\t\t\t\t\tcontent: \"\";\n\t\t\t\t\tposition: absolute;\n\t\t\t\t\ttop: -1px;\n\t\t\t\t\tright: -1px;\n\t\t\t\t\twidth: 0;\n\t\t\t\t\theight: 0;\n\t\t\t\t\tborder-style: solid;\n\t\t\t\t\tborder-width: 0 .5em .5em 0;\n\t\t\t\t\tborder-color: transparent @article-code-color transparent transparent;\n\t\t\t\t\topacity: .5;\n\t\t\t\t\ttransition: all .2s;\n\t\t\t\t}\n\t\t\t\t&:hover:after {\n\t\t\t\t\topacity: 1;\n\t\t\t\t\tborder-color: transparent @default-link-hover transparent transparent;\n\t\t\t\t}\n\t\t\t}\n\t\t\t&.btn {\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tcolor: @g20-white;\n\t\t\t\tfont-size: .95rem;\n\t\t\t\tpadding: .5em 1em;\n\t\t\t\tmargin: 1em 0 1.5em;\n\n\t\t\t\t&.download:before {\n\t\t\t\t\tcontent: '\\e964';\n\t\t\t\t\tfont-family: 'icomoon';\n\t\t\t\t\tfont-size: 1.15em;\n\t\t\t\t\tfont-weight: normal;\n\t\t\t\t\tvertical-align: bottom;\n\t\t\t\t\tdisplay: inline;\n\t\t\t\t\tmargin-right: .5em;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t> * {\n\t\ttext-decoration: none;\n\t}\n\th1,\n\th2,\n\th3,\n\th4,\n\tp,\n\tul,\n\tol,\n\tli,\n\tblockquote,\n\t.note,\n\tdt,\n\t.warn,\n\tpre {\n\t\tdisplay: block;\n\t\tmargin-bottom: @margin-bottom-base;\n\t\tline-height: 1.45em;\n\t}\n\ttable {\n\t\tmargin: 1em 0 @margin-bottom-base;\n\t\toverflow-x: auto;\n\t\tbackground-color: @article-bg;\n\t}\n\n\t/* Headings */\n\th1,h2,h3,h4,h5,h6 {\n\t\twidth: 100%;\n\t\tcolor: @article-text-heading;\n\n\t\t/* Offset trick to prevent anchors being obscured by the navbar */\n\t\ta.offset-anchor {\n\t\t\tdisplay: block;\n\t\t\tposition: relative;\n\t\t\ttop: -120px;\n\t\t\tvisibility: hidden;\n\t\t}\n\n\t\t/* Maintain heading styles when anchors are present */\n\t\ta:link,\n\t\ta:active,\n\t\ta:visited,\n\t\ta:hover {\n\t\t\ttext-decoration: none;\n\t\t\tfont-weight: inherit;\n\t\t\tcolor: @article-text-heading !important;\n\t\t}\n\t\t&:first-child {\n\t\t\tmargin-top: 0;\n\t\t}\n\t}\n\th1 {\n\t\tfont-size: @heading1Size;\n\t\t.klavika-font;\n\t\tline-height: 1.2em;\n\t}\n\th2 {\n\t\tfont-size: @heading2Size;\n\t\tfont-weight: 600;\n\t\tmargin: 1.5em 0 .5em;\n\t}\n\th3 {\n\t\tfont-size: @heading3Size;\n\t\tfont-weight: 700;\n\t\tmargin: 1em 0 .5em;\n\t}\n\th4 {\n\t\tfont-size: @heading4Size;\n\t\tfont-weight: 400;\n\t\tfont-style: italic;\n\t\tmargin: 1.25em 0 .5em;\n\t}\n\th5 {\n\t\tline-height: 1.6em;\n\t}\n\th6 {\n\t\tfont-size: @paragraphSize*.95;\n\t\tfont-style: italic;\n\t\tline-height: 1.6em;\n\t}\n\n\t&.section-landing{\n\t\th2 a.off-page:link:hover {\n\t\t\tcolor: @default-link-color !important;\n\t\t}\n\t}\n\n\t/* Markdown Elements */\n\tp {\n\t\tfont-size: 1em;\n\t}\n\tol,ul {\n\t\tfont-size: 1em;\n\t\tpadding-left: 1.125em;\n\n\t\tli {\n\t\t\tdisplay: list-item;;\n\t\t\tlist-style-position: outside;\n\t\t\tpadding-left: 0.5em;\n\t\t\tmargin-bottom: .25em;\n\t\t}\n\t\tp {\n\t\t\tmargin-left: 0;\n\t\t}\n\t}\n\tul > li {\n\t\tlist-style-type: disc !important;\n\t}\n\tol li,\n\tul ol li {\n\t\tlist-style-type: decimal;\n\t}\n\tol ol li {\n\t\tlist-style-type: lower-alpha;\n\t}\n\tol ol ol li {\n\t\tlist-style-type: decimal;\n\t}\n\tul ul ul li {\n\t\tlist-style-type: square;\n\t}\n\tli:last-child {\n\t\tmargin-bottom: 0;\n\t}\n\tol ol,\n\tul ul,\n\tol ul,\n\tul ol {\n\t\twidth: 100%;\n\t\tmargin-left: 0;\n\t\tmargin-bottom: 0;\n\t\tmargin-top: .25em;\n\t}\n\thr {\n\t\twidth: 100%;\n\t\theight: 2px;\n\t\tmargin-top: 0.25em;\n\t\tmargin-bottom: 1em;\n\t\tborder: none;\n\t\tdisplay: block;\n\t\tbackground-color: @article-line-color;\n\t}\n\timg {\n\t\tmax-width: 100%;\n\t\theight: auto;\n\t\tborder-radius: @radius;\n\t}\n\ttd,\n\tth {\n\t\tborder: @border-small-screen solid @article-line-color;\n\t\tfont-size: 0.875em;\n\t\tline-height: 1.2em;\n\t\tpadding: 0.75em 1.5em;\n\t}\n\ttr:nth-child(even) {\n\t\tbackground-color: @article-bg-darken;\n\t}\n\tthead {\n\t\ttr {\n\t\t\tbackground-color: @article-bg-highlight !important;\n\t\t}\n\t\tth {\n\t\t\tpadding: 1.25em 1.5em;\n\t\t}\n\t}\n\t/* Notes
    and Gotchas
    */\n\tdt,\n\t.warn,\n\tblockquote,\n\t.note {\n\t\tfont-size: @smallTextSize;\n\t\tpadding: 1em 1.5em;\n\t\tborder-radius: @radius;\n\t\tborder-style: solid;\n\t\tborder-left-width: @thick-left-border;\n\n\t\tpre,h4,p,ol,ul {\n\t\t\twidth: 100%;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t> *:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.tooltip {\n\t\t\tcolor: @article-tooltip-nested;\n\t\t}\n\t}\n\tblockquote,\n\t.note {\n\t\tfont-style: italic;\n\t\tcolor: @article-note-text;\n\t\tborder-color: @article-note-border;\n\t\tbackground-color: @article-note-bg;\n\t\tcode {\n\t\t\tcolor: @article-note-code;\n\t\t\tbackground: @article-note-code-bg;\n\t\t\tborder: 1px solid @article-note-code-border;\n\t\t}\n\t\tpre {\n\t\t\tbackground: @article-note-code-bg;\n\t\t\tborder-color: @article-note-code-border;\n\t\t\tcode { border: none; }\n\t\t}\n\t}\n\tdt,\n\t.warn {\n\t\tcolor: @article-gotcha-text;\n\t\tborder-color: @article-gotcha-border;\n\t\tbackground-color: @article-gotcha-bg;\n\t\tcode {\n\t\t\tcolor: @article-gotcha-code;\n\t\t\tbackground: @article-gotcha-code-bg;\n\t\t\tborder: 1px solid @article-gotcha-code-border;\n\t\t}\n\t\tpre {\n\t\t\tbackground: @article-gotcha-code-bg;\n\t\t\tborder-color: @article-gotcha-code-border;\n\t\t\tcode { border: none; }\n\t\t}\n\t}\n\t/* Inline Code & Code Blocks */\n\tcode {\n\t\tfont-family: Consolas, \"Lucida Console\", Monaco, monospace;\n\t\t-moz-tab-size: 1;\n\t\t-o-tab-size: 1;\n\t\ttab-size: 1;\n\t\tdirection: ltr;\n\t\t-webkit-hyphens: none;\n\t\t-moz-hyphens: none;\n\t\t-ms-hyphens: none;\n\t\thyphens: none;\n\t\tfont-size: @tinyTextSize !important;\n\t\tfont-style:normal !important;\n\t\tdisplay: inline;\n\t\tborder-radius: @radius;\n\t\tborder-width: @border-small-screen;\n\t\tborder-color: @article-code-border;\n\t\tborder-style: solid;\n\t\tpadding: 0.1em 0.5em;\n\t\t-webkit-font-smoothing: subpixel-antialiased !important;\n\t\t-moz-osx-font-smoothing: auto !important;\n\t\tfont-weight: 400 !important;\n\t\tcolor: @article-code-color;\n\t\tbackground-color: @article-code-bg;\n\t}\n\tpre {\n\t\tdisplay: block;\n\t\tpadding: 0.75em 1em;\n\t\toverflow: auto;\n\t\tborder-radius: @radius;\n\t\tborder-style: solid;\n\t\tborder-width: @border-small-screen @border-small-screen @border-small-screen @thick-left-border;\n\t\tbackground-color: @article-code-bg;\n\t\tborder-color: @article-code-border;\n z-index: 99;\n\t\tline-height: 1.1em !important;\n\n\t\tcode {\n\t\t\twhite-space: pre;\n\t\t\tword-spacing: normal;\n\t\t\tword-break: normal;\n\t\t\tborder: none;\n\t\t\tpadding: 0;\n\t\t\tborder-radius: 0;\n\t\t\tbackground-color: transparent;\n\t\t}\n\n\t\t&::-webkit-scrollbar { background-color: @article-code-bg;width: @scrollbar-width; }\n\t\t&::-webkit-scrollbar-track { background-color: @article-code-bg; }\n\t\t&::-webkit-scrollbar-thumb {\n\t\t\tborder: 4px solid @article-code-bg;\n\t\t\tbackground-color: @article-code-scrollbar;\n\t\t\tborder-radius: calc(@scrollbar-width / 2);\n\t\t}\n\t}\n}\n\n.page-nav-btns {\n\tdisplay: flex;\n\tposition: relative;\n\tjustify-content: space-between;\n\tmargin: 3em 0 2em;\n\n\ta {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolor: @g20-white !important;\n\t\tfont-size: .95rem;\n\t\tpadding: .75rem 1rem;\n\t\tmargin: 0 .15rem;\n\n\t\t&.prev {\n\t\t\tposition: absolute;\n\t\t\tleft: 0;\n\t\t\t&:before {\n\t\t\t\tcontent: '\\e804';\n\t\t\t\tfont-family: 'icomoon';\n\t\t\t\tfont-size: .85rem;\n\t\t\t\tfont-weight: normal;\n\t\t\t\tvertical-align: middle;\n\t\t\t\tdisplay: inline;\n\t\t\t\tmargin-right: .85rem;\n\t\t\t}\n\t\t}\n\n\t\t&.next {\n\t\t\tposition: absolute;\n\t\t\tright: 0;\n\t\t\t&:after {\n\t\t\t\tcontent: '\\e805';\n\t\t\t\tfont-family: 'icomoon';\n\t\t\t\tfont-size: .85rem;\n\t\t\t\tfont-weight: normal;\n\t\t\t\tvertical-align: middle;\n\t\t\t\tdisplay: inline;\n\t\t\t\tmargin-left: .85rem;\n\t\t\t}\n\t\t}\n\t}\n}\n\n//\n// Content truncater\n// --------------------------------------------------\n\n.truncate {\n\tposition: relative;\n\tmargin-bottom: 3.5rem;\n\n\t.truncate-bottom {\n\t\tposition: absolute;\n\t\tbottom: -30px;\n\t\twidth: 100%;\n\t\tz-index: 100%;\n\t\theight: auto;\n\t}\n\n\ta.truncate-toggle {\n\t\tdisplay: block;\n\t\twidth: 100px;\n\t\tmargin: 0 auto;\n\t\tcolor: @article-text;\n\t\tbackground: @article-bg;\n\t\tpadding: .45rem;\n\t\ttext-align: center;\n\t\tfont-size: .75rem;\n\t\ttext-transform: uppercase;\n\t\tborder-radius: @radius;\n\t\ttransition: color .2s;\n\t\t&:before{\n\t\t\tcontent: \"Show Less\"\n\t\t}\n\t\t&:hover {\n\t\t\tcolor: @default-link-color;\n\t\t}\n\t}\n\t&.closed {\n\t\tmin-height: 200px;\n\t\tmax-height: 25vh;\n\t\toverflow: hidden;\n\n\t\t.truncate-bottom {\n\t\t\tbottom: 0;\n\t\t\tbackground-image: linear-gradient(to bottom, @article-bg-rgba-0, @article-bg-rgba-1);\n\t\t\theight: 100px;\n\t\t}\n\n\t\ta.truncate-toggle {\n\t\t\tmargin-top: 75px;\n\t\t\t&:before {\n\t\t\t\tcontent: \"Show More\"\n\t\t\t}\n\t\t}\n\t}\n}\n\n//\n// Tooltips\n// --------------------------------------------------\n.tooltip {\n\tposition: relative;\n\tdisplay: inline-block;\n\tz-index: 10;\n\tfont-weight: 900;\n\tcolor: @article-tooltip;\n}\n.tooltip-container {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 50%;\n\ttransform: translateX(-50%);\n\toverflow: visible;\n\tvisibility: hidden;\n}\n.tooltip-text {\n\tfont-weight: 600;\n\tline-height: 2em;\n\theight: 2em;\n\tposition: absolute;\n\tborder-radius: @radius;\n\tpadding: 0 0.75em;\n\tfont-size: 0.9rem;\n\tleft: 50%;\n\ttransform: translate(-50%,-1.875rem);\n\ttransition: all 0.2s ease;\n\twhite-space: nowrap;\n\topacity: 0;\n\tfont-style: normal !important;\n\tcolor: @article-tooltip-text;\n\tbackground-color: @article-tooltip-bg;\n}\n.tooltip-text:after {\n\tcontent: '';\n\tposition: absolute;\n\tleft: 50%;\n\tbottom: -14px;\n\ttransform: translateX(-50%);\n\tborder-top: 8px solid @article-tooltip-bg;\n\tborder-right: 8px solid transparent;\n\tborder-bottom: 8px solid transparent;\n\tborder-left: 8px solid transparent;\n}\n.tooltip:hover .tooltip-container {\n\tvisibility: visible;\n}\n.tooltip:hover .tooltip-text {\n\topacity: 1;\n\ttransform: translate(-50%,-2rem);\n}\n\n//\n// Old Version Warning\n// --------------------------------------------------\n.old-version {\n\twidth: 100%;\n\tdisplay: inline-block;\n\tborder-radius: @radius;\n\tfont-size: 1em;\n\tline-height: 1.25em;\n\tpadding: 1.5em 1.5em 1.5em 4em;\n\tcolor: @old-version-text;\n\tbackground-color: @old-version-bg;\n\tposition: relative;\n\tmargin-bottom: 1em;\n\n\t&:after {\n\t\tcontent: \"\\ea0a\";\n\t\tfont-family: 'icomoon';\n\t\tposition: absolute;\n\t\ttop: 50%;\n\t\tleft: 2em;\n\t\ttransform: translate(-50%,-50%) scale(1.5,1.5);\n\t\tfont-size: 1em;\n\t}\n}\n\n//\n// Landing Page h2s\n// --------------------------------------------------\n.section-landing{\n\th2.no-paragraph {\n\t\tmargin: 0 0 1rem;\n\t\tborder: none;\n\t}\n}\n\n//\n// View in Chronograph Button\n// --------------------------------------------------\n.view-in-chronograf {\n\tdisplay: flex;\n\tjustify-content: flex-end;\n\tposition: relative;\n\tbackground-color: @article-code-border;\n\tmargin-top: -1.1rem;\n\tmargin-bottom: 1rem;\n\tpadding: .15rem;\n\tfont-size: .8rem;\n\tborder-radius: 0 0 @radius @radius;\n\talign-items: center;\n\n\t.chronograf-btn {\n\t\tdisplay: inline-block;\n\t\tpadding: .45rem .6rem;\n\t\tcolor: #fff !important;\n\t\tbackground: linear-gradient(to left, @chronograf-dropdown-gradient-a, @c-pool);\n\t\tborder-radius: calc(~\"\"@radius~\" / 2\");\n\t\ttransition: all .5s ease;\n\n\t\t&:after {\n\t\t\tcontent: '\\e801';\n\t\t\tmargin-left: .4rem;\n\t\t\tfont-family: 'icomoon';\n\t\t}\n\n\t\t&:hover {\n\t\t\tcolor: #fff !important;\n\t\t\topacity: 1;\n\t\t}\n\t}\n\n\t.settings {\n\t\topacity: .25;\n\t\tcolor: @article-text !important;\n\t\tmargin-right: .75em;\n\t\ttransition: opacity .2s ease;\n\n\t\t&:hover {\n\t\t\topacity: 1;\n\t\t}\n\t}\n}\n\n// Modal Styles\n.modal-overlay {\n\tdisplay: none;\n position: fixed;\n z-index: 1000;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n overflow: auto;\n\topacity: .75;\n background: linear-gradient(@chronograf-dropdown-gradient-a, @chronograf-dropdown-gradient-b)\n}\n\n.modal-content {\n\tdisplay: none;\n\tbackground: @article-bg;\n\tpadding: 2rem 2rem 1.5rem;\n\tborder-radius: @radius;\n\tposition: fixed;\n\ttop: 10vh;\n\tleft: 50%;\n\ttransform: translateX(-50%);\n\tz-index: 1001;\n\twidth: 90vw;\n\tmax-width: 38rem;\n\ttransition: top .4s ease;\n\n\t&.open {\n\t\ttop: 40vh;\n\t}\n\n\tinput {\n\t\twidth: 100%;\n\t\tmin-width: 10rem;\n\t\tborder-radius: @radius;\n\t\tborder: 2px solid @modal-input-bg;\n\t\tbackground-color: @modal-input-bg;\n\t\tpadding: .5rem;\n\t\tfont-weight: 400;\n\t\tfont-size: 1rem;\n\t\toutline: none;\n\t\ttransition:\n\t\t\tborder-color 0.3s ease,\n\t\t\tcolor 0.3s ease;\n\t\t&:focus {\n\t\t\tborder-color: @nav-search-border-focus;\n\t\t}\n\t}\n\n\tbutton {\n\t\tborder: none;\n\t\toutline: none;\n\t\t&:focus {\n\t\t\tbackground: @chronograf-dropdown-gradient-b !important;\n\t\t}\n\t}\n\n\tlabel {\n\t\tdisplay: block;\n\t\tmargin-bottom: .4rem;\n\t\tfont-weight: 600;\n\t}\n}\n\n#default-chronograf-url {\n\tdisplay: inline-block;\n\tmargin: .5rem 0 0 .25rem;\n\tfont-size: .8rem;\n\tfont-style: italic;\n\tfont-weight: 400;\n\n\t&:hover {\n\t\ttext-transform: underline;\n\t}\n}\n\n.flex-form {\n\tdisplay: flex;\n\tjustify-content: space-between;\n\n\t.save-btn {\n\t\twidth: 5.5rem;\n\t\tmargin: 0 0 0 .25rem;\n\t\ttext-align: center;\n\t\tpadding: .75rem 1rem;\n\t\tcolor: #fff;\n\t\tborder-radius: @radius;\n\t\tfont-weight: 600;\n\t\ttransition: background .2s;\n\t}\n}\n\n//\n// Chronograf modal media queries\n// --------------------------------------------------\n@media (max-width: 500px) {\n\t.flex-form {\n\t\tflex-flow: column;\n\t\t.save-btn {\n\t\t\twidth: 100%;\n\t\t\tmargin: .25rem 0 0;\n\t\t}\n\t}\n\t#default-chronograf-url {\n\t\tdisplay: block;\n\t\tmargin: 1rem auto 0;\n\t}\n}\n\n#save-chronograf-url button {\n\tbackground: @chronograf-link;\n\t&:hover {\n\t\tbackground: @chronograf-dropdown-gradient-b;\n\t}\n}\n\n//\n// Media Queries\n// --------------------------------------------------\n@media (min-width: @breakpoint-small) {\n\t.article {\n\t\tpadding-left: @sidebar-small-width;\n\t}\n\t.article-section {\n\t\tpadding: 3rem;\n\t}\n\t.article-content {\n\t\tcode,\n\t\tpre,\n\t\ttd,\n\t\tth {\n\t\t\tborder-width: @border-large-screen;\n\t\t}\n\t\tpre {\n\t\t\tborder-left-width: @thick-left-border;\n\t\t}\n\t}\n}\n@media (min-width: @breakpoint-large) {\n\t.article {\n\t\tpadding-left: @sidebar-large-width;\n\t}\n\t.article-section {\n\t\tpadding: 4.5rem;\n\t}\n\t.old-version {\n\t\twidth: 60%;\n\t}\n}\n@media (min-width: @breakpoint-huge) {\n\t.article {\n\t\tpadding-left: @sidebar-huge-width;\n\t}\n\t.article-section {\n\t\tpadding: 5rem 11rem;\n\t}\n\t.article-content {\n\t\tfont-size: 1.125rem;\n\t}\n}\n","/*\n\n\tHOME\n\n\t____________________________________________________________\n\n\tNotes:\n\t-\tSimple index view with links to the different products\n\n*/\n.homepage {\n\toverflow: auto;\n\tmin-height: calc(100vh - @nav-height);\n\twidth: 100%;\n\tz-index: 2;\n\t.gradient-h(@g4-onyx,@g0-obsidian);\n\tfont-size: 0;\n\tdisplay: flex;\n\tflex-direction: column;\n\tflex-wrap: wrap;\n\tjustify-content: space-between;\n\n\t.cards-special, .cards-oss, .cards-enterprise {\n\t\tdisplay: flex;\n\t\tflex-direction: row;\n\t\twidth: 100%;\n\t\tflex-wrap: wrap;\n\t\tflex: 1;\n\t}\n\n\t&--card {\n\t\twidth: 100%;\n\t\tdisplay: inline-block;\n\t\toverflow: hidden;\n\t\tposition: relative;\n\n\t\t&-mask {\n\t\t\tposition: absolute;\n\t\t\ttop: 0;\n\t\t\tleft: 0;\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t\topacity: 0.1;\n\t\t\ttransition:\n\t\t\t\topacity 0.75s ease,\n\t\t\t\ttransform 0.75s ease;\n\t\t\tz-index: 1;\n\t\t\tbackground-attachment: scroll;\n\t\t\tbackground-size: cover;\n\t\t\tbackground-position: center center;\n\t\t\tbackground-repeat: no-repeat;\n\t\t\ttransform: scale(1,1);\n\t\t}\n\t\t&:hover {\n\t\t\t.homepage--card-mask {\n\t\t\t\topacity: 1;\n\t\t\t\ttransform: scale(1.2,1.2);\n\t\t\t}\n\t\t\t.homepage--card-title {\n\t\t\t\tcolor: @g20-white !important;\n\t\t\t}\n\t\t}\n\n\t\t&-container {\n\t\t\tposition: relative;\n\t\t\tz-index: 2;\n\t\t\twidth: 100%;\n\t\t\tdisplay: inline-block;\n\t\t\ttext-align: center;\n\t\t\tpadding: 4rem 3rem;\n\t\t\tfont-size: 0;\n\n\t\t\ta:link,\n\t\t\ta:active,\n\t\t\ta:visited {\n\t\t\t\tcolor: @default-link-color;\n\t\t\t\ttransition: color 0.25s ease;\n\t\t\t\ttext-decoration: none;\n\t\t\t}\n\t\t\ta:hover {\n\t\t\t\tcolor: @default-link-hover;\n\t\t\t}\n\t\t}\n\t\t&-title,\n\t\t&-description {\n\t\t\ttext-align: left;\n\t\t\tdisplay: inline-block;\n\t\t\twidth: 100%;\n\t\t\tvertical-align: middle;\n\t\t}\n\t\t&-title {\n\t\t\tfont-size: 2rem;\n\t\t\tfont-family: Klavika-Light, sans-serif;\n\t\t\tfont-weight: 200;\n\t\t\tfont-style: italic;\n\t\t\tcolor: @sidebar-title-color;\n\t\t\tmargin-bottom: 0.5em;\n\t\t\ttransition: color 0.75s ease;\n\t\t}\n\t\t&-description {\n\t\t\tfont-size: 1rem;\n\t\t\tcolor: @article-text;\n\t\t\tline-height: 1.4em;\n\t\t\tfont-weight: 400;\n\t\t}\n\t\t&-link {\n\t\t\tdisplay: inline-block;\n\t\t\tfont-size: 0.875rem;\n\t\t\tfont-weight: 600;\n\t\t\tmargin-left: 0.25rem;\n\t\t\tpadding: 2px 11px;\n\t\t\tborder-radius: 3px;\n\n\t\t\t&:first-of-type {\n\t\t\t\tmargin-top: 1rem;\n\t\t\t}\n\t\t}\n\n\t\t// Themes\n\t\t&.card-telegraf {\n\t\t\t.homepage--card-mask {\n\t\t\t\tbackground-image: url(/img/home-telegraf.svg);\n\t\t\t\tbackground-color: @c-curacao;\n\t\t\t}\n\t\t\t.homepage--card-description {\n\t\t\t\tcolor: @g20-white;\n\t\t\t}\n\t\t\t.homepage--card-title {\n\t\t\t\tcolor: @c-dreamsicle;\n\t\t\t}\n\t\t\ta.homepage--card-link:link,\n\t\t\ta.homepage--card-link:active,\n\t\t\ta.homepage--card-link:visited {\n\t\t\t\tcolor: @g20-white;\n\t\t\t\ttransition:\n\t\t\t\t\tbackground-color 0.25s ease,\n\t\t\t\t\tcolor 0.25s ease;\n\t\t\t}\n\t\t\ta.homepage--card-link:hover {\n\t\t\t\tcolor: @c-dreamsicle;\n\t\t\t\tbackground-color: @g20-white;\n\t\t\t}\n\t\t}\n\t\t&.card-influxdb {\n\t\t\t.homepage--card-mask {\n\t\t\t\tbackground-image: url(/img/home-influxdb.svg);\n\t\t\t\tbackground-color: @c-ocean;\n\t\t\t}\n\t\t\t.homepage--card-description {\n\t\t\t\tcolor: @g20-white;\n\t\t\t}\n\t\t\t.homepage--card-title {\n\t\t\t\tcolor: @c-laser;\n\t\t\t}\n\t\t\ta.homepage--card-link:link,\n\t\t\ta.homepage--card-link:active,\n\t\t\ta.homepage--card-link:visited {\n\t\t\t\tcolor: @g20-white;\n\t\t\t\ttransition:\n\t\t\t\t\tbackground-color 0.25s ease,\n\t\t\t\t\tcolor 0.25s ease;\n\t\t\t}\n\t\t\ta.homepage--card-link:hover {\n\t\t\t\tcolor: @c-pool;\n\t\t\t\tbackground-color: @g20-white;\n\t\t\t}\n\t\t}\n\t\t&.card-chronograf {\n\t\t\t.homepage--card-mask {\n\t\t\t\tbackground-image: url(/img/home-chronograf.svg);\n\t\t\t\tbackground-color: @c-star;\n\t\t\t}\n\t\t\t.homepage--card-description {\n\t\t\t\tcolor: @g20-white;\n\t\t\t}\n\t\t\t.homepage--card-title {\n\t\t\t\tcolor: @c-comet;\n\t\t\t}\n\t\t\ta.homepage--card-link:link,\n\t\t\ta.homepage--card-link:active,\n\t\t\ta.homepage--card-link:visited {\n\t\t\t\tcolor: @g20-white;\n\t\t\t\ttransition:\n\t\t\t\t\tbackground-color 0.25s ease,\n\t\t\t\t\tcolor 0.25s ease;\n\t\t\t}\n\t\t\ta.homepage--card-link:hover {\n\t\t\t\tcolor: @c-comet;\n\t\t\t\tbackground-color: @g20-white;\n\t\t\t}\n\t\t}\n\t\t&.card-kapacitor {\n\t\t\t.homepage--card-mask {\n\t\t\t\tbackground-image: url(/img/home-kapacitor.svg);\n\t\t\t\tbackground-color: @c-rainforest;\n\t\t\t}\n\t\t\t.homepage--card-description {\n\t\t\t\tcolor: @g20-white;\n\t\t\t}\n\t\t\t.homepage--card-title {\n\t\t\t\tcolor: @c-rainforest;\n\t\t\t}\n\t\t\ta.homepage--card-link:link,\n\t\t\ta.homepage--card-link:active,\n\t\t\ta.homepage--card-link:visited {\n\t\t\t\tcolor: @g20-white;\n\t\t\t\ttransition:\n\t\t\t\t\tbackground-color 0.25s ease,\n\t\t\t\t\tcolor 0.25s ease;\n\t\t\t}\n\t\t\ta.homepage--card-link:hover {\n\t\t\t\tcolor: @c-rainforest;\n\t\t\t\tbackground-color: @g20-white;\n\t\t\t}\n\t\t}\n\n\t\t&.card-enterprise_kapacitor {\n\t\t\t.homepage--card-mask {\n\t\t\t\tbackground-image: url(/img/home-kapacitor.svg);\n\t\t\t\tbackground-color: @c-rainforest;\n\t\t\t}\n\t\t\t.homepage--card-description {\n\t\t\t\tcolor: @g20-white;\n\t\t\t}\n\t\t\t.homepage--card-title {\n\t\t\t\tcolor: @c-rainforest;\n\t\t\t}\n\t\t\ta.homepage--card-link:link,\n\t\t\ta.homepage--card-link:active,\n\t\t\ta.homepage--card-link:visited {\n\t\t\t\tcolor: @g20-white;\n\t\t\t\ttransition:\n\t\t\t\t\tbackground-color 0.25s ease,\n\t\t\t\t\tcolor 0.25s ease;\n\t\t\t}\n\t\t\ta.homepage--card-link:hover {\n\t\t\t\tcolor: @c-rainforest;\n\t\t\t\tbackground-color: @g20-white;\n\t\t\t}\n\t\t}\n\n\t\t&.card-enterprise_influxdb {\n\t\t\t.homepage--card-mask {\n\t\t\t\tbackground-image: url(/img/home-influxdb.svg);\n\t\t\t\tbackground-color: @c-ocean;\n\t\t\t}\n\t\t\t.homepage--card-description {\n\t\t\t\tcolor: @g20-white;\n\t\t\t}\n\t\t\t.homepage--card-title {\n\t\t\t\tcolor: @c-laser;\n\t\t\t}\n\t\t\ta.homepage--card-link:link,\n\t\t\ta.homepage--card-link:active,\n\t\t\ta.homepage--card-link:visited {\n\t\t\t\tcolor: @g20-white;\n\t\t\t\ttransition:\n\t\t\t\t\tbackground-color 0.25s ease,\n\t\t\t\t\tcolor 0.25s ease;\n\t\t\t}\n\t\t\ta.homepage--card-link:hover {\n\t\t\t\tcolor: @c-pool;\n\t\t\t\tbackground-color: @g20-white;\n\t\t\t}\n\t\t}\n\n\t\t&.card-flux {\n\t\t\t.homepage--card-mask {\n\t\t\t\tbackground-image: url(/img/home-flux.svg);\n\t\t\t\tbackground-color: #15a194;\n\t\t\t\topacity: 1;\n\t\t\t}\n\t\t\t.homepage--card-description {\n\t\t\t\tcolor: @g20-white;\n\t\t\t}\n\t\t\t.homepage--card-title {\n\t\t\t\tcolor: @g20-white ;\n\t\t\t}\n\t\t\ta.homepage--card-link:link,\n\t\t\ta.homepage--card-link:active,\n\t\t\ta.homepage--card-link:visited {\n\t\t\t\tcolor: @g20-white;\n\t\t\t\ttransition:\n\t\t\t\t\tbackground-color 0.25s ease,\n\t\t\t\t\tcolor 0.25s ease;\n\t\t\t\t&.download{\n\t\t\t\t\tdisplay: none;\n\t\t\t\t}\n\t\t\t}\n\t\t\ta.homepage--card-link:hover {\n\t\t\t\tcolor: @c-viridian;\n\t\t\t\tbackground-color: @g20-white;\n\t\t\t}\n\t\t}\n\n\t\t&.card-platform {\n\t\t\twidth: 100%;\n\t\t\tbackground: linear-gradient(to right, @c-ocean, @c-pool);\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\n\t\t\t.homepage--card-container {\n\t\t\t\tpadding-bottom: 3rem;\n\t\t\t}\n\n\t\t\t.homepage--card-mask {\n\t\t\t\tbackground-image: url(/img/home-influxdb.svg);\n\t\t\t\tbackground-color: @c-ocean;\n\t\t\t\topacity: .9;\n\t\t\t}\n\t\t\t.homepage--card-description {\n\t\t\t\tcolor: @g20-white;\n\t\t\t\ttext-align: center;\n\t\t\t}\n\t\t\t.homepage--card-title {\n\t\t\t\tcolor: @g20-white;\n\t\t\t\ttext-align: center;\n\t\t\t\tfont-size: 2.15rem;\n\t\t\t}\n\t\t\ta.homepage--card-link:link,\n\t\t\ta.homepage--card-link:active,\n\t\t\ta.homepage--card-link:visited {\n\t\t\t\tcolor: @g20-white;\n\t\t\t\ttransition:\n\t\t\t\t\tbackground-color 0.25s ease,\n\t\t\t\t\tcolor 0.25s ease;\n\t\t\t}\n\t\t\ta.homepage--card-link:hover {\n\t\t\t\tcolor: @c-pool;\n\t\t\t\tbackground-color: @g20-white;\n\t\t\t}\n\t\t\ta.btn {\n\t\t\t\tmargin: 1.75rem 0 1rem;\n\t\t\t\tpadding: 1em 1.5em;\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tbackground: @g20-white;\n\t\t\t\tcolor: @c-pool;\n\t\t\t\tborder-radius: 3px;\n\t\t\t\tfont-size: 1rem;\n\t\t\t\tfont-weight: bold;\n\t\t\t\ttransition: all .2s;\n\t\t\t\tbox-shadow: 0 0 15px rgba(255,255,255,0);\n\n\t\t\t\t&:hover {\n\t\t\t\t\tbox-shadow: 0 0 15px rgba(255,255,255,1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n/*\n\tMedia Queries\n\t--------------------------------------------------\n*/\n@media (min-width: @breakpoint-small) {\n\t.homepage--card {\n\t\twidth: 50%;\n\t\tflex-grow: 1;\n\t}\n}\n@media (min-width: @breakpoint-large) {\n\t.homepage--card-container {\n\t\tpadding: 3.5rem;\n\t}\n\t.homepage--card-description {\n\t\tfont-size: 1.075rem;\n\t}\n\t.homepage--card {\n\t\twidth: 25%;\n\t\theight: auto;\n\n\t\t&.card-platform {\n\t\t\twidth: 75%;\n\t\t}\n\n\t\t&.card-enterprise_influxdb,\n\t\t&.card-enterprise_kapacitor {\n\t\t\twidth: 50%;\n\t\t}\n\t}\n}\n@media (min-width: @breakpoint-huge) {\n\t.homepage--card-container {\n\t\tpadding: 4rem;\n\t}\n\t.homepage--card-description {\n\t\tfont-size: 1.125rem;\n\t}\n}\n","/*\n\n\tERROR PAGES\n\n\t____________________________________________________________\n\n\tNotes:\n\t-\tSimple index view with links to the different products\n\n*/\n.error-page {\n\toverflow: scroll;\n\ttop: @nav-height;\n\theight: 100%;\n\twidth: 100%;\n\t.gradient-v(@error-bg,@error-bg-accent);\n}\n.error-content {\n\tmargin: 15vh auto;\n\twidth: 85%;\n\tmax-width: 400px;\n\tmin-width: 240px;\n\tfont-size: 15px;\n\tline-height: 19px;\n\tcolor: @error-text;\n\n\th1 {\n\t\tcolor: @error-decor;\n\t\tdisplay: block;\n\t\tmargin: 0 auto 50px;\n\t\tpadding-top: 15px;\n\t\twidth: 212px;\n\t\theight: 212px;\n\t\tborder-radius: 50%;\n\t\ttext-align: center;\n\t\tfont-size: 90px;\n\t\tfont-weight: 200;\n\t\tline-height: 180px;\n\t\tposition: relative;\n\t\tborder: 2px solid @error-decor;\n\n\t\t// &:after {\n\t\t// \tcontent: '';\n\t\t// \tposition: absolute;\n\t\t// \ttop: 50%;\n\t\t// \tleft: 50%;\n\t\t//\n\t\t// \ttransform: translate(-50%,-50%);\n\t\t// \tborder-radius: 50%;\n\t\t//\n\t\t// }\n\t}\n}\n\n.flex {\n\tdisplay: flex;\n\tjustify-content: space-around;\n}\n\n.wayfinding {\n\tmargin-bottom: 2rem;\n}\n\n.btn {\n\tdisplay: block;\n\tpadding: .5rem;\n\tbackground: @error-decor;\n\tcolor: #fff;\n\tborder-radius: @radius;\n\ttext-align: center;\n\ttransition: background .2s;\n\n\t&.back {\n\t\tflex-grow: 1;\n\t\tmargin-right: .35rem;\n\n\t\t&:before {\n\t\t\tcontent: \"\\ea41\";\n\t\t\tfont-family: 'icomoon';\n\t\t\tmargin-right: .5rem;\n\t\t\tfont-size: 1rem;\n\t\t}\n\t}\n\n\t&.project{\n\t\tflex-grow: 3;\n\t\tdisplay: none;\n\n\t\t&:before {\n\t\t\tcontent: \"\\e801\";\n\t\t\tfont-family: 'icomoon';\n\t\t\tmargin-right: .5rem;\n\t\t\tflex-grow: 3;\n\t\t}\n\t}\n\n\t&:hover {\n\t\tbackground: @c-pool;\n\t}\n}\n\n/*\n\tMedia Queries\n\t--------------------------------------------------\n*/\n@media (min-width: @breakpoint-small) {\n\t.error-content {\n\t\tfont-size: 17px;\n\t\tline-height: 22px;\n\t}\n}\n@media (min-width: @breakpoint-large) {\n}\n@media (min-width: @breakpoint-huge) {\n\t.error-content {\n\t\tfont-size: 21px;\n\t\tline-height: 32px;\n\t}\n}\n",".tabs-container {\n margin: 2em 0 2em;\n}\n.tabs {\n flex-grow: 1;\n border-radius: @radius 0 0 @radius;\n}\n.tabs p {\n display: flex;\n flex-wrap: wrap;\n}\n.tabs a {\n flex-grow: 1;\n margin: 2px;\n font-size: 0.875em;\n color: @tabs-link !important;\n padding: .5em 1em;\n display: inline-block;\n text-align: center;\n border-radius: @radius;\n background-color: fadeout(@tabs-link-bg, 50%);\n transition: background-color .2s, color .2s;\n\n &:hover {\n color: @tabs-link-hover !important;\n }\n &.is-active {\n color: @g20-white !important;\n background: @default-link-color;\n }\n}\n\n.tab-content {\n width: 100%;\n\n & > * {\n width: 100% !important;\n margin-left: 0 !important;\n }\n}\n\n.tab-content:not(:first-child) {\n display: none;\n}\n\n.tab-content-container {\n position: relative;\n border-radius: 0 @radius @radius @radius;\n}\n\n////////////////////////////////// Code Tabs //////////////////////////////////\n\n.code-tabs-content {\n margin: .75rem 0 3rem;\n width: 100%;\n\n & > * {\n width: 100% !important;\n margin-left: 0 !important;\n }\n}\n\n.code-tabs-wrapper {\n margin: 1.5rem 0 .5rem;\n\n .code-tabs {\n p {\n margin: 0;\n text-align: right;\n display: block;\n font-size: .9rem;\n }\n a {\n padding: .25rem .75rem;\n margin: 0;\n border-radius: @radius @radius 0 0;\n display: inline-block;\n background: fadeout(@article-code-border, 40%) ;\n color: fadeout(@tabs-link, 50%) !important;\n &:hover {\n color: @tabs-link-hover !important;\n }\n &.is-active {\n background-color: @article-code-border ;\n color: @tabs-link-active !important;\n }\n }\n }\n\n .code-tab-content {\n padding: 0;\n pre {\n margin: 0 0 3rem;\n border-radius: @radius 0 @radius @radius;\n }\n &:not(:first-of-type) {\n display: none;\n }\n }\n}\n\n//\n// Media Queries\n// -------------\n\n@media (min-width: @breakpoint-small) {\n .tabs-container .tabs a {\n flex-grow: 0;\n }\n}\n","/////////////////////// Styles for Telegraf plugin cards ///////////////////////\n\n.plugin-card {\n position: relative;\n padding: 1rem 1.5rem;\n margin-bottom: .5rem;\n justify-content: center;\n align-items: center;\n background: @article-bg-darken;\n border-radius: @radius;\n\n h3 {\n padding: 0;\n margin-top: .25rem;\n }\n\n &.new h3:after {\n content: \"New\";\n margin-left: .3rem;\n padding: .25rem .5rem;\n font-style: italic;\n color: @sidebar-title-color;\n font-size: 1.2rem;\n }\n\n p {\n &.meta {\n margin: .75rem 0;\n font-weight: 500;\n color: @article-text;\n line-height: 1.75rem;\n\n .deprecated {\n margin-left: .5rem;\n font-style: italic;\n color: @article-code-accent7;\n }\n }\n }\n\n & .info {\n & > p:last-child { margin-bottom: .5rem; }\n & > ul:last-child { margin-bottom: .5rem; }\n & > ol:last-child { margin-bottom: .5rem; }\n }\n\n .github-link {\n position: absolute;\n color: @g20-white !important;\n top: .5rem;\n right: .5rem;\n opacity: 0;\n transition: opacity .2s, background .2s, color 2s;\n\n .icon-github {\n font-size: 1.2rem;\n margin: 0 .25rem 0 0;\n }\n }\n\n &:hover {\n .github-link { opacity: 1; }\n }\n\n // Special use-case for using block quotes in the yaml provided by the data file\n blockquote {\n border-color: @article-note-border;\n background: fade(@article-note-bg, 50%);\n h3,h4,h5,h6 { color: @article-text-heading; }\n p, li {\n color: @article-note-text;\n font-size: 1rem;\n font-style: normal;\n }\n strong { color: inherit; }\n a {\n color: @telegraf-link;\n code:after {\n border-color: transparent fade(@article-note-code, 35%) transparent transparent;\n }\n &:hover {\n color: @telegraf-link-hover;\n code:after {\n border-color: transparent @telegraf-link-hover transparent transparent;\n }\n }\n }\n ol li:before { color: @article-note-text; }\n code, pre{\n color: @article-note-code;\n background: @article-note-code-bg;\n }\n }\n}\n\n//////////////////////////////// Plugin Filters ////////////////////////////////\n\n#plugin-filters {\n display: flex;\n flex-flow: row wrap;\n align-items: flex-start;\n\n .filter-category {\n flex: 1 1 200px;\n margin: 0 1.25rem 1.25rem 0;\n max-width: 33%;\n\n &.two-columns {\n flex: 1 2 400px;\n max-width: 66%;\n .filter-list {\n columns: 2;\n }\n }\n }\n\n h5 {\n border-bottom: 1px solid fade(@article-text, 25%);\n padding-bottom: .65rem;\n }\n\n .filter-list {\n padding: 0;\n margin: .5rem 0 0;\n list-style: none;\n li {\n padding: 0;\n margin: 0;\n line-height: 1.35rem;\n list-style-type: none !important;\n }\n }\n\n label {\n display: block;\n padding: .25rem 0;\n color: @article-text;\n position: relative;\n\n &:after {\n content: attr(data-count);\n margin-left: .25rem;\n font-size: .85rem;\n opacity: .5;\n }\n }\n\n .checkbox {\n display: inline-block;\n height: 1.15em;\n width: 1.15em;\n background: fade(@article-text, 5%);\n margin-right: .3rem;\n vertical-align: text-top;\n border-radius: @radius;\n cursor: pointer;\n border: 1.5px solid fade(@article-text, 20%);\n user-select: none;\n }\n\n input[type='checkbox'] {\n margin-right: -1.1rem ;\n padding: 0;\n vertical-align: top;\n opacity: 0;\n cursor: pointer;\n\n & + .checkbox:after {\n content: \"\";\n display: block;\n position: absolute;\n height: .5rem;\n width: .5rem;\n border-radius: 50%;\n background: @telegraf-link;\n top: .65rem;\n left: .35rem;\n opacity: 0;\n transform: scale(2);\n transition: all .2s;\n }\n\n &:checked + .checkbox:after {\n opacity: 1;\n transform: scale(1);\n }\n }\n}\n\n////////////////////////////////////////////////////////////////////////////////\n///////////////////////////////// MEDIA QUERIES ////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////\n\n@media(max-width: 1100px) {\n #plugin-filters {\n .filter-category {\n max-width: 50%;\n &.two-columns, &.three-columns {\n max-width: 100%;\n }\n }\n }\n}\n\n@media(max-width: 800px) {\n #plugin-filters{\n .filter-category {\n max-width: 100%;\n }\n }\n\n .plugin-card {\n .github-link {\n opacity: 1;\n padding: .25rem .35rem .35rem;\n line-height: 0;\n font-size: 1.35rem;\n .icon-github { margin: 0; }\n .hide { display: none; }\n }\n }\n}\n","/*\n\n T E L E G R A F T H E M E\n\n ____________________________________________________________\n\n Notes:\n - Only contains color overrides for layout-article.less\n\n*/\n\n\n//\n// Override only if class is applied to body\n// -------------------------------------------------------------\nbody.docs-theme--telegraf {\n\n //\n // Article Styles\n // ---------------------------------------------------------\n .article-content {\n a:link,\n a:active,\n a:visited {\n color: @telegraf-link;\n }\n a:hover {\n color: @telegraf-link-hover;\n }\n a.top:hover {\n background: @telegraf-link-hover;\n }\n a.btn {\n background: @telegraf-btn;\n &:hover {\n background: @telegraf-btn-hover;\n }\n }\n &.section-landing{\n \t\th2 a.off-page:link:hover {\n \t\t\tcolor: @telegraf-link !important;\n \t\t}\n \t}\n }\n\n //\n // Sidebar Styles\n // ---------------------------------------------------------\n .sidebar--mask-container {\n .sidebar--mask {\n .gradient-v(@telegraf-dropdown-gradient-a,@telegraf-dropdown-gradient-b);\n }\n }\n .sidebar--section-title {\n a:link,\n a:active,\n a:visited {\n color: @telegraf-section-title;\n font-weight: 400;\n }\n a:hover {\n color: @telegraf-link-hover;\n }\n }\n a.sidebar--page {\n &:hover {\n color: @telegraf-link-hover;\n }\n }\n\n //\n // Navbar Styles\n // ---------------------------------------------------------\n .navbar--product-dropdown {\n background-color: @telegraf-dropdown;\n &:hover {\n background-color: @telegraf-dropdown-hover;\n }\n }\n .navbar--product-menu {\n .gradient-v(@telegraf-dropdown-gradient-a,@telegraf-dropdown-gradient-b);\n }\n\n // Tab Labels\n .tabs a.is-active {\n background: @telegraf-link;\n }\n}\n","/*\n\n C H R O N O G R A F T H E M E\n\n ____________________________________________________________\n\n Notes:\n - Only contains color overrides for layout-article.less\n\n*/\n\n\n//\n// Override only if class is applied to body\n// -------------------------------------------------------------\nbody.docs-theme--chronograf {\n\n //\n // Article Styles\n // ---------------------------------------------------------\n .article-content {\n a:link,\n a:active,\n a:visited {\n color: @chronograf-link;\n }\n a:hover {\n color: @chronograf-link-hover;\n }\n a.top:hover {\n background: @chronograf-link-hover;\n }\n a.btn {\n background: @chronograf-btn;\n &:hover {\n background: @chronograf-btn-hover;\n }\n }\n &.section-landing{\n \t\th2 a.off-page:link:hover {\n \t\t\tcolor: @chronograf-link !important;\n \t\t}\n \t}\n }\n\n //\n // Sidebar Styles\n // ---------------------------------------------------------\n .sidebar--mask-container {\n .sidebar--mask {\n .gradient-v(@chronograf-dropdown-gradient-a,@chronograf-dropdown-gradient-b);\n }\n }\n .sidebar--section-title {\n a:link,\n a:active,\n a:visited {\n color: @chronograf-section-title;\n font-weight: 400;\n }\n a:hover {\n color: @chronograf-link-hover;\n }\n }\n a.sidebar--page {\n &:hover {\n color: @chronograf-link-hover;\n }\n }\n\n //\n // Navbar Styles\n // ---------------------------------------------------------\n .navbar--product-dropdown {\n background-color: @chronograf-dropdown;\n &:hover {\n background-color: @chronograf-dropdown-hover;\n }\n }\n .navbar--product-menu {\n .gradient-v(@chronograf-dropdown-gradient-a,@chronograf-dropdown-gradient-b);\n }\n\n // Tab Labels\n .tabs a.is-active {\n background: @chronograf-link;\n }\n}\n","/*\n\n K A P A C I T O R T H E M E\n\n ____________________________________________________________\n\n Notes:\n - Only contains color overrides for layout-article.less\n\n*/\n\n\n//\n// Override only if class is applied to body\n// -------------------------------------------------------------\nbody.docs-theme--kapacitor {\n\n //\n // Article Styles\n // ---------------------------------------------------------\n .article-content {\n a:link,\n a:active,\n a:visited {\n color: @kapacitor-link;\n }\n a:hover {\n color: @kapacitor-link-hover;\n }\n a.top:hover {\n background: @kapacitor-link-hover;\n }\n a.btn {\n background: @kapacitor-btn;\n &:hover {\n background: @kapacitor-btn-hover;\n }\n }\n &.section-landing{\n \t\th2 a.off-page:link:hover {\n \t\t\tcolor: @kapacitor-link !important;\n \t\t}\n \t}\n }\n\n //\n // Sidebar Styles\n // ---------------------------------------------------------\n .sidebar--mask-container {\n .sidebar--mask {\n .gradient-v(@kapacitor-dropdown-gradient-a,@kapacitor-dropdown-gradient-b);\n }\n }\n .sidebar--section-title {\n a:link,\n a:active,\n a:visited {\n color: @kapacitor-section-title;\n font-weight: 400;\n }\n a:hover {\n color: @kapacitor-link-hover;\n }\n }\n a.sidebar--page {\n &:hover {\n color: @kapacitor-link-hover;\n }\n }\n\n //\n // Navbar Styles\n // ---------------------------------------------------------\n .navbar--product-dropdown {\n background-color: @kapacitor-dropdown;\n &:hover {\n background-color: @kapacitor-dropdown-hover;\n }\n }\n .navbar--product-menu {\n .gradient-v(@kapacitor-dropdown-gradient-a,@kapacitor-dropdown-gradient-b);\n }\n\n // Tab Labels\n .tabs a.is-active {\n background: @kapacitor-link;\n }\n}\n","/*\n\n K A P A C I T O R T H E M E\n\n ____________________________________________________________\n\n Notes:\n - Only contains color overrides for layout-article.less\n\n*/\n\n\n//\n// Override only if class is applied to body\n// -------------------------------------------------------------\nbody.docs-theme--enterprise_kapacitor {\n\n //\n // Article Styles\n // ---------------------------------------------------------\n .article-content {\n a:link,\n a:active,\n a:visited {\n color: @kapacitor-link;\n }\n a:hover {\n color: @kapacitor-link-hover;\n }\n a.top:hover {\n background: @kapacitor-link-hover;\n }\n a.btn {\n background: @kapacitor-btn;\n &:hover {\n background: @kapacitor-btn-hover;\n }\n }\n &.section-landing{\n \t\th2 a.off-page:link:hover {\n \t\t\tcolor: @kapacitor-link !important;\n \t\t}\n \t}\n }\n\n //\n // Sidebar Styles\n // ---------------------------------------------------------\n .sidebar--mask-container {\n .sidebar--mask {\n .gradient-v(@kapacitor-dropdown-gradient-a,@kapacitor-dropdown-gradient-b);\n }\n }\n .sidebar--section-title {\n a:link,\n a:active,\n a:visited {\n color: @kapacitor-section-title;\n font-weight: 400;\n }\n a:hover {\n color: @kapacitor-link-hover;\n }\n }\n a.sidebar--page {\n &:hover {\n color: @kapacitor-link-hover;\n }\n }\n\n //\n // Navbar Styles\n // ---------------------------------------------------------\n .navbar--product-dropdown {\n background-color: @kapacitor-dropdown;\n &:hover {\n background-color: @kapacitor-dropdown-hover;\n }\n }\n .navbar--product-menu {\n .gradient-v(@kapacitor-dropdown-gradient-a,@kapacitor-dropdown-gradient-b);\n }\n\n // Tab Labels\n .tabs a.is-active {\n background: @kapacitor-link;\n }\n}\n","/*\n\n F L U X T H E M E\n\n ____________________________________________________________\n\n Notes:\n - Only contains color overrides for layout-article.less\n\n*/\n\n\n//\n// Override only if class is applied to body\n// -------------------------------------------------------------\nbody.docs-theme--flux {\n\n //\n // Article Styles\n // ---------------------------------------------------------\n .article-content {\n a:link,\n a:active,\n a:visited {\n color: @flux-link;\n }\n a:hover {\n color: @flux-link-hover;\n }\n a.top:hover {\n background: @flux-link-hover;\n }\n &.section-landing{\n \t\th2 a.off-page:link:hover {\n \t\t\tcolor: @flux-link !important;\n \t\t}\n \t}\n }\n\n //\n // Sidebar Styles\n // ---------------------------------------------------------\n .sidebar--mask-container {\n .sidebar--mask {\n .gradient-v(@flux-dropdown-gradient-a,@flux-dropdown-gradient-b);\n }\n }\n .sidebar--section-title {\n a:link,\n a:active,\n a:visited {\n color: @flux-section-title;\n font-weight: 400;\n }\n a:hover {\n color: @flux-link-hover;\n }\n }\n a.sidebar--page {\n &:hover {\n color: @flux-link-hover;\n }\n }\n\n //\n // Navbar Styles\n // ---------------------------------------------------------\n .navbar--product-dropdown {\n background-color: @flux-dropdown;\n &:hover {\n background-color: @flux-dropdown-hover;\n }\n }\n .navbar--product-menu {\n .gradient-v(@flux-dropdown-gradient-a,@flux-dropdown-gradient-b);\n }\n\n // Tab Labels\n .tabs a.is-active {\n background: @flux-link;\n }\n}\n"]} \ No newline at end of file +{"version":3,"sources":["variables.less","icon-font.less","docs-light.less","docs-light.css","normalize-3.0.2.less","syntax.less","layout.less","layout-navbar.less","layout-search-overrides.less","layout-sidebar.less","layout-sidebar-ads.less","layout-article.less","layout-home.less","layout-error-pages.less","tabs.less","telegraf-plugins.less","flex.less","svgs.less","theme-telegraf.less","theme-chronograf.less","theme-kapacitor.less","theme-enterprise_kapacitor.less","theme-flux.less"],"names":[],"mappings":"AAsBA,cACC,8FAA+C,CAC/C,eAAA,CCxBD,WACC,mBAAa,CACb,oCAAA,CACA,qRAI4C,CAC5C,eAAA,CACA,iBAAA,CAGD,MACC,mBAAa,CACb,UAAA,CACA,iBAAA,CACA,eAAA,CACA,mBAAA,CACA,mBAAA,CACA,aAAA,CAGA,kCAAA,CACA,iCAAA,CAGD,kBACI,eAAS,CAEb,kBACI,eAAS,CAEb,sBACI,eAAS,CAEb,kBACI,eAAS,CAEb,wBACI,eAAS,CAEb,sBACI,eAAS,CAEb,wBACI,eAAS,CAEb,yBACI,eAAS,CAEb,oBACI,eAAS,CAEb,uBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,kBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,uBACI,eAAS,CAEb,uBACI,eAAS,CAEb,yBACI,eAAS,CAEb,iBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,uBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,mBACI,eAAS,CAEb,iBACI,eAAS,CAEb,kBACI,eAAS,CAEb,wBACI,eAAS,CAEb,qBACI,eAAS,CAEb,0BACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,oBACI,eAAS,CAEb,wBACI,eAAS,CAEb,mBACI,eAAS,CAEb,kBACI,eAAS,CAEb,kBACI,eAAS,CAEb,0BACI,eAAS,CAEb,kBACI,eAAS,CAEb,oBACI,eAAS,CAEb,oBACI,eAAS,CAEb,mBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,wBACI,eAAS,CAEb,qBACI,eAAS,CAEb,kBACI,eAAS,CAEb,iBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,qBACI,eAAS,CAEb,uBACI,eAAS,CAEb,qBACI,eAAS,CAEb,wBACI,eAAS,CAEb,yBACI,eAAS,CAEb,wBACI,eAAS,CAEb,0BACI,eAAS,CAEb,wBACI,eAAS,CAEb,uBACI,eAAS,CAEb,wBACI,eAAS,CAEb,sBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,yBACI,eAAS,CAEb,yBACI,eAAS,CAEb,0BACI,eAAS,CAEb,6BACI,eAAS,CAEb,2BACI,eAAS,CAEb,uBACI,eAAS,CAEb,wBACI,eAAS,CAEb,qBACI,eAAS,CAEb,oBACI,eAAS,CAEb,oBACI,eAAS,CAEb,kBACI,eAAS,CAEb,yBACI,eAAS,CAEb,uBACI,eAAS,CAEb,wBACI,eAAS,CAEb,sBACI,eAAS,CAEb,yBACI,eAAS,CAEb,wBACI,eAAS,CAEb,sBACI,eAAS,CAEb,mBACI,eAAS,CAEb,2BACI,eAAS,CAEb,0BACI,eAAS,CAEb,qBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,uBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,iBACI,eAAS,CAEb,kBACI,eAAS,CAEb,qBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,mBACI,eAAS,CAEb,kBACI,eAAS,CAEb,uBACI,eAAS,CAEb,sBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,qBACI,eAAS,CAEb,oBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,oBACI,eAAS,CAEb,gBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,qBACI,eAAS,CAEb,wBACI,eAAS,CAEb,sBACI,eAAS,CAEb,oBACI,eAAS,CAEb,yBACI,eAAS,CAEb,mBACI,eAAS,CAEb,sBACI,eAAS,CAEb,kBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,qBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,uBACI,eAAS,CAEb,wBACI,eAAS,CAEb,wBACI,eAAS,CAEb,sBACI,eAAS,CAEb,yBACI,eAAS,CAEb,0BACI,eAAS,CAEb,wBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,uBACI,eAAS,CAEb,uBACI,eAAS,CAEb,wBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,qBACI,eAAS,CAEb,oBACI,eAAS,CAEb,sBACI,eAAS,CAEb,qBACI,eAAS,CAEb,iBACI,eAAS,CAEb,kBACI,eAAS,CAEb,kBACI,eAAS,CAEb,sBACI,eAAS,CAEb,oBACI,eAAS,CAEb,uBACI,eAAS,CAEb,wBACI,eAAS,CAEb,iBACI,eAAS,CAEb,kBACI,eAAS,CAEb,oBACI,eAAS,CAEb,wBACI,eAAS,CAEb,qBACI,eAAS,CAEb,iBACI,eAAS,CAEb,uBACI,eAAS,CAEb,wBACI,eAAS,CAEb,wBACI,eAAS,CAEb,yBACI,eAAS,CAEb,oBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,iBACI,eAAS,CAEb,yBACI,eAAS,CAEb,kBACI,eAAS,CAEb,oBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,kBACI,eAAS,CAEb,iBACI,eAAS,CAEb,oBACI,eAAS,CAEb,iBACI,eAAS,CAEb,kBACI,eAAS,CAEb,uBACI,eAAS,CAEb,sBACI,eAAS,CAEb,mBACI,eAAS,CAEb,kBACI,eAAS,CAEb,2BACI,eAAS,CAEb,oBACI,eAAS,CAEb,oBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,wBACI,eAAS,CAEb,uBACI,eAAS,CAEb,2BACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,kBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,4BACI,eAAS,CAEb,0BACI,eAAS,CAEb,yBACI,eAAS,CAEb,uBACI,eAAS,CAEb,qBACI,eAAS,CAEb,uBACI,eAAS,CAEb,qBACI,eAAS,CAEb,oBACI,eAAS,CAEb,mBACI,eAAS,CAEb,kBACI,eAAS,CAEb,kBACI,eAAS,CAEb,wBACI,eAAS,CAEb,iBACI,eAAS,CAEb,sBACI,eAAS,CAEb,uBACI,eAAS,CAEb,yBACI,eAAS,CAEb,sBACI,eAAS,CAEb,uBACI,eAAS,CAEb,iBACI,eAAS,CAEb,sBACI,eAAS,CAEb,iCACI,eAAS,CAEb,wBACI,eAAS,CAEb,uBACI,eAAS,CAEb,uBACI,eAAS,CAEb,mBACI,eAAS,CAEb,0BACI,eAAS,CAEb,iBACI,eAAS,CAEb,mBACI,eAAS,CAEb,uBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,iBACI,eAAS,CAEb,kBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,uBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,uBACI,eAAS,CAEb,wBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,wBACI,eAAS,CAEb,yBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,yBACI,eAAS,CAEb,wBACI,eAAS,CAEb,wBACI,eAAS,CAEb,qBACI,eAAS,CAEb,0BACI,eAAS,CAEb,sBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,kBACI,eAAS,CAEb,2BACI,eAAS,CAEb,qBACI,eAAS,CAEb,mBACI,eAAS,CAEb,uBACI,eAAS,CAEb,wBACI,eAAS,CAEb,yBACI,eAAS,CAEb,mBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,kBACI,eAAS,CAEb,sBACI,eAAS,CAEb,kBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,mBACI,eAAS,CAEb,uBACI,eAAS,CAEb,sBACI,eAAS,CAEb,mBACI,eAAS,CAEb,kBACI,eAAS,CAEb,uBACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,yBACI,eAAS,CAEb,2BACI,eAAS,CAEb,wBACI,eAAS,CAEb,yBACI,eAAS,CAEb,0BACI,eAAS,CAEb,6BACI,eAAS,CAEb,6BACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,uBACI,eAAS,CAEb,qBACI,eAAS,CAEb,2BACI,eAAS,CAEb,uBACI,eAAS,CAEb,4BACI,eAAS,CAEb,0BACI,eAAS,CAEb,8BACI,eAAS,CAEb,yBACI,eAAS,CAEb,6BACI,eAAS,CAEb,yBACI,eAAS,CAEb,4BACI,eAAS,CAEb,uBACI,eAAS,CAEb,6BACI,eAAS,CAEb,0BACI,eAAS,CAEb,+BACI,eAAS,CAEb,yBACI,eAAS,CAEb,8BACI,eAAS,CAEb,yBACI,eAAS,CAEb,uBACI,eAAS,CAEb,0BACI,eAAS,CAEb,yBACI,eAAS,CAEb,yBACI,eAAS,CAEb,iBACI,eAAS,CAEb,qBACI,eAAS,CAEb,uBACI,eAAS,CAEb,4BACI,eAAS,CAEb,6BACI,eAAS,CAEb,8BACI,eAAS,CAEb,gCACI,eAAS,CAEb,6BACI,eAAS,CAEb,8BACI,eAAS,CAEb,qBACI,eAAS,CAEb,mBACI,eAAS,CAEb,kBACI,eAAS,CAEb,iBACI,eAAS,CAEb,8BACI,eAAS,CAEb,gCACI,eAAS,CAEb,2BACI,eAAS,CAEb,4BACI,eAAS,CAEb,6BACI,eAAS,CAEb,kBACI,eAAS,CAEb,wBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,oBACI,eAAS,CAEb,kBACI,eAAS,CAEb,sBACI,eAAS,CAEb,uBACI,eAAS,CAEb,yBACI,eAAS,CAEb,wBACI,eAAS,CAEb,uBACI,eAAS,CAEb,kBACI,eAAS,CAEb,uBACI,eAAS,CAEb,oBACI,eAAS,CAEb,2BACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,wBACI,eAAS,CAEb,yBACI,eAAS,CAEb,uBACI,eAAS,CAEb,0BACI,eAAS,CAEb,wBACI,eAAS,CAEb,wBACI,eAAS,CAEb,uBACI,eAAS,CAEb,8BACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,6BACI,eAAS,CAEb,qBACI,eAAS,CAEb,iBACI,eAAS,CAEb,iBACI,eAAS,CAEb,qBACI,eAAS,CAEb,4BACI,eAAS,CAEb,8BACI,eAAS,CAEb,6BACI,eAAS,CAEb,+BACI,eAAS,CAEb,6BACI,eAAS,CAEb,6BACI,eAAS,CAEb,mBACI,eAAS,CAEb,qBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,sBACI,eAAS,CAEb,oBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,qBACI,eAAS,CAEb,yBACI,eAAS,CAEb,0BACI,eAAS,CAEb,0BACI,eAAS,CAEb,0BACI,eAAS,CAEb,sBACI,eAAS,CAEb,uBACI,eAAS,CAEb,uBACI,eAAS,CAEb,kBACI,eAAS,CAEb,uBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,mBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,oBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,oBACI,eAAS,CAEb,oBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,qBACI,eAAS,CAEb,qBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,sBACI,eAAS,CAEb,uBACI,eAAS,CAEb,uBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,wBACI,eAAS,CAEb,yBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,qBACI,eAAS,CAEb,qBACI,eAAS,CAEb,qBACI,eAAS,CAEb,uBACI,eAAS,CAEb,wBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,mBACI,eAAS,CAEb,iBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,qBACI,eAAS,CAEb,sBACI,eAAS,CAEb,wBACI,eAAS,CAEb,yBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,sBACI,eAAS,CAEb,uBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,uBACI,eAAS,CAEb,yBACI,eAAS,CAEb,0BACI,eAAS,CAEb,2BACI,eAAS,CAEb,uBACI,eAAS,CAEb,wBACI,eAAS,CAEb,kBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,wBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,qBACI,eAAS,CAEb,kBACI,eAAS,CAEb,sBACI,eAAS,CAEb,6BACI,eAAS,CAEb,uBACI,eAAS,CAEb,wBACI,eAAS,CAEb,yBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,kBACI,eAAS,CAEb,iBACI,eAAS,CAEb,iBACI,eAAS,CAEb,qBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CAEb,gBACI,eAAS,CAEb,mBACI,eAAS,CAEb,oBACI,eAAS,CAEb,qBACI,eAAS,CClgDb,oBAAsB,YAAA,CCshDtB,2DAAA,CCjiDA,KACE,sBAAA,CACA,yBAAA,CACA,6BAAA,CAOF,KACE,QAAA,CACA,4DAAa,CACb,kCAAA,CACA,iCAAA,CAaF,2FAaE,aAAA,CAQF,4BAIE,oBAAA,CACA,uBAAA,CAQF,sBACE,YAAA,CACA,QAAA,CAQF,kBAEE,YAAA,CAUF,EACE,4BAAA,CAOF,iBAEE,SAAA,CAUF,YACE,wBAAA,CAOF,SAEE,eAAA,CAOF,IACE,iBAAA,CAQF,GACE,aAAA,CACA,cAAA,CAOF,KACE,eAAA,CACA,UAAA,CAOF,MACE,aAAA,CAOF,QAEE,aAAA,CACA,aAAA,CACA,iBAAA,CACA,uBAAA,CAGF,IACE,SAAA,CAGF,IACE,aAAA,CAUF,IACE,QAAA,CAOF,eACE,eAAA,CAUF,OACE,eAAA,CAOF,GAEE,8BAAA,CAAA,sBAAA,CACA,QAAA,CAOF,IACE,aAAA,CAOF,kBAIE,+BAAA,CACA,aAAA,CAkBF,sCAKE,aAAA,CACA,YAAA,CACA,QAAA,CAOF,OACE,gBAAA,CAUF,cAEE,mBAAA,CAWF,oEAIE,yBAAA,CACA,cAAA,CAOF,sCAEE,cAAA,CAOF,iDAEE,QAAA,CACA,SAAA,CAQF,MACE,kBAAA,CAWF,uCAEE,6BAAA,CAAA,qBAAA,CACA,SAAA,CASF,4FAEE,WAAA,CASF,mBACE,4BAAA,CAEA,8BAAA,CACA,sBAAA,CASF,+FAEE,uBAAA,CAOF,SACE,uBAAA,CACA,YAAA,CACA,0BAAA,CAQF,OACE,QAAA,CACA,SAAA,CAOF,SACE,aAAA,CAQF,SACE,eAAA,CAUF,MACE,wBAAA,CACA,gBAAA,CAGF,MAEE,SAAA,CC5aF,6CAGC,aAAA,CACA,eAAA,CACA,eAAA,CACG,oBAAA,CACA,yBAAA,CACH,uBAAA,CACA,mBAAA,CACA,iBAAA,CACA,gBAAA,CAEA,eAAA,CACA,aAAA,CACA,UAAA,CAEA,oBAAA,CAEA,gBAAA,CACA,YAAA,CAIyC,4JACzC,gBAAA,CAIoC,wIACpC,gBAAA,CAGD,aACC,6CAEC,gBAAA,CAAA,CAKF,sBACC,aAAA,CAQD,iCACC,kBAAA,CAGD,WAAc,aAAA,CAAd,0FAUO,aAAA,CAVP,wGAmBO,aAAA,CAnBP,eAsBO,wBAAA,CAtBP,wGA+BO,aAAA,CA/BP,6RAoDO,aAAA,CApDP,wIA+DO,aAAA,CA/DP,mLA6EO,aAAA,CA7EP,6BAiFO,aAAA,CAjFP,eAoFO,UAAA,CApFP,sQA2GO,eAAA,CA3GP,sIAsHO,iBAAA,CCxKP,WACI,yBAAA,CACA,2CAAA,CACA,eAAA,CACA,iBAAA,CAEJ,WACI,wBAAA,CACA,2CAAA,CACA,eAAA,CACA,iBAAA,CAOJ,KACC,aAAA,CAEI,UACJ,UAAA,CACA,WAAA,CACA,qBAAA,CACC,gCAAA,CAEF,KACC,aAAA,CACA,aAAA,CACA,aAAA,CAED,EACC,6BAAA,CAAA,qBAAA,CAiBD,sZAiEC,QAAA,CACA,SAAA,CACA,QAAA,CACA,cAAA,CACA,uBAAA,CAED,8EAWC,aAAA,CAED,MAEC,eAAA,CAED,aAEC,WAAA,CAGD,oDAGC,UAAS,CACT,YAAA,CAED,MACC,wBAAA,CACA,gBAAA,CC9ID,QACC,KAAA,CACA,MAAA,CACA,cAAA,CACA,WAAA,CACA,UAAA,CACA,wBAAA,CACA,WAAA,CACA,iBAAA,CAGD,2FAIC,iBAAA,CAED,cACC,QAAA,CACA,UAAA,CAFD,gBAIE,gBAAA,CACA,aAAA,CACA,kCAAA,CAAA,0BAAA,CACA,sBACC,UAAA,CARH,uBAYE,6BAAA,CACE,sBAAA,CACA,uBAAA,CACF,WAAA,CACA,kBAAA,CAhBF,4BAmBE,gBAAA,CAGF,mBACC,UAAA,CACA,WAAA,CACA,OAAA,CAHD,0CAME,YAAA,CACA,UAAA,CACA,wBAAA,CACA,iBAAA,CACA,iBAAA,CACA,QAAA,CACA,+BAAA,CAAA,uBAAA,CAEA,8CACC,OAAA,CACA,sCAAW,CAAX,8BAAW,CAEZ,iDACC,OAAA,CACA,sCAAW,CAAX,8BAAW,CAEZ,iDACC,OAAA,CACA,sCAAW,CAAX,8BAAW,CAIb,yBACC,cAAA,CADD,gDAIE,qBAAA,CAMA,mDACC,OAAA,CACA,oDAAgC,CAAhC,4CAAgC,CAEjC,sDACC,SAAA,CAED,sDACC,OAAA,CACA,qDAAgC,CAAhC,6CAAgC,CAKpC,sBACC,UAAA,CACA,iBAAA,CACA,QAAA,CACA,WAAA,CACA,SAAA,CACA,oCAAA,CAAA,4BAAA,CP7BA,kBAAA,CAGA,4FAAY,CAAZ,4DAAY,CO6Bb,2BACC,UAAA,CACA,WAAA,CACA,iBAAA,CACA,oBAAK,CACL,MAAA,CACA,iBAAA,CACA,gCAAA,CAAA,wBAAA,CAEA,WAAA,CAEA,gCACC,kBAAA,CADD,sDAIE,SAAA,CAIH,yBACC,cAAA,CACA,UAAA,CACA,kCAAA,CAED,iBACC,cAAA,CAEA,uEAEC,UAAA,CACA,6DAAA,CAAA,qDAAA,CAGA,4BAAA,CACA,oBAAA,CACA,aAAA,CACA,UAAA,CAED,uBACC,mCAAA,CACA,UAAA,CAGF,0BACC,YAAA,CACA,QAAA,CACA,wBAAA,CACA,WAAA,CACA,iBAAA,CACA,6DAAA,CAAA,qDAAA,CAGA,gCACC,cAAA,CACA,wBAAA,CAXF,6GAeE,iBAAA,CACA,OAAA,CACA,kCAAW,CAAX,0BAAW,CACX,UAAA,CAlBF,mDAsBE,eAAA,CACA,SAAA,CACA,cAAA,CACA,eAAA,CAzBF,0DA4BE,UAAA,CACA,gBAAA,CAGF,gBACC,WAAA,CACA,SAAA,CACA,UAAA,CACA,QAAA,CAJD,kBAOE,2BAAA,CACA,KAAA,CACA,MAAA,CACA,UAAA,CACA,WAAA,CAGF,sBACC,iBAAA,CACA,KAAA,CACA,MAAA,CACA,UAAA,CACA,WAAA,CACA,iBAAA,CACA,wBAAA,CACA,aAAA,CACA,wBAAA,CACA,cAAA,CACA,eAAA,CACA,cAAA,CACA,SAAA,CACA,uDAAA,CAAA,+CAAA,CAGA,4BACC,oBAAA,CACA,aAAA,CAGF,sBACC,UAAA,CADD,+DAKE,UAAA,CALF,+BAQE,SAAA,CARF,wCAWE,kBAAA,CACA,UAAA,CACA,cAAA,CACA,qCAAA,CACA,QAAA,CAfF,iFAkBG,aAAA,CAlBH,uDAsBG,cAAA,CACA,SAAA,CAvBH,qFA0BI,qBAAA,CACA,iBAAA,CACA,eAAA,CA5BJ,gGA+BI,WAAA,CACA,cAAA,CAED,4GACC,YAAA,CAnCJ,sGAsCI,yBAAA,CACA,qBAAA,CACA,aAAA,CACA,mBAAA,CACA,eAAA,CA1CJ,+IA6CK,4BAAA,CA7CL,yGAiDI,WAAA,CACA,wBAAA,CAlDJ,8FAqDI,wBAAA,CArDJ,4FAwDI,oBAAA,CACA,oBAAA,CACA,aAAA,CA1DJ,2FA6DI,aAAA,CA7DJ,8GAgEI,eAAA,CACA,iBAAA,CACA,aAAA,CAGD,wGP3NF,kBAAA,CAGA,0FAAY,CAAZ,2DAAY,COwNV,2MAOE,aAAA,CAPF,6RASG,oBAAA,CA9EN,0DAmFI,eAAA,CACA,iBAAA,CApFJ,gDAyFE,WAAA,CACA,oBAAA,CAGF,gBACC,YAAA,CACA,UAAA,CACA,WAAA,CACA,OAAA,CACA,QAAA,CACA,SAAA,CACA,wBAAA,CACA,aAAA,CARD,sBAWE,kCAAA,CAAA,0BAAA,CAXF,sBAcE,gBAAA,CAdF,sBAiBE,gBAAA,CAGD,sBACC,UAAA,CACA,cAAA,CAOF,yBACC,wBAEE,YAAA,CAFF,oBAKE,cAAA,CAAA,CAIH,yBACC,wBAEE,cAAA,CAFF,oBAKE,YAAA,CAAA,CASH,yBACC,gBACC,aAAA,CAED,0BACC,aAAA,CACA,UAAA,CACA,WAAA,CAED,2BACC,UAAA,CACA,WAAA,CACA,SAAA,CAEA,0DAEE,WAAA,CACA,YAAA,CACA,cAAA,CACA,KAAA,CACA,MAAA,CACA,WAAA,CAEA,gEACC,cAAA,CAKJ,sBACC,yBAAA,CACA,eAAA,CACA,WAAA,CAED,gBACC,YAAA,CACA,uDAAA,CAED,mBACC,YAAA,CAED,0BACC,eAAA,CAAA,CAGF,0BACC,0BACC,UAAA,CACA,aAAA,CAED,2BACC,UAAA,CACA,aAAA,CAED,gBACC,UAAA,CACA,yDAAA,CAAA,CAGF,0BACC,0BACC,UAAA,CACA,aAAA,CAED,2BACC,UAAA,CACA,aAAA,CAED,gBACC,UAAA,CACA,yDAAA,CAAA,CCxbF,mEACC,iBAAA,CACA,mBAAA,CACA,yBAAA,CACA,yBAAA,CAEA,0EACC,YAAA,CAKA,2FAAa,eAAA,CACb,sGAAwB,YAAA,CACxB,2FACE,cAAA,CACA,UAAA,CACA,UAAA,CACA,kGACE,YAAA,CAKN,gDACE,SAAA,CAGF,0BACC,mEACC,oBAAA,CACA,gBAAA,CAAA,CAIF,yBACC,kDACC,sBAAA,CAED,uCACC,wBAAA,CAAA,CAIF,yBACC,mEACC,wBAAA,CACA,mBAAA,CACA,MAAA,CACA,eAAA,CAAA,CCrCF,iBACE,WAAA,CACA,iBAAA,CACA,WAAA,CACA,WAAA,CACA,UAAA,CACA,wBAAA,CACA,eAAA,CACA,iBAAA,CACA,aAAA,CACA,eAAA,CACA,6DAAA,CAAA,qDAAA,CAIA,uBACE,UAAA,CACA,wBAAA,CACA,cAAA,CAIF,+CACE,UAAS,CACT,iBAAA,CACA,aAAA,CACA,SAAA,CACA,UAAA,CACA,UAAA,CACA,UAAA,CACA,kBAAA,CAGF,wBACE,+BAAW,CAAX,uBAAW,CACX,0BAAA,CAAA,kBAAA,CAGF,6BACE,gCAAW,CAAX,wBAAW,CAIf,SACE,wBAAA,CACA,WAAA,CACA,eAAA,CACA,0CAAA,CAAA,kCAAA,CAEA,4BAAuB,wBAAA,CAA+B,UAAA,CACtD,kCAA6B,wBAAA,CAC7B,kCAA6B,wBAAA,CAA+B,wBAAA,CAAsC,iBAAA,CAElG,cACE,iBAAA,CACA,yCAAA,CAAA,iCAAA,CAGF,kBACE,4BAAA,CACA,aAAA,CAEA,8BACE,WAAA,CAGF,wBACE,aAAA,CACA,uBAAA,CACA,gBAAA,CAHF,kGAQI,aAAA,CACA,eAAA,CATJ,gCAYI,aAAA,CApBN,qBAyBI,iBAAA,CAzBJ,wBA2BM,iBAAA,CACA,oBAAA,CAMR,qBAEE,oBAAA,CACA,QAAA,CACA,eAAA,CAEA,0BACE,WAAA,CACA,gBAAA,CACA,6BAAA,CAGF,oCACE,iBAAA,CAIJ,0BACE,iBAAA,CACA,aAAA,CACA,SAAA,CACA,YAAA,CACA,WAAA,CACA,kBAAA,CACA,iBAAA,CACA,0BAAA,CAAA,kBAAA,CAEA,iCACE,WAAS,CACT,UAAA,CACA,aAAA,CACA,iBAAA,CAGF,sCACE,WAAS,CAGX,gCACE,kBAAA,CACA,uCACE,UAAA,CAOJ,oEAEE,oBAAA,CACA,aAAA,CACA,eAAA,CACA,iBAAA,CACA,gBAAA,CAEF,sBACE,aAAA,CAOJ,yBACE,SACE,WAAA,CACA,YAAA,CAAA,CAIJ,yBACE,iBACE,YAAA,CAEF,uBAEE,cAAA,CACA,WAAA,CACA,WAAA,CACA,sBAAA,CAAA,cAAA,CACA,uBAAA,CAAA,eAAA,CACA,QAAA,CACA,eAAA,CACA,aAAA,CACA,mBAAA,CAAA,CAGJ,0BACE,uBAEE,WAAA,CAAA,CAGJ,0BACE,uBAEE,WAAA,CAEF,qBACE,mBAAA,CAEA,2BACE,eAAA,CAAA,CC/MN,aACE,mBAAA,CACA,iBAAA,CAEA,mBACE,iDAAY,CACZ,qBAAA,CACA,iBAAA,CAHF,yBAMI,iBAAA,CACA,UAAA,CACA,iBAAA,CACA,eAAA,CACA,eAAA,CAVJ,wBAcI,aAAA,CACA,cAAA,CACA,iBAAA,CACA,UAAA,CACA,qCAAA,CACA,4BAAA,CACA,oEAAA,CAAA,4DAAA,CAGA,mBAAA,CACA,eAAA,CACA,oBAAA,CACA,iBAAA,CAEA,8BACE,sCAAA,CACA,iCAAA,CAKN,wBACE,iFAAY,CAAZ,oDAAY,CACZ,qBAAA,CACA,iBAAA,CAHF,8BAMI,iBAAA,CACA,UAAA,CACA,iBAAA,CAEA,eAAA,CAVJ,6BAcI,aAAA,CACA,cAAA,CACA,iBAAA,CACA,UAAA,CACA,qCAAA,CACA,4BAAA,CACA,oEAAA,CAAA,4DAAA,CAGA,mBAAA,CACA,eAAA,CACA,oBAAA,CACA,iBAAA,CAEA,mCACE,sCAAA,CACA,iCAAA,CAKN,yBACE,YAAA,CACA,iDAAA,CACA,2BAAA,CACA,qBAAA,CACA,UAAA,CACA,eAAA,CANF,6BASI,oBAAA,CATJ,+BAaI,iBAAA,CACA,mBAAA,CAdJ,kCAiBI,eAAA,CACA,kBAAA,CAlBJ,8BAqBI,oBAAA,CACA,iBAAA,CACA,UAAA,CACA,kBAAA,CACA,iBAAA,CACA,sBAAA,CACA,iBAAA,CCvFN,iBACC,wBAAA,CACA,UAAA,CAFD,YACC,wBAAA,CACA,UAAA,CAED,iBACC,wBAAA,CACA,UAAA,CAED,EACC,oBAAA,CACA,iCAAA,CAAA,yBAAA,CAEA,QACC,cAAA,CAIF,SACC,qBAAA,CACA,aAAA,CACA,UAAA,CAEA,4BAAuB,qBAAA,CAA+B,UAAA,CACtD,kCAA6B,qBAAA,CAC7B,kCAA6B,qBAAA,CAA+B,wBAAA,CAAsC,iBAAA,CAGnG,iBACC,aAAA,CACA,UAAA,CACA,iBAAA,CACA,YAAA,CAEA,iCACC,wBAAA,CACA,iCAAA,CACA,+BAAA,CACA,2BAAA,CAJD,oCAOE,eAAA,CAIF,gCXsBA,kBAAA,CAGA,yFAAY,CAAZ,yDAAY,CWrBb,iBACC,eAAA,CACA,UAAA,CACA,eAAA,CACA,aAAA,CAJD,6EASE,eAAA,CACA,aAAA,CAVF,yBAaE,aAAA,CACA,cAAA,CAdF,uBAiBE,aAAA,CACA,4BAAA,CACA,iBAAA,CACA,0BAAA,CAAA,kBAAA,CACA,6BACC,oBAAA,CACA,kBAAA,CAvBH,uCA2BE,eAAS,CACT,mBAAa,CACb,eAAA,CACA,eAAA,CACA,qBAAA,CACA,cAAA,CACA,gBAAA,CACA,WAAA,CACA,iCAAA,CAAA,yBAAA,CACA,aAAA,CApCF,qDAyCI,iBAAA,CACA,iEACC,UAAS,CACT,iBAAA,CACA,QAAA,CACA,UAAA,CACA,OAAA,CACA,QAAA,CACA,kBAAA,CACA,0BAAA,CACA,wDAAA,CACA,UAAA,CACA,0BAAA,CAAA,kBAAA,CAED,6EACC,SAAA,CACA,wDAAA,CAGF,mDACC,oBAAA,CACA,UAAA,CACA,gBAAA,CACA,gBAAA,CACA,kBAAA,CAEA,mFACC,eAAS,CACT,mBAAa,CACb,gBAAA,CACA,eAAA,CACA,qBAAA,CACA,cAAA,CACA,iBAAA,CA1EL,mBAiFE,oBAAA,CAjFF,kRAgGE,aAAA,CACA,iBAAA,CACA,kBAAA,CAlGF,uBAqGE,gBAAA,CACA,eAAA,CACA,qBAAA,CAvGF,wHA4GE,UAAA,CACA,aAAA,CA7GF,wNAiHG,aAAA,CACA,iBAAA,CACA,UAAA,CACA,iBAAA,CApHH,4qBA4HG,oBAAA,CACA,mBAAA,CACA,uBAAA,CAED,gMACC,YAAA,CAjIH,oBAqIE,eAAA,CX5KD,8FAA+C,CAC/C,eAAA,CW6KC,iBAAA,CAvIF,oBA0IE,eAAA,CACA,eAAA,CACA,mBAAA,CA5IF,oBA+IE,eAAA,CACA,eAAA,CACA,iBAAA,CAjJF,oBAoJE,eAAA,CACA,eAAA,CACA,iBAAA,CACA,oBAAA,CAvJF,oBA0JE,iBAAA,CA1JF,oBA6JE,eAAA,CACA,iBAAA,CACA,iBAAA,CAGD,0DAEE,uBAAA,CApKH,mBA0KE,aAAA,CA1KF,wCA6KE,aAAA,CACA,oBAAA,CA9KF,8CAiLG,iBAAA,CACA,2BAAA,CACA,iBAAA,CACA,mBAAA,CApLH,4CAuLG,aAAA,CAvLH,uBA2LE,8BAAA,CA3LF,iDA+LE,uBAAA,CA/LF,0BAkME,2BAAA,CAlMF,6BAqME,uBAAA,CArMF,6BAwME,sBAAA,CAxMF,+BA2ME,eAAA,CA3MF,4FAiNE,UAAA,CACA,aAAA,CACA,eAAA,CACA,gBAAA,CApNF,oBAuNE,UAAA,CACA,UAAA,CACA,gBAAA,CACA,iBAAA,CACA,WAAA,CACA,aAAA,CACA,wBAAA,CA7NF,qBAgOE,cAAA,CACA,WAAA,CACA,iBAAA,CAlOF,wCAsOE,wBAAA,CACA,gBAAA,CACA,iBAAA,CACA,mBAAA,CAzOF,oCA4OE,wBAAA,CA5OF,0BAgPG,kCAAA,CAhPH,0BAmPG,oBAAA,CAnPH,8FA2PE,cAAA,CACA,iBAAA,CACA,iBAAA,CACA,kBAAA,CACA,qBAAA,CA/PF,khBAkQG,UAAA,CACA,aAAA,CAnQH,8IAuQG,eAAA,CAvQH,kIA0QG,aAAA,CA1QH,mDA+QE,iBAAA,CACA,aAAA,CACA,oBAAA,CACA,wBAAA,CAlRF,6DAoRG,aAAA,CACA,kBAAA,CACA,wBAAA,CAtRH,2DAyRG,kBAAA,CACA,oBAAA,CA1RH,qEA2RU,WAAA,CA3RV,2CAgSE,aAAA,CACA,oBAAA,CACA,wBAAA,CAlSF,qDAoSG,aAAA,CACA,kBAAA,CACA,wBAAA,CAtSH,mDAySG,kBAAA,CACA,oBAAA,CA1SH,6DA2SU,WAAA,CA3SV,sBAgTE,sDAAuB,CACvB,eAAA,CACA,aAAA,CACA,UAAA,CACA,aAAA,CACA,oBAAA,CAEA,gBAAA,CACA,YAAA,CACA,wBAAA,CACA,2BAAA,CACA,cAAA,CACA,iBAAA,CACA,gBAAA,CACA,oBAAA,CACA,kBAAA,CACA,iBAAA,CACA,qDAAA,CACA,sCAAA,CACA,yBAAA,CACA,aAAA,CACA,wBAAA,CArUF,qBAwUE,aAAA,CACA,iBAAA,CACA,aAAA,CACA,iBAAA,CACA,kBAAA,CACA,4BAAA,CACA,wBAAA,CACA,oBAAA,CACE,UAAA,CACF,2BAAA,CAjVF,0BAoVG,eAAA,CACA,mBAAA,CACA,iBAAA,CACA,WAAA,CACA,SAAA,CACA,eAAA,CACA,4BAAA,CAGD,wCAAuB,wBAAA,CAAmC,UAAA,CAC1D,8CAA6B,wBAAA,CAC7B,8CACC,wBAAA,CACA,wBAAA,CACA,4BAAe,CAKlB,eACC,mBAAA,CAAA,mBAAA,CAAA,YAAA,CACA,iBAAA,CACA,wBAAA,CAAA,qBAAA,CAAA,6BAAA,CACA,gBAAA,CAJD,iBAOE,mBAAA,CAAA,mBAAA,CAAA,YAAA,CACA,wBAAA,CAAA,qBAAA,CAAA,kBAAA,CACA,oBAAA,CACA,gBAAA,CACA,mBAAA,CACA,eAAA,CAEA,sBACC,iBAAA,CACA,MAAA,CACA,6BACC,eAAS,CACT,mBAAa,CACb,gBAAA,CACA,eAAA,CACA,qBAAA,CACA,cAAA,CACA,mBAAA,CAIF,sBACC,iBAAA,CACA,OAAA,CACA,4BACC,eAAS,CACT,mBAAa,CACb,gBAAA,CACA,eAAA,CACA,qBAAA,CACA,cAAA,CACA,kBAAA,CAUJ,UACC,iBAAA,CACA,oBAAA,CAFD,2BAKE,iBAAA,CACA,YAAA,CACA,UAAA,CACA,YAAA,CACA,WAAA,CATF,4BAaE,aAAA,CACA,WAAA,CACA,aAAA,CACA,aAAA,CACA,eAAA,CACA,cAAA,CACA,iBAAA,CACA,gBAAA,CACA,wBAAA,CACA,iBAAA,CACA,4BAAA,CAAA,oBAAA,CACA,mCACC,mBAAS,CAEV,kCACC,aAAA,CAGF,iBACC,gBAAA,CACA,eAAA,CACA,eAAA,CAHD,kCAME,QAAA,CACA,kGAAkB,CAAlB,oEAAkB,CAClB,YAAA,CARF,mCAYE,eAAA,CACA,0CACC,mBAAS,CASb,SACC,iBAAA,CACA,oBAAA,CACA,UAAA,CACA,eAAA,CACA,aAAA,CAED,mBACC,iBAAA,CACA,KAAA,CACA,QAAA,CACA,kCAAW,CAAX,0BAAW,CACX,gBAAA,CACA,iBAAA,CAED,cACC,eAAA,CACA,eAAA,CACA,UAAA,CACA,iBAAA,CACA,iBAAA,CACA,eAAA,CACA,eAAA,CACA,QAAA,CACA,2CAAW,CAAX,mCAAW,CACX,+BAAA,CAAA,uBAAA,CACA,kBAAA,CACA,SAAA,CACA,2BAAA,CACA,aAAA,CACA,wBAAA,CAED,oBACC,UAAS,CACT,iBAAA,CACA,QAAA,CACA,YAAA,CACA,kCAAW,CAAX,0BAAW,CACX,4BAAA,CACA,kCAAA,CACA,mCAAA,CACA,iCAAA,CAED,kCACC,kBAAA,CAED,6BACC,SAAA,CACA,uCAAW,CAAX,+BAAW,CAMZ,aACC,UAAA,CACA,oBAAA,CACA,iBAAA,CACA,aAAA,CACA,kBAAA,CACA,6BAAA,CACA,aAAA,CACA,wBAAA,CACA,iBAAA,CACA,iBAAA,CAEA,mBACC,eAAS,CACT,mBAAa,CACb,iBAAA,CACA,OAAA,CACA,QAAA,CACA,qDAAgC,CAAhC,6CAAgC,CAChC,aAAA,CAOF,iCAEE,eAAA,CACA,WAAA,CAOF,oBACC,mBAAA,CAAA,mBAAA,CAAA,YAAA,CACA,oBAAA,CAAA,iBAAA,CAAA,wBAAA,CACA,iBAAA,CACA,wBAAA,CACA,kBAAA,CACA,kBAAA,CACA,cAAA,CACA,eAAA,CACA,yBAAA,CACA,wBAAA,CAAA,qBAAA,CAAA,kBAAA,CAVD,oCAaE,oBAAA,CACA,oBAAA,CACA,oBAAA,CACA,iFAAY,CAAZ,mDAAY,CACZ,2BAAe,CACf,+BAAA,CAAA,uBAAA,CAEA,0CACC,eAAS,CACT,iBAAA,CACA,mBAAa,CAGd,0CACC,oBAAA,CACA,SAAA,CA5BH,8BAiCE,WAAA,CACA,uBAAA,CACA,kBAAA,CACA,mCAAA,CAAA,2BAAA,CAEA,oCACC,SAAA,CAMH,eACC,YAAA,CACC,cAAA,CACA,YAAA,CACA,MAAA,CACA,KAAA,CACA,UAAA,CACA,WAAA,CACA,aAAA,CACD,WAAA,CACC,mFAAY,CAAZ,2CAAY,CAGd,eACC,YAAA,CACA,eAAA,CACA,wBAAA,CACA,iBAAA,CACA,cAAA,CACA,QAAA,CACA,QAAA,CACA,kCAAW,CAAX,0BAAW,CACX,YAAA,CACA,UAAA,CACA,eAAA,CACA,+BAAA,CAAA,uBAAA,CAEA,oBACC,QAAA,CAfF,qBAmBE,UAAA,CACA,eAAA,CACA,iBAAA,CACA,wBAAA,CACA,wBAAA,CACA,aAAA,CACA,eAAA,CACA,cAAA,CACA,SAAA,CACA,uDAAA,CAAA,+CAAA,CAGA,2BACC,oBAAA,CAhCH,sBAqCE,WAAA,CACA,SAAA,CACA,4BACC,4BAAA,CAxCH,qBA6CE,aAAA,CACA,mBAAA,CACA,eAAA,CAIF,wBACC,oBAAA,CACA,uBAAA,CACA,eAAA,CACA,iBAAA,CACA,eAAA,CAEA,8BACC,wBAAA,CAIF,WACC,mBAAA,CAAA,mBAAA,CAAA,YAAA,CACA,wBAAA,CAAA,qBAAA,CAAA,6BAAA,CAFD,qBAKE,YAAA,CACA,mBAAA,CACA,iBAAA,CACA,mBAAA,CACA,UAAA,CACA,iBAAA,CACA,eAAA,CACA,iCAAA,CAAA,yBAAA,CAOF,yBACC,WACC,2BAAA,CAAA,4BAAA,CAAA,oBAAA,CAAA,gBAAA,CADD,qBAGE,UAAA,CACA,iBAAA,CAGF,wBACC,aAAA,CACA,kBAAA,CAAA,CAIF,4BACC,kBAAA,CACA,kCACC,kBAAA,CAOF,yBACC,SACC,kBAAA,CAED,iBACC,YAAA,CAED,mFAKE,gBAAA,CALF,qBAQE,qBAAA,CAAA,CAIH,0BACC,SACC,kBAAA,CAED,iBACC,cAAA,CAED,aACC,SAAA,CAAA,CAGF,0BACC,SACC,kBAAA,CAED,iBACC,kBAAA,CAED,iBACC,kBAAA,CAAA,CCryBF,UACC,aAAA,CACA,6BAAY,CACZ,UAAA,CACA,SAAA,CZ2DA,kBAAA,CAGA,0FAAY,CAAZ,2DAAY,CY5DZ,WAAA,CACA,mBAAA,CAAA,mBAAA,CAAA,YAAA,CACA,2BAAA,CAAA,4BAAA,CAAA,yBAAA,CAAA,qBAAA,CACA,kBAAA,CAAA,cAAA,CACA,wBAAA,CAAA,qBAAA,CAAA,6BAAA,CAVD,0EAaE,mBAAA,CAAA,mBAAA,CAAA,YAAA,CACA,6BAAA,CAAA,4BAAA,CAAA,sBAAA,CAAA,kBAAA,CACA,UAAA,CACA,kBAAA,CAAA,cAAA,CACA,kBAAA,CAAA,UAAA,CAAA,MAAA,CAGD,gBACC,UAAA,CACA,oBAAA,CACA,eAAA,CACA,iBAAA,CAEA,qBACC,iBAAA,CACA,KAAA,CACA,MAAA,CACA,UAAA,CACA,WAAA,CACA,UAAA,CACA,gEAAA,CAAA,wDAAA,CAAA,gDAAA,CAAA,4EAAA,CAGA,SAAA,CACA,4BAAA,CACA,qBAAA,CACA,iCAAA,CACA,2BAAA,CACA,4BAAW,CAAX,oBAAW,CAEZ,2CAEE,SAAA,CACA,gCAAW,CAAX,wBAAW,CAHb,4CAME,oBAAA,CAIF,0BACC,iBAAA,CACA,SAAA,CACA,UAAA,CACA,oBAAA,CACA,iBAAA,CACA,iBAAA,CACA,WAAA,CAPD,wGAYE,aAAA,CACA,kCAAA,CAAA,0BAAA,CACA,oBAAA,CAdF,kCAiBE,aAAA,CAIF,kDACC,eAAA,CACA,oBAAA,CACA,UAAA,CACA,qBAAA,CAED,sBACC,cAAA,CACA,oCAAA,CACA,eAAA,CACA,iBAAA,CACA,aAAA,CACA,kBAAA,CACA,kCAAA,CAAA,0BAAA,CAED,4BACC,cAAA,CACA,aAAA,CACA,iBAAA,CACA,eAAA,CAED,qBACC,oBAAA,CACA,iBAAA,CACA,eAAA,CACA,kBAAA,CACA,gBAAA,CACA,iBAAA,CAEA,mCACC,eAAA,CAKF,mDAEE,4CAAA,CACA,wBAAA,CAHF,0DAME,UAAA,CANF,oDASE,aAAA,CATF,gLAcE,UAAA,CACA,6DAAA,CAAA,qDAAA,CAfF,0DAoBE,aAAA,CACA,qBAAA,CAGF,mDAEE,4CAAA,CACA,wBAAA,CAHF,0DAME,UAAA,CANF,oDASE,aAAA,CATF,gLAcE,UAAA,CACA,6DAAA,CAAA,qDAAA,CAfF,0DAoBE,aAAA,CACA,qBAAA,CAGF,qDAEE,8CAAA,CACA,wBAAA,CAHF,4DAME,UAAA,CANF,sDASE,aAAA,CATF,sLAcE,UAAA,CACA,6DAAA,CAAA,qDAAA,CAfF,4DAoBE,aAAA,CACA,qBAAA,CAGF,oDAEE,6CAAA,CACA,wBAAA,CAHF,2DAME,UAAA,CANF,qDASE,aAAA,CATF,mLAcE,UAAA,CACA,6DAAA,CAAA,qDAAA,CAfF,2DAoBE,aAAA,CACA,qBAAA,CAIF,+DAEE,6CAAA,CACA,wBAAA,CAHF,sEAME,UAAA,CANF,gEASE,aAAA,CATF,oNAcE,UAAA,CACA,6DAAA,CAAA,qDAAA,CAfF,sEAoBE,aAAA,CACA,qBAAA,CAIF,8DAEE,4CAAA,CACA,wBAAA,CAHF,qEAME,UAAA,CANF,+DASE,aAAA,CATF,iNAcE,UAAA,CACA,6DAAA,CAAA,qDAAA,CAfF,qEAoBE,aAAA,CACA,qBAAA,CAIF,+CAEE,wCAAA,CACA,wBAAA,CACA,SAAA,CAJF,sDAOE,UAAA,CAPF,gDAUE,UAAA,CAVF,oKAeE,UAAA,CACA,6DAAA,CAAA,qDAAA,CAGA,+LACC,YAAA,CApBH,sDAwBE,aAAA,CACA,qBAAA,CAIF,8BACC,UAAA,CACA,iFAAY,CAAZ,oDAAY,CACZ,mBAAA,CAAA,mBAAA,CAAA,YAAA,CACA,wBAAA,CAAA,qBAAA,CAAA,kBAAA,CAJD,wDAOE,mBAAA,CAPF,mDAWE,4CAAA,CACA,wBAAA,CACA,UAAA,CAbF,0DAgBE,UAAA,CACA,iBAAA,CAjBF,oDAoBE,UAAA,CACA,iBAAA,CACA,iBAAA,CAtBF,gLA2BE,UAAA,CACA,6DAAA,CAAA,qDAAA,CA5BF,0DAiCE,aAAA,CACA,qBAAA,CAlCF,oCAqCE,qBAAA,CACA,iBAAA,CACA,oBAAA,CACA,eAAA,CACA,aAAA,CACA,iBAAA,CACA,cAAA,CACA,eAAA,CACA,0BAAA,CAAA,kBAAA,CACA,+CAAA,CAAA,uCAAA,CAEA,0CACC,gCAAA,CAAA,wBAAA,CAWL,yBACC,gBACC,SAAA,CACA,kBAAA,CAAA,mBAAA,CAAA,WAAA,CAAA,CAGF,0BACC,0BACC,cAAA,CAED,4BACC,kBAAA,CAED,gBACC,SAAA,CACA,WAAA,CAEA,8BACC,SAAA,CAGD,mFAEC,SAAA,CAAA,CAIH,0BACC,0BACC,YAAA,CAED,4BACC,kBAAA,CAAA,CCzXF,YACC,eAAA,CACA,QAAA,CACA,WAAA,CACA,UAAA,CbkEA,kBAAA,CAGA,4FAAY,CAAZ,4DAAY,CalEb,eACC,gBAAA,CACA,SAAA,CACA,eAAA,CACA,eAAA,CACA,cAAA,CACA,gBAAA,CACA,aAAA,CAPD,kBAUE,aAAA,CACA,aAAA,CACA,kBAAA,CACA,gBAAA,CACA,WAAA,CACA,YAAA,CACA,iBAAA,CACA,iBAAA,CACA,cAAA,CACA,eAAA,CACA,iBAAA,CACA,iBAAA,CACA,wBAAA,CAeF,MACC,mBAAA,CAAA,mBAAA,CAAA,YAAA,CACA,wBAAA,CAAA,4BAAA,CAGD,YACC,kBAAA,CAGD,KACC,aAAA,CACA,aAAA,CACA,kBAAA,CACA,UAAA,CACA,iBAAA,CACA,iBAAA,CACA,iCAAA,CAAA,yBAAA,CAEA,UACC,kBAAA,CAAA,mBAAA,CAAA,WAAA,CACA,mBAAA,CAEA,iBACC,eAAS,CACT,mBAAa,CACb,kBAAA,CACA,cAAA,CAIF,aACC,kBAAA,CAAA,mBAAA,CAAA,WAAA,CACA,YAAA,CAEA,oBACC,eAAS,CACT,mBAAa,CACb,kBAAA,CACA,kBAAA,CAAA,mBAAA,CAAA,WAAA,CAIF,WACC,kBAAA,CAQF,yBACC,eACC,cAAA,CACA,gBAAA,CAAA,CAKF,0BACC,eACC,cAAA,CACA,gBAAA,CAAA,CCpHF,gBACE,gBAAA,CAEF,MACE,kBAAA,CAAA,mBAAA,CAAA,WAAA,CACA,yBAAA,CAEF,QACE,mBAAA,CAAA,mBAAA,CAAA,YAAA,CACA,kBAAA,CAAA,cAAA,CAEF,QACE,kBAAA,CAAA,mBAAA,CAAA,WAAA,CACA,UAAA,CACA,gBAAA,CACA,uBAAA,CACA,gBAAA,CACA,oBAAA,CACA,iBAAA,CACA,iBAAA,CACA,qCAAA,CACA,iDAAA,CAAA,yCAAA,CAEA,cACE,uBAAA,CAEF,kBACE,oBAAA,CACA,kBAAA,CAIJ,aACE,UAAA,CAEA,eACE,oBAAA,CACA,uBAAA,CAIJ,+BACE,YAAA,CAGF,uBACE,iBAAA,CACA,2BAAA,CAKF,mBACE,oBAAA,CACA,UAAA,CAEA,qBACE,oBAAA,CACA,uBAAA,CAIJ,mBACE,qBAAA,CADF,gCAKM,QAAA,CACA,gBAAA,CACA,aAAA,CACA,eAAA,CARN,gCAWM,qBAAA,CACA,QAAA,CACA,yBAAA,CACA,oBAAA,CACA,+BAAA,CACA,oCAAA,CACA,sCACC,uBAAA,CAED,0CACC,wBAAA,CACA,uBAAA,CAtBP,qCA4BI,SAAA,CA5BJ,yCA8BM,eAAA,CACA,2BAAA,CAEF,yDACE,YAAA,CASN,yBACE,wBACE,kBAAA,CAAA,mBAAA,CAAA,WAAA,CAAA,CCzGJ,aACE,iBAAA,CACA,mBAAA,CACA,mBAAA,CACA,uBAAA,CAAA,oBAAA,CAAA,sBAAA,CACA,wBAAA,CAAA,qBAAA,CAAA,kBAAA,CACA,kBAAA,CACA,iBAAA,CAPF,gBAUI,SAAA,CACA,iBAAA,CAGF,0BACE,aAAS,CACT,iBAAA,CACA,oBAAA,CACA,iBAAA,CACA,aAAA,CACA,gBAAA,CAIA,oBACE,eAAA,CACA,eAAA,CACA,aAAA,CACA,mBAAA,CAJF,gCAOI,iBAAA,CACA,iBAAA,CACA,UAAA,CAMJ,gCAAmB,mBAAA,CACnB,iCAAoB,mBAAA,CACpB,iCAAoB,mBAAA,CAzCxB,0BA6CI,iBAAA,CACA,oBAAA,CACA,SAAA,CACA,WAAA,CACA,SAAA,CACA,sDAAA,CAAA,8CAAA,CAlDJ,uCAqDM,gBAAA,CACA,mBAAA,CAIJ,gCACiB,SAAA,CA3DnB,wBAgEI,oBAAA,CACA,+BAAA,CAjEJ,4GAkEkB,aAAA,CAlElB,qDAoEM,aAAA,CACA,cAAA,CACA,iBAAA,CAtEN,+BAwEa,aAAA,CAxEb,0BA0EM,aAAA,CA1EN,qCA4EQ,qEAAA,CAEF,gCACE,aAAA,CADF,2CAGI,wDAAA,CAjFV,qCAqFmB,aAAA,CArFnB,yDAuFM,aAAA,CACA,kBAAA,CAON,gBACE,mBAAA,CAAA,mBAAA,CAAA,YAAA,CACA,6BAAA,CAAA,4BAAA,CAAA,sBAAA,CAAA,kBAAA,CACA,uBAAA,CAAA,oBAAA,CAAA,sBAAA,CAHF,iCAMI,kBAAA,CAAA,kBAAA,CAAA,cAAA,CACA,0BAAA,CACA,aAAA,CAEA,6CACE,kBAAA,CAAA,kBAAA,CAAA,cAAA,CACA,aAAA,CAFF,0DAII,iBAAA,CAAA,cAAA,CAAA,SAAA,CAdR,mBAoBI,6CAAA,CACA,qBAAA,CArBJ,6BAyBI,SAAA,CACA,gBAAA,CACA,eAAA,CA3BJ,gCA6BM,SAAA,CACA,QAAA,CACA,mBAAA,CACA,8BAAA,CAhCN,sBAqCI,aAAA,CACA,gBAAA,CACA,aAAA,CACA,iBAAA,CAEA,4BACE,wBAAS,CACT,kBAAA,CACA,gBAAA,CACA,UAAA,CA9CN,0BAmDI,oBAAA,CACA,aAAA,CACA,YAAA,CACA,gCAAA,CACA,kBAAA,CACA,uBAAA,CACA,iBAAA,CACA,cAAA,CACA,uCAAA,CACA,wBAAA,CAAA,qBAAA,CAAA,oBAAA,CAAA,gBAAA,CA5DJ,qCAgEI,oBAAA,CACA,SAAA,CACA,kBAAA,CACA,SAAA,CACA,cAAA,CAEA,qDACE,UAAS,CACT,aAAA,CACA,iBAAA,CACA,YAAA,CACA,WAAA,CACA,iBAAA,CACA,kBAAA,CACA,UAAA,CACA,WAAA,CACA,SAAA,CACA,0BAAW,CAAX,kBAAW,CACX,0BAAA,CAAA,kBAAA,CAGF,6DACE,SAAA,CACA,0BAAW,CAAX,kBAAW,CASjB,0BACE,iCAEI,aAAA,CACe,4FACb,cAAA,CAAA,CAMR,yBACE,iCAEI,cAAA,CAIJ,0BAEI,SAAA,CACA,4BAAA,CACA,aAAA,CACA,iBAAA,CALJ,uCAMmB,QAAA,CANnB,gCAOY,YAAA,CAAA,CT7Cd,yBACC,KACC,gBAAA,CAAA,CU7KF,+BAEI,mBAAA,CAAA,mBAAA,CAAA,YAAA,CACA,kBAAA,CAAA,cAAA,CAHJ,iCAOI,iBAAA,CACA,sCAAS,sBAAA,CACT,uCAAU,yBAAA,CACV,yCAAY,sBAAA,CAWZ,yCAAY,sBAAA,CCnBhB,iCAEY,yBAAA,CAAiC,cAAA,CAAwB,cAAA,CAAe,qBAAA,CAAsB,oBAAA,CAF1G,mCAGa,0BAAA,CAAgC,cAAA,CAAuB,cAAA,CAAe,qBAAA,CAAsB,oBAAA,CAHzG,kCAIY,YAAA,CAGZ,kBACE,oBAAA,CACA,qBAAA,CACA,uBAAA,CACA,WAAA,CACA,YAAA,CACA,wBAAA,CACA,+BAAA,CACA,iBAAA,CAEF,oBACE,oBAAA,CACA,qBAAA,CACA,uBAAA,CACA,WAAA,CACA,YAAA,CACA,wBAAA,CACA,gCAAA,CACA,iBAAA,CAEF,mBACE,oBAAA,CACA,uBAAA,CACA,YAAA,CACA,aAAA,CACA,iBAAA,CACA,kBAAA,CCtBF,2JASM,aAAA,CATN,mDAYM,aAAA,CAZN,uDAeM,kBAAA,CAfN,iDAkBM,kBAAA,CACA,uDACE,kBAAA,CAGJ,oFAEC,uBAAA,CAzBL,kElBiEC,kBAAA,CAGA,4FAAY,CAAZ,4DAAY,CkBpEb,gLA0CM,aAAA,CACA,eAAA,CA3CN,0DA8CM,aAAA,CAIF,gDACE,aAAA,CAnDN,oDA2DI,wBAAA,CACA,0DACE,wBAAA,CA7DN,gDlBiEC,kBAAA,CAGA,4FAAY,CAAZ,4DAAY,CkBpEb,4CAsEI,kBAAA,CCtEJ,iKASM,aAAA,CATN,qDAYM,aAAA,CAZN,yDAeM,kBAAA,CAfN,mDAkBM,kBAAA,CACA,yDACE,kBAAA,CAGJ,sFAEC,uBAAA,CAzBL,oEnBiEC,kBAAA,CAGA,4FAAY,CAAZ,4DAAY,CmBpEb,sLA0CM,aAAA,CACA,eAAA,CA3CN,4DA8CM,aAAA,CAIF,kDACE,aAAA,CAnDN,sDA2DI,wBAAA,CACA,4DACE,wBAAA,CA7DN,kDnBiEC,kBAAA,CAGA,4FAAY,CAAZ,4DAAY,CmBpEb,8CAsEI,kBAAA,CCtEJ,8JASM,aAAA,CATN,oDAYM,aAAA,CAZN,wDAeM,kBAAA,CAfN,kDAkBM,kBAAA,CACA,wDACE,kBAAA,CAGJ,qFAEC,uBAAA,CAzBL,mEpBiEC,kBAAA,CAGA,4FAAY,CAAZ,4DAAY,CoBpEb,mLA0CM,aAAA,CACA,eAAA,CA3CN,2DA8CM,aAAA,CAIF,iDACE,aAAA,CAnDN,qDA2DI,wBAAA,CACA,2DACE,wBAAA,CA7DN,iDpBiEC,kBAAA,CAGA,4FAAY,CAAZ,4DAAY,CoBpEb,6CAsEI,kBAAA,CCtEJ,+LASM,aAAA,CATN,+DAYM,aAAA,CAZN,mEAeM,kBAAA,CAfN,6DAkBM,kBAAA,CACA,mEACE,kBAAA,CAGJ,gGAEC,uBAAA,CAzBL,8ErBiEC,kBAAA,CAGA,4FAAY,CAAZ,4DAAY,CqBpEb,oNA0CM,aAAA,CACA,eAAA,CA3CN,sEA8CM,aAAA,CAIF,4DACE,aAAA,CAnDN,gEA2DI,wBAAA,CACA,sEACE,wBAAA,CA7DN,4DrBiEC,kBAAA,CAGA,4FAAY,CAAZ,4DAAY,CqBpEb,wDAsEI,kBAAA,CCtEJ,+IASM,aAAA,CATN,+CAYM,aAAA,CAZN,mDAeM,kBAAA,CAEF,gFAEC,uBAAA,CAnBL,8DtBiEC,kBAAA,CAGA,4FAAY,CAAZ,4DAAY,CsBpEb,oKAoCM,aAAA,CACA,eAAA,CArCN,sDAwCM,aAAA,CAIF,4CACE,aAAA,CA7CN,gDAqDI,wBAAA,CACA,sDACE,wBAAA,CAvDN,4CtBiEC,kBAAA,CAGA,4FAAY,CAAZ,4DAAY,CsBpEb,wCAgEI,kBAAA","file":"docs-light.css","sourcesContent":["//\n// UI Variables\n// --------------------------------------------------\n\n@radius: 3px;\n\n//\n// Typography Variables\n// --------------------------------------------------\n\n@type-scale:\t\t1.2;\n\n@heading1Size:\t\t2.2em;\n@heading2Size:\t\t1.9em;\n@heading3Size:\t\t1.5em;\n@heading4Size:\t\t1.3em;\n@paragraphSize:\t\t1.0em;\n@smallTextSize:\t\t0.9em;\n@tinyTextSize:\t\t0.8em;\n\n@margin-bottom-base: 1em;\n@indented-element-size: 2rem;\n.klavika-font {\n\tfont-family: 'Klavika-Light','Helvetica Neue', 'Helvetica', Helvetica, Arial, Tahoma, Verdana, sans-serif;\n\tfont-weight: 200;\n}\n@thick-left-border: 6px;\n@scrollbar-width: 1rem;\n@border-small-screen: 1px;\n@border-large-screen: 2px;\n\n//\n// Size Variables\n// --------------------------------------------------\n@nav-height: \t\t\t\t4rem;\n@sidebar--toggle-height: \t3rem;\n@nav-gap:\t\t\t\t\t0.5rem;\n@nav-component-height:\t\t3rem;\n@search-offset:\t\t\t\t(@nav-height - @nav-component-height)/2;\n\n@sidebar-small-width:\t\t18rem;\n@sidebar-large-width:\t\t23rem;\n@sidebar-huge-width:\t\t28rem;\n\n@scrollbar-width:\t\t\t16px;\n\n@product-dropdown-small-width:\t17rem;\n@product-dropdown-large-width:\t17.5rem;\n@product-dropdown-huge-width:\t17.5rem;\n\n@search-default-width:\t\t40%;\n@search-small-width:\t\t~\"calc( 100% - \"@sidebar-small-width~\" - \"@nav-gap~\" - \"@nav-gap~\" - \"@nav-height~\" - \"@product-dropdown-small-width~\")\";\n@search-large-width:\t\t~\"calc( 100% - \"@sidebar-large-width~\" - \"@nav-gap~\" - \"@nav-gap~\" - \"@nav-height~\" - \"@product-dropdown-large-width~\")\";\n@search-huge-width:\t\t\t~\"calc( 100% - \"@sidebar-huge-width~\" - \"@nav-gap~\" - \"@nav-gap~\" - \"@nav-height~\" - \"@product-dropdown-huge-width~\")\";\n\n@search-small-position:\t\t@sidebar-small-width + @product-dropdown-small-width + @nav-gap;\n@search-large-position:\t\t@sidebar-large-width + @product-dropdown-large-width + @nav-gap;\n@search-huge-position:\t\t@sidebar-huge-width + @product-dropdown-huge-width + @nav-gap;\n\n\n//\n// Z Index Variables\n// --------------------------------------------------\n@z-sidebar:\t\t\t\t\t250;\n@z-sidebar--mask:\t\t\t200;\n@z-nav:\t\t\t\t\t\t150;\n@z-sidebar-desktop:\t\t\t100;\n@z-sidebar--toggle:\t\t\t100;\n\n//\n// Gradient Mixin\n// --------------------------------------------------\n.gradient-h(@color1,@color2) {\n\tbackground: @color1;\n\tbackground: -moz-linear-gradient(left, @color1 0%, @color2 100%);\n\tbackground: -webkit-linear-gradient(left, @color1 0%,@color2 100%);\n\tbackground: linear-gradient(to right, @color1 0%,@color2 100%);\n\tfilter: progid:DXImageTransform.Microsoft.gradient( startColorstr='@color1', endColorstr='@color2',GradientType=1 );\n}\n.gradient-v(@color1,@color2) {\n\tbackground: @color1;\n\tbackground: -moz-linear-gradient(top, @color1 0%, @color2 100%);\n\tbackground: -webkit-linear-gradient(top, @color1 0%,@color2 100%);\n\tbackground: linear-gradient(to bottom, @color1 0%,@color2 100%);\n\tfilter: progid:DXImageTransform.Microsoft.gradient( startColorstr='@color1', endColorstr='@color2',GradientType=0 );\n}\n\n//\n// Breakpoints\n// --------------------------------------------------\n@breakpoint-small:\t\t\t900px;\n@breakpoint-large:\t\t\t1200px;\n@breakpoint-huge:\t\t\t1900px;\n","@font-face {\n\tfont-family: 'icomoon';\n\tsrc:url('../fonts/icomoon.eot?c3omf0');\n\tsrc:url('../fonts/icomoon.eot?c3omf0#iefix') format('embedded-opentype'),\n\t\turl('../fonts/icomoon.woff2?c3omf0') format('woff2'),\n\t\turl('../fonts/icomoon.ttf?c3omf0') format('truetype'),\n\t\turl('../fonts/icomoon.woff?c3omf0') format('woff'),\n\t\turl('../fonts/icomoon.svg?c3omf0#icomoon') format('svg');\n\tfont-weight: normal;\n\tfont-style: normal;\n}\n\n.icon {\n\tfont-family: 'icomoon';\n\tspeak: none;\n\tfont-style: normal;\n\tfont-weight: normal;\n\tfont-variant: normal;\n\ttext-transform: none;\n\tline-height: 1;\n\n\t/* Better Font Rendering =========== */\n\t-webkit-font-smoothing: antialiased;\n\t-moz-osx-font-smoothing: grayscale;\n}\n\n.icon.sun2:before {\n content: \"\\eae2\";\n}\n.icon.moon:before {\n content: \"\\eae3\";\n}\n.icon.logotype:before {\n content: \"\\e800\";\n}\n.icon.logo:before {\n content: \"\\e801\";\n}\n.icon.arrow-down:before {\n content: \"\\e802\";\n}\n.icon.arrow-up:before {\n content: \"\\e803\";\n}\n.icon.arrow-left:before {\n content: \"\\e804\";\n}\n.icon.arrow-right:before {\n content: \"\\e805\";\n}\n.icon.health:before {\n content: \"\\e806\";\n}\n.icon.lightning:before {\n content: \"\\e807\";\n}\n.icon.matrix:before {\n content: \"\\e808\";\n}\n.icon.cluster:before {\n content: \"\\e809\";\n}\n.icon.data:before {\n content: \"\\e80a\";\n}\n.icon.google:before {\n content: \"\\e81a\";\n}\n.icon.eyeball:before {\n content: \"\\e901\";\n}\n.icon.infinite:before {\n content: \"\\e902\";\n}\n.icon.dashboard:before {\n content: \"\\eade\";\n}\n.icon.analytics:before {\n content: \"\\eadf\";\n}\n.icon.cloud-stack:before {\n content: \"\\eae0\";\n}\n.icon.iot:before {\n content: \"\\eae1\";\n}\n.icon.home:before {\n content: \"\\e904\";\n}\n.icon.home2:before {\n content: \"\\e905\";\n}\n.icon.home3:before {\n content: \"\\e906\";\n}\n.icon.office:before {\n content: \"\\e907\";\n}\n.icon.newspaper:before {\n content: \"\\e908\";\n}\n.icon.pencil:before {\n content: \"\\e909\";\n}\n.icon.pencil2:before {\n content: \"\\e90a\";\n}\n.icon.quill:before {\n content: \"\\e90b\";\n}\n.icon.pen:before {\n content: \"\\e90c\";\n}\n.icon.blog:before {\n content: \"\\e90d\";\n}\n.icon.eyedropper:before {\n content: \"\\e90e\";\n}\n.icon.droplet:before {\n content: \"\\e90f\";\n}\n.icon.paint-format:before {\n content: \"\\e910\";\n}\n.icon.image:before {\n content: \"\\e911\";\n}\n.icon.images:before {\n content: \"\\e912\";\n}\n.icon.camera:before {\n content: \"\\e913\";\n}\n.icon.headphones:before {\n content: \"\\e914\";\n}\n.icon.music:before {\n content: \"\\e915\";\n}\n.icon.play:before {\n content: \"\\e916\";\n}\n.icon.film:before {\n content: \"\\e917\";\n}\n.icon.video-camera:before {\n content: \"\\e918\";\n}\n.icon.dice:before {\n content: \"\\e919\";\n}\n.icon.pacman:before {\n content: \"\\e91a\";\n}\n.icon.spades:before {\n content: \"\\e91b\";\n}\n.icon.clubs:before {\n content: \"\\e91c\";\n}\n.icon.diamonds:before {\n content: \"\\e91d\";\n}\n.icon.bullhorn:before {\n content: \"\\e91e\";\n}\n.icon.connection:before {\n content: \"\\e91f\";\n}\n.icon.podcast:before {\n content: \"\\e920\";\n}\n.icon.feed:before {\n content: \"\\e921\";\n}\n.icon.mic:before {\n content: \"\\e922\";\n}\n.icon.book:before {\n content: \"\\e923\";\n}\n.icon.books:before {\n content: \"\\e924\";\n}\n.icon.library:before {\n content: \"\\e925\";\n}\n.icon.file-text:before {\n content: \"\\e926\";\n}\n.icon.profile:before {\n content: \"\\e927\";\n}\n.icon.file-empty:before {\n content: \"\\e928\";\n}\n.icon.files-empty:before {\n content: \"\\e929\";\n}\n.icon.file-text2:before {\n content: \"\\e92a\";\n}\n.icon.file-picture:before {\n content: \"\\e92b\";\n}\n.icon.file-music:before {\n content: \"\\e92c\";\n}\n.icon.file-play:before {\n content: \"\\e92d\";\n}\n.icon.file-video:before {\n content: \"\\e92e\";\n}\n.icon.file-zip:before {\n content: \"\\e92f\";\n}\n.icon.copy:before {\n content: \"\\e930\";\n}\n.icon.paste:before {\n content: \"\\e931\";\n}\n.icon.stack:before {\n content: \"\\e932\";\n}\n.icon.folder:before {\n content: \"\\e933\";\n}\n.icon.folder-open:before {\n content: \"\\e934\";\n}\n.icon.folder-plus:before {\n content: \"\\e935\";\n}\n.icon.folder-minus:before {\n content: \"\\e936\";\n}\n.icon.folder-download:before {\n content: \"\\e937\";\n}\n.icon.folder-upload:before {\n content: \"\\e938\";\n}\n.icon.price-tag:before {\n content: \"\\e939\";\n}\n.icon.price-tags:before {\n content: \"\\e93a\";\n}\n.icon.barcode:before {\n content: \"\\e93b\";\n}\n.icon.qrcode:before {\n content: \"\\e93c\";\n}\n.icon.ticket:before {\n content: \"\\e93d\";\n}\n.icon.cart:before {\n content: \"\\e93e\";\n}\n.icon.coin-dollar:before {\n content: \"\\e93f\";\n}\n.icon.coin-euro:before {\n content: \"\\e940\";\n}\n.icon.coin-pound:before {\n content: \"\\e941\";\n}\n.icon.coin-yen:before {\n content: \"\\e942\";\n}\n.icon.credit-card:before {\n content: \"\\e943\";\n}\n.icon.calculator:before {\n content: \"\\e944\";\n}\n.icon.lifebuoy:before {\n content: \"\\e945\";\n}\n.icon.phone:before {\n content: \"\\e946\";\n}\n.icon.phone-hang-up:before {\n content: \"\\e947\";\n}\n.icon.address-book:before {\n content: \"\\e948\";\n}\n.icon.envelop:before {\n content: \"\\e949\";\n}\n.icon.pushpin:before {\n content: \"\\e94a\";\n}\n.icon.location:before {\n content: \"\\e94b\";\n}\n.icon.location2:before {\n content: \"\\e94c\";\n}\n.icon.compass:before {\n content: \"\\e94d\";\n}\n.icon.compass2:before {\n content: \"\\e94e\";\n}\n.icon.map:before {\n content: \"\\e94f\";\n}\n.icon.map2:before {\n content: \"\\e950\";\n}\n.icon.history:before {\n content: \"\\e951\";\n}\n.icon.clock:before {\n content: \"\\e952\";\n}\n.icon.clock2:before {\n content: \"\\e953\";\n}\n.icon.alarm:before {\n content: \"\\e954\";\n}\n.icon.bell:before {\n content: \"\\e955\";\n}\n.icon.stopwatch:before {\n content: \"\\e956\";\n}\n.icon.calendar:before {\n content: \"\\e957\";\n}\n.icon.printer:before {\n content: \"\\e958\";\n}\n.icon.keyboard:before {\n content: \"\\e959\";\n}\n.icon.display:before {\n content: \"\\e95a\";\n}\n.icon.laptop:before {\n content: \"\\e95b\";\n}\n.icon.mobile:before {\n content: \"\\e95c\";\n}\n.icon.mobile2:before {\n content: \"\\e95d\";\n}\n.icon.tablet:before {\n content: \"\\e95e\";\n}\n.icon.tv:before {\n content: \"\\e95f\";\n}\n.icon.drawer:before {\n content: \"\\e960\";\n}\n.icon.drawer2:before {\n content: \"\\e961\";\n}\n.icon.box-add:before {\n content: \"\\e962\";\n}\n.icon.box-remove:before {\n content: \"\\e963\";\n}\n.icon.download:before {\n content: \"\\e964\";\n}\n.icon.upload:before {\n content: \"\\e965\";\n}\n.icon.floppy-disk:before {\n content: \"\\e966\";\n}\n.icon.drive:before {\n content: \"\\e967\";\n}\n.icon.database:before {\n content: \"\\e968\";\n}\n.icon.undo:before {\n content: \"\\e969\";\n}\n.icon.redo:before {\n content: \"\\e96a\";\n}\n.icon.undo2:before {\n content: \"\\e96b\";\n}\n.icon.redo2:before {\n content: \"\\e96c\";\n}\n.icon.forward:before {\n content: \"\\e96d\";\n}\n.icon.reply:before {\n content: \"\\e96e\";\n}\n.icon.bubble:before {\n content: \"\\e96f\";\n}\n.icon.bubbles:before {\n content: \"\\e970\";\n}\n.icon.bubbles2:before {\n content: \"\\e971\";\n}\n.icon.bubble2:before {\n content: \"\\e972\";\n}\n.icon.bubbles3:before {\n content: \"\\e973\";\n}\n.icon.bubbles4:before {\n content: \"\\e974\";\n}\n.icon.user:before {\n content: \"\\e975\";\n}\n.icon.users:before {\n content: \"\\e976\";\n}\n.icon.user-plus:before {\n content: \"\\e977\";\n}\n.icon.user-minus:before {\n content: \"\\e978\";\n}\n.icon.user-check:before {\n content: \"\\e979\";\n}\n.icon.user-tie:before {\n content: \"\\e97a\";\n}\n.icon.quotes-left:before {\n content: \"\\e97b\";\n}\n.icon.quotes-right:before {\n content: \"\\e97c\";\n}\n.icon.hour-glass:before {\n content: \"\\e97d\";\n}\n.icon.spinner:before {\n content: \"\\e97e\";\n}\n.icon.spinner2:before {\n content: \"\\e97f\";\n}\n.icon.spinner3:before {\n content: \"\\e980\";\n}\n.icon.spinner4:before {\n content: \"\\e981\";\n}\n.icon.spinner5:before {\n content: \"\\e982\";\n}\n.icon.spinner6:before {\n content: \"\\e983\";\n}\n.icon.spinner7:before {\n content: \"\\e984\";\n}\n.icon.spinner8:before {\n content: \"\\e985\";\n}\n.icon.spinner9:before {\n content: \"\\e986\";\n}\n.icon.spinner10:before {\n content: \"\\e987\";\n}\n.icon.spinner11:before {\n content: \"\\e988\";\n}\n.icon.binoculars:before {\n content: \"\\e989\";\n}\n.icon.search:before {\n content: \"\\e98a\";\n}\n.icon.zoom-in:before {\n content: \"\\e98b\";\n}\n.icon.zoom-out:before {\n content: \"\\e98c\";\n}\n.icon.enlarge:before {\n content: \"\\e98d\";\n}\n.icon.shrink:before {\n content: \"\\e98e\";\n}\n.icon.enlarge2:before {\n content: \"\\e98f\";\n}\n.icon.shrink2:before {\n content: \"\\e990\";\n}\n.icon.key:before {\n content: \"\\e991\";\n}\n.icon.key2:before {\n content: \"\\e992\";\n}\n.icon.lock:before {\n content: \"\\e993\";\n}\n.icon.unlocked:before {\n content: \"\\e994\";\n}\n.icon.wrench:before {\n content: \"\\e995\";\n}\n.icon.equalizer:before {\n content: \"\\e996\";\n}\n.icon.equalizer2:before {\n content: \"\\e997\";\n}\n.icon.cog:before {\n content: \"\\e900\";\n}\n.icon.cogs:before {\n content: \"\\e998\";\n}\n.icon.hammer:before {\n content: \"\\e999\";\n}\n.icon.magic-wand:before {\n content: \"\\e99a\";\n}\n.icon.aid-kit:before {\n content: \"\\e99b\";\n}\n.icon.bug:before {\n content: \"\\e99c\";\n}\n.icon.pie-chart:before {\n content: \"\\e99d\";\n}\n.icon.stats-dots:before {\n content: \"\\e99e\";\n}\n.icon.stats-bars:before {\n content: \"\\e99f\";\n}\n.icon.stats-bars2:before {\n content: \"\\e9a0\";\n}\n.icon.trophy:before {\n content: \"\\e9a1\";\n}\n.icon.gift:before {\n content: \"\\e9a2\";\n}\n.icon.glass:before {\n content: \"\\e9a3\";\n}\n.icon.glass2:before {\n content: \"\\e9a4\";\n}\n.icon.mug:before {\n content: \"\\e9a5\";\n}\n.icon.spoon-knife:before {\n content: \"\\e9a6\";\n}\n.icon.leaf:before {\n content: \"\\e9a7\";\n}\n.icon.rocket:before {\n content: \"\\e9a8\";\n}\n.icon.meter:before {\n content: \"\\e9a9\";\n}\n.icon.meter2:before {\n content: \"\\e9aa\";\n}\n.icon.hammer2:before {\n content: \"\\e9ab\";\n}\n.icon.fire:before {\n content: \"\\e9ac\";\n}\n.icon.lab:before {\n content: \"\\e9ad\";\n}\n.icon.magnet:before {\n content: \"\\e9ae\";\n}\n.icon.bin:before {\n content: \"\\e9af\";\n}\n.icon.bin2:before {\n content: \"\\e9b0\";\n}\n.icon.briefcase:before {\n content: \"\\e9b1\";\n}\n.icon.airplane:before {\n content: \"\\e9b2\";\n}\n.icon.truck:before {\n content: \"\\e9b3\";\n}\n.icon.road:before {\n content: \"\\e9b4\";\n}\n.icon.accessibility:before {\n content: \"\\e9b5\";\n}\n.icon.target:before {\n content: \"\\e9b6\";\n}\n.icon.shield:before {\n content: \"\\e9b7\";\n}\n.icon.power:before {\n content: \"\\e9b8\";\n}\n.icon.switch:before {\n content: \"\\e9b9\";\n}\n.icon.power-cord:before {\n content: \"\\e9ba\";\n}\n.icon.clipboard:before {\n content: \"\\e9bb\";\n}\n.icon.list-numbered:before {\n content: \"\\e9bc\";\n}\n.icon.list:before {\n content: \"\\e9bd\";\n}\n.icon.list2:before {\n content: \"\\e9be\";\n}\n.icon.tree:before {\n content: \"\\e9bf\";\n}\n.icon.menu:before {\n content: \"\\e9c0\";\n}\n.icon.menu2:before {\n content: \"\\e9c1\";\n}\n.icon.menu3:before {\n content: \"\\e9c2\";\n}\n.icon.menu4:before {\n content: \"\\e9c3\";\n}\n.icon.cloud:before {\n content: \"\\e9c4\";\n}\n.icon.cloud-download:before {\n content: \"\\e9c5\";\n}\n.icon.cloud-upload:before {\n content: \"\\e9c6\";\n}\n.icon.cloud-check:before {\n content: \"\\e9c7\";\n}\n.icon.download2:before {\n content: \"\\e9c8\";\n}\n.icon.upload2:before {\n content: \"\\e9c9\";\n}\n.icon.download3:before {\n content: \"\\e9ca\";\n}\n.icon.upload3:before {\n content: \"\\e9cb\";\n}\n.icon.sphere:before {\n content: \"\\e9cc\";\n}\n.icon.earth:before {\n content: \"\\e9cd\";\n}\n.icon.link:before {\n content: \"\\e9ce\";\n}\n.icon.flag:before {\n content: \"\\e9cf\";\n}\n.icon.attachment:before {\n content: \"\\e9d0\";\n}\n.icon.eye:before {\n content: \"\\e9d1\";\n}\n.icon.eye-plus:before {\n content: \"\\e9d2\";\n}\n.icon.eye-minus:before {\n content: \"\\e9d3\";\n}\n.icon.eye-blocked:before {\n content: \"\\e9d4\";\n}\n.icon.bookmark:before {\n content: \"\\e9d5\";\n}\n.icon.bookmarks:before {\n content: \"\\e9d6\";\n}\n.icon.sun:before {\n content: \"\\e9d7\";\n}\n.icon.contrast:before {\n content: \"\\e9d8\";\n}\n.icon.brightness-contrast:before {\n content: \"\\e9d9\";\n}\n.icon.star-empty:before {\n content: \"\\e9da\";\n}\n.icon.star-half:before {\n content: \"\\e9db\";\n}\n.icon.star-full:before {\n content: \"\\e9dc\";\n}\n.icon.heart:before {\n content: \"\\e9dd\";\n}\n.icon.heart-broken:before {\n content: \"\\e9de\";\n}\n.icon.man:before {\n content: \"\\e9df\";\n}\n.icon.woman:before {\n content: \"\\e9e0\";\n}\n.icon.man-woman:before {\n content: \"\\e9e1\";\n}\n.icon.happy:before {\n content: \"\\e9e2\";\n}\n.icon.happy2:before {\n content: \"\\e9e3\";\n}\n.icon.smile:before {\n content: \"\\e9e4\";\n}\n.icon.smile2:before {\n content: \"\\e9e5\";\n}\n.icon.tongue:before {\n content: \"\\e9e6\";\n}\n.icon.tongue2:before {\n content: \"\\e9e7\";\n}\n.icon.sad:before {\n content: \"\\e9e8\";\n}\n.icon.sad2:before {\n content: \"\\e9e9\";\n}\n.icon.wink:before {\n content: \"\\e9ea\";\n}\n.icon.wink2:before {\n content: \"\\e9eb\";\n}\n.icon.grin:before {\n content: \"\\e9ec\";\n}\n.icon.grin2:before {\n content: \"\\e9ed\";\n}\n.icon.cool:before {\n content: \"\\e9ee\";\n}\n.icon.cool2:before {\n content: \"\\e9ef\";\n}\n.icon.angry:before {\n content: \"\\e9f0\";\n}\n.icon.angry2:before {\n content: \"\\e9f1\";\n}\n.icon.evil:before {\n content: \"\\e9f2\";\n}\n.icon.evil2:before {\n content: \"\\e9f3\";\n}\n.icon.shocked:before {\n content: \"\\e9f4\";\n}\n.icon.shocked2:before {\n content: \"\\e9f5\";\n}\n.icon.baffled:before {\n content: \"\\e9f6\";\n}\n.icon.baffled2:before {\n content: \"\\e9f7\";\n}\n.icon.confused:before {\n content: \"\\e9f8\";\n}\n.icon.confused2:before {\n content: \"\\e9f9\";\n}\n.icon.neutral:before {\n content: \"\\e9fa\";\n}\n.icon.neutral2:before {\n content: \"\\e9fb\";\n}\n.icon.hipster:before {\n content: \"\\e9fc\";\n}\n.icon.hipster2:before {\n content: \"\\e9fd\";\n}\n.icon.wondering:before {\n content: \"\\e9fe\";\n}\n.icon.wondering2:before {\n content: \"\\e9ff\";\n}\n.icon.sleepy:before {\n content: \"\\ea00\";\n}\n.icon.sleepy2:before {\n content: \"\\ea01\";\n}\n.icon.frustrated:before {\n content: \"\\ea02\";\n}\n.icon.frustrated2:before {\n content: \"\\ea03\";\n}\n.icon.crying:before {\n content: \"\\ea04\";\n}\n.icon.crying2:before {\n content: \"\\ea05\";\n}\n.icon.point-up:before {\n content: \"\\ea06\";\n}\n.icon.point-right:before {\n content: \"\\ea07\";\n}\n.icon.point-down:before {\n content: \"\\ea08\";\n}\n.icon.point-left:before {\n content: \"\\ea09\";\n}\n.icon.warning:before {\n content: \"\\ea0a\";\n}\n.icon.notification:before {\n content: \"\\ea0b\";\n}\n.icon.question:before {\n content: \"\\ea0c\";\n}\n.icon.plus:before {\n content: \"\\ea0d\";\n}\n.icon.minus:before {\n content: \"\\ea0e\";\n}\n.icon.info:before {\n content: \"\\ea0f\";\n}\n.icon.cancel-circle:before {\n content: \"\\ea10\";\n}\n.icon.blocked:before {\n content: \"\\ea11\";\n}\n.icon.cross:before {\n content: \"\\e80b\";\n}\n.icon.checkmark:before {\n content: \"\\e80c\";\n}\n.icon.checkmark2:before {\n content: \"\\ea12\";\n}\n.icon.spell-check:before {\n content: \"\\ea13\";\n}\n.icon.enter:before {\n content: \"\\ea14\";\n}\n.icon.exit:before {\n content: \"\\ea15\";\n}\n.icon.play2:before {\n content: \"\\ea16\";\n}\n.icon.pause:before {\n content: \"\\ea17\";\n}\n.icon.stop:before {\n content: \"\\ea18\";\n}\n.icon.previous:before {\n content: \"\\ea19\";\n}\n.icon.next:before {\n content: \"\\ea1a\";\n}\n.icon.backward:before {\n content: \"\\ea1b\";\n}\n.icon.forward2:before {\n content: \"\\ea1c\";\n}\n.icon.play3:before {\n content: \"\\ea1d\";\n}\n.icon.pause2:before {\n content: \"\\ea1e\";\n}\n.icon.stop2:before {\n content: \"\\ea1f\";\n}\n.icon.backward2:before {\n content: \"\\ea20\";\n}\n.icon.forward3:before {\n content: \"\\ea21\";\n}\n.icon.first:before {\n content: \"\\ea22\";\n}\n.icon.last:before {\n content: \"\\ea23\";\n}\n.icon.previous2:before {\n content: \"\\ea24\";\n}\n.icon.next2:before {\n content: \"\\ea25\";\n}\n.icon.eject:before {\n content: \"\\ea26\";\n}\n.icon.volume-high:before {\n content: \"\\ea27\";\n}\n.icon.volume-medium:before {\n content: \"\\ea28\";\n}\n.icon.volume-low:before {\n content: \"\\ea29\";\n}\n.icon.volume-mute:before {\n content: \"\\ea2a\";\n}\n.icon.volume-mute2:before {\n content: \"\\ea2b\";\n}\n.icon.volume-increase:before {\n content: \"\\ea2c\";\n}\n.icon.volume-decrease:before {\n content: \"\\ea2d\";\n}\n.icon.loop:before {\n content: \"\\ea2e\";\n}\n.icon.loop2:before {\n content: \"\\ea2f\";\n}\n.icon.infinite2:before {\n content: \"\\ea30\";\n}\n.icon.shuffle:before {\n content: \"\\ea31\";\n}\n.icon.arrow-up-left:before {\n content: \"\\ea32\";\n}\n.icon.arrow-up3:before {\n content: \"\\ea33\";\n}\n.icon.arrow-up-right:before {\n content: \"\\ea34\";\n}\n.icon.arrow-right3:before {\n content: \"\\ea35\";\n}\n.icon.arrow-down-right:before {\n content: \"\\ea36\";\n}\n.icon.arrow-down3:before {\n content: \"\\ea37\";\n}\n.icon.arrow-down-left:before {\n content: \"\\ea38\";\n}\n.icon.arrow-left3:before {\n content: \"\\ea39\";\n}\n.icon.arrow-up-left2:before {\n content: \"\\ea3a\";\n}\n.icon.arrow-up2:before {\n content: \"\\ea3b\";\n}\n.icon.arrow-up-right2:before {\n content: \"\\ea3c\";\n}\n.icon.arrow-right2:before {\n content: \"\\ea3d\";\n}\n.icon.arrow-down-right2:before {\n content: \"\\ea3e\";\n}\n.icon.arrow-down2:before {\n content: \"\\ea3f\";\n}\n.icon.arrow-down-left2:before {\n content: \"\\ea40\";\n}\n.icon.arrow-left2:before {\n content: \"\\ea41\";\n}\n.icon.circle-up:before {\n content: \"\\ea42\";\n}\n.icon.circle-right:before {\n content: \"\\ea43\";\n}\n.icon.circle-down:before {\n content: \"\\ea44\";\n}\n.icon.circle-left:before {\n content: \"\\ea45\";\n}\n.icon.tab:before {\n content: \"\\ea46\";\n}\n.icon.move-up:before {\n content: \"\\ea47\";\n}\n.icon.move-down:before {\n content: \"\\ea48\";\n}\n.icon.sort-alpha-asc:before {\n content: \"\\ea49\";\n}\n.icon.sort-alpha-desc:before {\n content: \"\\ea4a\";\n}\n.icon.sort-numeric-asc:before {\n content: \"\\ea4b\";\n}\n.icon.sort-numberic-desc:before {\n content: \"\\ea4c\";\n}\n.icon.sort-amount-asc:before {\n content: \"\\ea4d\";\n}\n.icon.sort-amount-desc:before {\n content: \"\\ea4e\";\n}\n.icon.command:before {\n content: \"\\ea4f\";\n}\n.icon.shift:before {\n content: \"\\ea50\";\n}\n.icon.ctrl:before {\n content: \"\\ea51\";\n}\n.icon.opt:before {\n content: \"\\ea52\";\n}\n.icon.checkbox-checked:before {\n content: \"\\ea53\";\n}\n.icon.checkbox-unchecked:before {\n content: \"\\ea54\";\n}\n.icon.radio-checked:before {\n content: \"\\ea55\";\n}\n.icon.radio-checked2:before {\n content: \"\\ea56\";\n}\n.icon.radio-unchecked:before {\n content: \"\\ea57\";\n}\n.icon.crop:before {\n content: \"\\ea58\";\n}\n.icon.make-group:before {\n content: \"\\ea59\";\n}\n.icon.ungroup:before {\n content: \"\\ea5a\";\n}\n.icon.scissors:before {\n content: \"\\ea5b\";\n}\n.icon.filter:before {\n content: \"\\ea5c\";\n}\n.icon.font:before {\n content: \"\\ea5d\";\n}\n.icon.ligature:before {\n content: \"\\ea5e\";\n}\n.icon.ligature2:before {\n content: \"\\ea5f\";\n}\n.icon.text-height:before {\n content: \"\\ea60\";\n}\n.icon.text-width:before {\n content: \"\\ea61\";\n}\n.icon.font-size:before {\n content: \"\\ea62\";\n}\n.icon.bold:before {\n content: \"\\ea63\";\n}\n.icon.underline:before {\n content: \"\\ea64\";\n}\n.icon.italic:before {\n content: \"\\ea65\";\n}\n.icon.strikethrough:before {\n content: \"\\ea66\";\n}\n.icon.omega:before {\n content: \"\\ea67\";\n}\n.icon.sigma:before {\n content: \"\\ea68\";\n}\n.icon.page-break:before {\n content: \"\\ea69\";\n}\n.icon.superscript:before {\n content: \"\\ea6a\";\n}\n.icon.subscript:before {\n content: \"\\ea6b\";\n}\n.icon.superscript2:before {\n content: \"\\ea6c\";\n}\n.icon.subscript2:before {\n content: \"\\ea6d\";\n}\n.icon.text-color:before {\n content: \"\\ea6e\";\n}\n.icon.pagebreak:before {\n content: \"\\ea6f\";\n}\n.icon.clear-formatting:before {\n content: \"\\ea70\";\n}\n.icon.table:before {\n content: \"\\ea71\";\n}\n.icon.table2:before {\n content: \"\\ea72\";\n}\n.icon.insert-template:before {\n content: \"\\ea73\";\n}\n.icon.pilcrow:before {\n content: \"\\ea74\";\n}\n.icon.ltr:before {\n content: \"\\ea75\";\n}\n.icon.rtl:before {\n content: \"\\ea76\";\n}\n.icon.section:before {\n content: \"\\ea77\";\n}\n.icon.paragraph-left:before {\n content: \"\\e903\";\n}\n.icon.paragraph-center:before {\n content: \"\\ea78\";\n}\n.icon.paragraph-right:before {\n content: \"\\ea79\";\n}\n.icon.paragraph-justify:before {\n content: \"\\ea7a\";\n}\n.icon.indent-increase:before {\n content: \"\\ea7b\";\n}\n.icon.indent-decrease:before {\n content: \"\\ea7c\";\n}\n.icon.share:before {\n content: \"\\ea7d\";\n}\n.icon.new-tab:before {\n content: \"\\ea7e\";\n}\n.icon.embed:before {\n content: \"\\ea7f\";\n}\n.icon.embed2:before {\n content: \"\\ea80\";\n}\n.icon.terminal:before {\n content: \"\\ea81\";\n}\n.icon.share2:before {\n content: \"\\ea82\";\n}\n.icon.mail:before {\n content: \"\\ea83\";\n}\n.icon.mail2:before {\n content: \"\\ea84\";\n}\n.icon.mail3:before {\n content: \"\\ea85\";\n}\n.icon.mail4:before {\n content: \"\\ea86\";\n}\n.icon.google2:before {\n content: \"\\ea87\";\n}\n.icon.google-plus:before {\n content: \"\\ea88\";\n}\n.icon.google-plus2:before {\n content: \"\\ea89\";\n}\n.icon.google-plus3:before {\n content: \"\\ea8a\";\n}\n.icon.google-drive:before {\n content: \"\\ea8b\";\n}\n.icon.facebook:before {\n content: \"\\e80d\";\n}\n.icon.facebook2:before {\n content: \"\\e80e\";\n}\n.icon.facebook3:before {\n content: \"\\e80f\";\n}\n.icon.ello:before {\n content: \"\\ea8c\";\n}\n.icon.instagram:before {\n content: \"\\ea8d\";\n}\n.icon.twitter:before {\n content: \"\\e810\";\n}\n.icon.twitter2:before {\n content: \"\\e811\";\n}\n.icon.twitter3:before {\n content: \"\\e812\";\n}\n.icon.feed2:before {\n content: \"\\ea8e\";\n}\n.icon.feed3:before {\n content: \"\\ea8f\";\n}\n.icon.feed4:before {\n content: \"\\ea90\";\n}\n.icon.youtube:before {\n content: \"\\ea91\";\n}\n.icon.youtube2:before {\n content: \"\\ea92\";\n}\n.icon.youtube3:before {\n content: \"\\ea93\";\n}\n.icon.youtube4:before {\n content: \"\\ea94\";\n}\n.icon.twitch:before {\n content: \"\\ea95\";\n}\n.icon.vimeo:before {\n content: \"\\ea96\";\n}\n.icon.vimeo2:before {\n content: \"\\ea97\";\n}\n.icon.vimeo3:before {\n content: \"\\ea98\";\n}\n.icon.lanyrd:before {\n content: \"\\ea99\";\n}\n.icon.flickr:before {\n content: \"\\ea9a\";\n}\n.icon.flickr2:before {\n content: \"\\ea9b\";\n}\n.icon.flickr3:before {\n content: \"\\ea9c\";\n}\n.icon.flickr4:before {\n content: \"\\ea9d\";\n}\n.icon.picassa:before {\n content: \"\\ea9e\";\n}\n.icon.picassa2:before {\n content: \"\\ea9f\";\n}\n.icon.dribbble:before {\n content: \"\\eaa0\";\n}\n.icon.dribbble2:before {\n content: \"\\eaa1\";\n}\n.icon.dribbble3:before {\n content: \"\\eaa2\";\n}\n.icon.forrst:before {\n content: \"\\eaa3\";\n}\n.icon.forrst2:before {\n content: \"\\eaa4\";\n}\n.icon.deviantart:before {\n content: \"\\eaa5\";\n}\n.icon.deviantart2:before {\n content: \"\\eaa6\";\n}\n.icon.steam:before {\n content: \"\\eaa7\";\n}\n.icon.steam2:before {\n content: \"\\eaa8\";\n}\n.icon.dropbox:before {\n content: \"\\eaa9\";\n}\n.icon.onedrive:before {\n content: \"\\eaaa\";\n}\n.icon.github:before {\n content: \"\\e813\";\n}\n.icon.github2:before {\n content: \"\\e814\";\n}\n.icon.github3:before {\n content: \"\\e815\";\n}\n.icon.github4:before {\n content: \"\\e816\";\n}\n.icon.github5:before {\n content: \"\\eaab\";\n}\n.icon.wordpress:before {\n content: \"\\eaac\";\n}\n.icon.wordpress2:before {\n content: \"\\eaad\";\n}\n.icon.joomla:before {\n content: \"\\eaae\";\n}\n.icon.blogger:before {\n content: \"\\eaaf\";\n}\n.icon.blogger2:before {\n content: \"\\eab0\";\n}\n.icon.tumblr:before {\n content: \"\\eab1\";\n}\n.icon.tumblr2:before {\n content: \"\\eab2\";\n}\n.icon.yahoo:before {\n content: \"\\eab3\";\n}\n.icon.tux:before {\n content: \"\\eab4\";\n}\n.icon.apple:before {\n content: \"\\eab5\";\n}\n.icon.finder:before {\n content: \"\\eab6\";\n}\n.icon.android:before {\n content: \"\\eab7\";\n}\n.icon.windows:before {\n content: \"\\eab8\";\n}\n.icon.windows8:before {\n content: \"\\eab9\";\n}\n.icon.soundcloud:before {\n content: \"\\eaba\";\n}\n.icon.soundcloud2:before {\n content: \"\\eabb\";\n}\n.icon.skype:before {\n content: \"\\eabc\";\n}\n.icon.reddit:before {\n content: \"\\eabd\";\n}\n.icon.linkedin:before {\n content: \"\\e817\";\n}\n.icon.linkedin2:before {\n content: \"\\e818\";\n}\n.icon.lastfm:before {\n content: \"\\eabe\";\n}\n.icon.lastfm2:before {\n content: \"\\eabf\";\n}\n.icon.delicious:before {\n content: \"\\eac0\";\n}\n.icon.stumbleupon:before {\n content: \"\\eac1\";\n}\n.icon.stumbleupon2:before {\n content: \"\\eac2\";\n}\n.icon.stackoverflow:before {\n content: \"\\e819\";\n}\n.icon.pinterest:before {\n content: \"\\eac3\";\n}\n.icon.pinterest2:before {\n content: \"\\eac4\";\n}\n.icon.xing:before {\n content: \"\\eac5\";\n}\n.icon.xing2:before {\n content: \"\\eac6\";\n}\n.icon.flattr:before {\n content: \"\\eac7\";\n}\n.icon.foursquare:before {\n content: \"\\eac8\";\n}\n.icon.paypal:before {\n content: \"\\eac9\";\n}\n.icon.paypal2:before {\n content: \"\\eaca\";\n}\n.icon.paypal3:before {\n content: \"\\eacb\";\n}\n.icon.yelp:before {\n content: \"\\eacc\";\n}\n.icon.file-pdf:before {\n content: \"\\eacd\";\n}\n.icon.file-openoffice:before {\n content: \"\\eace\";\n}\n.icon.file-word:before {\n content: \"\\eacf\";\n}\n.icon.file-excel:before {\n content: \"\\ead0\";\n}\n.icon.libreoffice:before {\n content: \"\\ead1\";\n}\n.icon.html5:before {\n content: \"\\ead2\";\n}\n.icon.html52:before {\n content: \"\\ead3\";\n}\n.icon.css3:before {\n content: \"\\ead4\";\n}\n.icon.git:before {\n content: \"\\ead5\";\n}\n.icon.svg:before {\n content: \"\\ead6\";\n}\n.icon.codepen:before {\n content: \"\\ead7\";\n}\n.icon.chrome:before {\n content: \"\\ead8\";\n}\n.icon.firefox:before {\n content: \"\\ead9\";\n}\n.icon.IE:before {\n content: \"\\eada\";\n}\n.icon.opera:before {\n content: \"\\eadb\";\n}\n.icon.safari:before {\n content: \"\\eadc\";\n}\n.icon.IcoMoon:before {\n content: \"\\eadd\";\n}","/*\n\n\tInfluxData Docs Theme File\n\n\t\"Alternate Theme\" (Light)\n*/\n\n//\n// Import Tools\n// --------------------------------------------------\n\n@import \"influx-palette.less\";\n@import \"variables.less\";\n@import \"icon-font.less\";\n\n//\n// Import Theme File\n// --------------------------------------------------\n@import \"theme-light.less\";\n#theme-switch-light { display: none; }\n\n//\n// Import UI Element styles\n// --------------------------------------------------\n@import \"normalize-3.0.2.less\";\n@import \"syntax.less\";\n@import \"layout.less\";\n@import \"flex.less\";\n@import \"svgs.less\";\n\n//\n// Import Product Specific Themes\n// --------------------------------------------------\n@import \"theme-telegraf.less\";\n@import \"theme-chronograf.less\";\n@import \"theme-kapacitor.less\";\n@import \"theme-enterprise_kapacitor.less\";\n@import \"theme-flux.less\";\n",".klavika-font{font-family:Klavika-Light,'Helvetica Neue',Helvetica,Helvetica,Arial,Tahoma,Verdana,sans-serif;font-weight:200}@font-face{font-family:icomoon;src:url(../fonts/icomoon.eot?c3omf0);src:url(../fonts/icomoon.eot?c3omf0#iefix) format('embedded-opentype'),url(../fonts/icomoon.woff2?c3omf0) format('woff2'),url(../fonts/icomoon.ttf?c3omf0) format('truetype'),url(../fonts/icomoon.woff?c3omf0) format('woff'),url(../fonts/icomoon.svg?c3omf0#icomoon) format('svg');font-weight:400;font-style:normal}.icon{font-family:icomoon;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon.sun2:before{content:\"\\eae2\"}.icon.moon:before{content:\"\\eae3\"}.icon.logotype:before{content:\"\\e800\"}.icon.logo:before{content:\"\\e801\"}.icon.arrow-down:before{content:\"\\e802\"}.icon.arrow-up:before{content:\"\\e803\"}.icon.arrow-left:before{content:\"\\e804\"}.icon.arrow-right:before{content:\"\\e805\"}.icon.health:before{content:\"\\e806\"}.icon.lightning:before{content:\"\\e807\"}.icon.matrix:before{content:\"\\e808\"}.icon.cluster:before{content:\"\\e809\"}.icon.data:before{content:\"\\e80a\"}.icon.google:before{content:\"\\e81a\"}.icon.eyeball:before{content:\"\\e901\"}.icon.infinite:before{content:\"\\e902\"}.icon.dashboard:before{content:\"\\eade\"}.icon.analytics:before{content:\"\\eadf\"}.icon.cloud-stack:before{content:\"\\eae0\"}.icon.iot:before{content:\"\\eae1\"}.icon.home:before{content:\"\\e904\"}.icon.home2:before{content:\"\\e905\"}.icon.home3:before{content:\"\\e906\"}.icon.office:before{content:\"\\e907\"}.icon.newspaper:before{content:\"\\e908\"}.icon.pencil:before{content:\"\\e909\"}.icon.pencil2:before{content:\"\\e90a\"}.icon.quill:before{content:\"\\e90b\"}.icon.pen:before{content:\"\\e90c\"}.icon.blog:before{content:\"\\e90d\"}.icon.eyedropper:before{content:\"\\e90e\"}.icon.droplet:before{content:\"\\e90f\"}.icon.paint-format:before{content:\"\\e910\"}.icon.image:before{content:\"\\e911\"}.icon.images:before{content:\"\\e912\"}.icon.camera:before{content:\"\\e913\"}.icon.headphones:before{content:\"\\e914\"}.icon.music:before{content:\"\\e915\"}.icon.play:before{content:\"\\e916\"}.icon.film:before{content:\"\\e917\"}.icon.video-camera:before{content:\"\\e918\"}.icon.dice:before{content:\"\\e919\"}.icon.pacman:before{content:\"\\e91a\"}.icon.spades:before{content:\"\\e91b\"}.icon.clubs:before{content:\"\\e91c\"}.icon.diamonds:before{content:\"\\e91d\"}.icon.bullhorn:before{content:\"\\e91e\"}.icon.connection:before{content:\"\\e91f\"}.icon.podcast:before{content:\"\\e920\"}.icon.feed:before{content:\"\\e921\"}.icon.mic:before{content:\"\\e922\"}.icon.book:before{content:\"\\e923\"}.icon.books:before{content:\"\\e924\"}.icon.library:before{content:\"\\e925\"}.icon.file-text:before{content:\"\\e926\"}.icon.profile:before{content:\"\\e927\"}.icon.file-empty:before{content:\"\\e928\"}.icon.files-empty:before{content:\"\\e929\"}.icon.file-text2:before{content:\"\\e92a\"}.icon.file-picture:before{content:\"\\e92b\"}.icon.file-music:before{content:\"\\e92c\"}.icon.file-play:before{content:\"\\e92d\"}.icon.file-video:before{content:\"\\e92e\"}.icon.file-zip:before{content:\"\\e92f\"}.icon.copy:before{content:\"\\e930\"}.icon.paste:before{content:\"\\e931\"}.icon.stack:before{content:\"\\e932\"}.icon.folder:before{content:\"\\e933\"}.icon.folder-open:before{content:\"\\e934\"}.icon.folder-plus:before{content:\"\\e935\"}.icon.folder-minus:before{content:\"\\e936\"}.icon.folder-download:before{content:\"\\e937\"}.icon.folder-upload:before{content:\"\\e938\"}.icon.price-tag:before{content:\"\\e939\"}.icon.price-tags:before{content:\"\\e93a\"}.icon.barcode:before{content:\"\\e93b\"}.icon.qrcode:before{content:\"\\e93c\"}.icon.ticket:before{content:\"\\e93d\"}.icon.cart:before{content:\"\\e93e\"}.icon.coin-dollar:before{content:\"\\e93f\"}.icon.coin-euro:before{content:\"\\e940\"}.icon.coin-pound:before{content:\"\\e941\"}.icon.coin-yen:before{content:\"\\e942\"}.icon.credit-card:before{content:\"\\e943\"}.icon.calculator:before{content:\"\\e944\"}.icon.lifebuoy:before{content:\"\\e945\"}.icon.phone:before{content:\"\\e946\"}.icon.phone-hang-up:before{content:\"\\e947\"}.icon.address-book:before{content:\"\\e948\"}.icon.envelop:before{content:\"\\e949\"}.icon.pushpin:before{content:\"\\e94a\"}.icon.location:before{content:\"\\e94b\"}.icon.location2:before{content:\"\\e94c\"}.icon.compass:before{content:\"\\e94d\"}.icon.compass2:before{content:\"\\e94e\"}.icon.map:before{content:\"\\e94f\"}.icon.map2:before{content:\"\\e950\"}.icon.history:before{content:\"\\e951\"}.icon.clock:before{content:\"\\e952\"}.icon.clock2:before{content:\"\\e953\"}.icon.alarm:before{content:\"\\e954\"}.icon.bell:before{content:\"\\e955\"}.icon.stopwatch:before{content:\"\\e956\"}.icon.calendar:before{content:\"\\e957\"}.icon.printer:before{content:\"\\e958\"}.icon.keyboard:before{content:\"\\e959\"}.icon.display:before{content:\"\\e95a\"}.icon.laptop:before{content:\"\\e95b\"}.icon.mobile:before{content:\"\\e95c\"}.icon.mobile2:before{content:\"\\e95d\"}.icon.tablet:before{content:\"\\e95e\"}.icon.tv:before{content:\"\\e95f\"}.icon.drawer:before{content:\"\\e960\"}.icon.drawer2:before{content:\"\\e961\"}.icon.box-add:before{content:\"\\e962\"}.icon.box-remove:before{content:\"\\e963\"}.icon.download:before{content:\"\\e964\"}.icon.upload:before{content:\"\\e965\"}.icon.floppy-disk:before{content:\"\\e966\"}.icon.drive:before{content:\"\\e967\"}.icon.database:before{content:\"\\e968\"}.icon.undo:before{content:\"\\e969\"}.icon.redo:before{content:\"\\e96a\"}.icon.undo2:before{content:\"\\e96b\"}.icon.redo2:before{content:\"\\e96c\"}.icon.forward:before{content:\"\\e96d\"}.icon.reply:before{content:\"\\e96e\"}.icon.bubble:before{content:\"\\e96f\"}.icon.bubbles:before{content:\"\\e970\"}.icon.bubbles2:before{content:\"\\e971\"}.icon.bubble2:before{content:\"\\e972\"}.icon.bubbles3:before{content:\"\\e973\"}.icon.bubbles4:before{content:\"\\e974\"}.icon.user:before{content:\"\\e975\"}.icon.users:before{content:\"\\e976\"}.icon.user-plus:before{content:\"\\e977\"}.icon.user-minus:before{content:\"\\e978\"}.icon.user-check:before{content:\"\\e979\"}.icon.user-tie:before{content:\"\\e97a\"}.icon.quotes-left:before{content:\"\\e97b\"}.icon.quotes-right:before{content:\"\\e97c\"}.icon.hour-glass:before{content:\"\\e97d\"}.icon.spinner:before{content:\"\\e97e\"}.icon.spinner2:before{content:\"\\e97f\"}.icon.spinner3:before{content:\"\\e980\"}.icon.spinner4:before{content:\"\\e981\"}.icon.spinner5:before{content:\"\\e982\"}.icon.spinner6:before{content:\"\\e983\"}.icon.spinner7:before{content:\"\\e984\"}.icon.spinner8:before{content:\"\\e985\"}.icon.spinner9:before{content:\"\\e986\"}.icon.spinner10:before{content:\"\\e987\"}.icon.spinner11:before{content:\"\\e988\"}.icon.binoculars:before{content:\"\\e989\"}.icon.search:before{content:\"\\e98a\"}.icon.zoom-in:before{content:\"\\e98b\"}.icon.zoom-out:before{content:\"\\e98c\"}.icon.enlarge:before{content:\"\\e98d\"}.icon.shrink:before{content:\"\\e98e\"}.icon.enlarge2:before{content:\"\\e98f\"}.icon.shrink2:before{content:\"\\e990\"}.icon.key:before{content:\"\\e991\"}.icon.key2:before{content:\"\\e992\"}.icon.lock:before{content:\"\\e993\"}.icon.unlocked:before{content:\"\\e994\"}.icon.wrench:before{content:\"\\e995\"}.icon.equalizer:before{content:\"\\e996\"}.icon.equalizer2:before{content:\"\\e997\"}.icon.cog:before{content:\"\\e900\"}.icon.cogs:before{content:\"\\e998\"}.icon.hammer:before{content:\"\\e999\"}.icon.magic-wand:before{content:\"\\e99a\"}.icon.aid-kit:before{content:\"\\e99b\"}.icon.bug:before{content:\"\\e99c\"}.icon.pie-chart:before{content:\"\\e99d\"}.icon.stats-dots:before{content:\"\\e99e\"}.icon.stats-bars:before{content:\"\\e99f\"}.icon.stats-bars2:before{content:\"\\e9a0\"}.icon.trophy:before{content:\"\\e9a1\"}.icon.gift:before{content:\"\\e9a2\"}.icon.glass:before{content:\"\\e9a3\"}.icon.glass2:before{content:\"\\e9a4\"}.icon.mug:before{content:\"\\e9a5\"}.icon.spoon-knife:before{content:\"\\e9a6\"}.icon.leaf:before{content:\"\\e9a7\"}.icon.rocket:before{content:\"\\e9a8\"}.icon.meter:before{content:\"\\e9a9\"}.icon.meter2:before{content:\"\\e9aa\"}.icon.hammer2:before{content:\"\\e9ab\"}.icon.fire:before{content:\"\\e9ac\"}.icon.lab:before{content:\"\\e9ad\"}.icon.magnet:before{content:\"\\e9ae\"}.icon.bin:before{content:\"\\e9af\"}.icon.bin2:before{content:\"\\e9b0\"}.icon.briefcase:before{content:\"\\e9b1\"}.icon.airplane:before{content:\"\\e9b2\"}.icon.truck:before{content:\"\\e9b3\"}.icon.road:before{content:\"\\e9b4\"}.icon.accessibility:before{content:\"\\e9b5\"}.icon.target:before{content:\"\\e9b6\"}.icon.shield:before{content:\"\\e9b7\"}.icon.power:before{content:\"\\e9b8\"}.icon.switch:before{content:\"\\e9b9\"}.icon.power-cord:before{content:\"\\e9ba\"}.icon.clipboard:before{content:\"\\e9bb\"}.icon.list-numbered:before{content:\"\\e9bc\"}.icon.list:before{content:\"\\e9bd\"}.icon.list2:before{content:\"\\e9be\"}.icon.tree:before{content:\"\\e9bf\"}.icon.menu:before{content:\"\\e9c0\"}.icon.menu2:before{content:\"\\e9c1\"}.icon.menu3:before{content:\"\\e9c2\"}.icon.menu4:before{content:\"\\e9c3\"}.icon.cloud:before{content:\"\\e9c4\"}.icon.cloud-download:before{content:\"\\e9c5\"}.icon.cloud-upload:before{content:\"\\e9c6\"}.icon.cloud-check:before{content:\"\\e9c7\"}.icon.download2:before{content:\"\\e9c8\"}.icon.upload2:before{content:\"\\e9c9\"}.icon.download3:before{content:\"\\e9ca\"}.icon.upload3:before{content:\"\\e9cb\"}.icon.sphere:before{content:\"\\e9cc\"}.icon.earth:before{content:\"\\e9cd\"}.icon.link:before{content:\"\\e9ce\"}.icon.flag:before{content:\"\\e9cf\"}.icon.attachment:before{content:\"\\e9d0\"}.icon.eye:before{content:\"\\e9d1\"}.icon.eye-plus:before{content:\"\\e9d2\"}.icon.eye-minus:before{content:\"\\e9d3\"}.icon.eye-blocked:before{content:\"\\e9d4\"}.icon.bookmark:before{content:\"\\e9d5\"}.icon.bookmarks:before{content:\"\\e9d6\"}.icon.sun:before{content:\"\\e9d7\"}.icon.contrast:before{content:\"\\e9d8\"}.icon.brightness-contrast:before{content:\"\\e9d9\"}.icon.star-empty:before{content:\"\\e9da\"}.icon.star-half:before{content:\"\\e9db\"}.icon.star-full:before{content:\"\\e9dc\"}.icon.heart:before{content:\"\\e9dd\"}.icon.heart-broken:before{content:\"\\e9de\"}.icon.man:before{content:\"\\e9df\"}.icon.woman:before{content:\"\\e9e0\"}.icon.man-woman:before{content:\"\\e9e1\"}.icon.happy:before{content:\"\\e9e2\"}.icon.happy2:before{content:\"\\e9e3\"}.icon.smile:before{content:\"\\e9e4\"}.icon.smile2:before{content:\"\\e9e5\"}.icon.tongue:before{content:\"\\e9e6\"}.icon.tongue2:before{content:\"\\e9e7\"}.icon.sad:before{content:\"\\e9e8\"}.icon.sad2:before{content:\"\\e9e9\"}.icon.wink:before{content:\"\\e9ea\"}.icon.wink2:before{content:\"\\e9eb\"}.icon.grin:before{content:\"\\e9ec\"}.icon.grin2:before{content:\"\\e9ed\"}.icon.cool:before{content:\"\\e9ee\"}.icon.cool2:before{content:\"\\e9ef\"}.icon.angry:before{content:\"\\e9f0\"}.icon.angry2:before{content:\"\\e9f1\"}.icon.evil:before{content:\"\\e9f2\"}.icon.evil2:before{content:\"\\e9f3\"}.icon.shocked:before{content:\"\\e9f4\"}.icon.shocked2:before{content:\"\\e9f5\"}.icon.baffled:before{content:\"\\e9f6\"}.icon.baffled2:before{content:\"\\e9f7\"}.icon.confused:before{content:\"\\e9f8\"}.icon.confused2:before{content:\"\\e9f9\"}.icon.neutral:before{content:\"\\e9fa\"}.icon.neutral2:before{content:\"\\e9fb\"}.icon.hipster:before{content:\"\\e9fc\"}.icon.hipster2:before{content:\"\\e9fd\"}.icon.wondering:before{content:\"\\e9fe\"}.icon.wondering2:before{content:\"\\e9ff\"}.icon.sleepy:before{content:\"\\ea00\"}.icon.sleepy2:before{content:\"\\ea01\"}.icon.frustrated:before{content:\"\\ea02\"}.icon.frustrated2:before{content:\"\\ea03\"}.icon.crying:before{content:\"\\ea04\"}.icon.crying2:before{content:\"\\ea05\"}.icon.point-up:before{content:\"\\ea06\"}.icon.point-right:before{content:\"\\ea07\"}.icon.point-down:before{content:\"\\ea08\"}.icon.point-left:before{content:\"\\ea09\"}.icon.warning:before{content:\"\\ea0a\"}.icon.notification:before{content:\"\\ea0b\"}.icon.question:before{content:\"\\ea0c\"}.icon.plus:before{content:\"\\ea0d\"}.icon.minus:before{content:\"\\ea0e\"}.icon.info:before{content:\"\\ea0f\"}.icon.cancel-circle:before{content:\"\\ea10\"}.icon.blocked:before{content:\"\\ea11\"}.icon.cross:before{content:\"\\e80b\"}.icon.checkmark:before{content:\"\\e80c\"}.icon.checkmark2:before{content:\"\\ea12\"}.icon.spell-check:before{content:\"\\ea13\"}.icon.enter:before{content:\"\\ea14\"}.icon.exit:before{content:\"\\ea15\"}.icon.play2:before{content:\"\\ea16\"}.icon.pause:before{content:\"\\ea17\"}.icon.stop:before{content:\"\\ea18\"}.icon.previous:before{content:\"\\ea19\"}.icon.next:before{content:\"\\ea1a\"}.icon.backward:before{content:\"\\ea1b\"}.icon.forward2:before{content:\"\\ea1c\"}.icon.play3:before{content:\"\\ea1d\"}.icon.pause2:before{content:\"\\ea1e\"}.icon.stop2:before{content:\"\\ea1f\"}.icon.backward2:before{content:\"\\ea20\"}.icon.forward3:before{content:\"\\ea21\"}.icon.first:before{content:\"\\ea22\"}.icon.last:before{content:\"\\ea23\"}.icon.previous2:before{content:\"\\ea24\"}.icon.next2:before{content:\"\\ea25\"}.icon.eject:before{content:\"\\ea26\"}.icon.volume-high:before{content:\"\\ea27\"}.icon.volume-medium:before{content:\"\\ea28\"}.icon.volume-low:before{content:\"\\ea29\"}.icon.volume-mute:before{content:\"\\ea2a\"}.icon.volume-mute2:before{content:\"\\ea2b\"}.icon.volume-increase:before{content:\"\\ea2c\"}.icon.volume-decrease:before{content:\"\\ea2d\"}.icon.loop:before{content:\"\\ea2e\"}.icon.loop2:before{content:\"\\ea2f\"}.icon.infinite2:before{content:\"\\ea30\"}.icon.shuffle:before{content:\"\\ea31\"}.icon.arrow-up-left:before{content:\"\\ea32\"}.icon.arrow-up3:before{content:\"\\ea33\"}.icon.arrow-up-right:before{content:\"\\ea34\"}.icon.arrow-right3:before{content:\"\\ea35\"}.icon.arrow-down-right:before{content:\"\\ea36\"}.icon.arrow-down3:before{content:\"\\ea37\"}.icon.arrow-down-left:before{content:\"\\ea38\"}.icon.arrow-left3:before{content:\"\\ea39\"}.icon.arrow-up-left2:before{content:\"\\ea3a\"}.icon.arrow-up2:before{content:\"\\ea3b\"}.icon.arrow-up-right2:before{content:\"\\ea3c\"}.icon.arrow-right2:before{content:\"\\ea3d\"}.icon.arrow-down-right2:before{content:\"\\ea3e\"}.icon.arrow-down2:before{content:\"\\ea3f\"}.icon.arrow-down-left2:before{content:\"\\ea40\"}.icon.arrow-left2:before{content:\"\\ea41\"}.icon.circle-up:before{content:\"\\ea42\"}.icon.circle-right:before{content:\"\\ea43\"}.icon.circle-down:before{content:\"\\ea44\"}.icon.circle-left:before{content:\"\\ea45\"}.icon.tab:before{content:\"\\ea46\"}.icon.move-up:before{content:\"\\ea47\"}.icon.move-down:before{content:\"\\ea48\"}.icon.sort-alpha-asc:before{content:\"\\ea49\"}.icon.sort-alpha-desc:before{content:\"\\ea4a\"}.icon.sort-numeric-asc:before{content:\"\\ea4b\"}.icon.sort-numberic-desc:before{content:\"\\ea4c\"}.icon.sort-amount-asc:before{content:\"\\ea4d\"}.icon.sort-amount-desc:before{content:\"\\ea4e\"}.icon.command:before{content:\"\\ea4f\"}.icon.shift:before{content:\"\\ea50\"}.icon.ctrl:before{content:\"\\ea51\"}.icon.opt:before{content:\"\\ea52\"}.icon.checkbox-checked:before{content:\"\\ea53\"}.icon.checkbox-unchecked:before{content:\"\\ea54\"}.icon.radio-checked:before{content:\"\\ea55\"}.icon.radio-checked2:before{content:\"\\ea56\"}.icon.radio-unchecked:before{content:\"\\ea57\"}.icon.crop:before{content:\"\\ea58\"}.icon.make-group:before{content:\"\\ea59\"}.icon.ungroup:before{content:\"\\ea5a\"}.icon.scissors:before{content:\"\\ea5b\"}.icon.filter:before{content:\"\\ea5c\"}.icon.font:before{content:\"\\ea5d\"}.icon.ligature:before{content:\"\\ea5e\"}.icon.ligature2:before{content:\"\\ea5f\"}.icon.text-height:before{content:\"\\ea60\"}.icon.text-width:before{content:\"\\ea61\"}.icon.font-size:before{content:\"\\ea62\"}.icon.bold:before{content:\"\\ea63\"}.icon.underline:before{content:\"\\ea64\"}.icon.italic:before{content:\"\\ea65\"}.icon.strikethrough:before{content:\"\\ea66\"}.icon.omega:before{content:\"\\ea67\"}.icon.sigma:before{content:\"\\ea68\"}.icon.page-break:before{content:\"\\ea69\"}.icon.superscript:before{content:\"\\ea6a\"}.icon.subscript:before{content:\"\\ea6b\"}.icon.superscript2:before{content:\"\\ea6c\"}.icon.subscript2:before{content:\"\\ea6d\"}.icon.text-color:before{content:\"\\ea6e\"}.icon.pagebreak:before{content:\"\\ea6f\"}.icon.clear-formatting:before{content:\"\\ea70\"}.icon.table:before{content:\"\\ea71\"}.icon.table2:before{content:\"\\ea72\"}.icon.insert-template:before{content:\"\\ea73\"}.icon.pilcrow:before{content:\"\\ea74\"}.icon.ltr:before{content:\"\\ea75\"}.icon.rtl:before{content:\"\\ea76\"}.icon.section:before{content:\"\\ea77\"}.icon.paragraph-left:before{content:\"\\e903\"}.icon.paragraph-center:before{content:\"\\ea78\"}.icon.paragraph-right:before{content:\"\\ea79\"}.icon.paragraph-justify:before{content:\"\\ea7a\"}.icon.indent-increase:before{content:\"\\ea7b\"}.icon.indent-decrease:before{content:\"\\ea7c\"}.icon.share:before{content:\"\\ea7d\"}.icon.new-tab:before{content:\"\\ea7e\"}.icon.embed:before{content:\"\\ea7f\"}.icon.embed2:before{content:\"\\ea80\"}.icon.terminal:before{content:\"\\ea81\"}.icon.share2:before{content:\"\\ea82\"}.icon.mail:before{content:\"\\ea83\"}.icon.mail2:before{content:\"\\ea84\"}.icon.mail3:before{content:\"\\ea85\"}.icon.mail4:before{content:\"\\ea86\"}.icon.google2:before{content:\"\\ea87\"}.icon.google-plus:before{content:\"\\ea88\"}.icon.google-plus2:before{content:\"\\ea89\"}.icon.google-plus3:before{content:\"\\ea8a\"}.icon.google-drive:before{content:\"\\ea8b\"}.icon.facebook:before{content:\"\\e80d\"}.icon.facebook2:before{content:\"\\e80e\"}.icon.facebook3:before{content:\"\\e80f\"}.icon.ello:before{content:\"\\ea8c\"}.icon.instagram:before{content:\"\\ea8d\"}.icon.twitter:before{content:\"\\e810\"}.icon.twitter2:before{content:\"\\e811\"}.icon.twitter3:before{content:\"\\e812\"}.icon.feed2:before{content:\"\\ea8e\"}.icon.feed3:before{content:\"\\ea8f\"}.icon.feed4:before{content:\"\\ea90\"}.icon.youtube:before{content:\"\\ea91\"}.icon.youtube2:before{content:\"\\ea92\"}.icon.youtube3:before{content:\"\\ea93\"}.icon.youtube4:before{content:\"\\ea94\"}.icon.twitch:before{content:\"\\ea95\"}.icon.vimeo:before{content:\"\\ea96\"}.icon.vimeo2:before{content:\"\\ea97\"}.icon.vimeo3:before{content:\"\\ea98\"}.icon.lanyrd:before{content:\"\\ea99\"}.icon.flickr:before{content:\"\\ea9a\"}.icon.flickr2:before{content:\"\\ea9b\"}.icon.flickr3:before{content:\"\\ea9c\"}.icon.flickr4:before{content:\"\\ea9d\"}.icon.picassa:before{content:\"\\ea9e\"}.icon.picassa2:before{content:\"\\ea9f\"}.icon.dribbble:before{content:\"\\eaa0\"}.icon.dribbble2:before{content:\"\\eaa1\"}.icon.dribbble3:before{content:\"\\eaa2\"}.icon.forrst:before{content:\"\\eaa3\"}.icon.forrst2:before{content:\"\\eaa4\"}.icon.deviantart:before{content:\"\\eaa5\"}.icon.deviantart2:before{content:\"\\eaa6\"}.icon.steam:before{content:\"\\eaa7\"}.icon.steam2:before{content:\"\\eaa8\"}.icon.dropbox:before{content:\"\\eaa9\"}.icon.onedrive:before{content:\"\\eaaa\"}.icon.github:before{content:\"\\e813\"}.icon.github2:before{content:\"\\e814\"}.icon.github3:before{content:\"\\e815\"}.icon.github4:before{content:\"\\e816\"}.icon.github5:before{content:\"\\eaab\"}.icon.wordpress:before{content:\"\\eaac\"}.icon.wordpress2:before{content:\"\\eaad\"}.icon.joomla:before{content:\"\\eaae\"}.icon.blogger:before{content:\"\\eaaf\"}.icon.blogger2:before{content:\"\\eab0\"}.icon.tumblr:before{content:\"\\eab1\"}.icon.tumblr2:before{content:\"\\eab2\"}.icon.yahoo:before{content:\"\\eab3\"}.icon.tux:before{content:\"\\eab4\"}.icon.apple:before{content:\"\\eab5\"}.icon.finder:before{content:\"\\eab6\"}.icon.android:before{content:\"\\eab7\"}.icon.windows:before{content:\"\\eab8\"}.icon.windows8:before{content:\"\\eab9\"}.icon.soundcloud:before{content:\"\\eaba\"}.icon.soundcloud2:before{content:\"\\eabb\"}.icon.skype:before{content:\"\\eabc\"}.icon.reddit:before{content:\"\\eabd\"}.icon.linkedin:before{content:\"\\e817\"}.icon.linkedin2:before{content:\"\\e818\"}.icon.lastfm:before{content:\"\\eabe\"}.icon.lastfm2:before{content:\"\\eabf\"}.icon.delicious:before{content:\"\\eac0\"}.icon.stumbleupon:before{content:\"\\eac1\"}.icon.stumbleupon2:before{content:\"\\eac2\"}.icon.stackoverflow:before{content:\"\\e819\"}.icon.pinterest:before{content:\"\\eac3\"}.icon.pinterest2:before{content:\"\\eac4\"}.icon.xing:before{content:\"\\eac5\"}.icon.xing2:before{content:\"\\eac6\"}.icon.flattr:before{content:\"\\eac7\"}.icon.foursquare:before{content:\"\\eac8\"}.icon.paypal:before{content:\"\\eac9\"}.icon.paypal2:before{content:\"\\eaca\"}.icon.paypal3:before{content:\"\\eacb\"}.icon.yelp:before{content:\"\\eacc\"}.icon.file-pdf:before{content:\"\\eacd\"}.icon.file-openoffice:before{content:\"\\eace\"}.icon.file-word:before{content:\"\\eacf\"}.icon.file-excel:before{content:\"\\ead0\"}.icon.libreoffice:before{content:\"\\ead1\"}.icon.html5:before{content:\"\\ead2\"}.icon.html52:before{content:\"\\ead3\"}.icon.css3:before{content:\"\\ead4\"}.icon.git:before{content:\"\\ead5\"}.icon.svg:before{content:\"\\ead6\"}.icon.codepen:before{content:\"\\ead7\"}.icon.chrome:before{content:\"\\ead8\"}.icon.firefox:before{content:\"\\ead9\"}.icon.IE:before{content:\"\\eada\"}.icon.opera:before{content:\"\\eadb\"}.icon.safari:before{content:\"\\eadc\"}.icon.IcoMoon:before{content:\"\\eadd\"}#theme-switch-light{display:none}/*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0;font-family:Roboto,Helvetica,Arial,Tahoma,Verdana,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}code[class*=language-],pre[class*=language-]{direction:ltr;text-align:left;white-space:pre;white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-o-pre-wrap;word-spacing:normal;word-break:normal;word-wrap:normal;-moz-tab-size:1;-o-tab-size:1;tab-size:1;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow:none}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{overflow:auto}:not(pre)>code[class*=language-]{white-space:normal}.highlight{color:#7a65f2}.highlight .gh,.highlight .go,.highlight .na,.highlight .nt,.highlight .nv,.highlight .ow{color:#7a65f2}.highlight .c,.highlight .c1,.highlight .ch,.highlight .cm,.highlight .cpf,.highlight .cs,.highlight .w{color:#b1b6ff}.highlight .gi{background-color:#b1b6ff}.highlight .k,.highlight .kc,.highlight .kd,.highlight .kn,.highlight .kp,.highlight .kr,.highlight .nn{color:#4591ed}.highlight .bp,.highlight .cp,.highlight .dl,.highlight .gt,.highlight .gu,.highlight .kt,.highlight .nb,.highlight .nc,.highlight .no,.highlight .s1,.highlight .s2,.highlight .sa,.highlight .sb,.highlight .sc,.highlight .sd,.highlight .se,.highlight .sh,.highlight .sr,.highlight .sx{color:#0e9e75}.highlight .err,.highlight .fm,.highlight .gd,.highlight .gr,.highlight .nd,.highlight .ne,.highlight .nf,.highlight .nl,.highlight .si{color:#bf3d5e}.highlight .il,.highlight .m,.highlight .mb,.highlight .mf,.highlight .mh,.highlight .mi,.highlight .mo,.highlight .ni,.highlight .vc,.highlight .vg,.highlight .vi,.highlight .vm{color:#e24bbb}.highlight .gp,.highlight .o{color:#22adf6}.highlight .ss{color:#e90}.highlight .cs .gh,.highlight .gp,.highlight .gs,.highlight .gu,.highlight .k,.highlight .kc,.highlight .kd,.highlight .kn,.highlight .kp,.highlight .kr,.highlight .kt,.highlight .nc,.highlight .ne,.highlight .ni,.highlight .nn .nt,.highlight .ow,.highlight .se{font-weight:700}.highlight .c,.highlight .c1,.highlight .ch,.highlight .cm,.highlight .cpf,.highlight .cs,.highlight .ge,.highlight .sd,.highlight .w{font-style:italic}@font-face{font-family:Klavika-Light;src:url(../fonts/KlavikaLight-ItalicTF.otf);font-weight:200;font-style:italic}@font-face{font-family:Klavika-Bold;src:url(../fonts/KlavikaBoldBoldItalic.otf);font-weight:700;font-style:italic}html{overflow:auto}body,html{width:100%;height:100%;background-color:#fff;-webkit-overflow-scrolling:touch}body{color:#757888;line-height:1;overflow:auto}*{box-sizing:border-box}a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0;font-size:100%;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:'';content:none}table{border-collapse:collapse;border-spacing:0}.navbar{top:0;left:0;font-size:1rem;height:4rem;width:100%;background-color:#383846;z-index:150;position:relative}.navbar--hamburger,.navbar--logo,.navbar--product-dropdown,.navbar--search,.theme-switcher{position:absolute}.navbar--logo{left:1em;top:1.05em}.navbar--logo a{font-size:1.5rem;color:#f6f6f8;transition:color .25s ease}.navbar--logo a:hover{color:#fff}.navbar--logo .divider{border-left:1px solid #f6f6f8;margin:0 .8rem 0 .5rem;vertical-align:text-top;opacity:.35;line-height:1.15em}.navbar--logo .navbar--docs{font-size:1.3rem}.navbar--hamburger{width:4rem;height:4rem;right:0}.navbar--hamburger .navbar--hamburger-bar{width:1.2rem;height:2px;background-color:#f6f6f8;border-radius:1px;position:absolute;left:50%;transition:all .3s ease}.navbar--hamburger .navbar--hamburger-bar.top{top:40%;transform:translate(-50%,-50%)}.navbar--hamburger .navbar--hamburger-bar.middle{top:50%;transform:translate(-50%,-50%)}.navbar--hamburger .navbar--hamburger-bar.bottom{top:60%;transform:translate(-50%,-50%)}.navbar--hamburger:hover{cursor:pointer}.navbar--hamburger:hover .navbar--hamburger-bar{background-color:#fff}.navbar--hamburger.open .navbar--hamburger-bar.top{top:50%;transform:translate(-50%,-50%) rotate(45deg)}.navbar--hamburger.open .navbar--hamburger-bar.middle{opacity:0}.navbar--hamburger.open .navbar--hamburger-bar.bottom{top:50%;transform:translate(-50%,-50%) rotate(-45deg)}.navbar--product-menu{width:100%;position:absolute;top:.5em;height:auto;opacity:0;transition:opacity .25s ease;background:#4591ed;background:-moz-linear-gradient(top,#4591ed 0,#22adf6 100%);background:-webkit-linear-gradient(top,#4591ed 0,#22adf6 100%);background:linear-gradient(to bottom,#4591ed 0,#22adf6 100%)}.navbar--product-container{width:100%;height:auto;position:absolute;top:calc(4rem * .85);left:0;visibility:hidden;transition:all .25s ease;z-index:100}.navbar--product-container.open{visibility:visible}.navbar--product-container.open .navbar--product-menu{opacity:1}.navbar--product-divider{margin:.25em 0;height:2px;background-color:rgba(67,68,83,.1)}.navbar--product{font-size:19px}.navbar--product:active,.navbar--product:link,.navbar--product:visited{color:#fff;transition:background-color .25s ease,color .25s ease;background-color:transparent;padding:1.25rem 1rem;display:block;width:100%}.navbar--product:hover{background-color:rgba(56,56,70,.12);color:#fff}.navbar--product-dropdown{display:none;top:.5em;background-color:#4591ed;height:3rem;border-radius:3px;transition:background-color .25s ease,color .25s ease}.navbar--product-dropdown:hover{cursor:pointer;background-color:#22adf6}.navbar--product-dropdown .navbar--current-product,.navbar--product-dropdown .navbar--product-dropdown-caret{position:absolute;top:50%;transform:translateY(-50%);color:#fff}.navbar--product-dropdown .navbar--current-product{font-weight:700;left:1rem;font-size:19px;font-weight:400}.navbar--product-dropdown .navbar--product-dropdown-caret{right:1rem;font-size:.625em}.navbar--search{height:3rem;width:40%;right:4rem;top:.5em}.navbar--search>*{position:absolute!important;top:0;left:0;width:100%;height:100%}.navbar--search-field{position:absolute;top:0;left:0;width:100%;height:100%;border-radius:3px;border:2px solid #545667;color:#f6f6f8;background-color:#292933;padding:0 1rem;font-weight:400;font-size:19px;outline:0;transition:border-color .3s ease,color .3s ease}.navbar--search-field:focus{border-color:#00c9ff;color:#00c9ff}.algolia-autocomplete{width:100%}.algolia-autocomplete .aa-hint,.algolia-autocomplete .aa-input{width:100%}.algolia-autocomplete .aa-hint{color:red}.algolia-autocomplete .aa-dropdown-menu{margin:.5rem 0 0 0;width:100%;padding:.75rem;background-color:rgba(238,239,242,.7);border:0}.algolia-autocomplete .aa-dropdown-menu .algolia-docsearch-suggestion--highlight{color:#22adf6}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion{cursor:pointer;padding:0}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion{background-color:#fff;border-radius:3px;overflow:hidden}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion__secondary{border:none;margin-top:2px}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion:first-child .algolia-docsearch-suggestion__secondary{margin-top:0}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--category-header{border-radius:3px 3px 0 0;background-color:#fff;color:#8e91a1;padding:.75rem 1rem;font-weight:500}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--highlight{background-color:transparent}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--subcategory-column{border:none;background-color:#545667}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--content{background-color:#434453}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--title{margin-bottom:.25rem;display:inline-block;color:#eeeff2}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--text{color:#bec2cc}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .algolia-docsearch-suggestion--subcategory-column-text{font-size:.8rem;line-height:1.4em;color:#bec2cc}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor .algolia-docsearch-suggestion--content{background:#4591ed;background:-moz-linear-gradient(left,#4591ed 0,#00c9ff 100%);background:-webkit-linear-gradient(left,#4591ed 0,#00c9ff 100%);background:linear-gradient(to right,#4591ed 0,#00c9ff 100%)}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor .algolia-docsearch-suggestion--text,.algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor .algolia-docsearch-suggestion--title{color:#bef0ff}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight,.algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor .algolia-docsearch-suggestion--title .algolia-docsearch-suggestion--highlight{color:#fff!important}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion em{font-weight:700;font-style:normal}.algolia-autocomplete .algolia-docsearch-footer{border:none;padding:.75rem 0 0 0}.theme-switcher{display:none;width:4rem;height:4rem;right:0;border:0;outline:0;background-color:#383846;color:#f6f6f8}.theme-switcher .icon{transition:color .25s ease}.theme-switcher .sun2{font-size:1.5rem}.theme-switcher .moon{font-size:1.2rem}.theme-switcher:hover{color:#fff;cursor:pointer}@media (max-width:500px){.navbar--logo .logotype{display:none}.navbar--logo .logo{display:inline}}@media (min-width:500px){.navbar--logo .logotype{display:inline}.navbar--logo .logo{display:none}}@media (min-width:900px){.theme-switcher{display:block}.navbar--product-dropdown{display:block;left:18rem;width:17rem}.navbar--product-container{left:18rem;width:17rem;top:2.9em}.navbar--product-container.open .navbar--dropdown-dismiss{width:100vw;height:100vh;position:fixed;top:0;left:0;z-index:100}.navbar--product-container.open .navbar--dropdown-dismiss:hover{cursor:pointer}.navbar--product-menu{border-radius:0 0 3px 3px;overflow:hidden;z-index:110}.navbar--search{left:35.5rem;width:calc(100% - 18rem - .5rem - .5rem - 4rem - 17rem)}.navbar--hamburger{display:none}.navbar--product.external{font-size:.8rem}}@media (min-width:1200px){.navbar--product-dropdown{left:23rem;width:17.5rem}.navbar--product-container{left:23rem;width:17.5rem}.navbar--search{left:41rem;width:calc(100% - 23rem - .5rem - .5rem - 4rem - 17.5rem)}}@media (min-width:1900px){.navbar--product-dropdown{left:28rem;width:17.5rem}.navbar--product-container{left:28rem;width:17.5rem}.navbar--search{left:46rem;width:calc(100% - 28rem - .5rem - .5rem - 4rem - 17.5rem)}}.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu{right:0!important;left:auto!important;overflow:scroll!important;max-height:90vh!important}.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu:before{display:none}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--wrapper{padding:.2rem 0}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column{display:none}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--content{padding:.75rem;width:100%;float:none}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--content:before{display:none}.algolia-autocomplete .algolia-docsearch-footer{padding:0}@media (min-width:1330px){.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu{right:auto!important;left:0!important}}@media (max-width:768px){.algolia-docsearch-suggestion--subcategory-column{display:none!important}.algolia-docsearch-suggestion--wrapper{margin:.25em 0!important}}@media (max-width:570px){.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu{position:fixed!important;top:3.5em!important;left:0;min-width:100vw}}.sidebar--toggle{padding:1em;position:relative;z-index:100;height:3rem;width:100%;background-color:#434453;text-align:left;font-style:italic;color:#f6f6f8;font-weight:500;transition:background-color .25s ease,color .25s ease}.sidebar--toggle:hover{color:#fff;background-color:#545667;cursor:pointer}.sidebar--toggle:after,.sidebar--toggle:before{content:\"\";position:absolute;display:block;right:1em;top:1.45em;height:2px;width:15px;background:#999dab}.sidebar--toggle:before{transform:rotate(90deg);transition:all .2s}.sidebar--toggle.open:before{transform:rotate(180deg)}.sidebar{background-color:#f6f6f8;height:100%;overflow:hidden;transition:max-height .2s ease-out}.sidebar::-webkit-scrollbar{background-color:#f6f6f8;width:16px}.sidebar::-webkit-scrollbar-track{background-color:#f6f6f8}.sidebar::-webkit-scrollbar-thumb{border:4px solid #f6f6f8;background-color:#d4d7dd;border-radius:8px}.sidebar.open{max-height:4000px;transition:max-height .5s ease-in}.sidebar--section{border-top:2px solid #eeeff2;padding:2em 0}.sidebar--section:first-child{border:none}.sidebar--section-title{color:#4591ed;padding:0 2rem 1em 2rem;font-size:1.25em}.sidebar--section-title a:active,.sidebar--section-title a:link,.sidebar--section-title a:visited{color:#4591ed;font-weight:400}.sidebar--section-title a:hover{color:#00c9ff}.sidebar--section ul{padding-left:3rem}.sidebar--section ul li{position:relative;margin-bottom:.25rem}ul.sidebar--children{margin-left:-1.85rem;height:0;overflow:hidden}ul.sidebar--children.open{height:auto;overflow:visible;border-left:2px solid #eeeff2}ul.sidebar--children li:first-child{margin-top:.25rem}.sidebar--children-toggle{position:absolute;left:-2.25rem;top:.2rem;height:.9rem;width:.9rem;background:#bec2cc;border-radius:50%;transition:all .2s}.sidebar--children-toggle:before{content:\"+\";color:#fff;display:block;text-align:center}.sidebar--children-toggle.open:before{content:\"–\"}.sidebar--children-toggle:hover{background:#4591ed}.sidebar--children-toggle:hover:before{color:#fff}a.sidebar--page:active,a.sidebar--page:link,a.sidebar--page:visited{display:inline-block;color:#757888;font-weight:500;text-indent:-1rem;line-height:1.25}a.sidebar--page:hover{color:#00c9ff}@media (max-width:900px){.sidebar{height:auto;max-height:0}}@media (min-width:900px){.sidebar--toggle{display:none}.sidebar,.sidebar.open{position:fixed;z-index:100;width:18rem;transform:none;transition:none;top:4rem;max-height:100%;overflow:auto;padding-bottom:4rem}}@media (min-width:1200px){.sidebar,.sidebar.open{width:23rem}}@media (min-width:1900px){.sidebar,.sidebar.open{width:28rem}.sidebar--support-ad{padding:2rem 1.5rem}.sidebar--support-ad--desc{font-size:1.2em}}#sidebar--ad{margin:-.75rem 1rem;border-radius:3px}#sidebar--ad.cloud{background:linear-gradient(45deg,#9394ff,#22adf6);padding:1.5rem 1.5rem;text-align:center}#sidebar--ad.cloud .text{margin:0 0 1rem 0;color:#fff;line-height:1.3em;font-size:1.1em;font-weight:500}#sidebar--ad.cloud .cta{margin-left:0;margin-right:0;border-radius:3px;color:#fff;border:2px solid rgba(255,255,255,.4);background-color:transparent;transition:background-color .25s ease,border-color .25s ease;padding:.75em 1.5em;font-weight:700;display:inline-block;font-size:1.125em}#sidebar--ad.cloud .cta:hover{background-color:rgba(255,255,255,.15);border-color:rgba(255,255,255,.6)}#sidebar--ad.enterprise{background:linear-gradient(to right,#4ed8a0,#22adf6);padding:1.5rem 1.5rem;text-align:center}#sidebar--ad.enterprise .text{margin:0 0 1rem 0;color:#fff;line-height:1.3em;font-weight:500}#sidebar--ad.enterprise .cta{margin-left:0;margin-right:0;border-radius:3px;color:#fff;border:2px solid rgba(255,255,255,.4);background-color:transparent;transition:background-color .25s ease,border-color .25s ease;padding:.75em 1.5em;font-weight:700;display:inline-block;font-size:1.125em}#sidebar--ad.enterprise .cta:hover{background-color:rgba(255,255,255,.15);border-color:rgba(255,255,255,.6)}#sidebar--ad.influx-days{padding:1rem;background:url(/promos/assets/influx-days-bg.jpg);background-repeat:no-repeat;background-size:cover;color:#fff;font-weight:700}#sidebar--ad.influx-days img{margin:.4rem 0 .8rem}#sidebar--ad.influx-days .text{font-size:1.75rem;margin-bottom:.5rem}#sidebar--ad.influx-days .details{font-size:.9rem;line-height:1.1rem}#sidebar--ad.influx-days .cta{display:inline-block;margin-top:.85rem;color:#fff;background:#5cbb47;font-size:1.15rem;padding:.45rem 1.75rem;border-radius:3px}::selection{background-color:#757888;color:#fff}::-moz-selection{background-color:#757888;color:#fff}a{text-decoration:none;transition:color .2s ease}a:hover{cursor:pointer}.article{background-color:#fff;overflow:auto;width:100%}.article::-webkit-scrollbar{background-color:#fff;width:16px}.article::-webkit-scrollbar-track{background-color:#fff}.article::-webkit-scrollbar-thumb{border:4px solid #fff;background-color:#d4d7dd;border-radius:8px}.article-section{display:block;width:100%;text-align:center;padding:2rem}.article-section.article-heading{background-color:#fafafc;background-position:center center;background-size:cover!important;background-repeat:no-repeat}.article-section.article-heading h1{margin-bottom:0}.article-section.article-footer{background:#fafafc;background:-moz-linear-gradient(top,#fafafc 0,#fff 100%);background:-webkit-linear-gradient(top,#fafafc 0,#fff 100%);background:linear-gradient(to bottom,#fafafc 0,#fff 100%)}.article-content{text-align:left;width:100%;max-width:760px;color:#757888}.article-content a:active,.article-content a:link,.article-content a:visited{font-weight:700;color:#4591ed}.article-content a:hover{color:#00c9ff;cursor:pointer}.article-content a.top{font-size:6px;padding:.25rem .25rem .35rem;border-radius:3px;transition:all .2s}.article-content a.top:hover{color:#fff!important;background:#00c9ff}.article-content a.off-page:link:after{content:'\\ea43';font-family:icomoon;font-size:.75em;font-weight:400;vertical-align:bottom;display:inline;margin-left:.5em;opacity:.25;transition:color .2s ease;color:#757888}.article-content li a code,.article-content p a code{position:relative}.article-content li a code:after,.article-content p a code:after{content:\"\";position:absolute;top:-1px;right:-1px;width:0;height:0;border-style:solid;border-width:0 .5em .5em 0;border-color:transparent #7a65f2 transparent transparent;opacity:.5;transition:all .2s}.article-content li a code:hover:after,.article-content p a code:hover:after{opacity:1;border-color:transparent #00c9ff transparent transparent}.article-content li a.btn,.article-content p a.btn{display:inline-block;color:#fff;font-size:.95rem;padding:.5em 1em;margin:1em 0 1.5em}.article-content li a.btn.download:before,.article-content p a.btn.download:before{content:'\\e964';font-family:icomoon;font-size:1.15em;font-weight:400;vertical-align:bottom;display:inline;margin-right:.5em}.article-content>*{text-decoration:none}.article-content .note,.article-content .warn,.article-content blockquote,.article-content dt,.article-content h1,.article-content h2,.article-content h3,.article-content h4,.article-content li,.article-content ol,.article-content p,.article-content pre,.article-content ul{display:block;margin-bottom:1em;line-height:1.45em}.article-content table{margin:1em 0 1em;overflow-x:auto;background-color:#fff}.article-content h1,.article-content h2,.article-content h3,.article-content h4,.article-content h5,.article-content h6{width:100%;color:#757888}.article-content h1 a.offset-anchor,.article-content h2 a.offset-anchor,.article-content h3 a.offset-anchor,.article-content h4 a.offset-anchor,.article-content h5 a.offset-anchor,.article-content h6 a.offset-anchor{display:block;position:relative;top:-120px;visibility:hidden}.article-content h1 a:active,.article-content h1 a:hover,.article-content h1 a:link,.article-content h1 a:visited,.article-content h2 a:active,.article-content h2 a:hover,.article-content h2 a:link,.article-content h2 a:visited,.article-content h3 a:active,.article-content h3 a:hover,.article-content h3 a:link,.article-content h3 a:visited,.article-content h4 a:active,.article-content h4 a:hover,.article-content h4 a:link,.article-content h4 a:visited,.article-content h5 a:active,.article-content h5 a:hover,.article-content h5 a:link,.article-content h5 a:visited,.article-content h6 a:active,.article-content h6 a:hover,.article-content h6 a:link,.article-content h6 a:visited{text-decoration:none;font-weight:inherit;color:#757888!important}.article-content h1:first-child,.article-content h2:first-child,.article-content h3:first-child,.article-content h4:first-child,.article-content h5:first-child,.article-content h6:first-child{margin-top:0}.article-content h1{font-size:2.2em;font-family:Klavika-Light,'Helvetica Neue',Helvetica,Helvetica,Arial,Tahoma,Verdana,sans-serif;font-weight:200;line-height:1.2em}.article-content h2{font-size:1.9em;font-weight:600;margin:1.5em 0 .5em}.article-content h3{font-size:1.5em;font-weight:700;margin:1em 0 .5em}.article-content h4{font-size:1.3em;font-weight:400;font-style:italic;margin:1.25em 0 .5em}.article-content h5{line-height:1.6em}.article-content h6{font-size:.95em;font-style:italic;line-height:1.6em}.article-content.section-landing h2 a.off-page:link:hover{color:#4591ed!important}.article-content p{font-size:1em}.article-content ol,.article-content ul{font-size:1em;padding-left:1.125em}.article-content ol li,.article-content ul li{display:list-item;list-style-position:outside;padding-left:.5em;margin-bottom:.25em}.article-content ol p,.article-content ul p{margin-left:0}.article-content ul>li{list-style-type:disc!important}.article-content ol li,.article-content ul ol li{list-style-type:decimal}.article-content ol ol li{list-style-type:lower-alpha}.article-content ol ol ol li{list-style-type:decimal}.article-content ul ul ul li{list-style-type:square}.article-content li:last-child{margin-bottom:0}.article-content ol ol,.article-content ol ul,.article-content ul ol,.article-content ul ul{width:100%;margin-left:0;margin-bottom:0;margin-top:.25em}.article-content hr{width:100%;height:2px;margin-top:.25em;margin-bottom:1em;border:none;display:block;background-color:#eeeff2}.article-content img{max-width:100%;height:auto;border-radius:3px}.article-content td,.article-content th{border:1px solid #eeeff2;font-size:.875em;line-height:1.2em;padding:.75em 1.5em}.article-content tr:nth-child(even){background-color:#f6f6f8}.article-content thead tr{background-color:#fafafc!important}.article-content thead th{padding:1.25em 1.5em}.article-content .note,.article-content .warn,.article-content blockquote,.article-content dt{font-size:.9em;padding:1em 1.5em;border-radius:3px;border-style:solid;border-left-width:6px}.article-content .note h4,.article-content .note ol,.article-content .note p,.article-content .note pre,.article-content .note ul,.article-content .warn h4,.article-content .warn ol,.article-content .warn p,.article-content .warn pre,.article-content .warn ul,.article-content blockquote h4,.article-content blockquote ol,.article-content blockquote p,.article-content blockquote pre,.article-content blockquote ul,.article-content dt h4,.article-content dt ol,.article-content dt p,.article-content dt pre,.article-content dt ul{width:100%;margin-left:0}.article-content .note>:last-child,.article-content .warn>:last-child,.article-content blockquote>:last-child,.article-content dt>:last-child{margin-bottom:0}.article-content .note .tooltip,.article-content .warn .tooltip,.article-content blockquote .tooltip,.article-content dt .tooltip{color:#22adf6}.article-content .note,.article-content blockquote{font-style:italic;color:#676978;border-color:#c6ffd0;background-color:#f2fff4}.article-content .note code,.article-content blockquote code{color:#2b7098;background:#c6ffd0;border:1px solid #c6ffd0}.article-content .note pre,.article-content blockquote pre{background:#c6ffd0;border-color:#c6ffd0}.article-content .note pre code,.article-content blockquote pre code{border:none}.article-content .warn,.article-content dt{color:#676978;border-color:#ffdccf;background-color:#fff7f4}.article-content .warn code,.article-content dt code{color:#2b7098;background:#ffdccf;border:1px solid #ffdccf}.article-content .warn pre,.article-content dt pre{background:#ffdccf;border-color:#ffdccf}.article-content .warn pre code,.article-content dt pre code{border:none}.article-content code{font-family:Consolas,\"Lucida Console\",Monaco,monospace;-moz-tab-size:1;-o-tab-size:1;tab-size:1;direction:ltr;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;font-size:.8em!important;font-style:normal!important;display:inline;border-radius:3px;border-width:1px;border-color:#f2f4ff;border-style:solid;padding:.1em .5em;-webkit-font-smoothing:subpixel-antialiased!important;-moz-osx-font-smoothing:auto!important;font-weight:400!important;color:#7a65f2;background-color:#f2f4ff}.article-content pre{display:block;padding:.75em 1em;overflow:auto;border-radius:3px;border-style:solid;border-width:1px 1px 1px 6px;background-color:#f2f4ff;border-color:#f2f4ff;z-index:99;line-height:1.1em!important}.article-content pre code{white-space:pre;word-spacing:normal;word-break:normal;border:none;padding:0;border-radius:0;background-color:transparent}.article-content pre::-webkit-scrollbar{background-color:#f2f4ff;width:16px}.article-content pre::-webkit-scrollbar-track{background-color:#f2f4ff}.article-content pre::-webkit-scrollbar-thumb{border:4px solid #f2f4ff;background-color:#c9d0ff;border-radius:calc(16px / 2)}.page-nav-btns{display:flex;position:relative;justify-content:space-between;margin:3em 0 2em}.page-nav-btns a{display:flex;align-items:center;color:#fff!important;font-size:.95rem;padding:.75rem 1rem;margin:0 .15rem}.page-nav-btns a.prev{position:absolute;left:0}.page-nav-btns a.prev:before{content:'\\e804';font-family:icomoon;font-size:.85rem;font-weight:400;vertical-align:middle;display:inline;margin-right:.85rem}.page-nav-btns a.next{position:absolute;right:0}.page-nav-btns a.next:after{content:'\\e805';font-family:icomoon;font-size:.85rem;font-weight:400;vertical-align:middle;display:inline;margin-left:.85rem}.truncate{position:relative;margin-bottom:3.5rem}.truncate .truncate-bottom{position:absolute;bottom:-30px;width:100%;z-index:100%;height:auto}.truncate a.truncate-toggle{display:block;width:100px;margin:0 auto;color:#757888;background:#fff;padding:.45rem;text-align:center;font-size:.75rem;text-transform:uppercase;border-radius:3px;transition:color .2s}.truncate a.truncate-toggle:before{content:\"Show Less\"}.truncate a.truncate-toggle:hover{color:#4591ed}.truncate.closed{min-height:200px;max-height:25vh;overflow:hidden}.truncate.closed .truncate-bottom{bottom:0;background-image:linear-gradient(to bottom,rgba(255,255,255,0),#fff);height:100px}.truncate.closed a.truncate-toggle{margin-top:75px}.truncate.closed a.truncate-toggle:before{content:\"Show More\"}.tooltip{position:relative;display:inline-block;z-index:10;font-weight:900;color:#4ed8a0}.tooltip-container{position:absolute;top:0;left:50%;transform:translateX(-50%);overflow:visible;visibility:hidden}.tooltip-text{font-weight:600;line-height:2em;height:2em;position:absolute;border-radius:3px;padding:0 .75em;font-size:.9rem;left:50%;transform:translate(-50%,-1.875rem);transition:all .2s ease;white-space:nowrap;opacity:0;font-style:normal!important;color:#f6f6f8;background-color:#383846}.tooltip-text:after{content:'';position:absolute;left:50%;bottom:-14px;transform:translateX(-50%);border-top:8px solid #383846;border-right:8px solid transparent;border-bottom:8px solid transparent;border-left:8px solid transparent}.tooltip:hover .tooltip-container{visibility:visible}.tooltip:hover .tooltip-text{opacity:1;transform:translate(-50%,-2rem)}.old-version{width:100%;display:inline-block;border-radius:3px;font-size:1em;line-height:1.25em;padding:1.5em 1.5em 1.5em 4em;color:#f95f53;background-color:#fff7f4;position:relative;margin-bottom:1em}.old-version:after{content:\"\\ea0a\";font-family:icomoon;position:absolute;top:50%;left:2em;transform:translate(-50%,-50%) scale(1.5,1.5);font-size:1em}.section-landing h2.no-paragraph{margin:0 0 1rem;border:none}.view-in-chronograf{display:flex;justify-content:flex-end;position:relative;background-color:#f2f4ff;margin-top:-1.1rem;margin-bottom:1rem;padding:.15rem;font-size:.8rem;border-radius:0 0 3px 3px;align-items:center}.view-in-chronograf .chronograf-btn{display:inline-block;padding:.45rem .6rem;color:#fff!important;background:linear-gradient(to left,#9394ff,#22adf6);border-radius:calc(3px / 2);transition:all .5s ease}.view-in-chronograf .chronograf-btn:after{content:'\\e801';margin-left:.4rem;font-family:icomoon}.view-in-chronograf .chronograf-btn:hover{color:#fff!important;opacity:1}.view-in-chronograf .settings{opacity:.25;color:#757888!important;margin-right:.75em;transition:opacity .2s ease}.view-in-chronograf .settings:hover{opacity:1}.modal-overlay{display:none;position:fixed;z-index:1000;left:0;top:0;width:100%;height:100%;overflow:auto;opacity:.75;background:linear-gradient(#9394ff,#4591ed)}.modal-content{display:none;background:#fff;padding:2rem 2rem 1.5rem;border-radius:3px;position:fixed;top:10vh;left:50%;transform:translateX(-50%);z-index:1001;width:90vw;max-width:38rem;transition:top .4s ease}.modal-content.open{top:40vh}.modal-content input{width:100%;min-width:10rem;border-radius:3px;border:2px solid #f2f4ff;background-color:#f2f4ff;padding:.5rem;font-weight:400;font-size:1rem;outline:0;transition:border-color .3s ease,color .3s ease}.modal-content input:focus{border-color:#00c9ff}.modal-content button{border:none;outline:0}.modal-content button:focus{background:#4591ed!important}.modal-content label{display:block;margin-bottom:.4rem;font-weight:600}#default-chronograf-url{display:inline-block;margin:.5rem 0 0 .25rem;font-size:.8rem;font-style:italic;font-weight:400}#default-chronograf-url:hover{text-transform:underline}.flex-form{display:flex;justify-content:space-between}.flex-form .save-btn{width:5.5rem;margin:0 0 0 .25rem;text-align:center;padding:.75rem 1rem;color:#fff;border-radius:3px;font-weight:600;transition:background .2s}@media (max-width:500px){.flex-form{flex-flow:column}.flex-form .save-btn{width:100%;margin:.25rem 0 0}#default-chronograf-url{display:block;margin:1rem auto 0}}#save-chronograf-url button{background:#9394ff}#save-chronograf-url button:hover{background:#4591ed}@media (min-width:900px){.article{padding-left:18rem}.article-section{padding:3rem}.article-content code,.article-content pre,.article-content td,.article-content th{border-width:2px}.article-content pre{border-left-width:6px}}@media (min-width:1200px){.article{padding-left:23rem}.article-section{padding:4.5rem}.old-version{width:60%}}@media (min-width:1900px){.article{padding-left:28rem}.article-section{padding:5rem 11rem}.article-content{font-size:1.125rem}}.homepage{overflow:auto;min-height:calc(100vh - 4rem);width:100%;z-index:2;background:#2c2c38;background:-moz-linear-gradient(left,#2c2c38 0,#0f0e15 100%);background:-webkit-linear-gradient(left,#2c2c38 0,#0f0e15 100%);background:linear-gradient(to right,#2c2c38 0,#0f0e15 100%);font-size:0;display:flex;flex-direction:column;flex-wrap:wrap;justify-content:space-between}.homepage .cards-enterprise,.homepage .cards-oss,.homepage .cards-special{display:flex;flex-direction:row;width:100%;flex-wrap:wrap;flex:1}.homepage--card{width:100%;display:inline-block;overflow:hidden;position:relative}.homepage--card-mask{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.1;transition:opacity .75s ease,transform .75s ease;z-index:1;background-attachment:scroll;background-size:cover;background-position:center center;background-repeat:no-repeat;transform:scale(1,1)}.homepage--card:hover .homepage--card-mask{opacity:1;transform:scale(1.2,1.2)}.homepage--card:hover .homepage--card-title{color:#fff!important}.homepage--card-container{position:relative;z-index:2;width:100%;display:inline-block;text-align:center;padding:4rem 3rem;font-size:0}.homepage--card-container a:active,.homepage--card-container a:link,.homepage--card-container a:visited{color:#4591ed;transition:color .25s ease;text-decoration:none}.homepage--card-container a:hover{color:#00c9ff}.homepage--card-description,.homepage--card-title{text-align:left;display:inline-block;width:100%;vertical-align:middle}.homepage--card-title{font-size:2rem;font-family:Klavika-Light,sans-serif;font-weight:200;font-style:italic;color:#4591ed;margin-bottom:.5em;transition:color .75s ease}.homepage--card-description{font-size:1rem;color:#757888;line-height:1.4em;font-weight:400}.homepage--card-link{display:inline-block;font-size:.875rem;font-weight:600;margin-left:.25rem;padding:2px 11px;border-radius:3px}.homepage--card-link:first-of-type{margin-top:1rem}.homepage--card.card-telegraf .homepage--card-mask{background-image:url(/img/home-telegraf.svg);background-color:#f95f53}.homepage--card.card-telegraf .homepage--card-description{color:#fff}.homepage--card.card-telegraf .homepage--card-title{color:#ff8564}.homepage--card.card-telegraf a.homepage--card-link:active,.homepage--card.card-telegraf a.homepage--card-link:link,.homepage--card.card-telegraf a.homepage--card-link:visited{color:#fff;transition:background-color .25s ease,color .25s ease}.homepage--card.card-telegraf a.homepage--card-link:hover{color:#ff8564;background-color:#fff}.homepage--card.card-influxdb .homepage--card-mask{background-image:url(/img/home-influxdb.svg);background-color:#4591ed}.homepage--card.card-influxdb .homepage--card-description{color:#fff}.homepage--card.card-influxdb .homepage--card-title{color:#00c9ff}.homepage--card.card-influxdb a.homepage--card-link:active,.homepage--card.card-influxdb a.homepage--card-link:link,.homepage--card.card-influxdb a.homepage--card-link:visited{color:#fff;transition:background-color .25s ease,color .25s ease}.homepage--card.card-influxdb a.homepage--card-link:hover{color:#22adf6;background-color:#fff}.homepage--card.card-chronograf .homepage--card-mask{background-image:url(/img/home-chronograf.svg);background-color:#7a65f2}.homepage--card.card-chronograf .homepage--card-description{color:#fff}.homepage--card.card-chronograf .homepage--card-title{color:#9394ff}.homepage--card.card-chronograf a.homepage--card-link:active,.homepage--card.card-chronograf a.homepage--card-link:link,.homepage--card.card-chronograf a.homepage--card-link:visited{color:#fff;transition:background-color .25s ease,color .25s ease}.homepage--card.card-chronograf a.homepage--card-link:hover{color:#9394ff;background-color:#fff}.homepage--card.card-kapacitor .homepage--card-mask{background-image:url(/img/home-kapacitor.svg);background-color:#4ed8a0}.homepage--card.card-kapacitor .homepage--card-description{color:#fff}.homepage--card.card-kapacitor .homepage--card-title{color:#4ed8a0}.homepage--card.card-kapacitor a.homepage--card-link:active,.homepage--card.card-kapacitor a.homepage--card-link:link,.homepage--card.card-kapacitor a.homepage--card-link:visited{color:#fff;transition:background-color .25s ease,color .25s ease}.homepage--card.card-kapacitor a.homepage--card-link:hover{color:#4ed8a0;background-color:#fff}.homepage--card.card-enterprise_kapacitor .homepage--card-mask{background-image:url(/img/home-kapacitor.svg);background-color:#4ed8a0}.homepage--card.card-enterprise_kapacitor .homepage--card-description{color:#fff}.homepage--card.card-enterprise_kapacitor .homepage--card-title{color:#4ed8a0}.homepage--card.card-enterprise_kapacitor a.homepage--card-link:active,.homepage--card.card-enterprise_kapacitor a.homepage--card-link:link,.homepage--card.card-enterprise_kapacitor a.homepage--card-link:visited{color:#fff;transition:background-color .25s ease,color .25s ease}.homepage--card.card-enterprise_kapacitor a.homepage--card-link:hover{color:#4ed8a0;background-color:#fff}.homepage--card.card-enterprise_influxdb .homepage--card-mask{background-image:url(/img/home-influxdb.svg);background-color:#4591ed}.homepage--card.card-enterprise_influxdb .homepage--card-description{color:#fff}.homepage--card.card-enterprise_influxdb .homepage--card-title{color:#00c9ff}.homepage--card.card-enterprise_influxdb a.homepage--card-link:active,.homepage--card.card-enterprise_influxdb a.homepage--card-link:link,.homepage--card.card-enterprise_influxdb a.homepage--card-link:visited{color:#fff;transition:background-color .25s ease,color .25s ease}.homepage--card.card-enterprise_influxdb a.homepage--card-link:hover{color:#22adf6;background-color:#fff}.homepage--card.card-flux .homepage--card-mask{background-image:url(/img/home-flux.svg);background-color:#15a194;opacity:1}.homepage--card.card-flux .homepage--card-description{color:#fff}.homepage--card.card-flux .homepage--card-title{color:#fff}.homepage--card.card-flux a.homepage--card-link:active,.homepage--card.card-flux a.homepage--card-link:link,.homepage--card.card-flux a.homepage--card-link:visited{color:#fff;transition:background-color .25s ease,color .25s ease}.homepage--card.card-flux a.homepage--card-link:active.download,.homepage--card.card-flux a.homepage--card-link:link.download,.homepage--card.card-flux a.homepage--card-link:visited.download{display:none}.homepage--card.card-flux a.homepage--card-link:hover{color:#32b08c;background-color:#fff}.homepage--card.card-platform{width:100%;background:linear-gradient(to right,#4591ed,#22adf6);display:flex;align-items:center}.homepage--card.card-platform .homepage--card-container{padding-bottom:3rem}.homepage--card.card-platform .homepage--card-mask{background-image:url(/img/home-influxdb.svg);background-color:#4591ed;opacity:.9}.homepage--card.card-platform .homepage--card-description{color:#fff;text-align:center}.homepage--card.card-platform .homepage--card-title{color:#fff;text-align:center;font-size:2.15rem}.homepage--card.card-platform a.homepage--card-link:active,.homepage--card.card-platform a.homepage--card-link:link,.homepage--card.card-platform a.homepage--card-link:visited{color:#fff;transition:background-color .25s ease,color .25s ease}.homepage--card.card-platform a.homepage--card-link:hover{color:#22adf6;background-color:#fff}.homepage--card.card-platform a.btn{margin:1.75rem 0 1rem;padding:1em 1.5em;display:inline-block;background:#fff;color:#22adf6;border-radius:3px;font-size:1rem;font-weight:700;transition:all .2s;box-shadow:0 0 15px rgba(255,255,255,0)}.homepage--card.card-platform a.btn:hover{box-shadow:0 0 15px #fff}@media (min-width:900px){.homepage--card{width:50%;flex-grow:1}}@media (min-width:1200px){.homepage--card-container{padding:3.5rem}.homepage--card-description{font-size:1.075rem}.homepage--card{width:25%;height:auto}.homepage--card.card-platform{width:75%}.homepage--card.card-enterprise_influxdb,.homepage--card.card-enterprise_kapacitor{width:50%}}@media (min-width:1900px){.homepage--card-container{padding:4rem}.homepage--card-description{font-size:1.125rem}}.error-page{overflow:scroll;top:4rem;height:100%;width:100%;background:#383846;background:-moz-linear-gradient(top,#383846 0,#1f2039 100%);background:-webkit-linear-gradient(top,#383846 0,#1f2039 100%);background:linear-gradient(to bottom,#383846 0,#1f2039 100%)}.error-content{margin:15vh auto;width:85%;max-width:400px;min-width:240px;font-size:15px;line-height:19px;color:#c6cad3}.error-content h1{color:#4591ed;display:block;margin:0 auto 50px;padding-top:15px;width:212px;height:212px;border-radius:50%;text-align:center;font-size:90px;font-weight:200;line-height:180px;position:relative;border:2px solid #4591ed}.flex{display:flex;justify-content:space-around}.wayfinding{margin-bottom:2rem}.btn{display:block;padding:.5rem;background:#4591ed;color:#fff;border-radius:3px;text-align:center;transition:background .2s}.btn.back{flex-grow:1;margin-right:.35rem}.btn.back:before{content:\"\\ea41\";font-family:icomoon;margin-right:.5rem;font-size:1rem}.btn.project{flex-grow:3;display:none}.btn.project:before{content:\"\\e801\";font-family:icomoon;margin-right:.5rem;flex-grow:3}.btn:hover{background:#22adf6}@media (min-width:900px){.error-content{font-size:17px;line-height:22px}}@media (min-width:1900px){.error-content{font-size:21px;line-height:32px}}.tabs-container{margin:2em 0 2em}.tabs{flex-grow:1;border-radius:3px 0 0 3px}.tabs p{display:flex;flex-wrap:wrap}.tabs a{flex-grow:1;margin:2px;font-size:.875em;color:#8e91a1!important;padding:.5em 1em;display:inline-block;text-align:center;border-radius:3px;background-color:rgba(231,232,235,.5);transition:background-color .2s,color .2s}.tabs a:hover{color:#676978!important}.tabs a.is-active{color:#fff!important;background:#4591ed}.tab-content{width:100%}.tab-content>*{width:100%!important;margin-left:0!important}.tab-content:not(:first-child){display:none}.tab-content-container{position:relative;border-radius:0 3px 3px 3px}.code-tabs-content{margin:.75rem 0 3rem;width:100%}.code-tabs-content>*{width:100%!important;margin-left:0!important}.code-tabs-wrapper{margin:1.5rem 0 .5rem}.code-tabs-wrapper .code-tabs p{margin:0;text-align:right;display:block;font-size:.9rem}.code-tabs-wrapper .code-tabs a{padding:.25rem .75rem;margin:0;border-radius:3px 3px 0 0;display:inline-block;background:rgba(242,244,255,.6);color:rgba(142,145,161,.5)!important}.code-tabs-wrapper .code-tabs a:hover{color:#676978!important}.code-tabs-wrapper .code-tabs a.is-active{background-color:#f2f4ff;color:#676978!important}.code-tabs-wrapper .code-tab-content{padding:0}.code-tabs-wrapper .code-tab-content pre{margin:0 0 3rem;border-radius:3px 0 3px 3px}.code-tabs-wrapper .code-tab-content:not(:first-of-type){display:none}@media (min-width:900px){.tabs-container .tabs a{flex-grow:0}}.plugin-card{position:relative;padding:1rem 1.5rem;margin-bottom:.5rem;justify-content:center;align-items:center;background:#f6f6f8;border-radius:3px}.plugin-card h3{padding:0;margin-top:.25rem}.plugin-card.new h3:after{content:\"New\";margin-left:.3rem;padding:.25rem .5rem;font-style:italic;color:#4591ed;font-size:1.2rem}.plugin-card p.meta{margin:.75rem 0;font-weight:500;color:#757888;line-height:1.75rem}.plugin-card p.meta .deprecated{margin-left:.5rem;font-style:italic;color:#e90}.plugin-card .info>p:last-child{margin-bottom:.5rem}.plugin-card .info>ul:last-child{margin-bottom:.5rem}.plugin-card .info>ol:last-child{margin-bottom:.5rem}.plugin-card .github-link{position:absolute;color:#fff!important;top:.5rem;right:.5rem;opacity:0;transition:opacity .2s,background .2s,color 2s}.plugin-card .github-link .icon-github{font-size:1.2rem;margin:0 .25rem 0 0}.plugin-card:hover .github-link{opacity:1}.plugin-card blockquote{border-color:#c6ffd0;background:rgba(242,255,244,.5)}.plugin-card blockquote h3,.plugin-card blockquote h4,.plugin-card blockquote h5,.plugin-card blockquote h6{color:#757888}.plugin-card blockquote li,.plugin-card blockquote p{color:#676978;font-size:1rem;font-style:normal}.plugin-card blockquote strong{color:inherit}.plugin-card blockquote a{color:#ff8564}.plugin-card blockquote a code:after{border-color:transparent rgba(43,112,152,.35) transparent transparent}.plugin-card blockquote a:hover{color:#ffb6a0}.plugin-card blockquote a:hover code:after{border-color:transparent #ffb6a0 transparent transparent}.plugin-card blockquote ol li:before{color:#676978}.plugin-card blockquote code,.plugin-card blockquote pre{color:#2b7098;background:#c6ffd0}#plugin-filters{display:flex;flex-flow:row wrap;align-items:flex-start}#plugin-filters .filter-category{flex:1 1 200px;margin:0 1.25rem 1.25rem 0;max-width:33%}#plugin-filters .filter-category.two-columns{flex:1 2 400px;max-width:66%}#plugin-filters .filter-category.two-columns .filter-list{columns:2}#plugin-filters h5{border-bottom:1px solid rgba(117,120,136,.25);padding-bottom:.65rem}#plugin-filters .filter-list{padding:0;margin:.5rem 0 0;list-style:none}#plugin-filters .filter-list li{padding:0;margin:0;line-height:1.35rem;list-style-type:none!important}#plugin-filters label{display:block;padding:.25rem 0;color:#757888;position:relative}#plugin-filters label:after{content:attr(data-count);margin-left:.25rem;font-size:.85rem;opacity:.5}#plugin-filters .checkbox{display:inline-block;height:1.15em;width:1.15em;background:rgba(117,120,136,.05);margin-right:.3rem;vertical-align:text-top;border-radius:3px;cursor:pointer;border:1.5px solid rgba(117,120,136,.2);user-select:none}#plugin-filters input[type=checkbox]{margin-right:-1.1rem;padding:0;vertical-align:top;opacity:0;cursor:pointer}#plugin-filters input[type=checkbox]+.checkbox:after{content:\"\";display:block;position:absolute;height:.5rem;width:.5rem;border-radius:50%;background:#ff8564;top:.65rem;left:.35rem;opacity:0;transform:scale(2);transition:all .2s}#plugin-filters input[type=checkbox]:checked+.checkbox:after{opacity:1;transform:scale(1)}@media (max-width:1100px){#plugin-filters .filter-category{max-width:50%}#plugin-filters .filter-category.three-columns,#plugin-filters .filter-category.two-columns{max-width:100%}}@media (max-width:800px){#plugin-filters .filter-category{max-width:100%}.plugin-card .github-link{opacity:1;padding:.25rem .35rem .35rem;line-height:0;font-size:1.35rem}.plugin-card .github-link .icon-github{margin:0}.plugin-card .github-link .hide{display:none}}@media (min-width:900px){body{padding-bottom:0}}.article-content .flex-wrapper{display:flex;flex-wrap:wrap}.article-content .flex-container{margin-right:2rem}.article-content .flex-container.half{width:calc(50% - 2rem)}.article-content .flex-container.third{width:calc(33.33% - 2rem)}.article-content .flex-container.quarter{width:calc(25% - 2rem)}.article-content .flex-container.quarter{width:calc(50% - 2rem)}svg[id^=geo-s2-cells-] .geo-cell{fill:rgba(34,173,246,.25);stroke:#22adf6;stroke-width:3;stroke-linejoin:round;stroke-miterlimit:10}svg[id^=geo-s2-cells-] .geo-region{fill:rgba(122,101,242,.35);stroke:#7a65f2;stroke-width:3;stroke-linejoin:round;stroke-miterlimit:10}svg[id^=geo-s2-cells-] .geo-point{fill:#ff8564}span.key-geo-cell{display:inline-block;vertical-align:middle;margin:0 .5rem .25rem 0;width:1.1em;height:1.1em;border:2px solid #22adf6;background:rgba(34,173,246,.25);border-radius:2px}span.key-geo-region{display:inline-block;vertical-align:middle;margin:0 .5rem .25rem 0;width:1.1em;height:1.1em;border:2px solid #7a65f2;background:rgba(122,101,242,.35);border-radius:2px}span.key-geo-point{display:inline-block;margin:0 .7rem 0 .25rem;width:.65rem;height:.65rem;border-radius:50%;background:#ff8564}body.docs-theme--telegraf .article-content a:active,body.docs-theme--telegraf .article-content a:link,body.docs-theme--telegraf .article-content a:visited{color:#ff8564}body.docs-theme--telegraf .article-content a:hover{color:#ffb6a0}body.docs-theme--telegraf .article-content a.top:hover{background:#ffb6a0}body.docs-theme--telegraf .article-content a.btn{background:#ff8564}body.docs-theme--telegraf .article-content a.btn:hover{background:#ffb6a0}body.docs-theme--telegraf .article-content.section-landing h2 a.off-page:link:hover{color:#ff8564!important}body.docs-theme--telegraf .sidebar--mask-container .sidebar--mask{background:#ff8564;background:-moz-linear-gradient(top,#ff8564 0,#7a65f2 100%);background:-webkit-linear-gradient(top,#ff8564 0,#7a65f2 100%);background:linear-gradient(to bottom,#ff8564 0,#7a65f2 100%)}body.docs-theme--telegraf .sidebar--section-title a:active,body.docs-theme--telegraf .sidebar--section-title a:link,body.docs-theme--telegraf .sidebar--section-title a:visited{color:#ff8564;font-weight:400}body.docs-theme--telegraf .sidebar--section-title a:hover{color:#ffb6a0}body.docs-theme--telegraf a.sidebar--page:hover{color:#ffb6a0}body.docs-theme--telegraf .navbar--product-dropdown{background-color:#ff8564}body.docs-theme--telegraf .navbar--product-dropdown:hover{background-color:#ffb6a0}body.docs-theme--telegraf .navbar--product-menu{background:#ff8564;background:-moz-linear-gradient(top,#ff8564 0,#7a65f2 100%);background:-webkit-linear-gradient(top,#ff8564 0,#7a65f2 100%);background:linear-gradient(to bottom,#ff8564 0,#7a65f2 100%)}body.docs-theme--telegraf .tabs a.is-active{background:#ff8564}body.docs-theme--chronograf .article-content a:active,body.docs-theme--chronograf .article-content a:link,body.docs-theme--chronograf .article-content a:visited{color:#9394ff}body.docs-theme--chronograf .article-content a:hover{color:#b1b6ff}body.docs-theme--chronograf .article-content a.top:hover{background:#b1b6ff}body.docs-theme--chronograf .article-content a.btn{background:#9394ff}body.docs-theme--chronograf .article-content a.btn:hover{background:#b1b6ff}body.docs-theme--chronograf .article-content.section-landing h2 a.off-page:link:hover{color:#9394ff!important}body.docs-theme--chronograf .sidebar--mask-container .sidebar--mask{background:#9394ff;background:-moz-linear-gradient(top,#9394ff 0,#4591ed 100%);background:-webkit-linear-gradient(top,#9394ff 0,#4591ed 100%);background:linear-gradient(to bottom,#9394ff 0,#4591ed 100%)}body.docs-theme--chronograf .sidebar--section-title a:active,body.docs-theme--chronograf .sidebar--section-title a:link,body.docs-theme--chronograf .sidebar--section-title a:visited{color:#9394ff;font-weight:400}body.docs-theme--chronograf .sidebar--section-title a:hover{color:#b1b6ff}body.docs-theme--chronograf a.sidebar--page:hover{color:#b1b6ff}body.docs-theme--chronograf .navbar--product-dropdown{background-color:#9394ff}body.docs-theme--chronograf .navbar--product-dropdown:hover{background-color:#b1b6ff}body.docs-theme--chronograf .navbar--product-menu{background:#9394ff;background:-moz-linear-gradient(top,#9394ff 0,#4591ed 100%);background:-webkit-linear-gradient(top,#9394ff 0,#4591ed 100%);background:linear-gradient(to bottom,#9394ff 0,#4591ed 100%)}body.docs-theme--chronograf .tabs a.is-active{background:#9394ff}body.docs-theme--kapacitor .article-content a:active,body.docs-theme--kapacitor .article-content a:link,body.docs-theme--kapacitor .article-content a:visited{color:#20b76f}body.docs-theme--kapacitor .article-content a:hover{color:#108174}body.docs-theme--kapacitor .article-content a.top:hover{background:#108174}body.docs-theme--kapacitor .article-content a.btn{background:#20b76f}body.docs-theme--kapacitor .article-content a.btn:hover{background:#4ed8a0}body.docs-theme--kapacitor .article-content.section-landing h2 a.off-page:link:hover{color:#20b76f!important}body.docs-theme--kapacitor .sidebar--mask-container .sidebar--mask{background:#4ed8a0;background:-moz-linear-gradient(top,#4ed8a0 0,#22adf6 100%);background:-webkit-linear-gradient(top,#4ed8a0 0,#22adf6 100%);background:linear-gradient(to bottom,#4ed8a0 0,#22adf6 100%)}body.docs-theme--kapacitor .sidebar--section-title a:active,body.docs-theme--kapacitor .sidebar--section-title a:link,body.docs-theme--kapacitor .sidebar--section-title a:visited{color:#20b76f;font-weight:400}body.docs-theme--kapacitor .sidebar--section-title a:hover{color:#108174}body.docs-theme--kapacitor a.sidebar--page:hover{color:#108174}body.docs-theme--kapacitor .navbar--product-dropdown{background-color:#4ed8a0}body.docs-theme--kapacitor .navbar--product-dropdown:hover{background-color:#7ce490}body.docs-theme--kapacitor .navbar--product-menu{background:#4ed8a0;background:-moz-linear-gradient(top,#4ed8a0 0,#22adf6 100%);background:-webkit-linear-gradient(top,#4ed8a0 0,#22adf6 100%);background:linear-gradient(to bottom,#4ed8a0 0,#22adf6 100%)}body.docs-theme--kapacitor .tabs a.is-active{background:#20b76f}body.docs-theme--enterprise_kapacitor .article-content a:active,body.docs-theme--enterprise_kapacitor .article-content a:link,body.docs-theme--enterprise_kapacitor .article-content a:visited{color:#20b76f}body.docs-theme--enterprise_kapacitor .article-content a:hover{color:#108174}body.docs-theme--enterprise_kapacitor .article-content a.top:hover{background:#108174}body.docs-theme--enterprise_kapacitor .article-content a.btn{background:#20b76f}body.docs-theme--enterprise_kapacitor .article-content a.btn:hover{background:#4ed8a0}body.docs-theme--enterprise_kapacitor .article-content.section-landing h2 a.off-page:link:hover{color:#20b76f!important}body.docs-theme--enterprise_kapacitor .sidebar--mask-container .sidebar--mask{background:#4ed8a0;background:-moz-linear-gradient(top,#4ed8a0 0,#22adf6 100%);background:-webkit-linear-gradient(top,#4ed8a0 0,#22adf6 100%);background:linear-gradient(to bottom,#4ed8a0 0,#22adf6 100%)}body.docs-theme--enterprise_kapacitor .sidebar--section-title a:active,body.docs-theme--enterprise_kapacitor .sidebar--section-title a:link,body.docs-theme--enterprise_kapacitor .sidebar--section-title a:visited{color:#20b76f;font-weight:400}body.docs-theme--enterprise_kapacitor .sidebar--section-title a:hover{color:#108174}body.docs-theme--enterprise_kapacitor a.sidebar--page:hover{color:#108174}body.docs-theme--enterprise_kapacitor .navbar--product-dropdown{background-color:#4ed8a0}body.docs-theme--enterprise_kapacitor .navbar--product-dropdown:hover{background-color:#7ce490}body.docs-theme--enterprise_kapacitor .navbar--product-menu{background:#4ed8a0;background:-moz-linear-gradient(top,#4ed8a0 0,#22adf6 100%);background:-webkit-linear-gradient(top,#4ed8a0 0,#22adf6 100%);background:linear-gradient(to bottom,#4ed8a0 0,#22adf6 100%)}body.docs-theme--enterprise_kapacitor .tabs a.is-active{background:#20b76f}body.docs-theme--flux .article-content a:active,body.docs-theme--flux .article-content a:link,body.docs-theme--flux .article-content a:visited{color:#20b76f}body.docs-theme--flux .article-content a:hover{color:#108174}body.docs-theme--flux .article-content a.top:hover{background:#108174}body.docs-theme--flux .article-content.section-landing h2 a.off-page:link:hover{color:#20b76f!important}body.docs-theme--flux .sidebar--mask-container .sidebar--mask{background:#4ed8a0;background:-moz-linear-gradient(top,#4ed8a0 0,#22adf6 100%);background:-webkit-linear-gradient(top,#4ed8a0 0,#22adf6 100%);background:linear-gradient(to bottom,#4ed8a0 0,#22adf6 100%)}body.docs-theme--flux .sidebar--section-title a:active,body.docs-theme--flux .sidebar--section-title a:link,body.docs-theme--flux .sidebar--section-title a:visited{color:#20b76f;font-weight:400}body.docs-theme--flux .sidebar--section-title a:hover{color:#108174}body.docs-theme--flux a.sidebar--page:hover{color:#108174}body.docs-theme--flux .navbar--product-dropdown{background-color:#4ed8a0}body.docs-theme--flux .navbar--product-dropdown:hover{background-color:#7ce490}body.docs-theme--flux .navbar--product-menu{background:#4ed8a0;background:-moz-linear-gradient(top,#4ed8a0 0,#22adf6 100%);background:-webkit-linear-gradient(top,#4ed8a0 0,#22adf6 100%);background:linear-gradient(to bottom,#4ed8a0 0,#22adf6 100%)}body.docs-theme--flux .tabs a.is-active{background:#20b76f}","/*! normalize.css v3.0.2 | MIT License | git.io/normalize */\n\n/**\n * 1. Set default font family to sans-serif.\n * 2. Prevent iOS text size adjust after orientation change, without disabling\n * user zoom.\n */\n\nhtml {\n font-family: sans-serif; /* 1 */\n -ms-text-size-adjust: 100%; /* 2 */\n -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/**\n * Remove default margin.\n */\n\nbody {\n margin: 0;\n font-family: 'Roboto',Helvetica,Arial,Tahoma, Verdana, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n/* HTML5 display definitions\n ========================================================================== */\n\n/**\n * Correct `block` display not defined for any HTML5 element in IE 8/9.\n * Correct `block` display not defined for `details` or `summary` in IE 10/11\n * and Firefox.\n * Correct `block` display not defined for `main` in IE 11.\n */\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\n\n/**\n * 1. Correct `inline-block` display not defined in IE 8/9.\n * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n */\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block; /* 1 */\n vertical-align: baseline; /* 2 */\n}\n\n/**\n * Prevent modern browsers from displaying `audio` without controls.\n * Remove excess height in iOS 5 devices.\n */\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n/**\n * Address `[hidden]` styling not present in IE 8/9/10.\n * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.\n */\n\n[hidden],\ntemplate {\n display: none;\n}\n\n/* Links\n ========================================================================== */\n\n/**\n * Remove the gray background color from active links in IE 10.\n */\n\na {\n background-color: transparent;\n}\n\n/**\n * Improve readability when focused and also mouse hovered in all browsers.\n */\n\na:active,\na:hover {\n outline: 0;\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n */\n\nabbr[title] {\n border-bottom: 1px dotted;\n}\n\n/**\n * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n */\n\nb,\nstrong {\n font-weight: bold;\n}\n\n/**\n * Address styling not present in Safari and Chrome.\n */\n\ndfn {\n font-style: italic;\n}\n\n/**\n * Address variable `h1` font-size and margin within `section` and `article`\n * contexts in Firefox 4+, Safari, and Chrome.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/**\n * Address styling not present in IE 8/9.\n */\n\nmark {\n background: #ff0;\n color: #000;\n}\n\n/**\n * Address inconsistent and variable font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` affecting `line-height` in all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Remove border when inside `a` element in IE 8/9/10.\n */\n\nimg {\n border: 0;\n}\n\n/**\n * Correct overflow not hidden in IE 9/10/11.\n */\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * Address margin not present in IE 8/9 and Safari.\n */\n\nfigure {\n margin: 1em 40px;\n}\n\n/**\n * Address differences between Firefox and other browsers.\n */\n\nhr {\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n height: 0;\n}\n\n/**\n * Contain overflow in all browsers.\n */\n\npre {\n overflow: auto;\n}\n\n/**\n * Address odd `em`-unit font size rendering in all browsers.\n */\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * Known limitation: by default, Chrome and Safari on OS X allow very limited\n * styling of `select`, unless a `border` property is set.\n */\n\n/**\n * 1. Correct color not being inherited.\n * Known issue: affects color of disabled elements.\n * 2. Correct font properties not being inherited.\n * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit; /* 1 */\n font: inherit; /* 2 */\n margin: 0; /* 3 */\n}\n\n/**\n * Address `overflow` set to `hidden` in IE 8/9/10/11.\n */\n\nbutton {\n overflow: visible;\n}\n\n/**\n * Address inconsistent `text-transform` inheritance for `button` and `select`.\n * All other form control elements do not inherit `text-transform` values.\n * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n * Correct `select` style inheritance in Firefox.\n */\n\nbutton,\nselect {\n text-transform: none;\n}\n\n/**\n * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n * and `video` controls.\n * 2. Correct inability to style clickable `input` types in iOS.\n * 3. Improve usability and consistency of cursor style between image-type\n * `input` and others.\n */\n\nbutton,\nhtml input[type=\"button\"], /* 1 */\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; /* 2 */\n cursor: pointer; /* 3 */\n}\n\n/**\n * Re-set default cursor for disabled elements.\n */\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\n/**\n * Remove inner padding and border in Firefox 4+.\n */\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\n/**\n * Address Firefox 4+ setting `line-height` on `input` using `!important` in\n * the UA stylesheet.\n */\n\ninput {\n line-height: normal;\n}\n\n/**\n * It's recommended that you don't attempt to style these elements.\n * Firefox's implementation doesn't respect box-sizing, padding, or width.\n *\n * 1. Address box sizing set to `content-box` in IE 8/9/10.\n * 2. Remove excess padding in IE 8/9/10.\n */\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Fix the cursor style for Chrome's increment/decrement buttons. For certain\n * `font-size` values of the `input`, it causes the cursor style of the\n * decrement button to change from `default` to `text`.\n */\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n * 2. Address `box-sizing` set to `border-box` in Safari and Chrome\n * (include `-moz` to future-proof).\n */\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; /* 1 */\n -moz-box-sizing: content-box;\n -webkit-box-sizing: content-box; /* 2 */\n box-sizing: content-box;\n}\n\n/**\n * Remove inner padding and search cancel button in Safari and Chrome on OS X.\n * Safari (but not Chrome) clips the cancel button when the search input has\n * padding (and `textfield` appearance).\n */\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/**\n * Define consistent border, margin, and padding.\n */\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n/**\n * 1. Correct `color` not being inherited in IE 8/9/10/11.\n * 2. Remove padding so people aren't caught out if they zero out fieldsets.\n */\n\nlegend {\n border: 0; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Remove default vertical scrollbar in IE 8/9/10/11.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * Don't inherit the `font-weight` (applied by a rule above).\n * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n */\n\noptgroup {\n font-weight: bold;\n}\n\n/* Tables\n ========================================================================== */\n\n/**\n * Remove most spacing between table cells.\n */\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\ntd,\nth {\n padding: 0;\n}\n","code[class*=\"language-\"],\npre[class*=\"language-\"] {\n\t/*text-shadow: 0 1px #101419;*/\n\tdirection: ltr;\n\ttext-align: left;\n\twhite-space: pre;\n white-space: pre-wrap;\n white-space: -moz-pre-wrap;\n\twhite-space: -o-pre-wrap;\n\tword-spacing: normal;\n\tword-break: normal;\n\tword-wrap: normal;\n\n\t-moz-tab-size: 1;\n\t-o-tab-size: 1;\n\ttab-size: 1;\n\n\t-webkit-hyphens: none;\n\t-moz-hyphens: none;\n\t-ms-hyphens: none;\n\thyphens: none;\n}\n\npre[class*=\"language-\"]::-moz-selection, pre[class*=\"language-\"] ::-moz-selection,\ncode[class*=\"language-\"]::-moz-selection, code[class*=\"language-\"] ::-moz-selection {\n\ttext-shadow: none;\n}\n\npre[class*=\"language-\"]::selection, pre[class*=\"language-\"] ::selection,\ncode[class*=\"language-\"]::selection, code[class*=\"language-\"] ::selection {\n\ttext-shadow: none;\n}\n\n@media print {\n\tcode[class*=\"language-\"],\n\tpre[class*=\"language-\"] {\n\t\ttext-shadow: none;\n\t}\n}\n\n/* Code blocks */\npre[class*=\"language-\"] {\n\toverflow: auto;\n}\n\n:not(pre) > code[class*=\"language-\"],\npre[class*=\"language-\"] {\n}\n\n/* Inline code */\n:not(pre) > code[class*=\"language-\"] {\n\twhite-space: normal;\n}\n\n.highlight { color: @article-code-color;\n\n\t// COLORS\n\n\t.gh, \t\t/* Generic.Heading */\n\t.go, \t\t/* Generic.Output */\n\t.na, \t\t/* Name.Attribute */\n\t.nt, \t\t/* Name.Tag */\n\t.nv, \t\t/* Name.Variable */\n\t.ow \t\t/* Operator.Word */\n\t\t\t\t\t{ color: @article-code-color }\n\n\t.c, \t\t/* Comment */\n\t.ch, \t\t/* Comment.Hashbang */\n\t.cm, \t\t/* Comment.Multiline */\n\t.cpf, \t/* Comment.PreprocFile */\n\t.c1, \t\t/* Comment.Single */\n\t.cs,\t\t/* Comment.Special */\n\t.w \t\t/* Text.Whitespace */\n\t\t\t\t\t{ color: @article-code-accent1; }\n\n\t.gi \t\t/* Generic.Inserted */\n\t\t\t\t\t{ background-color: @article-code-accent1; }\n\n\t.k, \t\t/* Keyword */\n\t.kc, \t\t/* Keyword.Constant */\n\t.kd, \t\t/* Keyword.Declaration */\n\t.kn, \t\t/* Keyword.Namespace */\n\t.kp, \t\t/* Keyword.Pseudo */\n\t.kr, \t\t/* Keyword.Reserved */\n\t.nn \t\t/* Name.Namespace */\n\t\t\t\t\t{ color: @article-code-accent2; }\n\n\t.bp, \t\t/* Name.Builtin.Pseudo */\n\t.cp, \t\t/* Comment.Preproc */\n\t.dl, \t\t/* Literal.String.Delimiter */\n\t.gt, \t\t/* Generic.Traceback */\n\t.gu, \t\t/* Generic.Subheading */\n\t.kt, \t\t/* Keyword.Type */\n\t.nb, \t\t/* Name.Builtin */\n\t.nc, \t\t/* Name.Class */\n\t.no, \t\t/* Name.Constant */\n\t.sa, \t\t/* Literal.String.Affix */\n\t.sb, \t\t/* Literal.String.Backtick */\n\t.sc, \t\t/* Literal.String.Char */\n\t.sd, \t\t/* Literal.String.Doc */\n\t.se, \t\t/* Literal.String.Escape */\n\t.sh, \t\t/* Literal.String.Heredoc */\n\t.sx, \t\t/* Literal.String.Other */\n\t.sr, \t\t/* Literal.String.Regex */\n\t.s1, \t\t/* Literal.String.Single */\n\t.s2 \t\t/* Literal.String.Double */\n\t\t\t\t\t{ color: @article-code-accent3 }\n\n\t.err, /* Error */\n\t.fm, \t\t/* Name.Function.Magic */\n\t.gr, \t\t/* Generic.Error */\n\t.gd, \t\t/* Generic.Deleted */\n\t.nd, \t\t/* Name.Decorator */\n\t.ne, \t\t/* Name.Exception */\n\t.nf, \t\t/* Name.Function */\n\t.nl, \t\t/* Name.Label */\n\t.si \t\t/* Literal.String.Interpol */\n\t\t\t\t\t{ color: @article-code-accent4 }\n\n\t.m, \t\t/* Literal.Number */\n\t.ni, \t\t/* Name.Entity */\n\t.mb, \t\t/* Literal.Number.Bin */\n\t.mf, \t\t/* Literal.Number.Float */\n\t.mh, \t\t/* Literal.Number.Hex */\n\t.mi, \t\t/* Literal.Number.Integer */\n\t.mo, \t\t/* Literal.Number.Oct */\n\t.vc, \t\t/* Name.Variable.Class */\n\t.vg, \t\t/* Name.Variable.Global */\n\t.vi, \t\t/* Name.Variable.Instance */\n\t.vm, \t\t/* Name.Variable.Magic */\n\t.il \t\t/* Literal.Number.Integer.Long */\n\t\t\t\t\t{ color: @article-code-accent5 }\n\n\t.gp, \t\t/* Generic.Prompt */\n\t.o \t\t/* Operator */\n\t\t\t\t\t{ color: @article-code-accent6 }\n\n\t.ss \t\t/* Literal.String.Symbol */\n\t\t\t\t\t{ color: @article-code-accent7 }\n\n\t// FONT STYLES\n\n\t.cs \t\t/* Comment.Special */\n\t.gh, \t\t/* Generic.Heading */\n\t.gu, \t\t/* Generic.Subheading */\n\t.gp, \t\t/* Generic.Prompt */\n\t.gs, \t\t/* Generic.Strong */\n\t.k, \t\t/* Keyword */\n\t.kc, \t\t/* Keyword.Constant */\n\t.kd, \t\t/* Keyword.Declaration */\n\t.kn, \t\t/* Keyword.Namespace */\n\t.kp, \t\t/* Keyword.Pseudo */\n\t.kr, \t\t/* Keyword.Reserved */\n\t.kt, \t\t/* Keyword.Type */\n\t.nc, \t\t/* Name.Class */\n\t.ne, \t\t/* Name.Exception */\n\t.ni, \t\t/* Name.Entity */\n\t.nn \t\t/* Name.Namespace */\n\t.nt, \t\t/* Name.Tag */\n\t.ow, \t\t/* Operator.Word */\n\t.se \t\t/* Literal.String.Escape */\n\t\t\t\t\t{ font-weight: bold }\n\n\t.c, \t\t/* Comment */\n\t.ch, \t\t/* Comment.Hashbang */\n\t.cm, \t\t/* Comment.Multiline */\n\t.cpf, \t/* Comment.PreprocFile */\n\t.c1, \t\t/* Comment.Single */\n\t.cs,\t\t/* Comment.Special */\n\t.ge, \t\t/* Generic.Emph */\n\t.sd ,\t\t/* Literal.String.Doc */\n\t.w \t\t/* Text.Whitespace */\n\t\t\t\t\t{ font-style: italic }\n}\n","//\n// Custom Font (Klavika)\n// --------------------------------------------------\n\n@font-face {\n font-family: Klavika-Light;\n src: url(../fonts/KlavikaLight-ItalicTF.otf);\n font-weight: 200;\n font-style: italic;\n}\n@font-face {\n font-family: Klavika-Bold;\n src: url(../fonts/KlavikaBoldBoldItalic.otf);\n font-weight: 700;\n font-style: italic;\n}\n\n//\n// Resets\n// --------------------------------------------------\n\nhtml {\n\toverflow: auto;\n}\nhtml,body {\n\twidth: 100%;\n\theight: 100%;\n\tbackground-color: @body-bg-color;\n -webkit-overflow-scrolling: touch;\n}\nbody {\n\tcolor: @default-text-color;\n\tline-height: 1;\n\toverflow: auto;\n}\n* {\n\tbox-sizing: border-box;\n}\nhtml,\ndiv,\nspan,\napplet,\nobject,\niframe,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\np,\nblockquote,\npre,\na,\nabbr,\nacronym,\naddress,\nbig,\ncite,\ncode,\ndel,\ndfn,\nem,\nimg,\nins,\nkbd,\nq,\ns,\nsamp,\nsmall,\nstrike,\nstrong,\nsub,\nsup,\ntt,\nvar,\nb,\nu,\ni,\ncenter,\ndl,\ndt,\ndd,\nol,\nul,\nli,\nfieldset,\nform,\nlabel,\nlegend,\ntable,\ncaption,\ntbody,\ntfoot,\nthead,\ntr,\nth,\ntd,\narticle,\naside,\ncanvas,\ndetails,\nembed,\nfigure,\nfigcaption,\nfooter,\nheader,\nhgroup,\nmenu,\nnav,\noutput,\nruby,\nsection,\nsummary,\ntime,\nmark,\naudio,\nvideo {\n\tmargin: 0;\n\tpadding: 0;\n\tborder: 0;\n\tfont-size: 100%;\n\tvertical-align: baseline;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmenu,\nnav,\nsection {\n\tdisplay: block;\n}\nol,\nul {\n\tlist-style: none;\n}\nblockquote,\nq {\n\tquotes: none;\n}\nblockquote:before,\nblockquote:after,\nq:before,\nq:after {\n\tcontent: '';\n\tcontent: none;\n}\ntable {\n\tborder-collapse: collapse;\n\tborder-spacing: 0;\n}\n\n//\n// Import Modules\n// --------------------------------------------------\n@import \"layout-navbar.less\";\n@import \"layout-search-overrides.less\";\n@import \"layout-sidebar.less\";\n@import \"layout-sidebar-ads.less\";\n@import \"layout-article.less\";\n@import \"layout-home.less\";\n@import \"layout-error-pages.less\";\n@import \"tabs.less\";\n@import \"telegraf-plugins.less\";\n\n//\n// Media Queries\n// --------------------------------------------------\n@media (min-width: @breakpoint-small) {\n\tbody {\n\t\tpadding-bottom: 0;\n\t}\n}\n","/*\n\n\tNAVIGATION BAR\n\n\t____________________________________________________________\n\n\tNotes:\n\t-\tOnly contains styles relevant to the navbar module\n\n*/\n@nav-font-size: 19px;\n\n.navbar {\n\ttop: 0;\n\tleft: 0;\n\tfont-size: 1rem;\n\theight: @nav-height;\n\twidth: 100%;\n\tbackground-color: @nav-bg;\n\tz-index: @z-nav;\n\tposition: relative;\n}\n.navbar--logo,\n.navbar--hamburger,\n.navbar--product-dropdown,\n.navbar--search,\n.theme-switcher {\n\tposition: absolute;\n}\n.navbar--logo {\n\tleft: 1em;\n\ttop: 1.05em;\n\ta {\n\t\tfont-size: 1.5rem;\n\t\tcolor: @nav-logo;\n\t\ttransition: color 0.25s ease;\n\t\t&:hover {\n\t\t\tcolor: @nav-logo-hover;\n\t\t}\n\t}\n\t.divider {\n\t\tborder-left: 1px solid @nav-logo;\n margin: 0 .8rem 0 .5rem;\n vertical-align: text-top;\n\t\topacity: .35;\n\t\tline-height: 1.15em;\n\t}\n\t.navbar--docs {\n\t\tfont-size: 1.3rem;\n\t}\n}\n.navbar--hamburger {\n\twidth: @nav-height;\n\theight: @nav-height;\n\tright: 0;\n\n\t.navbar--hamburger-bar {\n\t\twidth: @nav-height * 0.3em;\n\t\theight: 2px;\n\t\tbackground-color: @nav-hamburger;\n\t\tborder-radius: 1px;\n\t\tposition: absolute;\n\t\tleft: 50%;\n\t\ttransition: all 0.3s ease;\n\n\t\t&.top {\n\t\t\ttop: 40%;\n\t\t\ttransform: translate(-50%,-50%);\n\t\t}\n\t\t&.middle {\n\t\t\ttop: 50%;\n\t\t\ttransform: translate(-50%,-50%);\n\t\t}\n\t\t&.bottom {\n\t\t\ttop: 60%;\n\t\t\ttransform: translate(-50%,-50%);\n\t\t}\n\t}\n\n\t&:hover {\n\t\tcursor: pointer;\n\n\t\t.navbar--hamburger-bar {\n\t\t\tbackground-color: @nav-hamburger-hover;\n\t\t}\n\t}\n\n\t&.open {\n\t\t.navbar--hamburger-bar {\n\t\t\t&.top {\n\t\t\t\ttop: 50%;\n\t\t\t\ttransform: translate(-50%,-50%) rotate(45deg);\n\t\t\t}\n\t\t\t&.middle {\n\t\t\t\topacity: 0;\n\t\t\t}\n\t\t\t&.bottom {\n\t\t\t\ttop: 50%;\n\t\t\t\ttransform: translate(-50%,-50%) rotate(-45deg);\n\t\t\t}\n\t\t}\n\t}\n}\n.navbar--product-menu {\n\twidth: 100%;\n\tposition: absolute;\n\ttop: .5em;\n\theight: auto;\n\topacity: 0;\n\ttransition: opacity 0.25s ease;\n\t.gradient-v(@c-ocean,@c-pool);\n}\n.navbar--product-container {\n\twidth: 100%;\n\theight: auto;\n\tposition: absolute;\n\ttop: calc(@nav-height * .85);\n\tleft: 0;\n\tvisibility: hidden;\n\ttransition: all 0.25s ease;\n\n\tz-index: 100;\n\n\t&.open {\n\t\tvisibility: visible;\n\n\t\t.navbar--product-menu {\n\t\t\topacity: 1;\n\t\t}\n\t}\n}\n.navbar--product-divider {\n\tmargin: 0.25em 0;\n\theight: 2px;\n\tbackground-color: fadeout(@g6-smoke, 90%);\n}\n.navbar--product {\n\tfont-size: @nav-font-size;\n\t&:link,\n\t&:active,\n\t&:visited {\n\t\tcolor: @g20-white;\n\t\ttransition:\n\t\t\tbackground-color 0.25s ease,\n\t\t\tcolor 0.25s ease;\n\t\tbackground-color: transparent;\n\t\tpadding: 1.25rem 1rem;\n\t\tdisplay: block;\n\t\twidth: 100%;\n\t}\n\t&:hover {\n\t\tbackground-color: fadeout(@g5-pepper, 88%);\n\t\tcolor: @g20-white;\n\t}\n}\n.navbar--product-dropdown {\n\tdisplay: none;\n\ttop: .5em;\n\tbackground-color: @c-ocean;\n\theight: @nav-component-height;\n\tborder-radius: @radius;\n\ttransition:\n\t\tbackground-color 0.25s ease,\n\t\tcolor 0.25s ease;\n\t&:hover {\n\t\tcursor: pointer;\n\t\tbackground-color: @c-pool;\n\t}\n\t.navbar--current-product,\n\t.navbar--product-dropdown-caret {\n\t\tposition: absolute;\n\t\ttop: 50%;\n\t\ttransform: translateY(-50%);\n\t\tcolor: @g20-white;\n\t}\n\n\t.navbar--current-product {\n\t\tfont-weight: 700;\n\t\tleft: 1rem;\n\t\tfont-size: @nav-font-size;\n\t\tfont-weight: 400;\n\t}\n\t.navbar--product-dropdown-caret {\n\t\tright: 1rem;\n\t\tfont-size: 0.625em;\n\t}\n}\n.navbar--search {\n\theight: @nav-component-height;\n\twidth: @search-default-width;\n\tright: @nav-height;\n\ttop: .5em;\n\n\t> * {\n\t\tposition: absolute !important;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t}\n}\n.navbar--search-field {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\twidth: 100%;\n\theight: 100%;\n\tborder-radius: @radius;\n\tborder: 2px solid @nav-search-border;\n\tcolor: @nav-search-text;\n\tbackground-color: @nav-search-bg;\n\tpadding: 0 1rem;\n\tfont-weight: 400;\n\tfont-size: @nav-font-size;\n\toutline: none;\n\ttransition:\n\t\tborder-color 0.3s ease,\n\t\tcolor 0.3s ease;\n\t&:focus {\n\t\tborder-color: @nav-search-border-focus;\n\t\tcolor: @nav-search-border-focus;\n\t}\n}\n.algolia-autocomplete {\n\twidth: 100%;\n\n\t.aa-input,\n\t.aa-hint {\n\t\twidth: 100%;\n\t}\n\t.aa-hint {\n\t\tcolor: #f00;\n\t}\n\t.aa-dropdown-menu {\n\t\tmargin: @search-offset 0 0 0;\n\t\twidth: 100%;\n\t\tpadding: 0.75rem;\n\t\tbackground-color: fadeout(@algolia-background, 30%);\n\t\tborder: 0px;\n\n\t\t.algolia-docsearch-suggestion--highlight {\n\t\t\tcolor: @algolia-highlight-color;\n\t\t}\n\n\t\t.aa-suggestion {\n\t\t\tcursor: pointer;\n\t\t\tpadding: 0;\n\n\t\t\t.algolia-docsearch-suggestion {\n\t\t\t\tbackground-color: @algolia-category-header;\n\t\t\t\tborder-radius: @radius;\n\t\t\t\toverflow: hidden;\n\t\t\t}\n\t\t\t.algolia-docsearch-suggestion__secondary {\n\t\t\t\tborder: none;\n\t\t\t\tmargin-top: 2px;\n\t\t\t}\n\t\t\t&:first-child .algolia-docsearch-suggestion__secondary {\n\t\t\t\tmargin-top: 0;\n\t\t\t}\n\t\t\t.algolia-docsearch-suggestion--category-header {\n\t\t\t\tborder-radius: @radius @radius 0 0;\n\t\t\t\tbackground-color: @algolia-category-header;\n\t\t\t\tcolor: @algolia-category-header-text;\n\t\t\t\tpadding: 0.75rem 1rem;\n\t\t\t\tfont-weight: 500;\n\n\t\t\t\t.algolia-docsearch-suggestion--highlight {\n\t\t\t\t\tbackground-color: transparent;\n\t\t\t\t}\n\t\t\t}\n\t\t\t.algolia-docsearch-suggestion--subcategory-column {\n\t\t\t\tborder: none;\n\t\t\t\tbackground-color: @algolia-suggestion-column;\n\t\t\t}\n\t\t\t.algolia-docsearch-suggestion--content {\n\t\t\t\tbackground-color: @algolia-suggestion-content;\n\t\t\t}\n\t\t\t.algolia-docsearch-suggestion--title {\n\t\t\t\tmargin-bottom: 0.25rem;\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tcolor: @algolia-suggestion-text;\n\t\t\t}\n\t\t\t.algolia-docsearch-suggestion--text {\n\t\t\t\tcolor: @algolia-suggestion-text-alt;\n\t\t\t}\n\t\t\t.algolia-docsearch-suggestion--subcategory-column-text {\n\t\t\t\tfont-size: 0.8rem;\n\t\t\t\tline-height: 1.4em;\n\t\t\t\tcolor: @algolia-suggestion-text-alt;\n\t\t\t}\n\t\t\t// Highlight style\n\t\t\t&.aa-cursor {\n\n\t\t\t\t.algolia-docsearch-suggestion--content {\n\t\t\t\t\t.gradient-h(@algolia-cursor-bg1,@algolia-cursor-bg2);\n\t\t\t\t}\n\t\t\t\t.algolia-docsearch-suggestion--text,\n\t\t\t\t.algolia-docsearch-suggestion--title {\n\t\t\t\t\tcolor: @algolia-cursor-text;\n\t\t\t\t\t.algolia-docsearch-suggestion--highlight {\n\t\t\t\t\t\tcolor: @algolia-cursor-highlight !important;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tem {\n\t\t\t\tfont-weight: bold;\n\t\t\t\tfont-style: normal;\n\t\t\t}\n\t\t}\n\t}\n\t.algolia-docsearch-footer {\n\t\tborder: none;\n\t\tpadding: 0.75rem 0 0 0;\n\t}\n}\n.theme-switcher {\n\tdisplay: none;\n\twidth: @nav-height;\n\theight: @nav-height;\n\tright: 0;\n\tborder: 0;\n\toutline: none;\n\tbackground-color: @nav-bg;\n\tcolor: @nav-logo;\n\n\t.icon {\n\t\ttransition: color 0.25s ease;\n\t}\n\t.sun2 {\n\t\tfont-size: 1.5rem;\n\t}\n\t.moon {\n\t\tfont-size: 1.2rem;\n\t}\n\n\t&:hover {\n\t\tcolor: @nav-logo-hover;\n\t\tcursor: pointer;\n\t}\n}\n\n//\n// Media Queries\n// --------------------------------------------------\n@media (max-width: 500px) {\n\t.navbar--logo {\n\t\t.logotype {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.logo {\n\t\t\tdisplay: inline;\n\t\t}\n\t}\n}\n@media (min-width: 500px) {\n\t.navbar--logo {\n\t\t.logotype {\n\t\t\tdisplay: inline;\n\t\t}\n\t\t.logo {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n}\n\n@media (min-width: 501px) {\n\n}\n\n@media (min-width: @breakpoint-small) {\n\t.theme-switcher {\n\t\tdisplay: block;\n\t}\n\t.navbar--product-dropdown {\n\t\tdisplay: block;\n\t\tleft: @sidebar-small-width;\n\t\twidth: @product-dropdown-small-width;\n\t}\n\t.navbar--product-container {\n\t\tleft: @sidebar-small-width;\n\t\twidth: @product-dropdown-small-width;\n\t\ttop: 2.9em;\n\n\t\t&.open {\n\t\t\t.navbar--dropdown-dismiss {\n\t\t\t\twidth: 100vw;\n\t\t\t\theight: 100vh;\n\t\t\t\tposition: fixed;\n\t\t\t\ttop: 0;\n\t\t\t\tleft: 0;\n\t\t\t\tz-index: 100;\n\n\t\t\t\t&:hover {\n\t\t\t\t\tcursor: pointer;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t.navbar--product-menu {\n\t\tborder-radius: 0 0 @radius @radius;\n\t\toverflow: hidden;\n\t\tz-index: 110;\n\t}\n\t.navbar--search {\n\t\tleft: @search-small-position;\n\t\twidth: @search-small-width;\n\t}\n\t.navbar--hamburger {\n\t\tdisplay: none;\n\t}\n\t.navbar--product.external {\n\t\tfont-size: 0.8rem;\n\t}\n}\n@media (min-width: @breakpoint-large) {\n\t.navbar--product-dropdown {\n\t\tleft: @sidebar-large-width;\n\t\twidth: @product-dropdown-large-width;\n\t}\n\t.navbar--product-container {\n\t\tleft: @sidebar-large-width;\n\t\twidth: @product-dropdown-large-width;\n\t}\n\t.navbar--search {\n\t\tleft: @search-large-position;\n\t\twidth: @search-large-width;\n\t}\n}\n@media (min-width: @breakpoint-huge) {\n\t.navbar--product-dropdown {\n\t\tleft: @sidebar-huge-width;\n\t\twidth: @product-dropdown-huge-width;\n\t}\n\t.navbar--product-container {\n\t\tleft: @sidebar-huge-width;\n\t\twidth: @product-dropdown-huge-width;\n\t}\n\t.navbar--search {\n\t\tleft: @search-huge-position;\n\t\twidth: @search-huge-width;\n\t}\n}\n",".algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu {\n\tright: 0 !important;\n\tleft: auto !important;\n\toverflow: scroll !important;\n\tmax-height: 90vh !important;\n\n\t&:before {\n\t\tdisplay: none;\n\t}\n}\n\n.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion {\n &--wrapper { padding: .2rem 0; }\n &--subcategory-column { display: none; }\n &--content {\n padding: .75rem;\n width: 100%;\n float: none;\n &:before {\n display: none;\n }\n }\n}\n\n.algolia-autocomplete .algolia-docsearch-footer {\n padding: 0;\n}\n\n@media (min-width: 1330px) {\n\t.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu {\n\t\tright: auto !important;\n\t\tleft: 0 !important;\n\t}\n}\n\n@media (max-width: 768px) {\n\t.algolia-docsearch-suggestion--subcategory-column {\n\t\tdisplay: none !important;\n\t}\n\t.algolia-docsearch-suggestion--wrapper {\n\t\tmargin: .25em 0 !important;\n\t}\n}\n\n@media (max-width: 570px) {\n\t.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu {\n\t\tposition: fixed !important;\n\t\ttop: 3.5em !important;\n\t\tleft: 0;\n\t\tmin-width: 100vw;\n\t}\n}\n","/*\n\n SIDEBAR\n\n ____________________________________________________________\n\n Notes:\n - Only contains styles relevant to the sidebar module\n - .sidebar--toggle only appears on small screens\n\n*/\n\n.sidebar--toggle {\n padding: 1em;\n position: relative;\n z-index: @z-sidebar--toggle;\n height: @sidebar--toggle-height;\n width: 100%;\n background-color: @g6-smoke;\n text-align: left;\n font-style: italic;\n color: @g18-cloud;\n font-weight: 500;\n transition:\n background-color 0.25s ease,\n color 0.25s ease;\n\n &:hover {\n color: @g20-white;\n background-color: @g7-graphite;\n cursor: pointer;\n }\n\n &:before,\n &:after {\n content: \"\";\n position: absolute;\n display: block;\n right: 1em;\n top: 1.45em;\n height: 2px;\n width: 15px;\n background: @g11-sidewalk;\n }\n\n &:before {\n transform: rotate(90deg);\n transition: all .2s;\n }\n\n &.open:before {\n transform: rotate(180deg);\n }\n}\n\n.sidebar {\n background-color: @sidebar-bg;\n height: 100%;\n overflow: hidden;\n transition: max-height 0.2s ease-out;\n\n &::-webkit-scrollbar { background-color: @sidebar-bg; width: @scrollbar-width; }\n &::-webkit-scrollbar-track { background-color: @sidebar-bg; }\n &::-webkit-scrollbar-thumb { border: 4px solid @sidebar-bg; background-color: @sidebar-scrollbar; border-radius: @scrollbar-width/2; }\n\n &.open {\n max-height: 4000px;\n transition: max-height 0.5s ease-in;\n }\n\n &--section {\n border-top: 2px solid @sidebar-divider;\n padding: 2em 0;\n\n &:first-child {\n border: none;\n }\n\n &-title {\n color: @sidebar-title-color;\n padding: 0 2rem 1em 2rem;\n font-size: 1.25em;\n\n a:link,\n a:active,\n a:visited {\n color: @sidebar-title-color;\n font-weight: 400;\n }\n a:hover {\n color: @sidebar-hover;\n }\n }\n\n ul {\n padding-left: 3rem;\n li {\n position: relative;\n margin-bottom: .25rem;\n }\n }\n }\n}\n\nul.sidebar--children {\n // padding-left: 1.5rem;\n margin-left: -1.85rem;\n height: 0;\n overflow: hidden;\n\n &.open {\n height: auto;\n overflow: visible;\n border-left: 2px solid @sidebar-divider;\n }\n\n & li:first-child {\n margin-top: .25rem;\n }\n}\n\n.sidebar--children-toggle {\n position: absolute;\n left: -2.25rem;\n top: .2rem;\n height: .9rem;\n width: .9rem;\n background: @sidebar-toggle-bg;\n border-radius: 50%;\n transition: all .2s;\n\n &:before {\n content: \"+\";\n color: @sidebar-toggle-icon;\n display: block;\n text-align: center;\n }\n\n &.open:before {\n content: \"–\";\n }\n\n &:hover {\n background: @sidebar-title-color;\n &:before {\n color: @g20-white;\n }\n }\n}\n\na.sidebar--page {\n &:link,\n &:active,\n &:visited {\n display: inline-block;\n color: @sidebar-text;\n font-weight: 500;\n text-indent: -1rem;\n line-height: 1.25;\n }\n &:hover {\n color: @sidebar-hover;\n }\n}\n\n//\n// Media Queries\n// --------------------------------------------------\n@media (max-width: @breakpoint-small) {\n .sidebar {\n height: auto;\n max-height: 0;\n }\n}\n\n@media (min-width: @breakpoint-small) {\n .sidebar--toggle {\n display: none;\n }\n .sidebar,\n .sidebar.open {\n position: fixed;\n z-index: @z-sidebar-desktop;\n width: @sidebar-small-width;\n transform: none;\n transition: none;\n top: @nav-height;\n max-height: 100%;\n overflow: auto;\n padding-bottom: @nav-height;\n }\n}\n@media (min-width: @breakpoint-large) {\n .sidebar,\n .sidebar.open {\n width: @sidebar-large-width;\n }\n}\n@media (min-width: @breakpoint-huge) {\n .sidebar,\n .sidebar.open {\n width: @sidebar-huge-width;\n }\n .sidebar--support-ad {\n padding: 2rem 1.5rem;\n\n &--desc {\n font-size: 1.2em;\n }\n }\n}\n","#sidebar--ad {\n margin: -0.75rem 1rem;\n border-radius: @radius;\n\n &.cloud {\n background: linear-gradient(45deg, #9394FF, #22ADF6);\n padding: 1.5rem 1.5rem;\n text-align: center;\n\n .text {\n margin: 0 0 1rem 0;\n color: @g20-white;\n line-height: 1.3em;\n font-size: 1.1em;\n font-weight: 500;\n }\n\n .cta {\n margin-left: 0;\n margin-right: 0;\n border-radius: @radius;\n color: @g20-white;\n border: 2px solid fadeout(@g20-white, 60%);\n background-color: transparent;\n transition:\n background-color 0.25s ease,\n border-color 0.25s ease;\n padding: 0.75em 1.5em;\n font-weight: 700;\n display: inline-block;\n font-size: 1.125em;\n\n &:hover {\n background-color: fadeout(@g20-white, 85%);\n border-color: fadeout(@g20-white, 40%)\n }\n }\n }\n\n &.enterprise {\n background: linear-gradient(to right, @c-rainforest,@c-pool);\n padding: 1.5rem 1.5rem;\n text-align: center;\n\n .text {\n margin: 0 0 1rem 0;\n color: @g20-white;\n line-height: 1.3em;\n // font-size: 1.2em;\n font-weight: 500;\n }\n\n .cta {\n margin-left: 0;\n margin-right: 0;\n border-radius: @radius;\n color: @g20-white;\n border: 2px solid fadeout(@g20-white, 60%);\n background-color: transparent;\n transition:\n background-color 0.25s ease,\n border-color 0.25s ease;\n padding: 0.75em 1.5em;\n font-weight: 700;\n display: inline-block;\n font-size: 1.125em;\n\n &:hover {\n background-color: fadeout(@g20-white, 85%);\n border-color: fadeout(@g20-white, 40%)\n }\n }\n }\n\n &.influx-days {\n padding: 1rem;\n background: url(\"/promos/assets/influx-days-bg.jpg\");\n background-repeat: no-repeat;\n background-size: cover;\n color: @g20-white;\n font-weight: bold;\n\n img {\n margin: .4rem 0 .8rem;\n }\n\n .text {\n font-size: 1.75rem;\n margin-bottom: .5rem;\n }\n .details {\n font-size: .9rem;\n line-height: 1.1rem;\n }\n .cta {\n display: inline-block;\n margin-top: .85rem;\n color: @g20-white;\n background: #5CBB47;\n font-size: 1.15rem;\n padding: .45rem 1.75rem;\n border-radius: @radius;\n }\n }\n}\n","/*\n\n\tINDIVIDUAL ARTICLE\n\n\t____________________________________________________________\n\n\tNotes:\n\t-\tTypography uses a type scale of 1.3\n\t-\tI've made use of EMs such that you can proportionally scale the type\n\t\tby changing the font size on .page using REMs as the unit\n\n\n*/\n\n::selection {\n\tbackground-color: @default-selection-bg;\n\tcolor: @default-selection-text; /* WebKit/Blink Browsers */\n}\n::-moz-selection {\n\tbackground-color: @default-selection-bg;\n\tcolor: @default-selection-text; /* Gecko Browsers */\n}\na {\n\ttext-decoration: none;\n\ttransition: color 0.2s ease;\n\n\t&:hover {\n\t\tcursor: pointer;\n\t}\n}\n\n.article {\n\tbackground-color: @article-bg;\n\toverflow: auto;\n\twidth: 100%;\n\n\t&::-webkit-scrollbar { background-color: @article-bg; width: @scrollbar-width; }\n\t&::-webkit-scrollbar-track { background-color: @article-bg; }\n\t&::-webkit-scrollbar-thumb { border: 4px solid @article-bg; background-color: @article-scrollbar; border-radius: @scrollbar-width/2; }\n\n}\n.article-section {\n\tdisplay: block;\n\twidth: 100%;\n\ttext-align: center;\n\tpadding: 2rem;\n\n\t&.article-heading {\n\t\tbackground-color: @article-bg-heading;\n\t\tbackground-position: center center;\n\t\tbackground-size: cover !important;\n\t\tbackground-repeat: no-repeat;\n\n\t\th1 {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t}\n\n\t&.article-footer {\n\t\t.gradient-v(@article-bg-footer,@article-bg);\n\t}\n}\n.article-content {\n\ttext-align: left;\n\twidth: 100%;\n\tmax-width: 760px;\n\tcolor: @article-text;\n\n\ta:link,\n\ta:active,\n\ta:visited {\n\t\tfont-weight: 700;\n\t\tcolor: @default-link-color;\n\t}\n\ta:hover {\n\t\tcolor: @default-link-hover;\n\t\tcursor: pointer;\n\t}\n\ta.top {\n\t\tfont-size: 6px;\n\t\tpadding: .25rem .25rem .35rem;\n\t\tborder-radius: @radius;\n\t\ttransition: all .2s;\n\t\t&:hover {\n\t\t\tcolor: @article-bg !important;\n\t\t\tbackground: @default-link-hover;\n\t\t}\n\t}\n\ta.off-page:link:after {\n\t\tcontent: '\\ea43';\n\t\tfont-family: 'icomoon';\n\t\tfont-size: .75em;\n\t\tfont-weight: normal;\n\t\tvertical-align: bottom;\n\t\tdisplay: inline;\n\t\tmargin-left: .5em;\n\t\topacity: .25;\n\t\ttransition: color 0.2s ease;\n\t\tcolor: @default-text-color;\n\t}\n\tp,li {\n\t\ta {\n\t\t\tcode {\n\t\t\t\tposition: relative;\n\t\t\t\t&:after {\n\t\t\t\t\tcontent: \"\";\n\t\t\t\t\tposition: absolute;\n\t\t\t\t\ttop: -1px;\n\t\t\t\t\tright: -1px;\n\t\t\t\t\twidth: 0;\n\t\t\t\t\theight: 0;\n\t\t\t\t\tborder-style: solid;\n\t\t\t\t\tborder-width: 0 .5em .5em 0;\n\t\t\t\t\tborder-color: transparent @article-code-color transparent transparent;\n\t\t\t\t\topacity: .5;\n\t\t\t\t\ttransition: all .2s;\n\t\t\t\t}\n\t\t\t\t&:hover:after {\n\t\t\t\t\topacity: 1;\n\t\t\t\t\tborder-color: transparent @default-link-hover transparent transparent;\n\t\t\t\t}\n\t\t\t}\n\t\t\t&.btn {\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tcolor: @g20-white;\n\t\t\t\tfont-size: .95rem;\n\t\t\t\tpadding: .5em 1em;\n\t\t\t\tmargin: 1em 0 1.5em;\n\n\t\t\t\t&.download:before {\n\t\t\t\t\tcontent: '\\e964';\n\t\t\t\t\tfont-family: 'icomoon';\n\t\t\t\t\tfont-size: 1.15em;\n\t\t\t\t\tfont-weight: normal;\n\t\t\t\t\tvertical-align: bottom;\n\t\t\t\t\tdisplay: inline;\n\t\t\t\t\tmargin-right: .5em;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t> * {\n\t\ttext-decoration: none;\n\t}\n\th1,\n\th2,\n\th3,\n\th4,\n\tp,\n\tul,\n\tol,\n\tli,\n\tblockquote,\n\t.note,\n\tdt,\n\t.warn,\n\tpre {\n\t\tdisplay: block;\n\t\tmargin-bottom: @margin-bottom-base;\n\t\tline-height: 1.45em;\n\t}\n\ttable {\n\t\tmargin: 1em 0 @margin-bottom-base;\n\t\toverflow-x: auto;\n\t\tbackground-color: @article-bg;\n\t}\n\n\t/* Headings */\n\th1,h2,h3,h4,h5,h6 {\n\t\twidth: 100%;\n\t\tcolor: @article-text-heading;\n\n\t\t/* Offset trick to prevent anchors being obscured by the navbar */\n\t\ta.offset-anchor {\n\t\t\tdisplay: block;\n\t\t\tposition: relative;\n\t\t\ttop: -120px;\n\t\t\tvisibility: hidden;\n\t\t}\n\n\t\t/* Maintain heading styles when anchors are present */\n\t\ta:link,\n\t\ta:active,\n\t\ta:visited,\n\t\ta:hover {\n\t\t\ttext-decoration: none;\n\t\t\tfont-weight: inherit;\n\t\t\tcolor: @article-text-heading !important;\n\t\t}\n\t\t&:first-child {\n\t\t\tmargin-top: 0;\n\t\t}\n\t}\n\th1 {\n\t\tfont-size: @heading1Size;\n\t\t.klavika-font;\n\t\tline-height: 1.2em;\n\t}\n\th2 {\n\t\tfont-size: @heading2Size;\n\t\tfont-weight: 600;\n\t\tmargin: 1.5em 0 .5em;\n\t}\n\th3 {\n\t\tfont-size: @heading3Size;\n\t\tfont-weight: 700;\n\t\tmargin: 1em 0 .5em;\n\t}\n\th4 {\n\t\tfont-size: @heading4Size;\n\t\tfont-weight: 400;\n\t\tfont-style: italic;\n\t\tmargin: 1.25em 0 .5em;\n\t}\n\th5 {\n\t\tline-height: 1.6em;\n\t}\n\th6 {\n\t\tfont-size: @paragraphSize*.95;\n\t\tfont-style: italic;\n\t\tline-height: 1.6em;\n\t}\n\n\t&.section-landing{\n\t\th2 a.off-page:link:hover {\n\t\t\tcolor: @default-link-color !important;\n\t\t}\n\t}\n\n\t/* Markdown Elements */\n\tp {\n\t\tfont-size: 1em;\n\t}\n\tol,ul {\n\t\tfont-size: 1em;\n\t\tpadding-left: 1.125em;\n\n\t\tli {\n\t\t\tdisplay: list-item;;\n\t\t\tlist-style-position: outside;\n\t\t\tpadding-left: 0.5em;\n\t\t\tmargin-bottom: .25em;\n\t\t}\n\t\tp {\n\t\t\tmargin-left: 0;\n\t\t}\n\t}\n\tul > li {\n\t\tlist-style-type: disc !important;\n\t}\n\tol li,\n\tul ol li {\n\t\tlist-style-type: decimal;\n\t}\n\tol ol li {\n\t\tlist-style-type: lower-alpha;\n\t}\n\tol ol ol li {\n\t\tlist-style-type: decimal;\n\t}\n\tul ul ul li {\n\t\tlist-style-type: square;\n\t}\n\tli:last-child {\n\t\tmargin-bottom: 0;\n\t}\n\tol ol,\n\tul ul,\n\tol ul,\n\tul ol {\n\t\twidth: 100%;\n\t\tmargin-left: 0;\n\t\tmargin-bottom: 0;\n\t\tmargin-top: .25em;\n\t}\n\thr {\n\t\twidth: 100%;\n\t\theight: 2px;\n\t\tmargin-top: 0.25em;\n\t\tmargin-bottom: 1em;\n\t\tborder: none;\n\t\tdisplay: block;\n\t\tbackground-color: @article-line-color;\n\t}\n\timg {\n\t\tmax-width: 100%;\n\t\theight: auto;\n\t\tborder-radius: @radius;\n\t}\n\ttd,\n\tth {\n\t\tborder: @border-small-screen solid @article-line-color;\n\t\tfont-size: 0.875em;\n\t\tline-height: 1.2em;\n\t\tpadding: 0.75em 1.5em;\n\t}\n\ttr:nth-child(even) {\n\t\tbackground-color: @article-bg-darken;\n\t}\n\tthead {\n\t\ttr {\n\t\t\tbackground-color: @article-bg-highlight !important;\n\t\t}\n\t\tth {\n\t\t\tpadding: 1.25em 1.5em;\n\t\t}\n\t}\n\t/* Notes
    and Gotchas
    */\n\tdt,\n\t.warn,\n\tblockquote,\n\t.note {\n\t\tfont-size: @smallTextSize;\n\t\tpadding: 1em 1.5em;\n\t\tborder-radius: @radius;\n\t\tborder-style: solid;\n\t\tborder-left-width: @thick-left-border;\n\n\t\tpre,h4,p,ol,ul {\n\t\t\twidth: 100%;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t> *:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.tooltip {\n\t\t\tcolor: @article-tooltip-nested;\n\t\t}\n\t}\n\tblockquote,\n\t.note {\n\t\tfont-style: italic;\n\t\tcolor: @article-note-text;\n\t\tborder-color: @article-note-border;\n\t\tbackground-color: @article-note-bg;\n\t\tcode {\n\t\t\tcolor: @article-note-code;\n\t\t\tbackground: @article-note-code-bg;\n\t\t\tborder: 1px solid @article-note-code-border;\n\t\t}\n\t\tpre {\n\t\t\tbackground: @article-note-code-bg;\n\t\t\tborder-color: @article-note-code-border;\n\t\t\tcode { border: none; }\n\t\t}\n\t}\n\tdt,\n\t.warn {\n\t\tcolor: @article-gotcha-text;\n\t\tborder-color: @article-gotcha-border;\n\t\tbackground-color: @article-gotcha-bg;\n\t\tcode {\n\t\t\tcolor: @article-gotcha-code;\n\t\t\tbackground: @article-gotcha-code-bg;\n\t\t\tborder: 1px solid @article-gotcha-code-border;\n\t\t}\n\t\tpre {\n\t\t\tbackground: @article-gotcha-code-bg;\n\t\t\tborder-color: @article-gotcha-code-border;\n\t\t\tcode { border: none; }\n\t\t}\n\t}\n\t/* Inline Code & Code Blocks */\n\tcode {\n\t\tfont-family: Consolas, \"Lucida Console\", Monaco, monospace;\n\t\t-moz-tab-size: 1;\n\t\t-o-tab-size: 1;\n\t\ttab-size: 1;\n\t\tdirection: ltr;\n\t\t-webkit-hyphens: none;\n\t\t-moz-hyphens: none;\n\t\t-ms-hyphens: none;\n\t\thyphens: none;\n\t\tfont-size: @tinyTextSize !important;\n\t\tfont-style:normal !important;\n\t\tdisplay: inline;\n\t\tborder-radius: @radius;\n\t\tborder-width: @border-small-screen;\n\t\tborder-color: @article-code-border;\n\t\tborder-style: solid;\n\t\tpadding: 0.1em 0.5em;\n\t\t-webkit-font-smoothing: subpixel-antialiased !important;\n\t\t-moz-osx-font-smoothing: auto !important;\n\t\tfont-weight: 400 !important;\n\t\tcolor: @article-code-color;\n\t\tbackground-color: @article-code-bg;\n\t}\n\tpre {\n\t\tdisplay: block;\n\t\tpadding: 0.75em 1em;\n\t\toverflow: auto;\n\t\tborder-radius: @radius;\n\t\tborder-style: solid;\n\t\tborder-width: @border-small-screen @border-small-screen @border-small-screen @thick-left-border;\n\t\tbackground-color: @article-code-bg;\n\t\tborder-color: @article-code-border;\n z-index: 99;\n\t\tline-height: 1.1em !important;\n\n\t\tcode {\n\t\t\twhite-space: pre;\n\t\t\tword-spacing: normal;\n\t\t\tword-break: normal;\n\t\t\tborder: none;\n\t\t\tpadding: 0;\n\t\t\tborder-radius: 0;\n\t\t\tbackground-color: transparent;\n\t\t}\n\n\t\t&::-webkit-scrollbar { background-color: @article-code-bg;width: @scrollbar-width; }\n\t\t&::-webkit-scrollbar-track { background-color: @article-code-bg; }\n\t\t&::-webkit-scrollbar-thumb {\n\t\t\tborder: 4px solid @article-code-bg;\n\t\t\tbackground-color: @article-code-scrollbar;\n\t\t\tborder-radius: calc(@scrollbar-width / 2);\n\t\t}\n\t}\n}\n\n.page-nav-btns {\n\tdisplay: flex;\n\tposition: relative;\n\tjustify-content: space-between;\n\tmargin: 3em 0 2em;\n\n\ta {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolor: @g20-white !important;\n\t\tfont-size: .95rem;\n\t\tpadding: .75rem 1rem;\n\t\tmargin: 0 .15rem;\n\n\t\t&.prev {\n\t\t\tposition: absolute;\n\t\t\tleft: 0;\n\t\t\t&:before {\n\t\t\t\tcontent: '\\e804';\n\t\t\t\tfont-family: 'icomoon';\n\t\t\t\tfont-size: .85rem;\n\t\t\t\tfont-weight: normal;\n\t\t\t\tvertical-align: middle;\n\t\t\t\tdisplay: inline;\n\t\t\t\tmargin-right: .85rem;\n\t\t\t}\n\t\t}\n\n\t\t&.next {\n\t\t\tposition: absolute;\n\t\t\tright: 0;\n\t\t\t&:after {\n\t\t\t\tcontent: '\\e805';\n\t\t\t\tfont-family: 'icomoon';\n\t\t\t\tfont-size: .85rem;\n\t\t\t\tfont-weight: normal;\n\t\t\t\tvertical-align: middle;\n\t\t\t\tdisplay: inline;\n\t\t\t\tmargin-left: .85rem;\n\t\t\t}\n\t\t}\n\t}\n}\n\n//\n// Content truncater\n// --------------------------------------------------\n\n.truncate {\n\tposition: relative;\n\tmargin-bottom: 3.5rem;\n\n\t.truncate-bottom {\n\t\tposition: absolute;\n\t\tbottom: -30px;\n\t\twidth: 100%;\n\t\tz-index: 100%;\n\t\theight: auto;\n\t}\n\n\ta.truncate-toggle {\n\t\tdisplay: block;\n\t\twidth: 100px;\n\t\tmargin: 0 auto;\n\t\tcolor: @article-text;\n\t\tbackground: @article-bg;\n\t\tpadding: .45rem;\n\t\ttext-align: center;\n\t\tfont-size: .75rem;\n\t\ttext-transform: uppercase;\n\t\tborder-radius: @radius;\n\t\ttransition: color .2s;\n\t\t&:before{\n\t\t\tcontent: \"Show Less\"\n\t\t}\n\t\t&:hover {\n\t\t\tcolor: @default-link-color;\n\t\t}\n\t}\n\t&.closed {\n\t\tmin-height: 200px;\n\t\tmax-height: 25vh;\n\t\toverflow: hidden;\n\n\t\t.truncate-bottom {\n\t\t\tbottom: 0;\n\t\t\tbackground-image: linear-gradient(to bottom, @article-bg-rgba-0, @article-bg-rgba-1);\n\t\t\theight: 100px;\n\t\t}\n\n\t\ta.truncate-toggle {\n\t\t\tmargin-top: 75px;\n\t\t\t&:before {\n\t\t\t\tcontent: \"Show More\"\n\t\t\t}\n\t\t}\n\t}\n}\n\n//\n// Tooltips\n// --------------------------------------------------\n.tooltip {\n\tposition: relative;\n\tdisplay: inline-block;\n\tz-index: 10;\n\tfont-weight: 900;\n\tcolor: @article-tooltip;\n}\n.tooltip-container {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 50%;\n\ttransform: translateX(-50%);\n\toverflow: visible;\n\tvisibility: hidden;\n}\n.tooltip-text {\n\tfont-weight: 600;\n\tline-height: 2em;\n\theight: 2em;\n\tposition: absolute;\n\tborder-radius: @radius;\n\tpadding: 0 0.75em;\n\tfont-size: 0.9rem;\n\tleft: 50%;\n\ttransform: translate(-50%,-1.875rem);\n\ttransition: all 0.2s ease;\n\twhite-space: nowrap;\n\topacity: 0;\n\tfont-style: normal !important;\n\tcolor: @article-tooltip-text;\n\tbackground-color: @article-tooltip-bg;\n}\n.tooltip-text:after {\n\tcontent: '';\n\tposition: absolute;\n\tleft: 50%;\n\tbottom: -14px;\n\ttransform: translateX(-50%);\n\tborder-top: 8px solid @article-tooltip-bg;\n\tborder-right: 8px solid transparent;\n\tborder-bottom: 8px solid transparent;\n\tborder-left: 8px solid transparent;\n}\n.tooltip:hover .tooltip-container {\n\tvisibility: visible;\n}\n.tooltip:hover .tooltip-text {\n\topacity: 1;\n\ttransform: translate(-50%,-2rem);\n}\n\n//\n// Old Version Warning\n// --------------------------------------------------\n.old-version {\n\twidth: 100%;\n\tdisplay: inline-block;\n\tborder-radius: @radius;\n\tfont-size: 1em;\n\tline-height: 1.25em;\n\tpadding: 1.5em 1.5em 1.5em 4em;\n\tcolor: @old-version-text;\n\tbackground-color: @old-version-bg;\n\tposition: relative;\n\tmargin-bottom: 1em;\n\n\t&:after {\n\t\tcontent: \"\\ea0a\";\n\t\tfont-family: 'icomoon';\n\t\tposition: absolute;\n\t\ttop: 50%;\n\t\tleft: 2em;\n\t\ttransform: translate(-50%,-50%) scale(1.5,1.5);\n\t\tfont-size: 1em;\n\t}\n}\n\n//\n// Landing Page h2s\n// --------------------------------------------------\n.section-landing{\n\th2.no-paragraph {\n\t\tmargin: 0 0 1rem;\n\t\tborder: none;\n\t}\n}\n\n//\n// View in Chronograph Button\n// --------------------------------------------------\n.view-in-chronograf {\n\tdisplay: flex;\n\tjustify-content: flex-end;\n\tposition: relative;\n\tbackground-color: @article-code-border;\n\tmargin-top: -1.1rem;\n\tmargin-bottom: 1rem;\n\tpadding: .15rem;\n\tfont-size: .8rem;\n\tborder-radius: 0 0 @radius @radius;\n\talign-items: center;\n\n\t.chronograf-btn {\n\t\tdisplay: inline-block;\n\t\tpadding: .45rem .6rem;\n\t\tcolor: #fff !important;\n\t\tbackground: linear-gradient(to left, @chronograf-dropdown-gradient-a, @c-pool);\n\t\tborder-radius: calc(~\"\"@radius~\" / 2\");\n\t\ttransition: all .5s ease;\n\n\t\t&:after {\n\t\t\tcontent: '\\e801';\n\t\t\tmargin-left: .4rem;\n\t\t\tfont-family: 'icomoon';\n\t\t}\n\n\t\t&:hover {\n\t\t\tcolor: #fff !important;\n\t\t\topacity: 1;\n\t\t}\n\t}\n\n\t.settings {\n\t\topacity: .25;\n\t\tcolor: @article-text !important;\n\t\tmargin-right: .75em;\n\t\ttransition: opacity .2s ease;\n\n\t\t&:hover {\n\t\t\topacity: 1;\n\t\t}\n\t}\n}\n\n// Modal Styles\n.modal-overlay {\n\tdisplay: none;\n position: fixed;\n z-index: 1000;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n overflow: auto;\n\topacity: .75;\n background: linear-gradient(@chronograf-dropdown-gradient-a, @chronograf-dropdown-gradient-b)\n}\n\n.modal-content {\n\tdisplay: none;\n\tbackground: @article-bg;\n\tpadding: 2rem 2rem 1.5rem;\n\tborder-radius: @radius;\n\tposition: fixed;\n\ttop: 10vh;\n\tleft: 50%;\n\ttransform: translateX(-50%);\n\tz-index: 1001;\n\twidth: 90vw;\n\tmax-width: 38rem;\n\ttransition: top .4s ease;\n\n\t&.open {\n\t\ttop: 40vh;\n\t}\n\n\tinput {\n\t\twidth: 100%;\n\t\tmin-width: 10rem;\n\t\tborder-radius: @radius;\n\t\tborder: 2px solid @modal-input-bg;\n\t\tbackground-color: @modal-input-bg;\n\t\tpadding: .5rem;\n\t\tfont-weight: 400;\n\t\tfont-size: 1rem;\n\t\toutline: none;\n\t\ttransition:\n\t\t\tborder-color 0.3s ease,\n\t\t\tcolor 0.3s ease;\n\t\t&:focus {\n\t\t\tborder-color: @nav-search-border-focus;\n\t\t}\n\t}\n\n\tbutton {\n\t\tborder: none;\n\t\toutline: none;\n\t\t&:focus {\n\t\t\tbackground: @chronograf-dropdown-gradient-b !important;\n\t\t}\n\t}\n\n\tlabel {\n\t\tdisplay: block;\n\t\tmargin-bottom: .4rem;\n\t\tfont-weight: 600;\n\t}\n}\n\n#default-chronograf-url {\n\tdisplay: inline-block;\n\tmargin: .5rem 0 0 .25rem;\n\tfont-size: .8rem;\n\tfont-style: italic;\n\tfont-weight: 400;\n\n\t&:hover {\n\t\ttext-transform: underline;\n\t}\n}\n\n.flex-form {\n\tdisplay: flex;\n\tjustify-content: space-between;\n\n\t.save-btn {\n\t\twidth: 5.5rem;\n\t\tmargin: 0 0 0 .25rem;\n\t\ttext-align: center;\n\t\tpadding: .75rem 1rem;\n\t\tcolor: #fff;\n\t\tborder-radius: @radius;\n\t\tfont-weight: 600;\n\t\ttransition: background .2s;\n\t}\n}\n\n//\n// Chronograf modal media queries\n// --------------------------------------------------\n@media (max-width: 500px) {\n\t.flex-form {\n\t\tflex-flow: column;\n\t\t.save-btn {\n\t\t\twidth: 100%;\n\t\t\tmargin: .25rem 0 0;\n\t\t}\n\t}\n\t#default-chronograf-url {\n\t\tdisplay: block;\n\t\tmargin: 1rem auto 0;\n\t}\n}\n\n#save-chronograf-url button {\n\tbackground: @chronograf-link;\n\t&:hover {\n\t\tbackground: @chronograf-dropdown-gradient-b;\n\t}\n}\n\n//\n// Media Queries\n// --------------------------------------------------\n@media (min-width: @breakpoint-small) {\n\t.article {\n\t\tpadding-left: @sidebar-small-width;\n\t}\n\t.article-section {\n\t\tpadding: 3rem;\n\t}\n\t.article-content {\n\t\tcode,\n\t\tpre,\n\t\ttd,\n\t\tth {\n\t\t\tborder-width: @border-large-screen;\n\t\t}\n\t\tpre {\n\t\t\tborder-left-width: @thick-left-border;\n\t\t}\n\t}\n}\n@media (min-width: @breakpoint-large) {\n\t.article {\n\t\tpadding-left: @sidebar-large-width;\n\t}\n\t.article-section {\n\t\tpadding: 4.5rem;\n\t}\n\t.old-version {\n\t\twidth: 60%;\n\t}\n}\n@media (min-width: @breakpoint-huge) {\n\t.article {\n\t\tpadding-left: @sidebar-huge-width;\n\t}\n\t.article-section {\n\t\tpadding: 5rem 11rem;\n\t}\n\t.article-content {\n\t\tfont-size: 1.125rem;\n\t}\n}\n","/*\n\n\tHOME\n\n\t____________________________________________________________\n\n\tNotes:\n\t-\tSimple index view with links to the different products\n\n*/\n.homepage {\n\toverflow: auto;\n\tmin-height: calc(100vh - @nav-height);\n\twidth: 100%;\n\tz-index: 2;\n\t.gradient-h(@g4-onyx,@g0-obsidian);\n\tfont-size: 0;\n\tdisplay: flex;\n\tflex-direction: column;\n\tflex-wrap: wrap;\n\tjustify-content: space-between;\n\n\t.cards-special, .cards-oss, .cards-enterprise {\n\t\tdisplay: flex;\n\t\tflex-direction: row;\n\t\twidth: 100%;\n\t\tflex-wrap: wrap;\n\t\tflex: 1;\n\t}\n\n\t&--card {\n\t\twidth: 100%;\n\t\tdisplay: inline-block;\n\t\toverflow: hidden;\n\t\tposition: relative;\n\n\t\t&-mask {\n\t\t\tposition: absolute;\n\t\t\ttop: 0;\n\t\t\tleft: 0;\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t\topacity: 0.1;\n\t\t\ttransition:\n\t\t\t\topacity 0.75s ease,\n\t\t\t\ttransform 0.75s ease;\n\t\t\tz-index: 1;\n\t\t\tbackground-attachment: scroll;\n\t\t\tbackground-size: cover;\n\t\t\tbackground-position: center center;\n\t\t\tbackground-repeat: no-repeat;\n\t\t\ttransform: scale(1,1);\n\t\t}\n\t\t&:hover {\n\t\t\t.homepage--card-mask {\n\t\t\t\topacity: 1;\n\t\t\t\ttransform: scale(1.2,1.2);\n\t\t\t}\n\t\t\t.homepage--card-title {\n\t\t\t\tcolor: @g20-white !important;\n\t\t\t}\n\t\t}\n\n\t\t&-container {\n\t\t\tposition: relative;\n\t\t\tz-index: 2;\n\t\t\twidth: 100%;\n\t\t\tdisplay: inline-block;\n\t\t\ttext-align: center;\n\t\t\tpadding: 4rem 3rem;\n\t\t\tfont-size: 0;\n\n\t\t\ta:link,\n\t\t\ta:active,\n\t\t\ta:visited {\n\t\t\t\tcolor: @default-link-color;\n\t\t\t\ttransition: color 0.25s ease;\n\t\t\t\ttext-decoration: none;\n\t\t\t}\n\t\t\ta:hover {\n\t\t\t\tcolor: @default-link-hover;\n\t\t\t}\n\t\t}\n\t\t&-title,\n\t\t&-description {\n\t\t\ttext-align: left;\n\t\t\tdisplay: inline-block;\n\t\t\twidth: 100%;\n\t\t\tvertical-align: middle;\n\t\t}\n\t\t&-title {\n\t\t\tfont-size: 2rem;\n\t\t\tfont-family: Klavika-Light, sans-serif;\n\t\t\tfont-weight: 200;\n\t\t\tfont-style: italic;\n\t\t\tcolor: @sidebar-title-color;\n\t\t\tmargin-bottom: 0.5em;\n\t\t\ttransition: color 0.75s ease;\n\t\t}\n\t\t&-description {\n\t\t\tfont-size: 1rem;\n\t\t\tcolor: @article-text;\n\t\t\tline-height: 1.4em;\n\t\t\tfont-weight: 400;\n\t\t}\n\t\t&-link {\n\t\t\tdisplay: inline-block;\n\t\t\tfont-size: 0.875rem;\n\t\t\tfont-weight: 600;\n\t\t\tmargin-left: 0.25rem;\n\t\t\tpadding: 2px 11px;\n\t\t\tborder-radius: 3px;\n\n\t\t\t&:first-of-type {\n\t\t\t\tmargin-top: 1rem;\n\t\t\t}\n\t\t}\n\n\t\t// Themes\n\t\t&.card-telegraf {\n\t\t\t.homepage--card-mask {\n\t\t\t\tbackground-image: url(/img/home-telegraf.svg);\n\t\t\t\tbackground-color: @c-curacao;\n\t\t\t}\n\t\t\t.homepage--card-description {\n\t\t\t\tcolor: @g20-white;\n\t\t\t}\n\t\t\t.homepage--card-title {\n\t\t\t\tcolor: @c-dreamsicle;\n\t\t\t}\n\t\t\ta.homepage--card-link:link,\n\t\t\ta.homepage--card-link:active,\n\t\t\ta.homepage--card-link:visited {\n\t\t\t\tcolor: @g20-white;\n\t\t\t\ttransition:\n\t\t\t\t\tbackground-color 0.25s ease,\n\t\t\t\t\tcolor 0.25s ease;\n\t\t\t}\n\t\t\ta.homepage--card-link:hover {\n\t\t\t\tcolor: @c-dreamsicle;\n\t\t\t\tbackground-color: @g20-white;\n\t\t\t}\n\t\t}\n\t\t&.card-influxdb {\n\t\t\t.homepage--card-mask {\n\t\t\t\tbackground-image: url(/img/home-influxdb.svg);\n\t\t\t\tbackground-color: @c-ocean;\n\t\t\t}\n\t\t\t.homepage--card-description {\n\t\t\t\tcolor: @g20-white;\n\t\t\t}\n\t\t\t.homepage--card-title {\n\t\t\t\tcolor: @c-laser;\n\t\t\t}\n\t\t\ta.homepage--card-link:link,\n\t\t\ta.homepage--card-link:active,\n\t\t\ta.homepage--card-link:visited {\n\t\t\t\tcolor: @g20-white;\n\t\t\t\ttransition:\n\t\t\t\t\tbackground-color 0.25s ease,\n\t\t\t\t\tcolor 0.25s ease;\n\t\t\t}\n\t\t\ta.homepage--card-link:hover {\n\t\t\t\tcolor: @c-pool;\n\t\t\t\tbackground-color: @g20-white;\n\t\t\t}\n\t\t}\n\t\t&.card-chronograf {\n\t\t\t.homepage--card-mask {\n\t\t\t\tbackground-image: url(/img/home-chronograf.svg);\n\t\t\t\tbackground-color: @c-star;\n\t\t\t}\n\t\t\t.homepage--card-description {\n\t\t\t\tcolor: @g20-white;\n\t\t\t}\n\t\t\t.homepage--card-title {\n\t\t\t\tcolor: @c-comet;\n\t\t\t}\n\t\t\ta.homepage--card-link:link,\n\t\t\ta.homepage--card-link:active,\n\t\t\ta.homepage--card-link:visited {\n\t\t\t\tcolor: @g20-white;\n\t\t\t\ttransition:\n\t\t\t\t\tbackground-color 0.25s ease,\n\t\t\t\t\tcolor 0.25s ease;\n\t\t\t}\n\t\t\ta.homepage--card-link:hover {\n\t\t\t\tcolor: @c-comet;\n\t\t\t\tbackground-color: @g20-white;\n\t\t\t}\n\t\t}\n\t\t&.card-kapacitor {\n\t\t\t.homepage--card-mask {\n\t\t\t\tbackground-image: url(/img/home-kapacitor.svg);\n\t\t\t\tbackground-color: @c-rainforest;\n\t\t\t}\n\t\t\t.homepage--card-description {\n\t\t\t\tcolor: @g20-white;\n\t\t\t}\n\t\t\t.homepage--card-title {\n\t\t\t\tcolor: @c-rainforest;\n\t\t\t}\n\t\t\ta.homepage--card-link:link,\n\t\t\ta.homepage--card-link:active,\n\t\t\ta.homepage--card-link:visited {\n\t\t\t\tcolor: @g20-white;\n\t\t\t\ttransition:\n\t\t\t\t\tbackground-color 0.25s ease,\n\t\t\t\t\tcolor 0.25s ease;\n\t\t\t}\n\t\t\ta.homepage--card-link:hover {\n\t\t\t\tcolor: @c-rainforest;\n\t\t\t\tbackground-color: @g20-white;\n\t\t\t}\n\t\t}\n\n\t\t&.card-enterprise_kapacitor {\n\t\t\t.homepage--card-mask {\n\t\t\t\tbackground-image: url(/img/home-kapacitor.svg);\n\t\t\t\tbackground-color: @c-rainforest;\n\t\t\t}\n\t\t\t.homepage--card-description {\n\t\t\t\tcolor: @g20-white;\n\t\t\t}\n\t\t\t.homepage--card-title {\n\t\t\t\tcolor: @c-rainforest;\n\t\t\t}\n\t\t\ta.homepage--card-link:link,\n\t\t\ta.homepage--card-link:active,\n\t\t\ta.homepage--card-link:visited {\n\t\t\t\tcolor: @g20-white;\n\t\t\t\ttransition:\n\t\t\t\t\tbackground-color 0.25s ease,\n\t\t\t\t\tcolor 0.25s ease;\n\t\t\t}\n\t\t\ta.homepage--card-link:hover {\n\t\t\t\tcolor: @c-rainforest;\n\t\t\t\tbackground-color: @g20-white;\n\t\t\t}\n\t\t}\n\n\t\t&.card-enterprise_influxdb {\n\t\t\t.homepage--card-mask {\n\t\t\t\tbackground-image: url(/img/home-influxdb.svg);\n\t\t\t\tbackground-color: @c-ocean;\n\t\t\t}\n\t\t\t.homepage--card-description {\n\t\t\t\tcolor: @g20-white;\n\t\t\t}\n\t\t\t.homepage--card-title {\n\t\t\t\tcolor: @c-laser;\n\t\t\t}\n\t\t\ta.homepage--card-link:link,\n\t\t\ta.homepage--card-link:active,\n\t\t\ta.homepage--card-link:visited {\n\t\t\t\tcolor: @g20-white;\n\t\t\t\ttransition:\n\t\t\t\t\tbackground-color 0.25s ease,\n\t\t\t\t\tcolor 0.25s ease;\n\t\t\t}\n\t\t\ta.homepage--card-link:hover {\n\t\t\t\tcolor: @c-pool;\n\t\t\t\tbackground-color: @g20-white;\n\t\t\t}\n\t\t}\n\n\t\t&.card-flux {\n\t\t\t.homepage--card-mask {\n\t\t\t\tbackground-image: url(/img/home-flux.svg);\n\t\t\t\tbackground-color: #15a194;\n\t\t\t\topacity: 1;\n\t\t\t}\n\t\t\t.homepage--card-description {\n\t\t\t\tcolor: @g20-white;\n\t\t\t}\n\t\t\t.homepage--card-title {\n\t\t\t\tcolor: @g20-white ;\n\t\t\t}\n\t\t\ta.homepage--card-link:link,\n\t\t\ta.homepage--card-link:active,\n\t\t\ta.homepage--card-link:visited {\n\t\t\t\tcolor: @g20-white;\n\t\t\t\ttransition:\n\t\t\t\t\tbackground-color 0.25s ease,\n\t\t\t\t\tcolor 0.25s ease;\n\t\t\t\t&.download{\n\t\t\t\t\tdisplay: none;\n\t\t\t\t}\n\t\t\t}\n\t\t\ta.homepage--card-link:hover {\n\t\t\t\tcolor: @c-viridian;\n\t\t\t\tbackground-color: @g20-white;\n\t\t\t}\n\t\t}\n\n\t\t&.card-platform {\n\t\t\twidth: 100%;\n\t\t\tbackground: linear-gradient(to right, @c-ocean, @c-pool);\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\n\t\t\t.homepage--card-container {\n\t\t\t\tpadding-bottom: 3rem;\n\t\t\t}\n\n\t\t\t.homepage--card-mask {\n\t\t\t\tbackground-image: url(/img/home-influxdb.svg);\n\t\t\t\tbackground-color: @c-ocean;\n\t\t\t\topacity: .9;\n\t\t\t}\n\t\t\t.homepage--card-description {\n\t\t\t\tcolor: @g20-white;\n\t\t\t\ttext-align: center;\n\t\t\t}\n\t\t\t.homepage--card-title {\n\t\t\t\tcolor: @g20-white;\n\t\t\t\ttext-align: center;\n\t\t\t\tfont-size: 2.15rem;\n\t\t\t}\n\t\t\ta.homepage--card-link:link,\n\t\t\ta.homepage--card-link:active,\n\t\t\ta.homepage--card-link:visited {\n\t\t\t\tcolor: @g20-white;\n\t\t\t\ttransition:\n\t\t\t\t\tbackground-color 0.25s ease,\n\t\t\t\t\tcolor 0.25s ease;\n\t\t\t}\n\t\t\ta.homepage--card-link:hover {\n\t\t\t\tcolor: @c-pool;\n\t\t\t\tbackground-color: @g20-white;\n\t\t\t}\n\t\t\ta.btn {\n\t\t\t\tmargin: 1.75rem 0 1rem;\n\t\t\t\tpadding: 1em 1.5em;\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tbackground: @g20-white;\n\t\t\t\tcolor: @c-pool;\n\t\t\t\tborder-radius: 3px;\n\t\t\t\tfont-size: 1rem;\n\t\t\t\tfont-weight: bold;\n\t\t\t\ttransition: all .2s;\n\t\t\t\tbox-shadow: 0 0 15px rgba(255,255,255,0);\n\n\t\t\t\t&:hover {\n\t\t\t\t\tbox-shadow: 0 0 15px rgba(255,255,255,1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n/*\n\tMedia Queries\n\t--------------------------------------------------\n*/\n@media (min-width: @breakpoint-small) {\n\t.homepage--card {\n\t\twidth: 50%;\n\t\tflex-grow: 1;\n\t}\n}\n@media (min-width: @breakpoint-large) {\n\t.homepage--card-container {\n\t\tpadding: 3.5rem;\n\t}\n\t.homepage--card-description {\n\t\tfont-size: 1.075rem;\n\t}\n\t.homepage--card {\n\t\twidth: 25%;\n\t\theight: auto;\n\n\t\t&.card-platform {\n\t\t\twidth: 75%;\n\t\t}\n\n\t\t&.card-enterprise_influxdb,\n\t\t&.card-enterprise_kapacitor {\n\t\t\twidth: 50%;\n\t\t}\n\t}\n}\n@media (min-width: @breakpoint-huge) {\n\t.homepage--card-container {\n\t\tpadding: 4rem;\n\t}\n\t.homepage--card-description {\n\t\tfont-size: 1.125rem;\n\t}\n}\n","/*\n\n\tERROR PAGES\n\n\t____________________________________________________________\n\n\tNotes:\n\t-\tSimple index view with links to the different products\n\n*/\n.error-page {\n\toverflow: scroll;\n\ttop: @nav-height;\n\theight: 100%;\n\twidth: 100%;\n\t.gradient-v(@error-bg,@error-bg-accent);\n}\n.error-content {\n\tmargin: 15vh auto;\n\twidth: 85%;\n\tmax-width: 400px;\n\tmin-width: 240px;\n\tfont-size: 15px;\n\tline-height: 19px;\n\tcolor: @error-text;\n\n\th1 {\n\t\tcolor: @error-decor;\n\t\tdisplay: block;\n\t\tmargin: 0 auto 50px;\n\t\tpadding-top: 15px;\n\t\twidth: 212px;\n\t\theight: 212px;\n\t\tborder-radius: 50%;\n\t\ttext-align: center;\n\t\tfont-size: 90px;\n\t\tfont-weight: 200;\n\t\tline-height: 180px;\n\t\tposition: relative;\n\t\tborder: 2px solid @error-decor;\n\n\t\t// &:after {\n\t\t// \tcontent: '';\n\t\t// \tposition: absolute;\n\t\t// \ttop: 50%;\n\t\t// \tleft: 50%;\n\t\t//\n\t\t// \ttransform: translate(-50%,-50%);\n\t\t// \tborder-radius: 50%;\n\t\t//\n\t\t// }\n\t}\n}\n\n.flex {\n\tdisplay: flex;\n\tjustify-content: space-around;\n}\n\n.wayfinding {\n\tmargin-bottom: 2rem;\n}\n\n.btn {\n\tdisplay: block;\n\tpadding: .5rem;\n\tbackground: @error-decor;\n\tcolor: #fff;\n\tborder-radius: @radius;\n\ttext-align: center;\n\ttransition: background .2s;\n\n\t&.back {\n\t\tflex-grow: 1;\n\t\tmargin-right: .35rem;\n\n\t\t&:before {\n\t\t\tcontent: \"\\ea41\";\n\t\t\tfont-family: 'icomoon';\n\t\t\tmargin-right: .5rem;\n\t\t\tfont-size: 1rem;\n\t\t}\n\t}\n\n\t&.project{\n\t\tflex-grow: 3;\n\t\tdisplay: none;\n\n\t\t&:before {\n\t\t\tcontent: \"\\e801\";\n\t\t\tfont-family: 'icomoon';\n\t\t\tmargin-right: .5rem;\n\t\t\tflex-grow: 3;\n\t\t}\n\t}\n\n\t&:hover {\n\t\tbackground: @c-pool;\n\t}\n}\n\n/*\n\tMedia Queries\n\t--------------------------------------------------\n*/\n@media (min-width: @breakpoint-small) {\n\t.error-content {\n\t\tfont-size: 17px;\n\t\tline-height: 22px;\n\t}\n}\n@media (min-width: @breakpoint-large) {\n}\n@media (min-width: @breakpoint-huge) {\n\t.error-content {\n\t\tfont-size: 21px;\n\t\tline-height: 32px;\n\t}\n}\n",".tabs-container {\n margin: 2em 0 2em;\n}\n.tabs {\n flex-grow: 1;\n border-radius: @radius 0 0 @radius;\n}\n.tabs p {\n display: flex;\n flex-wrap: wrap;\n}\n.tabs a {\n flex-grow: 1;\n margin: 2px;\n font-size: 0.875em;\n color: @tabs-link !important;\n padding: .5em 1em;\n display: inline-block;\n text-align: center;\n border-radius: @radius;\n background-color: fadeout(@tabs-link-bg, 50%);\n transition: background-color .2s, color .2s;\n\n &:hover {\n color: @tabs-link-hover !important;\n }\n &.is-active {\n color: @g20-white !important;\n background: @default-link-color;\n }\n}\n\n.tab-content {\n width: 100%;\n\n & > * {\n width: 100% !important;\n margin-left: 0 !important;\n }\n}\n\n.tab-content:not(:first-child) {\n display: none;\n}\n\n.tab-content-container {\n position: relative;\n border-radius: 0 @radius @radius @radius;\n}\n\n////////////////////////////////// Code Tabs //////////////////////////////////\n\n.code-tabs-content {\n margin: .75rem 0 3rem;\n width: 100%;\n\n & > * {\n width: 100% !important;\n margin-left: 0 !important;\n }\n}\n\n.code-tabs-wrapper {\n margin: 1.5rem 0 .5rem;\n\n .code-tabs {\n p {\n margin: 0;\n text-align: right;\n display: block;\n font-size: .9rem;\n }\n a {\n padding: .25rem .75rem;\n margin: 0;\n border-radius: @radius @radius 0 0;\n display: inline-block;\n background: fadeout(@article-code-border, 40%) ;\n color: fadeout(@tabs-link, 50%) !important;\n &:hover {\n color: @tabs-link-hover !important;\n }\n &.is-active {\n background-color: @article-code-border ;\n color: @tabs-link-active !important;\n }\n }\n }\n\n .code-tab-content {\n padding: 0;\n pre {\n margin: 0 0 3rem;\n border-radius: @radius 0 @radius @radius;\n }\n &:not(:first-of-type) {\n display: none;\n }\n }\n}\n\n//\n// Media Queries\n// -------------\n\n@media (min-width: @breakpoint-small) {\n .tabs-container .tabs a {\n flex-grow: 0;\n }\n}\n","/////////////////////// Styles for Telegraf plugin cards ///////////////////////\n\n.plugin-card {\n position: relative;\n padding: 1rem 1.5rem;\n margin-bottom: .5rem;\n justify-content: center;\n align-items: center;\n background: @article-bg-darken;\n border-radius: @radius;\n\n h3 {\n padding: 0;\n margin-top: .25rem;\n }\n\n &.new h3:after {\n content: \"New\";\n margin-left: .3rem;\n padding: .25rem .5rem;\n font-style: italic;\n color: @sidebar-title-color;\n font-size: 1.2rem;\n }\n\n p {\n &.meta {\n margin: .75rem 0;\n font-weight: 500;\n color: @article-text;\n line-height: 1.75rem;\n\n .deprecated {\n margin-left: .5rem;\n font-style: italic;\n color: @article-code-accent7;\n }\n }\n }\n\n & .info {\n & > p:last-child { margin-bottom: .5rem; }\n & > ul:last-child { margin-bottom: .5rem; }\n & > ol:last-child { margin-bottom: .5rem; }\n }\n\n .github-link {\n position: absolute;\n color: @g20-white !important;\n top: .5rem;\n right: .5rem;\n opacity: 0;\n transition: opacity .2s, background .2s, color 2s;\n\n .icon-github {\n font-size: 1.2rem;\n margin: 0 .25rem 0 0;\n }\n }\n\n &:hover {\n .github-link { opacity: 1; }\n }\n\n // Special use-case for using block quotes in the yaml provided by the data file\n blockquote {\n border-color: @article-note-border;\n background: fade(@article-note-bg, 50%);\n h3,h4,h5,h6 { color: @article-text-heading; }\n p, li {\n color: @article-note-text;\n font-size: 1rem;\n font-style: normal;\n }\n strong { color: inherit; }\n a {\n color: @telegraf-link;\n code:after {\n border-color: transparent fade(@article-note-code, 35%) transparent transparent;\n }\n &:hover {\n color: @telegraf-link-hover;\n code:after {\n border-color: transparent @telegraf-link-hover transparent transparent;\n }\n }\n }\n ol li:before { color: @article-note-text; }\n code, pre{\n color: @article-note-code;\n background: @article-note-code-bg;\n }\n }\n}\n\n//////////////////////////////// Plugin Filters ////////////////////////////////\n\n#plugin-filters {\n display: flex;\n flex-flow: row wrap;\n align-items: flex-start;\n\n .filter-category {\n flex: 1 1 200px;\n margin: 0 1.25rem 1.25rem 0;\n max-width: 33%;\n\n &.two-columns {\n flex: 1 2 400px;\n max-width: 66%;\n .filter-list {\n columns: 2;\n }\n }\n }\n\n h5 {\n border-bottom: 1px solid fade(@article-text, 25%);\n padding-bottom: .65rem;\n }\n\n .filter-list {\n padding: 0;\n margin: .5rem 0 0;\n list-style: none;\n li {\n padding: 0;\n margin: 0;\n line-height: 1.35rem;\n list-style-type: none !important;\n }\n }\n\n label {\n display: block;\n padding: .25rem 0;\n color: @article-text;\n position: relative;\n\n &:after {\n content: attr(data-count);\n margin-left: .25rem;\n font-size: .85rem;\n opacity: .5;\n }\n }\n\n .checkbox {\n display: inline-block;\n height: 1.15em;\n width: 1.15em;\n background: fade(@article-text, 5%);\n margin-right: .3rem;\n vertical-align: text-top;\n border-radius: @radius;\n cursor: pointer;\n border: 1.5px solid fade(@article-text, 20%);\n user-select: none;\n }\n\n input[type='checkbox'] {\n margin-right: -1.1rem ;\n padding: 0;\n vertical-align: top;\n opacity: 0;\n cursor: pointer;\n\n & + .checkbox:after {\n content: \"\";\n display: block;\n position: absolute;\n height: .5rem;\n width: .5rem;\n border-radius: 50%;\n background: @telegraf-link;\n top: .65rem;\n left: .35rem;\n opacity: 0;\n transform: scale(2);\n transition: all .2s;\n }\n\n &:checked + .checkbox:after {\n opacity: 1;\n transform: scale(1);\n }\n }\n}\n\n////////////////////////////////////////////////////////////////////////////////\n///////////////////////////////// MEDIA QUERIES ////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////\n\n@media(max-width: 1100px) {\n #plugin-filters {\n .filter-category {\n max-width: 50%;\n &.two-columns, &.three-columns {\n max-width: 100%;\n }\n }\n }\n}\n\n@media(max-width: 800px) {\n #plugin-filters{\n .filter-category {\n max-width: 100%;\n }\n }\n\n .plugin-card {\n .github-link {\n opacity: 1;\n padding: .25rem .35rem .35rem;\n line-height: 0;\n font-size: 1.35rem;\n .icon-github { margin: 0; }\n .hide { display: none; }\n }\n }\n}\n","/////////////////////////// Flex Content Blocks ///////////////////////////\n\n.article-content {\n .flex-wrapper {\n display: flex;\n flex-wrap: wrap;\n }\n\n .flex-container {\n margin-right: 2rem;\n &.half { width: ~\"calc(50% - 2rem)\"; }\n &.third { width: ~\"calc(33.33% - 2rem)\"; }\n &.quarter { width: ~\"calc(25% - 2rem)\"; }\n }\n}\n\n////////////////////////////////////////////////////////////////////////////////\n///////////////////////////////// MEDIA QUERIES ////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////\n\n@include media(small) {\n .article-content .flex-container {\n &.half, &.third { width: ~\"calc(100% - 2rem)\"; }\n &.quarter { width: ~\"calc(50% - 2rem)\"; }\n }\n}\n","@svg-geo-s2-cell: @c-pool;\n@svg-geo-region: @c-star;\n@svg-geo-point: @c-dreamsicle;\n\nsvg[id^='geo-s2-cells-'] {\n max-width: 250px;\n .geo-cell{fill:fade(@svg-geo-s2-cell, 25%);stroke:@svg-geo-s2-cell;stroke-width:3;stroke-linejoin:round;stroke-miterlimit:10;}\n\t.geo-region{fill:fade(@svg-geo-region, 35%);stroke:@svg-geo-region;stroke-width:3;stroke-linejoin:round;stroke-miterlimit:10;}\n\t.geo-point{fill:@svg-geo-point;}\n}\n\nspan.key-geo-cell {\n display: inline-block;\n vertical-align: middle;\n margin: 0 .5rem .25rem 0;\n width: 1.1em;\n height: 1.1em;\n border: 2px solid @svg-geo-s2-cell;\n background: fade(@svg-geo-s2-cell, 25%);\n border-radius: 2px;\n}\nspan.key-geo-region {\n display: inline-block;\n vertical-align: middle;\n margin: 0 .5rem .25rem 0;\n width: 1.1em;\n height: 1.1em;\n border: 2px solid @svg-geo-region;\n background: fade(@svg-geo-region, 35%);\n border-radius: 2px;\n}\nspan.key-geo-point {\n display: inline-block;\n margin: 0 .7rem 0 .25rem;\n width: .65rem;\n height: .65rem;\n border-radius: 50%;\n background: @svg-geo-point;\n}\n","/*\n\n T E L E G R A F T H E M E\n\n ____________________________________________________________\n\n Notes:\n - Only contains color overrides for layout-article.less\n\n*/\n\n\n//\n// Override only if class is applied to body\n// -------------------------------------------------------------\nbody.docs-theme--telegraf {\n\n //\n // Article Styles\n // ---------------------------------------------------------\n .article-content {\n a:link,\n a:active,\n a:visited {\n color: @telegraf-link;\n }\n a:hover {\n color: @telegraf-link-hover;\n }\n a.top:hover {\n background: @telegraf-link-hover;\n }\n a.btn {\n background: @telegraf-btn;\n &:hover {\n background: @telegraf-btn-hover;\n }\n }\n &.section-landing{\n \t\th2 a.off-page:link:hover {\n \t\t\tcolor: @telegraf-link !important;\n \t\t}\n \t}\n }\n\n //\n // Sidebar Styles\n // ---------------------------------------------------------\n .sidebar--mask-container {\n .sidebar--mask {\n .gradient-v(@telegraf-dropdown-gradient-a,@telegraf-dropdown-gradient-b);\n }\n }\n .sidebar--section-title {\n a:link,\n a:active,\n a:visited {\n color: @telegraf-section-title;\n font-weight: 400;\n }\n a:hover {\n color: @telegraf-link-hover;\n }\n }\n a.sidebar--page {\n &:hover {\n color: @telegraf-link-hover;\n }\n }\n\n //\n // Navbar Styles\n // ---------------------------------------------------------\n .navbar--product-dropdown {\n background-color: @telegraf-dropdown;\n &:hover {\n background-color: @telegraf-dropdown-hover;\n }\n }\n .navbar--product-menu {\n .gradient-v(@telegraf-dropdown-gradient-a,@telegraf-dropdown-gradient-b);\n }\n\n // Tab Labels\n .tabs a.is-active {\n background: @telegraf-link;\n }\n}\n","/*\n\n C H R O N O G R A F T H E M E\n\n ____________________________________________________________\n\n Notes:\n - Only contains color overrides for layout-article.less\n\n*/\n\n\n//\n// Override only if class is applied to body\n// -------------------------------------------------------------\nbody.docs-theme--chronograf {\n\n //\n // Article Styles\n // ---------------------------------------------------------\n .article-content {\n a:link,\n a:active,\n a:visited {\n color: @chronograf-link;\n }\n a:hover {\n color: @chronograf-link-hover;\n }\n a.top:hover {\n background: @chronograf-link-hover;\n }\n a.btn {\n background: @chronograf-btn;\n &:hover {\n background: @chronograf-btn-hover;\n }\n }\n &.section-landing{\n \t\th2 a.off-page:link:hover {\n \t\t\tcolor: @chronograf-link !important;\n \t\t}\n \t}\n }\n\n //\n // Sidebar Styles\n // ---------------------------------------------------------\n .sidebar--mask-container {\n .sidebar--mask {\n .gradient-v(@chronograf-dropdown-gradient-a,@chronograf-dropdown-gradient-b);\n }\n }\n .sidebar--section-title {\n a:link,\n a:active,\n a:visited {\n color: @chronograf-section-title;\n font-weight: 400;\n }\n a:hover {\n color: @chronograf-link-hover;\n }\n }\n a.sidebar--page {\n &:hover {\n color: @chronograf-link-hover;\n }\n }\n\n //\n // Navbar Styles\n // ---------------------------------------------------------\n .navbar--product-dropdown {\n background-color: @chronograf-dropdown;\n &:hover {\n background-color: @chronograf-dropdown-hover;\n }\n }\n .navbar--product-menu {\n .gradient-v(@chronograf-dropdown-gradient-a,@chronograf-dropdown-gradient-b);\n }\n\n // Tab Labels\n .tabs a.is-active {\n background: @chronograf-link;\n }\n}\n","/*\n\n K A P A C I T O R T H E M E\n\n ____________________________________________________________\n\n Notes:\n - Only contains color overrides for layout-article.less\n\n*/\n\n\n//\n// Override only if class is applied to body\n// -------------------------------------------------------------\nbody.docs-theme--kapacitor {\n\n //\n // Article Styles\n // ---------------------------------------------------------\n .article-content {\n a:link,\n a:active,\n a:visited {\n color: @kapacitor-link;\n }\n a:hover {\n color: @kapacitor-link-hover;\n }\n a.top:hover {\n background: @kapacitor-link-hover;\n }\n a.btn {\n background: @kapacitor-btn;\n &:hover {\n background: @kapacitor-btn-hover;\n }\n }\n &.section-landing{\n \t\th2 a.off-page:link:hover {\n \t\t\tcolor: @kapacitor-link !important;\n \t\t}\n \t}\n }\n\n //\n // Sidebar Styles\n // ---------------------------------------------------------\n .sidebar--mask-container {\n .sidebar--mask {\n .gradient-v(@kapacitor-dropdown-gradient-a,@kapacitor-dropdown-gradient-b);\n }\n }\n .sidebar--section-title {\n a:link,\n a:active,\n a:visited {\n color: @kapacitor-section-title;\n font-weight: 400;\n }\n a:hover {\n color: @kapacitor-link-hover;\n }\n }\n a.sidebar--page {\n &:hover {\n color: @kapacitor-link-hover;\n }\n }\n\n //\n // Navbar Styles\n // ---------------------------------------------------------\n .navbar--product-dropdown {\n background-color: @kapacitor-dropdown;\n &:hover {\n background-color: @kapacitor-dropdown-hover;\n }\n }\n .navbar--product-menu {\n .gradient-v(@kapacitor-dropdown-gradient-a,@kapacitor-dropdown-gradient-b);\n }\n\n // Tab Labels\n .tabs a.is-active {\n background: @kapacitor-link;\n }\n}\n","/*\n\n K A P A C I T O R T H E M E\n\n ____________________________________________________________\n\n Notes:\n - Only contains color overrides for layout-article.less\n\n*/\n\n\n//\n// Override only if class is applied to body\n// -------------------------------------------------------------\nbody.docs-theme--enterprise_kapacitor {\n\n //\n // Article Styles\n // ---------------------------------------------------------\n .article-content {\n a:link,\n a:active,\n a:visited {\n color: @kapacitor-link;\n }\n a:hover {\n color: @kapacitor-link-hover;\n }\n a.top:hover {\n background: @kapacitor-link-hover;\n }\n a.btn {\n background: @kapacitor-btn;\n &:hover {\n background: @kapacitor-btn-hover;\n }\n }\n &.section-landing{\n \t\th2 a.off-page:link:hover {\n \t\t\tcolor: @kapacitor-link !important;\n \t\t}\n \t}\n }\n\n //\n // Sidebar Styles\n // ---------------------------------------------------------\n .sidebar--mask-container {\n .sidebar--mask {\n .gradient-v(@kapacitor-dropdown-gradient-a,@kapacitor-dropdown-gradient-b);\n }\n }\n .sidebar--section-title {\n a:link,\n a:active,\n a:visited {\n color: @kapacitor-section-title;\n font-weight: 400;\n }\n a:hover {\n color: @kapacitor-link-hover;\n }\n }\n a.sidebar--page {\n &:hover {\n color: @kapacitor-link-hover;\n }\n }\n\n //\n // Navbar Styles\n // ---------------------------------------------------------\n .navbar--product-dropdown {\n background-color: @kapacitor-dropdown;\n &:hover {\n background-color: @kapacitor-dropdown-hover;\n }\n }\n .navbar--product-menu {\n .gradient-v(@kapacitor-dropdown-gradient-a,@kapacitor-dropdown-gradient-b);\n }\n\n // Tab Labels\n .tabs a.is-active {\n background: @kapacitor-link;\n }\n}\n","/*\n\n F L U X T H E M E\n\n ____________________________________________________________\n\n Notes:\n - Only contains color overrides for layout-article.less\n\n*/\n\n\n//\n// Override only if class is applied to body\n// -------------------------------------------------------------\nbody.docs-theme--flux {\n\n //\n // Article Styles\n // ---------------------------------------------------------\n .article-content {\n a:link,\n a:active,\n a:visited {\n color: @flux-link;\n }\n a:hover {\n color: @flux-link-hover;\n }\n a.top:hover {\n background: @flux-link-hover;\n }\n &.section-landing{\n \t\th2 a.off-page:link:hover {\n \t\t\tcolor: @flux-link !important;\n \t\t}\n \t}\n }\n\n //\n // Sidebar Styles\n // ---------------------------------------------------------\n .sidebar--mask-container {\n .sidebar--mask {\n .gradient-v(@flux-dropdown-gradient-a,@flux-dropdown-gradient-b);\n }\n }\n .sidebar--section-title {\n a:link,\n a:active,\n a:visited {\n color: @flux-section-title;\n font-weight: 400;\n }\n a:hover {\n color: @flux-link-hover;\n }\n }\n a.sidebar--page {\n &:hover {\n color: @flux-link-hover;\n }\n }\n\n //\n // Navbar Styles\n // ---------------------------------------------------------\n .navbar--product-dropdown {\n background-color: @flux-dropdown;\n &:hover {\n background-color: @flux-dropdown-hover;\n }\n }\n .navbar--product-menu {\n .gradient-v(@flux-dropdown-gradient-a,@flux-dropdown-gradient-b);\n }\n\n // Tab Labels\n .tabs a.is-active {\n background: @flux-link;\n }\n}\n"]} \ No newline at end of file diff --git a/static/img/svgs/geo-non-strict.svg b/static/img/svgs/geo-non-strict.svg new file mode 100644 index 0000000000..a431e30858 --- /dev/null +++ b/static/img/svgs/geo-non-strict.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/img/svgs/geo-strict.svg b/static/img/svgs/geo-strict.svg new file mode 100644 index 0000000000..fcf095ea1f --- /dev/null +++ b/static/img/svgs/geo-strict.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/styles/docs-default.less b/styles/docs-default.less index 84422b28ba..344c708f87 100644 --- a/styles/docs-default.less +++ b/styles/docs-default.less @@ -25,6 +25,8 @@ @import "normalize-3.0.2.less"; @import "syntax.less"; @import "layout.less"; +@import "flex.less"; +@import "svgs.less"; // // Import Product Specific Themes diff --git a/styles/docs-light.less b/styles/docs-light.less index 19ee4fad22..f7f36ecdf0 100644 --- a/styles/docs-light.less +++ b/styles/docs-light.less @@ -25,6 +25,8 @@ @import "normalize-3.0.2.less"; @import "syntax.less"; @import "layout.less"; +@import "flex.less"; +@import "svgs.less"; // // Import Product Specific Themes diff --git a/styles/flex.less b/styles/flex.less new file mode 100644 index 0000000000..2ffb6eed52 --- /dev/null +++ b/styles/flex.less @@ -0,0 +1,26 @@ +/////////////////////////// Flex Content Blocks /////////////////////////// + +.article-content { + .flex-wrapper { + display: flex; + flex-wrap: wrap; + } + + .flex-container { + margin-right: 2rem; + &.half { width: ~"calc(50% - 2rem)"; } + &.third { width: ~"calc(33.33% - 2rem)"; } + &.quarter { width: ~"calc(25% - 2rem)"; } + } +} + +//////////////////////////////////////////////////////////////////////////////// +///////////////////////////////// MEDIA QUERIES //////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// + +@include media(small) { + .article-content .flex-container { + &.half, &.third { width: ~"calc(100% - 2rem)"; } + &.quarter { width: ~"calc(50% - 2rem)"; } + } +} diff --git a/styles/svgs.less b/styles/svgs.less new file mode 100644 index 0000000000..93317b58c8 --- /dev/null +++ b/styles/svgs.less @@ -0,0 +1,39 @@ +@svg-geo-s2-cell: @c-pool; +@svg-geo-region: @c-star; +@svg-geo-point: @c-dreamsicle; + +svg[id^='geo-s2-cells-'] { + max-width: 250px; + .geo-cell{fill:fade(@svg-geo-s2-cell, 25%);stroke:@svg-geo-s2-cell;stroke-width:3;stroke-linejoin:round;stroke-miterlimit:10;} + .geo-region{fill:fade(@svg-geo-region, 35%);stroke:@svg-geo-region;stroke-width:3;stroke-linejoin:round;stroke-miterlimit:10;} + .geo-point{fill:@svg-geo-point;} +} + +span.key-geo-cell { + display: inline-block; + vertical-align: middle; + margin: 0 .5rem .25rem 0; + width: 1.1em; + height: 1.1em; + border: 2px solid @svg-geo-s2-cell; + background: fade(@svg-geo-s2-cell, 25%); + border-radius: 2px; +} +span.key-geo-region { + display: inline-block; + vertical-align: middle; + margin: 0 .5rem .25rem 0; + width: 1.1em; + height: 1.1em; + border: 2px solid @svg-geo-region; + background: fade(@svg-geo-region, 35%); + border-radius: 2px; +} +span.key-geo-point { + display: inline-block; + margin: 0 .7rem 0 .25rem; + width: .65rem; + height: .65rem; + border-radius: 50%; + background: @svg-geo-point; +} From 52406209e4dc71ea450fa22fa2c993b9a870717f Mon Sep 17 00:00:00 2001 From: Scott Anderson Date: Tue, 24 Mar 2020 15:48:57 -0600 Subject: [PATCH 21/25] added the experimental csv package to flux docs --- content/flux/v0.x/stdlib/csv/from.md | 31 ++++++----- .../v0.x/stdlib/experimental/csv/_index.md | 22 ++++++++ .../flux/v0.x/stdlib/experimental/csv/from.md | 53 +++++++++++++++++++ 3 files changed, 94 insertions(+), 12 deletions(-) create mode 100644 content/flux/v0.x/stdlib/experimental/csv/_index.md create mode 100644 content/flux/v0.x/stdlib/experimental/csv/from.md diff --git a/content/flux/v0.x/stdlib/csv/from.md b/content/flux/v0.x/stdlib/csv/from.md index 387cbd5739..ba91032466 100644 --- a/content/flux/v0.x/stdlib/csv/from.md +++ b/content/flux/v0.x/stdlib/csv/from.md @@ -22,11 +22,11 @@ _**Function type:** Input_ ```js import "csv" -csv.from(file: "/path/to/data-file.csv") +csv.from(csv: csvData) // OR -csv.from(csv: csvData) +csv.from(file: "/path/to/data-file.csv") ``` {{% warn %}} @@ -35,25 +35,32 @@ csv.from(csv: csvData) ## Parameters -### file -The file path of the CSV file to query. -The path can be absolute or relative. -If relative, it is relative to the working directory of the `influxd` process. -_The CSV file must exist in the same file system running the `influxd` process._ - -_**Data type:** String_ - ### csv -Raw CSV-formatted text. +Annotated CSV text. {{% note %}} CSV data must be in the CSV format produced by the Flux HTTP response standard. -See the [Flux technical specification](https://github.com/influxdata/flux/blob/master/docs/SPEC.md#csv) +See [Annotated CSV in the InfluxDB 2.0 documentation](https://v2.docs.influxdata.com/v2.0/reference/syntax/annotated-csv/) for information about this format. {{% /note %}} _**Data type:** String_ +### file +The file path of the CSV file to query. +The path can be absolute or relative. +If relative, it is relative to the working directory of the `influxd` process. +_The CSV file must exist in the same file system running the `influxd` process._ + +{{% warn %}} +**InfluxDB** does _**not**_ support the `file` parameter because of restricted +access to the underlying filesystem. +However, the [Flux REPL](/flux/v0.x/guides/executing-queries/#influx-cli-in-flux-mode) +does support the `file` parameter. +{{% /warn %}} + +_**Data type:** String_ + ## Examples ### Query CSV data from a file diff --git a/content/flux/v0.x/stdlib/experimental/csv/_index.md b/content/flux/v0.x/stdlib/experimental/csv/_index.md new file mode 100644 index 0000000000..cfdcf00c31 --- /dev/null +++ b/content/flux/v0.x/stdlib/experimental/csv/_index.md @@ -0,0 +1,22 @@ +--- +title: Flux CSV package +list_title: CSV package +description: > + The Flux Experimental CSV package provides functions for retrieving annotated CSV. + Import the `experimental/csv` package. +menu: + flux_0_x: + name: CSV + identifier: CSV-exp + parent: Experimental +weight: 1 +--- + +The Flux Experimental CSV package provides functions for retrieving annotated CSV. +Import the `experimental/csv` package: + +```js +import "experimental/csv" +``` + +{{< function-list >}} diff --git a/content/flux/v0.x/stdlib/experimental/csv/from.md b/content/flux/v0.x/stdlib/experimental/csv/from.md new file mode 100644 index 0000000000..d37f7d3227 --- /dev/null +++ b/content/flux/v0.x/stdlib/experimental/csv/from.md @@ -0,0 +1,53 @@ +--- +title: csv.from() function +description: > + The experimental `csv.from()` function retrieves annotated CSV from a URL. +menu: + flux_0_x: + name: csv.from * + parent: CSV-exp +weight: 1 +--- + +The experimental `csv.from()` function retrieves annotated CSV **from a URL**. + +{{% note %}} +The experimental `csv.from()` function is an alternative to the standard +[`csv.from()` function](/flux/v0.x/stdlib/csv/from/). +{{% /note %}} + +_**Function type:** Input_ + +```js +import "experimental/csv" + +csv.from(url: "http://mydomain.com/csv/example.csv") +``` + +## Parameters + +### url +The URL to retrieve annotated CSV from. + +_**Data type:** String_ + + +## Examples + +##### Query annotated CSV data from a remote URL +```js +import "experimental/csv" + +csv.from(url: "http://mydomain.com/csv/example.csv") + |> filter(fn: (r) => r._measurement == "example-measurement") +``` + +## Function definition +```js +package csv + +import c "csv" +import "experimental/http" + +from = (url) => c.from(csv: string(v: http.get(url: url).body)) +``` From a5f99a4914fa0443492fb44e1cb0a5750ceb82ef Mon Sep 17 00:00:00 2001 From: Scott Anderson Date: Tue, 24 Mar 2020 15:55:07 -0600 Subject: [PATCH 22/25] added warning about keeping empty tables with filtering --- .../about_the_project/releasenotes-changelog.md | 14 ++++++++++++++ .../stdlib/built-in/transformations/filter.md | 16 ++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/content/flux/v0.x/about_the_project/releasenotes-changelog.md b/content/flux/v0.x/about_the_project/releasenotes-changelog.md index 34b37f7854..90f49454bc 100644 --- a/content/flux/v0.x/about_the_project/releasenotes-changelog.md +++ b/content/flux/v0.x/about_the_project/releasenotes-changelog.md @@ -6,6 +6,20 @@ menu: weight: 1 --- +## v0.64.0 [2020-03-11] + +### Features +- Hand-transpile `elapsed()` aggregate. +- Hand-transpile `cumulative_sum()`. +- Experimental `csv` package. + +### Bug fixes +- Add response reader as dependency to tune response size. +- Handle unfinished option statement without panic. +- Simplify libflux C API and resolve memory leaks. +- Don't construct a `compiler.compilerScope` with a nil `value.Scope` as base. +- Influxql-decode to handle the case without tag set. + ## v0.63.0 [2020-03-03] ### Features diff --git a/content/flux/v0.x/stdlib/built-in/transformations/filter.md b/content/flux/v0.x/stdlib/built-in/transformations/filter.md index f7d08bb769..385a4ea71f 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/filter.md +++ b/content/flux/v0.x/stdlib/built-in/transformations/filter.md @@ -47,6 +47,14 @@ Defines the behavior for empty tables. Potential values are `keep` and `drop`. Defaults to `drop`. +{{% warn %}} +Keeping empty tables with your first `filter()` function can have severe performance +costs since it retains empty tables from your entire data set. +For higher performance, use your first `filter()` function to do basic filtering, +then keep empty tables on subsequent `filter()` calls with smaller data sets. +_[See the example below](#keep-empty-tables-when-filtering)._ +{{% /warn %}} + _**Data type:** String_ ##### drop @@ -98,6 +106,14 @@ from(bucket: "db/rp") |> filter(fn: (r) => r.doorId =~ /^2.*/, onEmpty: "keep") ``` +##### Keep empty tables when filtering +```js +from(bucket: "example-bucket") + |> range(start: -1h) + |> filter(fn: (r) => r._measurement == "events" and r._field == "open") + |> filter(fn: (r) => r.doorId =~ /^2.*/, onEmpty: "keep") +``` +
    ##### Related InfluxQL functions and statements: From 7956ff5559b26ca65f79819425badad9f95e4aeb Mon Sep 17 00:00:00 2001 From: Scott Anderson Date: Tue, 24 Mar 2020 16:22:10 -0600 Subject: [PATCH 23/25] updated query guides --- content/flux/v0.x/guides/_index.md | 31 ++-- content/flux/v0.x/guides/conditional-logic.md | 2 +- content/flux/v0.x/guides/cumulativesum.md | 64 +++++++ content/flux/v0.x/guides/exists.md | 72 ++++++++ .../flux/v0.x/guides/flux-in-dashboards.md | 2 +- content/flux/v0.x/guides/grouping-data.md | 2 +- content/flux/v0.x/guides/histograms.md | 4 +- content/flux/v0.x/guides/join.md | 2 +- .../flux/v0.x/guides/manipulate-timestamps.md | 2 +- .../flux/v0.x/guides/mathematic-operations.md | 2 +- content/flux/v0.x/guides/median.md | 142 ++++++++++++++++ content/flux/v0.x/guides/monitor-states.md | 2 +- content/flux/v0.x/guides/optimize-queries.md | 2 +- .../flux/v0.x/guides/percentile-quantile.md | 158 ++++++++++++++++++ content/flux/v0.x/guides/query-fields.md | 65 +++++++ .../flux/v0.x/guides/regular-expressions.md | 2 +- content/flux/v0.x/guides/scalar-values.md | 2 +- content/flux/v0.x/guides/sort-limit.md | 2 +- content/flux/v0.x/guides/sql.md | 2 +- .../flux/v0.x/guides/windowing-aggregating.md | 2 +- layouts/shortcodes/children.html | 4 +- 21 files changed, 534 insertions(+), 32 deletions(-) create mode 100644 content/flux/v0.x/guides/cumulativesum.md create mode 100644 content/flux/v0.x/guides/exists.md create mode 100644 content/flux/v0.x/guides/median.md create mode 100644 content/flux/v0.x/guides/percentile-quantile.md create mode 100644 content/flux/v0.x/guides/query-fields.md diff --git a/content/flux/v0.x/guides/_index.md b/content/flux/v0.x/guides/_index.md index 3aabf679fd..87ff36806a 100644 --- a/content/flux/v0.x/guides/_index.md +++ b/content/flux/v0.x/guides/_index.md @@ -7,21 +7,22 @@ menu: weight: 3 --- -## [Different ways to execute Flux queries](/flux/v0.x/guides/executing-queries) -A guide that covers the different options for executing Flux queries with InfluxDB and Chronograf v1.7+. +The following guides walk through both common and complex queries and use cases for Flux. -## [How to window and aggregate data with Flux](/flux/v0.x/guides/windowing-aggregating) -This guide walks through windowing and aggregating data with Flux and demonstrates -how data is shaped in the process. +{{% note %}} +#### Example data variable +Many of the examples provided in the following guides use a `data` variable, +which represents a basic query that filters data by measurement and field. +`data` is defined as: -## [How to group data with Flux](/flux/v0.x/guides/grouping-data) -This guide walks through grouping data in Flux with examples of how data is shaped in the process. +```js +data = from(bucket: "example-bucket") + |> range(start: -1h) + |> filter(fn: (r) => + r._measurement == "example-measurement" and + r._field == "example-field" + ) +``` +{{% /note %}} -## [How to join data with Flux](/flux/v0.x/guides/join) -This guide walks through joining data with Flux, illustrating how joined data is output and how it can be used. - -## [How to sort and limit data with Flux](/flux/v0.x/guides/sort-limit) -This guide walks through sorting and limiting data with Flux. - -## [Regular expressions in Flux](/flux/v0.x/guides/regular-expressions) -This guide walks through using regular expressions in evaluation logic in Flux functions. +{{< children >}} diff --git a/content/flux/v0.x/guides/conditional-logic.md b/content/flux/v0.x/guides/conditional-logic.md index a56b87dbe4..a54fcd15ff 100644 --- a/content/flux/v0.x/guides/conditional-logic.md +++ b/content/flux/v0.x/guides/conditional-logic.md @@ -1,5 +1,5 @@ --- -title: Query using conditional logic +title: Use conditional logic description: > This guide describes how to use Flux conditional expressions, such as `if`, `else`, and `then`, to query and transform data. diff --git a/content/flux/v0.x/guides/cumulativesum.md b/content/flux/v0.x/guides/cumulativesum.md new file mode 100644 index 0000000000..d853f4537d --- /dev/null +++ b/content/flux/v0.x/guides/cumulativesum.md @@ -0,0 +1,64 @@ +--- +title: Query cumulative sum +description: > + Use the `cumulativeSum()` function to calculate a running total of values. +weight: 10 +menu: + flux_0_x: + parent: Guides + name: Query the cumulative sum +--- + +Use the [`cumulativeSum()` function](/flux/v0.x/stdlib/built-in/transformations/cumulativesum/) +to calculate a running total of values. +`cumulativeSum` sums the values of subsequent records and returns each row updated with the summed total. + +{{< flex >}} +{{% flex-content "half" %}} +**Given the following input table:** + +| _time | _value | +| ----- |:------:| +| 0001 | 1 | +| 0002 | 2 | +| 0003 | 1 | +| 0004 | 3 | +{{% /flex-content %}} +{{% flex-content "half" %}} +**`cumulativeSum()` returns:** + +| _time | _value | +| ----- |:------:| +| 0001 | 1 | +| 0002 | 3 | +| 0003 | 4 | +| 0004 | 7 | +{{% /flex-content %}} +{{< /flex >}} + +{{% note %}} +The examples below use the [example data variable](/flux/v0.x/guides/#example-data-variable). +{{% /note %}} + +##### Calculate the running total of values +```js +data + |> cumulativeSum() +``` + +### Use cumulativeSum() with aggregateWindow() +[`aggregateWindow()`](/flux/v0.x/stdlib/built-in/transformations/aggregates/aggregatewindow/) +segments data into windows of time, aggregates data in each window into a single +point, then removes the time-based segmentation. +It is primarily used to downsample data. + +`aggregateWindow()` expects an aggregate function that returns a single row for each time window. +To use `cumulativeSum()` with `aggregateWindow`, use `sum` in `aggregateWindow()`, +then calculate the running total of the aggregate values with `cumulativeSum()`. + + +```js +data + |> aggregateWindow(every: 5m, fn: sum) + |> cumulativeSum() +``` diff --git a/content/flux/v0.x/guides/exists.md b/content/flux/v0.x/guides/exists.md new file mode 100644 index 0000000000..0aeeac1d8f --- /dev/null +++ b/content/flux/v0.x/guides/exists.md @@ -0,0 +1,72 @@ +--- +title: Check if a value exists +description: > + Use the Flux `exists` operator to check if an object contains a key or if that + key's value is `null`. +menu: + flux_0_x: + name: Check if a value exists + parent: Guides +weight: 20 +--- + +Use the Flux `exists` operator to check if an object contains a key or if that +key's value is `null`. + +```js +p = {firstName: "John", lastName: "Doe", age: 42} + +exists p.firstName +// Returns true + +exists p.height +// Returns false +``` + +If you're just getting started with Flux queries, check out the following: + +- [Get started with Flux](/flux/v0.x/introduction/getting-started/) for a conceptual overview of Flux and parts of a Flux query. +- [Execute queries](/flux/v0.x/guides/executing-queries/) to discover a variety of ways to run your queries. + +Use `exists` with row functions ( +[`filter()`](/flux/v0.x/stdlib/built-in/transformations/filter/), +[`map()`](/flux/v0.x/stdlib/built-in/transformations/map/), +[`reduce()`](/flux/v0.x/stdlib/built-in/transformations/aggregates/reduce/)) +to check if a row includes a column or if the value for that column is `null`. + +#### Filter out null values +```js +from(bucket: "example-bucket") + |> range(start: -5m) + |> filter(fn: (r) => exists r._value) +``` + +#### Map values based on existence +```js +from(bucket: "default") + |> range(start: -30s) + |> map(fn: (r) => ({ + r with + human_readable: + if exists r._value then "${r._field} is ${string(v:r._value)}." + else "${r._field} has no value." + })) +``` + +#### Ignore null values in a custom aggregate function +```js +customSumProduct = (tables=<-) => + tables + |> reduce( + identity: {sum: 0.0, product: 1.0}, + fn: (r, accumulator) => ({ + r with + sum: + if exists r._value then r._value + accumulator.sum + else accumulator.sum, + product: + if exists r._value then r.value * accumulator.product + else accumulator.product + }) + ) +``` diff --git a/content/flux/v0.x/guides/flux-in-dashboards.md b/content/flux/v0.x/guides/flux-in-dashboards.md index dfa54c8927..64f938a3cf 100644 --- a/content/flux/v0.x/guides/flux-in-dashboards.md +++ b/content/flux/v0.x/guides/flux-in-dashboards.md @@ -5,7 +5,7 @@ menu: flux_0_x: name: Use Flux in dashboards parent: Guides - weight: 7 + weight: 1 --- [Chronograf](/chronograf/latest/) is the web user interface for managing for the diff --git a/content/flux/v0.x/guides/grouping-data.md b/content/flux/v0.x/guides/grouping-data.md index 9f2acc4d3a..7ad4b63854 100644 --- a/content/flux/v0.x/guides/grouping-data.md +++ b/content/flux/v0.x/guides/grouping-data.md @@ -1,5 +1,5 @@ --- -title: How to group data with Flux +title: Group data with Flux description: This guide walks through grouping data with Flux by providing examples and illustrating how data is shaped throughout the process. menu: flux_0_x: diff --git a/content/flux/v0.x/guides/histograms.md b/content/flux/v0.x/guides/histograms.md index a8eb1ba559..75e60a9b6b 100644 --- a/content/flux/v0.x/guides/histograms.md +++ b/content/flux/v0.x/guides/histograms.md @@ -1,11 +1,11 @@ --- -title: How to create histograms with Flux +title: Create histograms with Flux description: This guide walks through using the histogram() function to create cumulative histograms with Flux. menu: flux_0_x: name: Create histograms parent: Guides - weight: 7 + weight: 10 --- diff --git a/content/flux/v0.x/guides/join.md b/content/flux/v0.x/guides/join.md index e8d044805e..a3b3d916b6 100644 --- a/content/flux/v0.x/guides/join.md +++ b/content/flux/v0.x/guides/join.md @@ -1,5 +1,5 @@ --- -title: How to join data with Flux +title: Join data with Flux description: This guide walks through joining data with Flux and outlines how it shapes your data in the process. menu: flux_0_x: diff --git a/content/flux/v0.x/guides/manipulate-timestamps.md b/content/flux/v0.x/guides/manipulate-timestamps.md index e1fe70e45d..4184afa27b 100644 --- a/content/flux/v0.x/guides/manipulate-timestamps.md +++ b/content/flux/v0.x/guides/manipulate-timestamps.md @@ -6,7 +6,7 @@ menu: flux_0_x: name: Manipulate timestamps parent: Guides -weight: 9 +weight: 20 --- Every point stored in InfluxDB has an associated timestamp. diff --git a/content/flux/v0.x/guides/mathematic-operations.md b/content/flux/v0.x/guides/mathematic-operations.md index 1885d120e2..75eb0aff4a 100644 --- a/content/flux/v0.x/guides/mathematic-operations.md +++ b/content/flux/v0.x/guides/mathematic-operations.md @@ -5,7 +5,7 @@ menu: flux_0_x: name: Transform data with math parent: Guides -weight: 9 +weight: 6 --- Flux supports mathematic expressions in data transformations. diff --git a/content/flux/v0.x/guides/median.md b/content/flux/v0.x/guides/median.md new file mode 100644 index 0000000000..8e2eeb7bcd --- /dev/null +++ b/content/flux/v0.x/guides/median.md @@ -0,0 +1,142 @@ +--- +title: Find median values +description: > + Use the `median()` function to return a value representing the `0.5` quantile + (50th percentile) or median of input data. +weight: 10 +menu: + flux_0_x: + parent: Guides + name: Find the median +--- + +Use the [`median()` function](/flux/v0.x/stdlib/built-in/transformations/aggregates/median/) +to return a value representing the `0.5` quantile (50th percentile) or median of input data. + +## Select a method for calculating the median +Select one of the following methods to calculate the median: + +- [estimate_tdigest](#estimate-tdigest) +- [exact_mean](#exact-mean) +- [exact_selector](#exact-selector) + +### estimate_tdigest +**(Default)** An aggregate method that uses a [t-digest data structure](https://github.com/tdunning/t-digest) +to compute an accurate `0.5` quantile estimate on large data sources. +Output tables consist of a single row containing the calculated median. + +{{< flex >}} +{{% flex-content %}} +**Given the following input table:** + +| _time | _value | +| ----- |:------:| +| 0001 | 1.0 | +| 0002 | 1.0 | +| 0003 | 2.0 | +| 0004 | 3.0 | +{{% /flex-content %}} +{{% flex-content %}} +**`estimate_tdigest` returns:** + +| _value | +|:------:| +| 1.5 | +{{% /flex-content %}} +{{< /flex >}} + +### exact_mean +An aggregate method that takes the average of the two points closest to the `0.5` quantile value. +Output tables consist of a single row containing the calculated median. + +{{< flex >}} +{{% flex-content %}} +**Given the following input table:** + +| _time | _value | +| ----- |:------:| +| 0001 | 1.0 | +| 0002 | 1.0 | +| 0003 | 2.0 | +| 0004 | 3.0 | +{{% /flex-content %}} +{{% flex-content %}} +**`exact_mean` returns:** + +| _value | +|:------:| +| 1.5 | +{{% /flex-content %}} +{{< /flex >}} + +### exact_selector +A selector method that returns the data point for which at least 50% of points are less than. +Output tables consist of a single row containing the calculated median. + +{{< flex >}} +{{% flex-content %}} +**Given the following input table:** + +| _time | _value | +| ----- |:------:| +| 0001 | 1.0 | +| 0002 | 1.0 | +| 0003 | 2.0 | +| 0004 | 3.0 | +{{% /flex-content %}} +{{% flex-content %}} +**`exact_selector` returns:** + +| _time | _value | +| ----- |:------:| +| 0002 | 1.0 | +{{% /flex-content %}} +{{< /flex >}} + +{{% note %}} +The examples below use the [example data variable](/flux/v0.x/guides/#example-data-variable). +{{% /note %}} + +## Find the value that represents the median +Use the default method, `"estimate_tdigest"`, to return all rows in a table that +contain values in the 50th percentile of data in the table. + +```js +data + |> median() +``` + +## Find the average of values closest to the median +Use the `exact_mean` method to return a single row per input table containing the +average of the two values closest to the mathematical median of data in the table. + +```js +data + |> median(method: "exact_mean") +``` + +## Find the point with the median value +Use the `exact_selector` method to return a single row per input table containing the +value that 50% of values in the table are less than. + +```js +data + |> median(method: "exact_selector") +``` + +## Use median() with aggregateWindow() +[`aggregateWindow()`](/flux/v0.x/stdlib/built-in/transformations/aggregates/aggregatewindow/) +segments data into windows of time, aggregates data in each window into a single +point, and then removes the time-based segmentation. +It is primarily used to [downsample data](/v2.0/process-data/common-tasks/downsample-data/). + +To specify the [median calculation method](#median-calculation-methods) in `aggregateWindow()`, use the +[full function syntax](/flux/v0.x/stdlib/built-in/transformations/aggregates/aggregatewindow/#specify-parameters-of-the-aggregate-function): + +```js +data + |> aggregateWindow( + every: 5m, + fn: (tables=<-, column) => tables |> median(method: "exact_selector") + ) +``` diff --git a/content/flux/v0.x/guides/monitor-states.md b/content/flux/v0.x/guides/monitor-states.md index fbbdb67fe4..0d0e2047e5 100644 --- a/content/flux/v0.x/guides/monitor-states.md +++ b/content/flux/v0.x/guides/monitor-states.md @@ -5,7 +5,7 @@ menu: flux_0_x: name: Monitor states parent: Guides -weight: 10 +weight: 20 --- Flux helps you monitor states in your metrics and events: diff --git a/content/flux/v0.x/guides/optimize-queries.md b/content/flux/v0.x/guides/optimize-queries.md index 362525d631..6f8af8b175 100644 --- a/content/flux/v0.x/guides/optimize-queries.md +++ b/content/flux/v0.x/guides/optimize-queries.md @@ -2,7 +2,7 @@ title: Optimize Flux queries description: > Optimize your Flux queries to reduce their memory and compute (CPU) requirements. -weight: 1 +weight: 2 menu: flux_0_x: name: Optimize queries diff --git a/content/flux/v0.x/guides/percentile-quantile.md b/content/flux/v0.x/guides/percentile-quantile.md new file mode 100644 index 0000000000..d5a31492be --- /dev/null +++ b/content/flux/v0.x/guides/percentile-quantile.md @@ -0,0 +1,158 @@ +--- +title: Find percentile and quantile values +description: > + Use the `quantile()` function to return all values within the `q` quantile or + percentile of input data. +weight: 10 +menu: + flux_0_x: + parent: Guides + name: Query percentiles & quantiles +--- + +Use the [`quantile()` function](/flux/v0.x/stdlib/built-in/transformations/aggregates/quantile/) +to return a value representing the `q` quantile or percentile of input data. + +## Percentile versus quantile +Percentiles and quantiles are very similar, differing only in the number used to calculate return values. +A percentile is calculated using numbers between `0` and `100`. +A quantile is calculated using numbers between `0.0` and `1.0`. +For example, the **`0.5` quantile** is the same as the **50th percentile**. + +## Select a method for calculating the quantile +Select one of the following methods to calculate the quantile: + +- [estimate_tdigest](#estimate-tdigest) +- [exact_mean](#exact-mean) +- [exact_selector](#exact-selector) + +### estimate_tdigest +**(Default)** An aggregate method that uses a [t-digest data structure](https://github.com/tdunning/t-digest) +to compute a quantile estimate on large data sources. +Output tables consist of a single row containing the calculated quantile. + +If calculating the `0.5` quantile or 50th percentile: + +{{< flex >}} +{{% flex-content %}} +**Given the following input table:** + +| _time | _value | +| ----- |:------:| +| 0001 | 1.0 | +| 0002 | 1.0 | +| 0003 | 2.0 | +| 0004 | 3.0 | +{{% /flex-content %}} +{{% flex-content %}} +**`estimate_tdigest` returns:** + +| _value | +|:------:| +| 1.5 | +{{% /flex-content %}} +{{< /flex >}} + +### exact_mean +An aggregate method that takes the average of the two points closest to the quantile value. +Output tables consist of a single row containing the calculated quantile. + +If calculating the `0.5` quantile or 50th percentile: + +{{< flex >}} +{{% flex-content %}} +**Given the following input table:** + +| _time | _value | +| ----- |:------:| +| 0001 | 1.0 | +| 0002 | 1.0 | +| 0003 | 2.0 | +| 0004 | 3.0 | +{{% /flex-content %}} +{{% flex-content %}} +**`exact_mean` returns:** + +| _value | +|:------:| +| 1.5 | +{{% /flex-content %}} +{{< /flex >}} + +### exact_selector +A selector method that returns the data point for which at least `q` points are less than. +Output tables consist of a single row containing the calculated quantile. + +If calculating the `0.5` quantile or 50th percentile: + +{{< flex >}} +{{% flex-content %}} +**Given the following input table:** + +| _time | _value | +| ----- |:------:| +| 0001 | 1.0 | +| 0002 | 1.0 | +| 0003 | 2.0 | +| 0004 | 3.0 | +{{% /flex-content %}} +{{% flex-content %}} +**`exact_selector` returns:** + +| _time | _value | +| ----- |:------:| +| 0002 | 1.0 | +{{% /flex-content %}} +{{< /flex >}} + +{{% note %}} +The examples below use the [example data variable](/flux/v0.x/guides/#example-data-variable). +{{% /note %}} + +## Find the value representing the 99th percentile +Use the default method, `"estimate_tdigest"`, to return all rows in a table that +contain values in the 99th percentile of data in the table. + +```js +data + |> quantile(q: 0.99) +``` + +## Find the average of values closest to the quantile +Use the `exact_mean` method to return a single row per input table containing the +average of the two values closest to the mathematical quantile of data in the table. +For example, to calculate the `0.99` quantile: + +```js +data + |> quantile(q: 0.99, method: "exact_mean") +``` + +## Find the point with the quantile value +Use the `exact_selector` method to return a single row per input table containing the +value that `q * 100`% of values in the table are less than. +For example, to calculate the `0.99` quantile: + +```js +data + |> quantile(q: 0.99, method: "exact_selector") +``` + +## Use quantile() with aggregateWindow() +[`aggregateWindow()`](/flux/v0.x/stdlib/built-in/transformations/aggregates/aggregatewindow/) +segments data into windows of time, aggregates data in each window into a single +point, and then removes the time-based segmentation. +It is primarily used to [downsample data](/v2.0/process-data/common-tasks/downsample-data/). + +To specify the [quantile calculation method](#quantile-calculation-methods) in +`aggregateWindow()`, use the [full function syntax](/flux/v0.x/stdlib/built-in/transformations/aggregates/aggregatewindow/#specify-parameters-of-the-aggregate-function): + +```js +data + |> aggregateWindow( + every: 5m, + fn: (tables=<-, column) => + tables + |> quantile(q: 0.99, method: "exact_selector") + ) +``` diff --git a/content/flux/v0.x/guides/query-fields.md b/content/flux/v0.x/guides/query-fields.md new file mode 100644 index 0000000000..b8703de2c3 --- /dev/null +++ b/content/flux/v0.x/guides/query-fields.md @@ -0,0 +1,65 @@ +--- +title: Query fields and tags +description: > + Use the `filter()` function to query data based on fields, tags, or any other column value. + `filter()` performs operations similar to the `SELECT` statement and the `WHERE` + clause in InfluxQL and other SQL-like query languages. +weight: 2 +menu: + flux_0_x: + parent: Guides +--- + +Use the [`filter()` function](/flux/v0.x/stdlib/built-in/transformations/filter/) +to query data based on fields, tags, or any other column value. +`filter()` performs operations similar to the `SELECT` statement and the `WHERE` +clause in InfluxQL and other SQL-like query languages. + +## The filter() function +`filter()` has an `fn` parameter that expects a predicate function, +an anonymous function comprised of one or more predicate expressions. +The predicate function evaluates each input row. +Rows that evaluate to `true` are **included** in the output data. +Rows that evaluate to `false` are **excluded** from the output data. + +```js +// ... + |> filter(fn: (r) => r._measurement == "example-measurement" ) +``` + +The `fn` predicate function requires an `r` argument, which represents each row +as `filter()` iterates over input data. +Key-value pairs in the row object represent columns and their values. +Use **dot notation** or **bracket notation** to reference specific column values in the predicate function. +Use [logical operators](/flux/v0.x/language/operators/#logical-operators) +to chain multiple predicate expressions together. + +```js +// Row object +r = {foo: "bar", baz: "quz"} + +// Example predicate function +(r) => r.foo == "bar" and r["baz"] == "quz" + +// Evaluation results +(r) => true and true +``` + +## Filter by fields and tags +The combination of [`from()`](/flux/v0.x/stdlib/built-in/inputs/from), +[`range()`](/flux/v0.x/stdlib/built-in/transformations/range), +and `filter()` represent the most basic Flux query: + +1. Use `from()` to define your [bucket](/flux/v0.x/introduction/getting-started/#buckets). +2. Use `range()` to limit query results by time. +3. Use `filter()` to identify what rows of data to output. + +```js +from(bucket: "example-bucket") + |> range(start: -1h) + |> filter(fn: (r) => + r._measurement == "example-measurement" and + r._field == "example-field" and + r.tag == "example-tag" + ) +``` diff --git a/content/flux/v0.x/guides/regular-expressions.md b/content/flux/v0.x/guides/regular-expressions.md index d21dadf50b..8122cfa7d7 100644 --- a/content/flux/v0.x/guides/regular-expressions.md +++ b/content/flux/v0.x/guides/regular-expressions.md @@ -5,7 +5,7 @@ menu: flux_0_x: name: Regular expressions parent: Guides - weight: 7 + weight: 10 --- Regular expressions (regexes) are incredibly powerful when matching patterns in large collections of data. diff --git a/content/flux/v0.x/guides/scalar-values.md b/content/flux/v0.x/guides/scalar-values.md index 9701dfc032..5f98ed19b2 100644 --- a/content/flux/v0.x/guides/scalar-values.md +++ b/content/flux/v0.x/guides/scalar-values.md @@ -7,7 +7,7 @@ menu: flux_0_x: name: Extract scalar values parent: Guides -weight: 10 +weight: 20 --- Use Flux [stream and table functions](/flux/v0.x/stdlib/built-in/transformations/stream-table/) diff --git a/content/flux/v0.x/guides/sort-limit.md b/content/flux/v0.x/guides/sort-limit.md index b59e565e0e..cc22240088 100644 --- a/content/flux/v0.x/guides/sort-limit.md +++ b/content/flux/v0.x/guides/sort-limit.md @@ -5,7 +5,7 @@ menu: flux_0_x: name: Sort and limit data parent: Guides - weight: 6 + weight: 4 --- The [`sort()`function](/flux/v0.x/stdlib/built-in/transformations/sort) orders the records within each table. The following example orders system uptime first by region, then host, then value. diff --git a/content/flux/v0.x/guides/sql.md b/content/flux/v0.x/guides/sql.md index 6d68db75e5..c40615b7e8 100644 --- a/content/flux/v0.x/guides/sql.md +++ b/content/flux/v0.x/guides/sql.md @@ -7,7 +7,7 @@ description: > menu: flux_0_x: parent: Guides - weight: 7 + weight: 20 --- The [Flux](/flux/v0.x) `sql` package provides functions for working with SQL data sources. diff --git a/content/flux/v0.x/guides/windowing-aggregating.md b/content/flux/v0.x/guides/windowing-aggregating.md index 3b613e7bb6..e2a8516c13 100644 --- a/content/flux/v0.x/guides/windowing-aggregating.md +++ b/content/flux/v0.x/guides/windowing-aggregating.md @@ -5,7 +5,7 @@ menu: flux_0_x: name: Window and aggregate data parent: Guides - weight: 2 + weight: 5 --- A common operation performed with time series data is grouping data into windows of time, diff --git a/layouts/shortcodes/children.html b/layouts/shortcodes/children.html index 053afd8ae4..b0acd2a7e0 100644 --- a/layouts/shortcodes/children.html +++ b/layouts/shortcodes/children.html @@ -1,11 +1,11 @@ {{ $show := .Get "show" | default "all" }} {{ if eq $show "all" }} - {{ .Scratch.Set "pages" (union .Page.Pages .Page.Sections) }} + {{ .Scratch.Set "pages" (union .Page.RegularPages .Page.Sections) }} {{ else if (eq $show "sections") }} {{ .Scratch.Set "pages" .Page.Sections }} {{ else if (eq $show "pages") }} - {{ .Scratch.Set "pages" .Page.Pages }} + {{ .Scratch.Set "pages" .Page.RegularPages }} {{ end }} {{ $pages := .Scratch.Get "pages" }} From f88d0f135dc0295d603c85cb62539310e0936e3a Mon Sep 17 00:00:00 2001 From: Scott Anderson Date: Tue, 24 Mar 2020 16:30:14 -0600 Subject: [PATCH 24/25] fixed broken links in flux-0.x --- content/flux/v0.x/guides/geo/filter-by-region.md | 2 +- content/flux/v0.x/guides/median.md | 2 +- content/flux/v0.x/guides/monitor-states.md | 2 +- content/flux/v0.x/guides/percentile-quantile.md | 2 +- content/flux/v0.x/stdlib/experimental/geo/gridfilter.md | 2 +- content/flux/v0.x/stdlib/sql/to.md | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/content/flux/v0.x/guides/geo/filter-by-region.md b/content/flux/v0.x/guides/geo/filter-by-region.md index dcab4698d0..5567b10cef 100644 --- a/content/flux/v0.x/guides/geo/filter-by-region.md +++ b/content/flux/v0.x/guides/geo/filter-by-region.md @@ -19,7 +19,7 @@ list_code_example: | ``` --- -Use the [`geo.filterRows` function](/flux/v0.x/stdlib/geo/filterrows/) +Use the [`geo.filterRows` function](/flux/v0.x/stdlib/experimental/geo/filterrows/) to filter geo-temporal data by geographic region: 1. [Define a geographic region](#define-a-geographic-region) diff --git a/content/flux/v0.x/guides/median.md b/content/flux/v0.x/guides/median.md index 8e2eeb7bcd..e2cdd0cc0d 100644 --- a/content/flux/v0.x/guides/median.md +++ b/content/flux/v0.x/guides/median.md @@ -130,7 +130,7 @@ segments data into windows of time, aggregates data in each window into a single point, and then removes the time-based segmentation. It is primarily used to [downsample data](/v2.0/process-data/common-tasks/downsample-data/). -To specify the [median calculation method](#median-calculation-methods) in `aggregateWindow()`, use the +To specify the [median calculation method](#select-a-method-for-calculating-the-median) in `aggregateWindow()`, use the [full function syntax](/flux/v0.x/stdlib/built-in/transformations/aggregates/aggregatewindow/#specify-parameters-of-the-aggregate-function): ```js diff --git a/content/flux/v0.x/guides/monitor-states.md b/content/flux/v0.x/guides/monitor-states.md index 0d0e2047e5..efb7d2be33 100644 --- a/content/flux/v0.x/guides/monitor-states.md +++ b/content/flux/v0.x/guides/monitor-states.md @@ -12,7 +12,7 @@ Flux helps you monitor states in your metrics and events: - [Find how long a state persists](#find-how-long-a-state-persists) - [Count the number of consecutive states](#count-the-number-of-consecutive-states) -- [Detect state changes](#detect-state-changes) +- [Detect state changes](#example-query-to-count-machine-state) If you're just getting started with Flux queries, check out the following: diff --git a/content/flux/v0.x/guides/percentile-quantile.md b/content/flux/v0.x/guides/percentile-quantile.md index d5a31492be..cef8296c76 100644 --- a/content/flux/v0.x/guides/percentile-quantile.md +++ b/content/flux/v0.x/guides/percentile-quantile.md @@ -144,7 +144,7 @@ segments data into windows of time, aggregates data in each window into a single point, and then removes the time-based segmentation. It is primarily used to [downsample data](/v2.0/process-data/common-tasks/downsample-data/). -To specify the [quantile calculation method](#quantile-calculation-methods) in +To specify the [quantile calculation method](#select-a-method-for-calculating-the-quantile) in `aggregateWindow()`, use the [full function syntax](/flux/v0.x/stdlib/built-in/transformations/aggregates/aggregatewindow/#specify-parameters-of-the-aggregate-function): ```js diff --git a/content/flux/v0.x/stdlib/experimental/geo/gridfilter.md b/content/flux/v0.x/stdlib/experimental/geo/gridfilter.md index 2ca7eb0bb3..7718aad445 100644 --- a/content/flux/v0.x/stdlib/experimental/geo/gridfilter.md +++ b/content/flux/v0.x/stdlib/experimental/geo/gridfilter.md @@ -15,7 +15,7 @@ It compares input data to a set of S2 Cell ID tokens located in the specified [r {{% note %}} S2 Grid cells may not perfectly align with the defined region, so results may include data with coordinates outside the region, but inside S2 grid cells partially covered by the region. -Use [`toRows()`](/flux/v0.x/stdlib/experimental/geo/toRows/) and +Use [`toRows()`](/flux/v0.x/stdlib/experimental/geo/torows/) and [`geo.strictFilter()`](/flux/v0.x/stdlib/experimental/geo/strictfilter/) after `geo.gridFilter()` to precisely filter points. _See [Non-strict and strict filtering](#non-strict-and-strict-filtering) below._ diff --git a/content/flux/v0.x/stdlib/sql/to.md b/content/flux/v0.x/stdlib/sql/to.md index 447d431a5a..ed0411a168 100644 --- a/content/flux/v0.x/stdlib/sql/to.md +++ b/content/flux/v0.x/stdlib/sql/to.md @@ -37,7 +37,7 @@ The following drivers are available: - mysql - postgres - sqlite3 – _Does not work with InfluxDB OSS, InfluxDB Enterprise, or InfluxDB Cloud. - More information [below](#query-an-sqlite-database)._ + More information [below](#write-data-to-an-sqlite-database)._ ### dataSourceName The data source name (DSN) or connection string used to connect to the SQL database. From b8266f2240d72105df6695ab341e742a04465901 Mon Sep 17 00:00:00 2001 From: Scott Anderson Date: Tue, 24 Mar 2020 16:37:03 -0600 Subject: [PATCH 25/25] cut the flux 0.64 version and directory --- content/flux/{v0.x => v0.64}/_index.md | 18 +- .../about_the_project/_index.md | 4 +- .../{v0.x => v0.64}/about_the_project/cla.md | 2 +- .../about_the_project/license.md | 2 +- .../releasenotes-changelog.md | 8 +- content/flux/{v0.x => v0.64}/guides/_index.md | 2 +- .../guides/conditional-logic.md | 14 +- .../{v0.x => v0.64}/guides/cumulativesum.md | 8 +- .../guides/executing-queries.md | 2 +- content/flux/{v0.x => v0.64}/guides/exists.md | 12 +- .../guides/flux-in-dashboards.md | 8 +- .../flux/{v0.x => v0.64}/guides/geo/_index.md | 14 +- .../guides/geo/filter-by-region.md | 6 +- .../guides/geo/group-geo-data.md | 10 +- .../guides/geo/shape-geo-data.md | 8 +- .../{v0.x => v0.64}/guides/grouping-data.md | 6 +- .../flux/{v0.x => v0.64}/guides/histograms.md | 8 +- content/flux/{v0.x => v0.64}/guides/join.md | 6 +- .../guides/manipulate-timestamps.md | 22 +- .../guides/mathematic-operations.md | 16 +- content/flux/{v0.x => v0.64}/guides/median.md | 10 +- .../{v0.x => v0.64}/guides/monitor-states.md | 8 +- .../guides/optimize-queries.md | 20 +- .../guides/percentile-quantile.md | 10 +- .../{v0.x => v0.64}/guides/query-fields.md | 12 +- .../guides/regular-expressions.md | 2 +- .../{v0.x => v0.64}/guides/scalar-values.md | 20 +- .../flux/{v0.x => v0.64}/guides/sort-limit.md | 8 +- content/flux/{v0.x => v0.64}/guides/sql.md | 8 +- .../guides/windowing-aggregating.md | 12 +- .../{v0.x => v0.64}/introduction/_index.md | 8 +- .../v0.64/introduction/flux-vs-influxql.md | 272 ++++++++++++++++++ .../introduction/getting-started/_index.md | 10 +- .../getting-started/query-influxdb.md | 20 +- .../getting-started/syntax-basics.md | 10 +- .../getting-started/transform-data.md | 28 +- .../introduction/installation.md | 4 +- .../flux/{v0.x => v0.64}/language/_index.md | 2 +- .../language/assignment-scope.md | 2 +- .../flux/{v0.x => v0.64}/language/blocks.md | 2 +- .../{v0.x => v0.64}/language/data-model.md | 2 +- .../{v0.x => v0.64}/language/expressions.md | 4 +- .../language/lexical-elements.md | 2 +- .../flux/{v0.x => v0.64}/language/notation.md | 2 +- .../{v0.x => v0.64}/language/operators.md | 4 +- .../flux/{v0.x => v0.64}/language/options.md | 2 +- .../flux/{v0.x => v0.64}/language/packages.md | 4 +- .../language/representation.md | 2 +- .../{v0.x => v0.64}/language/side-effects.md | 2 +- .../{v0.x => v0.64}/language/statements.md | 2 +- .../language/string-interpolation.md | 10 +- .../language/system-built-ins.md | 4 +- .../flux/{v0.x => v0.64}/language/types.md | 2 +- .../{v0.x => v0.64}/language/variables.md | 2 +- content/flux/{v0.x => v0.64}/stdlib/_index.md | 4 +- .../{v0.x => v0.64}/stdlib/built-in/_index.md | 4 +- .../stdlib/built-in/inputs/_index.md | 6 +- .../stdlib/built-in/inputs/buckets.md | 6 +- .../stdlib/built-in/inputs/from.md | 6 +- .../stdlib/built-in/misc/_index.md | 6 +- .../stdlib/built-in/misc/intervals.md | 8 +- .../stdlib/built-in/misc/length.md | 2 +- .../stdlib/built-in/misc/linearbins.md | 8 +- .../stdlib/built-in/misc/logarithmicbins.md | 8 +- .../stdlib/built-in/misc/now.md | 4 +- .../stdlib/built-in/misc/sleep.md | 4 +- .../stdlib/built-in/outputs/_index.md | 6 +- .../stdlib/built-in/outputs/to.md | 8 +- .../stdlib/built-in/outputs/yield.md | 6 +- .../stdlib/built-in/tests/_index.md | 6 +- .../stdlib/built-in/tests/contains.md | 4 +- .../stdlib/built-in/transformations/_index.md | 6 +- .../transformations/aggregates/_index.md | 20 +- .../aggregates/aggregatewindow.md | 8 +- .../aggregates/chandemomentumoscillator.md | 4 +- .../transformations/aggregates/count.md | 12 +- .../transformations/aggregates/cov.md | 6 +- .../transformations/aggregates/covariance.md | 6 +- .../transformations/aggregates/derivative.md | 6 +- .../transformations/aggregates/difference.md | 6 +- .../transformations/aggregates/doubleema.md | 8 +- .../aggregates/exponentialmovingaverage.md | 4 +- .../aggregates/histogramquantile.md | 6 +- .../transformations/aggregates/holtwinters.md | 12 +- .../transformations/aggregates/increase.md | 6 +- .../transformations/aggregates/integral.md | 6 +- .../transformations/aggregates/kaufmansama.md | 4 +- .../transformations/aggregates/kaufmanser.md | 4 +- .../transformations/aggregates/mean.md | 6 +- .../transformations/aggregates/median.md | 12 +- .../transformations/aggregates/mode.md | 4 +- .../aggregates/movingaverage.md | 4 +- .../transformations/aggregates/pearsonr.md | 6 +- .../transformations/aggregates/quantile.md | 8 +- .../transformations/aggregates/reduce.md | 6 +- .../aggregates/relativestrengthindex.md | 4 +- .../transformations/aggregates/skew.md | 6 +- .../transformations/aggregates/spread.md | 6 +- .../transformations/aggregates/stddev.md | 6 +- .../transformations/aggregates/sum.md | 6 +- .../aggregates/timedmovingaverage.md | 4 +- .../transformations/aggregates/tripleema.md | 10 +- .../aggregates/tripleexponentialderivative.md | 6 +- .../built-in/transformations/columns.md | 6 +- .../built-in/transformations/cumulativesum.md | 6 +- .../stdlib/built-in/transformations/drop.md | 8 +- .../built-in/transformations/duplicate.md | 6 +- .../built-in/transformations/elapsed.md | 4 +- .../stdlib/built-in/transformations/fill.md | 6 +- .../stdlib/built-in/transformations/filter.md | 8 +- .../stdlib/built-in/transformations/group.md | 6 +- .../built-in/transformations/histogram.md | 10 +- .../built-in/transformations/hourselection.md | 4 +- .../transformations/influxfieldsascols.md | 8 +- .../stdlib/built-in/transformations/join.md | 8 +- .../stdlib/built-in/transformations/keep.md | 10 +- .../stdlib/built-in/transformations/keys.md | 6 +- .../built-in/transformations/keyvalues.md | 8 +- .../stdlib/built-in/transformations/limit.md | 6 +- .../stdlib/built-in/transformations/map.md | 8 +- .../stdlib/built-in/transformations/pivot.md | 6 +- .../stdlib/built-in/transformations/range.md | 8 +- .../stdlib/built-in/transformations/rename.md | 8 +- .../transformations/selectors/_index.md | 10 +- .../transformations/selectors/bottom.md | 6 +- .../transformations/selectors/distinct.md | 6 +- .../transformations/selectors/first.md | 6 +- .../selectors/highestaverage.md | 6 +- .../selectors/highestcurrent.md | 6 +- .../transformations/selectors/highestmax.md | 6 +- .../transformations/selectors/last.md | 6 +- .../selectors/lowestaverage.md | 6 +- .../selectors/lowestcurrent.md | 6 +- .../transformations/selectors/lowestmin.md | 6 +- .../built-in/transformations/selectors/max.md | 6 +- .../built-in/transformations/selectors/min.md | 6 +- .../transformations/selectors/sample.md | 6 +- .../built-in/transformations/selectors/top.md | 6 +- .../transformations/selectors/unique.md | 6 +- .../stdlib/built-in/transformations/set.md | 6 +- .../stdlib/built-in/transformations/sort.md | 6 +- .../built-in/transformations/statecount.md | 8 +- .../built-in/transformations/stateduration.md | 8 +- .../transformations/stream-table/_index.md | 4 +- .../transformations/stream-table/getcolumn.md | 4 +- .../transformations/stream-table/getrecord.md | 4 +- .../transformations/stream-table/tablefind.md | 10 +- .../stdlib/built-in/transformations/tail.md | 4 +- .../built-in/transformations/timeshift.md | 8 +- .../transformations/truncatetimecolumn.md | 4 +- .../type-conversions/_index.md | 6 +- .../transformations/type-conversions/bool.md | 4 +- .../transformations/type-conversions/bytes.md | 4 +- .../type-conversions/duration.md | 6 +- .../transformations/type-conversions/float.md | 4 +- .../transformations/type-conversions/int.md | 4 +- .../type-conversions/string.md | 4 +- .../transformations/type-conversions/time.md | 4 +- .../type-conversions/tobool.md | 6 +- .../type-conversions/toduration.md | 8 +- .../type-conversions/tofloat.md | 6 +- .../transformations/type-conversions/toint.md | 6 +- .../type-conversions/tostring.md | 6 +- .../type-conversions/totime.md | 6 +- .../type-conversions/touint.md | 6 +- .../transformations/type-conversions/uint.md | 4 +- .../stdlib/built-in/transformations/union.md | 8 +- .../stdlib/built-in/transformations/window.md | 6 +- .../flux/{v0.x => v0.64}/stdlib/csv/_index.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/csv/from.md | 10 +- .../stdlib/custom-functions/_index.md | 10 +- .../custom-functions/custom-aggregate.md | 24 +- .../{v0.x => v0.64}/stdlib/date/_index.md | 6 +- .../flux/{v0.x => v0.64}/stdlib/date/hour.md | 4 +- .../stdlib/date/microsecond.md | 4 +- .../stdlib/date/millisecond.md | 4 +- .../{v0.x => v0.64}/stdlib/date/minute.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/date/month.md | 4 +- .../{v0.x => v0.64}/stdlib/date/monthday.md | 4 +- .../{v0.x => v0.64}/stdlib/date/nanosecond.md | 4 +- .../{v0.x => v0.64}/stdlib/date/quarter.md | 4 +- .../{v0.x => v0.64}/stdlib/date/second.md | 4 +- .../{v0.x => v0.64}/stdlib/date/truncate.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/date/week.md | 4 +- .../{v0.x => v0.64}/stdlib/date/weekday.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/date/year.md | 4 +- .../{v0.x => v0.64}/stdlib/date/yearday.md | 4 +- .../stdlib/experimental/_index.md | 2 +- .../stdlib/experimental/addduration.md | 4 +- .../stdlib/experimental/aggregate/_index.md | 2 +- .../stdlib/experimental/aggregate/rate.md | 14 +- .../stdlib/experimental/bigtable/_index.md | 2 +- .../stdlib/experimental/bigtable/from.md | 2 +- .../stdlib/experimental/csv/_index.md | 2 +- .../stdlib/experimental/csv/from.md | 4 +- .../stdlib/experimental/geo/_index.md | 2 +- .../stdlib/experimental/geo/astracks.md | 2 +- .../stdlib/experimental/geo/filterrows.md | 8 +- .../stdlib/experimental/geo/gridfilter.md | 8 +- .../stdlib/experimental/geo/groupbyarea.md | 2 +- .../stdlib/experimental/geo/s2cellidtoken.md | 2 +- .../stdlib/experimental/geo/strictfilter.md | 8 +- .../stdlib/experimental/geo/torows.md | 2 +- .../stdlib/experimental/group.md | 8 +- .../stdlib/experimental/http/_index.md | 2 +- .../stdlib/experimental/http/get.md | 2 +- .../stdlib/experimental/mqtt/_index.md | 2 +- .../stdlib/experimental/mqtt/to.md | 2 +- .../stdlib/experimental/objectkeys.md | 2 +- .../stdlib/experimental/prometheus/_index.md | 2 +- .../prometheus/histogramquantile.md | 2 +- .../stdlib/experimental/prometheus/scrape.md | 2 +- .../stdlib/experimental/query/_index.md | 4 +- .../stdlib/experimental/query/filterfields.md | 8 +- .../experimental/query/filtermeasurement.md | 4 +- .../stdlib/experimental/query/fromrange.md | 6 +- .../stdlib/experimental/query/inbucket.md | 10 +- .../stdlib/experimental/set.md | 6 +- .../stdlib/experimental/subduration.md | 4 +- .../{v0.x => v0.64}/stdlib/experimental/to.md | 8 +- .../{v0.x => v0.64}/stdlib/http/_index.md | 2 +- .../{v0.x => v0.64}/stdlib/http/basicauth.md | 2 +- .../{v0.x => v0.64}/stdlib/http/endpoint.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/http/post.md | 2 +- .../stdlib/influxdb-v1/_index.md | 4 +- .../stdlib/influxdb-v1/databases.md | 2 +- .../stdlib/influxdb-v1/fieldsascols.md | 10 +- .../stdlib/influxdb-v1/measurements.md | 6 +- .../stdlib/influxdb-v1/measurementtagkeys.md | 6 +- .../influxdb-v1/measurementtagvalues.md | 6 +- .../stdlib/influxdb-v1/tagkeys.md | 16 +- .../stdlib/influxdb-v1/tagvalues.md | 16 +- .../{v0.x => v0.64}/stdlib/json/encode.md | 6 +- .../flux/{v0.x => v0.64}/stdlib/json/index.md | 4 +- .../{v0.x => v0.64}/stdlib/math/_index.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/math/abs.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/math/acos.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/math/acosh.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/math/asin.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/math/asinh.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/math/atan.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/math/atan2.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/math/atanh.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/math/cbrt.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/math/ceil.md | 4 +- .../{v0.x => v0.64}/stdlib/math/copysign.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/math/cos.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/math/cosh.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/math/dim.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/math/erf.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/math/erfc.md | 4 +- .../{v0.x => v0.64}/stdlib/math/erfcinv.md | 4 +- .../{v0.x => v0.64}/stdlib/math/erfinv.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/math/exp.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/math/exp2.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/math/expm1.md | 4 +- .../stdlib/math/float64bits.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/math/floor.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/math/frexp.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/math/gamma.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/math/hypot.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/math/ilogb.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/math/isinf.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/math/isnan.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/math/j0.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/math/j1.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/math/jn.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/math/ldexp.md | 6 +- .../{v0.x => v0.64}/stdlib/math/lgamma.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/math/log.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/math/log10.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/math/log1p.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/math/log2.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/math/logb.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/math/minf.md | 6 +- .../flux/{v0.x => v0.64}/stdlib/math/mmax.md | 6 +- .../flux/{v0.x => v0.64}/stdlib/math/mmin.md | 6 +- .../flux/{v0.x => v0.64}/stdlib/math/mod.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/math/modf.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/math/nan.md | 4 +- .../{v0.x => v0.64}/stdlib/math/nextafter.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/math/pow.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/math/pow10.md | 4 +- .../{v0.x => v0.64}/stdlib/math/remainder.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/math/round.md | 4 +- .../stdlib/math/roundtoeven.md | 4 +- .../{v0.x => v0.64}/stdlib/math/signbit.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/math/sin.md | 4 +- .../{v0.x => v0.64}/stdlib/math/sincos.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/math/sinh.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/math/sqrt.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/math/tan.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/math/tanh.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/math/trunc.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/math/y0.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/math/y1.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/math/yn.md | 4 +- .../{v0.x => v0.64}/stdlib/regexp/_index.md | 4 +- .../{v0.x => v0.64}/stdlib/regexp/compile.md | 4 +- .../stdlib/regexp/findstring.md | 4 +- .../stdlib/regexp/findstringindex.md | 4 +- .../stdlib/regexp/getstring.md | 4 +- .../stdlib/regexp/matchregexpstring.md | 4 +- .../stdlib/regexp/quotemeta.md | 4 +- .../stdlib/regexp/replaceallstring.md | 4 +- .../stdlib/regexp/splitregexp.md | 4 +- .../{v0.x => v0.64}/stdlib/runtime/_index.md | 4 +- .../{v0.x => v0.64}/stdlib/runtime/version.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/sql/_index.md | 4 +- .../flux/{v0.x => v0.64}/stdlib/sql/from.md | 6 +- content/flux/{v0.x => v0.64}/stdlib/sql/to.md | 6 +- .../{v0.x => v0.64}/stdlib/strings/_index.md | 4 +- .../{v0.x => v0.64}/stdlib/strings/compare.md | 4 +- .../stdlib/strings/containsany.md | 4 +- .../stdlib/strings/containsstr.md | 4 +- .../stdlib/strings/countstr.md | 4 +- .../stdlib/strings/equalfold.md | 4 +- .../stdlib/strings/hasprefix.md | 4 +- .../stdlib/strings/hassuffix.md | 4 +- .../stdlib/strings/index-func.md | 4 +- .../stdlib/strings/indexany.md | 4 +- .../{v0.x => v0.64}/stdlib/strings/isdigit.md | 4 +- .../stdlib/strings/isletter.md | 4 +- .../{v0.x => v0.64}/stdlib/strings/islower.md | 4 +- .../{v0.x => v0.64}/stdlib/strings/isupper.md | 4 +- .../{v0.x => v0.64}/stdlib/strings/joinstr.md | 4 +- .../stdlib/strings/lastindex.md | 4 +- .../stdlib/strings/lastindexany.md | 4 +- .../{v0.x => v0.64}/stdlib/strings/repeat.md | 4 +- .../{v0.x => v0.64}/stdlib/strings/replace.md | 4 +- .../stdlib/strings/replaceall.md | 4 +- .../{v0.x => v0.64}/stdlib/strings/split.md | 4 +- .../stdlib/strings/splitafter.md | 4 +- .../stdlib/strings/splitaftern.md | 4 +- .../{v0.x => v0.64}/stdlib/strings/splitn.md | 4 +- .../{v0.x => v0.64}/stdlib/strings/strlen.md | 4 +- .../stdlib/strings/substring.md | 4 +- .../{v0.x => v0.64}/stdlib/strings/title.md | 4 +- .../{v0.x => v0.64}/stdlib/strings/tolower.md | 4 +- .../{v0.x => v0.64}/stdlib/strings/totitle.md | 4 +- .../{v0.x => v0.64}/stdlib/strings/toupper.md | 4 +- .../{v0.x => v0.64}/stdlib/strings/trim.md | 4 +- .../stdlib/strings/trimleft.md | 4 +- .../stdlib/strings/trimprefix.md | 4 +- .../stdlib/strings/trimright.md | 4 +- .../stdlib/strings/trimspace.md | 4 +- .../stdlib/strings/trimsuffix.md | 4 +- .../{v0.x => v0.64}/stdlib/system/_index.md | 2 +- .../{v0.x => v0.64}/stdlib/system/time.md | 10 +- .../{v0.x => v0.64}/stdlib/testing/_index.md | 4 +- .../stdlib/testing/assertempty.md | 6 +- .../stdlib/testing/assertequals.md | 6 +- .../{v0.x => v0.64}/stdlib/testing/diff.md | 4 +- .../v0.x/introduction/flux-vs-influxql.md | 272 ------------------ data/default_versions.toml | 4 +- data/versions.toml | 2 +- 356 files changed, 1258 insertions(+), 1258 deletions(-) rename content/flux/{v0.x => v0.64}/_index.md (59%) rename content/flux/{v0.x => v0.64}/about_the_project/_index.md (92%) rename content/flux/{v0.x => v0.64}/about_the_project/cla.md (91%) rename content/flux/{v0.x => v0.64}/about_the_project/license.md (92%) rename content/flux/{v0.x => v0.64}/about_the_project/releasenotes-changelog.md (99%) rename content/flux/{v0.x => v0.64}/guides/_index.md (98%) rename content/flux/{v0.x => v0.64}/guides/conditional-logic.md (90%) rename content/flux/{v0.x => v0.64}/guides/cumulativesum.md (82%) rename content/flux/{v0.x => v0.64}/guides/executing-queries.md (99%) rename content/flux/{v0.x => v0.64}/guides/exists.md (76%) rename content/flux/{v0.x => v0.64}/guides/flux-in-dashboards.md (96%) rename content/flux/{v0.x => v0.64}/guides/geo/_index.md (83%) rename content/flux/{v0.x => v0.64}/guides/geo/filter-by-region.md (96%) rename content/flux/{v0.x => v0.64}/guides/geo/group-geo-data.md (89%) rename content/flux/{v0.x => v0.64}/guides/geo/shape-geo-data.md (94%) rename content/flux/{v0.x => v0.64}/guides/grouping-data.md (99%) rename content/flux/{v0.x => v0.64}/guides/histograms.md (96%) rename content/flux/{v0.x => v0.64}/guides/join.md (99%) rename content/flux/{v0.x => v0.64}/guides/manipulate-timestamps.md (77%) rename content/flux/{v0.x => v0.64}/guides/mathematic-operations.md (89%) rename content/flux/{v0.x => v0.64}/guides/median.md (88%) rename content/flux/{v0.x => v0.64}/guides/monitor-states.md (92%) rename content/flux/{v0.x => v0.64}/guides/optimize-queries.md (81%) rename content/flux/{v0.x => v0.64}/guides/percentile-quantile.md (89%) rename content/flux/{v0.x => v0.64}/guides/query-fields.md (82%) rename content/flux/{v0.x => v0.64}/guides/regular-expressions.md (99%) rename content/flux/{v0.x => v0.64}/guides/scalar-values.md (88%) rename content/flux/{v0.x => v0.64}/guides/sort-limit.md (60%) rename content/flux/{v0.x => v0.64}/guides/sql.md (95%) rename content/flux/{v0.x => v0.64}/guides/windowing-aggregating.md (97%) rename content/flux/{v0.x => v0.64}/introduction/_index.md (88%) create mode 100644 content/flux/v0.64/introduction/flux-vs-influxql.md rename content/flux/{v0.x => v0.64}/introduction/getting-started/_index.md (91%) rename content/flux/{v0.x => v0.64}/introduction/getting-started/query-influxdb.md (80%) rename content/flux/{v0.x => v0.64}/introduction/getting-started/syntax-basics.md (94%) rename content/flux/{v0.x => v0.64}/introduction/getting-started/transform-data.md (80%) rename content/flux/{v0.x => v0.64}/introduction/installation.md (88%) rename content/flux/{v0.x => v0.64}/language/_index.md (99%) rename content/flux/{v0.x => v0.64}/language/assignment-scope.md (99%) rename content/flux/{v0.x => v0.64}/language/blocks.md (98%) rename content/flux/{v0.x => v0.64}/language/data-model.md (99%) rename content/flux/{v0.x => v0.64}/language/expressions.md (99%) rename content/flux/{v0.x => v0.64}/language/lexical-elements.md (99%) rename content/flux/{v0.x => v0.64}/language/notation.md (98%) rename content/flux/{v0.x => v0.64}/language/operators.md (98%) rename content/flux/{v0.x => v0.64}/language/options.md (99%) rename content/flux/{v0.x => v0.64}/language/packages.md (98%) rename content/flux/{v0.x => v0.64}/language/representation.md (98%) rename content/flux/{v0.x => v0.64}/language/side-effects.md (97%) rename content/flux/{v0.x => v0.64}/language/statements.md (99%) rename content/flux/{v0.x => v0.64}/language/string-interpolation.md (88%) rename content/flux/{v0.x => v0.64}/language/system-built-ins.md (91%) rename content/flux/{v0.x => v0.64}/language/types.md (99%) rename content/flux/{v0.x => v0.64}/language/variables.md (97%) rename content/flux/{v0.x => v0.64}/stdlib/_index.md (91%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/_index.md (92%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/inputs/_index.md (81%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/inputs/buckets.md (81%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/inputs/from.md (91%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/misc/_index.md (85%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/misc/intervals.md (96%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/misc/length.md (97%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/misc/linearbins.md (84%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/misc/logarithmicbins.md (84%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/misc/now.md (90%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/misc/sleep.md (94%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/outputs/_index.md (81%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/outputs/to.md (95%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/outputs/yield.md (91%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/tests/_index.md (80%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/tests/contains.md (93%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/_index.md (81%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/aggregates/_index.md (66%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/aggregates/aggregatewindow.md (92%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/aggregates/chandemomentumoscillator.md (96%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/aggregates/count.md (72%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/aggregates/cov.md (91%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/aggregates/covariance.md (85%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/aggregates/derivative.md (90%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/aggregates/difference.md (94%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/aggregates/doubleema.md (86%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/aggregates/exponentialmovingaverage.md (95%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/aggregates/histogramquantile.md (94%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/aggregates/holtwinters.md (88%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/aggregates/increase.md (90%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/aggregates/integral.md (88%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/aggregates/kaufmansama.md (92%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/aggregates/kaufmanser.md (92%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/aggregates/mean.md (85%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/aggregates/median.md (88%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/aggregates/mode.md (93%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/aggregates/movingaverage.md (94%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/aggregates/pearsonr.md (90%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/aggregates/quantile.md (92%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/aggregates/reduce.md (96%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/aggregates/relativestrengthindex.md (96%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/aggregates/skew.md (82%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/aggregates/spread.md (89%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/aggregates/stddev.md (89%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/aggregates/sum.md (86%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/aggregates/timedmovingaverage.md (94%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/aggregates/tripleema.md (83%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/aggregates/tripleexponentialderivative.md (91%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/columns.md (93%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/cumulativesum.md (87%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/drop.md (87%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/duplicate.md (88%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/elapsed.md (93%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/fill.md (93%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/filter.md (93%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/group.md (93%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/histogram.md (89%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/hourselection.md (92%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/influxfieldsascols.md (83%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/join.md (94%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/keep.md (82%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/keys.md (93%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/keyvalues.md (91%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/limit.md (90%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/map.md (92%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/pivot.md (98%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/range.md (89%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/rename.md (85%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/selectors/_index.md (68%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/selectors/bottom.md (90%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/selectors/distinct.md (84%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/selectors/first.md (82%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/selectors/highestaverage.md (92%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/selectors/highestcurrent.md (92%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/selectors/highestmax.md (92%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/selectors/last.md (82%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/selectors/lowestaverage.md (92%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/selectors/lowestcurrent.md (92%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/selectors/lowestmin.md (93%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/selectors/max.md (85%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/selectors/min.md (85%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/selectors/sample.md (87%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/selectors/top.md (89%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/selectors/unique.md (82%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/set.md (87%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/sort.md (90%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/statecount.md (87%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/stateduration.md (88%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/stream-table/_index.md (91%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/stream-table/getcolumn.md (90%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/stream-table/getrecord.md (90%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/stream-table/tablefind.md (79%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/tail.md (93%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/timeshift.md (84%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/truncatetimecolumn.md (92%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/type-conversions/_index.md (76%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/type-conversions/bool.md (87%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/type-conversions/bytes.md (86%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/type-conversions/duration.md (83%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/type-conversions/float.md (87%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/type-conversions/int.md (91%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/type-conversions/string.md (88%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/type-conversions/time.md (89%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/type-conversions/tobool.md (80%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/type-conversions/toduration.md (83%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/type-conversions/tofloat.md (84%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/type-conversions/toint.md (88%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/type-conversions/tostring.md (84%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/type-conversions/totime.md (85%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/type-conversions/touint.md (88%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/type-conversions/uint.md (91%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/union.md (88%) rename content/flux/{v0.x => v0.64}/stdlib/built-in/transformations/window.md (96%) rename content/flux/{v0.x => v0.64}/stdlib/csv/_index.md (91%) rename content/flux/{v0.x => v0.64}/stdlib/csv/from.md (89%) rename content/flux/{v0.x => v0.64}/stdlib/custom-functions/_index.md (88%) rename content/flux/{v0.x => v0.64}/stdlib/custom-functions/custom-aggregate.md (88%) rename content/flux/{v0.x => v0.64}/stdlib/date/_index.md (91%) rename content/flux/{v0.x => v0.64}/stdlib/date/hour.md (90%) rename content/flux/{v0.x => v0.64}/stdlib/date/microsecond.md (90%) rename content/flux/{v0.x => v0.64}/stdlib/date/millisecond.md (90%) rename content/flux/{v0.x => v0.64}/stdlib/date/minute.md (90%) rename content/flux/{v0.x => v0.64}/stdlib/date/month.md (90%) rename content/flux/{v0.x => v0.64}/stdlib/date/monthday.md (90%) rename content/flux/{v0.x => v0.64}/stdlib/date/nanosecond.md (90%) rename content/flux/{v0.x => v0.64}/stdlib/date/quarter.md (91%) rename content/flux/{v0.x => v0.64}/stdlib/date/second.md (90%) rename content/flux/{v0.x => v0.64}/stdlib/date/truncate.md (95%) rename content/flux/{v0.x => v0.64}/stdlib/date/week.md (91%) rename content/flux/{v0.x => v0.64}/stdlib/date/weekday.md (90%) rename content/flux/{v0.x => v0.64}/stdlib/date/year.md (89%) rename content/flux/{v0.x => v0.64}/stdlib/date/yearday.md (92%) rename content/flux/{v0.x => v0.64}/stdlib/experimental/_index.md (98%) rename content/flux/{v0.x => v0.64}/stdlib/experimental/addduration.md (91%) rename content/flux/{v0.x => v0.64}/stdlib/experimental/aggregate/_index.md (97%) rename content/flux/{v0.x => v0.64}/stdlib/experimental/aggregate/rate.md (74%) rename content/flux/{v0.x => v0.64}/stdlib/experimental/bigtable/_index.md (97%) rename content/flux/{v0.x => v0.64}/stdlib/experimental/bigtable/from.md (99%) rename content/flux/{v0.x => v0.64}/stdlib/experimental/csv/_index.md (97%) rename content/flux/{v0.x => v0.64}/stdlib/experimental/csv/from.md (93%) rename content/flux/{v0.x => v0.64}/stdlib/experimental/geo/_index.md (99%) rename content/flux/{v0.x => v0.64}/stdlib/experimental/geo/astracks.md (98%) rename content/flux/{v0.x => v0.64}/stdlib/experimental/geo/filterrows.md (95%) rename content/flux/{v0.x => v0.64}/stdlib/experimental/geo/gridfilter.md (93%) rename content/flux/{v0.x => v0.64}/stdlib/experimental/geo/groupbyarea.md (99%) rename content/flux/{v0.x => v0.64}/stdlib/experimental/geo/s2cellidtoken.md (99%) rename content/flux/{v0.x => v0.64}/stdlib/experimental/geo/strictfilter.md (87%) rename content/flux/{v0.x => v0.64}/stdlib/experimental/geo/torows.md (98%) rename content/flux/{v0.x => v0.64}/stdlib/experimental/group.md (84%) rename content/flux/{v0.x => v0.64}/stdlib/experimental/http/_index.md (97%) rename content/flux/{v0.x => v0.64}/stdlib/experimental/http/get.md (99%) rename content/flux/{v0.x => v0.64}/stdlib/experimental/mqtt/_index.md (97%) rename content/flux/{v0.x => v0.64}/stdlib/experimental/mqtt/to.md (99%) rename content/flux/{v0.x => v0.64}/stdlib/experimental/objectkeys.md (98%) rename content/flux/{v0.x => v0.64}/stdlib/experimental/prometheus/_index.md (97%) rename content/flux/{v0.x => v0.64}/stdlib/experimental/prometheus/histogramquantile.md (98%) rename content/flux/{v0.x => v0.64}/stdlib/experimental/prometheus/scrape.md (98%) rename content/flux/{v0.x => v0.64}/stdlib/experimental/query/_index.md (93%) rename content/flux/{v0.x => v0.64}/stdlib/experimental/query/filterfields.md (82%) rename content/flux/{v0.x => v0.64}/stdlib/experimental/query/filtermeasurement.md (92%) rename content/flux/{v0.x => v0.64}/stdlib/experimental/query/fromrange.md (91%) rename content/flux/{v0.x => v0.64}/stdlib/experimental/query/inbucket.md (88%) rename content/flux/{v0.x => v0.64}/stdlib/experimental/set.md (92%) rename content/flux/{v0.x => v0.64}/stdlib/experimental/subduration.md (92%) rename content/flux/{v0.x => v0.64}/stdlib/experimental/to.md (93%) rename content/flux/{v0.x => v0.64}/stdlib/http/_index.md (96%) rename content/flux/{v0.x => v0.64}/stdlib/http/basicauth.md (98%) rename content/flux/{v0.x => v0.64}/stdlib/http/endpoint.md (91%) rename content/flux/{v0.x => v0.64}/stdlib/http/post.md (98%) rename content/flux/{v0.x => v0.64}/stdlib/influxdb-v1/_index.md (92%) rename content/flux/{v0.x => v0.64}/stdlib/influxdb-v1/databases.md (98%) rename content/flux/{v0.x => v0.64}/stdlib/influxdb-v1/fieldsascols.md (81%) rename content/flux/{v0.x => v0.64}/stdlib/influxdb-v1/measurements.md (87%) rename content/flux/{v0.x => v0.64}/stdlib/influxdb-v1/measurementtagkeys.md (89%) rename content/flux/{v0.x => v0.64}/stdlib/influxdb-v1/measurementtagvalues.md (90%) rename content/flux/{v0.x => v0.64}/stdlib/influxdb-v1/tagkeys.md (77%) rename content/flux/{v0.x => v0.64}/stdlib/influxdb-v1/tagvalues.md (78%) rename content/flux/{v0.x => v0.64}/stdlib/json/encode.md (88%) rename content/flux/{v0.x => v0.64}/stdlib/json/index.md (87%) rename content/flux/{v0.x => v0.64}/stdlib/math/_index.md (97%) rename content/flux/{v0.x => v0.64}/stdlib/math/abs.md (91%) rename content/flux/{v0.x => v0.64}/stdlib/math/acos.md (92%) rename content/flux/{v0.x => v0.64}/stdlib/math/acosh.md (92%) rename content/flux/{v0.x => v0.64}/stdlib/math/asin.md (92%) rename content/flux/{v0.x => v0.64}/stdlib/math/asinh.md (91%) rename content/flux/{v0.x => v0.64}/stdlib/math/atan.md (91%) rename content/flux/{v0.x => v0.64}/stdlib/math/atan2.md (96%) rename content/flux/{v0.x => v0.64}/stdlib/math/atanh.md (93%) rename content/flux/{v0.x => v0.64}/stdlib/math/cbrt.md (91%) rename content/flux/{v0.x => v0.64}/stdlib/math/ceil.md (92%) rename content/flux/{v0.x => v0.64}/stdlib/math/copysign.md (91%) rename content/flux/{v0.x => v0.64}/stdlib/math/cos.md (91%) rename content/flux/{v0.x => v0.64}/stdlib/math/cosh.md (91%) rename content/flux/{v0.x => v0.64}/stdlib/math/dim.md (93%) rename content/flux/{v0.x => v0.64}/stdlib/math/erf.md (91%) rename content/flux/{v0.x => v0.64}/stdlib/math/erfc.md (91%) rename content/flux/{v0.x => v0.64}/stdlib/math/erfcinv.md (93%) rename content/flux/{v0.x => v0.64}/stdlib/math/erfinv.md (93%) rename content/flux/{v0.x => v0.64}/stdlib/math/exp.md (92%) rename content/flux/{v0.x => v0.64}/stdlib/math/exp2.md (92%) rename content/flux/{v0.x => v0.64}/stdlib/math/expm1.md (93%) rename content/flux/{v0.x => v0.64}/stdlib/math/float64bits.md (91%) rename content/flux/{v0.x => v0.64}/stdlib/math/floor.md (92%) rename content/flux/{v0.x => v0.64}/stdlib/math/frexp.md (94%) rename content/flux/{v0.x => v0.64}/stdlib/math/gamma.md (92%) rename content/flux/{v0.x => v0.64}/stdlib/math/hypot.md (94%) rename content/flux/{v0.x => v0.64}/stdlib/math/ilogb.md (92%) rename content/flux/{v0.x => v0.64}/stdlib/math/isinf.md (93%) rename content/flux/{v0.x => v0.64}/stdlib/math/isnan.md (90%) rename content/flux/{v0.x => v0.64}/stdlib/math/j0.md (92%) rename content/flux/{v0.x => v0.64}/stdlib/math/j1.md (91%) rename content/flux/{v0.x => v0.64}/stdlib/math/jn.md (92%) rename content/flux/{v0.x => v0.64}/stdlib/math/ldexp.md (89%) rename content/flux/{v0.x => v0.64}/stdlib/math/lgamma.md (93%) rename content/flux/{v0.x => v0.64}/stdlib/math/log.md (92%) rename content/flux/{v0.x => v0.64}/stdlib/math/log10.md (92%) rename content/flux/{v0.x => v0.64}/stdlib/math/log1p.md (94%) rename content/flux/{v0.x => v0.64}/stdlib/math/log2.md (92%) rename content/flux/{v0.x => v0.64}/stdlib/math/logb.md (91%) rename content/flux/{v0.x => v0.64}/stdlib/math/minf.md (85%) rename content/flux/{v0.x => v0.64}/stdlib/math/mmax.md (90%) rename content/flux/{v0.x => v0.64}/stdlib/math/mmin.md (89%) rename content/flux/{v0.x => v0.64}/stdlib/math/mod.md (94%) rename content/flux/{v0.x => v0.64}/stdlib/math/modf.md (93%) rename content/flux/{v0.x => v0.64}/stdlib/math/nan.md (86%) rename content/flux/{v0.x => v0.64}/stdlib/math/nextafter.md (93%) rename content/flux/{v0.x => v0.64}/stdlib/math/pow.md (97%) rename content/flux/{v0.x => v0.64}/stdlib/math/pow10.md (91%) rename content/flux/{v0.x => v0.64}/stdlib/math/remainder.md (93%) rename content/flux/{v0.x => v0.64}/stdlib/math/round.md (92%) rename content/flux/{v0.x => v0.64}/stdlib/math/roundtoeven.md (92%) rename content/flux/{v0.x => v0.64}/stdlib/math/signbit.md (89%) rename content/flux/{v0.x => v0.64}/stdlib/math/sin.md (92%) rename content/flux/{v0.x => v0.64}/stdlib/math/sincos.md (93%) rename content/flux/{v0.x => v0.64}/stdlib/math/sinh.md (91%) rename content/flux/{v0.x => v0.64}/stdlib/math/sqrt.md (91%) rename content/flux/{v0.x => v0.64}/stdlib/math/tan.md (92%) rename content/flux/{v0.x => v0.64}/stdlib/math/tanh.md (91%) rename content/flux/{v0.x => v0.64}/stdlib/math/trunc.md (91%) rename content/flux/{v0.x => v0.64}/stdlib/math/y0.md (92%) rename content/flux/{v0.x => v0.64}/stdlib/math/y1.md (92%) rename content/flux/{v0.x => v0.64}/stdlib/math/yn.md (94%) rename content/flux/{v0.x => v0.64}/stdlib/regexp/_index.md (91%) rename content/flux/{v0.x => v0.64}/stdlib/regexp/compile.md (94%) rename content/flux/{v0.x => v0.64}/stdlib/regexp/findstring.md (93%) rename content/flux/{v0.x => v0.64}/stdlib/regexp/findstringindex.md (94%) rename content/flux/{v0.x => v0.64}/stdlib/regexp/getstring.md (93%) rename content/flux/{v0.x => v0.64}/stdlib/regexp/matchregexpstring.md (93%) rename content/flux/{v0.x => v0.64}/stdlib/regexp/quotemeta.md (93%) rename content/flux/{v0.x => v0.64}/stdlib/regexp/replaceallstring.md (94%) rename content/flux/{v0.x => v0.64}/stdlib/regexp/splitregexp.md (93%) rename content/flux/{v0.x => v0.64}/stdlib/runtime/_index.md (90%) rename content/flux/{v0.x => v0.64}/stdlib/runtime/version.md (87%) rename content/flux/{v0.x => v0.64}/stdlib/sql/_index.md (90%) rename content/flux/{v0.x => v0.64}/stdlib/sql/from.md (92%) rename content/flux/{v0.x => v0.64}/stdlib/sql/to.md (93%) rename content/flux/{v0.x => v0.64}/stdlib/strings/_index.md (89%) rename content/flux/{v0.x => v0.64}/stdlib/strings/compare.md (94%) rename content/flux/{v0.x => v0.64}/stdlib/strings/containsany.md (93%) rename content/flux/{v0.x => v0.64}/stdlib/strings/containsstr.md (93%) rename content/flux/{v0.x => v0.64}/stdlib/strings/countstr.md (94%) rename content/flux/{v0.x => v0.64}/stdlib/strings/equalfold.md (93%) rename content/flux/{v0.x => v0.64}/stdlib/strings/hasprefix.md (92%) rename content/flux/{v0.x => v0.64}/stdlib/strings/hassuffix.md (92%) rename content/flux/{v0.x => v0.64}/stdlib/strings/index-func.md (93%) rename content/flux/{v0.x => v0.64}/stdlib/strings/indexany.md (94%) rename content/flux/{v0.x => v0.64}/stdlib/strings/isdigit.md (91%) rename content/flux/{v0.x => v0.64}/stdlib/strings/isletter.md (92%) rename content/flux/{v0.x => v0.64}/stdlib/strings/islower.md (92%) rename content/flux/{v0.x => v0.64}/stdlib/strings/isupper.md (92%) rename content/flux/{v0.x => v0.64}/stdlib/strings/joinstr.md (93%) rename content/flux/{v0.x => v0.64}/stdlib/strings/lastindex.md (93%) rename content/flux/{v0.x => v0.64}/stdlib/strings/lastindexany.md (93%) rename content/flux/{v0.x => v0.64}/stdlib/strings/repeat.md (93%) rename content/flux/{v0.x => v0.64}/stdlib/strings/replace.md (94%) rename content/flux/{v0.x => v0.64}/stdlib/strings/replaceall.md (94%) rename content/flux/{v0.x => v0.64}/stdlib/strings/split.md (93%) rename content/flux/{v0.x => v0.64}/stdlib/strings/splitafter.md (93%) rename content/flux/{v0.x => v0.64}/stdlib/strings/splitaftern.md (94%) rename content/flux/{v0.x => v0.64}/stdlib/strings/splitn.md (94%) rename content/flux/{v0.x => v0.64}/stdlib/strings/strlen.md (94%) rename content/flux/{v0.x => v0.64}/stdlib/strings/substring.md (94%) rename content/flux/{v0.x => v0.64}/stdlib/strings/title.md (92%) rename content/flux/{v0.x => v0.64}/stdlib/strings/tolower.md (91%) rename content/flux/{v0.x => v0.64}/stdlib/strings/totitle.md (94%) rename content/flux/{v0.x => v0.64}/stdlib/strings/toupper.md (94%) rename content/flux/{v0.x => v0.64}/stdlib/strings/trim.md (94%) rename content/flux/{v0.x => v0.64}/stdlib/strings/trimleft.md (93%) rename content/flux/{v0.x => v0.64}/stdlib/strings/trimprefix.md (93%) rename content/flux/{v0.x => v0.64}/stdlib/strings/trimright.md (94%) rename content/flux/{v0.x => v0.64}/stdlib/strings/trimspace.md (92%) rename content/flux/{v0.x => v0.64}/stdlib/strings/trimsuffix.md (93%) rename content/flux/{v0.x => v0.64}/stdlib/system/_index.md (96%) rename content/flux/{v0.x => v0.64}/stdlib/system/time.md (82%) rename content/flux/{v0.x => v0.64}/stdlib/testing/_index.md (90%) rename content/flux/{v0.x => v0.64}/stdlib/testing/assertempty.md (86%) rename content/flux/{v0.x => v0.64}/stdlib/testing/assertequals.md (92%) rename content/flux/{v0.x => v0.64}/stdlib/testing/diff.md (96%) delete mode 100644 content/flux/v0.x/introduction/flux-vs-influxql.md diff --git a/content/flux/v0.x/_index.md b/content/flux/v0.64/_index.md similarity index 59% rename from content/flux/v0.x/_index.md rename to content/flux/v0.64/_index.md index 6412a1f90d..e86952d2cd 100644 --- a/content/flux/v0.x/_index.md +++ b/content/flux/v0.64/_index.md @@ -1,28 +1,28 @@ --- -title: Flux v0.x (technical preview) documentation +title: Flux v0.64 documentation description: menu: flux: - name: v0.x - identifier: flux_0_x + name: v0.64 + identifier: flux_0_64 weight: 95 --- -## [Introduction to Flux](/flux/v0.x/introduction) +## [Introduction to Flux](/flux/v0.64/introduction) A quick introduction to Flux and its design principles. -## [Enable Flux](/flux/v0.x/introduction/installation) +## [Enable Flux](/flux/v0.64/introduction/installation) Flux is packaged with InfluxDB v1.7+ and does not require any additional installation, however it does need to be enabled. -## [Get started with Flux](/flux/v0.x/introduction/getting-started) +## [Get started with Flux](/flux/v0.64/introduction/getting-started) The best way to learn Flux is to walk through writing a flux script. This guide does just that. -## [Flux guides](/flux/v0.x/guides) +## [Flux guides](/flux/v0.64/guides) Helpful guides that walk through both common and complex tasks and use cases for Flux. -## [Flux standard library](/flux/v0.x/stdlib) +## [Flux standard library](/flux/v0.64/stdlib) The Flux standard library includes packages and functions that retrieve, transform, process, and output data. -## [Flux language reference](/flux/v0.x/language) +## [Flux language reference](/flux/v0.64/language) The specification for the Flux language and query execution. diff --git a/content/flux/v0.x/about_the_project/_index.md b/content/flux/v0.64/about_the_project/_index.md similarity index 92% rename from content/flux/v0.x/about_the_project/_index.md rename to content/flux/v0.64/about_the_project/_index.md index b8dabcd504..f1fb518c2a 100644 --- a/content/flux/v0.x/about_the_project/_index.md +++ b/content/flux/v0.64/about_the_project/_index.md @@ -2,11 +2,11 @@ title: About the project menu: - flux_0_x: + flux_0_64: weight: 1 --- -## [Release notes](/flux/v0.x/about_the_project/releasenotes-changelog) +## [Release notes](/flux/v0.64/about_the_project/releasenotes-changelog) diff --git a/content/flux/v0.x/about_the_project/cla.md b/content/flux/v0.64/about_the_project/cla.md similarity index 91% rename from content/flux/v0.x/about_the_project/cla.md rename to content/flux/v0.64/about_the_project/cla.md index 7a75a0f341..c7ce8e3912 100644 --- a/content/flux/v0.x/about_the_project/cla.md +++ b/content/flux/v0.64/about_the_project/cla.md @@ -2,7 +2,7 @@ title: CLA menu: - flux_0_x: + flux_0_64: name: CLA weight: 30 parent: About the project diff --git a/content/flux/v0.x/about_the_project/license.md b/content/flux/v0.64/about_the_project/license.md similarity index 92% rename from content/flux/v0.x/about_the_project/license.md rename to content/flux/v0.64/about_the_project/license.md index 6a0facc384..9607c691be 100644 --- a/content/flux/v0.x/about_the_project/license.md +++ b/content/flux/v0.64/about_the_project/license.md @@ -2,7 +2,7 @@ title: License menu: - flux_0_x: + flux_0_64: name: License weight: 40 parent: About the project diff --git a/content/flux/v0.x/about_the_project/releasenotes-changelog.md b/content/flux/v0.64/about_the_project/releasenotes-changelog.md similarity index 99% rename from content/flux/v0.x/about_the_project/releasenotes-changelog.md rename to content/flux/v0.64/about_the_project/releasenotes-changelog.md index 90f49454bc..d198a7137a 100644 --- a/content/flux/v0.x/about_the_project/releasenotes-changelog.md +++ b/content/flux/v0.64/about_the_project/releasenotes-changelog.md @@ -1,7 +1,7 @@ --- title: Release Notes/Changelog menu: - flux_0_x: + flux_0_64: parent: About the project weight: 1 --- @@ -714,9 +714,9 @@ _A technical preview of Flux packaged with InfluxDB v1.7.8._ ### Features - Add stream table index functions ( - [`tableFind()`](/flux/v0.x/stdlib/built-in/transformations/stream-table/tablefind/), - [`getRecord()`](/flux/v0.x/stdlib/built-in/transformations/stream-table/getrecord/), - [`getColumn()`](/flux/v0.x/stdlib/built-in/transformations/stream-table/getcolumn/) + [`tableFind()`](/flux/v0.64/stdlib/built-in/transformations/stream-table/tablefind/), + [`getRecord()`](/flux/v0.64/stdlib/built-in/transformations/stream-table/getrecord/), + [`getColumn()`](/flux/v0.64/stdlib/built-in/transformations/stream-table/getcolumn/) ). - Construct invalid binary expressions when given multiple expressions. diff --git a/content/flux/v0.x/guides/_index.md b/content/flux/v0.64/guides/_index.md similarity index 98% rename from content/flux/v0.x/guides/_index.md rename to content/flux/v0.64/guides/_index.md index 87ff36806a..b52eb67a68 100644 --- a/content/flux/v0.x/guides/_index.md +++ b/content/flux/v0.64/guides/_index.md @@ -2,7 +2,7 @@ title: Flux guides description: Helpful guides that walk through both common and complex tasks and use cases for Flux. menu: - flux_0_x: + flux_0_64: name: Guides weight: 3 --- diff --git a/content/flux/v0.x/guides/conditional-logic.md b/content/flux/v0.64/guides/conditional-logic.md similarity index 90% rename from content/flux/v0.x/guides/conditional-logic.md rename to content/flux/v0.64/guides/conditional-logic.md index a54fcd15ff..99016a1319 100644 --- a/content/flux/v0.x/guides/conditional-logic.md +++ b/content/flux/v0.64/guides/conditional-logic.md @@ -4,7 +4,7 @@ description: > This guide describes how to use Flux conditional expressions, such as `if`, `else`, and `then`, to query and transform data. menu: - flux_0_x: + flux_0_64: name: Use conditional logic parent: Guides weight: 9 @@ -25,9 +25,9 @@ Conditional expressions are most useful in the following contexts: - When defining variables. - When using functions that operate on a single row at a time ( - [`filter()`](/flux/v0.x/stdlib/built-in/transformations/filter/), - [`map()`](/flux/v0.x/stdlib/built-in/transformations/map/), - [`reduce()`](/flux/v0.x/stdlib/built-in/transformations/aggregates/reduce) ). + [`filter()`](/flux/v0.64/stdlib/built-in/transformations/filter/), + [`map()`](/flux/v0.64/stdlib/built-in/transformations/map/), + [`reduce()`](/flux/v0.64/stdlib/built-in/transformations/aggregates/reduce) ). ## Examples @@ -71,7 +71,7 @@ from(bucket: "telegraf/autogen") ### Conditionally transform column values with map() -The following example uses the [`map()` function](/flux/v0.x/stdlib/built-in/transformations/map/) +The following example uses the [`map()` function](/flux/v0.64/stdlib/built-in/transformations/map/) to conditionally transform column values. It sets the `level` column to a specific string based on `_value` column. @@ -118,8 +118,8 @@ from(bucket: "telegraf/autogen") {{< /code-tabs-wrapper >}} ### Conditionally increment a count with reduce() -The following example uses the [`aggregateWindow()`](/flux/v0.x/stdlib/built-in/transformations/aggregates/aggregatewindow/) -and [`reduce()`](/flux/v0.x/stdlib/built-in/transformations/aggregates/reduce/) +The following example uses the [`aggregateWindow()`](/flux/v0.64/stdlib/built-in/transformations/aggregates/aggregatewindow/) +and [`reduce()`](/flux/v0.64/stdlib/built-in/transformations/aggregates/reduce/) functions to count the number of records in every five minute window that exceed a defined threshold. {{< code-tabs-wrapper >}} diff --git a/content/flux/v0.x/guides/cumulativesum.md b/content/flux/v0.64/guides/cumulativesum.md similarity index 82% rename from content/flux/v0.x/guides/cumulativesum.md rename to content/flux/v0.64/guides/cumulativesum.md index d853f4537d..7a354f917b 100644 --- a/content/flux/v0.x/guides/cumulativesum.md +++ b/content/flux/v0.64/guides/cumulativesum.md @@ -4,12 +4,12 @@ description: > Use the `cumulativeSum()` function to calculate a running total of values. weight: 10 menu: - flux_0_x: + flux_0_64: parent: Guides name: Query the cumulative sum --- -Use the [`cumulativeSum()` function](/flux/v0.x/stdlib/built-in/transformations/cumulativesum/) +Use the [`cumulativeSum()` function](/flux/v0.64/stdlib/built-in/transformations/cumulativesum/) to calculate a running total of values. `cumulativeSum` sums the values of subsequent records and returns each row updated with the summed total. @@ -37,7 +37,7 @@ to calculate a running total of values. {{< /flex >}} {{% note %}} -The examples below use the [example data variable](/flux/v0.x/guides/#example-data-variable). +The examples below use the [example data variable](/flux/v0.64/guides/#example-data-variable). {{% /note %}} ##### Calculate the running total of values @@ -47,7 +47,7 @@ data ``` ### Use cumulativeSum() with aggregateWindow() -[`aggregateWindow()`](/flux/v0.x/stdlib/built-in/transformations/aggregates/aggregatewindow/) +[`aggregateWindow()`](/flux/v0.64/stdlib/built-in/transformations/aggregates/aggregatewindow/) segments data into windows of time, aggregates data in each window into a single point, then removes the time-based segmentation. It is primarily used to downsample data. diff --git a/content/flux/v0.x/guides/executing-queries.md b/content/flux/v0.64/guides/executing-queries.md similarity index 99% rename from content/flux/v0.x/guides/executing-queries.md rename to content/flux/v0.64/guides/executing-queries.md index e3f18e782d..70947d7ee2 100644 --- a/content/flux/v0.x/guides/executing-queries.md +++ b/content/flux/v0.64/guides/executing-queries.md @@ -2,7 +2,7 @@ title: Different ways to execute Flux queries description: menu: - flux_0_x: + flux_0_64: name: Execute Flux queries parent: Guides weight: 1 diff --git a/content/flux/v0.x/guides/exists.md b/content/flux/v0.64/guides/exists.md similarity index 76% rename from content/flux/v0.x/guides/exists.md rename to content/flux/v0.64/guides/exists.md index 0aeeac1d8f..da44771b05 100644 --- a/content/flux/v0.x/guides/exists.md +++ b/content/flux/v0.64/guides/exists.md @@ -4,7 +4,7 @@ description: > Use the Flux `exists` operator to check if an object contains a key or if that key's value is `null`. menu: - flux_0_x: + flux_0_64: name: Check if a value exists parent: Guides weight: 20 @@ -25,13 +25,13 @@ exists p.height If you're just getting started with Flux queries, check out the following: -- [Get started with Flux](/flux/v0.x/introduction/getting-started/) for a conceptual overview of Flux and parts of a Flux query. -- [Execute queries](/flux/v0.x/guides/executing-queries/) to discover a variety of ways to run your queries. +- [Get started with Flux](/flux/v0.64/introduction/getting-started/) for a conceptual overview of Flux and parts of a Flux query. +- [Execute queries](/flux/v0.64/guides/executing-queries/) to discover a variety of ways to run your queries. Use `exists` with row functions ( -[`filter()`](/flux/v0.x/stdlib/built-in/transformations/filter/), -[`map()`](/flux/v0.x/stdlib/built-in/transformations/map/), -[`reduce()`](/flux/v0.x/stdlib/built-in/transformations/aggregates/reduce/)) +[`filter()`](/flux/v0.64/stdlib/built-in/transformations/filter/), +[`map()`](/flux/v0.64/stdlib/built-in/transformations/map/), +[`reduce()`](/flux/v0.64/stdlib/built-in/transformations/aggregates/reduce/)) to check if a row includes a column or if the value for that column is `null`. #### Filter out null values diff --git a/content/flux/v0.x/guides/flux-in-dashboards.md b/content/flux/v0.64/guides/flux-in-dashboards.md similarity index 96% rename from content/flux/v0.x/guides/flux-in-dashboards.md rename to content/flux/v0.64/guides/flux-in-dashboards.md index 64f938a3cf..28d8b57d85 100644 --- a/content/flux/v0.x/guides/flux-in-dashboards.md +++ b/content/flux/v0.64/guides/flux-in-dashboards.md @@ -2,7 +2,7 @@ title: How to use Flux in Chronograf dashboards description: This guide walks through using Flux queries in Chronograf dashboard cells, what template variables are available, and how to use them. menu: - flux_0_x: + flux_0_64: name: Use Flux in dashboards parent: Guides weight: 1 @@ -17,7 +17,7 @@ This guide walks through using Flux queries in Chronograf dashboard cells. --- -_**Chronograf v1.7+** and **InfluxDB v1.7 with [Flux enabled](/flux/v0.x/introduction/installation)** +_**Chronograf v1.7+** and **InfluxDB v1.7 with [Flux enabled](/flux/v0.64/introduction/installation)** are required to use Flux in dashboards._ --- @@ -29,7 +29,7 @@ To the right of the **Source dropdown** above the graph preview, select **Flux** ![Flux in Chronograf dashboard cells](/img/flux/flux-dashboard-cell.png) > The Flux source type is only available if your data source has -> [Flux enabled](/flux/v0.x/introduction/installation). +> [Flux enabled](/flux/v0.64/introduction/installation). This will provide **Schema**, **Script**, and **Functions** panes. @@ -124,7 +124,7 @@ dataSet The `autoInterval` template variable represents the refresh interval of the dashboard and is controlled by the refresh interval dropdown. It's typically used to align window intervals created in -[windowing and aggregation](/flux/v0.x/guides/windowing-aggregating) operations with dashboard refreshes. +[windowing and aggregation](/flux/v0.64/guides/windowing-aggregating) operations with dashboard refreshes. ```js dataSet diff --git a/content/flux/v0.x/guides/geo/_index.md b/content/flux/v0.64/guides/geo/_index.md similarity index 83% rename from content/flux/v0.x/guides/geo/_index.md rename to content/flux/v0.64/guides/geo/_index.md index 53980aeded..27739284ef 100644 --- a/content/flux/v0.x/guides/geo/_index.md +++ b/content/flux/v0.64/guides/geo/_index.md @@ -3,18 +3,18 @@ title: Work with geo-temporal data description: > Use the Flux Geo package to filter geo-temporal data and group by geographic location or track. menu: - flux_0_x: + flux_0_64: name: Geo-temporal data parent: Guides weight: 10 --- -Use the [Flux Geo package](/flux/v0.x/stdlib/experimental/geo) to +Use the [Flux Geo package](/flux/v0.64/stdlib/experimental/geo) to filter geo-temporal data and group by geographic location or track. {{% warn %}} The Geo package is experimental and subject to change at any time. -By using it, you agree to the [risks of experimental functions](/flux/v0.x/stdlib/experimental/#use-experimental-functions-at-your-own-risk). +By using it, you agree to the [risks of experimental functions](/flux/v0.64/stdlib/experimental/#use-experimental-functions-at-your-own-risk). {{% /warn %}} **To work with geo-temporal data:** @@ -41,10 +41,10 @@ Many of the examples in this section use a `sampleGeoData` variable that represe a sample set of geo-temporal data. The [Bird Migration Sample Data](https://github.com/influxdata/influxdb2-sample-data/tree/master/bird-migration-data) available on GitHub provides sample geo-temporal data that meets the -[requirements of the Flux Geo package](/flux/v0.x/stdlib/experimental/geo/#geo-schema-requirements). +[requirements of the Flux Geo package](/flux/v0.64/stdlib/experimental/geo/#geo-schema-requirements). ### Load annotated CSV sample data -Use the [experimental `csv.from()` function](/flux/v0.x/stdlib/experimental/csv/from/) +Use the [experimental `csv.from()` function](/flux/v0.64/stdlib/experimental/csv/from/) to load the sample bird migration annotated CSV data from GitHub: ```js @@ -57,8 +57,8 @@ sampleGeoData = csv.from( {{% note %}} `csv.from(url: ...)` downloads sample data each time you execute the query **(~1.3 MB)**. -If bandwidth is a concern, use the [`to()` function](/flux/v0.x/stdlib/built-in/outputs/to/) -to write the data to a bucket, and then query the bucket with [`from()`](/flux/v0.x/stdlib/built-in/inputs/from/). +If bandwidth is a concern, use the [`to()` function](/flux/v0.64/stdlib/built-in/outputs/to/) +to write the data to a bucket, and then query the bucket with [`from()`](/flux/v0.64/stdlib/built-in/inputs/from/). {{% /note %}} ### Write sample data to InfluxDB with line protocol diff --git a/content/flux/v0.x/guides/geo/filter-by-region.md b/content/flux/v0.64/guides/geo/filter-by-region.md similarity index 96% rename from content/flux/v0.x/guides/geo/filter-by-region.md rename to content/flux/v0.64/guides/geo/filter-by-region.md index 5567b10cef..67802aee6d 100644 --- a/content/flux/v0.x/guides/geo/filter-by-region.md +++ b/content/flux/v0.64/guides/geo/filter-by-region.md @@ -3,7 +3,7 @@ title: Filter geo-temporal data by region description: > Use the `geo.filterRows` function to filter geo-temporal data by box-shaped, circular, or polygonal geographic regions. menu: - flux_0_x: + flux_0_64: name: Filter by region parent: Geo-temporal data weight: 2 @@ -19,13 +19,13 @@ list_code_example: | ``` --- -Use the [`geo.filterRows` function](/flux/v0.x/stdlib/experimental/geo/filterrows/) +Use the [`geo.filterRows` function](/flux/v0.64/stdlib/experimental/geo/filterrows/) to filter geo-temporal data by geographic region: 1. [Define a geographic region](#define-a-geographic-region) 2. [Use strict or non-strict filtering](#strict-and-non-strict-filtering) -The following example uses the [sample bird migration data](/flux/v0.x/guides/geo/#sample-data) +The following example uses the [sample bird migration data](/flux/v0.64/guides/geo/#sample-data) and queries data points **within 200km of Cairo, Egypt**: ```js diff --git a/content/flux/v0.x/guides/geo/group-geo-data.md b/content/flux/v0.64/guides/geo/group-geo-data.md similarity index 89% rename from content/flux/v0.x/guides/geo/group-geo-data.md rename to content/flux/v0.64/guides/geo/group-geo-data.md index 68813200c7..5f167b429b 100644 --- a/content/flux/v0.x/guides/geo/group-geo-data.md +++ b/content/flux/v0.64/guides/geo/group-geo-data.md @@ -4,7 +4,7 @@ description: > Use the `geo.groupByArea()` to group geo-temporal data by area and `geo.asTracks()` to group data into tracks or routes. menu: - flux_0_x: + flux_0_64: parent: Geo-temporal data weight: 3 list_code_example: | @@ -24,7 +24,7 @@ to group data into tracks or routes. - [Group data by track or route](#group-data-by-track-or-route) ### Group data by area -Use the [`geo.groupByArea()` function](/flux/v0.x/stdlib/experimental/geo/groupbyarea/) +Use the [`geo.groupByArea()` function](/flux/v0.64/stdlib/experimental/geo/groupbyarea/) to group geo-temporal data points by geographic area. Areas are determined by [S2 grid cells](https://s2geometry.io/devguide/s2cell_hierarchy.html#s2cellid-numbering) @@ -32,7 +32,7 @@ Areas are determined by [S2 grid cells](https://s2geometry.io/devguide/s2cell_hi - Specify the [S2 cell level](https://s2geometry.io/resources/s2cell_statistics) to use when calculating geographic areas with the `level` parameter. -The following example uses the [sample bird migration data](/flux/v0.x/guides/geo/#sample-data) +The following example uses the [sample bird migration data](/flux/v0.64/guides/geo/#sample-data) to query data points within 200km of Cairo, Egypt and group them by geographic area: ```js @@ -47,14 +47,14 @@ sampleGeoData ``` ### Group data by track or route -Use [`geo.asTracks()` function](/flux/v0.x/stdlib/experimental/geo/astracks/) +Use [`geo.asTracks()` function](/flux/v0.64/stdlib/experimental/geo/astracks/) to group data points into tracks or routes and order them by time or other columns. Data must contain a unique identifier for each track. For example: `id` or `tid`. - Specify columns that uniquely identify each track or route with the `groupBy` parameter. - Specify which columns to sort by with the `sortBy` parameter. Default is `["_time"]`. -The following example uses the [sample bird migration data](/flux/v0.x/guides/geo/#sample-data) +The following example uses the [sample bird migration data](/flux/v0.64/guides/geo/#sample-data) to query data points within 200km of Cairo, Egypt and group them into routes unique to each bird: diff --git a/content/flux/v0.x/guides/geo/shape-geo-data.md b/content/flux/v0.64/guides/geo/shape-geo-data.md similarity index 94% rename from content/flux/v0.x/guides/geo/shape-geo-data.md rename to content/flux/v0.64/guides/geo/shape-geo-data.md index a8491a97f2..d5d930219f 100644 --- a/content/flux/v0.x/guides/geo/shape-geo-data.md +++ b/content/flux/v0.64/guides/geo/shape-geo-data.md @@ -4,7 +4,7 @@ description: > Functions in the Flux Geo package require **lat** and **lon** fields and an **s2_cell_id** tag. Rename latitude and longitude fields and generate S2 cell ID tokens. menu: - flux_0_x: + flux_0_64: name: Shape geo-temporal data parent: Geo-temporal data weight: 1 @@ -37,7 +37,7 @@ Functions in the Geo package require the following data schema: - [Generate S2 cell ID tokens](#generate-s2-cell-id-tokens) ## Rename latitude and longitude fields -Use [`map()`](/flux/v0.x/stdlib/built-in/transformations/map/) to rename +Use [`map()`](/flux/v0.64/stdlib/built-in/transformations/map/) to rename existing latitude and longitude fields using other names. ```js @@ -103,9 +103,9 @@ Library to generate `s2_cell_id` tags. For example: - **JavaScript:** [s2.cellid.toToken()](https://github.com/mapbox/node-s2/blob/master/API.md#cellidtotoken---string) ### Generate S2 cell ID tokens with Flux -Use the [`geo.s2CellIDToken()` function](/flux/v0.x/stdlib/experimental/geo/s2cellidtoken/) +Use the [`geo.s2CellIDToken()` function](/flux/v0.64/stdlib/experimental/geo/s2cellidtoken/) with existing longitude (`lon`) and latitude (`lat`) field values to generate and add the S2 cell ID token. -First, use the [`geo.toRows()` function](/flux/v0.x/stdlib/experimental/geo/torows/) +First, use the [`geo.toRows()` function](/flux/v0.64/stdlib/experimental/geo/torows/) to pivot **lat** and **lon** fields into row-wise sets: ```js diff --git a/content/flux/v0.x/guides/grouping-data.md b/content/flux/v0.64/guides/grouping-data.md similarity index 99% rename from content/flux/v0.x/guides/grouping-data.md rename to content/flux/v0.64/guides/grouping-data.md index 7ad4b63854..fed2806640 100644 --- a/content/flux/v0.x/guides/grouping-data.md +++ b/content/flux/v0.64/guides/grouping-data.md @@ -2,7 +2,7 @@ title: Group data with Flux description: This guide walks through grouping data with Flux by providing examples and illustrating how data is shaped throughout the process. menu: - flux_0_x: + flux_0_64: name: Group data parent: Guides weight: 3 @@ -25,7 +25,7 @@ Understanding how modifying group keys shapes output data is key to successfully grouping and transforming data into your desired output. ## group() Function -Flux's [`group()` function](/flux/v0.x/stdlib/built-in/transformations/group) defines the +Flux's [`group()` function](/flux/v0.64/stdlib/built-in/transformations/group) defines the group key for output tables, i.e. grouping records based on values for specific columns. ###### group() example @@ -54,7 +54,7 @@ A boolean that removes all grouping and outputs everything as a single table. --- -_For more information, see the [`group()` function](/flux/v0.x/stdlib/built-in/transformations/group)._ +_For more information, see the [`group()` function](/flux/v0.64/stdlib/built-in/transformations/group)._ --- diff --git a/content/flux/v0.x/guides/histograms.md b/content/flux/v0.64/guides/histograms.md similarity index 96% rename from content/flux/v0.x/guides/histograms.md rename to content/flux/v0.64/guides/histograms.md index 75e60a9b6b..8e0bceef5f 100644 --- a/content/flux/v0.x/guides/histograms.md +++ b/content/flux/v0.64/guides/histograms.md @@ -2,7 +2,7 @@ title: Create histograms with Flux description: This guide walks through using the histogram() function to create cumulative histograms with Flux. menu: - flux_0_x: + flux_0_64: name: Create histograms parent: Guides weight: 10 @@ -13,7 +13,7 @@ Histograms provide valuable insight into the distribution of your data. This guide walks through using Flux's `histogram()` function to transform your data into a **cumulative histogram**. ## histogram() function -The [`histogram()` function](/flux/v0.x/stdlib/built-in/transformations/histogram) approximates the +The [`histogram()` function](/flux/v0.64/stdlib/built-in/transformations/histogram) approximates the cumulative distribution of a dataset by counting data frequencies for a list of "bins." A **bin** is simply a range in which a data point falls. All data points that are less than or equal to the bound are counted in the bin. @@ -38,7 +38,7 @@ Flux provides two helper functions for generating histogram bins. Each generates and outputs an array of floats designed to be used in the `histogram()` function's `bins` parameter. ### linearBins() -The [`linearBins()` function](/flux/v0.x/stdlib/built-in/misc/linearbins) generates a list of linearly separated floats. +The [`linearBins()` function](/flux/v0.64/stdlib/built-in/misc/linearbins) generates a list of linearly separated floats. ```js linearBins(start: 0.0, width: 10.0, count: 10) @@ -47,7 +47,7 @@ linearBins(start: 0.0, width: 10.0, count: 10) ``` ### logarithmicBins() -The [`logarithmicBins()` function](/flux/v0.x/stdlib/built-in/misc/logarithmicbins) generates a list of exponentially separated floats. +The [`logarithmicBins()` function](/flux/v0.64/stdlib/built-in/misc/logarithmicbins) generates a list of exponentially separated floats. ```js logarithmicBins(start: 1.0, factor: 2.0, count: 10, infinty: true) diff --git a/content/flux/v0.x/guides/join.md b/content/flux/v0.64/guides/join.md similarity index 99% rename from content/flux/v0.x/guides/join.md rename to content/flux/v0.64/guides/join.md index a3b3d916b6..95cbe56b60 100644 --- a/content/flux/v0.x/guides/join.md +++ b/content/flux/v0.64/guides/join.md @@ -2,13 +2,13 @@ title: Join data with Flux description: This guide walks through joining data with Flux and outlines how it shapes your data in the process. menu: - flux_0_x: + flux_0_64: name: Join data parent: Guides weight: 5 --- -The [`join()` function](/flux/v0.x/stdlib/built-in/transformations/join) merges two or more +The [`join()` function](/flux/v0.64/stdlib/built-in/transformations/join) merges two or more input streams whose values are equal on a set of common columns into a single output stream. Flux allows you to join on any columns common between two data streams and opens the door for operations such as cross-measurement joins and math across measurements. @@ -205,7 +205,7 @@ Notice the output table includes the following columns: These represent the columns with values unique to the two input tables. ## Calculate and create a new table -With the two streams of data joined into a single table, use the [`map()` function](/flux/v0.x/stdlib/built-in/transformations/map) +With the two streams of data joined into a single table, use the [`map()` function](/flux/v0.64/stdlib/built-in/transformations/map) to build a new table by mapping the existing `_time` column to a new `_time` column and dividing `_value_mem` by `_value_proc` and mapping it to a new `_value` column. diff --git a/content/flux/v0.x/guides/manipulate-timestamps.md b/content/flux/v0.64/guides/manipulate-timestamps.md similarity index 77% rename from content/flux/v0.x/guides/manipulate-timestamps.md rename to content/flux/v0.64/guides/manipulate-timestamps.md index 4184afa27b..2788b549c3 100644 --- a/content/flux/v0.x/guides/manipulate-timestamps.md +++ b/content/flux/v0.64/guides/manipulate-timestamps.md @@ -3,7 +3,7 @@ title: Manipulate timestamps with Flux description: > Use Flux to process and manipulate timestamps. menu: - flux_0_x: + flux_0_64: name: Manipulate timestamps parent: Guides weight: 20 @@ -18,7 +18,7 @@ Use Flux to process and manipulate timestamps to suit your needs. ## Convert timestamp format ### Convert nanosecond epoch timestamp to RFC3339 -Use the [`time()` function](/flux/v0.x/stdlib/built-in/transformations/type-conversions/time/) +Use the [`time()` function](/flux/v0.64/stdlib/built-in/transformations/type-conversions/time/) to convert a **nanosecond** epoch timestamp to an RFC3339 timestamp. ```js @@ -27,7 +27,7 @@ time(v: 1568808000000000000) ``` ### Convert RFC3339 to nanosecond epoch timestamp -Use the [`uint()` function](/flux/v0.x/stdlib/built-in/transformations/type-conversions/uint/) +Use the [`uint()` function](/flux/v0.64/stdlib/built-in/transformations/type-conversions/uint/) to convert an RFC3339 timestamp to a nanosecond epoch timestamp. ```js @@ -36,7 +36,7 @@ uint(v: 2019-09-18T12:00:00.000000000Z) ``` ### Calculate the duration between two timestamps -Flux doesn't support mathematical operations using [time type](/flux/v0.x/language/types/#time-types) values. +Flux doesn't support mathematical operations using [time type](/flux/v0.64/language/types/#time-types) values. To calculate the duration between two timestamps: 1. Use the `uint()` function to convert each timestamp to a nanosecond epoch timestamp. @@ -53,14 +53,14 @@ duration(v: time2 - time1) {{% note %}} Flux doesn't support duration column types. -To store a duration in a column, use the [`string()` function](/flux/v0.x/stdlib/built-in/transformations/type-conversions/string/) +To store a duration in a column, use the [`string()` function](/flux/v0.64/stdlib/built-in/transformations/type-conversions/string/) to convert the duration to a string. {{% /note %}} ## Time-related Flux functions ### Retrieve the current UTC time -Use the [`now()` function](/flux/v0.x/stdlib/built-in/misc/now/) to +Use the [`now()` function](/flux/v0.64/stdlib/built-in/misc/now/) to return the current UTC time in RFC3339 format. ```js @@ -73,7 +73,7 @@ return the same value. {{% /note %}} ### Retrieve the current system time -Import the `system` package and use the [`system.time()` function](/flux/v0.x/stdlib/system/time/) +Import the `system` package and use the [`system.time()` function](/flux/v0.64/stdlib/system/time/) to return the current system time of the host machine in RFC3339 format. ```js @@ -88,12 +88,12 @@ in a Flux script returns a unique value. ### Add a duration to a timestamp -The [`experimental.addDuration()` function](/flux/v0.x/stdlib/experimental/addduration/) +The [`experimental.addDuration()` function](/flux/v0.64/stdlib/experimental/addduration/) adds a duration to a specified time and returns the resulting time. {{% warn %}} By using `experimental.addDuration()`, you accept the -[risks of experimental functions](/flux/v0.x/stdlib/experimental/#use-experimental-functions-at-your-own-risk). +[risks of experimental functions](/flux/v0.64/stdlib/experimental/#use-experimental-functions-at-your-own-risk). {{% /warn %}} ```js @@ -108,12 +108,12 @@ experimental.addDuration( ``` ### Subtract a duration from a timestamps -The [`experimental.addDuration()` function](/flux/v0.x/stdlib/experimental/subduration/) +The [`experimental.addDuration()` function](/flux/v0.64/stdlib/experimental/subduration/) subtracts a duration from a specified time and returns the resulting time. {{% warn %}} By using `experimental.addDuration()`, you accept the -[risks of experimental functions](/flux/v0.x/stdlib/experimental/#use-experimental-functions-at-your-own-risk). +[risks of experimental functions](/flux/v0.64/stdlib/experimental/#use-experimental-functions-at-your-own-risk). {{% /warn %}} ```js diff --git a/content/flux/v0.x/guides/mathematic-operations.md b/content/flux/v0.64/guides/mathematic-operations.md similarity index 89% rename from content/flux/v0.x/guides/mathematic-operations.md rename to content/flux/v0.64/guides/mathematic-operations.md index 75eb0aff4a..8327336c28 100644 --- a/content/flux/v0.x/guides/mathematic-operations.md +++ b/content/flux/v0.64/guides/mathematic-operations.md @@ -2,14 +2,14 @@ title: Transform data with mathematic operations description: This guide describes how to use Flux to transform data with mathematic operations. menu: - flux_0_x: + flux_0_64: name: Transform data with math parent: Guides weight: 6 --- Flux supports mathematic expressions in data transformations. -This article describes how to use [Flux arithmetic operators](/flux/v0.x/language/operators/#arithmetic-operators) +This article describes how to use [Flux arithmetic operators](/flux/v0.64/language/operators/#arithmetic-operators) to "map" over data and transform values using mathematic operations. ##### Basic mathematic operations @@ -25,7 +25,7 @@ to "map" over data and transform values using mathematic operations. 3 ``` -

    See Influx CLI in "Flux mode"

    +

    See Influx CLI in "Flux mode"

    {{% note %}} #### Operands must be the same type @@ -37,7 +37,7 @@ Otherwise, you will get an error similar to: Error: type error: float != int ``` -To convert operands to the same type, use [type-conversion functions](/flux/v0.x/stdlib/built-in/transformations/type-conversions/) +To convert operands to the same type, use [type-conversion functions](/flux/v0.64/stdlib/built-in/transformations/type-conversions/) or manually format operands. The operand data type determines the output data type. For example: @@ -56,7 +56,7 @@ For example: {{% /note %}} ## Custom mathematic functions -Flux lets you [create custom functions](/flux/v0.x/stdlib/custom-functions) that use mathematic operations. +Flux lets you [create custom functions](/flux/v0.64/stdlib/custom-functions) that use mathematic operations. View the examples below. ###### Custom multiplication function @@ -78,8 +78,8 @@ percent(sample: 20.0, total: 80.0) ### Transform values in a data stream To transform multiple values in an input stream, your function needs to: -- [Handle piped-forward data](/flux/v0.x/stdlib/custom-functions/#functions-that-manipulate-pipe-forwarded-data). -- Use the [`map()` function](/flux/v0.x/stdlib/built-in/transformations/map) to iterate over each row. +- [Handle piped-forward data](/flux/v0.64/stdlib/custom-functions/#functions-that-manipulate-pipe-forwarded-data). +- Use the [`map()` function](/flux/v0.64/stdlib/built-in/transformations/map) to iterate over each row. The example `multiplyByX()` function below includes: @@ -143,7 +143,7 @@ data #### Include partial gigabytes Because the original metric (bytes) is an integer, the output of the operation is an integer and does not include partial GBs. To calculate partial GBs, convert the `_value` column and its values to floats using the -[`float()` function](/flux/v0.x/stdlib/built-in/transformations/type-conversions/float) +[`float()` function](/flux/v0.64/stdlib/built-in/transformations/type-conversions/float) and format the denominator in the division operation as a float. ```js diff --git a/content/flux/v0.x/guides/median.md b/content/flux/v0.64/guides/median.md similarity index 88% rename from content/flux/v0.x/guides/median.md rename to content/flux/v0.64/guides/median.md index e2cdd0cc0d..381684ebb9 100644 --- a/content/flux/v0.x/guides/median.md +++ b/content/flux/v0.64/guides/median.md @@ -5,12 +5,12 @@ description: > (50th percentile) or median of input data. weight: 10 menu: - flux_0_x: + flux_0_64: parent: Guides name: Find the median --- -Use the [`median()` function](/flux/v0.x/stdlib/built-in/transformations/aggregates/median/) +Use the [`median()` function](/flux/v0.64/stdlib/built-in/transformations/aggregates/median/) to return a value representing the `0.5` quantile (50th percentile) or median of input data. ## Select a method for calculating the median @@ -94,7 +94,7 @@ Output tables consist of a single row containing the calculated median. {{< /flex >}} {{% note %}} -The examples below use the [example data variable](/flux/v0.x/guides/#example-data-variable). +The examples below use the [example data variable](/flux/v0.64/guides/#example-data-variable). {{% /note %}} ## Find the value that represents the median @@ -125,13 +125,13 @@ data ``` ## Use median() with aggregateWindow() -[`aggregateWindow()`](/flux/v0.x/stdlib/built-in/transformations/aggregates/aggregatewindow/) +[`aggregateWindow()`](/flux/v0.64/stdlib/built-in/transformations/aggregates/aggregatewindow/) segments data into windows of time, aggregates data in each window into a single point, and then removes the time-based segmentation. It is primarily used to [downsample data](/v2.0/process-data/common-tasks/downsample-data/). To specify the [median calculation method](#select-a-method-for-calculating-the-median) in `aggregateWindow()`, use the -[full function syntax](/flux/v0.x/stdlib/built-in/transformations/aggregates/aggregatewindow/#specify-parameters-of-the-aggregate-function): +[full function syntax](/flux/v0.64/stdlib/built-in/transformations/aggregates/aggregatewindow/#specify-parameters-of-the-aggregate-function): ```js data diff --git a/content/flux/v0.x/guides/monitor-states.md b/content/flux/v0.64/guides/monitor-states.md similarity index 92% rename from content/flux/v0.x/guides/monitor-states.md rename to content/flux/v0.64/guides/monitor-states.md index efb7d2be33..fb1c3922a4 100644 --- a/content/flux/v0.x/guides/monitor-states.md +++ b/content/flux/v0.64/guides/monitor-states.md @@ -2,7 +2,7 @@ title: Monitor states description: Flux provides several functions to help monitor states and state changes in your data. menu: - flux_0_x: + flux_0_64: name: Monitor states parent: Guides weight: 20 @@ -16,12 +16,12 @@ Flux helps you monitor states in your metrics and events: If you're just getting started with Flux queries, check out the following: -- [Get started with Flux](/flux/v0.x/introduction/getting-started/) for a conceptual overview of Flux. -- [Execute queries](/flux/v0.x/guides/executing-queries/) to discover a variety of ways to run your queries. +- [Get started with Flux](/flux/v0.64/introduction/getting-started/) for a conceptual overview of Flux. +- [Execute queries](/flux/v0.64/guides/executing-queries/) to discover a variety of ways to run your queries. ## Find how long a state persists -1. Use the [`stateDuration()`](/flux/v0.x/stdlib/built-in/transformations/stateduration/) function to calculate how long a column value has remained the same value (or state). Include the following information: +1. Use the [`stateDuration()`](/flux/v0.64/stdlib/built-in/transformations/stateduration/) function to calculate how long a column value has remained the same value (or state). Include the following information: - **Column to search:** any tag key, tag value, field key, field value, or measurement. - **Value:** the value (or state) to search for in the specified column. diff --git a/content/flux/v0.x/guides/optimize-queries.md b/content/flux/v0.64/guides/optimize-queries.md similarity index 81% rename from content/flux/v0.x/guides/optimize-queries.md rename to content/flux/v0.64/guides/optimize-queries.md index 6f8af8b175..7442f7ae6c 100644 --- a/content/flux/v0.x/guides/optimize-queries.md +++ b/content/flux/v0.64/guides/optimize-queries.md @@ -4,7 +4,7 @@ description: > Optimize your Flux queries to reduce their memory and compute (CPU) requirements. weight: 2 menu: - flux_0_x: + flux_0_64: name: Optimize queries parent: Guides --- @@ -23,9 +23,9 @@ These are known as "pushdown" functions and using them correctly can greatly reduce the amount of memory necessary to run a query. #### Pushdown functions -- [range()](/flux/v0.x/stdlib/built-in/transformations/range/) -- [filter()](/flux/v0.x/stdlib/built-in/transformations/filter/) -- [group()](/flux/v0.x/stdlib/built-in/transformations/group/) +- [range()](/flux/v0.64/stdlib/built-in/transformations/range/) +- [filter()](/flux/v0.64/stdlib/built-in/transformations/filter/) +- [group()](/flux/v0.64/stdlib/built-in/transformations/group/) Use pushdown functions at the beginning of your query. Once a non-pushdown function runs, Flux pulls data into memory and runs all @@ -53,12 +53,12 @@ Reasonable window durations depend on the total time range queried. The following functions use more memory or CPU than others. Consider their necessity in your data processing before using them: -- [map()](/flux/v0.x/stdlib/built-in/transformations/map/) -- [reduce()](/flux/v0.x/stdlib/built-in/transformations/aggregates/reduce/) -- [window()](/flux/v0.x/stdlib/built-in/transformations/window/) -- [join()](/flux/v0.x/stdlib/built-in/transformations/join/) -- [union()](/flux/v0.x/stdlib/built-in/transformations/union/) -- [pivot()](/flux/v0.x/stdlib/built-in/transformations/pivot/) +- [map()](/flux/v0.64/stdlib/built-in/transformations/map/) +- [reduce()](/flux/v0.64/stdlib/built-in/transformations/aggregates/reduce/) +- [window()](/flux/v0.64/stdlib/built-in/transformations/window/) +- [join()](/flux/v0.64/stdlib/built-in/transformations/join/) +- [union()](/flux/v0.64/stdlib/built-in/transformations/union/) +- [pivot()](/flux/v0.64/stdlib/built-in/transformations/pivot/) {{% note %}} We're continually optimizing Flux and this list may not represent its current state. diff --git a/content/flux/v0.x/guides/percentile-quantile.md b/content/flux/v0.64/guides/percentile-quantile.md similarity index 89% rename from content/flux/v0.x/guides/percentile-quantile.md rename to content/flux/v0.64/guides/percentile-quantile.md index cef8296c76..8ee9838dae 100644 --- a/content/flux/v0.x/guides/percentile-quantile.md +++ b/content/flux/v0.64/guides/percentile-quantile.md @@ -5,12 +5,12 @@ description: > percentile of input data. weight: 10 menu: - flux_0_x: + flux_0_64: parent: Guides name: Query percentiles & quantiles --- -Use the [`quantile()` function](/flux/v0.x/stdlib/built-in/transformations/aggregates/quantile/) +Use the [`quantile()` function](/flux/v0.64/stdlib/built-in/transformations/aggregates/quantile/) to return a value representing the `q` quantile or percentile of input data. ## Percentile versus quantile @@ -106,7 +106,7 @@ If calculating the `0.5` quantile or 50th percentile: {{< /flex >}} {{% note %}} -The examples below use the [example data variable](/flux/v0.x/guides/#example-data-variable). +The examples below use the [example data variable](/flux/v0.64/guides/#example-data-variable). {{% /note %}} ## Find the value representing the 99th percentile @@ -139,13 +139,13 @@ data ``` ## Use quantile() with aggregateWindow() -[`aggregateWindow()`](/flux/v0.x/stdlib/built-in/transformations/aggregates/aggregatewindow/) +[`aggregateWindow()`](/flux/v0.64/stdlib/built-in/transformations/aggregates/aggregatewindow/) segments data into windows of time, aggregates data in each window into a single point, and then removes the time-based segmentation. It is primarily used to [downsample data](/v2.0/process-data/common-tasks/downsample-data/). To specify the [quantile calculation method](#select-a-method-for-calculating-the-quantile) in -`aggregateWindow()`, use the [full function syntax](/flux/v0.x/stdlib/built-in/transformations/aggregates/aggregatewindow/#specify-parameters-of-the-aggregate-function): +`aggregateWindow()`, use the [full function syntax](/flux/v0.64/stdlib/built-in/transformations/aggregates/aggregatewindow/#specify-parameters-of-the-aggregate-function): ```js data diff --git a/content/flux/v0.x/guides/query-fields.md b/content/flux/v0.64/guides/query-fields.md similarity index 82% rename from content/flux/v0.x/guides/query-fields.md rename to content/flux/v0.64/guides/query-fields.md index b8703de2c3..10800ccec9 100644 --- a/content/flux/v0.x/guides/query-fields.md +++ b/content/flux/v0.64/guides/query-fields.md @@ -6,11 +6,11 @@ description: > clause in InfluxQL and other SQL-like query languages. weight: 2 menu: - flux_0_x: + flux_0_64: parent: Guides --- -Use the [`filter()` function](/flux/v0.x/stdlib/built-in/transformations/filter/) +Use the [`filter()` function](/flux/v0.64/stdlib/built-in/transformations/filter/) to query data based on fields, tags, or any other column value. `filter()` performs operations similar to the `SELECT` statement and the `WHERE` clause in InfluxQL and other SQL-like query languages. @@ -31,7 +31,7 @@ The `fn` predicate function requires an `r` argument, which represents each row as `filter()` iterates over input data. Key-value pairs in the row object represent columns and their values. Use **dot notation** or **bracket notation** to reference specific column values in the predicate function. -Use [logical operators](/flux/v0.x/language/operators/#logical-operators) +Use [logical operators](/flux/v0.64/language/operators/#logical-operators) to chain multiple predicate expressions together. ```js @@ -46,11 +46,11 @@ r = {foo: "bar", baz: "quz"} ``` ## Filter by fields and tags -The combination of [`from()`](/flux/v0.x/stdlib/built-in/inputs/from), -[`range()`](/flux/v0.x/stdlib/built-in/transformations/range), +The combination of [`from()`](/flux/v0.64/stdlib/built-in/inputs/from), +[`range()`](/flux/v0.64/stdlib/built-in/transformations/range), and `filter()` represent the most basic Flux query: -1. Use `from()` to define your [bucket](/flux/v0.x/introduction/getting-started/#buckets). +1. Use `from()` to define your [bucket](/flux/v0.64/introduction/getting-started/#buckets). 2. Use `range()` to limit query results by time. 3. Use `filter()` to identify what rows of data to output. diff --git a/content/flux/v0.x/guides/regular-expressions.md b/content/flux/v0.64/guides/regular-expressions.md similarity index 99% rename from content/flux/v0.x/guides/regular-expressions.md rename to content/flux/v0.64/guides/regular-expressions.md index 8122cfa7d7..149b975d93 100644 --- a/content/flux/v0.x/guides/regular-expressions.md +++ b/content/flux/v0.64/guides/regular-expressions.md @@ -2,7 +2,7 @@ title: How to use regular expressions in Flux description: This guide walks through using regular expressions in evaluation logic in Flux functions. menu: - flux_0_x: + flux_0_64: name: Regular expressions parent: Guides weight: 10 diff --git a/content/flux/v0.x/guides/scalar-values.md b/content/flux/v0.64/guides/scalar-values.md similarity index 88% rename from content/flux/v0.x/guides/scalar-values.md rename to content/flux/v0.64/guides/scalar-values.md index 5f98ed19b2..6999d32002 100644 --- a/content/flux/v0.x/guides/scalar-values.md +++ b/content/flux/v0.64/guides/scalar-values.md @@ -4,13 +4,13 @@ description: > Use Flux stream and table functions to extract scalar values from Flux query output. This lets you, for example, dynamically set variables using query results. menu: - flux_0_x: + flux_0_64: name: Extract scalar values parent: Guides weight: 20 --- -Use Flux [stream and table functions](/flux/v0.x/stdlib/built-in/transformations/stream-table/) +Use Flux [stream and table functions](/flux/v0.64/stdlib/built-in/transformations/stream-table/) to extract scalar values from Flux query output. This lets you, for example, dynamically set variables using query results. @@ -25,9 +25,9 @@ _The samples on this page use the [sample data provided below](#sample-data)._ {{% warn %}} #### Current limitations - The InfluxDB user interface (UI) does not currently support raw scalar output. - Use [`map()`](/flux/v0.x/stdlib/built-in/transformations/map/) to add + Use [`map()`](/flux/v0.64/stdlib/built-in/transformations/map/) to add scalar values to output data. -- The [Flux REPL ](/flux/v0.x/guides/executing-queries/#influx-cli-in-flux-mode) +- The [Flux REPL ](/flux/v0.64/guides/executing-queries/#influx-cli-in-flux-mode) does not currently support Flux stream and table functions (also known as "dynamic queries"). See [#15321](https://github.com/influxdata/influxdb/issues/15231). {{% /warn %}} @@ -43,8 +43,8 @@ If query results include only one table, it is still formatted as a stream of ta You still must extract that table from the stream. {{% /note %}} -Use [`tableFind()`](/flux/v0.x/stdlib/built-in/transformations/stream-table/tablefind/) -to extract the **first** table whose [group key](/flux/v0.x/introduction/getting-started/#group-keys) +Use [`tableFind()`](/flux/v0.64/stdlib/built-in/transformations/stream-table/tablefind/) +to extract the **first** table whose [group key](/flux/v0.64/introduction/getting-started/#group-keys) values match the `fn` predicate function. The predicate function requires a `key` object, which represents the group key of each table. @@ -76,7 +76,7 @@ of tables piped-forward into `tableFind()`. {{% /note %}} ## Extract a column from the table -Use the [`getColumn()` function](/flux/v0.x/stdlib/built-in/transformations/stream-table/getcolumn/) +Use the [`getColumn()` function](/flux/v0.64/stdlib/built-in/transformations/stream-table/getcolumn/) to output an array of values from a specific column in the extracted table. @@ -116,7 +116,7 @@ SFOTemps[2] ``` ## Extract a row from the table -Use the [`getRecord()` function](/flux/v0.x/stdlib/built-in/transformations/stream-table/getrecord/) +Use the [`getRecord()` function](/flux/v0.64/stdlib/built-in/transformations/stream-table/getrecord/) to output data from a single row in the extracted table. Specify the index of the row to output using the `idx` parameter. The function outputs an object with key-value pairs for each column. @@ -140,7 +140,7 @@ sampleData ### Use an extracted row object Use a variable to store the extracted row object. In the example below, `tempInfo` represents the extracted row. -Use [dot notation](/flux/v0.x/introduction/getting-started/syntax-basics/#objects) +Use [dot notation](/flux/v0.64/introduction/getting-started/syntax-basics/#objects) to reference keys in the object. ```js @@ -219,7 +219,7 @@ The temperature was ${string(v: lastReported._value)}°F." The following sample data set represents fictional temperature metrics collected from three locations. It's formatted in **annotated CSV** and imported into the Flux query using the -[`csv.from()` function](/flux/v0.x/stdlib/csv/from/). +[`csv.from()` function](/flux/v0.64/stdlib/csv/from/). Place the following at the beginning of your query to use the sample data: diff --git a/content/flux/v0.x/guides/sort-limit.md b/content/flux/v0.64/guides/sort-limit.md similarity index 60% rename from content/flux/v0.x/guides/sort-limit.md rename to content/flux/v0.64/guides/sort-limit.md index cc22240088..bde09eb6bb 100644 --- a/content/flux/v0.x/guides/sort-limit.md +++ b/content/flux/v0.64/guides/sort-limit.md @@ -2,13 +2,13 @@ title: How to sort and limit data with Flux description: This guide walks through sorting and limiting data with Flux and outlines how it shapes your data in the process. menu: - flux_0_x: + flux_0_64: name: Sort and limit data parent: Guides weight: 4 --- -The [`sort()`function](/flux/v0.x/stdlib/built-in/transformations/sort) orders the records within each table. The following example orders system uptime first by region, then host, then value. +The [`sort()`function](/flux/v0.64/stdlib/built-in/transformations/sort) orders the records within each table. The following example orders system uptime first by region, then host, then value. ```js from(bucket:"telegraf/autogen") @@ -20,7 +20,7 @@ from(bucket:"telegraf/autogen") |> sort(columns:["region", "host", "_value"]) ``` -The [`limit()` function](/flux/v0.x/stdlib/built-in/transformations/limit) limit the number of records in output tables to a fixed number (n). The following example shows up to 10 records from the past hour. +The [`limit()` function](/flux/v0.64/stdlib/built-in/transformations/limit) limit the number of records in output tables to a fixed number (n). The following example shows up to 10 records from the past hour. ```js from(bucket:"telegraf/autogen") @@ -41,4 +41,4 @@ from(bucket:"telegraf/autogen") |> limit(n:10) ``` -You now have created a Flux query that sorts and limits data. Flux also provides the [`top()](/flux/v0.x/stdlib/built-in/transformations/selectors/top) and [`bottom()`](/flux/v0.x/stdlib/built-in/transformations/selectors/bottom) function to perform both of these functions at the same time. +You now have created a Flux query that sorts and limits data. Flux also provides the [`top()](/flux/v0.64/stdlib/built-in/transformations/selectors/top) and [`bottom()`](/flux/v0.64/stdlib/built-in/transformations/selectors/bottom) function to perform both of these functions at the same time. diff --git a/content/flux/v0.x/guides/sql.md b/content/flux/v0.64/guides/sql.md similarity index 95% rename from content/flux/v0.x/guides/sql.md rename to content/flux/v0.64/guides/sql.md index c40615b7e8..d33c0e3a57 100644 --- a/content/flux/v0.x/guides/sql.md +++ b/content/flux/v0.64/guides/sql.md @@ -5,13 +5,13 @@ description: > The Flux `sql` package provides functions for working with SQL data sources. Use `sql.from()` to query SQL databases like PostgreSQL and MySQL menu: - flux_0_x: + flux_0_64: parent: Guides weight: 20 --- -The [Flux](/flux/v0.x) `sql` package provides functions for working with SQL data sources. -[`sql.from()`](/flux/v0.x/stdlib/sql/from/) lets you query SQL data sources +The [Flux](/flux/v0.64) `sql` package provides functions for working with SQL data sources. +[`sql.from()`](/flux/v0.64/stdlib/sql/from/) lets you query SQL data sources like [PostgreSQL](https://www.postgresql.org/), [MySQL](https://www.mysql.com/), and [SQLite](https://www.sqlite.org/index.html), and use the results with InfluxDB dashboards, tasks, and other operations. @@ -74,7 +74,7 @@ sql.from( {{% /code-tab-content %}} {{< /code-tabs-wrapper >}} -_See the [`sql.from()` documentation](/flux/v0.x/stdlib/sql/from/) for +_See the [`sql.from()` documentation](/flux/v0.64/stdlib/sql/from/) for information about required function parameters._ ## Join SQL data with data in InfluxDB diff --git a/content/flux/v0.x/guides/windowing-aggregating.md b/content/flux/v0.64/guides/windowing-aggregating.md similarity index 97% rename from content/flux/v0.x/guides/windowing-aggregating.md rename to content/flux/v0.64/guides/windowing-aggregating.md index e2a8516c13..5920a625cc 100644 --- a/content/flux/v0.x/guides/windowing-aggregating.md +++ b/content/flux/v0.64/guides/windowing-aggregating.md @@ -2,7 +2,7 @@ title: How to window and aggregate data with Flux description: This guide walks through windowing and aggregating data with Flux and outlines how it shapes your data in the process. menu: - flux_0_x: + flux_0_64: name: Window and aggregate data parent: Guides weight: 5 @@ -78,7 +78,7 @@ Table: keys: [_start, _stop, _field, _measurement] {{% /truncate %}} ## Windowing data -Use the [`window()` function](/flux/v0.x/stdlib/built-in/transformations/window) to group your data based on time bounds. +Use the [`window()` function](/flux/v0.64/stdlib/built-in/transformations/window) to group your data based on time bounds. The most common parameter passed with the `window()` is `every` which defines the duration of time between windows. Other parameters are available, but for this example, window the base data set into one minute windows. @@ -159,14 +159,14 @@ When visualized in [Chronograf](/chronograf/latest/), each window table is displ ![Windowed data](/img/flux/simple-windowed-data.png) ## Aggregate data -[Aggregate functions](/flux/v0.x/stdlib/built-in/transformations/aggregates) take the values +[Aggregate functions](/flux/v0.64/stdlib/built-in/transformations/aggregates) take the values of all rows in a table and use them to perform an aggregate operation. The result is output as a new value in a single-row table. Since windowed data is split into separate tables, aggregate operations run against each table separately and output new tables containing only the aggregated value. -For this example, use the [`mean()` function](/flux/v0.x/stdlib/built-in/transformations/aggregates/mean) +For this example, use the [`mean()` function](/flux/v0.64/stdlib/built-in/transformations/aggregates/mean) to output the average of each window: ```js @@ -230,7 +230,7 @@ These represent the lower and upper bounds of the time window. Many Flux functions rely on the `_time` column. To further process your data after an aggregate function, you need to add `_time` back in. -Use the [`duplicate()` function](/flux/v0.x/stdlib/built-in/transformations/duplicate) to +Use the [`duplicate()` function](/flux/v0.64/stdlib/built-in/transformations/duplicate) to duplicate either the `_start` or `_stop` column as a new `_time` column. ```js @@ -316,7 +316,7 @@ With the aggregate values in a single table, data points in the visualization ar You have now created a Flux query that windows and aggregates data. The data transformation process outlined in this guide should be used for all aggregation operations. -Flux also provides the [`aggregateWindow()` function](/flux/v0.x/stdlib/built-in/transformations/aggregates/aggregatewindow) +Flux also provides the [`aggregateWindow()` function](/flux/v0.64/stdlib/built-in/transformations/aggregates/aggregatewindow) which performs all these separate functions for you. The following Flux query will return the same results: diff --git a/content/flux/v0.x/introduction/_index.md b/content/flux/v0.64/introduction/_index.md similarity index 88% rename from content/flux/v0.x/introduction/_index.md rename to content/flux/v0.64/introduction/_index.md index 2447fc6b4d..d5ea7c1142 100644 --- a/content/flux/v0.x/introduction/_index.md +++ b/content/flux/v0.64/introduction/_index.md @@ -2,7 +2,7 @@ title: Introduction to Flux description: Flux is InfluxData's new functional data scripting language designed for querying, analyzing, and acting on time series data. menu: - flux_0_x: + flux_0_64: name: Introduction weight: 2 --- @@ -10,7 +10,7 @@ menu: Flux is InfluxData's new functional data scripting language designed for querying, analyzing, and acting on time series data. Its takes the power of [InfluxQL](/influxdb/latest/query_language/spec/) and the functionality of [TICKscript](https://docs.influxdata.com/kapacitor/v1.5/tick/introduction/) and combines them into a single, unified syntax. -> Flux v0.x is a technical preview included with [InfluxDB v1.7](/influxdb/latest). +> Flux v0.64 is a technical preview included with [InfluxDB v1.7](/influxdb/latest). > It is still in active development and many functions provided by InfluxQL and TICKscript > have yet to be implemented. @@ -33,10 +33,10 @@ from(bucket:"telegraf/autogen") |> aggregateWindow(every: 1m, fn: mean) ``` -## [Enable Flux](/flux/v0.x/introduction/installation) +## [Enable Flux](/flux/v0.64/introduction/installation) Flux is packaged with InfluxDB v1.7+ and does not require any additional installation, however it does need to be enabled. -## [Get started with Flux](/flux/v0.x/introduction/getting-started) +## [Get started with Flux](/flux/v0.64/introduction/getting-started) The best way to familiarize yourself with Flux is to walk through creating a simple Flux query. The getting started documentation does just that. diff --git a/content/flux/v0.64/introduction/flux-vs-influxql.md b/content/flux/v0.64/introduction/flux-vs-influxql.md new file mode 100644 index 0000000000..0b25822264 --- /dev/null +++ b/content/flux/v0.64/introduction/flux-vs-influxql.md @@ -0,0 +1,272 @@ +--- +title: Flux vs InfluxQL +description: +menu: + flux_0_64: + name: Flux vs InfluxQL + parent: Introduction + weight: 5 +--- + +[InfluxQL](/influxdb/latest/query_language/) is InfluxData's SQL-like query language for interacting with data in InfluxDB. +Flux is an alternative to InfluxQL and other SQL-like query languages for querying and analyzing data. +It uses functional language patterns making it incredibly powerful, flexible, and able to overcome many of the limitations of InfluxQL. +This article outlines many of the tasks possible with Flux but not InfluxQL and provides information about Flux and InfluxQL parity. + +## Possible with Flux + +### Joins +InfluxQL has never supported joins. They can be accomplished using [TICKscript](/kapacitor/latest/tick/introduction/), +but even TICKscript's join capabilities are limited. +Flux's [`join()` function](/flux/v0.64/stdlib/built-in/transformations/join/) allows you +to join data **from any bucket, any measurement, and on any columns** as long as +each data set includes the columns on which they are to be joined. +This opens the door for really powerful and useful operations. + +--- + +_For an in-depth walkthrough of using the `join()` function, +see [How to join data with Flux](/flux/v0.64/guides/join)._ + +--- + +###### Example join operation +```js +dataStream1 = from(bucket: "bucket1") + |> range(start: -1h) + |> filter(fn: (r) => + r._measurement == "network" and + r._field == "bytes-transferred" + ) + +dataStream2 = from(bucket: "bucket1") + |> range(start: -1h) + |> filter(fn: (r) => + r._measurement == "httpd" and + r._field == "requests-per-sec" + ) + +join( + tables: {d1:dataStream1, d2:dataStream2}, + on: ["_time", "_stop", "_start", "host"] + ) +``` + +### Math across measurements +Being able to perform cross-measurement joins also allows you to run calculations using +data from separate measurements – a highly requested feature from the InfluxData community. +The example below takes two data streams from separate measurements, `mem` and `processes`, +joins them, then calculates the average amount of memory used per running process: + +###### Example of math across measurements +```js +// Memory used (in bytes) +memUsed = from(bucket: "telegraf/autogen") + |> range(start: -1h) + |> filter(fn: (r) => + r._measurement == "mem" and + r._field == "used" + ) + +// Total processes running +procTotal = from(bucket: "telegraf/autogen") + |> range(start: -1h) + |> filter(fn: (r) => + r._measurement == "processes" and + r._field == "total" + ) + +// Join memory used with total processes and calculate +// the average memory (in MB) used for running processes. +join( + tables: {mem:memUsed, proc:procTotal}, + on: ["_time", "_stop", "_start", "host"] + ) + |> map(fn: (r) => ({ + _time: r._time, + _value: (r._value_mem / r._value_proc) / 1000000 + }) +) +``` + +### Sort on any column +InfluxQL's sorting capabilities are very limited, allowing you only to control the +sort order of `time` using the `ORDER BY time` clause. +Flux's [`sort()` function](/flux/v0.64/stdlib/built-in/transformations/sort) sorts records based on list of columns. +Depending on the column type, records are sorted alphabetically, numerically, or chronologically. + +###### Example sort operation +```js +from(bucket:"telegraf/autogen") + |> range(start:-12h) + |> filter(fn: (r) => + r._measurement == "system" and + r._field == "uptime" + ) + |> sort(columns:["region", "host", "_value"]) +``` + +### Pivot +Pivoting data tables has never been supported in InfluxQL. +Flux's [`pivot()` function](/flux/v0.64/stdlib/built-in/transformations/pivot) provides the ability +to pivot data tables by specifying `rowKey`, `columnKey`, and `valueColumn` parameters. + +###### Example pivot operation +```js +from(bucket: "telegraf/autogen") + |> range(start: -1h) + |> filter(fn: (r) => + r._measurement == "cpu" and + r.cpu == "cpu-total" + ) + |> pivot( + rowKey:["_time"], + columnKey: ["_field"], + valueColumn: "_value" + ) +``` + +### Histograms +The ability to generate histograms has been a highly requested feature for InfluxQL, but has never been supported. +Flux's [`histogram()` function](/flux/v0.64/stdlib/built-in/transformations/histogram) uses input +data to generate a cumulative histogram with support for other histogram types coming in the future. + +--- + +_For an example of using Flux to create a cumulative histogram, see [Create histograms](/flux/v0.64/guides/histograms)._ + +--- + +###### Example histogram function +```js +from(bucket: "telegraf/autogen") + |> range(start: -1h) + |> filter(fn: (r) => + r._measurement == "mem" and + r._field == "used_percent" + ) + |> histogram( + buckets: [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] + ) +``` + +### Covariance +Flux provides functions for simple covariance calculation. +The [`covariance()` function](/flux/v0.64/stdlib/built-in/transformations/aggregates/covariance) +calculates the covariance between two columns and the [`cov()` function](/flux/v0.64/stdlib/built-in/transformations/aggregates/cov) +calculates the covariance between two data streams. + +###### Example covariance between two columns +```js +from(bucket: "telegraf/autogen") + |> range(start:-5m) + |> covariance(columns: ["x", "y"]) +``` + +###### Example covariance between two streams of data +```js +table1 = from(bucket: "telegraf/autogen") + |> range(start: -15m) + |> filter(fn: (r) => + r._measurement == "measurement_1" + ) + +table2 = from(bucket: "telegraf/autogen") + |> range(start: -15m) + |> filter(fn: (r) => + r._measurement == "measurement_2" + ) + +cov(x: table1, y: table2, on: ["_time", "_field"]) +``` + +## InfluxQL and Flux parity +Flux is working towards complete parity with InfluxQL and new functions are being added to that end. +The table below shows InfluxQL statements, clauses, and functions along with their equivalent Flux functions. + +> The current version of Flux included with InfluxDB is a technical preview and is still in active development. +> New functions are added often and the following table may not represent the current state of Flux. + +### InfluxQL and Flux parity + +| InfluxQL | Flux Functions | +| -------- | -------------- | +| SELECT | [filter()](/flux/v0.64/stdlib/built-in/transformations/filter/) | +| WHERE | [filter()](/flux/v0.64/stdlib/built-in/transformations/filter/), [range()](/flux/v0.64/stdlib/built-in/transformations/range/) | +| GROUP BY | [group()](/flux/v0.64/stdlib/built-in/transformations/group/) | +| INTO | [to()](/flux/v0.64/stdlib/built-in/outputs/to/) * | +| ORDER BY | [sort()](/flux/v0.64/stdlib/built-in/transformations/sort/) | +| LIMIT | [limit()](/flux/v0.64/stdlib/built-in/transformations/limit/) | +| SLIMIT | -- | +| OFFSET | -- | +| SOFFSET | -- | +| SHOW DATABASES | [buckets()](/flux/v0.64/stdlib/built-in/inputs/buckets/) | +| SHOW MEASUREMENTS | [v1.measurements](/flux/v0.64/stdlib/influxdb-v1/measurements) | +| SHOW FIELD KEYS | [keys()](/flux/v0.64/stdlib/built-in/transformations/keys/) | +| SHOW RETENTION POLICIES | [buckets()](/flux/v0.64/stdlib/built-in/inputs/buckets/) | +| SHOW TAG KEYS | [v1.tagKeys()](/flux/v0.64/stdlib/influxdb-v1/tagkeys), [v1.measurementTagKeys()](/flux/v0.64/stdlib/influxdb-v1/measurementtagkeys) | +| SHOW TAG VALUES | [v1.tagValues()](/flux/v0.64/stdlib/influxdb-v1/tagvalues), [v1.measurementTagValues()](/flux/v0.64/stdlib/influxdb-v1/measurementtagvalues) | +| SHOW SERIES | -- | +| CREATE DATABASE | -- | +| DROP DATABASE | -- | +| DROP SERIES | -- | +| DELETE | -- | +| DROP MEASUREMENT | -- | +| DROP SHARD | -- | +| CREATE RETENTION POLICY | -- | +| ALTER RETENTION POLICY | -- | +| DROP RETENTION POLICY | -- | +| COUNT | [count()](/flux/v0.64/stdlib/built-in/transformations/aggregates/count/) | +| DISTINCT | [distinct()](/flux/v0.64/stdlib/built-in/transformations/selectors/distinct/) | +| INTEGRAL | [integral()](/flux/v0.64/stdlib/built-in/transformations/aggregates/integral/) | +| MEAN | [mean()](/flux/v0.64/stdlib/built-in/transformations/aggregates/mean/) | +| MEDIAN | [median()](/flux/v0.64/stdlib/built-in/transformations/aggregates/median/) | +| MODE | [mode()](/flux/v0.64/stdlib/built-in/transformations/aggregates/mode/) | +| SPREAD | [spread()](/flux/v0.64/stdlib/built-in/transformations/aggregates/spread/) | +| STDDEV | [stddev()](/flux/v0.64/stdlib/built-in/transformations/aggregates/stddev/) | +| SUM | [sum()](/flux/v0.64/stdlib/built-in/transformations/aggregates/sum/) | +| BOTTOM | [bottom()](/flux/v0.64/stdlib/built-in/transformations/selectors/bottom/) | +| FIRST | [first()](/flux/v0.64/stdlib/built-in/transformations/selectors/first/) | +| LAST | [last()](/flux/v0.64/stdlib/built-in/transformations/selectors/last/) | +| MAX | [max()](/flux/v0.64/stdlib/built-in/transformations/selectors/max/) | +| MIN | [min()](/flux/v0.64/stdlib/built-in/transformations/selectors/min/) | +| PERCENTILE | [quantile()](/flux/v0.64/stdlib/built-in/transformations/aggregates/quantile/) | +| SAMPLE | [sample()](/flux/v0.64/stdlib/built-in/transformations/selectors/sample/) | +| TOP | [top()](/flux/v0.64/stdlib/built-in/transformations/selectors/top/) | +| ABS | [math.abs()](/flux/v0.64/stdlib/math/abs/) | +| ACOS | [math.acos()](/flux/v0.64/stdlib/math/acos/) | +| ASIN | [math.asin()](/flux/v0.64/stdlib/math/asin/) | +| ATAN | [math.atan()](/flux/v0.64/stdlib/math/atan/) | +| ATAN2 | [math.atan2()](/flux/v0.64/stdlib/math/atan2/) | +| CEIL | [math.ceil()](/flux/v0.64/stdlib/math/ceil/) | +| COS | [math.cos()](/flux/v0.64/stdlib/math/cos/) | +| CUMULATIVE_SUM | [cumulativeSum()](/flux/v0.64/stdlib/built-in/transformations/cumulativesum/) | +| DERIVATIVE | [derivative()](/flux/v0.64/stdlib/built-in/transformations/aggregates/derivative/) | +| DIFFERENCE | [difference()](/flux/v0.64/stdlib/built-in/transformations/aggregates/difference/) | +| ELAPSED | [elapsed()](/flux/v0.64/stdlib/built-in/transformations/elapsed/) | +| EXP | [math.exp()](/flux/v0.64/stdlib/math/exp/) | +| FLOOR | [math.floor()](/flux/v0.64/stdlib/math/floor/) | +| HISTOGRAM | [histogram()](/flux/v0.64/stdlib/built-in/transformations/histogram/) | +| LN | [math.log()](/flux/v0.64/stdlib/math/log/) | +| LOG | [math.logb()](/flux/v0.64/stdlib/math/logb/) | +| LOG2 | [math.log2()](/flux/v0.64/stdlib/math/log2/) | +| LOG10 | [math.log10()](/flux/v0.64/stdlib/math/log10/) | +| MOVING_AVERAGE | [movingAverage()](/flux/v0.64/stdlib/built-in/transformations/aggregates/movingaverage/) | +| NON_NEGATIVE_DERIVATIVE | [derivative(nonNegative:true)](/flux/v0.64/stdlib/built-in/transformations/aggregates/derivative/) | +| NON_NEGATIVE_DIFFERENCE | [difference(nonNegative:true)](/flux/v0.64/stdlib/built-in/transformations/aggregates/derivative/) | +| POW | [math.pow()](/flux/v0.64/stdlib/math/pow/) | +| ROUND | [math.round()](/flux/v0.64/stdlib/math/round/) | +| SIN | [math.sin()](/flux/v0.64/stdlib/math/sin/) | +| SQRT | [math.sqrt()](/flux/v0.64/stdlib/math/sqrt/) | +| TAN | [math.tan()](/flux/v0.64/stdlib/math/tan/) | +| HOLT_WINTERS | [holtWinters()](/flux/v0.64/stdlib/built-in/transformations/aggregates/holtwinters/) | +| CHANDE_MOMENTUM_OSCILLATOR | [chandeMomentumOscillator()](/flux/v0.64/stdlib/built-in/transformations/aggregates/chandemomentumoscillator/) | +| EXPONENTIAL_MOVING_AVERAGE | [exponentialMovingAverage()](/flux/v0.64/stdlib/built-in/transformations/aggregates/exponentialmovingaverage/) | +| DOUBLE_EXPONENTIAL_MOVING_AVERAGE | [doubleEMA()](/flux/v0.64/stdlib/built-in/transformations/aggregates/doubleema/) | +| KAUFMANS_EFFICIENCY_RATIO | [kaufmansER()](/flux/v0.64/stdlib/built-in/transformations/aggregates/kaufmanser/) | +| KAUFMANS_ADAPTIVE_MOVING_AVERAGE | [kaufmansAMA()](/flux/v0.64/stdlib/built-in/transformations/aggregates/kaufmansama/) | +| TRIPLE_EXPONENTIAL_MOVING_AVERAGE | [tripleEMA()](/flux/v0.64/stdlib/built-in/transformations/aggregates/tripleema/) | +| TRIPLE_EXPONENTIAL_DERIVATIVE | [tripleExponentialDerivative()](/flux/v0.64/stdlib/built-in/transformations/aggregates/tripleexponentialderivative/) | +| RELATIVE_STRENGTH_INDEX | [relativeStrengthIndex()](/flux/v0.64/stdlib/built-in/transformations/aggregates/relativestrengthindex/) | + +_* The to() function only writes to InfluxDB 2.0._ diff --git a/content/flux/v0.x/introduction/getting-started/_index.md b/content/flux/v0.64/introduction/getting-started/_index.md similarity index 91% rename from content/flux/v0.x/introduction/getting-started/_index.md rename to content/flux/v0.64/introduction/getting-started/_index.md index 4427ad14c9..82ca3b36a3 100644 --- a/content/flux/v0.x/introduction/getting-started/_index.md +++ b/content/flux/v0.64/introduction/getting-started/_index.md @@ -2,7 +2,7 @@ title: Get started with Flux description: Get started with Flux, InfluxData's new functional data scripting language. This step-by-step guide will walk you through the basics and get you on your way. menu: - flux_0_x: + flux_0_64: name: Get started with Flux identifier: get-started parent: Introduction @@ -18,7 +18,7 @@ It covers querying time series data from InfluxDB using Flux, and introduces Flu ## What you will need ##### InfluxDB v1.7+ -Flux v0.x (technical preview) is built into InfluxDB v1.7 and can be used to query data stored in InfluxDB. +Flux v0.64 (technical preview) is built into InfluxDB v1.7 and can be used to query data stored in InfluxDB. InfluxDB v1.7's `influx` CLI also includes a new `-type=` option that, when set to `flux`, will start an interactive Flux Read-Eval-Print-Loop (REPL) allowing you to write and run Flux queries from the command line. @@ -58,7 +58,7 @@ A **bucket** is a named location where data is stored that has a retention polic It's similar to an InfluxDB v1.x "database," but is a combination of both a database and a retention policy. When using multiple retention policies, each retention policy is treated as is its own bucket. -Flux's [`from()` function](/flux/v0.x/stdlib/built-in/inputs/from), which defines an InfluxDB data source, requires a `bucket` parameter. +Flux's [`from()` function](/flux/v0.64/stdlib/built-in/inputs/from), which defines an InfluxDB data source, requires a `bucket` parameter. When using Flux with InfluxDB v1.x, use the following bucket naming convention which combines the database name and retention policy into a single bucket name: @@ -102,7 +102,7 @@ are unique to each row. ## Tools for working with Flux -You have multiple [options for writing and running Flux queries](/flux/v0.x/guides/executing-queries), +You have multiple [options for writing and running Flux queries](/flux/v0.64/guides/executing-queries), but as you're getting started, we recommend using the following: ### 1. Chronograf's Data Explorer @@ -126,5 +126,5 @@ influx -type=flux ``` diff --git a/content/flux/v0.x/introduction/getting-started/query-influxdb.md b/content/flux/v0.64/introduction/getting-started/query-influxdb.md similarity index 80% rename from content/flux/v0.x/introduction/getting-started/query-influxdb.md rename to content/flux/v0.64/introduction/getting-started/query-influxdb.md index a5804dfb83..4b6d2c3546 100644 --- a/content/flux/v0.x/introduction/getting-started/query-influxdb.md +++ b/content/flux/v0.64/introduction/getting-started/query-influxdb.md @@ -2,15 +2,15 @@ title: Query InfluxDB with Flux description: Learn the basics of using Flux to query data from InfluxDB. menu: - flux_0_x: + flux_0_64: name: Query InfluxDB parent: get-started weight: 1 --- This guide walks through the basics of using Flux to query data from InfluxDB. -_**If you haven't already, make sure to install InfluxDB v1.7+, [enable Flux](/flux/v0.x/introduction/installation), -and choose a [tool for writing Flux queries](/flux/v0.x/introduction/getting-started#tools-for-working-with-flux).**_ +_**If you haven't already, make sure to install InfluxDB v1.7+, [enable Flux](/flux/v0.64/introduction/installation), +and choose a [tool for writing Flux queries](/flux/v0.64/introduction/getting-started#tools-for-working-with-flux).**_ Every Flux query needs the following: @@ -20,8 +20,8 @@ Every Flux query needs the following: ## 1. Define your data source -Flux's [`from()`](/flux/v0.x/stdlib/built-in/inputs/from) function defines an InfluxDB data source. -It requires a [`bucket`](/flux/v0.x/introduction/getting-started/#buckets) parameter. +Flux's [`from()`](/flux/v0.64/stdlib/built-in/inputs/from) function defines an InfluxDB data source. +It requires a [`bucket`](/flux/v0.64/introduction/getting-started/#buckets) parameter. For this example, use `telegraf/autogen`, a combination of the default database and retention policy provided by the TICK stack. ```js @@ -33,11 +33,11 @@ Flux requires a time range when querying time series data. "Unbounded" queries are very resource-intensive and as a protective measure, Flux will not query the database without a specified range. -Use the pipe-forward operator (`|>`) to pipe data from your data source into the [`range()`](/flux/v0.x/stdlib/built-in/transformations/range) +Use the pipe-forward operator (`|>`) to pipe data from your data source into the [`range()`](/flux/v0.64/stdlib/built-in/transformations/range) function, which specifies a time range for your query. It accepts two properties: `start` and `stop`. -Ranges can be **relative** using negative [durations](/flux/v0.x/language/lexical-elements#duration-literals) -or **absolute** using [timestamps](/flux/v0.x/language/lexical-elements#date-and-time-literals). +Ranges can be **relative** using negative [durations](/flux/v0.64/language/lexical-elements#duration-literals) +or **absolute** using [timestamps](/flux/v0.64/language/lexical-elements#date-and-time-literals). ###### Example relative time ranges ```js @@ -125,6 +125,6 @@ The query shown here is a barebones example. Flux queries can be extended in many ways to form powerful scripts. diff --git a/content/flux/v0.x/introduction/getting-started/syntax-basics.md b/content/flux/v0.64/introduction/getting-started/syntax-basics.md similarity index 94% rename from content/flux/v0.x/introduction/getting-started/syntax-basics.md rename to content/flux/v0.64/introduction/getting-started/syntax-basics.md index 41890a078d..795544cead 100644 --- a/content/flux/v0.x/introduction/getting-started/syntax-basics.md +++ b/content/flux/v0.64/introduction/getting-started/syntax-basics.md @@ -2,7 +2,7 @@ title: Flux syntax basics description: An introduction to the basic elements of the Flux syntax with real-world application examples. menu: - flux_0_x: + flux_0_64: name: Syntax basics parent: get-started weight: 3 @@ -129,7 +129,7 @@ data |> someFunction() |> anotherFunction() ``` ## Real-world application of basic syntax -This likely seems familiar if you've already been through through the other [getting started guides](/flux/v0.x/introduction/getting-started). +This likely seems familiar if you've already been through through the other [getting started guides](/flux/v0.64/introduction/getting-started). Flux's syntax is inspired by Javascript and other functional scripting languages. As you begin to apply these basic principles in real-world use cases such as creating data stream variables, custom functions, etc., the power of Flux and its ability to query and process data will become apparent. @@ -185,7 +185,7 @@ topN = (tables=<-, n) => |> limit(n: n) ``` -_More information about creating custom functions is available in the [Custom functions](/flux/v0.x/stdlib/custom-functions) documentation._ +_More information about creating custom functions is available in the [Custom functions](/flux/v0.64/stdlib/custom-functions) documentation._ Using this new custom function `topN` and the `cpuUsageUser` data stream variable defined above, find the top five data points and yield the results. @@ -218,7 +218,7 @@ Then using Flux's `sort()` and `limit()` functions to find the top `n` results i topN = (tables=<-, n) => tables |> sort(desc: true) |> limit(n: n) ``` -_More information about creating custom functions is available in the [Custom functions](/flux/v0.x/stdlib/custom-functions) documentation._ +_More information about creating custom functions is available in the [Custom functions](/flux/v0.64/stdlib/custom-functions) documentation._ Using the `cpuUsageUser` data stream variable defined [above](#define-data-stream-variables), find the top five data points with the custom `topN` function and yield the results. @@ -233,5 +233,5 @@ cpuUsageUser |> topN(n:5) |> yield() This query will return the five data points with the highest user CPU usage over the last hour. diff --git a/content/flux/v0.x/introduction/getting-started/transform-data.md b/content/flux/v0.64/introduction/getting-started/transform-data.md similarity index 80% rename from content/flux/v0.x/introduction/getting-started/transform-data.md rename to content/flux/v0.64/introduction/getting-started/transform-data.md index 5542bb120e..8d7356359a 100644 --- a/content/flux/v0.x/introduction/getting-started/transform-data.md +++ b/content/flux/v0.64/introduction/getting-started/transform-data.md @@ -2,24 +2,24 @@ title: Transform data with Flux description: Learn the basics of using Flux to transform data queried from InfluxDB. menu: - flux_0_x: + flux_0_64: name: Transform your data parent: get-started weight: 2 --- -When [querying data from InfluxDB](/flux/v0.x/introduction/getting-started/query-influxdb), +When [querying data from InfluxDB](/flux/v0.64/introduction/getting-started/query-influxdb), you often need to transform that data in some way. Common examples are aggregating data into averages, downsampling data, etc. -This guide demonstrates using [Flux functions](/flux/v0.x/stdlib) to transform your data. +This guide demonstrates using [Flux functions](/flux/v0.64/stdlib) to transform your data. It walks through creating a Flux script that partitions data into windows of time, averages the `_value`s in each window, and outputs the averages as a new table. It's important to understand how the "shape" of your data changes through each of these operations. ## Query data -Use the query built in the previous [Query data from InfluxDB](/flux/v0.x/introduction/getting-started/query-influxdb) +Use the query built in the previous [Query data from InfluxDB](/flux/v0.64/introduction/getting-started/query-influxdb) guide, but update the range to pull data from the last hour: ```js @@ -34,14 +34,14 @@ from(bucket:"telegraf/autogen") ## Flux functions Flux provides a number of functions that perform specific operations, transformations, and tasks. -You can also [create custom functions](/flux/v0.x/stdlib/custom-functions) in your Flux queries. -_Functions are covered in detail in the [Flux functions](/flux/v0.x/stdlib) documentation._ +You can also [create custom functions](/flux/v0.64/stdlib/custom-functions) in your Flux queries. +_Functions are covered in detail in the [Flux functions](/flux/v0.64/stdlib) documentation._ A common type of function used when transforming data queried from InfluxDB is an aggregate function. Aggregate functions take a set of `_value`s in a table, aggregate them, and transform them into a new value. -This example uses the [`mean()` function](/flux/v0.x/stdlib/built-in/transformations/aggregates/mean) +This example uses the [`mean()` function](/flux/v0.64/stdlib/built-in/transformations/aggregates/mean) to average values within time windows. > The following example walks through the steps required to window and aggregate data, @@ -49,7 +49,7 @@ to average values within time windows. > It's just good to understand the steps in the process. ## Window your data -Flux's [`window()` function](/flux/v0.x/stdlib/built-in/transformations/window) partitions records based on a time value. +Flux's [`window()` function](/flux/v0.64/stdlib/built-in/transformations/window) partitions records based on a time value. Use the `every` parameter to define a duration of time for each window. For this example, window data in five minute intervals (`5m`). @@ -72,7 +72,7 @@ When visualized, each table is assigned a unique color. ## Aggregate windowed data Flux aggregate functions take the `_value`s in each table and aggregate them in some way. -Use the [`mean()` function](/flux/v0.x/stdlib/built-in/transformations/aggregates/mean) to average the `_value`s of each table. +Use the [`mean()` function](/flux/v0.64/stdlib/built-in/transformations/aggregates/mean) to average the `_value`s of each table. ```js from(bucket:"telegraf/autogen") @@ -98,7 +98,7 @@ Aggregate functions don't infer what time should be used for the aggregate value Therefore the `_time` column is dropped. A `_time` column is required in the [next operation](#unwindow-aggregate-tables). -To add one, use the [`duplicate()` function](/flux/v0.x/stdlib/built-in/transformations/duplicate) +To add one, use the [`duplicate()` function](/flux/v0.64/stdlib/built-in/transformations/duplicate) to duplicate the `_stop` column as the `_time` column for each windowed table. ```js @@ -143,7 +143,7 @@ process helps to understand how data changes "shape" as it is passed through eac Flux provides (and allows you to create) "helper" functions that abstract many of these steps. The same operation performed in this guide can be accomplished using the -[`aggregateWindow()` function](/flux/v0.x/stdlib/built-in/transformations/aggregates/aggregatewindow). +[`aggregateWindow()` function](/flux/v0.64/stdlib/built-in/transformations/aggregates/aggregatewindow). ```js from(bucket:"telegraf/autogen") @@ -164,11 +164,11 @@ and your own custom functions, but this is a good introduction into the basic sy --- _For a deeper dive into windowing and aggregating data with example data output for each transformation, -view the [Windowing and aggregating data](/flux/v0.x/guides/windowing-aggregating) guide._ +view the [Windowing and aggregating data](/flux/v0.64/guides/windowing-aggregating) guide._ --- diff --git a/content/flux/v0.x/introduction/installation.md b/content/flux/v0.64/introduction/installation.md similarity index 88% rename from content/flux/v0.x/introduction/installation.md rename to content/flux/v0.64/introduction/installation.md index 2926487b09..45902c7744 100644 --- a/content/flux/v0.x/introduction/installation.md +++ b/content/flux/v0.64/introduction/installation.md @@ -2,7 +2,7 @@ title: Enable Flux description: Instructions for enabling Flux in your InfluxDB configuration. menu: - flux_0_x: + flux_0_64: name: Enable Flux parent: Introduction weight: 1 @@ -33,5 +33,5 @@ Enable Flux by setting the `flux-enabled` option to `true` under the `[http]` se When InfluxDB starts, the Flux daemon starts as well and data can be queried using Flux. diff --git a/content/flux/v0.x/language/_index.md b/content/flux/v0.64/language/_index.md similarity index 99% rename from content/flux/v0.x/language/_index.md rename to content/flux/v0.64/language/_index.md index 72f89bc3aa..bf89b215d0 100644 --- a/content/flux/v0.x/language/_index.md +++ b/content/flux/v0.64/language/_index.md @@ -2,7 +2,7 @@ title: Flux language reference description: Covers the current and future Flux functional data scripting language, which is designed for querying, analyzing, and acting on time series data. menu: - flux_0_x: + flux_0_64: name: Language reference weight: 5 --- diff --git a/content/flux/v0.x/language/assignment-scope.md b/content/flux/v0.64/language/assignment-scope.md similarity index 99% rename from content/flux/v0.x/language/assignment-scope.md rename to content/flux/v0.64/language/assignment-scope.md index f6d1de9566..f1ee6c5816 100644 --- a/content/flux/v0.x/language/assignment-scope.md +++ b/content/flux/v0.64/language/assignment-scope.md @@ -2,7 +2,7 @@ title: Assignment and scope description: An assignment binds an identifier to a variable, option, or function. Every identifier in a program must be assigned. menu: - flux_0_x: + flux_0_64: parent: Language reference name: Assignment and scope weight: diff --git a/content/flux/v0.x/language/blocks.md b/content/flux/v0.64/language/blocks.md similarity index 98% rename from content/flux/v0.x/language/blocks.md rename to content/flux/v0.64/language/blocks.md index 12fa5f240b..2798e46d6b 100644 --- a/content/flux/v0.x/language/blocks.md +++ b/content/flux/v0.64/language/blocks.md @@ -2,7 +2,7 @@ title: Blocks description: A block is a possibly empty sequence of statements within matching braces ({}). menu: - flux_0_x: + flux_0_64: parent: Language reference name: Blocks weight: 30 diff --git a/content/flux/v0.x/language/data-model.md b/content/flux/v0.64/language/data-model.md similarity index 99% rename from content/flux/v0.x/language/data-model.md rename to content/flux/v0.64/language/data-model.md index dd5c37b8fd..be97bc0285 100644 --- a/content/flux/v0.x/language/data-model.md +++ b/content/flux/v0.64/language/data-model.md @@ -2,7 +2,7 @@ title: Flux data model description: Flux employs a basic data model built from basic data types. The data model consists of tables, records, columns and streams. menu: - flux_0_x: + flux_0_64: name: Data model parent: Language reference weight: 1 diff --git a/content/flux/v0.x/language/expressions.md b/content/flux/v0.64/language/expressions.md similarity index 99% rename from content/flux/v0.x/language/expressions.md rename to content/flux/v0.64/language/expressions.md index fb76a2f99a..23d38fb91f 100644 --- a/content/flux/v0.x/language/expressions.md +++ b/content/flux/v0.64/language/expressions.md @@ -2,7 +2,7 @@ title: Expressions description: An expression specifies the computation of a value by applying the operators and functions to operands. menu: - flux_0_x: + flux_0_64: parent: Language reference name: Expressions weight: 40 @@ -266,4 +266,4 @@ PostfixOperator = MemberExpression | IndexExpression . ``` -_Also see [Flux Operators](/flux/v0.x/language/operators)._ +_Also see [Flux Operators](/flux/v0.64/language/operators)._ diff --git a/content/flux/v0.x/language/lexical-elements.md b/content/flux/v0.64/language/lexical-elements.md similarity index 99% rename from content/flux/v0.x/language/lexical-elements.md rename to content/flux/v0.64/language/lexical-elements.md index 6ee9f77647..157baec7e2 100644 --- a/content/flux/v0.x/language/lexical-elements.md +++ b/content/flux/v0.64/language/lexical-elements.md @@ -2,7 +2,7 @@ title: Lexical elements description: Descriptions of Flux comments, tokens, identifiers, keywords, and other lexical elements. menu: - flux_0_x: + flux_0_64: parent: Language reference name: Lexical elements weight: 50 diff --git a/content/flux/v0.x/language/notation.md b/content/flux/v0.64/language/notation.md similarity index 98% rename from content/flux/v0.x/language/notation.md rename to content/flux/v0.64/language/notation.md index b306181f2d..110e5a7c48 100644 --- a/content/flux/v0.x/language/notation.md +++ b/content/flux/v0.64/language/notation.md @@ -2,7 +2,7 @@ title: Notation description: Notation principles for the Flux functional data scripting language. menu: - flux_0_x: + flux_0_64: parent: Language reference name: Notation weight: 60 diff --git a/content/flux/v0.x/language/operators.md b/content/flux/v0.64/language/operators.md similarity index 98% rename from content/flux/v0.x/language/operators.md rename to content/flux/v0.64/language/operators.md index 63ca853925..863fe58547 100644 --- a/content/flux/v0.x/language/operators.md +++ b/content/flux/v0.64/language/operators.md @@ -2,7 +2,7 @@ title: Operators in the Flux language description: Flux supports many types of operators including arithmetic operators, comparison operators, function operators, and others. menu: - flux_0_x: + flux_0_64: name: Operators parent: Language reference weight: 130 @@ -95,7 +95,7 @@ Function operators facilitate the creation of functions and control the flow of --- -_See [Custom functions](/flux/v0.x/stdlib/custom-functions/) for examples of function operators is use._ +_See [Custom functions](/flux/v0.64/stdlib/custom-functions/) for examples of function operators is use._ --- diff --git a/content/flux/v0.x/language/options.md b/content/flux/v0.64/language/options.md similarity index 99% rename from content/flux/v0.x/language/options.md rename to content/flux/v0.64/language/options.md index 2672c2e9d3..6af254f8a1 100644 --- a/content/flux/v0.x/language/options.md +++ b/content/flux/v0.64/language/options.md @@ -2,7 +2,7 @@ title: Options description: placeholder menu: - flux_0_x: + flux_0_64: parent: Language reference name: Options weight: 110 diff --git a/content/flux/v0.x/language/packages.md b/content/flux/v0.64/language/packages.md similarity index 98% rename from content/flux/v0.x/language/packages.md rename to content/flux/v0.64/language/packages.md index 38dd0c898c..e0155cbbd3 100644 --- a/content/flux/v0.x/language/packages.md +++ b/content/flux/v0.64/language/packages.md @@ -5,9 +5,9 @@ description: > A package consists of one or more source files. Each source file is parsed individually and composed into a single package. aliases: - - /flux/v0.x/language/programs + - /flux/v0.64/language/programs menu: - flux_0_x: + flux_0_64: parent: Language reference name: Packages weight: 70 diff --git a/content/flux/v0.x/language/representation.md b/content/flux/v0.64/language/representation.md similarity index 98% rename from content/flux/v0.x/language/representation.md rename to content/flux/v0.64/language/representation.md index 7b36b9adf4..2347d0d26d 100644 --- a/content/flux/v0.x/language/representation.md +++ b/content/flux/v0.64/language/representation.md @@ -2,7 +2,7 @@ title: Representation description: Source code is encoded in UTF-8. The text need not be canonicalized. menu: - flux_0_x: + flux_0_64: parent: Language reference name: Representation weight: 80 diff --git a/content/flux/v0.x/language/side-effects.md b/content/flux/v0.64/language/side-effects.md similarity index 97% rename from content/flux/v0.x/language/side-effects.md rename to content/flux/v0.64/language/side-effects.md index 85bb2cf0d9..b2beb52d76 100644 --- a/content/flux/v0.x/language/side-effects.md +++ b/content/flux/v0.64/language/side-effects.md @@ -2,7 +2,7 @@ title: Side effects description: A summary of side effects in the Flux functional data scripting language. menu: - flux_0_x: + flux_0_64: parent: Language reference name: Side effects weight: 90 diff --git a/content/flux/v0.x/language/statements.md b/content/flux/v0.64/language/statements.md similarity index 99% rename from content/flux/v0.x/language/statements.md rename to content/flux/v0.64/language/statements.md index e1529928fe..55e7abe585 100644 --- a/content/flux/v0.x/language/statements.md +++ b/content/flux/v0.64/language/statements.md @@ -2,7 +2,7 @@ title: Statements description: Statements control execution in the Flux functional data scripting language. menu: - flux_0_x: + flux_0_64: parent: Language reference name: Statements weight: 100 diff --git a/content/flux/v0.x/language/string-interpolation.md b/content/flux/v0.64/language/string-interpolation.md similarity index 88% rename from content/flux/v0.x/language/string-interpolation.md rename to content/flux/v0.64/language/string-interpolation.md index 068ce11394..823c16c0a7 100644 --- a/content/flux/v0.x/language/string-interpolation.md +++ b/content/flux/v0.64/language/string-interpolation.md @@ -4,7 +4,7 @@ description: > Flux string interpolation evaluates string literals containing one or more placeholders and returns a result with placeholders replaced with their corresponding values. menu: - flux_0_x: + flux_0_64: parent: Language reference name: String interpolation weight: 11 @@ -14,7 +14,7 @@ Flux string interpolation evaluates string literals containing one or more place and returns a result with placeholders replaced with their corresponding values. ## String interpolation syntax -To use Flux string interpolation, enclose embedded [expressions](/flux/v0.x/language/expressions/) +To use Flux string interpolation, enclose embedded [expressions](/flux/v0.64/language/expressions/) in a dollar sign and curly braces `${}`. Flux replaces the content between the braces with the result of the expression and returns a string literal. @@ -28,7 +28,7 @@ name = "John" {{% note %}} #### Flux only interpolates string values Flux currently interpolates only string values ([IMP#1775](https://github.com/influxdata/flux/issues/1775)). -Use the [string() function](/flux/v0.x/stdlib/built-in/transformations/type-conversions/string/) +Use the [string() function](/flux/v0.64/stdlib/built-in/transformations/type-conversions/string/) to convert non-string values to strings. ```js @@ -39,8 +39,8 @@ count = 12 ## Use dot notation to interpolate object values -[Objects](/flux/v0.x/language/expressions/#object-literals) consist of key-value pairs. -Use [dot notation](/flux/v0.x/language/expressions/#member-expressions) +[Objects](/flux/v0.64/language/expressions/#object-literals) consist of key-value pairs. +Use [dot notation](/flux/v0.64/language/expressions/#member-expressions) to interpolate values from an object. ```js diff --git a/content/flux/v0.x/language/system-built-ins.md b/content/flux/v0.64/language/system-built-ins.md similarity index 91% rename from content/flux/v0.x/language/system-built-ins.md rename to content/flux/v0.64/language/system-built-ins.md index 0eeb916d98..30c8c008bd 100644 --- a/content/flux/v0.x/language/system-built-ins.md +++ b/content/flux/v0.64/language/system-built-ins.md @@ -4,9 +4,9 @@ description: > When a built-in value is not expressible in Flux, its value may be defined by the hosting environment. All such values must have a corresponding builtin statement to declare the existence and type of the built-in value. aliases: - - /flux/v0.x/language/built-ins/system-built-ins/ + - /flux/v0.64/language/built-ins/system-built-ins/ menu: - flux_0_x: + flux_0_64: name: System built-ins parent: Language reference weight: 6 diff --git a/content/flux/v0.x/language/types.md b/content/flux/v0.64/language/types.md similarity index 99% rename from content/flux/v0.x/language/types.md rename to content/flux/v0.64/language/types.md index c1913d87d4..10ab9630c5 100644 --- a/content/flux/v0.x/language/types.md +++ b/content/flux/v0.64/language/types.md @@ -2,7 +2,7 @@ title: Types description: A type defines the set of values and operations on those values. Types are never explicitly declared as part of the syntax. Types are always inferred from the usage of the value. menu: - flux_0_x: + flux_0_64: parent: Language reference name: Types weight: 110 diff --git a/content/flux/v0.x/language/variables.md b/content/flux/v0.64/language/variables.md similarity index 97% rename from content/flux/v0.x/language/variables.md rename to content/flux/v0.64/language/variables.md index 46edbcb7c7..70a9433186 100644 --- a/content/flux/v0.x/language/variables.md +++ b/content/flux/v0.64/language/variables.md @@ -2,7 +2,7 @@ title: Variables description: Flux variables are immutable storage locations for single values. menu: - flux_0_x: + flux_0_64: parent: Language reference name: Variables weight: 120 diff --git a/content/flux/v0.x/stdlib/_index.md b/content/flux/v0.64/stdlib/_index.md similarity index 91% rename from content/flux/v0.x/stdlib/_index.md rename to content/flux/v0.64/stdlib/_index.md index ed074ee2b1..ec5a28521b 100644 --- a/content/flux/v0.x/stdlib/_index.md +++ b/content/flux/v0.64/stdlib/_index.md @@ -3,11 +3,11 @@ title: Flux standard library description: > The Flux standard library includes packages and functions that retrieve, transform, process, and output data. menu: - flux_0_x: + flux_0_64: name: Standard library weight: 4 aliases: - - /flux/v0.x/functions/ + - /flux/v0.64/functions/ --- The Flux standard library includes packages and functions that retrieve, transform, process, and output data. diff --git a/content/flux/v0.x/stdlib/built-in/_index.md b/content/flux/v0.64/stdlib/built-in/_index.md similarity index 92% rename from content/flux/v0.x/stdlib/built-in/_index.md rename to content/flux/v0.64/stdlib/built-in/_index.md index 5e27bd3261..3c7072bda2 100644 --- a/content/flux/v0.x/stdlib/built-in/_index.md +++ b/content/flux/v0.64/stdlib/built-in/_index.md @@ -5,12 +5,12 @@ description: > Flux. Because these functions are "built-in," they do not require an `import` statement and are usable without any extra setup. menu: - flux_0_x: + flux_0_64: name: Built-in parent: Standard library weight: 1 aliases: - - /flux/v0.x/functions/built-in/ + - /flux/v0.64/functions/built-in/ --- Built-in functions provide a foundation for working with data using Flux. diff --git a/content/flux/v0.x/stdlib/built-in/inputs/_index.md b/content/flux/v0.64/stdlib/built-in/inputs/_index.md similarity index 81% rename from content/flux/v0.x/stdlib/built-in/inputs/_index.md rename to content/flux/v0.64/stdlib/built-in/inputs/_index.md index dcfdeb1d6e..87673a221c 100644 --- a/content/flux/v0.x/stdlib/built-in/inputs/_index.md +++ b/content/flux/v0.64/stdlib/built-in/inputs/_index.md @@ -3,10 +3,10 @@ title: Flux built-in input functions description: Flux's built-in input functions define sources of data or or display information about data sources. aliases: - - /flux/v0.x/functions/inputs - - /flux/v0.x/functions/built-in/inputs/ + - /flux/v0.64/functions/inputs + - /flux/v0.64/functions/built-in/inputs/ menu: - flux_0_x: + flux_0_64: parent: Built-in name: Inputs weight: 1 diff --git a/content/flux/v0.x/stdlib/built-in/inputs/buckets.md b/content/flux/v0.64/stdlib/built-in/inputs/buckets.md similarity index 81% rename from content/flux/v0.x/stdlib/built-in/inputs/buckets.md rename to content/flux/v0.64/stdlib/built-in/inputs/buckets.md index 1e16e3eef6..7ffdf19eef 100644 --- a/content/flux/v0.x/stdlib/built-in/inputs/buckets.md +++ b/content/flux/v0.64/stdlib/built-in/inputs/buckets.md @@ -2,10 +2,10 @@ title: buckets() function description: The buckets() function returns a list of buckets in the organization. aliases: - - /flux/v0.x/functions/inputs/buckets - - /flux/v0.x/functions/built-in/inputs/buckets/ + - /flux/v0.64/functions/inputs/buckets + - /flux/v0.64/functions/built-in/inputs/buckets/ menu: - flux_0_x: + flux_0_64: name: buckets parent: Inputs weight: 1 diff --git a/content/flux/v0.x/stdlib/built-in/inputs/from.md b/content/flux/v0.64/stdlib/built-in/inputs/from.md similarity index 91% rename from content/flux/v0.x/stdlib/built-in/inputs/from.md rename to content/flux/v0.64/stdlib/built-in/inputs/from.md index 3b04fb5d09..724a4b99b9 100644 --- a/content/flux/v0.x/stdlib/built-in/inputs/from.md +++ b/content/flux/v0.64/stdlib/built-in/inputs/from.md @@ -2,10 +2,10 @@ title: from() function description: The from() function retrieves data from an InfluxDB data source. aliases: - - /flux/v0.x/functions/inputs/from - - /flux/v0.x/functions/built-in/inputs/from/ + - /flux/v0.64/functions/inputs/from + - /flux/v0.64/functions/built-in/inputs/from/ menu: - flux_0_x: + flux_0_64: name: from parent: Inputs weight: 1 diff --git a/content/flux/v0.x/stdlib/built-in/misc/_index.md b/content/flux/v0.64/stdlib/built-in/misc/_index.md similarity index 85% rename from content/flux/v0.x/stdlib/built-in/misc/_index.md rename to content/flux/v0.64/stdlib/built-in/misc/_index.md index 3b23f005f7..c803991c69 100644 --- a/content/flux/v0.x/stdlib/built-in/misc/_index.md +++ b/content/flux/v0.64/stdlib/built-in/misc/_index.md @@ -3,10 +3,10 @@ title: Flux built-in miscellaneous functions description: Flux provides built-in miscellaneous functions that serve purposes other than retrieving, transforming, or outputting data. aliases: - - /flux/v0.x/functions/misc - - /flux/v0.x/functions/built-in/misc/ + - /flux/v0.64/functions/misc + - /flux/v0.64/functions/built-in/misc/ menu: - flux_0_x: + flux_0_64: parent: Built-in name: Miscellaneous weight: 5 diff --git a/content/flux/v0.x/stdlib/built-in/misc/intervals.md b/content/flux/v0.64/stdlib/built-in/misc/intervals.md similarity index 96% rename from content/flux/v0.x/stdlib/built-in/misc/intervals.md rename to content/flux/v0.64/stdlib/built-in/misc/intervals.md index b4b0d0c321..3bde0eb1f1 100644 --- a/content/flux/v0.x/stdlib/built-in/misc/intervals.md +++ b/content/flux/v0.64/stdlib/built-in/misc/intervals.md @@ -3,10 +3,10 @@ title: intervals() function description: The intervals() function generates a set of time intervals over a range of time. aliases: - - /flux/v0.x/functions/misc/intervals - - /flux/v0.x/functions/built-in/misc/intervals/ + - /flux/v0.64/functions/misc/intervals + - /flux/v0.64/functions/built-in/misc/intervals/ menu: - flux_0_x: + flux_0_64: name: intervals parent: Miscellaneous weight: 1 @@ -20,7 +20,7 @@ The return value of intervals is another function that accepts start and stop ti The generator is then used to produce the set of intervals. The set of intervals includes all intervals that intersect with the initial range of time. -> The `intervals()` function is designed to be used with the `intervals` parameter of the [`window()` function](/flux/v0.x/stdlib/built-in/transformations/window). +> The `intervals()` function is designed to be used with the `intervals` parameter of the [`window()` function](/flux/v0.64/stdlib/built-in/transformations/window). By default the end boundary of an interval will align with the Unix epoch (zero time) modified by the offset of the `location` option. diff --git a/content/flux/v0.x/stdlib/built-in/misc/length.md b/content/flux/v0.64/stdlib/built-in/misc/length.md similarity index 97% rename from content/flux/v0.x/stdlib/built-in/misc/length.md rename to content/flux/v0.64/stdlib/built-in/misc/length.md index f3be40ce35..4963f5f1ce 100644 --- a/content/flux/v0.x/stdlib/built-in/misc/length.md +++ b/content/flux/v0.64/stdlib/built-in/misc/length.md @@ -2,7 +2,7 @@ title: length() function description: The `length()` function returns the number of items in an array. menu: - flux_0_x: + flux_0_64: name: length parent: Miscellaneous weight: 1 diff --git a/content/flux/v0.x/stdlib/built-in/misc/linearbins.md b/content/flux/v0.64/stdlib/built-in/misc/linearbins.md similarity index 84% rename from content/flux/v0.x/stdlib/built-in/misc/linearbins.md rename to content/flux/v0.64/stdlib/built-in/misc/linearbins.md index 0e79d60518..1964cc653e 100644 --- a/content/flux/v0.x/stdlib/built-in/misc/linearbins.md +++ b/content/flux/v0.64/stdlib/built-in/misc/linearbins.md @@ -2,10 +2,10 @@ title: linearBins() function description: The linearBins() function generates a list of linearly separated floats. aliases: - - /flux/v0.x/functions/misc/linearbins - - /flux/v0.x/functions/built-in/misc/linearbins/ + - /flux/v0.64/functions/misc/linearbins + - /flux/v0.64/functions/built-in/misc/linearbins/ menu: - flux_0_x: + flux_0_64: name: linearBins parent: Miscellaneous weight: 1 @@ -13,7 +13,7 @@ menu: The `linearBins()` function generates a list of linearly separated floats. It is a helper function meant to generate bin bounds for the -[`histogram()` function](/flux/v0.x/stdlib/built-in/transformations/histogram). +[`histogram()` function](/flux/v0.64/stdlib/built-in/transformations/histogram). _**Function type:** Miscellaneous_ _**Output data type:** Array of floats_ diff --git a/content/flux/v0.x/stdlib/built-in/misc/logarithmicbins.md b/content/flux/v0.64/stdlib/built-in/misc/logarithmicbins.md similarity index 84% rename from content/flux/v0.x/stdlib/built-in/misc/logarithmicbins.md rename to content/flux/v0.64/stdlib/built-in/misc/logarithmicbins.md index 27b9162fb1..add76fe672 100644 --- a/content/flux/v0.x/stdlib/built-in/misc/logarithmicbins.md +++ b/content/flux/v0.64/stdlib/built-in/misc/logarithmicbins.md @@ -3,10 +3,10 @@ title: logarithmicBins() function description: The logarithmicBins() function generates a list of exponentially separated floats. aliases: - - /flux/v0.x/functions/misc/logarithmicbins - - /flux/v0.x/functions/built-in/misc/logarithmicbins/ + - /flux/v0.64/functions/misc/logarithmicbins + - /flux/v0.64/functions/built-in/misc/logarithmicbins/ menu: - flux_0_x: + flux_0_64: name: logarithmicBins parent: Miscellaneous weight: 1 @@ -14,7 +14,7 @@ menu: The `logarithmicBins()` function generates a list of exponentially separated floats. It is a helper function meant to generate bin bounds for the -[`histogram()` function](/flux/v0.x/stdlib/built-in/transformations/histogram). +[`histogram()` function](/flux/v0.64/stdlib/built-in/transformations/histogram). _**Function type:** Miscellaneous_ _**Output data type:** Array of floats_ diff --git a/content/flux/v0.x/stdlib/built-in/misc/now.md b/content/flux/v0.64/stdlib/built-in/misc/now.md similarity index 90% rename from content/flux/v0.x/stdlib/built-in/misc/now.md rename to content/flux/v0.64/stdlib/built-in/misc/now.md index ea20888e3e..73ad3f31fd 100644 --- a/content/flux/v0.x/stdlib/built-in/misc/now.md +++ b/content/flux/v0.64/stdlib/built-in/misc/now.md @@ -2,7 +2,7 @@ title: now() function description: The `now()` function returns the current time (UTC). menu: - flux_0_x: + flux_0_64: name: now parent: Miscellaneous weight: 1 @@ -29,7 +29,7 @@ data `now()` is cached at runtime, so all instances of `now()` in a Flux script return the same value. -[`system.time()`](/flux/v0.x/stdlib/system/time/) returns the current +[`system.time()`](/flux/v0.64/stdlib/system/time/) returns the current system time of the host machine, which typically accounts for the local time zone. This time represents the time at which `system.time()` it is executed, so each instance of `system.time()` in a Flux script returns a unique value. diff --git a/content/flux/v0.x/stdlib/built-in/misc/sleep.md b/content/flux/v0.64/stdlib/built-in/misc/sleep.md similarity index 94% rename from content/flux/v0.x/stdlib/built-in/misc/sleep.md rename to content/flux/v0.64/stdlib/built-in/misc/sleep.md index 86eb631e56..3328050dee 100644 --- a/content/flux/v0.x/stdlib/built-in/misc/sleep.md +++ b/content/flux/v0.64/stdlib/built-in/misc/sleep.md @@ -2,12 +2,12 @@ title: sleep() function description: The `sleep()` function delays execution by a specified duration. menu: - flux_0_x: + flux_0_64: name: sleep parent: Miscellaneous weight: 401 aliases: - - /flux/v0.x/functions/built-in/misc/sleep/ + - /flux/v0.64/functions/built-in/misc/sleep/ --- The `sleep()` function delays execution by a specified duration. diff --git a/content/flux/v0.x/stdlib/built-in/outputs/_index.md b/content/flux/v0.64/stdlib/built-in/outputs/_index.md similarity index 81% rename from content/flux/v0.x/stdlib/built-in/outputs/_index.md rename to content/flux/v0.64/stdlib/built-in/outputs/_index.md index 001cebe03c..9d860dfde4 100644 --- a/content/flux/v0.x/stdlib/built-in/outputs/_index.md +++ b/content/flux/v0.64/stdlib/built-in/outputs/_index.md @@ -3,10 +3,10 @@ title: Flux built-in output functions description: Flux's built-in output functions yield results or send data to a specified output destination. aliases: - - /flux/v0.x/functions/outputs - - /flux/v0.x/functions/built-in/outputs/ + - /flux/v0.64/functions/outputs + - /flux/v0.64/functions/built-in/outputs/ menu: - flux_0_x: + flux_0_64: parent: Built-in name: Outputs weight: 2 diff --git a/content/flux/v0.x/stdlib/built-in/outputs/to.md b/content/flux/v0.64/stdlib/built-in/outputs/to.md similarity index 95% rename from content/flux/v0.x/stdlib/built-in/outputs/to.md rename to content/flux/v0.64/stdlib/built-in/outputs/to.md index 43f48a8831..f2ab106cd5 100644 --- a/content/flux/v0.x/stdlib/built-in/outputs/to.md +++ b/content/flux/v0.64/stdlib/built-in/outputs/to.md @@ -2,10 +2,10 @@ title: to() function description: The to() function writes data to an InfluxDB v2.0 bucket. aliases: - - /flux/v0.x/functions/outputs/to - - /flux/v0.x/functions/built-in/outputs/to/ + - /flux/v0.64/functions/outputs/to + - /flux/v0.64/functions/built-in/outputs/to/ menu: - flux_0_x: + flux_0_64: name: to parent: Outputs weight: 1 @@ -104,7 +104,7 @@ _**Output data type:** Object_ {{% note %}} Make sure `fieldFn` parameter names match each specified parameter. -To learn why, see [Match parameter names](/flux/v0.x/language/data-model/#match-parameter-names). +To learn why, see [Match parameter names](/flux/v0.64/language/data-model/#match-parameter-names). {{% /note %}} ## Examples diff --git a/content/flux/v0.x/stdlib/built-in/outputs/yield.md b/content/flux/v0.64/stdlib/built-in/outputs/yield.md similarity index 91% rename from content/flux/v0.x/stdlib/built-in/outputs/yield.md rename to content/flux/v0.64/stdlib/built-in/outputs/yield.md index 2f8341f561..8dd61d70dd 100644 --- a/content/flux/v0.x/stdlib/built-in/outputs/yield.md +++ b/content/flux/v0.64/stdlib/built-in/outputs/yield.md @@ -3,10 +3,10 @@ title: yield() function description: The yield() function indicates the input tables received should be delivered as a result of the query. aliases: - - /flux/v0.x/functions/outputs/yield - - /flux/v0.x/functions/built-in/outputs/yield/ + - /flux/v0.64/functions/outputs/yield + - /flux/v0.64/functions/built-in/outputs/yield/ menu: - flux_0_x: + flux_0_64: name: yield parent: Outputs weight: 1 diff --git a/content/flux/v0.x/stdlib/built-in/tests/_index.md b/content/flux/v0.64/stdlib/built-in/tests/_index.md similarity index 80% rename from content/flux/v0.x/stdlib/built-in/tests/_index.md rename to content/flux/v0.64/stdlib/built-in/tests/_index.md index f9dd75980f..c9fe98eb80 100644 --- a/content/flux/v0.x/stdlib/built-in/tests/_index.md +++ b/content/flux/v0.64/stdlib/built-in/tests/_index.md @@ -3,10 +3,10 @@ title: Flux built-in testing functions description: Flux's built-in testing functions test various aspects of piped-forward data. aliases: - - /flux/v0.x/functions/tests - - /flux/v0.x/functions/built-in/tests/ + - /flux/v0.64/functions/tests + - /flux/v0.64/functions/built-in/tests/ menu: - flux_0_x: + flux_0_64: name: Tests parent: Built-in weight: 5 diff --git a/content/flux/v0.x/stdlib/built-in/tests/contains.md b/content/flux/v0.64/stdlib/built-in/tests/contains.md similarity index 93% rename from content/flux/v0.x/stdlib/built-in/tests/contains.md rename to content/flux/v0.64/stdlib/built-in/tests/contains.md index b1c751ba45..be4b61ba39 100644 --- a/content/flux/v0.x/stdlib/built-in/tests/contains.md +++ b/content/flux/v0.64/stdlib/built-in/tests/contains.md @@ -2,12 +2,12 @@ title: contains() function description: The contains() function tests whether a value is a member of a set. menu: - flux_0_x: + flux_0_64: name: contains parent: Tests weight: 1 aliases: - - /flux/v0.x/functions/built-in/tests/contains/ + - /flux/v0.64/functions/built-in/tests/contains/ --- The `contains()` function tests whether a value is a member of a set. diff --git a/content/flux/v0.x/stdlib/built-in/transformations/_index.md b/content/flux/v0.64/stdlib/built-in/transformations/_index.md similarity index 81% rename from content/flux/v0.x/stdlib/built-in/transformations/_index.md rename to content/flux/v0.64/stdlib/built-in/transformations/_index.md index e2e154f7c8..a250e3f3f2 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/_index.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/_index.md @@ -3,10 +3,10 @@ title: Flux built-in transformation functions description: Flux's built-in transformation functions transform and shape your data in specific ways. aliases: - - /flux/v0.x/functions/transformations - - /flux/v0.x/functions/built-in/transformations/ + - /flux/v0.64/functions/transformations + - /flux/v0.64/functions/built-in/transformations/ menu: - flux_0_x: + flux_0_64: parent: Built-in name: Transformations weight: 3 diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/_index.md b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/_index.md similarity index 66% rename from content/flux/v0.x/stdlib/built-in/transformations/aggregates/_index.md rename to content/flux/v0.64/stdlib/built-in/transformations/aggregates/_index.md index f91e6a154c..83cc1a31ad 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/_index.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/_index.md @@ -3,10 +3,10 @@ title: Flux aggregate functions description: Flux aggregate functions take values from an input table and aggregate them in some way. aliases: - - /flux/v0.x/functions/transformations/aggregates - - /flux/v0.x/functions/built-in/transformations/aggregates/ + - /flux/v0.64/functions/transformations/aggregates + - /flux/v0.64/functions/built-in/transformations/aggregates/ menu: - flux_0_x: + flux_0_64: parent: Transformations name: Aggregates weight: 1 @@ -28,7 +28,7 @@ Any output table will have the following properties: - It will not have a `_time` column. ### aggregateWindow helper function -The [`aggregateWindow()` function](/flux/v0.x/stdlib/built-in/transformations/aggregates/aggregatewindow) +The [`aggregateWindow()` function](/flux/v0.64/stdlib/built-in/transformations/aggregates/aggregatewindow) does most of the work needed when aggregating data. It windows and aggregates the data, then combines windowed tables into a single output table. @@ -42,9 +42,9 @@ The following functions are both aggregates and selectors. Each returns `n` values after performing an aggregate operation. They are categorized as selector functions in this documentation: -- [highestAverage()](/flux/v0.x/stdlib/built-in/transformations/selectors/highestaverage) -- [highestCurrent()](/flux/v0.x/stdlib/built-in/transformations/selectors/highestcurrent) -- [highestMax()](/flux/v0.x/stdlib/built-in/transformations/selectors/highestmax) -- [lowestAverage()](/flux/v0.x/stdlib/built-in/transformations/selectors/lowestaverage) -- [lowestCurrent()](/flux/v0.x/stdlib/built-in/transformations/selectors/lowestcurrent) -- [lowestMin()](/flux/v0.x/stdlib/built-in/transformations/selectors/lowestmin) +- [highestAverage()](/flux/v0.64/stdlib/built-in/transformations/selectors/highestaverage) +- [highestCurrent()](/flux/v0.64/stdlib/built-in/transformations/selectors/highestcurrent) +- [highestMax()](/flux/v0.64/stdlib/built-in/transformations/selectors/highestmax) +- [lowestAverage()](/flux/v0.64/stdlib/built-in/transformations/selectors/lowestaverage) +- [lowestCurrent()](/flux/v0.64/stdlib/built-in/transformations/selectors/lowestcurrent) +- [lowestMin()](/flux/v0.64/stdlib/built-in/transformations/selectors/lowestmin) diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/aggregatewindow.md b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/aggregatewindow.md similarity index 92% rename from content/flux/v0.x/stdlib/built-in/transformations/aggregates/aggregatewindow.md rename to content/flux/v0.64/stdlib/built-in/transformations/aggregates/aggregatewindow.md index 2d90edecb1..84207402aa 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/aggregatewindow.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/aggregatewindow.md @@ -3,10 +3,10 @@ title: aggregateWindow() function description: The aggregateWindow() function applies an aggregate function to fixed windows of time. aliases: - - /flux/v0.x/functions/transformations/aggregates/aggregatewindow - - /flux/v0.x/functions/built-in/transformations/aggregates/aggregatewindow/ + - /flux/v0.64/functions/transformations/aggregates/aggregatewindow + - /flux/v0.64/functions/built-in/transformations/aggregates/aggregatewindow/ menu: - flux_0_x: + flux_0_64: name: aggregateWindow parent: Aggregates weight: 1 @@ -36,7 +36,7 @@ View the [function definition](#function-definition). {{% note %}} Make sure `fn` parameter names match each specified parameter. -To learn why, see [Match parameter names](/flux/v0.x/language/data-model/#match-parameter-names). +To learn why, see [Match parameter names](/flux/v0.64/language/data-model/#match-parameter-names). {{% /note %}} ### every diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/chandemomentumoscillator.md b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/chandemomentumoscillator.md similarity index 96% rename from content/flux/v0.x/stdlib/built-in/transformations/aggregates/chandemomentumoscillator.md rename to content/flux/v0.64/stdlib/built-in/transformations/aggregates/chandemomentumoscillator.md index 4f307adfcc..9e9f868f5e 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/chandemomentumoscillator.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/chandemomentumoscillator.md @@ -4,12 +4,12 @@ description: > The `chandeMomentumOscillator()` function applies the technical momentum indicator developed by Tushar Chande. menu: - flux_0_x: + flux_0_64: name: chandeMomentumOscillator parent: Aggregates weight: 1 aliases: - - /flux/v0.x/functions/built-in/transformations/aggregates/chandemomentumoscillator/ + - /flux/v0.64/functions/built-in/transformations/aggregates/chandemomentumoscillator/ --- The `chandeMomentumOscillator()` function applies the technical momentum indicator diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/count.md b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/count.md similarity index 72% rename from content/flux/v0.x/stdlib/built-in/transformations/aggregates/count.md rename to content/flux/v0.64/stdlib/built-in/transformations/aggregates/count.md index 55be68e23b..9639338192 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/count.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/count.md @@ -3,10 +3,10 @@ title: count() function description: The count() function outputs the number of non-null records in each aggregated column. aliases: - - /flux/v0.x/functions/transformations/aggregates/count - - /flux/v0.x/functions/built-in/transformations/aggregates/count/ + - /flux/v0.64/functions/transformations/aggregates/count + - /flux/v0.64/functions/built-in/transformations/aggregates/count/ menu: - flux_0_x: + flux_0_64: name: count parent: Aggregates weight: 1 @@ -29,9 +29,9 @@ To keep empty tables in your data, set the following parameters for the followin | Function | Parameter | |:-------- |:--------- | -| [filter()](/flux/v0.x/stdlib/built-in/transformations/filter/) | `onEmpty: "keep"` | -| [window()](/flux/v0.x/stdlib/built-in/transformations/window/) | `createEmpty: true` | -| [aggregateWindow()](/flux/v0.x/stdlib/built-in/transformations/aggregates/aggregatewindow/) | `createEmpty: true` | +| [filter()](/flux/v0.64/stdlib/built-in/transformations/filter/) | `onEmpty: "keep"` | +| [window()](/flux/v0.64/stdlib/built-in/transformations/window/) | `createEmpty: true` | +| [aggregateWindow()](/flux/v0.64/stdlib/built-in/transformations/aggregates/aggregatewindow/) | `createEmpty: true` | {{% /note %}} ## Parameters diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/cov.md b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/cov.md similarity index 91% rename from content/flux/v0.x/stdlib/built-in/transformations/aggregates/cov.md rename to content/flux/v0.64/stdlib/built-in/transformations/aggregates/cov.md index b601651383..39ef6c5b01 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/cov.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/cov.md @@ -3,10 +3,10 @@ title: cov() function description: The cov() function computes the covariance between two streams by first joining the streams, then performing the covariance operation. aliases: - - /flux/v0.x/functions/transformations/aggregates/cov - - /flux/v0.x/functions/built-in/transformations/aggregates/cov/ + - /flux/v0.64/functions/transformations/aggregates/cov + - /flux/v0.64/functions/built-in/transformations/aggregates/cov/ menu: - flux_0_x: + flux_0_64: name: cov parent: Aggregates weight: 1 diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/covariance.md b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/covariance.md similarity index 85% rename from content/flux/v0.x/stdlib/built-in/transformations/aggregates/covariance.md rename to content/flux/v0.64/stdlib/built-in/transformations/aggregates/covariance.md index f9b24aba86..31ddb5efe4 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/covariance.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/covariance.md @@ -2,10 +2,10 @@ title: covariance() function description: The covariance() function computes the covariance between two columns. aliases: - - /flux/v0.x/functions/transformations/aggregates/covariance - - /flux/v0.x/functions/built-in/transformations/aggregates/covariance/ + - /flux/v0.64/functions/transformations/aggregates/covariance + - /flux/v0.64/functions/built-in/transformations/aggregates/covariance/ menu: - flux_0_x: + flux_0_64: name: covariance parent: Aggregates weight: 1 diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/derivative.md b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/derivative.md similarity index 90% rename from content/flux/v0.x/stdlib/built-in/transformations/aggregates/derivative.md rename to content/flux/v0.64/stdlib/built-in/transformations/aggregates/derivative.md index 8783a403f4..685ff93932 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/derivative.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/derivative.md @@ -3,10 +3,10 @@ title: derivative() function description: The derivative() function computes the rate of change per unit of time between subsequent non-null records. aliases: - - /flux/v0.x/functions/transformations/aggregates/derivative - - /flux/v0.x/functions/built-in/transformations/aggregates/derivative/ + - /flux/v0.64/functions/transformations/aggregates/derivative + - /flux/v0.64/functions/built-in/transformations/aggregates/derivative/ menu: - flux_0_x: + flux_0_64: name: derivative parent: Aggregates weight: 1 diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/difference.md b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/difference.md similarity index 94% rename from content/flux/v0.x/stdlib/built-in/transformations/aggregates/difference.md rename to content/flux/v0.64/stdlib/built-in/transformations/aggregates/difference.md index e541d22c66..d13b49f9a0 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/difference.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/difference.md @@ -3,10 +3,10 @@ title: difference() function description: The difference() function computes the difference between subsequent non-null records. aliases: - - /flux/v0.x/functions/transformations/aggregates/difference - - /flux/v0.x/functions/built-in/transformations/aggregates/difference/ + - /flux/v0.64/functions/transformations/aggregates/difference + - /flux/v0.64/functions/built-in/transformations/aggregates/difference/ menu: - flux_0_x: + flux_0_64: name: difference parent: Aggregates weight: 1 diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/doubleema.md b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/doubleema.md similarity index 86% rename from content/flux/v0.x/stdlib/built-in/transformations/aggregates/doubleema.md rename to content/flux/v0.64/stdlib/built-in/transformations/aggregates/doubleema.md index dc74ed734f..db78be2c43 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/doubleema.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/doubleema.md @@ -5,17 +5,17 @@ description: > of values grouped into `n` number of points, giving more weight to recent data at double the rate of `exponentialMovingAverage()`. menu: - flux_0_x: + flux_0_64: name: doubleEMA parent: Aggregates weight: 1 aliases: - - /flux/v0.x/functions/built-in/transformations/aggregates/doubleema/ + - /flux/v0.64/functions/built-in/transformations/aggregates/doubleema/ --- The `doubleEMA()` function calculates the exponential moving average of values in the `_value` column grouped into `n` number of points, giving more weight to recent -data at double the rate of [`exponentialMovingAverage()`](/flux/v0.x/stdlib/built-in/transformations/aggregates/exponentialmovingaverage/). +data at double the rate of [`exponentialMovingAverage()`](/flux/v0.64/stdlib/built-in/transformations/aggregates/exponentialmovingaverage/). _**Function type:** Aggregate_ @@ -29,7 +29,7 @@ doubleEMA(n: 5) - `N = n` is the period used to calculate the EMA. - A true double exponential moving average requires at least `2 * n - 1` values. If not enough values exist to calculate the double EMA, it returns a `NaN` value. -- `doubleEMA()` inherits all [exponential moving average rules](/flux/v0.x/stdlib/built-in/transformations/aggregates/exponentialmovingaverage/#exponential-moving-average-rules). +- `doubleEMA()` inherits all [exponential moving average rules](/flux/v0.64/stdlib/built-in/transformations/aggregates/exponentialmovingaverage/#exponential-moving-average-rules). ## Parameters diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/exponentialmovingaverage.md b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/exponentialmovingaverage.md similarity index 95% rename from content/flux/v0.x/stdlib/built-in/transformations/aggregates/exponentialmovingaverage.md rename to content/flux/v0.64/stdlib/built-in/transformations/aggregates/exponentialmovingaverage.md index 3f009a9c2b..09f055d46b 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/exponentialmovingaverage.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/exponentialmovingaverage.md @@ -5,12 +5,12 @@ description: > moving average of values in the `_value` column grouped into `n` number of points, giving more weight to recent data. menu: - flux_0_x: + flux_0_64: name: exponentialMovingAverage parent: Aggregates weight: 1 aliases: - - /flux/v0.x/functions/built-in/transformations/aggregates/exponentialmovingaverage/ + - /flux/v0.64/functions/built-in/transformations/aggregates/exponentialmovingaverage/ --- The `exponentialMovingAverage()` function calculates the exponential moving average of values diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/histogramquantile.md b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/histogramquantile.md similarity index 94% rename from content/flux/v0.x/stdlib/built-in/transformations/aggregates/histogramquantile.md rename to content/flux/v0.64/stdlib/built-in/transformations/aggregates/histogramquantile.md index c514071095..cc6207fa84 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/histogramquantile.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/histogramquantile.md @@ -3,10 +3,10 @@ title: histogramQuantile() function description: The `histogramQuantile()` function approximates a quantile given a histogram that approximates the cumulative distribution of the dataset. aliases: - - /flux/v0.x/functions/transformations/aggregates/histogramquantile - - /flux/v0.x/functions/built-in/transformations/aggregates/histogramquantile/ + - /flux/v0.64/functions/transformations/aggregates/histogramquantile + - /flux/v0.64/functions/built-in/transformations/aggregates/histogramquantile/ menu: - flux_0_x: + flux_0_64: name: histogramQuantile parent: Aggregates weight: 1 diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/holtwinters.md b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/holtwinters.md similarity index 88% rename from content/flux/v0.x/stdlib/built-in/transformations/aggregates/holtwinters.md rename to content/flux/v0.64/stdlib/built-in/transformations/aggregates/holtwinters.md index e1776364c6..6f3aa7d265 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/holtwinters.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/holtwinters.md @@ -4,12 +4,12 @@ description: > The `holtWinters()` function applies the Holt-Winters forecasting method to input tables. menu: - flux_0_x: + flux_0_64: name: holtWinters parent: Aggregates weight: 1 aliases: - - /flux/v0.x/functions/built-in/transformations/aggregates/holtwinters/ + - /flux/v0.64/functions/built-in/transformations/aggregates/holtwinters/ --- The `holtWinters()` function applies the Holt-Winters forecasting method to input tables. @@ -50,10 +50,10 @@ To ensure `holtWinters()` values are spaced evenly in time, the following rules By default, `holtWinters()` uses the first value in each time bucket to run the Holt-Winters calculation. To specify other values to use in the calculation, use: -- [`window()`](/flux/v0.x/stdlib/built-in/transformations/window/) - with [selectors](/flux/v0.x/stdlib/built-in/transformations/selectors/) - or [aggregates](/flux/v0.x/stdlib/built-in/transformations/aggregates/) -- [`aggregateWindow()`](/flux/v0.x/stdlib/built-in/transformations/aggregates/aggregatewindow) +- [`window()`](/flux/v0.64/stdlib/built-in/transformations/window/) + with [selectors](/flux/v0.64/stdlib/built-in/transformations/selectors/) + or [aggregates](/flux/v0.64/stdlib/built-in/transformations/aggregates/) +- [`aggregateWindow()`](/flux/v0.64/stdlib/built-in/transformations/aggregates/aggregatewindow) #### Fitted model The `holtWinters()` function applies the [Nelder-Mead optimization](https://en.wikipedia.org/wiki/Nelder%E2%80%93Mead_method) diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/increase.md b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/increase.md similarity index 90% rename from content/flux/v0.x/stdlib/built-in/transformations/aggregates/increase.md rename to content/flux/v0.64/stdlib/built-in/transformations/aggregates/increase.md index e4acfb2f7e..e33885cadd 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/increase.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/increase.md @@ -3,10 +3,10 @@ title: increase() function description: The increase() function calculates the total non-negative difference between values in a table. aliases: - - /flux/v0.x/functions/transformations/aggregates/increase - - /flux/v0.x/functions/built-in/transformations/aggregates/increase/ + - /flux/v0.64/functions/transformations/aggregates/increase + - /flux/v0.64/functions/built-in/transformations/aggregates/increase/ menu: - flux_0_x: + flux_0_64: name: increase parent: Aggregates weight: 1 diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/integral.md b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/integral.md similarity index 88% rename from content/flux/v0.x/stdlib/built-in/transformations/aggregates/integral.md rename to content/flux/v0.64/stdlib/built-in/transformations/aggregates/integral.md index d363c8ff83..edac59e3b9 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/integral.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/integral.md @@ -3,10 +3,10 @@ title: integral() function description: The integral() function computes the area under the curve per unit of time of subsequent non-null records. aliases: - - /flux/v0.x/functions/transformations/aggregates/integral - - /flux/v0.x/functions/built-in/transformations/aggregates/integral/ + - /flux/v0.64/functions/transformations/aggregates/integral + - /flux/v0.64/functions/built-in/transformations/aggregates/integral/ menu: - flux_0_x: + flux_0_64: name: integral parent: Aggregates weight: 1 diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/kaufmansama.md b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/kaufmansama.md similarity index 92% rename from content/flux/v0.x/stdlib/built-in/transformations/aggregates/kaufmansama.md rename to content/flux/v0.64/stdlib/built-in/transformations/aggregates/kaufmansama.md index 4b7dbc746e..ddf6ee53a0 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/kaufmansama.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/kaufmansama.md @@ -4,12 +4,12 @@ description: > The `kaufmansAMA()` function calculates the Kaufman''s Adaptive Moving Average (KAMA) using values in an input table. menu: - flux_0_x: + flux_0_64: name: kaufmansAMA parent: Aggregates weight: 1 aliases: - - /flux/v0.x/functions/built-in/transformations/aggregates/kaufmansama/ + - /flux/v0.64/functions/built-in/transformations/aggregates/kaufmansama/ --- The `kaufmansAMA()` function calculates the Kaufman's Adaptive Moving Average (KAMA) diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/kaufmanser.md b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/kaufmanser.md similarity index 92% rename from content/flux/v0.x/stdlib/built-in/transformations/aggregates/kaufmanser.md rename to content/flux/v0.64/stdlib/built-in/transformations/aggregates/kaufmanser.md index e278bf117d..7ae3bc9af6 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/kaufmanser.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/kaufmanser.md @@ -4,12 +4,12 @@ description: > The `kaufmansER()` function calculates the Kaufman''s Efficiency Ratio (KER) using values in an input table. menu: - flux_0_x: + flux_0_64: name: kaufmansER parent: Aggregates weight: 1 aliases: - - /flux/v0.x/functions/built-in/transformations/aggregates/kaufmanser/ + - /flux/v0.64/functions/built-in/transformations/aggregates/kaufmanser/ --- The `kaufmansER()` function calculates the Kaufman's Efficiency Ratio (KER) using diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/mean.md b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/mean.md similarity index 85% rename from content/flux/v0.x/stdlib/built-in/transformations/aggregates/mean.md rename to content/flux/v0.64/stdlib/built-in/transformations/aggregates/mean.md index 4fc978cd5a..efab724e2d 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/mean.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/mean.md @@ -3,10 +3,10 @@ title: mean() function description: The mean() function computes the mean or average of non-null records in the input table. aliases: - - /flux/v0.x/functions/transformations/aggregates/mean - - /flux/v0.x/functions/built-in/transformations/aggregates/mean/ + - /flux/v0.64/functions/transformations/aggregates/mean + - /flux/v0.64/functions/built-in/transformations/aggregates/mean/ menu: - flux_0_x: + flux_0_64: name: mean parent: Aggregates weight: 1 diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/median.md b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/median.md similarity index 88% rename from content/flux/v0.x/stdlib/built-in/transformations/aggregates/median.md rename to content/flux/v0.64/stdlib/built-in/transformations/aggregates/median.md index 13976d264d..72569ace18 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/median.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/median.md @@ -5,16 +5,16 @@ description: > or all non-null records in the input table with values that fall within the `0.5` quantile (50th percentile). aliases: - - /flux/v0.x/functions/transformations/aggregates/median - - /flux/v0.x/functions/built-in/transformations/aggregates/median/ + - /flux/v0.64/functions/transformations/aggregates/median + - /flux/v0.64/functions/built-in/transformations/aggregates/median/ menu: - flux_0_x: + flux_0_64: name: median parent: Aggregates weight: 1 --- -The `median()` function is a special application of the [`quantile()` function](/flux/v0.x/stdlib/built-in/transformations/aggregates/quantile) +The `median()` function is a special application of the [`quantile()` function](/flux/v0.64/stdlib/built-in/transformations/aggregates/quantile) that returns the median `_value` of an input table or all non-null records in the input table with values that fall within the `0.5` quantile (50th percentile) depending on the [method](#method) used. @@ -37,9 +37,9 @@ When using the `exact_selector` method, it outputs the non-null record with the value that represents the `0.5` quantile. > The `median()` function can only be used with float value types. -> It is a special application of the [`quantile()` function](/flux/v0.x/stdlib/built-in/transformations/aggregates/quantile) which +> It is a special application of the [`quantile()` function](/flux/v0.64/stdlib/built-in/transformations/aggregates/quantile) which > uses an approximation implementation that requires floats. -> You can convert your value column to a float column using the [`toFloat()` function](/flux/v0.x/stdlib/built-in/transformations/type-conversions/tofloat). +> You can convert your value column to a float column using the [`toFloat()` function](/flux/v0.64/stdlib/built-in/transformations/type-conversions/tofloat). ## Parameters diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/mode.md b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/mode.md similarity index 93% rename from content/flux/v0.x/stdlib/built-in/transformations/aggregates/mode.md rename to content/flux/v0.64/stdlib/built-in/transformations/aggregates/mode.md index 3077bc0ce9..5825396710 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/mode.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/mode.md @@ -4,12 +4,12 @@ description: > The `mode()` function computes the mode or value that occurs most often in a specified column in the input table. menu: - flux_0_x: + flux_0_64: name: mode parent: Aggregates weight: 501 aliases: - - /flux/v0.x/functions/built-in/transformations/aggregates/mode/ + - /flux/v0.64/functions/built-in/transformations/aggregates/mode/ --- The `mode()` function computes the mode or value that occurs most often in a diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/movingaverage.md b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/movingaverage.md similarity index 94% rename from content/flux/v0.x/stdlib/built-in/transformations/aggregates/movingaverage.md rename to content/flux/v0.64/stdlib/built-in/transformations/aggregates/movingaverage.md index 66484ee82e..4053aa19e9 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/movingaverage.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/movingaverage.md @@ -4,12 +4,12 @@ description: > The `movingAverage()` function calculates the mean of values grouped into `n` number of points. menu: - flux_0_x: + flux_0_64: name: movingAverage parent: Aggregates weight: 1 aliases: - - /flux/v0.x/functions/built-in/transformations/aggregates/movingaverage/ + - /flux/v0.64/functions/built-in/transformations/aggregates/movingaverage/ --- The `movingAverage()` function calculates the mean of values in the `_values` column diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/pearsonr.md b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/pearsonr.md similarity index 90% rename from content/flux/v0.x/stdlib/built-in/transformations/aggregates/pearsonr.md rename to content/flux/v0.64/stdlib/built-in/transformations/aggregates/pearsonr.md index 74db92ee97..28d36e37e5 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/pearsonr.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/pearsonr.md @@ -4,10 +4,10 @@ description: The pearsonr() function computes the Pearson R correlation coeffici between two streams by first joining the streams, then performing the covariance operation normalized to compute R. aliases: - - /flux/v0.x/functions/transformations/aggregates/pearsonr - - /flux/v0.x/functions/built-in/transformations/aggregates/pearsonr/ + - /flux/v0.64/functions/transformations/aggregates/pearsonr + - /flux/v0.64/functions/built-in/transformations/aggregates/pearsonr/ menu: - flux_0_x: + flux_0_64: name: pearsonr parent: Aggregates weight: 1 diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/quantile.md b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/quantile.md similarity index 92% rename from content/flux/v0.x/stdlib/built-in/transformations/aggregates/quantile.md rename to content/flux/v0.64/stdlib/built-in/transformations/aggregates/quantile.md index c968fb1197..dab61be156 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/quantile.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/quantile.md @@ -5,11 +5,11 @@ description: > within the specified quantile or the non-null record with the value that represents the specified quantile. aliases: - - /flux/v0.x/functions/transformations/aggregates/percentile - - /flux/v0.x/functions/built-in/transformations/aggregates/percentile - - /flux/v0.x/functions/built-in/transformations/aggregates/quantile/ + - /flux/v0.64/functions/transformations/aggregates/percentile + - /flux/v0.64/functions/built-in/transformations/aggregates/percentile + - /flux/v0.64/functions/built-in/transformations/aggregates/quantile/ menu: - flux_0_x: + flux_0_64: name: quantile parent: Aggregates weight: 1 diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/reduce.md b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/reduce.md similarity index 96% rename from content/flux/v0.x/stdlib/built-in/transformations/aggregates/reduce.md rename to content/flux/v0.64/stdlib/built-in/transformations/aggregates/reduce.md index 332a4d4e87..4b42a9442f 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/reduce.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/reduce.md @@ -4,12 +4,12 @@ description: > The `reduce()` function aggregates records in each table according to the reducer, `fn`, providing a way to create custom table aggregations. menu: - flux_0_x: + flux_0_64: name: reduce parent: Aggregates weight: 1 aliases: - - /flux/v0.x/functions/built-in/transformations/aggregates/reduce/ + - /flux/v0.64/functions/built-in/transformations/aggregates/reduce/ --- The `reduce()` function aggregates records in each table according to the reducer, @@ -39,7 +39,7 @@ _**Data type:** Function_ {{% note %}} Make sure `fn` parameter names match each specified parameter. -To learn why, see [Match parameter names](/flux/v0.x/language/data-model/#match-parameter-names). +To learn why, see [Match parameter names](/flux/v0.64/language/data-model/#match-parameter-names). {{% /note %}} ###### fn syntax diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/relativestrengthindex.md b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/relativestrengthindex.md similarity index 96% rename from content/flux/v0.x/stdlib/built-in/transformations/aggregates/relativestrengthindex.md rename to content/flux/v0.64/stdlib/built-in/transformations/aggregates/relativestrengthindex.md index 467ce0a536..2fc46d8e1a 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/relativestrengthindex.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/relativestrengthindex.md @@ -4,12 +4,12 @@ description: > The `relativeStrengthIndex()` function measures the relative speed and change of values in an input table. menu: - flux_0_x: + flux_0_64: name: relativeStrengthIndex parent: Aggregates weight: 1 aliases: - - /flux/v0.x/functions/built-in/transformations/aggregates/relativestrengthindex/ + - /flux/v0.64/functions/built-in/transformations/aggregates/relativestrengthindex/ --- The `relativeStrengthIndex()` function measures the relative speed and change of diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/skew.md b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/skew.md similarity index 82% rename from content/flux/v0.x/stdlib/built-in/transformations/aggregates/skew.md rename to content/flux/v0.64/stdlib/built-in/transformations/aggregates/skew.md index 4a636a9f94..c2442665e1 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/skew.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/skew.md @@ -2,10 +2,10 @@ title: skew() function description: The skew() function outputs the skew of non-null records as a float. aliases: - - /flux/v0.x/functions/transformations/aggregates/skew - - /flux/v0.x/functions/built-in/transformations/aggregates/skew/ + - /flux/v0.64/functions/transformations/aggregates/skew + - /flux/v0.64/functions/built-in/transformations/aggregates/skew/ menu: - flux_0_x: + flux_0_64: name: skew parent: Aggregates weight: 1 diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/spread.md b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/spread.md similarity index 89% rename from content/flux/v0.x/stdlib/built-in/transformations/aggregates/spread.md rename to content/flux/v0.64/stdlib/built-in/transformations/aggregates/spread.md index f13f653b6f..d649d16ad9 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/spread.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/spread.md @@ -3,10 +3,10 @@ title: spread() function description: The spread() function outputs the difference between the minimum and maximum values in a specified column. aliases: - - /flux/v0.x/functions/transformations/aggregates/spread - - /flux/v0.x/functions/built-in/transformations/aggregates/spread/ + - /flux/v0.64/functions/transformations/aggregates/spread + - /flux/v0.64/functions/built-in/transformations/aggregates/spread/ menu: - flux_0_x: + flux_0_64: name: spread parent: Aggregates weight: 1 diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/stddev.md b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/stddev.md similarity index 89% rename from content/flux/v0.x/stdlib/built-in/transformations/aggregates/stddev.md rename to content/flux/v0.64/stdlib/built-in/transformations/aggregates/stddev.md index 6f3eddab9b..6bcf0b8f14 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/stddev.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/stddev.md @@ -3,10 +3,10 @@ title: stddev() function description: The stddev() function computes the standard deviation of non-null records in a specified column. aliases: - - /flux/v0.x/functions/transformations/aggregates/stddev - - /flux/v0.x/functions/built-in/transformations/aggregates/stddev/ + - /flux/v0.64/functions/transformations/aggregates/stddev + - /flux/v0.64/functions/built-in/transformations/aggregates/stddev/ menu: - flux_0_x: + flux_0_64: name: stddev parent: Aggregates weight: 1 diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/sum.md b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/sum.md similarity index 86% rename from content/flux/v0.x/stdlib/built-in/transformations/aggregates/sum.md rename to content/flux/v0.64/stdlib/built-in/transformations/aggregates/sum.md index 3298b794ae..62c95656b3 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/sum.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/sum.md @@ -3,10 +3,10 @@ title: sum() function description: The sum() function computes the sum of non-null records in a specified column. aliases: - - /flux/v0.x/functions/transformations/aggregates/sum - - /flux/v0.x/functions/built-in/transformations/aggregates/sum/ + - /flux/v0.64/functions/transformations/aggregates/sum + - /flux/v0.64/functions/built-in/transformations/aggregates/sum/ menu: - flux_0_x: + flux_0_64: name: sum parent: Aggregates weight: 1 diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/timedmovingaverage.md b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/timedmovingaverage.md similarity index 94% rename from content/flux/v0.x/stdlib/built-in/transformations/aggregates/timedmovingaverage.md rename to content/flux/v0.64/stdlib/built-in/transformations/aggregates/timedmovingaverage.md index 4de7c80cd9..6a6b8e4332 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/timedmovingaverage.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/timedmovingaverage.md @@ -4,12 +4,12 @@ description: > The `timedMovingAverage()` function calculates the mean of values in a defined time range at a specified frequency. menu: - flux_0_x: + flux_0_64: name: timedMovingAverage parent: Aggregates weight: 501 aliases: - - /flux/v0.x/functions/built-in/transformations/aggregates/timedmovingaverage/ + - /flux/v0.64/functions/built-in/transformations/aggregates/timedmovingaverage/ --- The `timedMovingAverage()` function calculates the mean of values in a defined time diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/tripleema.md b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/tripleema.md similarity index 83% rename from content/flux/v0.x/stdlib/built-in/transformations/aggregates/tripleema.md rename to content/flux/v0.64/stdlib/built-in/transformations/aggregates/tripleema.md index 883d0d1566..e7b1ef1023 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/tripleema.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/tripleema.md @@ -5,19 +5,19 @@ description: > of values grouped into `n` number of points, giving more weight to recent data with less lag than `exponentialMovingAverage()` and `doubleEMA()`. menu: - flux_0_x: + flux_0_64: name: tripleEMA parent: Aggregates weight: 1 aliases: - - /flux/v0.x/functions/built-in/transformations/aggregates/tripleema/ + - /flux/v0.64/functions/built-in/transformations/aggregates/tripleema/ --- The `tripleEMA()` function calculates the exponential moving average of values in the `_value` column grouped into `n` number of points, giving more weight to recent data with less lag than -[`exponentialMovingAverage()`](/flux/v0.x/stdlib/built-in/transformations/aggregates/exponentialmovingaverage/) -and [`doubleEMA()`](/flux/v0.x/stdlib/built-in/transformations/aggregates/doubleema/). +[`exponentialMovingAverage()`](/flux/v0.64/stdlib/built-in/transformations/aggregates/exponentialmovingaverage/) +and [`doubleEMA()`](/flux/v0.64/stdlib/built-in/transformations/aggregates/doubleema/). _**Function type:** Aggregate_ @@ -32,7 +32,7 @@ tripleEMA(n: 5) - `EMA_3` is the exponential moving average of `EMA_2`. - A true triple exponential moving average requires at least requires at least `3 * n - 2` values. If not enough values exist to calculate the triple EMA, it returns a `NaN` value. -- `tripleEMA()` inherits all [exponential moving average rules](/flux/v0.x/stdlib/built-in/transformations/aggregates/exponentialmovingaverage/#exponential-moving-average-rules). +- `tripleEMA()` inherits all [exponential moving average rules](/flux/v0.64/stdlib/built-in/transformations/aggregates/exponentialmovingaverage/#exponential-moving-average-rules). ## Parameters diff --git a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/tripleexponentialderivative.md b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/tripleexponentialderivative.md similarity index 91% rename from content/flux/v0.x/stdlib/built-in/transformations/aggregates/tripleexponentialderivative.md rename to content/flux/v0.64/stdlib/built-in/transformations/aggregates/tripleexponentialderivative.md index 300a7d60a2..13926ae3d8 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/aggregates/tripleexponentialderivative.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/aggregates/tripleexponentialderivative.md @@ -4,12 +4,12 @@ description: > The `tripleExponentialDerivative()` function calculates a triple exponential derivative (TRIX) of input tables using `n` points. menu: - flux_0_x: + flux_0_64: name: tripleExponentialDerivative parent: Aggregates weight: 1 aliases: - - /flux/v0.x/functions/built-in/transformations/aggregates/tripleexponentialderivative/ + - /flux/v0.64/functions/built-in/transformations/aggregates/tripleexponentialderivative/ --- The `tripleExponentialDerivative()` function calculates a triple exponential @@ -40,7 +40,7 @@ a negative value indicates decreasing momentum. - `EMA_3 = EMA(EMA(EMA(data)))` - If there are not enough values to calculate a triple exponential derivative, the output `_value` is `NaN`; all other columns are the same as the _last_ record of the input table. -- The function behaves the same way as the [`exponentialMovingAverage()`](/flux/v0.x/stdlib/built-in/transformations/aggregates/exponentialmovingaverage/) function: +- The function behaves the same way as the [`exponentialMovingAverage()`](/flux/v0.64/stdlib/built-in/transformations/aggregates/exponentialmovingaverage/) function: - The function does not include `null` values in the calculation. - The function acts only on the `_value` column. diff --git a/content/flux/v0.x/stdlib/built-in/transformations/columns.md b/content/flux/v0.64/stdlib/built-in/transformations/columns.md similarity index 93% rename from content/flux/v0.x/stdlib/built-in/transformations/columns.md rename to content/flux/v0.64/stdlib/built-in/transformations/columns.md index 632c6c89fa..977a4c224e 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/columns.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/columns.md @@ -5,10 +5,10 @@ description: > each input table, it outputs a table with the same group key columns, plus a new column containing the labels of the input table''s columns. aliases: - - /flux/v0.x/functions/transformations/columns - - /flux/v0.x/functions/built-in/transformations/columns/ + - /flux/v0.64/functions/transformations/columns + - /flux/v0.64/functions/built-in/transformations/columns/ menu: - flux_0_x: + flux_0_64: name: columns parent: Transformations weight: 1 diff --git a/content/flux/v0.x/stdlib/built-in/transformations/cumulativesum.md b/content/flux/v0.64/stdlib/built-in/transformations/cumulativesum.md similarity index 87% rename from content/flux/v0.x/stdlib/built-in/transformations/cumulativesum.md rename to content/flux/v0.64/stdlib/built-in/transformations/cumulativesum.md index bbb1142d05..71f9a3610e 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/cumulativesum.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/cumulativesum.md @@ -3,10 +3,10 @@ title: cumulativeSum() function description: The cumulativeSum() function computes a running sum for non-null records in the table. aliases: - - /flux/v0.x/functions/transformations/cumulativesum - - /flux/v0.x/functions/built-in/transformations/cumulativesum/ + - /flux/v0.64/functions/transformations/cumulativesum + - /flux/v0.64/functions/built-in/transformations/cumulativesum/ menu: - flux_0_x: + flux_0_64: name: cumulativeSum parent: Transformations weight: 1 diff --git a/content/flux/v0.x/stdlib/built-in/transformations/drop.md b/content/flux/v0.64/stdlib/built-in/transformations/drop.md similarity index 87% rename from content/flux/v0.x/stdlib/built-in/transformations/drop.md rename to content/flux/v0.64/stdlib/built-in/transformations/drop.md index 7bd0450966..ca90e22d20 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/drop.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/drop.md @@ -2,10 +2,10 @@ title: drop() function description: The drop() function removes specified columns from a table. aliases: - - /flux/v0.x/functions/transformations/drop - - /flux/v0.x/functions/built-in/transformations/drop/ + - /flux/v0.64/functions/transformations/drop + - /flux/v0.64/functions/built-in/transformations/drop/ menu: - flux_0_x: + flux_0_64: name: drop parent: Transformations weight: 1 @@ -44,7 +44,7 @@ _**Data type:** Function_ {{% note %}} Make sure `fn` parameter names match each specified parameter. -To learn why, see [Match parameter names](/flux/v0.x/language/data-model/#match-parameter-names). +To learn why, see [Match parameter names](/flux/v0.64/language/data-model/#match-parameter-names). {{% /note %}} ## Examples diff --git a/content/flux/v0.x/stdlib/built-in/transformations/duplicate.md b/content/flux/v0.64/stdlib/built-in/transformations/duplicate.md similarity index 88% rename from content/flux/v0.x/stdlib/built-in/transformations/duplicate.md rename to content/flux/v0.64/stdlib/built-in/transformations/duplicate.md index 04af5d8fb5..d975b753ff 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/duplicate.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/duplicate.md @@ -2,10 +2,10 @@ title: duplicate() function description: The duplicate() function duplicates a specified column in a table. aliases: - - /flux/v0.x/functions/transformations/duplicate - - /flux/v0.x/functions/built-in/transformations/duplicate/ + - /flux/v0.64/functions/transformations/duplicate + - /flux/v0.64/functions/built-in/transformations/duplicate/ menu: - flux_0_x: + flux_0_64: name: duplicate parent: Transformations weight: 1 diff --git a/content/flux/v0.x/stdlib/built-in/transformations/elapsed.md b/content/flux/v0.64/stdlib/built-in/transformations/elapsed.md similarity index 93% rename from content/flux/v0.x/stdlib/built-in/transformations/elapsed.md rename to content/flux/v0.64/stdlib/built-in/transformations/elapsed.md index 7483d3c168..02c249fa1d 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/elapsed.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/elapsed.md @@ -2,12 +2,12 @@ title: elapsed() function description: The `elapsed()` function returns the time between subsequent records. menu: - flux_0_x: + flux_0_64: name: elapsed parent: Transformations weight: 401 aliases: - - /flux/v0.x/functions/built-in/transformations/elapsed/ + - /flux/v0.64/functions/built-in/transformations/elapsed/ --- The `elapsed()` function returns the time between subsequent records. diff --git a/content/flux/v0.x/stdlib/built-in/transformations/fill.md b/content/flux/v0.64/stdlib/built-in/transformations/fill.md similarity index 93% rename from content/flux/v0.x/stdlib/built-in/transformations/fill.md rename to content/flux/v0.64/stdlib/built-in/transformations/fill.md index f4a955b674..3ff083bb70 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/fill.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/fill.md @@ -3,10 +3,10 @@ title: fill() function description: The fill() function filters data based on conditions defined in a predicate function (fn). aliases: - - /flux/v0.x/functions/transformations/fill - - /flux/v0.x/functions/built-in/transformations/fill/ + - /flux/v0.64/functions/transformations/fill + - /flux/v0.64/functions/built-in/transformations/fill/ menu: - flux_0_x: + flux_0_64: name: fill parent: Transformations weight: 1 diff --git a/content/flux/v0.x/stdlib/built-in/transformations/filter.md b/content/flux/v0.64/stdlib/built-in/transformations/filter.md similarity index 93% rename from content/flux/v0.x/stdlib/built-in/transformations/filter.md rename to content/flux/v0.64/stdlib/built-in/transformations/filter.md index 385a4ea71f..9ab12e0e47 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/filter.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/filter.md @@ -3,10 +3,10 @@ title: filter() function description: The filter() function filters data based on conditions defined in a predicate function (fn). aliases: - - /flux/v0.x/functions/transformations/filter - - /flux/v0.x/functions/built-in/transformations/filter/ + - /flux/v0.64/functions/transformations/filter + - /flux/v0.64/functions/built-in/transformations/filter/ menu: - flux_0_x: + flux_0_64: name: filter parent: Transformations weight: 1 @@ -39,7 +39,7 @@ _**Data type:** Function_ {{% note %}} Make sure `fn` parameter names match each specified parameter. -To learn why, see [Match parameter names](/flux/v0.x/language/data-model/#match-parameter-names). +To learn why, see [Match parameter names](/flux/v0.64/language/data-model/#match-parameter-names). {{% /note %}} ### onEmpty diff --git a/content/flux/v0.x/stdlib/built-in/transformations/group.md b/content/flux/v0.64/stdlib/built-in/transformations/group.md similarity index 93% rename from content/flux/v0.x/stdlib/built-in/transformations/group.md rename to content/flux/v0.64/stdlib/built-in/transformations/group.md index ce6d38db20..e2c3f48058 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/group.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/group.md @@ -3,10 +3,10 @@ title: group() function description: The group() function groups records based on their values for specific columns. aliases: - - /flux/v0.x/functions/transformations/group - - /flux/v0.x/functions/built-in/transformations/group/ + - /flux/v0.64/functions/transformations/group + - /flux/v0.64/functions/built-in/transformations/group/ menu: - flux_0_x: + flux_0_64: name: group parent: Transformations weight: 1 diff --git a/content/flux/v0.x/stdlib/built-in/transformations/histogram.md b/content/flux/v0.64/stdlib/built-in/transformations/histogram.md similarity index 89% rename from content/flux/v0.x/stdlib/built-in/transformations/histogram.md rename to content/flux/v0.64/stdlib/built-in/transformations/histogram.md index 661c816922..f5645f3d42 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/histogram.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/histogram.md @@ -3,10 +3,10 @@ title: histogram() function description: The histogram() function approximates the cumulative distribution of a dataset by counting data frequencies for a list of bins. aliases: - - /flux/v0.x/functions/transformations/histogram - - /flux/v0.x/functions/built-in/transformations/histogram/ + - /flux/v0.64/functions/transformations/histogram + - /flux/v0.64/functions/built-in/transformations/histogram/ menu: - flux_0_x: + flux_0_64: name: histogram parent: Transformations weight: 1 @@ -58,8 +58,8 @@ _**Data type:** Array of floats_ #### Bin helper functions The following helper functions can be used to generated bins. -[linearBins()](/flux/v0.x/stdlib/built-in/misc/linearbins) -[logarithmicBins()](/flux/v0.x/stdlib/built-in/misc/logarithmicbins) +[linearBins()](/flux/v0.64/stdlib/built-in/misc/linearbins) +[logarithmicBins()](/flux/v0.64/stdlib/built-in/misc/logarithmicbins) ### normalize When `true`, will convert the counts into frequency values between 0 and 1. diff --git a/content/flux/v0.x/stdlib/built-in/transformations/hourselection.md b/content/flux/v0.64/stdlib/built-in/transformations/hourselection.md similarity index 92% rename from content/flux/v0.x/stdlib/built-in/transformations/hourselection.md rename to content/flux/v0.64/stdlib/built-in/transformations/hourselection.md index 425d8064b2..1b1d5c73a8 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/hourselection.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/hourselection.md @@ -4,12 +4,12 @@ description: > The `hourSelection()` function retains all rows with time values in a specified hour range. Hours are specified in military time. menu: - flux_0_x: + flux_0_64: name: hourSelection parent: Transformations weight: 1 aliases: - - /flux/v0.x/functions/built-in/transformations/hourselection/ + - /flux/v0.64/functions/built-in/transformations/hourselection/ --- The `hourSelection()` function retains all rows with time values in a specified hour range. diff --git a/content/flux/v0.x/stdlib/built-in/transformations/influxfieldsascols.md b/content/flux/v0.64/stdlib/built-in/transformations/influxfieldsascols.md similarity index 83% rename from content/flux/v0.x/stdlib/built-in/transformations/influxfieldsascols.md rename to content/flux/v0.64/stdlib/built-in/transformations/influxfieldsascols.md index 15c13694d2..bffcde0539 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/influxfieldsascols.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/influxfieldsascols.md @@ -3,11 +3,11 @@ title: influxFieldsAsCols() function description: The influxFieldsAsCols() function is pivots a table and automatically aligns fields within each input table that have the same timestamp. aliases: - - /flux/v0.x/functions/inputs/fromrows - - /flux/v0.x/functions/transformations/influxfieldsascols - - /flux/v0.x/functions/built-in/transformations/influxfieldsascols/ + - /flux/v0.64/functions/inputs/fromrows + - /flux/v0.64/functions/transformations/influxfieldsascols + - /flux/v0.64/functions/built-in/transformations/influxfieldsascols/ menu: - flux_0_x: + flux_0_64: name: influxFieldsAsCols parent: Transformations weight: 1 diff --git a/content/flux/v0.x/stdlib/built-in/transformations/join.md b/content/flux/v0.64/stdlib/built-in/transformations/join.md similarity index 94% rename from content/flux/v0.x/stdlib/built-in/transformations/join.md rename to content/flux/v0.64/stdlib/built-in/transformations/join.md index e56a0f6ee0..c47165c782 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/join.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/join.md @@ -3,10 +3,10 @@ title: join() function description: The join() function merges two or more input streams whose values are equal on a set of common columns into a single output stream. aliases: - - /flux/v0.x/functions/transformations/join - - /flux/v0.x/functions/built-in/transformations/join/ + - /flux/v0.64/functions/transformations/join + - /flux/v0.64/functions/built-in/transformations/join/ menu: - flux_0_x: + flux_0_64: name: join parent: Transformations weight: 1 @@ -142,4 +142,4 @@ join( Output rows also contain the differing values from each of the joined streams. `union()` does not modify data in rows, but unifies separate streams of tables into a single stream of tables and groups rows of data based on existing -[group keys](/flux/v0.x/introduction/getting-started/#group-keys). +[group keys](/flux/v0.64/introduction/getting-started/#group-keys). diff --git a/content/flux/v0.x/stdlib/built-in/transformations/keep.md b/content/flux/v0.64/stdlib/built-in/transformations/keep.md similarity index 82% rename from content/flux/v0.x/stdlib/built-in/transformations/keep.md rename to content/flux/v0.64/stdlib/built-in/transformations/keep.md index bb1fd47efa..e78f6d2824 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/keep.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/keep.md @@ -2,10 +2,10 @@ title: keep() function description: The keep() function returns a table containing only the specified columns. aliases: - - /flux/v0.x/functions/transformations/keep - - /flux/v0.x/functions/built-in/transformations/keep/ + - /flux/v0.64/functions/transformations/keep + - /flux/v0.64/functions/built-in/transformations/keep/ menu: - flux_0_x: + flux_0_64: name: keep parent: Transformations weight: 1 @@ -13,7 +13,7 @@ menu: The `keep()` function returns a table containing only the specified columns, ignoring all others. Only columns in the group key that are also specified in the `keep()` function will be kept in the resulting group key. -_It is the inverse of [`drop`](/flux/v0.x/stdlib/built-in/transformations/drop)._ +_It is the inverse of [`drop`](/flux/v0.64/stdlib/built-in/transformations/drop)._ _**Function type:** Transformation_ _**Output data type:** Object_ @@ -43,7 +43,7 @@ _**Data type:** Function_ {{% note %}} Make sure `fn` parameter names match each specified parameter. -To learn why, see [Match parameter names](/flux/v0.x/language/data-model/#match-parameter-names). +To learn why, see [Match parameter names](/flux/v0.64/language/data-model/#match-parameter-names). {{% /note %}} ## Examples diff --git a/content/flux/v0.x/stdlib/built-in/transformations/keys.md b/content/flux/v0.64/stdlib/built-in/transformations/keys.md similarity index 93% rename from content/flux/v0.x/stdlib/built-in/transformations/keys.md rename to content/flux/v0.64/stdlib/built-in/transformations/keys.md index 55fc3e2c4b..0887d40ed6 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/keys.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/keys.md @@ -5,10 +5,10 @@ description: > input table, it outputs a table with the same group key columns, plus a _value column containing the labels of the input table''s group key. aliases: - - /flux/v0.x/functions/transformations/keys - - /flux/v0.x/functions/built-in/transformations/keys/ + - /flux/v0.64/functions/transformations/keys + - /flux/v0.64/functions/built-in/transformations/keys/ menu: - flux_0_x: + flux_0_64: name: keys parent: Transformations weight: 1 diff --git a/content/flux/v0.x/stdlib/built-in/transformations/keyvalues.md b/content/flux/v0.64/stdlib/built-in/transformations/keyvalues.md similarity index 91% rename from content/flux/v0.x/stdlib/built-in/transformations/keyvalues.md rename to content/flux/v0.64/stdlib/built-in/transformations/keyvalues.md index e3b56d4c9f..ead67b5058 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/keyvalues.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/keyvalues.md @@ -4,10 +4,10 @@ description: The keyValues() function returns a table with the input table's gro key plus two columns, _key and _value, that correspond to unique column + value pairs from the input table. aliases: - - /flux/v0.x/functions/transformations/keyvalues - - /flux/v0.x/functions/built-in/transformations/keyvalues/ + - /flux/v0.64/functions/transformations/keyvalues + - /flux/v0.64/functions/built-in/transformations/keyvalues/ menu: - flux_0_x: + flux_0_64: name: keyValues parent: Transformations weight: 1 @@ -46,7 +46,7 @@ _**Data type:** Function_ {{% note %}} Make sure `fn` parameter names match each specified parameter. -To learn why, see [Match parameter names](/flux/v0.x/language/data-model/#match-parameter-names). +To learn why, see [Match parameter names](/flux/v0.64/language/data-model/#match-parameter-names). {{% /note %}} ## Additional requirements diff --git a/content/flux/v0.x/stdlib/built-in/transformations/limit.md b/content/flux/v0.64/stdlib/built-in/transformations/limit.md similarity index 90% rename from content/flux/v0.x/stdlib/built-in/transformations/limit.md rename to content/flux/v0.64/stdlib/built-in/transformations/limit.md index dc6151197c..4321bd49e2 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/limit.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/limit.md @@ -2,10 +2,10 @@ title: limit() function description: The `limit()` function limits each output table to the first `n` records. aliases: - - /flux/v0.x/functions/transformations/limit - - /flux/v0.x/functions/built-in/transformations/limit/ + - /flux/v0.64/functions/transformations/limit + - /flux/v0.64/functions/built-in/transformations/limit/ menu: - flux_0_x: + flux_0_64: name: limit parent: Transformations weight: 1 diff --git a/content/flux/v0.x/stdlib/built-in/transformations/map.md b/content/flux/v0.64/stdlib/built-in/transformations/map.md similarity index 92% rename from content/flux/v0.x/stdlib/built-in/transformations/map.md rename to content/flux/v0.64/stdlib/built-in/transformations/map.md index 737279d4a2..043b450435 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/map.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/map.md @@ -2,10 +2,10 @@ title: map() function description: The map() function applies a function to each record in the input tables. aliases: - - /flux/v0.x/functions/transformations/map - - /flux/v0.x/functions/built-in/transformations/map/ + - /flux/v0.64/functions/transformations/map + - /flux/v0.64/functions/built-in/transformations/map/ menu: - flux_0_x: + flux_0_64: name: map parent: Transformations weight: 1 @@ -37,7 +37,7 @@ _**Data type:** Function_ {{% note %}} Make sure `fn` parameter names match each specified parameter. -To learn why, see [Match parameter names](/flux/v0.x/language/data-model/#match-parameter-names). +To learn why, see [Match parameter names](/flux/v0.64/language/data-model/#match-parameter-names). {{% /note %}} ## Important notes diff --git a/content/flux/v0.x/stdlib/built-in/transformations/pivot.md b/content/flux/v0.64/stdlib/built-in/transformations/pivot.md similarity index 98% rename from content/flux/v0.x/stdlib/built-in/transformations/pivot.md rename to content/flux/v0.64/stdlib/built-in/transformations/pivot.md index 4de6a20d7d..afc38b7a0f 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/pivot.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/pivot.md @@ -3,10 +3,10 @@ title: pivot() function description: The pivot() function collects values stored vertically (column-wise) in a table and aligns them horizontally (row-wise) into logical sets. aliases: - - /flux/v0.x/functions/transformations/pivot - - /flux/v0.x/functions/built-in/transformations/pivot/ + - /flux/v0.64/functions/transformations/pivot + - /flux/v0.64/functions/built-in/transformations/pivot/ menu: - flux_0_x: + flux_0_64: name: pivot parent: Transformations weight: 1 diff --git a/content/flux/v0.x/stdlib/built-in/transformations/range.md b/content/flux/v0.64/stdlib/built-in/transformations/range.md similarity index 89% rename from content/flux/v0.x/stdlib/built-in/transformations/range.md rename to content/flux/v0.64/stdlib/built-in/transformations/range.md index c2accd1592..e9444cb595 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/range.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/range.md @@ -2,10 +2,10 @@ title: range() function description: The range() function filters records based on time bounds. aliases: - - /flux/v0.x/functions/transformations/range - - /flux/v0.x/functions/built-in/transformations/range/ + - /flux/v0.64/functions/transformations/range + - /flux/v0.64/functions/built-in/transformations/range/ menu: - flux_0_x: + flux_0_64: name: range parent: Transformations weight: 1 @@ -45,7 +45,7 @@ Defaults to `now()`. _**Data type:** Duration | Time_ -> Time values in Flux must be in [RFC3339 format](/flux/v0.x/language/types#timestamp-format). +> Time values in Flux must be in [RFC3339 format](/flux/v0.64/language/types#timestamp-format). ## Examples diff --git a/content/flux/v0.x/stdlib/built-in/transformations/rename.md b/content/flux/v0.64/stdlib/built-in/transformations/rename.md similarity index 85% rename from content/flux/v0.x/stdlib/built-in/transformations/rename.md rename to content/flux/v0.64/stdlib/built-in/transformations/rename.md index 204c8bb4fd..aaa4565ed2 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/rename.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/rename.md @@ -2,10 +2,10 @@ title: rename() function description: The rename() function renames specified columns in a table. aliases: - - /flux/v0.x/functions/transformations/rename - - /flux/v0.x/functions/built-in/transformations/rename/ + - /flux/v0.64/functions/transformations/rename + - /flux/v0.64/functions/built-in/transformations/rename/ menu: - flux_0_x: + flux_0_64: name: rename parent: Transformations weight: 1 @@ -45,7 +45,7 @@ _**Data type:** Function_ {{% note %}} Make sure `fn` parameter names match each specified parameter. -To learn why, see [Match parameter names](/flux/v0.x/language/data-model/#match-parameter-names). +To learn why, see [Match parameter names](/flux/v0.64/language/data-model/#match-parameter-names). {{% /note %}} ## Examples diff --git a/content/flux/v0.x/stdlib/built-in/transformations/selectors/_index.md b/content/flux/v0.64/stdlib/built-in/transformations/selectors/_index.md similarity index 68% rename from content/flux/v0.x/stdlib/built-in/transformations/selectors/_index.md rename to content/flux/v0.64/stdlib/built-in/transformations/selectors/_index.md index bf4e89057e..a5719648ab 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/selectors/_index.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/selectors/_index.md @@ -3,10 +3,10 @@ title: Flux selector functions description: Flux selector functions return one or more records based on function logic. aliases: - - /flux/v0.x/functions/transformations/selectors - - /flux/v0.x/functions/built-in/transformations/selectors/ + - /flux/v0.64/functions/transformations/selectors + - /flux/v0.64/functions/built-in/transformations/selectors/ menu: - flux_0_x: + flux_0_64: parent: Transformations name: Selectors weight: 1 @@ -24,5 +24,5 @@ The following selector functions are available: The following functions can be used as both selectors or aggregates, but they are categorized as aggregate functions in this documentation: -- [median()](/flux/v0.x/stdlib/built-in/transformations/aggregates/median) -- [quantile()](/flux/v0.x/stdlib/built-in/transformations/aggregates/quantile) +- [median()](/flux/v0.64/stdlib/built-in/transformations/aggregates/median) +- [quantile()](/flux/v0.64/stdlib/built-in/transformations/aggregates/quantile) diff --git a/content/flux/v0.x/stdlib/built-in/transformations/selectors/bottom.md b/content/flux/v0.64/stdlib/built-in/transformations/selectors/bottom.md similarity index 90% rename from content/flux/v0.x/stdlib/built-in/transformations/selectors/bottom.md rename to content/flux/v0.64/stdlib/built-in/transformations/selectors/bottom.md index e1ecf6017a..154ee259e4 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/selectors/bottom.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/selectors/bottom.md @@ -3,10 +3,10 @@ title: bottom() function description: The bottom() function sorts a table by columns and keeps only the bottom n records. aliases: - - /flux/v0.x/functions/transformations/selectors/bottom - - /flux/v0.x/functions/built-in/transformations/selectors/bottom/ + - /flux/v0.64/functions/transformations/selectors/bottom + - /flux/v0.64/functions/built-in/transformations/selectors/bottom/ menu: - flux_0_x: + flux_0_64: name: bottom parent: Selectors weight: 1 diff --git a/content/flux/v0.x/stdlib/built-in/transformations/selectors/distinct.md b/content/flux/v0.64/stdlib/built-in/transformations/selectors/distinct.md similarity index 84% rename from content/flux/v0.x/stdlib/built-in/transformations/selectors/distinct.md rename to content/flux/v0.64/stdlib/built-in/transformations/selectors/distinct.md index e5b7ce6656..daf545c6ac 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/selectors/distinct.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/selectors/distinct.md @@ -2,10 +2,10 @@ title: distinct() function description: The distinct() function returns the unique values for a given column. aliases: - - /flux/v0.x/functions/transformations/selectors/distinct - - /flux/v0.x/functions/built-in/transformations/selectors/distinct/ + - /flux/v0.64/functions/transformations/selectors/distinct + - /flux/v0.64/functions/built-in/transformations/selectors/distinct/ menu: - flux_0_x: + flux_0_64: name: distinct parent: Selectors weight: 1 diff --git a/content/flux/v0.x/stdlib/built-in/transformations/selectors/first.md b/content/flux/v0.64/stdlib/built-in/transformations/selectors/first.md similarity index 82% rename from content/flux/v0.x/stdlib/built-in/transformations/selectors/first.md rename to content/flux/v0.64/stdlib/built-in/transformations/selectors/first.md index 8f63f88cdb..0b344ab538 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/selectors/first.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/selectors/first.md @@ -3,10 +3,10 @@ title: first() function description: The first() function selects the first non-null record from an input table. aliases: - - /flux/v0.x/functions/transformations/selectors/first - - /flux/v0.x/functions/built-in/transformations/selectors/first/ + - /flux/v0.64/functions/transformations/selectors/first + - /flux/v0.64/functions/built-in/transformations/selectors/first/ menu: - flux_0_x: + flux_0_64: name: first parent: Selectors weight: 1 diff --git a/content/flux/v0.x/stdlib/built-in/transformations/selectors/highestaverage.md b/content/flux/v0.64/stdlib/built-in/transformations/selectors/highestaverage.md similarity index 92% rename from content/flux/v0.x/stdlib/built-in/transformations/selectors/highestaverage.md rename to content/flux/v0.64/stdlib/built-in/transformations/selectors/highestaverage.md index 9081aed4ab..8e9e89c4a5 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/selectors/highestaverage.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/selectors/highestaverage.md @@ -3,10 +3,10 @@ title: highestAverage() function description: The highestAverage() function returns the top 'n' records from all groups using the average of each group. aliases: - - /flux/v0.x/functions/transformations/selectors/highestaverage - - /flux/v0.x/functions/built-in/transformations/selectors/highestaverage/ + - /flux/v0.64/functions/transformations/selectors/highestaverage + - /flux/v0.64/functions/built-in/transformations/selectors/highestaverage/ menu: - flux_0_x: + flux_0_64: name: highestAverage parent: Selectors weight: 1 diff --git a/content/flux/v0.x/stdlib/built-in/transformations/selectors/highestcurrent.md b/content/flux/v0.64/stdlib/built-in/transformations/selectors/highestcurrent.md similarity index 92% rename from content/flux/v0.x/stdlib/built-in/transformations/selectors/highestcurrent.md rename to content/flux/v0.64/stdlib/built-in/transformations/selectors/highestcurrent.md index 6394b95b91..db9eea6103 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/selectors/highestcurrent.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/selectors/highestcurrent.md @@ -3,10 +3,10 @@ title: highestCurrent() function description: The highestCurrent() function returns the top 'n' records from all groups using the last value of each group. aliases: - - /flux/v0.x/functions/transformations/selectors/highestcurrent - - /flux/v0.x/functions/built-in/transformations/selectors/highestcurrent/ + - /flux/v0.64/functions/transformations/selectors/highestcurrent + - /flux/v0.64/functions/built-in/transformations/selectors/highestcurrent/ menu: - flux_0_x: + flux_0_64: name: highestCurrent parent: Selectors weight: 1 diff --git a/content/flux/v0.x/stdlib/built-in/transformations/selectors/highestmax.md b/content/flux/v0.64/stdlib/built-in/transformations/selectors/highestmax.md similarity index 92% rename from content/flux/v0.x/stdlib/built-in/transformations/selectors/highestmax.md rename to content/flux/v0.64/stdlib/built-in/transformations/selectors/highestmax.md index fa3dd40d19..e2568a6ef2 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/selectors/highestmax.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/selectors/highestmax.md @@ -3,10 +3,10 @@ title: highestMax() function description: The highestMax() function returns the top 'n' records from all groups using the maximum of each group. aliases: - - /flux/v0.x/functions/transformations/selectors/highestmax - - /flux/v0.x/functions/built-in/transformations/selectors/highestmax/ + - /flux/v0.64/functions/transformations/selectors/highestmax + - /flux/v0.64/functions/built-in/transformations/selectors/highestmax/ menu: - flux_0_x: + flux_0_64: name: highestMax parent: Selectors weight: 1 diff --git a/content/flux/v0.x/stdlib/built-in/transformations/selectors/last.md b/content/flux/v0.64/stdlib/built-in/transformations/selectors/last.md similarity index 82% rename from content/flux/v0.x/stdlib/built-in/transformations/selectors/last.md rename to content/flux/v0.64/stdlib/built-in/transformations/selectors/last.md index 29252dd119..968b0663f6 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/selectors/last.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/selectors/last.md @@ -2,10 +2,10 @@ title: last() function description: The last() function selects the last non-null record from an input table. aliases: - - /flux/v0.x/functions/transformations/selectors/last - - /flux/v0.x/functions/built-in/transformations/selectors/last/ + - /flux/v0.64/functions/transformations/selectors/last + - /flux/v0.64/functions/built-in/transformations/selectors/last/ menu: - flux_0_x: + flux_0_64: name: last parent: Selectors weight: 1 diff --git a/content/flux/v0.x/stdlib/built-in/transformations/selectors/lowestaverage.md b/content/flux/v0.64/stdlib/built-in/transformations/selectors/lowestaverage.md similarity index 92% rename from content/flux/v0.x/stdlib/built-in/transformations/selectors/lowestaverage.md rename to content/flux/v0.64/stdlib/built-in/transformations/selectors/lowestaverage.md index 683ecbeb05..68cf217687 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/selectors/lowestaverage.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/selectors/lowestaverage.md @@ -3,10 +3,10 @@ title: lowestAverage() function description: The lowestAverage() function returns the bottom 'n' records from all groups using the average of each group. aliases: - - /flux/v0.x/functions/transformations/selectors/lowestaverage - - /flux/v0.x/functions/built-in/transformations/selectors/lowestaverage/ + - /flux/v0.64/functions/transformations/selectors/lowestaverage + - /flux/v0.64/functions/built-in/transformations/selectors/lowestaverage/ menu: - flux_0_x: + flux_0_64: name: lowestAverage parent: Selectors weight: 1 diff --git a/content/flux/v0.x/stdlib/built-in/transformations/selectors/lowestcurrent.md b/content/flux/v0.64/stdlib/built-in/transformations/selectors/lowestcurrent.md similarity index 92% rename from content/flux/v0.x/stdlib/built-in/transformations/selectors/lowestcurrent.md rename to content/flux/v0.64/stdlib/built-in/transformations/selectors/lowestcurrent.md index 7958196908..83fba8c9d4 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/selectors/lowestcurrent.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/selectors/lowestcurrent.md @@ -3,10 +3,10 @@ title: lowestCurrent() function description: The lowestCurrent() function returns the bottom 'n' records from all groups using the last value of each group. aliases: - - /flux/v0.x/functions/transformations/selectors/lowestcurrent - - /flux/v0.x/functions/built-in/transformations/selectors/lowestcurrent/ + - /flux/v0.64/functions/transformations/selectors/lowestcurrent + - /flux/v0.64/functions/built-in/transformations/selectors/lowestcurrent/ menu: - flux_0_x: + flux_0_64: name: lowestCurrent parent: Selectors weight: 1 diff --git a/content/flux/v0.x/stdlib/built-in/transformations/selectors/lowestmin.md b/content/flux/v0.64/stdlib/built-in/transformations/selectors/lowestmin.md similarity index 93% rename from content/flux/v0.x/stdlib/built-in/transformations/selectors/lowestmin.md rename to content/flux/v0.64/stdlib/built-in/transformations/selectors/lowestmin.md index 8f39d16342..326ba48c17 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/selectors/lowestmin.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/selectors/lowestmin.md @@ -3,10 +3,10 @@ title: lowestMin() function description: The lowestMin() function returns the bottom 'n' records from all groups using the minimum of each group. aliases: - - /flux/v0.x/functions/transformations/selectors/lowestmin - - /flux/v0.x/functions/built-in/transformations/selectors/lowestmin/ + - /flux/v0.64/functions/transformations/selectors/lowestmin + - /flux/v0.64/functions/built-in/transformations/selectors/lowestmin/ menu: - flux_0_x: + flux_0_64: name: lowestMin parent: Selectors weight: 1 diff --git a/content/flux/v0.x/stdlib/built-in/transformations/selectors/max.md b/content/flux/v0.64/stdlib/built-in/transformations/selectors/max.md similarity index 85% rename from content/flux/v0.x/stdlib/built-in/transformations/selectors/max.md rename to content/flux/v0.64/stdlib/built-in/transformations/selectors/max.md index 1915317ea6..f75c155335 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/selectors/max.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/selectors/max.md @@ -3,10 +3,10 @@ title: max() function description: The max() function selects record with the highest _value from the input table. aliases: - - /flux/v0.x/functions/transformations/selectors/max - - /flux/v0.x/functions/built-in/transformations/selectors/max/ + - /flux/v0.64/functions/transformations/selectors/max + - /flux/v0.64/functions/built-in/transformations/selectors/max/ menu: - flux_0_x: + flux_0_64: name: max parent: Selectors weight: 1 diff --git a/content/flux/v0.x/stdlib/built-in/transformations/selectors/min.md b/content/flux/v0.64/stdlib/built-in/transformations/selectors/min.md similarity index 85% rename from content/flux/v0.x/stdlib/built-in/transformations/selectors/min.md rename to content/flux/v0.64/stdlib/built-in/transformations/selectors/min.md index 0401c4349a..ab6a540ad0 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/selectors/min.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/selectors/min.md @@ -3,10 +3,10 @@ title: min() function description: The min() function selects record with the lowest _value from the input table. aliases: - - /flux/v0.x/functions/transformations/selectors/min - - /flux/v0.x/functions/built-in/transformations/selectors/min/ + - /flux/v0.64/functions/transformations/selectors/min + - /flux/v0.64/functions/built-in/transformations/selectors/min/ menu: - flux_0_x: + flux_0_64: name: min parent: Selectors weight: 1 diff --git a/content/flux/v0.x/stdlib/built-in/transformations/selectors/sample.md b/content/flux/v0.64/stdlib/built-in/transformations/selectors/sample.md similarity index 87% rename from content/flux/v0.x/stdlib/built-in/transformations/selectors/sample.md rename to content/flux/v0.64/stdlib/built-in/transformations/selectors/sample.md index 7c05c43392..215f48a64a 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/selectors/sample.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/selectors/sample.md @@ -3,10 +3,10 @@ title: sample() function description: The sample() function selects a subset of the records from the input table. aliases: - - /flux/v0.x/functions/transformations/selectors/sample - - /flux/v0.x/functions/built-in/transformations/selectors/sample/ + - /flux/v0.64/functions/transformations/selectors/sample + - /flux/v0.64/functions/built-in/transformations/selectors/sample/ menu: - flux_0_x: + flux_0_64: name: sample parent: Selectors weight: 1 diff --git a/content/flux/v0.x/stdlib/built-in/transformations/selectors/top.md b/content/flux/v0.64/stdlib/built-in/transformations/selectors/top.md similarity index 89% rename from content/flux/v0.x/stdlib/built-in/transformations/selectors/top.md rename to content/flux/v0.64/stdlib/built-in/transformations/selectors/top.md index b344635134..a9b9806008 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/selectors/top.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/selectors/top.md @@ -3,10 +3,10 @@ title: top() function description: The top() function sorts a table by columns and keeps only the top n records. aliases: - - /flux/v0.x/functions/transformations/selectors/top - - /flux/v0.x/functions/built-in/transformations/selectors/top/ + - /flux/v0.64/functions/transformations/selectors/top + - /flux/v0.64/functions/built-in/transformations/selectors/top/ menu: - flux_0_x: + flux_0_64: name: top parent: Selectors weight: 1 diff --git a/content/flux/v0.x/stdlib/built-in/transformations/selectors/unique.md b/content/flux/v0.64/stdlib/built-in/transformations/selectors/unique.md similarity index 82% rename from content/flux/v0.x/stdlib/built-in/transformations/selectors/unique.md rename to content/flux/v0.64/stdlib/built-in/transformations/selectors/unique.md index 83e00efe4a..5d810b7318 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/selectors/unique.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/selectors/unique.md @@ -3,10 +3,10 @@ title: unique() function description: The unique() function returns all records containing unique values in a specified column. aliases: - - /flux/v0.x/functions/transformations/selectors/unique - - /flux/v0.x/functions/built-in/transformations/selectors/unique/ + - /flux/v0.64/functions/transformations/selectors/unique + - /flux/v0.64/functions/built-in/transformations/selectors/unique/ menu: - flux_0_x: + flux_0_64: name: unique parent: Selectors weight: 1 diff --git a/content/flux/v0.x/stdlib/built-in/transformations/set.md b/content/flux/v0.64/stdlib/built-in/transformations/set.md similarity index 87% rename from content/flux/v0.x/stdlib/built-in/transformations/set.md rename to content/flux/v0.64/stdlib/built-in/transformations/set.md index d156f85828..7c76114df8 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/set.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/set.md @@ -3,10 +3,10 @@ title: set() function description: The set() function assigns a static value to each record in the input table. aliases: - - /flux/v0.x/functions/transformations/set - - /flux/v0.x/functions/built-in/transformations/set/ + - /flux/v0.64/functions/transformations/set + - /flux/v0.64/functions/built-in/transformations/set/ menu: - flux_0_x: + flux_0_64: name: set parent: Transformations weight: 1 diff --git a/content/flux/v0.x/stdlib/built-in/transformations/sort.md b/content/flux/v0.64/stdlib/built-in/transformations/sort.md similarity index 90% rename from content/flux/v0.x/stdlib/built-in/transformations/sort.md rename to content/flux/v0.64/stdlib/built-in/transformations/sort.md index 89adb47e7d..d878895ede 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/sort.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/sort.md @@ -2,10 +2,10 @@ title: sort() function description: The sort() function orders the records within each table. aliases: - - /flux/v0.x/functions/transformations/sort - - /flux/v0.x/functions/built-in/transformations/sort/ + - /flux/v0.64/functions/transformations/sort + - /flux/v0.64/functions/built-in/transformations/sort/ menu: - flux_0_x: + flux_0_64: name: sort parent: Transformations weight: 1 diff --git a/content/flux/v0.x/stdlib/built-in/transformations/statecount.md b/content/flux/v0.64/stdlib/built-in/transformations/statecount.md similarity index 87% rename from content/flux/v0.x/stdlib/built-in/transformations/statecount.md rename to content/flux/v0.64/stdlib/built-in/transformations/statecount.md index 28ae1352ca..5db6eee0f2 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/statecount.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/statecount.md @@ -3,10 +3,10 @@ title: stateCount() function description: The stateCount() function computes the number of consecutive records in a given state. aliases: - - /flux/v0.x/functions/transformations/statecount - - /flux/v0.x/functions/built-in/transformations/statecount/ + - /flux/v0.64/functions/transformations/statecount + - /flux/v0.64/functions/built-in/transformations/statecount/ menu: - flux_0_x: + flux_0_64: name: stateCount parent: Transformations weight: 1 @@ -40,7 +40,7 @@ _**Data type:** Function_ {{% note %}} Make sure `fn` parameter names match each specified parameter. -To learn why, see [Match parameter names](/flux/v0.x/language/data-model/#match-parameter-names). +To learn why, see [Match parameter names](/flux/v0.64/language/data-model/#match-parameter-names). {{% /note %}} ### column diff --git a/content/flux/v0.x/stdlib/built-in/transformations/stateduration.md b/content/flux/v0.64/stdlib/built-in/transformations/stateduration.md similarity index 88% rename from content/flux/v0.x/stdlib/built-in/transformations/stateduration.md rename to content/flux/v0.64/stdlib/built-in/transformations/stateduration.md index f24d4badac..cd2d4ec74e 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/stateduration.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/stateduration.md @@ -2,10 +2,10 @@ title: stateDuration() function description: The stateDuration() function computes the duration of a given state. aliases: - - /flux/v0.x/functions/transformations/stateduration - - /flux/v0.x/functions/built-in/transformations/stateduration/ + - /flux/v0.64/functions/transformations/stateduration + - /flux/v0.64/functions/built-in/transformations/stateduration/ menu: - flux_0_x: + flux_0_64: name: stateDuration parent: Transformations weight: 1 @@ -47,7 +47,7 @@ _**Data type:** Function_ {{% note %}} Make sure `fn` parameter names match each specified parameter. -To learn why, see [Match parameter names](/flux/v0.x/language/data-model/#match-parameter-names). +To learn why, see [Match parameter names](/flux/v0.64/language/data-model/#match-parameter-names). {{% /note %}} ### column diff --git a/content/flux/v0.x/stdlib/built-in/transformations/stream-table/_index.md b/content/flux/v0.64/stdlib/built-in/transformations/stream-table/_index.md similarity index 91% rename from content/flux/v0.x/stdlib/built-in/transformations/stream-table/_index.md rename to content/flux/v0.64/stdlib/built-in/transformations/stream-table/_index.md index da161f83ab..c1d5c356a5 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/stream-table/_index.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/stream-table/_index.md @@ -5,11 +5,11 @@ description: > and access its columns and records. weight: 1 menu: - flux_0_x: + flux_0_64: name: Stream & table parent: Transformations aliases: - - /flux/v0.x/functions/built-in/transformations/stream-table/ + - /flux/v0.64/functions/built-in/transformations/stream-table/ --- Use stream and table functions to extract a table from a stream of tables and access its diff --git a/content/flux/v0.x/stdlib/built-in/transformations/stream-table/getcolumn.md b/content/flux/v0.64/stdlib/built-in/transformations/stream-table/getcolumn.md similarity index 90% rename from content/flux/v0.x/stdlib/built-in/transformations/stream-table/getcolumn.md rename to content/flux/v0.64/stdlib/built-in/transformations/stream-table/getcolumn.md index 04a86a6acb..5e8ebbc219 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/stream-table/getcolumn.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/stream-table/getcolumn.md @@ -4,12 +4,12 @@ description: > The `getColumn()` function extracts a column from a table given its label. If the label is not present in the set of columns, the function errors. menu: - flux_0_x: + flux_0_64: name: getColumn parent: Stream & table weight: 1 aliases: - - /flux/v0.x/functions/built-in/transformations/stream-table/getcolumn/ + - /flux/v0.64/functions/built-in/transformations/stream-table/getcolumn/ --- The `getColumn()` function extracts a column from a table given its label. diff --git a/content/flux/v0.x/stdlib/built-in/transformations/stream-table/getrecord.md b/content/flux/v0.64/stdlib/built-in/transformations/stream-table/getrecord.md similarity index 90% rename from content/flux/v0.x/stdlib/built-in/transformations/stream-table/getrecord.md rename to content/flux/v0.64/stdlib/built-in/transformations/stream-table/getrecord.md index 8384722ab2..ef53ccde61 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/stream-table/getrecord.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/stream-table/getrecord.md @@ -4,12 +4,12 @@ description: > The `getRecord()` function extracts a record from a table given its index. If the index is out of bounds, the function errors. menu: - flux_0_x: + flux_0_64: name: getRecord parent: Stream & table weight: 1 aliases: - - /flux/v0.x/functions/built-in/transformations/stream-table/getrecord/ + - /flux/v0.64/functions/built-in/transformations/stream-table/getrecord/ --- The `getRecord()` function extracts a record from a table given the record's index. diff --git a/content/flux/v0.x/stdlib/built-in/transformations/stream-table/tablefind.md b/content/flux/v0.64/stdlib/built-in/transformations/stream-table/tablefind.md similarity index 79% rename from content/flux/v0.x/stdlib/built-in/transformations/stream-table/tablefind.md rename to content/flux/v0.64/stdlib/built-in/transformations/stream-table/tablefind.md index d0e4f7de43..6d83ee6c96 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/stream-table/tablefind.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/stream-table/tablefind.md @@ -4,12 +4,12 @@ description: > The `tableFind()` function extracts the first table in a stream of tables whose group key values match a predicate. If no table is found, the function errors. menu: - flux_0_x: + flux_0_64: name: tableFind parent: Stream & table weight: 1 aliases: - - /flux/v0.x/functions/built-in/transformations/stream-table/tablefind/ + - /flux/v0.64/functions/built-in/transformations/stream-table/tablefind/ --- The `tableFind()` function extracts the first table in a stream of tables whose @@ -32,7 +32,7 @@ _**Data type:** Function_ {{% note %}} Make sure `fn` parameter names match each specified parameter. -To learn why, see [Match parameter names](/flux/v0.x/language/data-model/#match-parameter-names). +To learn why, see [Match parameter names](/flux/v0.64/language/data-model/#match-parameter-names). {{% /note %}} ##### Example fn function @@ -52,6 +52,6 @@ t = from(bucket:"telegraf/autogen") ``` {{% note %}} -You can use `t` from the example above as input for [`getColumn()`](/flux/v0.x/stdlib/built-in/transformations/stream-table/getcolumn/) -and [`getRecord()`](/flux/v0.x/stdlib/built-in/transformations/stream-table/getrecord/). +You can use `t` from the example above as input for [`getColumn()`](/flux/v0.64/stdlib/built-in/transformations/stream-table/getcolumn/) +and [`getRecord()`](/flux/v0.64/stdlib/built-in/transformations/stream-table/getrecord/). {{% /note %}} diff --git a/content/flux/v0.x/stdlib/built-in/transformations/tail.md b/content/flux/v0.64/stdlib/built-in/transformations/tail.md similarity index 93% rename from content/flux/v0.x/stdlib/built-in/transformations/tail.md rename to content/flux/v0.64/stdlib/built-in/transformations/tail.md index eee6eebe41..dca35dcbf0 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/tail.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/tail.md @@ -2,12 +2,12 @@ title: tail() function description: The `tail()` function limits each output table to the last `n` records. menu: - flux_0_x: + flux_0_64: name: tail parent: Transformations weight: 1 aliases: - - /flux/v0.x/functions/built-in/transformations/tail/ + - /flux/v0.64/functions/built-in/transformations/tail/ --- The `tail()` function limits each output table to the last [`n`](#n) records. diff --git a/content/flux/v0.x/stdlib/built-in/transformations/timeshift.md b/content/flux/v0.64/stdlib/built-in/transformations/timeshift.md similarity index 84% rename from content/flux/v0.x/stdlib/built-in/transformations/timeshift.md rename to content/flux/v0.64/stdlib/built-in/transformations/timeshift.md index 060b645484..a28c0458dc 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/timeshift.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/timeshift.md @@ -2,11 +2,11 @@ title: timeShift() function description: The timeShift() function adds a fixed duration to time columns. aliases: - - /flux/v0.x/functions/transformations/shift - - /flux/v0.x/functions/built-in/transformations/shift - - /flux/v0.x/functions/built-in/transformations/timeshift/ + - /flux/v0.64/functions/transformations/shift + - /flux/v0.64/functions/built-in/transformations/shift + - /flux/v0.64/functions/built-in/transformations/timeshift/ menu: - flux_0_x: + flux_0_64: name: shift parent: Transformations weight: 1 diff --git a/content/flux/v0.x/stdlib/built-in/transformations/truncatetimecolumn.md b/content/flux/v0.64/stdlib/built-in/transformations/truncatetimecolumn.md similarity index 92% rename from content/flux/v0.x/stdlib/built-in/transformations/truncatetimecolumn.md rename to content/flux/v0.64/stdlib/built-in/transformations/truncatetimecolumn.md index 41cbcaed79..e9307bae7c 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/truncatetimecolumn.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/truncatetimecolumn.md @@ -4,12 +4,12 @@ description: > The `truncateTimeColumn()` function truncates all input table `_time` values to a specified unit. menu: - flux_0_x: + flux_0_64: name: truncateTimeColumn parent: Transformations weight: 1 aliases: - - /flux/v0.x/functions/built-in/transformations/truncatetimecolumn/ + - /flux/v0.64/functions/built-in/transformations/truncatetimecolumn/ --- The `truncateTimeColumn()` function truncates all input table `_time` values to a specified unit. diff --git a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/_index.md b/content/flux/v0.64/stdlib/built-in/transformations/type-conversions/_index.md similarity index 76% rename from content/flux/v0.x/stdlib/built-in/transformations/type-conversions/_index.md rename to content/flux/v0.64/stdlib/built-in/transformations/type-conversions/_index.md index dfac514206..2e9672f136 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/_index.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/type-conversions/_index.md @@ -3,10 +3,10 @@ title: Flux type conversion functions description: Flux type conversion functions convert columns of the input table into a specific data type. aliases: - - /flux/v0.x/functions/transformations/type-conversions - - /flux/v0.x/functions/built-in/transformations/type-conversions/ + - /flux/v0.64/functions/transformations/type-conversions + - /flux/v0.64/functions/built-in/transformations/type-conversions/ menu: - flux_0_x: + flux_0_64: parent: Transformations name: Type conversions identifier: built-in-type-conversions diff --git a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/bool.md b/content/flux/v0.64/stdlib/built-in/transformations/type-conversions/bool.md similarity index 87% rename from content/flux/v0.x/stdlib/built-in/transformations/type-conversions/bool.md rename to content/flux/v0.64/stdlib/built-in/transformations/type-conversions/bool.md index 53027f77d8..61c0335123 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/bool.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/type-conversions/bool.md @@ -2,12 +2,12 @@ title: bool() function description: The `bool()` function converts a single value to a boolean. menu: - flux_0_x: + flux_0_64: name: bool parent: built-in-type-conversions weight: 2 aliases: - - /flux/v0.x/functions/built-in/transformations/type-conversions/bool/ + - /flux/v0.64/functions/built-in/transformations/type-conversions/bool/ --- The `bool()` function converts a single value to a boolean. diff --git a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/bytes.md b/content/flux/v0.64/stdlib/built-in/transformations/type-conversions/bytes.md similarity index 86% rename from content/flux/v0.x/stdlib/built-in/transformations/type-conversions/bytes.md rename to content/flux/v0.64/stdlib/built-in/transformations/type-conversions/bytes.md index 352c6ef3af..0386c013bd 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/bytes.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/type-conversions/bytes.md @@ -2,12 +2,12 @@ title: bytes() function description: The `bytes()` function converts a single value to bytes. menu: - flux_0_x: + flux_0_64: name: bytes parent: built-in-type-conversions weight: 2 aliases: - - /flux/v0.x/functions/built-in/transformations/type-conversions/bytes/ + - /flux/v0.64/functions/built-in/transformations/type-conversions/bytes/ --- The `bytes()` function converts a single value to bytes. diff --git a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/duration.md b/content/flux/v0.64/stdlib/built-in/transformations/type-conversions/duration.md similarity index 83% rename from content/flux/v0.x/stdlib/built-in/transformations/type-conversions/duration.md rename to content/flux/v0.64/stdlib/built-in/transformations/type-conversions/duration.md index 5140dfe123..fbad6619f8 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/duration.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/type-conversions/duration.md @@ -2,12 +2,12 @@ title: duration() function description: The `duration()` function converts a single value to a duration. menu: - flux_0_x: + flux_0_64: name: duration parent: built-in-type-conversions weight: 2 aliases: - - /flux/v0.x/functions/built-in/transformations/type-conversions/duration/ + - /flux/v0.64/functions/built-in/transformations/type-conversions/duration/ --- The `duration()` function converts a single value to a duration. @@ -28,7 +28,7 @@ _**Data type:** String | Integer | Uinteger_ {{% note %}} `duration()` assumes **numeric** input values are **nanoseconds**. -**String** input values must use [duration literal representation](/flux/v0.x/language/lexical-elements/#duration-literals). +**String** input values must use [duration literal representation](/flux/v0.64/language/lexical-elements/#duration-literals). {{% /note %}} ## Examples diff --git a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/float.md b/content/flux/v0.64/stdlib/built-in/transformations/type-conversions/float.md similarity index 87% rename from content/flux/v0.x/stdlib/built-in/transformations/type-conversions/float.md rename to content/flux/v0.64/stdlib/built-in/transformations/type-conversions/float.md index 14799dd603..2d12596a5c 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/float.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/type-conversions/float.md @@ -2,12 +2,12 @@ title: float() function description: The `float()` function converts a single value to a float. menu: - flux_0_x: + flux_0_64: name: float parent: built-in-type-conversions weight: 2 aliases: - - /flux/v0.x/functions/built-in/transformations/type-conversions/float/ + - /flux/v0.64/functions/built-in/transformations/type-conversions/float/ --- The `float()` function converts a single value to a float. diff --git a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/int.md b/content/flux/v0.64/stdlib/built-in/transformations/type-conversions/int.md similarity index 91% rename from content/flux/v0.x/stdlib/built-in/transformations/type-conversions/int.md rename to content/flux/v0.64/stdlib/built-in/transformations/type-conversions/int.md index 68fdbcccf0..0399496744 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/int.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/type-conversions/int.md @@ -2,12 +2,12 @@ title: int() function description: The `int()` function converts a single value to an integer. menu: - flux_0_x: + flux_0_64: name: int parent: built-in-type-conversions weight: 2 aliases: - - /flux/v0.x/functions/built-in/transformations/type-conversions/int/ + - /flux/v0.64/functions/built-in/transformations/type-conversions/int/ --- The `int()` function converts a single value to an integer. diff --git a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/string.md b/content/flux/v0.64/stdlib/built-in/transformations/type-conversions/string.md similarity index 88% rename from content/flux/v0.x/stdlib/built-in/transformations/type-conversions/string.md rename to content/flux/v0.64/stdlib/built-in/transformations/type-conversions/string.md index 592fdd23a2..49994ad2cf 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/string.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/type-conversions/string.md @@ -2,12 +2,12 @@ title: string() function description: The `string()` function converts a single value to a string. menu: - flux_0_x: + flux_0_64: name: string parent: built-in-type-conversions weight: 2 aliases: - - /flux/v0.x/functions/built-in/transformations/type-conversions/string/ + - /flux/v0.64/functions/built-in/transformations/type-conversions/string/ --- The `string()` function converts a single value to a string. diff --git a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/time.md b/content/flux/v0.64/stdlib/built-in/transformations/type-conversions/time.md similarity index 89% rename from content/flux/v0.x/stdlib/built-in/transformations/type-conversions/time.md rename to content/flux/v0.64/stdlib/built-in/transformations/type-conversions/time.md index 62ba5f8ca6..e1d16f77c7 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/time.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/type-conversions/time.md @@ -2,12 +2,12 @@ title: time() function description: The `time()` function converts a single value to a time. menu: - flux_0_x: + flux_0_64: name: time parent: built-in-type-conversions weight: 2 aliases: - - /flux/v0.x/functions/built-in/transformations/type-conversions/time/ + - /flux/v0.64/functions/built-in/transformations/type-conversions/time/ --- The `time()` function converts a single value to a time. diff --git a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/tobool.md b/content/flux/v0.64/stdlib/built-in/transformations/type-conversions/tobool.md similarity index 80% rename from content/flux/v0.x/stdlib/built-in/transformations/type-conversions/tobool.md rename to content/flux/v0.64/stdlib/built-in/transformations/type-conversions/tobool.md index 9a785e46b5..e169284665 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/tobool.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/type-conversions/tobool.md @@ -2,10 +2,10 @@ title: toBool() function description: The toBool() function converts a value to a boolean. aliases: - - /flux/v0.x/functions/transformations/type-conversions/tobool - - /flux/v0.x/functions/built-in/transformations/type-conversions/tobool/ + - /flux/v0.64/functions/transformations/type-conversions/tobool + - /flux/v0.64/functions/built-in/transformations/type-conversions/tobool/ menu: - flux_0_x: + flux_0_64: name: toBool parent: built-in-type-conversions weight: 1 diff --git a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/toduration.md b/content/flux/v0.64/stdlib/built-in/transformations/type-conversions/toduration.md similarity index 83% rename from content/flux/v0.x/stdlib/built-in/transformations/type-conversions/toduration.md rename to content/flux/v0.64/stdlib/built-in/transformations/type-conversions/toduration.md index 84826b5b35..586ef16d92 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/toduration.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/type-conversions/toduration.md @@ -2,10 +2,10 @@ title: toDuration() function description: The toDuration() function converts a value to a duration. aliases: - - /flux/v0.x/functions/transformations/type-conversions/toduration - - /flux/v0.x/functions/built-in/transformations/type-conversions/toduration/ + - /flux/v0.64/functions/transformations/type-conversions/toduration + - /flux/v0.64/functions/built-in/transformations/type-conversions/toduration/ menu: - flux_0_x: + flux_0_64: name: toDuration parent: built-in-type-conversions weight: 1 @@ -27,7 +27,7 @@ _**Supported data types:** String | Integer | Uinteger_ {{% note %}} `duration()` assumes **numeric** input values are **nanoseconds**. -**String** input values must use [duration literal representation](/flux/v0.x/language/lexical-elements/#duration-literals). +**String** input values must use [duration literal representation](/flux/v0.64/language/lexical-elements/#duration-literals). {{% /note %}} {{% note %}} diff --git a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/tofloat.md b/content/flux/v0.64/stdlib/built-in/transformations/type-conversions/tofloat.md similarity index 84% rename from content/flux/v0.x/stdlib/built-in/transformations/type-conversions/tofloat.md rename to content/flux/v0.64/stdlib/built-in/transformations/type-conversions/tofloat.md index 94f8c82152..ab14a74118 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/tofloat.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/type-conversions/tofloat.md @@ -2,10 +2,10 @@ title: toFloat() function description: The toFloat() function converts a value to a float. aliases: - - /flux/v0.x/functions/transformations/type-conversions/tofloat - - /flux/v0.x/functions/built-in/transformations/type-conversions/tofloat/ + - /flux/v0.64/functions/transformations/type-conversions/tofloat + - /flux/v0.64/functions/built-in/transformations/type-conversions/tofloat/ menu: - flux_0_x: + flux_0_64: name: toFloat parent: built-in-type-conversions weight: 1 diff --git a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/toint.md b/content/flux/v0.64/stdlib/built-in/transformations/type-conversions/toint.md similarity index 88% rename from content/flux/v0.x/stdlib/built-in/transformations/type-conversions/toint.md rename to content/flux/v0.64/stdlib/built-in/transformations/type-conversions/toint.md index d83e974dfb..822416e14f 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/toint.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/type-conversions/toint.md @@ -2,10 +2,10 @@ title: toInt() function description: The toInt() function converts a value to an integer. aliases: - - /flux/v0.x/functions/transformations/type-conversions/toint - - /flux/v0.x/functions/built-in/transformations/type-conversions/toint/ + - /flux/v0.64/functions/transformations/type-conversions/toint + - /flux/v0.64/functions/built-in/transformations/type-conversions/toint/ menu: - flux_0_x: + flux_0_64: name: toInt parent: built-in-type-conversions weight: 1 diff --git a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/tostring.md b/content/flux/v0.64/stdlib/built-in/transformations/type-conversions/tostring.md similarity index 84% rename from content/flux/v0.x/stdlib/built-in/transformations/type-conversions/tostring.md rename to content/flux/v0.64/stdlib/built-in/transformations/type-conversions/tostring.md index fc29faae58..4cfebd7698 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/tostring.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/type-conversions/tostring.md @@ -2,10 +2,10 @@ title: toString() function description: The toString() function converts a value to a string. aliases: - - /flux/v0.x/functions/transformations/type-conversions/tostring - - /flux/v0.x/functions/built-in/transformations/type-conversions/tostring/ + - /flux/v0.64/functions/transformations/type-conversions/tostring + - /flux/v0.64/functions/built-in/transformations/type-conversions/tostring/ menu: - flux_0_x: + flux_0_64: name: toString parent: built-in-type-conversions weight: 1 diff --git a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/totime.md b/content/flux/v0.64/stdlib/built-in/transformations/type-conversions/totime.md similarity index 85% rename from content/flux/v0.x/stdlib/built-in/transformations/type-conversions/totime.md rename to content/flux/v0.64/stdlib/built-in/transformations/type-conversions/totime.md index 5a462ae520..868ebcdc17 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/totime.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/type-conversions/totime.md @@ -2,10 +2,10 @@ title: toTime() function description: The toTime() function converts a value to a time. aliases: - - /flux/v0.x/functions/transformations/type-conversions/totime - - /flux/v0.x/functions/built-in/transformations/type-conversions/totime/ + - /flux/v0.64/functions/transformations/type-conversions/totime + - /flux/v0.64/functions/built-in/transformations/type-conversions/totime/ menu: - flux_0_x: + flux_0_64: name: toTime parent: built-in-type-conversions weight: 1 diff --git a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/touint.md b/content/flux/v0.64/stdlib/built-in/transformations/type-conversions/touint.md similarity index 88% rename from content/flux/v0.x/stdlib/built-in/transformations/type-conversions/touint.md rename to content/flux/v0.64/stdlib/built-in/transformations/type-conversions/touint.md index 7749011154..834ddb6f0b 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/touint.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/type-conversions/touint.md @@ -2,10 +2,10 @@ title: toUInt() function description: The toUInt() function converts a value to an uinteger. aliases: - - /flux/v0.x/functions/transformations/type-conversions/touint - - /flux/v0.x/functions/built-in/transformations/type-conversions/touint/ + - /flux/v0.64/functions/transformations/type-conversions/touint + - /flux/v0.64/functions/built-in/transformations/type-conversions/touint/ menu: - flux_0_x: + flux_0_64: name: toUInt parent: built-in-type-conversions weight: 1 diff --git a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/uint.md b/content/flux/v0.64/stdlib/built-in/transformations/type-conversions/uint.md similarity index 91% rename from content/flux/v0.x/stdlib/built-in/transformations/type-conversions/uint.md rename to content/flux/v0.64/stdlib/built-in/transformations/type-conversions/uint.md index f84bd79ef8..30ffcd0ac9 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/type-conversions/uint.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/type-conversions/uint.md @@ -2,12 +2,12 @@ title: uint() function description: The `uint()` function converts a single value to a UInteger. menu: - flux_0_x: + flux_0_64: name: uint parent: built-in-type-conversions weight: 2 aliases: - - /flux/v0.x/functions/built-in/transformations/type-conversions/uint/ + - /flux/v0.64/functions/built-in/transformations/type-conversions/uint/ --- The `uint()` function converts a single value to a UInteger. diff --git a/content/flux/v0.x/stdlib/built-in/transformations/union.md b/content/flux/v0.64/stdlib/built-in/transformations/union.md similarity index 88% rename from content/flux/v0.x/stdlib/built-in/transformations/union.md rename to content/flux/v0.64/stdlib/built-in/transformations/union.md index d53945b1ce..bb11e69a20 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/union.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/union.md @@ -3,10 +3,10 @@ title: union() function description: The union() function concatenates two or more input streams into a single output stream. aliases: - - /flux/v0.x/functions/transformations/union - - /flux/v0.x/functions/built-in/transformations/union/ + - /flux/v0.64/functions/transformations/union + - /flux/v0.64/functions/built-in/transformations/union/ menu: - flux_0_x: + flux_0_64: name: union parent: Transformations weight: 1 @@ -57,7 +57,7 @@ union(tables: [left, right]) ## union() versus join() `union()` merges separate streams of tables into a single stream of tables and -groups rows of data based on existing [group keys](/flux/v0.x/introduction/getting-started/#group-keys). +groups rows of data based on existing [group keys](/flux/v0.64/introduction/getting-started/#group-keys). `union()` does not modify individual rows of data. `join()` creates new rows based on common values in one or more specified columns. Output rows also contain the differing values from each of the joined streams. diff --git a/content/flux/v0.x/stdlib/built-in/transformations/window.md b/content/flux/v0.64/stdlib/built-in/transformations/window.md similarity index 96% rename from content/flux/v0.x/stdlib/built-in/transformations/window.md rename to content/flux/v0.64/stdlib/built-in/transformations/window.md index c3c2f9c8c3..582ed75dc5 100644 --- a/content/flux/v0.x/stdlib/built-in/transformations/window.md +++ b/content/flux/v0.64/stdlib/built-in/transformations/window.md @@ -2,10 +2,10 @@ title: window() function description: The window() function groups records based on a time value. aliases: - - /flux/v0.x/functions/transformations/window - - /flux/v0.x/functions/built-in/transformations/window/ + - /flux/v0.64/functions/transformations/window + - /flux/v0.64/functions/built-in/transformations/window/ menu: - flux_0_x: + flux_0_64: name: window parent: Transformations weight: 1 diff --git a/content/flux/v0.x/stdlib/csv/_index.md b/content/flux/v0.64/stdlib/csv/_index.md similarity index 91% rename from content/flux/v0.x/stdlib/csv/_index.md rename to content/flux/v0.64/stdlib/csv/_index.md index 93ce8d2fd5..67888e5031 100644 --- a/content/flux/v0.x/stdlib/csv/_index.md +++ b/content/flux/v0.64/stdlib/csv/_index.md @@ -4,12 +4,12 @@ description: > The Flux CSV package provides functions for working with data in annotated CSV format. Import the `csv` package. menu: - flux_0_x: + flux_0_64: name: CSV parent: Standard library weight: 1 aliases: - - /flux/v0.x/functions/csv/ + - /flux/v0.64/functions/csv/ --- CSV Flux functions provide tools for working with data in [annotated CSV format](https://github.com/influxdata/flux/blob/master/docs/SPEC.md#csv). diff --git a/content/flux/v0.x/stdlib/csv/from.md b/content/flux/v0.64/stdlib/csv/from.md similarity index 89% rename from content/flux/v0.x/stdlib/csv/from.md rename to content/flux/v0.64/stdlib/csv/from.md index ba91032466..e334e3a1c9 100644 --- a/content/flux/v0.x/stdlib/csv/from.md +++ b/content/flux/v0.64/stdlib/csv/from.md @@ -2,11 +2,11 @@ title: csv.from() function description: The csv.from() function retrieves data from a CSV data source. aliases: - - /flux/v0.x/functions/inputs/fromcsv - - /flux/v0.x/functions/built-in/inputs/fromcsv - - /flux/v0.x/functions/csv/from/ + - /flux/v0.64/functions/inputs/fromcsv + - /flux/v0.64/functions/built-in/inputs/fromcsv + - /flux/v0.64/functions/csv/from/ menu: - flux_0_x: + flux_0_64: name: csv.from parent: CSV weight: 1 @@ -55,7 +55,7 @@ _The CSV file must exist in the same file system running the `influxd` process._ {{% warn %}} **InfluxDB** does _**not**_ support the `file` parameter because of restricted access to the underlying filesystem. -However, the [Flux REPL](/flux/v0.x/guides/executing-queries/#influx-cli-in-flux-mode) +However, the [Flux REPL](/flux/v0.64/guides/executing-queries/#influx-cli-in-flux-mode) does support the `file` parameter. {{% /warn %}} diff --git a/content/flux/v0.x/stdlib/custom-functions/_index.md b/content/flux/v0.64/stdlib/custom-functions/_index.md similarity index 88% rename from content/flux/v0.x/stdlib/custom-functions/_index.md rename to content/flux/v0.64/stdlib/custom-functions/_index.md index ff7eb55123..228d305646 100644 --- a/content/flux/v0.x/stdlib/custom-functions/_index.md +++ b/content/flux/v0.64/stdlib/custom-functions/_index.md @@ -2,12 +2,12 @@ title: Create custom Flux functions description: Create your own custom Flux functions to transform and manipulate data. menu: - flux_0_x: + flux_0_64: name: Custom functions parent: Standard library weight: 6 aliases: - - /flux/v0.x/functions/custom-functions/ + - /flux/v0.64/functions/custom-functions/ --- Flux's functional syntax allows for custom functions. @@ -71,7 +71,7 @@ functionName = (tables=<-) => tables |> functionOperations ###### Multiply row values by x The example below defines a `multByX` function that multiplies the `_value` column of each row in the input table by the `x` parameter. -It uses the [`map()` function](/flux/v0.x/stdlib/built-in/transformations/map) to modify each `_value`. +It uses the [`map()` function](/flux/v0.64/stdlib/built-in/transformations/map) to modify each `_value`. ```js // Function definition @@ -104,8 +104,8 @@ Defaults are overridden by explicitly defining the parameter in the function cal ###### Get the winner or the "winner" The example below defines a `getWinner` function that returns the record with the highest or lowest `_value` (winner versus "winner") depending on the `noSarcasm` parameter which defaults to `true`. -It uses the [`sort()` function](/flux/v0.x/stdlib/built-in/transformations/sort) to sort records in either descending or ascending order. -It then uses the [`limit()` function](/flux/v0.x/stdlib/built-in/transformations/limit) to return the first record from the sorted table. +It uses the [`sort()` function](/flux/v0.64/stdlib/built-in/transformations/sort) to sort records in either descending or ascending order. +It then uses the [`limit()` function](/flux/v0.64/stdlib/built-in/transformations/limit) to return the first record from the sorted table. ```js // Function definition diff --git a/content/flux/v0.x/stdlib/custom-functions/custom-aggregate.md b/content/flux/v0.64/stdlib/custom-functions/custom-aggregate.md similarity index 88% rename from content/flux/v0.x/stdlib/custom-functions/custom-aggregate.md rename to content/flux/v0.64/stdlib/custom-functions/custom-aggregate.md index d677f50ff2..b3a3822bec 100644 --- a/content/flux/v0.x/stdlib/custom-functions/custom-aggregate.md +++ b/content/flux/v0.64/stdlib/custom-functions/custom-aggregate.md @@ -3,29 +3,29 @@ title: Create custom aggregate functions description: Create your own custom aggregate functions in Flux using the `reduce()` function. menu: - flux_0_x: + flux_0_64: name: Custom aggregate functions parent: Custom functions weight: 1 aliases: - - /flux/v0.x/functions/custom-functions/custom-aggregate/ + - /flux/v0.64/functions/custom-functions/custom-aggregate/ --- To aggregate your data, use the Flux -[built-in aggregate functions](/flux/v0.x/stdlib/built-in/transformations/aggregates/) +[built-in aggregate functions](/flux/v0.64/stdlib/built-in/transformations/aggregates/) or create custom aggregate functions using the -[`reduce()`function](/flux/v0.x/stdlib/built-in/transformations/aggregates/reduce/). +[`reduce()`function](/flux/v0.64/stdlib/built-in/transformations/aggregates/reduce/). ## Aggregate function characteristics Aggregate functions all have the same basic characteristics: - They operate on individual input tables and transform all records into a single record. -- The output table has the same [group key](/flux/v0.x/introduction/getting-started/#group-keys) as the input table. +- The output table has the same [group key](/flux/v0.64/introduction/getting-started/#group-keys) as the input table. ## How reduce() works The `reduce()` function operates on one row at a time using the function defined in -the [`fn` parameter](/flux/v0.x/stdlib/built-in/transformations/aggregates/reduce/#fn). -The `fn` function maps keys to specific values using two [objects](/flux/v0.x/introduction/getting-started/syntax-basics/#objects) +the [`fn` parameter](/flux/v0.64/stdlib/built-in/transformations/aggregates/reduce/#fn). +The `fn` function maps keys to specific values using two [objects](/flux/v0.64/introduction/getting-started/syntax-basics/#objects) specified by the following parameters: | Parameter | Description | @@ -34,7 +34,7 @@ specified by the following parameters: | `accumulator` | An object that contains values used in each row's aggregate calculation. | {{% note %}} -The `reduce()` function's [`identity` parameter](/flux/v0.x/stdlib/built-in/transformations/aggregates/reduce/#identity) +The `reduce()` function's [`identity` parameter](/flux/v0.64/stdlib/built-in/transformations/aggregates/reduce/#identity) defines the initial `accumulator` object. {{% /note %}} @@ -52,7 +52,7 @@ in an input table. ``` {{% note %}} -To preserve existing columns, [use the `with` operator](/flux/v0.x/stdlib/built-in/transformations/aggregates/reduce/#preserve-columns) +To preserve existing columns, [use the `with` operator](/flux/v0.64/stdlib/built-in/transformations/aggregates/reduce/#preserve-columns) when mapping values in the `r` object. {{% /note %}} @@ -137,7 +137,7 @@ to create a transformed table with one row and columns for each mapped key. #### What happened to the \_time column? The `reduce()` function only keeps columns that are: -1. Are part of the input table's [group key](/flux/v0.x/introduction/getting-started/#group-keys). +1. Are part of the input table's [group key](/flux/v0.64/introduction/getting-started/#group-keys). 2. Explicitly mapped in the `fn` function. It drops all other columns. @@ -147,13 +147,13 @@ it isn't included in the output table. ## Custom aggregate function examples To create custom aggregate functions, use principles outlined in -[Creating custom functions](/flux/v0.x/stdlib/custom-functions) +[Creating custom functions](/flux/v0.64/stdlib/custom-functions) and the `reduce()` function to aggregate rows in each input table. ### Create a custom average function This example illustrates how to create a function that averages values in a table. _This is meant for demonstration purposes only. -The built-in [`mean()` function](/flux/v0.x/stdlib/built-in/transformations/aggregates/mean/) +The built-in [`mean()` function](/flux/v0.64/stdlib/built-in/transformations/aggregates/mean/) does the same thing and is much more performant._ {{< code-tabs-wrapper >}} diff --git a/content/flux/v0.x/stdlib/date/_index.md b/content/flux/v0.64/stdlib/date/_index.md similarity index 91% rename from content/flux/v0.x/stdlib/date/_index.md rename to content/flux/v0.64/stdlib/date/_index.md index 9895e2feae..a00aff2cf2 100644 --- a/content/flux/v0.x/stdlib/date/_index.md +++ b/content/flux/v0.64/stdlib/date/_index.md @@ -4,10 +4,10 @@ description: > The Flux date package provides date and time constants and functions. Import the `date` package. aliases: - - /flux/v0.x/flux/language/built-ins/time-constants/ - - /flux/v0.x/functions/date/ + - /flux/v0.64/flux/language/built-ins/time-constants/ + - /flux/v0.64/functions/date/ menu: - flux_0_x: + flux_0_64: name: Date parent: Standard library weight: 1 diff --git a/content/flux/v0.x/stdlib/date/hour.md b/content/flux/v0.64/stdlib/date/hour.md similarity index 90% rename from content/flux/v0.x/stdlib/date/hour.md rename to content/flux/v0.64/stdlib/date/hour.md index 8a8c3d9daf..e692f79dc1 100644 --- a/content/flux/v0.x/stdlib/date/hour.md +++ b/content/flux/v0.64/stdlib/date/hour.md @@ -4,12 +4,12 @@ description: > The `date.hour()` function returns the hour of a specified time. Results range from `[0-23]`. menu: - flux_0_x: + flux_0_64: name: date.hour parent: Date weight: 1 aliases: - - /flux/v0.x/functions/date/hour/ + - /flux/v0.64/functions/date/hour/ --- The `date.hour()` function returns the hour of a specified time. diff --git a/content/flux/v0.x/stdlib/date/microsecond.md b/content/flux/v0.64/stdlib/date/microsecond.md similarity index 90% rename from content/flux/v0.x/stdlib/date/microsecond.md rename to content/flux/v0.64/stdlib/date/microsecond.md index 75364f1d6d..4e12a5cb94 100644 --- a/content/flux/v0.x/stdlib/date/microsecond.md +++ b/content/flux/v0.64/stdlib/date/microsecond.md @@ -4,12 +4,12 @@ description: > The `date.microsecond()` function returns the microsecond of a specified time. Results range from `[0-999999]`. menu: - flux_0_x: + flux_0_64: name: date.microsecond parent: Date weight: 1 aliases: - - /flux/v0.x/functions/date/microsecond/ + - /flux/v0.64/functions/date/microsecond/ --- The `date.microsecond()` function returns the microsecond of a specified time. diff --git a/content/flux/v0.x/stdlib/date/millisecond.md b/content/flux/v0.64/stdlib/date/millisecond.md similarity index 90% rename from content/flux/v0.x/stdlib/date/millisecond.md rename to content/flux/v0.64/stdlib/date/millisecond.md index 7aa866aaec..f75637ed43 100644 --- a/content/flux/v0.x/stdlib/date/millisecond.md +++ b/content/flux/v0.64/stdlib/date/millisecond.md @@ -4,12 +4,12 @@ description: > The `date.millisecond()` function returns the millisecond of a specified time. Results range from `[0-999999]`. menu: - flux_0_x: + flux_0_64: name: date.millisecond parent: Date weight: 1 aliases: - - /flux/v0.x/functions/date/millisecond/ + - /flux/v0.64/functions/date/millisecond/ --- The `date.millisecond()` function returns the millisecond of a specified time. diff --git a/content/flux/v0.x/stdlib/date/minute.md b/content/flux/v0.64/stdlib/date/minute.md similarity index 90% rename from content/flux/v0.x/stdlib/date/minute.md rename to content/flux/v0.64/stdlib/date/minute.md index 416a7aa808..eca4c43079 100644 --- a/content/flux/v0.x/stdlib/date/minute.md +++ b/content/flux/v0.64/stdlib/date/minute.md @@ -4,12 +4,12 @@ description: > The `date.minute()` function returns the minute of a specified time. Results range from `[0-59]`. menu: - flux_0_x: + flux_0_64: name: date.minute parent: Date weight: 1 aliases: - - /flux/v0.x/functions/date/minute/ + - /flux/v0.64/functions/date/minute/ --- The `date.minute()` function returns the minute of a specified time. diff --git a/content/flux/v0.x/stdlib/date/month.md b/content/flux/v0.64/stdlib/date/month.md similarity index 90% rename from content/flux/v0.x/stdlib/date/month.md rename to content/flux/v0.64/stdlib/date/month.md index 8d53cfa99e..7d8ea8b848 100644 --- a/content/flux/v0.x/stdlib/date/month.md +++ b/content/flux/v0.64/stdlib/date/month.md @@ -4,12 +4,12 @@ description: > The `date.month()` function returns the month of a specified time. Results range from `[1-12]` menu: - flux_0_x: + flux_0_64: name: date.month parent: Date weight: 1 aliases: - - /flux/v0.x/functions/date/month/ + - /flux/v0.64/functions/date/month/ --- The `date.month()` function returns the month of a specified time. diff --git a/content/flux/v0.x/stdlib/date/monthday.md b/content/flux/v0.64/stdlib/date/monthday.md similarity index 90% rename from content/flux/v0.x/stdlib/date/monthday.md rename to content/flux/v0.64/stdlib/date/monthday.md index 530b906347..1c85d2cb88 100644 --- a/content/flux/v0.x/stdlib/date/monthday.md +++ b/content/flux/v0.64/stdlib/date/monthday.md @@ -4,12 +4,12 @@ description: > The `date.monthDay()` function returns the day of the month for a specified time. Results range from `[1-31]`. menu: - flux_0_x: + flux_0_64: name: date.monthDay parent: Date weight: 1 aliases: - - /flux/v0.x/functions/date/monthday/ + - /flux/v0.64/functions/date/monthday/ --- The `date.monthDay()` function returns the day of the month for a specified time. diff --git a/content/flux/v0.x/stdlib/date/nanosecond.md b/content/flux/v0.64/stdlib/date/nanosecond.md similarity index 90% rename from content/flux/v0.x/stdlib/date/nanosecond.md rename to content/flux/v0.64/stdlib/date/nanosecond.md index c547c576e0..271c492b06 100644 --- a/content/flux/v0.x/stdlib/date/nanosecond.md +++ b/content/flux/v0.64/stdlib/date/nanosecond.md @@ -4,12 +4,12 @@ description: > The `date.nanosecond()` function returns the nanosecond of a specified time. Results range from `[0-999999999]`. menu: - flux_0_x: + flux_0_64: name: date.nanosecond parent: Date weight: 1 aliases: - - /flux/v0.x/functions/date/nanosecond/ + - /flux/v0.64/functions/date/nanosecond/ --- The `date.nanosecond()` function returns the nanosecond of a specified time. diff --git a/content/flux/v0.x/stdlib/date/quarter.md b/content/flux/v0.64/stdlib/date/quarter.md similarity index 91% rename from content/flux/v0.x/stdlib/date/quarter.md rename to content/flux/v0.64/stdlib/date/quarter.md index f46463a712..47f9d9f90a 100644 --- a/content/flux/v0.x/stdlib/date/quarter.md +++ b/content/flux/v0.64/stdlib/date/quarter.md @@ -4,12 +4,12 @@ description: > The `date.quarter()` function returns the quarter of the year for a specified time. Results range from `[1-4]`. menu: - flux_0_x: + flux_0_64: name: date.quarter parent: Date weight: 1 aliases: - - /flux/v0.x/functions/date/quarter/ + - /flux/v0.64/functions/date/quarter/ --- The `date.quarter()` function returns the quarter of the year for a specified time. diff --git a/content/flux/v0.x/stdlib/date/second.md b/content/flux/v0.64/stdlib/date/second.md similarity index 90% rename from content/flux/v0.x/stdlib/date/second.md rename to content/flux/v0.64/stdlib/date/second.md index e47e06c4c2..f7c65c20a1 100644 --- a/content/flux/v0.x/stdlib/date/second.md +++ b/content/flux/v0.64/stdlib/date/second.md @@ -4,12 +4,12 @@ description: > The `date.second()` function returns the second of a specified time. Results range from `[0-59]`. menu: - flux_0_x: + flux_0_64: name: date.second parent: Date weight: 1 aliases: - - /flux/v0.x/functions/date/second/ + - /flux/v0.64/functions/date/second/ --- The `date.second()` function returns the second of a specified time. diff --git a/content/flux/v0.x/stdlib/date/truncate.md b/content/flux/v0.64/stdlib/date/truncate.md similarity index 95% rename from content/flux/v0.x/stdlib/date/truncate.md rename to content/flux/v0.64/stdlib/date/truncate.md index c0f037199d..7406389a22 100644 --- a/content/flux/v0.x/stdlib/date/truncate.md +++ b/content/flux/v0.64/stdlib/date/truncate.md @@ -3,12 +3,12 @@ title: date.truncate() function description: > The `date.truncate()` function truncates a time to a specified unit. menu: - flux_0_x: + flux_0_64: name: date.truncate parent: Date weight: 1 aliases: - - /flux/v0.x/functions/date/truncate/ + - /flux/v0.64/functions/date/truncate/ --- The `date.truncate()` function truncates a time to a specified unit. diff --git a/content/flux/v0.x/stdlib/date/week.md b/content/flux/v0.64/stdlib/date/week.md similarity index 91% rename from content/flux/v0.x/stdlib/date/week.md rename to content/flux/v0.64/stdlib/date/week.md index b83e4ebb47..050ff50e80 100644 --- a/content/flux/v0.x/stdlib/date/week.md +++ b/content/flux/v0.64/stdlib/date/week.md @@ -4,12 +4,12 @@ description: > The `date.week()` function returns the ISO week of the year for a specified time. Results range from `[1-53]`. menu: - flux_0_x: + flux_0_64: name: date.week parent: Date weight: 1 aliases: - - /flux/v0.x/functions/date/week/ + - /flux/v0.64/functions/date/week/ --- The `date.week()` function returns the ISO week of the year for a specified time. diff --git a/content/flux/v0.x/stdlib/date/weekday.md b/content/flux/v0.64/stdlib/date/weekday.md similarity index 90% rename from content/flux/v0.x/stdlib/date/weekday.md rename to content/flux/v0.64/stdlib/date/weekday.md index 963c3f125d..6d3c8cda62 100644 --- a/content/flux/v0.x/stdlib/date/weekday.md +++ b/content/flux/v0.64/stdlib/date/weekday.md @@ -4,12 +4,12 @@ description: > The `date.weekDay()` function returns the day of the week for a specified time. Results range from `[0-6]`. menu: - flux_0_x: + flux_0_64: name: date.weekDay parent: Date weight: 1 aliases: - - /flux/v0.x/functions/date/weekday/ + - /flux/v0.64/functions/date/weekday/ --- The `date.weekDay()` function returns the day of the week for a specified time. diff --git a/content/flux/v0.x/stdlib/date/year.md b/content/flux/v0.64/stdlib/date/year.md similarity index 89% rename from content/flux/v0.x/stdlib/date/year.md rename to content/flux/v0.64/stdlib/date/year.md index e0cc38b664..d7867001d0 100644 --- a/content/flux/v0.x/stdlib/date/year.md +++ b/content/flux/v0.64/stdlib/date/year.md @@ -3,12 +3,12 @@ title: date.year() function description: > The `date.year()` function returns the year of a specified time. menu: - flux_0_x: + flux_0_64: name: date.year parent: Date weight: 1 aliases: - - /flux/v0.x/functions/date/year/ + - /flux/v0.64/functions/date/year/ --- The `date.year()` function returns the year of a specified time. diff --git a/content/flux/v0.x/stdlib/date/yearday.md b/content/flux/v0.64/stdlib/date/yearday.md similarity index 92% rename from content/flux/v0.x/stdlib/date/yearday.md rename to content/flux/v0.64/stdlib/date/yearday.md index 7a3d348097..467dc33c88 100644 --- a/content/flux/v0.x/stdlib/date/yearday.md +++ b/content/flux/v0.64/stdlib/date/yearday.md @@ -4,12 +4,12 @@ description: > The `date.yearDay()` function returns the day of the year for a specified time. Results range from `[1-365]` for non-leap years, and `[1-366]` in leap years. menu: - flux_0_x: + flux_0_64: name: date.yearDay parent: Date weight: 1 aliases: - - /flux/v0.x/functions/date/yearday/ + - /flux/v0.64/functions/date/yearday/ --- The `date.yearDay()` function returns the day of the year for a specified time. diff --git a/content/flux/v0.x/stdlib/experimental/_index.md b/content/flux/v0.64/stdlib/experimental/_index.md similarity index 98% rename from content/flux/v0.x/stdlib/experimental/_index.md rename to content/flux/v0.64/stdlib/experimental/_index.md index c5b7eb1d97..5837e297c8 100644 --- a/content/flux/v0.x/stdlib/experimental/_index.md +++ b/content/flux/v0.64/stdlib/experimental/_index.md @@ -4,7 +4,7 @@ description: > The Flux Experimental package includes experimental functions that perform various tasks. Experimental functions are subject to change at any time and are not recommended for production use. menu: - flux_0_x: + flux_0_64: name: Experimental parent: Standard library weight: 1 diff --git a/content/flux/v0.x/stdlib/experimental/addduration.md b/content/flux/v0.64/stdlib/experimental/addduration.md similarity index 91% rename from content/flux/v0.x/stdlib/experimental/addduration.md rename to content/flux/v0.64/stdlib/experimental/addduration.md index 861630e90f..4c82d72d44 100644 --- a/content/flux/v0.x/stdlib/experimental/addduration.md +++ b/content/flux/v0.64/stdlib/experimental/addduration.md @@ -4,7 +4,7 @@ description: > The `experimental.addDuration()` function adds a duration to a time value and returns the resulting time. menu: - flux_0_x: + flux_0_64: name: experimental.addDuration parent: Experimental weight: 2 @@ -58,4 +58,4 @@ experimental.addDuration( --- ### Related functions -- [experimental.subDuration()](/flux/v0.x/stdlib/experimental/subduration/) +- [experimental.subDuration()](/flux/v0.64/stdlib/experimental/subduration/) diff --git a/content/flux/v0.x/stdlib/experimental/aggregate/_index.md b/content/flux/v0.64/stdlib/experimental/aggregate/_index.md similarity index 97% rename from content/flux/v0.x/stdlib/experimental/aggregate/_index.md rename to content/flux/v0.64/stdlib/experimental/aggregate/_index.md index 2602af3738..ae021560b2 100644 --- a/content/flux/v0.x/stdlib/experimental/aggregate/_index.md +++ b/content/flux/v0.64/stdlib/experimental/aggregate/_index.md @@ -5,7 +5,7 @@ description: > The Flux Aggregate package provides functions to simplify common aggregate operations. Import the `experimental/aggregate` package. menu: - flux_0_x: + flux_0_64: name: Aggregate parent: Experimental weight: 1 diff --git a/content/flux/v0.x/stdlib/experimental/aggregate/rate.md b/content/flux/v0.64/stdlib/experimental/aggregate/rate.md similarity index 74% rename from content/flux/v0.x/stdlib/experimental/aggregate/rate.md rename to content/flux/v0.64/stdlib/experimental/aggregate/rate.md index 5b99c7e1cc..9e168545a1 100644 --- a/content/flux/v0.x/stdlib/experimental/aggregate/rate.md +++ b/content/flux/v0.64/stdlib/experimental/aggregate/rate.md @@ -3,7 +3,7 @@ title: aggregate.rate() function description: > The `aggregate.rate()` function calculates the rate of change per windows of time. menu: - flux_0_x: + flux_0_64: name: aggregate.rate parent: Aggregate weight: 1 @@ -69,9 +69,9 @@ rate = (tables=<-, every, groupColumns=[], unit=1s) => ``` _**Used functions:**_ -[aggregateWindow()](/flux/v0.x/stdlib/built-in/transformations/aggregates/aggregatewindow/) -[derivative()](/flux/v0.x/stdlib/built-in/transformations/aggregates/derivative/) -[experimental.group()](/flux/v0.x/stdlib/experimental/group/) -[group()](/flux/v0.x/stdlib/built-in/transformations/group/) -[mean()](/flux/v0.x/stdlib/built-in/transformations/aggregates/mean/) -[sum()](/flux/v0.x/stdlib/built-in/transformations/aggregates/sum/) +[aggregateWindow()](/flux/v0.64/stdlib/built-in/transformations/aggregates/aggregatewindow/) +[derivative()](/flux/v0.64/stdlib/built-in/transformations/aggregates/derivative/) +[experimental.group()](/flux/v0.64/stdlib/experimental/group/) +[group()](/flux/v0.64/stdlib/built-in/transformations/group/) +[mean()](/flux/v0.64/stdlib/built-in/transformations/aggregates/mean/) +[sum()](/flux/v0.64/stdlib/built-in/transformations/aggregates/sum/) diff --git a/content/flux/v0.x/stdlib/experimental/bigtable/_index.md b/content/flux/v0.64/stdlib/experimental/bigtable/_index.md similarity index 97% rename from content/flux/v0.x/stdlib/experimental/bigtable/_index.md rename to content/flux/v0.64/stdlib/experimental/bigtable/_index.md index c6ed9ffee9..69aef389ec 100644 --- a/content/flux/v0.x/stdlib/experimental/bigtable/_index.md +++ b/content/flux/v0.64/stdlib/experimental/bigtable/_index.md @@ -4,7 +4,7 @@ description: > The Flux Bigtable package provides tools for working with data in Google Cloud Bigtable databases. Import the `experimental/bigtable` package. menu: - flux_0_x: + flux_0_64: name: Bigtable parent: Experimental weight: 1 diff --git a/content/flux/v0.x/stdlib/experimental/bigtable/from.md b/content/flux/v0.64/stdlib/experimental/bigtable/from.md similarity index 99% rename from content/flux/v0.x/stdlib/experimental/bigtable/from.md rename to content/flux/v0.64/stdlib/experimental/bigtable/from.md index 6a46f522c6..7e1640055b 100644 --- a/content/flux/v0.x/stdlib/experimental/bigtable/from.md +++ b/content/flux/v0.64/stdlib/experimental/bigtable/from.md @@ -3,7 +3,7 @@ title: bigtable.from() function description: > The `bigtable.from()` function retrieves data from a Google Cloud Bigtable data source. menu: - flux_0_x: + flux_0_64: name: bigtable.from parent: Bigtable weight: 1 diff --git a/content/flux/v0.x/stdlib/experimental/csv/_index.md b/content/flux/v0.64/stdlib/experimental/csv/_index.md similarity index 97% rename from content/flux/v0.x/stdlib/experimental/csv/_index.md rename to content/flux/v0.64/stdlib/experimental/csv/_index.md index cfdcf00c31..aa18480d40 100644 --- a/content/flux/v0.x/stdlib/experimental/csv/_index.md +++ b/content/flux/v0.64/stdlib/experimental/csv/_index.md @@ -5,7 +5,7 @@ description: > The Flux Experimental CSV package provides functions for retrieving annotated CSV. Import the `experimental/csv` package. menu: - flux_0_x: + flux_0_64: name: CSV identifier: CSV-exp parent: Experimental diff --git a/content/flux/v0.x/stdlib/experimental/csv/from.md b/content/flux/v0.64/stdlib/experimental/csv/from.md similarity index 93% rename from content/flux/v0.x/stdlib/experimental/csv/from.md rename to content/flux/v0.64/stdlib/experimental/csv/from.md index d37f7d3227..5f957cab7f 100644 --- a/content/flux/v0.x/stdlib/experimental/csv/from.md +++ b/content/flux/v0.64/stdlib/experimental/csv/from.md @@ -3,7 +3,7 @@ title: csv.from() function description: > The experimental `csv.from()` function retrieves annotated CSV from a URL. menu: - flux_0_x: + flux_0_64: name: csv.from * parent: CSV-exp weight: 1 @@ -13,7 +13,7 @@ The experimental `csv.from()` function retrieves annotated CSV **from a URL**. {{% note %}} The experimental `csv.from()` function is an alternative to the standard -[`csv.from()` function](/flux/v0.x/stdlib/csv/from/). +[`csv.from()` function](/flux/v0.64/stdlib/csv/from/). {{% /note %}} _**Function type:** Input_ diff --git a/content/flux/v0.x/stdlib/experimental/geo/_index.md b/content/flux/v0.64/stdlib/experimental/geo/_index.md similarity index 99% rename from content/flux/v0.x/stdlib/experimental/geo/_index.md rename to content/flux/v0.64/stdlib/experimental/geo/_index.md index 36e5c0c2b9..6eab16bc4f 100644 --- a/content/flux/v0.x/stdlib/experimental/geo/_index.md +++ b/content/flux/v0.64/stdlib/experimental/geo/_index.md @@ -6,7 +6,7 @@ description: > such as filtering and grouping by geographic location. Import the `experimental/geo` package. menu: - flux_0_x: + flux_0_64: name: Geo parent: Experimental weight: 1 diff --git a/content/flux/v0.x/stdlib/experimental/geo/astracks.md b/content/flux/v0.64/stdlib/experimental/geo/astracks.md similarity index 98% rename from content/flux/v0.x/stdlib/experimental/geo/astracks.md rename to content/flux/v0.64/stdlib/experimental/geo/astracks.md index ff52c6b232..d7bf79ec0d 100644 --- a/content/flux/v0.x/stdlib/experimental/geo/astracks.md +++ b/content/flux/v0.64/stdlib/experimental/geo/astracks.md @@ -3,7 +3,7 @@ title: geo.asTracks() function description: > The geo.asTracks() function groups rows into tracks (sequential, related data points). menu: - flux_0_x: + flux_0_64: name: geo.asTracks parent: Geo weight: 1 diff --git a/content/flux/v0.x/stdlib/experimental/geo/filterrows.md b/content/flux/v0.64/stdlib/experimental/geo/filterrows.md similarity index 95% rename from content/flux/v0.x/stdlib/experimental/geo/filterrows.md rename to content/flux/v0.64/stdlib/experimental/geo/filterrows.md index 63228b895b..71049ffe05 100644 --- a/content/flux/v0.x/stdlib/experimental/geo/filterrows.md +++ b/content/flux/v0.64/stdlib/experimental/geo/filterrows.md @@ -4,7 +4,7 @@ description: > The geo.filterRows() function filters data by a specified geographic region with the option of strict filtering. menu: - flux_0_x: + flux_0_64: name: geo.filterRows parent: Geo weight: 1 @@ -12,8 +12,8 @@ weight: 1 The `geo.filterRows()` function filters data by a specified geographic region with the option of strict filtering. -This function is a combination of [`geo.gridFilter()`](/flux/v0.x/stdlib/experimental/geo/gridfilter/) -and [`geo.strictFilter()`](/flux/v0.x/stdlib/experimental/geo/strictfilter/). +This function is a combination of [`geo.gridFilter()`](/flux/v0.64/stdlib/experimental/geo/gridfilter/) +and [`geo.strictFilter()`](/flux/v0.64/stdlib/experimental/geo/strictfilter/). _**Function type:** Transformation_ @@ -58,7 +58,7 @@ In most cases, the specified geographic region does not perfectly align with S2 ### region The region containing the desired data points. Specify object properties for the shape. -_See [Region definitions](/flux/v0.x/stdlib/experimental/geo/#region-definitions)._ +_See [Region definitions](/flux/v0.64/stdlib/experimental/geo/#region-definitions)._ _**Data type:** Object_ diff --git a/content/flux/v0.x/stdlib/experimental/geo/gridfilter.md b/content/flux/v0.64/stdlib/experimental/geo/gridfilter.md similarity index 93% rename from content/flux/v0.x/stdlib/experimental/geo/gridfilter.md rename to content/flux/v0.64/stdlib/experimental/geo/gridfilter.md index 7718aad445..caeded60a0 100644 --- a/content/flux/v0.x/stdlib/experimental/geo/gridfilter.md +++ b/content/flux/v0.64/stdlib/experimental/geo/gridfilter.md @@ -3,7 +3,7 @@ title: geo.gridFilter() function description: > The geo.gridFilter() function filters data by a specified geographic region. menu: - flux_0_x: + flux_0_64: name: geo.gridFilter parent: Geo weight: 1 @@ -15,8 +15,8 @@ It compares input data to a set of S2 Cell ID tokens located in the specified [r {{% note %}} S2 Grid cells may not perfectly align with the defined region, so results may include data with coordinates outside the region, but inside S2 grid cells partially covered by the region. -Use [`toRows()`](/flux/v0.x/stdlib/experimental/geo/torows/) and -[`geo.strictFilter()`](/flux/v0.x/stdlib/experimental/geo/strictfilter/) +Use [`toRows()`](/flux/v0.64/stdlib/experimental/geo/torows/) and +[`geo.strictFilter()`](/flux/v0.64/stdlib/experimental/geo/strictfilter/) after `geo.gridFilter()` to precisely filter points. _See [Non-strict and strict filtering](#non-strict-and-strict-filtering) below._ {{% /note %}} @@ -62,7 +62,7 @@ In most cases, the specified geographic region does not perfectly align with S2 ### region The region containing the desired data points. Specify object properties for the shape. -_See [Region definitions](/flux/v0.x/stdlib/experimental/geo/#region-definitions)._ +_See [Region definitions](/flux/v0.64/stdlib/experimental/geo/#region-definitions)._ _**Data type:** Object_ diff --git a/content/flux/v0.x/stdlib/experimental/geo/groupbyarea.md b/content/flux/v0.64/stdlib/experimental/geo/groupbyarea.md similarity index 99% rename from content/flux/v0.x/stdlib/experimental/geo/groupbyarea.md rename to content/flux/v0.64/stdlib/experimental/geo/groupbyarea.md index 67ca820733..4aa02654bc 100644 --- a/content/flux/v0.x/stdlib/experimental/geo/groupbyarea.md +++ b/content/flux/v0.64/stdlib/experimental/geo/groupbyarea.md @@ -3,7 +3,7 @@ title: geo.groupByArea() function description: > The geo.groupByArea() function groups rows by geographic area. menu: - flux_0_x: + flux_0_64: name: geo.groupByArea parent: Geo weight: 1 diff --git a/content/flux/v0.x/stdlib/experimental/geo/s2cellidtoken.md b/content/flux/v0.64/stdlib/experimental/geo/s2cellidtoken.md similarity index 99% rename from content/flux/v0.x/stdlib/experimental/geo/s2cellidtoken.md rename to content/flux/v0.64/stdlib/experimental/geo/s2cellidtoken.md index 47dae3e6b3..0e06b8c34d 100644 --- a/content/flux/v0.x/stdlib/experimental/geo/s2cellidtoken.md +++ b/content/flux/v0.64/stdlib/experimental/geo/s2cellidtoken.md @@ -3,7 +3,7 @@ title: geo.s2CellIDToken() function description: > The `geo.s2CellIDToken()` function returns an S2 cell ID token. menu: - flux_0_x: + flux_0_64: name: geo.s2CellIDToken parent: Geo weight: 1 diff --git a/content/flux/v0.x/stdlib/experimental/geo/strictfilter.md b/content/flux/v0.64/stdlib/experimental/geo/strictfilter.md similarity index 87% rename from content/flux/v0.x/stdlib/experimental/geo/strictfilter.md rename to content/flux/v0.64/stdlib/experimental/geo/strictfilter.md index ae2d7eb30a..d62e09a890 100644 --- a/content/flux/v0.x/stdlib/experimental/geo/strictfilter.md +++ b/content/flux/v0.64/stdlib/experimental/geo/strictfilter.md @@ -3,19 +3,19 @@ title: geo.strictFilter() function description: > The geo.strictFilter() function filters data by latitude and longitude. menu: - flux_0_x: + flux_0_64: name: geo.strictFilter parent: Geo weight: 1 --- The `geo.strictFilter()` function filters data by latitude and longitude in a specified region. -This filter is more strict than [`geo.gridFilter()`](/flux/v0.x/stdlib/experimental/geo/gridfilter/), +This filter is more strict than [`geo.gridFilter()`](/flux/v0.64/stdlib/experimental/geo/gridfilter/), but for the best performance, use `geo.strictFilter()` **after** `geo.gridFilter()`. {{% note %}} `geo.strictFilter()` requires `lat` and `lon` columns in each row. -Use [`geo.toRows()`](/flux/v0.x/stdlib/experimental/geo/gridfilter/) +Use [`geo.toRows()`](/flux/v0.64/stdlib/experimental/geo/gridfilter/) to pivot `lat` and `lon` fields into each row **before** using `geo.strictFilter()`. {{% /note %}} @@ -34,7 +34,7 @@ geo.strictFilter( ### region The region containing the desired data points. Specify object properties for the shape. -_See [Region definitions](/flux/v0.x/stdlib/experimental/geo/#region-definitions)._ +_See [Region definitions](/flux/v0.64/stdlib/experimental/geo/#region-definitions)._ _**Data type:** Object_ diff --git a/content/flux/v0.x/stdlib/experimental/geo/torows.md b/content/flux/v0.64/stdlib/experimental/geo/torows.md similarity index 98% rename from content/flux/v0.x/stdlib/experimental/geo/torows.md rename to content/flux/v0.64/stdlib/experimental/geo/torows.md index 5d60467ef4..70802e8c49 100644 --- a/content/flux/v0.x/stdlib/experimental/geo/torows.md +++ b/content/flux/v0.64/stdlib/experimental/geo/torows.md @@ -3,7 +3,7 @@ title: geo.toRows() function description: > The geo.toRows() function ... menu: - flux_0_x: + flux_0_64: name: geo.toRows parent: Geo weight: 1 diff --git a/content/flux/v0.x/stdlib/experimental/group.md b/content/flux/v0.64/stdlib/experimental/group.md similarity index 84% rename from content/flux/v0.x/stdlib/experimental/group.md rename to content/flux/v0.64/stdlib/experimental/group.md index 0103f7bc8d..1d6a35cfff 100644 --- a/content/flux/v0.x/stdlib/experimental/group.md +++ b/content/flux/v0.64/stdlib/experimental/group.md @@ -4,14 +4,14 @@ description: > The `experimental.group()` function introduces an `extend` mode to the existing `group()` function. menu: - flux_0_x: + flux_0_64: name: experimental.group parent: Experimental weight: 2 --- The `experimental.group()` function introduces an `extend` mode to the existing -[`group()`](/flux/v0.x/stdlib/built-in/transformations/group/) function. +[`group()`](/flux/v0.64/stdlib/built-in/transformations/group/) function. _**Function type:** Transformation_ @@ -44,7 +44,7 @@ _**Data type:** String_ #### extend Appends columns defined in the [`columns` parameter](#columns) to all existing -[group keys](/flux/v0.x/introduction/getting-started/#group-keys). +[group keys](/flux/v0.64/introduction/getting-started/#group-keys). ## Examples @@ -58,4 +58,4 @@ from(bucket: "telegraf/autogen") --- ### Related functions -- [group()](/flux/v0.x/stdlib/built-in/transformations/group/) +- [group()](/flux/v0.64/stdlib/built-in/transformations/group/) diff --git a/content/flux/v0.x/stdlib/experimental/http/_index.md b/content/flux/v0.64/stdlib/experimental/http/_index.md similarity index 97% rename from content/flux/v0.x/stdlib/experimental/http/_index.md rename to content/flux/v0.64/stdlib/experimental/http/_index.md index f23cdd8584..2de21d434d 100644 --- a/content/flux/v0.x/stdlib/experimental/http/_index.md +++ b/content/flux/v0.64/stdlib/experimental/http/_index.md @@ -5,7 +5,7 @@ description: > using HTTP protocol. Import the `experimental/http` package. menu: - flux_0_x: + flux_0_64: name: HTTP identifier: HTTP-exp parent: Experimental diff --git a/content/flux/v0.x/stdlib/experimental/http/get.md b/content/flux/v0.64/stdlib/experimental/http/get.md similarity index 99% rename from content/flux/v0.x/stdlib/experimental/http/get.md rename to content/flux/v0.64/stdlib/experimental/http/get.md index 725130ed9e..cb5700fed8 100644 --- a/content/flux/v0.x/stdlib/experimental/http/get.md +++ b/content/flux/v0.64/stdlib/experimental/http/get.md @@ -4,7 +4,7 @@ description: > The `http.get()` function submits an HTTP GET request to the specified URL and returns the HTTP status code, response body, and response headers. menu: - flux_0_x: + flux_0_64: name: http.get parent: HTTP-exp weight: 1 diff --git a/content/flux/v0.x/stdlib/experimental/mqtt/_index.md b/content/flux/v0.64/stdlib/experimental/mqtt/_index.md similarity index 97% rename from content/flux/v0.x/stdlib/experimental/mqtt/_index.md rename to content/flux/v0.64/stdlib/experimental/mqtt/_index.md index cd73b66b6f..ce1065818c 100644 --- a/content/flux/v0.x/stdlib/experimental/mqtt/_index.md +++ b/content/flux/v0.64/stdlib/experimental/mqtt/_index.md @@ -5,7 +5,7 @@ description: > The Flux MQTT package provides functions for working with MQTT protocol. Import the `experimental/mqtt` package. menu: - flux_0_x: + flux_0_64: name: MQTT parent: Experimental weight: 1 diff --git a/content/flux/v0.x/stdlib/experimental/mqtt/to.md b/content/flux/v0.64/stdlib/experimental/mqtt/to.md similarity index 99% rename from content/flux/v0.x/stdlib/experimental/mqtt/to.md rename to content/flux/v0.64/stdlib/experimental/mqtt/to.md index f53d43f886..5ee1f9a5c0 100644 --- a/content/flux/v0.x/stdlib/experimental/mqtt/to.md +++ b/content/flux/v0.64/stdlib/experimental/mqtt/to.md @@ -3,7 +3,7 @@ title: mqtt.to() function description: > The `mqtt.to()` function outputs data to an MQTT broker using MQTT protocol. menu: - flux_0_x: + flux_0_64: name: mqtt.to parent: MQTT weight: 301 diff --git a/content/flux/v0.x/stdlib/experimental/objectkeys.md b/content/flux/v0.64/stdlib/experimental/objectkeys.md similarity index 98% rename from content/flux/v0.x/stdlib/experimental/objectkeys.md rename to content/flux/v0.64/stdlib/experimental/objectkeys.md index f731818eff..39382181d4 100644 --- a/content/flux/v0.x/stdlib/experimental/objectkeys.md +++ b/content/flux/v0.64/stdlib/experimental/objectkeys.md @@ -3,7 +3,7 @@ title: experimental.objectKeys() function description: > The `experimental.objectKeys()` function returns an array of keys in a specified object. menu: - flux_0_x: + flux_0_64: name: experimental.objectKeys parent: Experimental weight: 2 diff --git a/content/flux/v0.x/stdlib/experimental/prometheus/_index.md b/content/flux/v0.64/stdlib/experimental/prometheus/_index.md similarity index 97% rename from content/flux/v0.x/stdlib/experimental/prometheus/_index.md rename to content/flux/v0.64/stdlib/experimental/prometheus/_index.md index 8256b8dba1..b1b393ff2a 100644 --- a/content/flux/v0.x/stdlib/experimental/prometheus/_index.md +++ b/content/flux/v0.64/stdlib/experimental/prometheus/_index.md @@ -4,7 +4,7 @@ description: > The Flux Prometheus package provides functions for working with Prometheus-formatted metrics. Import the `experimental/prometheus` package. menu: - flux_0_x: + flux_0_64: name: Prometheus parent: Experimental weight: 1 diff --git a/content/flux/v0.x/stdlib/experimental/prometheus/histogramquantile.md b/content/flux/v0.64/stdlib/experimental/prometheus/histogramquantile.md similarity index 98% rename from content/flux/v0.x/stdlib/experimental/prometheus/histogramquantile.md rename to content/flux/v0.64/stdlib/experimental/prometheus/histogramquantile.md index f2944d21b5..67a20c2a1e 100644 --- a/content/flux/v0.x/stdlib/experimental/prometheus/histogramquantile.md +++ b/content/flux/v0.64/stdlib/experimental/prometheus/histogramquantile.md @@ -4,7 +4,7 @@ description: > The `prometheus.histogramQuantile()` function calculates quantiles on a set of values assuming the given histogram data is scraped or read from a Prometheus data source. menu: - flux_0_x: + flux_0_64: name: prometheus.histogramQuantile parent: Prometheus weight: 301 diff --git a/content/flux/v0.x/stdlib/experimental/prometheus/scrape.md b/content/flux/v0.64/stdlib/experimental/prometheus/scrape.md similarity index 98% rename from content/flux/v0.x/stdlib/experimental/prometheus/scrape.md rename to content/flux/v0.64/stdlib/experimental/prometheus/scrape.md index 0c8b5eb825..446c24880f 100644 --- a/content/flux/v0.x/stdlib/experimental/prometheus/scrape.md +++ b/content/flux/v0.64/stdlib/experimental/prometheus/scrape.md @@ -4,7 +4,7 @@ description: > The `prometheus.scrape()` function retrieves Prometheus-formatted metrics from a specified URL. menu: - flux_0_x: + flux_0_64: name: prometheus.scrape parent: Prometheus weight: 1 diff --git a/content/flux/v0.x/stdlib/experimental/query/_index.md b/content/flux/v0.64/stdlib/experimental/query/_index.md similarity index 93% rename from content/flux/v0.x/stdlib/experimental/query/_index.md rename to content/flux/v0.64/stdlib/experimental/query/_index.md index cef158760d..48f58a6f32 100644 --- a/content/flux/v0.x/stdlib/experimental/query/_index.md +++ b/content/flux/v0.64/stdlib/experimental/query/_index.md @@ -5,7 +5,7 @@ description: > The Flux Query package provides functions meant to simplify common InfluxDB queries. Import the `experimental/query` package. menu: - flux_0_x: + flux_0_64: name: Query parent: Experimental weight: 1 @@ -21,7 +21,7 @@ import "experimental/query" {{< function-list >}} ## inBucket() -The primary function in this package is [`query.inBucket()`](/flux/v0.x/stdlib/experimental/query/inbucket/), +The primary function in this package is [`query.inBucket()`](/flux/v0.64/stdlib/experimental/query/inbucket/), which uses all other functions in this package. ```js diff --git a/content/flux/v0.x/stdlib/experimental/query/filterfields.md b/content/flux/v0.64/stdlib/experimental/query/filterfields.md similarity index 82% rename from content/flux/v0.x/stdlib/experimental/query/filterfields.md rename to content/flux/v0.64/stdlib/experimental/query/filterfields.md index 58e373dd64..c1f2c5cc79 100644 --- a/content/flux/v0.x/stdlib/experimental/query/filterfields.md +++ b/content/flux/v0.64/stdlib/experimental/query/filterfields.md @@ -3,7 +3,7 @@ title: query.filterFields() function description: > The `query.filterFields()` function filters input data by field. menu: - flux_0_x: + flux_0_64: name: query.filterFields parent: Query weight: 1 @@ -53,6 +53,6 @@ filterFields = (tables=<-, fields=[]) => ``` _**Used functions:**_ -[contains()](/flux/v0.x/stdlib/built-in/tests/contains/) -[filter()](/flux/v0.x/stdlib/built-in/transformations/filter/) -[length()](/flux/v0.x/stdlib/built-in/misc/length/) +[contains()](/flux/v0.64/stdlib/built-in/tests/contains/) +[filter()](/flux/v0.64/stdlib/built-in/transformations/filter/) +[length()](/flux/v0.64/stdlib/built-in/misc/length/) diff --git a/content/flux/v0.x/stdlib/experimental/query/filtermeasurement.md b/content/flux/v0.64/stdlib/experimental/query/filtermeasurement.md similarity index 92% rename from content/flux/v0.x/stdlib/experimental/query/filtermeasurement.md rename to content/flux/v0.64/stdlib/experimental/query/filtermeasurement.md index ab7fe3f1c3..7481d8a767 100644 --- a/content/flux/v0.x/stdlib/experimental/query/filtermeasurement.md +++ b/content/flux/v0.64/stdlib/experimental/query/filtermeasurement.md @@ -3,7 +3,7 @@ title: query.filterMeasurement() function description: > The `query.filterMeasurement()` function filters input data by measurement. menu: - flux_0_x: + flux_0_64: name: query.filterMeasurement parent: Query weight: 1 @@ -50,4 +50,4 @@ filterMeasurement = (tables=<-, measurement) => ``` _**Used functions:**_ -[filter()](/flux/v0.x/stdlib/built-in/transformations/filter/) +[filter()](/flux/v0.64/stdlib/built-in/transformations/filter/) diff --git a/content/flux/v0.x/stdlib/experimental/query/fromrange.md b/content/flux/v0.64/stdlib/experimental/query/fromrange.md similarity index 91% rename from content/flux/v0.x/stdlib/experimental/query/fromrange.md rename to content/flux/v0.64/stdlib/experimental/query/fromrange.md index 9bae5d4568..431ea2b14e 100644 --- a/content/flux/v0.x/stdlib/experimental/query/fromrange.md +++ b/content/flux/v0.64/stdlib/experimental/query/fromrange.md @@ -4,7 +4,7 @@ description: > The `query.fromRange()` function returns all data from a specified bucket within given time bounds. menu: - flux_0_x: + flux_0_64: name: query.fromRange parent: Query weight: 1 @@ -72,5 +72,5 @@ fromRange = (bucket, start, stop=now()) => ``` _**Used functions:**_ -[from()](/flux/v0.x/stdlib/built-in/inputs/from/) -[range()](/flux/v0.x/stdlib/built-in/transformations/range/) +[from()](/flux/v0.64/stdlib/built-in/inputs/from/) +[range()](/flux/v0.64/stdlib/built-in/transformations/range/) diff --git a/content/flux/v0.x/stdlib/experimental/query/inbucket.md b/content/flux/v0.64/stdlib/experimental/query/inbucket.md similarity index 88% rename from content/flux/v0.x/stdlib/experimental/query/inbucket.md rename to content/flux/v0.64/stdlib/experimental/query/inbucket.md index 20378fb55e..2d284c7554 100644 --- a/content/flux/v0.x/stdlib/experimental/query/inbucket.md +++ b/content/flux/v0.64/stdlib/experimental/query/inbucket.md @@ -4,7 +4,7 @@ description: > The `query.inBucket()` function queries data from a specified bucket within given time bounds, filters data by measurement, field, and optional predicate expressions. menu: - flux_0_x: + flux_0_64: name: query.inBucket parent: Query weight: 1 @@ -109,7 +109,7 @@ inBucket = ( ``` _**Used functions:**_ -[filter()](/flux/v0.x/stdlib/built-in/transformations/filter/) -[query.filterFields()](/flux/v0.x/stdlib/experimental/query/filterfields/) -[query.filterMeasurement()](/flux/v0.x/stdlib/experimental/query/filtermeasurement/) -[query.fromRange()](/flux/v0.x/stdlib/experimental/query/fromrange/) +[filter()](/flux/v0.64/stdlib/built-in/transformations/filter/) +[query.filterFields()](/flux/v0.64/stdlib/experimental/query/filterfields/) +[query.filterMeasurement()](/flux/v0.64/stdlib/experimental/query/filtermeasurement/) +[query.fromRange()](/flux/v0.64/stdlib/experimental/query/fromrange/) diff --git a/content/flux/v0.x/stdlib/experimental/set.md b/content/flux/v0.64/stdlib/experimental/set.md similarity index 92% rename from content/flux/v0.x/stdlib/experimental/set.md rename to content/flux/v0.64/stdlib/experimental/set.md index 8dce588136..5bdad60534 100644 --- a/content/flux/v0.x/stdlib/experimental/set.md +++ b/content/flux/v0.64/stdlib/experimental/set.md @@ -3,7 +3,7 @@ title: experimental.set() function description: > The `experimental.set()` function sets multiple static column values on all records. menu: - flux_0_x: + flux_0_64: name: experimental.set parent: Experimental weight: 2 @@ -14,7 +14,7 @@ If a column already exists, the function updates the existing value. If a column does not exist, the function adds it with the specified value. _Once sufficiently vetted, `experimental.set()` will replace the existing -[`set()` function](/flux/v0.x/stdlib/built-in/transformations/set/)._ +[`set()` function](/flux/v0.64/stdlib/built-in/transformations/set/)._ _**Function type:** Transformation_ @@ -70,4 +70,4 @@ data --- ### Related functions -- [set()](/flux/v0.x/stdlib/built-in/transformations/set/) +- [set()](/flux/v0.64/stdlib/built-in/transformations/set/) diff --git a/content/flux/v0.x/stdlib/experimental/subduration.md b/content/flux/v0.64/stdlib/experimental/subduration.md similarity index 92% rename from content/flux/v0.x/stdlib/experimental/subduration.md rename to content/flux/v0.64/stdlib/experimental/subduration.md index e2b8ab085a..10ff5945b4 100644 --- a/content/flux/v0.x/stdlib/experimental/subduration.md +++ b/content/flux/v0.64/stdlib/experimental/subduration.md @@ -4,7 +4,7 @@ description: > The `experimental.subDuration()` function subtracts a duration from a time value and returns a the resulting time value. menu: - flux_0_x: + flux_0_64: name: experimental.subDuration parent: Experimental weight: 2 @@ -58,4 +58,4 @@ experimental.subDuration( --- ### Related functions -- [experimental.addDuration()](/flux/v0.x/stdlib/experimental/addduration/) +- [experimental.addDuration()](/flux/v0.64/stdlib/experimental/addduration/) diff --git a/content/flux/v0.x/stdlib/experimental/to.md b/content/flux/v0.64/stdlib/experimental/to.md similarity index 93% rename from content/flux/v0.x/stdlib/experimental/to.md rename to content/flux/v0.64/stdlib/experimental/to.md index 0108bdd358..3a74e4a3a0 100644 --- a/content/flux/v0.x/stdlib/experimental/to.md +++ b/content/flux/v0.64/stdlib/experimental/to.md @@ -4,7 +4,7 @@ description: > The `experimental.to()` function writes data to an InfluxDB v2.0 bucket. The function structures data differently than the built-in `to()` function. menu: - flux_0_x: + flux_0_64: name: experimental.to parent: Experimental weight: 2 @@ -12,7 +12,7 @@ weight: 2 The `experimental.to()` function writes data to an InfluxDB v2.0 bucket, but in a [different structure](#expected-data-structure) than the -[built-in `to()` function](/flux/v0.x/stdlib/built-in/outputs/to/). +[built-in `to()` function](/flux/v0.64/stdlib/built-in/outputs/to/). _**Function type:** Output_ @@ -51,7 +51,7 @@ the **field value** as the **column value**. | ----- | ------------ | --------- | | timestamp | measurement-name | field value | -If using the built-in `from()` function, use [`pivot()`](/flux/v0.x/stdlib/built-in/transformations/pivot/) +If using the built-in `from()` function, use [`pivot()`](/flux/v0.64/stdlib/built-in/transformations/pivot/) to transform data into the structure `experimetnal.to()` expects. _[See the example below](#use-pivot-to-shape-data-for-experimental-to)._ @@ -105,4 +105,4 @@ from(bucket: "telegraf/autogen") --- ### Related functions -- [to()](/flux/v0.x/stdlib/built-in/outputs/to/) +- [to()](/flux/v0.64/stdlib/built-in/outputs/to/) diff --git a/content/flux/v0.x/stdlib/http/_index.md b/content/flux/v0.64/stdlib/http/_index.md similarity index 96% rename from content/flux/v0.x/stdlib/http/_index.md rename to content/flux/v0.64/stdlib/http/_index.md index a9901b758f..179a893645 100644 --- a/content/flux/v0.x/stdlib/http/_index.md +++ b/content/flux/v0.64/stdlib/http/_index.md @@ -4,7 +4,7 @@ description: > The Flux HTTP package provides functions for transferring data using the HTTP protocol. Import the `http` package. menu: - flux_0_x: + flux_0_64: name: HTTP parent: Standard library weight: 1 diff --git a/content/flux/v0.x/stdlib/http/basicauth.md b/content/flux/v0.64/stdlib/http/basicauth.md similarity index 98% rename from content/flux/v0.x/stdlib/http/basicauth.md rename to content/flux/v0.64/stdlib/http/basicauth.md index 1defacbb87..d01e63cc80 100644 --- a/content/flux/v0.x/stdlib/http/basicauth.md +++ b/content/flux/v0.64/stdlib/http/basicauth.md @@ -4,7 +4,7 @@ description: > The `http.basicAuth()` function returns a Base64-encoded basic authentication header using a specified username and password combination. menu: - flux_0_x: + flux_0_64: name: http.basicAuth parent: HTTP weight: 1 diff --git a/content/flux/v0.x/stdlib/http/endpoint.md b/content/flux/v0.64/stdlib/http/endpoint.md similarity index 91% rename from content/flux/v0.x/stdlib/http/endpoint.md rename to content/flux/v0.64/stdlib/http/endpoint.md index 3308c07c7d..6f22ea026e 100644 --- a/content/flux/v0.x/stdlib/http/endpoint.md +++ b/content/flux/v0.64/stdlib/http/endpoint.md @@ -3,7 +3,7 @@ title: http.endpoint() function description: > The `http.endpoint()` function sends output data to an HTTP URL using the POST request method. menu: - flux_0_x: + flux_0_64: name: http.endpoint parent: HTTP weight: 1 @@ -44,4 +44,4 @@ The returned object must include the following fields: - `headers` - `data` -_For more information, see [`http.post()`](/flux/v0.x/stdlib/http/post/)_ +_For more information, see [`http.post()`](/flux/v0.64/stdlib/http/post/)_ diff --git a/content/flux/v0.x/stdlib/http/post.md b/content/flux/v0.64/stdlib/http/post.md similarity index 98% rename from content/flux/v0.x/stdlib/http/post.md rename to content/flux/v0.64/stdlib/http/post.md index 8b11a948a8..965452de8e 100644 --- a/content/flux/v0.x/stdlib/http/post.md +++ b/content/flux/v0.64/stdlib/http/post.md @@ -4,7 +4,7 @@ description: > The `http.post()` function submits an HTTP POST request to the specified URL with headers and data. The HTTP status code is returned. menu: - flux_0_x: + flux_0_64: name: http.post parent: HTTP weight: 1 diff --git a/content/flux/v0.x/stdlib/influxdb-v1/_index.md b/content/flux/v0.64/stdlib/influxdb-v1/_index.md similarity index 92% rename from content/flux/v0.x/stdlib/influxdb-v1/_index.md rename to content/flux/v0.64/stdlib/influxdb-v1/_index.md index dc60bfc618..c68b980156 100644 --- a/content/flux/v0.x/stdlib/influxdb-v1/_index.md +++ b/content/flux/v0.64/stdlib/influxdb-v1/_index.md @@ -5,12 +5,12 @@ description: > an InfluxDB v1.x database or structured using the InfluxDB v1 data structure. Import the `influxdata/influxdb/v1` package. menu: - flux_0_x: + flux_0_64: name: InfluxDB v1 parent: Standard library weight: 1 aliases: - - /flux/v0.x/functions/influxdb-v1/ + - /flux/v0.64/functions/influxdb-v1/ --- The Flux InfluxDB v1 package provides functions for managing data from an InfluxDB v1.x diff --git a/content/flux/v0.x/stdlib/influxdb-v1/databases.md b/content/flux/v0.64/stdlib/influxdb-v1/databases.md similarity index 98% rename from content/flux/v0.x/stdlib/influxdb-v1/databases.md rename to content/flux/v0.64/stdlib/influxdb-v1/databases.md index 8eba15a741..c81633fbbd 100644 --- a/content/flux/v0.x/stdlib/influxdb-v1/databases.md +++ b/content/flux/v0.64/stdlib/influxdb-v1/databases.md @@ -2,7 +2,7 @@ title: v1.databases() function description: The v1.databases() function returns a list of databases in an InfluxDB 1.7+ instance. menu: - flux_0_x: + flux_0_64: name: v1.databases parent: InfluxDB v1 weight: 1 diff --git a/content/flux/v0.x/stdlib/influxdb-v1/fieldsascols.md b/content/flux/v0.64/stdlib/influxdb-v1/fieldsascols.md similarity index 81% rename from content/flux/v0.x/stdlib/influxdb-v1/fieldsascols.md rename to content/flux/v0.64/stdlib/influxdb-v1/fieldsascols.md index abd7757fb2..7aad8756d5 100644 --- a/content/flux/v0.x/stdlib/influxdb-v1/fieldsascols.md +++ b/content/flux/v0.64/stdlib/influxdb-v1/fieldsascols.md @@ -3,11 +3,11 @@ title: v1.fieldsAsCols() function description: The v1.fieldsAsCols() function is pivots a table and automatically aligns fields within each input table that have the same timestamp. aliases: - - /flux/v0.x/functions/inputs/fromrows - - /flux/v0.x/functions/transformations/influxfieldsascols - - /flux/v0.x/functions/influxdb-v1/fieldsascols/ + - /flux/v0.64/functions/inputs/fromrows + - /flux/v0.64/functions/transformations/influxfieldsascols + - /flux/v0.64/functions/influxdb-v1/fieldsascols/ menu: - flux_0_x: + flux_0_64: name: v1.fieldsAsCols parent: InfluxDB v1 weight: 1 @@ -47,4 +47,4 @@ fieldsAsCols = (tables=<-) => ``` _**Used functions:** -[pivot()](/flux/v0.x/stdlib/built-in/transformations/pivot)_ +[pivot()](/flux/v0.64/stdlib/built-in/transformations/pivot)_ diff --git a/content/flux/v0.x/stdlib/influxdb-v1/measurements.md b/content/flux/v0.64/stdlib/influxdb-v1/measurements.md similarity index 87% rename from content/flux/v0.x/stdlib/influxdb-v1/measurements.md rename to content/flux/v0.64/stdlib/influxdb-v1/measurements.md index bd67f638c4..4d2a939f83 100644 --- a/content/flux/v0.x/stdlib/influxdb-v1/measurements.md +++ b/content/flux/v0.64/stdlib/influxdb-v1/measurements.md @@ -3,12 +3,12 @@ title: v1.measurements() function description: The v1.measurements() function returns a list of measurements in a specific bucket. menu: - flux_0_x: + flux_0_64: name: v1.measurements parent: InfluxDB v1 weight: 1 aliases: - - /flux/v0.x/functions/influxdb-v1/measurements/ + - /flux/v0.64/functions/influxdb-v1/measurements/ --- The `v1.measurements()` function returns a list of measurements in a specific bucket. @@ -34,7 +34,7 @@ measurements = (bucket) => ``` _**Used functions:** -[tagValues()](/flux/v0.x/stdlib/influxdb-v1/tagvalues)_ +[tagValues()](/flux/v0.64/stdlib/influxdb-v1/tagvalues)_
    diff --git a/content/flux/v0.x/stdlib/influxdb-v1/measurementtagkeys.md b/content/flux/v0.64/stdlib/influxdb-v1/measurementtagkeys.md similarity index 89% rename from content/flux/v0.x/stdlib/influxdb-v1/measurementtagkeys.md rename to content/flux/v0.64/stdlib/influxdb-v1/measurementtagkeys.md index 817c43d4d3..661c4580cf 100644 --- a/content/flux/v0.x/stdlib/influxdb-v1/measurementtagkeys.md +++ b/content/flux/v0.64/stdlib/influxdb-v1/measurementtagkeys.md @@ -3,12 +3,12 @@ title: v1.measurementTagKeys() function description: The v1.measurementTagKeys() function returns a list of tag keys for a specific measurement. menu: - flux_0_x: + flux_0_64: name: v1.measurementTagKeys parent: InfluxDB v1 weight: 1 aliases: - - /flux/v0.x/functions/influxdb-v1/measurementtagkeys/ + - /flux/v0.64/functions/influxdb-v1/measurementtagkeys/ --- The `v1.measurementTagKeys()` function returns a list of tag keys for a specific measurement. @@ -44,7 +44,7 @@ measurementTagKeys = (bucket, measurement) => ``` _**Used functions:** -[tagKeys()](/flux/v0.x/stdlib/influxdb-v1/tagkeys)_ +[tagKeys()](/flux/v0.64/stdlib/influxdb-v1/tagkeys)_
    diff --git a/content/flux/v0.x/stdlib/influxdb-v1/measurementtagvalues.md b/content/flux/v0.64/stdlib/influxdb-v1/measurementtagvalues.md similarity index 90% rename from content/flux/v0.x/stdlib/influxdb-v1/measurementtagvalues.md rename to content/flux/v0.64/stdlib/influxdb-v1/measurementtagvalues.md index f0c0c821c7..a0e2093c96 100644 --- a/content/flux/v0.x/stdlib/influxdb-v1/measurementtagvalues.md +++ b/content/flux/v0.64/stdlib/influxdb-v1/measurementtagvalues.md @@ -3,12 +3,12 @@ title: v1.measurementTagValues() function description: The v1.measurementTagValues() function returns a list of tag values for a specific measurement. menu: - flux_0_x: + flux_0_64: name: v1.measurementTagValues parent: InfluxDB v1 weight: 1 aliases: - - /flux/v0.x/functions/influxdb-v1/measurementtagvalues/ + - /flux/v0.64/functions/influxdb-v1/measurementtagvalues/ --- The `v1.measurementTagValues()` function returns a list of tag values for a specific measurement. @@ -55,7 +55,7 @@ measurementTagValues = (bucket, measurement, tag) => ``` _**Used functions:** -[tagValues()](/flux/v0.x/stdlib/influxdb-v1/tagvalues)_ +[tagValues()](/flux/v0.64/stdlib/influxdb-v1/tagvalues)_
    diff --git a/content/flux/v0.x/stdlib/influxdb-v1/tagkeys.md b/content/flux/v0.64/stdlib/influxdb-v1/tagkeys.md similarity index 77% rename from content/flux/v0.x/stdlib/influxdb-v1/tagkeys.md rename to content/flux/v0.64/stdlib/influxdb-v1/tagkeys.md index dc58ca73ca..dd8cabc6bf 100644 --- a/content/flux/v0.x/stdlib/influxdb-v1/tagkeys.md +++ b/content/flux/v0.64/stdlib/influxdb-v1/tagkeys.md @@ -3,12 +3,12 @@ title: v1.tagKeys() function description: The v1.tagKeys() function returns a list of tag keys for all series that match the predicate. menu: - flux_0_x: + flux_0_64: name: v1.tagKeys parent: InfluxDB v1 weight: 1 aliases: - - /flux/v0.x/functions/influxdb-v1/tagkeys/ + - /flux/v0.64/functions/influxdb-v1/tagkeys/ --- The `v1.tagKeys()` function returns a list of tag keys for all series that match the [`predicate`](#predicate). @@ -67,12 +67,12 @@ tagKeys = (bucket, predicate=(r) => true, start=-30d) => ``` _**Used functions:** -[from](/flux/v0.x/stdlib/built-in/inputs/from/), -[range](/flux/v0.x/stdlib/built-in/transformations/range/), -[filter](/flux/v0.x/stdlib/built-in/transformations/filter/), -[keys](/flux/v0.x/stdlib/built-in/transformations/keys/), -[keep](/flux/v0.x/stdlib/built-in/transformations/keep/), -[distinct](/flux/v0.x/stdlib/built-in/transformations/selectors/distinct)_ +[from](/flux/v0.64/stdlib/built-in/inputs/from/), +[range](/flux/v0.64/stdlib/built-in/transformations/range/), +[filter](/flux/v0.64/stdlib/built-in/transformations/filter/), +[keys](/flux/v0.64/stdlib/built-in/transformations/keys/), +[keep](/flux/v0.64/stdlib/built-in/transformations/keep/), +[distinct](/flux/v0.64/stdlib/built-in/transformations/selectors/distinct)_
    diff --git a/content/flux/v0.x/stdlib/influxdb-v1/tagvalues.md b/content/flux/v0.64/stdlib/influxdb-v1/tagvalues.md similarity index 78% rename from content/flux/v0.x/stdlib/influxdb-v1/tagvalues.md rename to content/flux/v0.64/stdlib/influxdb-v1/tagvalues.md index 73196792f6..31b5e6e13e 100644 --- a/content/flux/v0.x/stdlib/influxdb-v1/tagvalues.md +++ b/content/flux/v0.64/stdlib/influxdb-v1/tagvalues.md @@ -2,12 +2,12 @@ title: v1.tagValues() function description: placeholder menu: - flux_0_x: + flux_0_64: name: v1.tagValues parent: InfluxDB v1 weight: 1 aliases: - - /flux/v0.x/functions/influxdb-v1/tagvalues/ + - /flux/v0.64/functions/influxdb-v1/tagvalues/ --- The `v1.tagValues()` function returns a list unique values for a given tag. @@ -75,12 +75,12 @@ tagValues = (bucket, tag, predicate=(r) => true, start=-30d) => ``` _**Used functions:** -[from](/flux/v0.x/stdlib/built-in/inputs/from/), -[range](/flux/v0.x/stdlib/built-in/transformations/range/), -[filter](/flux/v0.x/stdlib/built-in/transformations/filter/), -[group](/flux/v0.x/stdlib/built-in/transformations/group/), -[distinct](/flux/v0.x/stdlib/built-in/transformations/selectors/distinct/), -[keep](/flux/v0.x/stdlib/built-in/transformations/keep/)_ +[from](/flux/v0.64/stdlib/built-in/inputs/from/), +[range](/flux/v0.64/stdlib/built-in/transformations/range/), +[filter](/flux/v0.64/stdlib/built-in/transformations/filter/), +[group](/flux/v0.64/stdlib/built-in/transformations/group/), +[distinct](/flux/v0.64/stdlib/built-in/transformations/selectors/distinct/), +[keep](/flux/v0.64/stdlib/built-in/transformations/keep/)_
    diff --git a/content/flux/v0.x/stdlib/json/encode.md b/content/flux/v0.64/stdlib/json/encode.md similarity index 88% rename from content/flux/v0.x/stdlib/json/encode.md rename to content/flux/v0.64/stdlib/json/encode.md index 7db7f451d9..984d8d1af9 100644 --- a/content/flux/v0.x/stdlib/json/encode.md +++ b/content/flux/v0.64/stdlib/json/encode.md @@ -2,12 +2,12 @@ title: json.encode() function description: The json.encode() function converts a value into JSON bytes. menu: - flux_0_x: + flux_0_64: name: json.encode parent: JSON weight: 1 aliases: - - /flux/v0.x/functions/json/encode/ + - /flux/v0.64/functions/json/encode/ draft: true --- @@ -21,7 +21,7 @@ import "json" json.encode(v: "some value") ``` -This function encodes [Flux types](/flux/v0.x/language/types/) as follows: +This function encodes [Flux types](/flux/v0.64/language/types/) as follows: - `time` values in [RFC3339](https://tools.ietf.org/html/rfc3339) format - `duration` values in number of milliseconds since the epoch diff --git a/content/flux/v0.x/stdlib/json/index.md b/content/flux/v0.64/stdlib/json/index.md similarity index 87% rename from content/flux/v0.x/stdlib/json/index.md rename to content/flux/v0.64/stdlib/json/index.md index bb53e445e3..6d33c4ee6f 100644 --- a/content/flux/v0.x/stdlib/json/index.md +++ b/content/flux/v0.64/stdlib/json/index.md @@ -4,12 +4,12 @@ description: > The Flux JSON package provides functions for working with JSON. Import the `json` package. menu: - flux_0_x: + flux_0_64: name: JSON parent: Standard library weight: 1 aliases: - - /flux/v0.x/functions/json/index/ + - /flux/v0.64/functions/json/index/ draft: true --- diff --git a/content/flux/v0.x/stdlib/math/_index.md b/content/flux/v0.64/stdlib/math/_index.md similarity index 97% rename from content/flux/v0.x/stdlib/math/_index.md rename to content/flux/v0.64/stdlib/math/_index.md index f50a254abc..1871ca855e 100644 --- a/content/flux/v0.x/stdlib/math/_index.md +++ b/content/flux/v0.64/stdlib/math/_index.md @@ -4,12 +4,12 @@ description: > The Flux math package provides basic constants and mathematical functions. Import the `math` package. menu: - flux_0_x: + flux_0_64: name: Math parent: Standard library weight: 1 aliases: - - /flux/v0.x/functions/math/ + - /flux/v0.64/functions/math/ --- The Flux math package provides basic constants and mathematical functions. diff --git a/content/flux/v0.x/stdlib/math/abs.md b/content/flux/v0.64/stdlib/math/abs.md similarity index 91% rename from content/flux/v0.x/stdlib/math/abs.md rename to content/flux/v0.64/stdlib/math/abs.md index d4f5941d2c..8521d4be48 100644 --- a/content/flux/v0.x/stdlib/math/abs.md +++ b/content/flux/v0.64/stdlib/math/abs.md @@ -2,12 +2,12 @@ title: math.abs() function description: The math.abs() function returns the absolute value of `x`. menu: - flux_0_x: + flux_0_64: name: math.abs parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/abs/ + - /flux/v0.64/functions/math/abs/ --- The `math.abs()` function returns the absolute value of `x`. diff --git a/content/flux/v0.x/stdlib/math/acos.md b/content/flux/v0.64/stdlib/math/acos.md similarity index 92% rename from content/flux/v0.x/stdlib/math/acos.md rename to content/flux/v0.64/stdlib/math/acos.md index 5dc13b247b..2183576f89 100644 --- a/content/flux/v0.x/stdlib/math/acos.md +++ b/content/flux/v0.64/stdlib/math/acos.md @@ -2,12 +2,12 @@ title: math.acos() function description: The math.acos() function returns the arccosine of `x` in radians. menu: - flux_0_x: + flux_0_64: name: math.acos parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/acos/ + - /flux/v0.64/functions/math/acos/ --- The `math.acos()` function returns the arccosine of `x` in radians. diff --git a/content/flux/v0.x/stdlib/math/acosh.md b/content/flux/v0.64/stdlib/math/acosh.md similarity index 92% rename from content/flux/v0.x/stdlib/math/acosh.md rename to content/flux/v0.64/stdlib/math/acosh.md index b31a66f31b..c474ffa2de 100644 --- a/content/flux/v0.x/stdlib/math/acosh.md +++ b/content/flux/v0.64/stdlib/math/acosh.md @@ -2,12 +2,12 @@ title: math.acosh() function description: The math.acosh() function returns the inverse hyperbolic cosine of `x`. menu: - flux_0_x: + flux_0_64: name: math.acosh parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/acosh/ + - /flux/v0.64/functions/math/acosh/ --- The `math.acosh()` function returns the inverse hyperbolic cosine of `x`. diff --git a/content/flux/v0.x/stdlib/math/asin.md b/content/flux/v0.64/stdlib/math/asin.md similarity index 92% rename from content/flux/v0.x/stdlib/math/asin.md rename to content/flux/v0.64/stdlib/math/asin.md index ed09847baf..ce4180562d 100644 --- a/content/flux/v0.x/stdlib/math/asin.md +++ b/content/flux/v0.64/stdlib/math/asin.md @@ -2,12 +2,12 @@ title: math.asin() function description: The math.asin() function returns the arcsine of `x` in radians. menu: - flux_0_x: + flux_0_64: name: math.asin parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/asin/ + - /flux/v0.64/functions/math/asin/ --- The `math.asin()` function returns the arcsine of `x` in radians. diff --git a/content/flux/v0.x/stdlib/math/asinh.md b/content/flux/v0.64/stdlib/math/asinh.md similarity index 91% rename from content/flux/v0.x/stdlib/math/asinh.md rename to content/flux/v0.64/stdlib/math/asinh.md index e8820d3a29..d1a2bf1915 100644 --- a/content/flux/v0.x/stdlib/math/asinh.md +++ b/content/flux/v0.64/stdlib/math/asinh.md @@ -2,12 +2,12 @@ title: math.asinh() function description: The math.asinh() function returns the inverse hyperbolic sine of `x`. menu: - flux_0_x: + flux_0_64: name: math.asinh parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/asinh/ + - /flux/v0.64/functions/math/asinh/ --- The `math.asinh()` function returns the inverse hyperbolic sine of `x`. diff --git a/content/flux/v0.x/stdlib/math/atan.md b/content/flux/v0.64/stdlib/math/atan.md similarity index 91% rename from content/flux/v0.x/stdlib/math/atan.md rename to content/flux/v0.64/stdlib/math/atan.md index 0abbe7296d..1d7cc69dd4 100644 --- a/content/flux/v0.x/stdlib/math/atan.md +++ b/content/flux/v0.64/stdlib/math/atan.md @@ -2,12 +2,12 @@ title: math.atan() function description: The math.atan() function returns the arctangent of `x` in radians. menu: - flux_0_x: + flux_0_64: name: math.atan parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/atan/ + - /flux/v0.64/functions/math/atan/ --- The `math.atan()` function returns the arctangent of `x` in radians. diff --git a/content/flux/v0.x/stdlib/math/atan2.md b/content/flux/v0.64/stdlib/math/atan2.md similarity index 96% rename from content/flux/v0.x/stdlib/math/atan2.md rename to content/flux/v0.64/stdlib/math/atan2.md index 506eb1bc0b..e31a35e180 100644 --- a/content/flux/v0.x/stdlib/math/atan2.md +++ b/content/flux/v0.64/stdlib/math/atan2.md @@ -4,12 +4,12 @@ description: > The math.atan2() function returns the arc tangent of `y`/`x`, using the signs of the parameters to determine the quadrant of the return value. menu: - flux_0_x: + flux_0_64: name: math.atan2 parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/atan2/ + - /flux/v0.64/functions/math/atan2/ --- The `math.atan2()` function returns the arc tangent of `y`/`x`, using the signs diff --git a/content/flux/v0.x/stdlib/math/atanh.md b/content/flux/v0.64/stdlib/math/atanh.md similarity index 93% rename from content/flux/v0.x/stdlib/math/atanh.md rename to content/flux/v0.64/stdlib/math/atanh.md index 134156fa80..33de1d298b 100644 --- a/content/flux/v0.x/stdlib/math/atanh.md +++ b/content/flux/v0.64/stdlib/math/atanh.md @@ -2,12 +2,12 @@ title: math.atanh() function description: The math.atanh() function returns the inverse hyperbolic tangent of `x`. menu: - flux_0_x: + flux_0_64: name: math.atanh parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/atanh/ + - /flux/v0.64/functions/math/atanh/ --- The `math.atanh()` function returns the inverse hyperbolic tangent of `x`. diff --git a/content/flux/v0.x/stdlib/math/cbrt.md b/content/flux/v0.64/stdlib/math/cbrt.md similarity index 91% rename from content/flux/v0.x/stdlib/math/cbrt.md rename to content/flux/v0.64/stdlib/math/cbrt.md index 0a2fd9b031..9f95676d89 100644 --- a/content/flux/v0.x/stdlib/math/cbrt.md +++ b/content/flux/v0.64/stdlib/math/cbrt.md @@ -2,12 +2,12 @@ title: math.cbrt() function description: The math.cbrt() function returns the cube root of `x`. menu: - flux_0_x: + flux_0_64: name: math.cbrt parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/cbrt/ + - /flux/v0.64/functions/math/cbrt/ --- The `math.cbrt()` function returns the cube root of `x`. diff --git a/content/flux/v0.x/stdlib/math/ceil.md b/content/flux/v0.64/stdlib/math/ceil.md similarity index 92% rename from content/flux/v0.x/stdlib/math/ceil.md rename to content/flux/v0.64/stdlib/math/ceil.md index 0019634e12..7e52d4d26e 100644 --- a/content/flux/v0.x/stdlib/math/ceil.md +++ b/content/flux/v0.64/stdlib/math/ceil.md @@ -3,12 +3,12 @@ title: math.ceil() function description: The math.ceil() function returns the least integer value greater than or equal to `x`. menu: - flux_0_x: + flux_0_64: name: math.ceil parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/ceil/ + - /flux/v0.64/functions/math/ceil/ --- The `math.ceil()` function returns the least integer value greater than or equal to `x`. diff --git a/content/flux/v0.x/stdlib/math/copysign.md b/content/flux/v0.64/stdlib/math/copysign.md similarity index 91% rename from content/flux/v0.x/stdlib/math/copysign.md rename to content/flux/v0.64/stdlib/math/copysign.md index 578e29ddca..1ac6da12f1 100644 --- a/content/flux/v0.x/stdlib/math/copysign.md +++ b/content/flux/v0.64/stdlib/math/copysign.md @@ -3,12 +3,12 @@ title: math.copysign() function description: The math.copysign() function returns a value with the magnitude of `x` and the sign of `y`. menu: - flux_0_x: + flux_0_64: name: math.copysign parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/copysign/ + - /flux/v0.64/functions/math/copysign/ --- The `math.copysign()` function returns a value with the magnitude of `x` and the sign of `y`. diff --git a/content/flux/v0.x/stdlib/math/cos.md b/content/flux/v0.64/stdlib/math/cos.md similarity index 91% rename from content/flux/v0.x/stdlib/math/cos.md rename to content/flux/v0.64/stdlib/math/cos.md index 20554e9e51..c8affc440b 100644 --- a/content/flux/v0.x/stdlib/math/cos.md +++ b/content/flux/v0.64/stdlib/math/cos.md @@ -2,12 +2,12 @@ title: math.cos() function description: The math.cos() function returns the cosine of the radian argument `x`. menu: - flux_0_x: + flux_0_64: name: math.cos parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/cos/ + - /flux/v0.64/functions/math/cos/ --- The `math.cos()` function returns the cosine of the radian argument `x`. diff --git a/content/flux/v0.x/stdlib/math/cosh.md b/content/flux/v0.64/stdlib/math/cosh.md similarity index 91% rename from content/flux/v0.x/stdlib/math/cosh.md rename to content/flux/v0.64/stdlib/math/cosh.md index 5fde07568c..ad812740f8 100644 --- a/content/flux/v0.x/stdlib/math/cosh.md +++ b/content/flux/v0.64/stdlib/math/cosh.md @@ -2,12 +2,12 @@ title: math.cosh() function description: The math.cosh() function returns the hyperbolic cosine of `x`. menu: - flux_0_x: + flux_0_64: name: math.cosh parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/cosh/ + - /flux/v0.64/functions/math/cosh/ --- The `math.cosh()` function returns the hyperbolic cosine of `x`. diff --git a/content/flux/v0.x/stdlib/math/dim.md b/content/flux/v0.64/stdlib/math/dim.md similarity index 93% rename from content/flux/v0.x/stdlib/math/dim.md rename to content/flux/v0.64/stdlib/math/dim.md index 57f4a657e1..52af0cb2b7 100644 --- a/content/flux/v0.x/stdlib/math/dim.md +++ b/content/flux/v0.64/stdlib/math/dim.md @@ -2,12 +2,12 @@ title: math.dim() function description: The math.dim() function returns the maximum of `x`-`y` or 0. menu: - flux_0_x: + flux_0_64: name: math.dim parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/dim/ + - /flux/v0.64/functions/math/dim/ --- The `math.dim()` function returns the maximum of `x - y` or 0. diff --git a/content/flux/v0.x/stdlib/math/erf.md b/content/flux/v0.64/stdlib/math/erf.md similarity index 91% rename from content/flux/v0.x/stdlib/math/erf.md rename to content/flux/v0.64/stdlib/math/erf.md index 755994fb4a..d947b15874 100644 --- a/content/flux/v0.x/stdlib/math/erf.md +++ b/content/flux/v0.64/stdlib/math/erf.md @@ -2,12 +2,12 @@ title: math.erf() function description: The math.erf() function returns the error function of `x`. menu: - flux_0_x: + flux_0_64: name: math.erf parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/erf/ + - /flux/v0.64/functions/math/erf/ --- The `math.erf()` function returns the error function of `x`. diff --git a/content/flux/v0.x/stdlib/math/erfc.md b/content/flux/v0.64/stdlib/math/erfc.md similarity index 91% rename from content/flux/v0.x/stdlib/math/erfc.md rename to content/flux/v0.64/stdlib/math/erfc.md index 08c7ebdcb8..7611e3984e 100644 --- a/content/flux/v0.x/stdlib/math/erfc.md +++ b/content/flux/v0.64/stdlib/math/erfc.md @@ -3,12 +3,12 @@ title: math.erfc() function description: The math.erfc() function returns the complementary error function of `x`. menu: - flux_0_x: + flux_0_64: name: math.erfc parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/erfc/ + - /flux/v0.64/functions/math/erfc/ --- The `math.erfc()` function returns the complementary error function of `x`. diff --git a/content/flux/v0.x/stdlib/math/erfcinv.md b/content/flux/v0.64/stdlib/math/erfcinv.md similarity index 93% rename from content/flux/v0.x/stdlib/math/erfcinv.md rename to content/flux/v0.64/stdlib/math/erfcinv.md index bca06cc591..c81057e569 100644 --- a/content/flux/v0.x/stdlib/math/erfcinv.md +++ b/content/flux/v0.64/stdlib/math/erfcinv.md @@ -2,12 +2,12 @@ title: math.erfcinv() function description: The math.erfcinv() function returns the inverse of `math.erfc()`. menu: - flux_0_x: + flux_0_64: name: math.erfcinv parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/erfcinv/ + - /flux/v0.64/functions/math/erfcinv/ --- The `math.erfcinv()` function returns the inverse of `math.erfc()`. diff --git a/content/flux/v0.x/stdlib/math/erfinv.md b/content/flux/v0.64/stdlib/math/erfinv.md similarity index 93% rename from content/flux/v0.x/stdlib/math/erfinv.md rename to content/flux/v0.64/stdlib/math/erfinv.md index 529d422fd4..9261f5b891 100644 --- a/content/flux/v0.x/stdlib/math/erfinv.md +++ b/content/flux/v0.64/stdlib/math/erfinv.md @@ -2,12 +2,12 @@ title: math.erfinv() function description: The math.erfinv() function returns the inverse error function of `x`. menu: - flux_0_x: + flux_0_64: name: math.erfinv parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/erfinv/ + - /flux/v0.64/functions/math/erfinv/ --- The `math.erfinv()` function returns the inverse error function of `x`. diff --git a/content/flux/v0.x/stdlib/math/exp.md b/content/flux/v0.64/stdlib/math/exp.md similarity index 92% rename from content/flux/v0.x/stdlib/math/exp.md rename to content/flux/v0.64/stdlib/math/exp.md index 15c464b252..87f4c9cad1 100644 --- a/content/flux/v0.x/stdlib/math/exp.md +++ b/content/flux/v0.64/stdlib/math/exp.md @@ -2,12 +2,12 @@ title: math.exp() function description: The math.exp() function returns `e**x`, the base-e exponential of `x`. menu: - flux_0_x: + flux_0_64: name: math.exp parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/exp/ + - /flux/v0.64/functions/math/exp/ --- The `math.exp()` function returns `e**x`, the base-e exponential of `x`. diff --git a/content/flux/v0.x/stdlib/math/exp2.md b/content/flux/v0.64/stdlib/math/exp2.md similarity index 92% rename from content/flux/v0.x/stdlib/math/exp2.md rename to content/flux/v0.64/stdlib/math/exp2.md index ed74bbd439..646806ee8b 100644 --- a/content/flux/v0.x/stdlib/math/exp2.md +++ b/content/flux/v0.64/stdlib/math/exp2.md @@ -2,12 +2,12 @@ title: math.exp2() function description: The math.exp2() function returns `2**x`, the base-2 exponential of `x`. menu: - flux_0_x: + flux_0_64: name: math.exp2 parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/exp2/ + - /flux/v0.64/functions/math/exp2/ --- The `math.exp2()` function returns `2**x`, the base-2 exponential of `x`. diff --git a/content/flux/v0.x/stdlib/math/expm1.md b/content/flux/v0.64/stdlib/math/expm1.md similarity index 93% rename from content/flux/v0.x/stdlib/math/expm1.md rename to content/flux/v0.64/stdlib/math/expm1.md index c069c5f091..a7fc327c28 100644 --- a/content/flux/v0.x/stdlib/math/expm1.md +++ b/content/flux/v0.64/stdlib/math/expm1.md @@ -4,12 +4,12 @@ description: > The math.expm1() function returns `e**x - 1`, the base-e exponential of `x` minus 1. It is more accurate than `math.exp(x:x) - 1` when `x` is near zero. menu: - flux_0_x: + flux_0_64: name: math.expm1 parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/expm1/ + - /flux/v0.64/functions/math/expm1/ --- The `math.expm1()` function returns `e**x - 1`, the base-e exponential of `x` minus 1. diff --git a/content/flux/v0.x/stdlib/math/float64bits.md b/content/flux/v0.64/stdlib/math/float64bits.md similarity index 91% rename from content/flux/v0.x/stdlib/math/float64bits.md rename to content/flux/v0.64/stdlib/math/float64bits.md index a310cde0ae..03eb4ed54e 100644 --- a/content/flux/v0.x/stdlib/math/float64bits.md +++ b/content/flux/v0.64/stdlib/math/float64bits.md @@ -3,12 +3,12 @@ title: math.float64bits() function description: The math.float64bits() function returns the IEEE 754 binary representation of `f`, with the sign bit of `f` and the result in the same bit position. menu: - flux_0_x: + flux_0_64: name: math.float64bits parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/float64bits/ + - /flux/v0.64/functions/math/float64bits/ --- The `math.float64bits()` function returns the IEEE 754 binary representation of `f`, with the sign bit of `f` and the result in the same bit position. diff --git a/content/flux/v0.x/stdlib/math/floor.md b/content/flux/v0.64/stdlib/math/floor.md similarity index 92% rename from content/flux/v0.x/stdlib/math/floor.md rename to content/flux/v0.64/stdlib/math/floor.md index 1dcf73207c..fa1e6165c5 100644 --- a/content/flux/v0.x/stdlib/math/floor.md +++ b/content/flux/v0.64/stdlib/math/floor.md @@ -3,12 +3,12 @@ title: math.floor() function description: The math.floor() function returns the greatest integer value less than or equal to `x`. menu: - flux_0_x: + flux_0_64: name: math.floor parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/floor/ + - /flux/v0.64/functions/math/floor/ --- The `math.floor()` function returns the greatest integer value less than or equal to `x`. diff --git a/content/flux/v0.x/stdlib/math/frexp.md b/content/flux/v0.64/stdlib/math/frexp.md similarity index 94% rename from content/flux/v0.x/stdlib/math/frexp.md rename to content/flux/v0.64/stdlib/math/frexp.md index f62c4d81b1..f75606c613 100644 --- a/content/flux/v0.x/stdlib/math/frexp.md +++ b/content/flux/v0.64/stdlib/math/frexp.md @@ -5,12 +5,12 @@ description: > an integral power of two. It returns `frac` and `exp` satisfying `f == frac × 2**exp`, with the absolute value of `frac` in the interval [½, 1). menu: - flux_0_x: + flux_0_64: name: math.frexp parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/frexp/ + - /flux/v0.64/functions/math/frexp/ --- The `math.frexp()` function breaks `f` into a normalized fraction and an integral power of two. diff --git a/content/flux/v0.x/stdlib/math/gamma.md b/content/flux/v0.64/stdlib/math/gamma.md similarity index 92% rename from content/flux/v0.x/stdlib/math/gamma.md rename to content/flux/v0.64/stdlib/math/gamma.md index 7884b73b8e..999eb40845 100644 --- a/content/flux/v0.x/stdlib/math/gamma.md +++ b/content/flux/v0.64/stdlib/math/gamma.md @@ -2,12 +2,12 @@ title: math.gamma() function description: The math.gamma() function returns the Gamma function of `x`. menu: - flux_0_x: + flux_0_64: name: math.gamma parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/gamma/ + - /flux/v0.64/functions/math/gamma/ --- The `math.gamma()` function returns the Gamma function of `x`. diff --git a/content/flux/v0.x/stdlib/math/hypot.md b/content/flux/v0.64/stdlib/math/hypot.md similarity index 94% rename from content/flux/v0.x/stdlib/math/hypot.md rename to content/flux/v0.64/stdlib/math/hypot.md index ee57b16a1e..68530a3431 100644 --- a/content/flux/v0.x/stdlib/math/hypot.md +++ b/content/flux/v0.64/stdlib/math/hypot.md @@ -4,12 +4,12 @@ description: > The math.hypot() function returns the square root of `p*p + q*q`, taking care to avoid unnecessary overflow and underflow. menu: - flux_0_x: + flux_0_64: name: math.hypot parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/hypot/ + - /flux/v0.64/functions/math/hypot/ --- The `math.hypot()` function returns the square root of `p*p + q*q`, diff --git a/content/flux/v0.x/stdlib/math/ilogb.md b/content/flux/v0.64/stdlib/math/ilogb.md similarity index 92% rename from content/flux/v0.x/stdlib/math/ilogb.md rename to content/flux/v0.64/stdlib/math/ilogb.md index 9b05b6541a..25c4cbd880 100644 --- a/content/flux/v0.x/stdlib/math/ilogb.md +++ b/content/flux/v0.64/stdlib/math/ilogb.md @@ -2,12 +2,12 @@ title: math.ilogb() function description: The math.ilogb() function returns the binary exponent of `x` as an integer. menu: - flux_0_x: + flux_0_64: name: math.ilogb parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/ilogb/ + - /flux/v0.64/functions/math/ilogb/ --- The `math.ilogb()` function returns the binary exponent of `x` as an integer. diff --git a/content/flux/v0.x/stdlib/math/isinf.md b/content/flux/v0.64/stdlib/math/isinf.md similarity index 93% rename from content/flux/v0.x/stdlib/math/isinf.md rename to content/flux/v0.64/stdlib/math/isinf.md index 3245eec34f..83af56d2fd 100644 --- a/content/flux/v0.x/stdlib/math/isinf.md +++ b/content/flux/v0.64/stdlib/math/isinf.md @@ -3,12 +3,12 @@ title: math.isInf() function description: The math.isInf() function reports whether `f` is an infinity, according to `sign`. menu: - flux_0_x: + flux_0_64: name: math.isInf parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/isinf/ + - /flux/v0.64/functions/math/isinf/ --- The `math.isInf()` function reports whether `f` is an infinity, according to sign. diff --git a/content/flux/v0.x/stdlib/math/isnan.md b/content/flux/v0.64/stdlib/math/isnan.md similarity index 90% rename from content/flux/v0.x/stdlib/math/isnan.md rename to content/flux/v0.64/stdlib/math/isnan.md index ba6762797b..230c860932 100644 --- a/content/flux/v0.x/stdlib/math/isnan.md +++ b/content/flux/v0.64/stdlib/math/isnan.md @@ -3,12 +3,12 @@ title: math.isNaN() function description: The math.isNaN() function reports whether `f` is an IEEE 754 “not-a-number” value. menu: - flux_0_x: + flux_0_64: name: math.isNaN parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/isnan/ + - /flux/v0.64/functions/math/isnan/ --- The `math.isNaN()` function reports whether `f` is an IEEE 754 “not-a-number” value. diff --git a/content/flux/v0.x/stdlib/math/j0.md b/content/flux/v0.64/stdlib/math/j0.md similarity index 92% rename from content/flux/v0.x/stdlib/math/j0.md rename to content/flux/v0.64/stdlib/math/j0.md index 31dd883f9e..9d81ac4890 100644 --- a/content/flux/v0.x/stdlib/math/j0.md +++ b/content/flux/v0.64/stdlib/math/j0.md @@ -3,12 +3,12 @@ title: math.j0() function description: The math.j0() function returns the order-zero Bessel function of the first kind. menu: - flux_0_x: + flux_0_64: name: math.j0 parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/j0/ + - /flux/v0.64/functions/math/j0/ --- The `math.j0()` function returns the order-zero Bessel function of the first kind. diff --git a/content/flux/v0.x/stdlib/math/j1.md b/content/flux/v0.64/stdlib/math/j1.md similarity index 91% rename from content/flux/v0.x/stdlib/math/j1.md rename to content/flux/v0.64/stdlib/math/j1.md index 2ff81fb0ac..a4052d1b63 100644 --- a/content/flux/v0.x/stdlib/math/j1.md +++ b/content/flux/v0.64/stdlib/math/j1.md @@ -3,12 +3,12 @@ title: math.j1() function description: The math.j1() function returns the order-one Bessel function of the first kind. menu: - flux_0_x: + flux_0_64: name: math.j1 parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/j1/ + - /flux/v0.64/functions/math/j1/ --- The `math.j1()` function returns the order-one Bessel function of the first kind. diff --git a/content/flux/v0.x/stdlib/math/jn.md b/content/flux/v0.64/stdlib/math/jn.md similarity index 92% rename from content/flux/v0.x/stdlib/math/jn.md rename to content/flux/v0.64/stdlib/math/jn.md index 86ea637ec9..12d643e957 100644 --- a/content/flux/v0.x/stdlib/math/jn.md +++ b/content/flux/v0.64/stdlib/math/jn.md @@ -3,12 +3,12 @@ title: math.jn() function description: The math.jn() function returns the order-n Bessel function of the first kind. menu: - flux_0_x: + flux_0_64: name: math.jn parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/jn/ + - /flux/v0.64/functions/math/jn/ --- The `math.jn()` function returns the order-n Bessel function of the first kind. diff --git a/content/flux/v0.x/stdlib/math/ldexp.md b/content/flux/v0.64/stdlib/math/ldexp.md similarity index 89% rename from content/flux/v0.x/stdlib/math/ldexp.md rename to content/flux/v0.64/stdlib/math/ldexp.md index bfd98f96e9..a28996b9a7 100644 --- a/content/flux/v0.x/stdlib/math/ldexp.md +++ b/content/flux/v0.64/stdlib/math/ldexp.md @@ -3,15 +3,15 @@ title: math.ldexp() function description: The math.ldexp() function is the inverse of `math.frexp()`. It returns `frac × 2**exp`. menu: - flux_0_x: + flux_0_64: name: math.ldexp parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/ldexp/ + - /flux/v0.64/functions/math/ldexp/ --- -The `math.ldexp()` function is the inverse of [`math.frexp()`](/flux/v0.x/stdlib/math/frexp). +The `math.ldexp()` function is the inverse of [`math.frexp()`](/flux/v0.64/stdlib/math/frexp). It returns `frac × 2**exp`. _**Output data type:** Float_ diff --git a/content/flux/v0.x/stdlib/math/lgamma.md b/content/flux/v0.64/stdlib/math/lgamma.md similarity index 93% rename from content/flux/v0.x/stdlib/math/lgamma.md rename to content/flux/v0.64/stdlib/math/lgamma.md index 6990e49acb..bfc09f279d 100644 --- a/content/flux/v0.x/stdlib/math/lgamma.md +++ b/content/flux/v0.64/stdlib/math/lgamma.md @@ -3,12 +3,12 @@ title: math.lgamma() function description: The math.lgamma() function returns the natural logarithm and sign (-1 or +1) of `math.gamma(x:x)`. menu: - flux_0_x: + flux_0_64: name: math.lgamma parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/lgamma/ + - /flux/v0.64/functions/math/lgamma/ --- The `math.lgamma()` function returns the natural logarithm and sign (-1 or +1) of `math.gamma(x:x)`. diff --git a/content/flux/v0.x/stdlib/math/log.md b/content/flux/v0.64/stdlib/math/log.md similarity index 92% rename from content/flux/v0.x/stdlib/math/log.md rename to content/flux/v0.64/stdlib/math/log.md index 06b01ee6b9..9b138452b9 100644 --- a/content/flux/v0.x/stdlib/math/log.md +++ b/content/flux/v0.64/stdlib/math/log.md @@ -2,12 +2,12 @@ title: math.log() function description: The math.log() function returns the natural logarithm of `x`. menu: - flux_0_x: + flux_0_64: name: math.log parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/log/ + - /flux/v0.64/functions/math/log/ --- The `math.log()` function returns the natural logarithm of `x`. diff --git a/content/flux/v0.x/stdlib/math/log10.md b/content/flux/v0.64/stdlib/math/log10.md similarity index 92% rename from content/flux/v0.x/stdlib/math/log10.md rename to content/flux/v0.64/stdlib/math/log10.md index f1ce40cd89..3f0856e2d2 100644 --- a/content/flux/v0.x/stdlib/math/log10.md +++ b/content/flux/v0.64/stdlib/math/log10.md @@ -2,12 +2,12 @@ title: math.log10() function description: The math.log10() function returns the decimal logarithm of `x`. menu: - flux_0_x: + flux_0_64: name: math.log10 parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/log10/ + - /flux/v0.64/functions/math/log10/ --- The `math.log10()` function returns the decimal logarithm of `x`. diff --git a/content/flux/v0.x/stdlib/math/log1p.md b/content/flux/v0.64/stdlib/math/log1p.md similarity index 94% rename from content/flux/v0.x/stdlib/math/log1p.md rename to content/flux/v0.64/stdlib/math/log1p.md index 05a7e7028f..6ac5449cdd 100644 --- a/content/flux/v0.x/stdlib/math/log1p.md +++ b/content/flux/v0.64/stdlib/math/log1p.md @@ -4,12 +4,12 @@ description: > The math.log1p() function returns the natural logarithm of 1 plus its argument `x`. It is more accurate than `math.log(x: 1 + x)` when `x` is near zero. menu: - flux_0_x: + flux_0_64: name: math.log1p parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/log1p/ + - /flux/v0.64/functions/math/log1p/ --- The `math.log1p()` function returns the natural logarithm of 1 plus its argument `x`. diff --git a/content/flux/v0.x/stdlib/math/log2.md b/content/flux/v0.64/stdlib/math/log2.md similarity index 92% rename from content/flux/v0.x/stdlib/math/log2.md rename to content/flux/v0.64/stdlib/math/log2.md index bc148e1f0e..ba8394c37b 100644 --- a/content/flux/v0.x/stdlib/math/log2.md +++ b/content/flux/v0.64/stdlib/math/log2.md @@ -2,12 +2,12 @@ title: math.log2() function description: The math.log2() function returns the binary logarithm of `x`. menu: - flux_0_x: + flux_0_64: name: math.log2 parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/log2/ + - /flux/v0.64/functions/math/log2/ --- The `math.log2()` function returns the binary logarithm of `x`. diff --git a/content/flux/v0.x/stdlib/math/logb.md b/content/flux/v0.64/stdlib/math/logb.md similarity index 91% rename from content/flux/v0.x/stdlib/math/logb.md rename to content/flux/v0.64/stdlib/math/logb.md index 0f8ca66032..83321872e3 100644 --- a/content/flux/v0.x/stdlib/math/logb.md +++ b/content/flux/v0.64/stdlib/math/logb.md @@ -2,12 +2,12 @@ title: math.logb() function description: The math.logb() function returns the binary exponent of `x`. menu: - flux_0_x: + flux_0_64: name: math.logb parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/logb/ + - /flux/v0.64/functions/math/logb/ --- The `math.logb()` function returns the binary exponent of `x`. diff --git a/content/flux/v0.x/stdlib/math/minf.md b/content/flux/v0.64/stdlib/math/minf.md similarity index 85% rename from content/flux/v0.x/stdlib/math/minf.md rename to content/flux/v0.64/stdlib/math/minf.md index db2e42418e..1e74e709a3 100644 --- a/content/flux/v0.x/stdlib/math/minf.md +++ b/content/flux/v0.64/stdlib/math/minf.md @@ -3,13 +3,13 @@ title: math.mInf() function description: The math.mInf() function returns positive infinity if `sign >= 0`, negative infinity if `sign < 0`. menu: - flux_0_x: + flux_0_64: name: math.mInf parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/m_inf/ - - /flux/v0.x/stdlib/math/m_inf/ + - /flux/v0.64/functions/math/m_inf/ + - /flux/v0.64/stdlib/math/m_inf/ --- The `math.mInf()` function returns positive infinity if `sign >= 0`, negative infinity if `sign < 0`. diff --git a/content/flux/v0.x/stdlib/math/mmax.md b/content/flux/v0.64/stdlib/math/mmax.md similarity index 90% rename from content/flux/v0.x/stdlib/math/mmax.md rename to content/flux/v0.64/stdlib/math/mmax.md index d0b4d25133..307095ee6e 100644 --- a/content/flux/v0.x/stdlib/math/mmax.md +++ b/content/flux/v0.64/stdlib/math/mmax.md @@ -2,13 +2,13 @@ title: math.mMax() function description: The math.mMax() function returns the larger of `x` or `y`. menu: - flux_0_x: + flux_0_64: name: math.mMax parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/m_max/ - - /flux/v0.x/stdlib/math/m_max/ + - /flux/v0.64/functions/math/m_max/ + - /flux/v0.64/stdlib/math/m_max/ --- The `math.mMax()` function returns the larger of `x` or `y`. diff --git a/content/flux/v0.x/stdlib/math/mmin.md b/content/flux/v0.64/stdlib/math/mmin.md similarity index 89% rename from content/flux/v0.x/stdlib/math/mmin.md rename to content/flux/v0.64/stdlib/math/mmin.md index d1dcc7adf9..b1a76dd0bf 100644 --- a/content/flux/v0.x/stdlib/math/mmin.md +++ b/content/flux/v0.64/stdlib/math/mmin.md @@ -2,13 +2,13 @@ title: math.mMin() function description: The math.mMin() function returns the smaller of `x` or `y`. menu: - flux_0_x: + flux_0_64: name: math.mMin parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/m_min/ - - /flux/v0.x/stdlib/math/m_min/ + - /flux/v0.64/functions/math/m_min/ + - /flux/v0.64/stdlib/math/m_min/ --- The `math.mMin()` function returns the smaller of `x` or `y`. diff --git a/content/flux/v0.x/stdlib/math/mod.md b/content/flux/v0.64/stdlib/math/mod.md similarity index 94% rename from content/flux/v0.x/stdlib/math/mod.md rename to content/flux/v0.64/stdlib/math/mod.md index 4c6385fbfc..07cad7550f 100644 --- a/content/flux/v0.x/stdlib/math/mod.md +++ b/content/flux/v0.64/stdlib/math/mod.md @@ -4,12 +4,12 @@ description: > The math.mod() function returns the floating-point remainder of `x`/`y`. The magnitude of the result is less than `y` and its sign agrees with that of `x`. menu: - flux_0_x: + flux_0_64: name: math.mod parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/mod/ + - /flux/v0.64/functions/math/mod/ --- The `math.mod()` function returns the floating-point remainder of `x`/`y`. diff --git a/content/flux/v0.x/stdlib/math/modf.md b/content/flux/v0.64/stdlib/math/modf.md similarity index 93% rename from content/flux/v0.x/stdlib/math/modf.md rename to content/flux/v0.64/stdlib/math/modf.md index ac22e2faaa..db8f553c34 100644 --- a/content/flux/v0.x/stdlib/math/modf.md +++ b/content/flux/v0.64/stdlib/math/modf.md @@ -4,12 +4,12 @@ description: > The math.modf() function returns integer and fractional floating-point numbers that sum to `f`. Both values have the same sign as `f`. menu: - flux_0_x: + flux_0_64: name: math.modf parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/modf/ + - /flux/v0.64/functions/math/modf/ --- The `math.modf()` function returns integer and fractional floating-point numbers that sum to `f`. diff --git a/content/flux/v0.x/stdlib/math/nan.md b/content/flux/v0.64/stdlib/math/nan.md similarity index 86% rename from content/flux/v0.x/stdlib/math/nan.md rename to content/flux/v0.64/stdlib/math/nan.md index d134f42a99..e38e37e440 100644 --- a/content/flux/v0.x/stdlib/math/nan.md +++ b/content/flux/v0.64/stdlib/math/nan.md @@ -2,12 +2,12 @@ title: math.NaN() function description: The math.NaN() function returns an IEEE 754 “not-a-number” value. menu: - flux_0_x: + flux_0_64: name: math.NaN parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/nan/ + - /flux/v0.64/functions/math/nan/ --- The `math.NaN()` function returns an IEEE 754 “not-a-number” value. diff --git a/content/flux/v0.x/stdlib/math/nextafter.md b/content/flux/v0.64/stdlib/math/nextafter.md similarity index 93% rename from content/flux/v0.x/stdlib/math/nextafter.md rename to content/flux/v0.64/stdlib/math/nextafter.md index d9f81affbd..69c58283aa 100644 --- a/content/flux/v0.x/stdlib/math/nextafter.md +++ b/content/flux/v0.64/stdlib/math/nextafter.md @@ -3,12 +3,12 @@ title: math.nextafter() function description: The math.nextafter() function returns the next representable float value after `x` towards `y`. menu: - flux_0_x: + flux_0_64: name: math.nextafter parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/nextafter/ + - /flux/v0.64/functions/math/nextafter/ --- The `math.nextafter()` function returns the next representable float value after `x` towards `y`. diff --git a/content/flux/v0.x/stdlib/math/pow.md b/content/flux/v0.64/stdlib/math/pow.md similarity index 97% rename from content/flux/v0.x/stdlib/math/pow.md rename to content/flux/v0.64/stdlib/math/pow.md index 72b86a24d0..efd810fe73 100644 --- a/content/flux/v0.x/stdlib/math/pow.md +++ b/content/flux/v0.64/stdlib/math/pow.md @@ -2,12 +2,12 @@ title: math.pow() function description: The math.pow() function returns `x**y`, the base-x exponential of y. menu: - flux_0_x: + flux_0_64: name: math.pow parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/pow/ + - /flux/v0.64/functions/math/pow/ --- The `math.pow()` function returns `x**y`, the base-x exponential of y. diff --git a/content/flux/v0.x/stdlib/math/pow10.md b/content/flux/v0.64/stdlib/math/pow10.md similarity index 91% rename from content/flux/v0.x/stdlib/math/pow10.md rename to content/flux/v0.64/stdlib/math/pow10.md index 6f08aaeb1d..e5a80e2bea 100644 --- a/content/flux/v0.x/stdlib/math/pow10.md +++ b/content/flux/v0.64/stdlib/math/pow10.md @@ -3,12 +3,12 @@ title: math.pow10() function description: The math.pow10() function returns `10**n`, the base-10 exponential of `n`. menu: - flux_0_x: + flux_0_64: name: math.pow10 parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/pow10/ + - /flux/v0.64/functions/math/pow10/ --- The `math.pow10()` function returns `10**n`, the base-10 exponential of `n`. diff --git a/content/flux/v0.x/stdlib/math/remainder.md b/content/flux/v0.64/stdlib/math/remainder.md similarity index 93% rename from content/flux/v0.x/stdlib/math/remainder.md rename to content/flux/v0.64/stdlib/math/remainder.md index cf346d118e..4d037edd4b 100644 --- a/content/flux/v0.x/stdlib/math/remainder.md +++ b/content/flux/v0.64/stdlib/math/remainder.md @@ -3,12 +3,12 @@ title: math.remainder() function description: The math.remainder() function returns the IEEE 754 floating-point remainder of `x / y`. menu: - flux_0_x: + flux_0_64: name: math.remainder parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/remainder/ + - /flux/v0.64/functions/math/remainder/ --- The `math.remainder()` function returns the IEEE 754 floating-point remainder of `x / y`. diff --git a/content/flux/v0.x/stdlib/math/round.md b/content/flux/v0.64/stdlib/math/round.md similarity index 92% rename from content/flux/v0.x/stdlib/math/round.md rename to content/flux/v0.64/stdlib/math/round.md index 5390725b3e..46441e7d82 100644 --- a/content/flux/v0.x/stdlib/math/round.md +++ b/content/flux/v0.64/stdlib/math/round.md @@ -3,12 +3,12 @@ title: math.round() function description: The math.round() function returns the nearest integer, rounding half away from zero. menu: - flux_0_x: + flux_0_64: name: math.round parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/round/ + - /flux/v0.64/functions/math/round/ --- The `math.round()` function returns the nearest integer, rounding half away from zero. diff --git a/content/flux/v0.x/stdlib/math/roundtoeven.md b/content/flux/v0.64/stdlib/math/roundtoeven.md similarity index 92% rename from content/flux/v0.x/stdlib/math/roundtoeven.md rename to content/flux/v0.64/stdlib/math/roundtoeven.md index 9f62adc978..8d3290486f 100644 --- a/content/flux/v0.x/stdlib/math/roundtoeven.md +++ b/content/flux/v0.64/stdlib/math/roundtoeven.md @@ -3,12 +3,12 @@ title: math.roundtoeven() function description: The math.roundtoeven() function returns the nearest integer, rounding ties to even. menu: - flux_0_x: + flux_0_64: name: math.roundtoeven parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/roundtoeven/ + - /flux/v0.64/functions/math/roundtoeven/ --- The `math.roundtoeven()` function returns the nearest integer, rounding ties to even. diff --git a/content/flux/v0.x/stdlib/math/signbit.md b/content/flux/v0.64/stdlib/math/signbit.md similarity index 89% rename from content/flux/v0.x/stdlib/math/signbit.md rename to content/flux/v0.64/stdlib/math/signbit.md index 056c62a43f..a8196c16bf 100644 --- a/content/flux/v0.x/stdlib/math/signbit.md +++ b/content/flux/v0.64/stdlib/math/signbit.md @@ -3,12 +3,12 @@ title: math.signbit() function description: The math.signbit() function reports whether `x` is negative or negative zero. menu: - flux_0_x: + flux_0_64: name: math.signbit parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/signbit/ + - /flux/v0.64/functions/math/signbit/ --- The `math.signbit()` function reports whether `x` is negative or negative zero. diff --git a/content/flux/v0.x/stdlib/math/sin.md b/content/flux/v0.64/stdlib/math/sin.md similarity index 92% rename from content/flux/v0.x/stdlib/math/sin.md rename to content/flux/v0.64/stdlib/math/sin.md index 7ebe9a4674..2179733c2f 100644 --- a/content/flux/v0.x/stdlib/math/sin.md +++ b/content/flux/v0.64/stdlib/math/sin.md @@ -2,12 +2,12 @@ title: math.sin() function description: The math.sin() function returns the sine of the radian argument `x`. menu: - flux_0_x: + flux_0_64: name: math.sin parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/sin/ + - /flux/v0.64/functions/math/sin/ --- The `math.sin()` function returns the sine of the radian argument `x`. diff --git a/content/flux/v0.x/stdlib/math/sincos.md b/content/flux/v0.64/stdlib/math/sincos.md similarity index 93% rename from content/flux/v0.x/stdlib/math/sincos.md rename to content/flux/v0.64/stdlib/math/sincos.md index 1d7617f679..f5f26dadb1 100644 --- a/content/flux/v0.x/stdlib/math/sincos.md +++ b/content/flux/v0.64/stdlib/math/sincos.md @@ -3,12 +3,12 @@ title: math.sincos() function description: The math.sincos() function returns the values of `math.sin(x:x)` and `math.cos(x:x)`. menu: - flux_0_x: + flux_0_64: name: math.sincos parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/sincos/ + - /flux/v0.64/functions/math/sincos/ --- The `math.sincos()` function returns the values of `math.sin(x:x)` and `math.cos(x:x)`. diff --git a/content/flux/v0.x/stdlib/math/sinh.md b/content/flux/v0.64/stdlib/math/sinh.md similarity index 91% rename from content/flux/v0.x/stdlib/math/sinh.md rename to content/flux/v0.64/stdlib/math/sinh.md index dbe0619af7..b5a0586f6c 100644 --- a/content/flux/v0.x/stdlib/math/sinh.md +++ b/content/flux/v0.64/stdlib/math/sinh.md @@ -2,12 +2,12 @@ title: math.sinh() function description: The math.sinh() function returns the hyperbolic sine of `x`. menu: - flux_0_x: + flux_0_64: name: math.sinh parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/sinh/ + - /flux/v0.64/functions/math/sinh/ --- The `math.sinh()` function returns the hyperbolic sine of `x`. diff --git a/content/flux/v0.x/stdlib/math/sqrt.md b/content/flux/v0.64/stdlib/math/sqrt.md similarity index 91% rename from content/flux/v0.x/stdlib/math/sqrt.md rename to content/flux/v0.64/stdlib/math/sqrt.md index b61c36e49c..d2712e3836 100644 --- a/content/flux/v0.x/stdlib/math/sqrt.md +++ b/content/flux/v0.64/stdlib/math/sqrt.md @@ -2,12 +2,12 @@ title: math.sqrt() function description: The math.sqrt() function returns the square root of `x`. menu: - flux_0_x: + flux_0_64: name: math.sqrt parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/sqrt/ + - /flux/v0.64/functions/math/sqrt/ --- The `math.sqrt()` function returns the square root of `x`. diff --git a/content/flux/v0.x/stdlib/math/tan.md b/content/flux/v0.64/stdlib/math/tan.md similarity index 92% rename from content/flux/v0.x/stdlib/math/tan.md rename to content/flux/v0.64/stdlib/math/tan.md index 7e4d795309..64eaa7cf4e 100644 --- a/content/flux/v0.x/stdlib/math/tan.md +++ b/content/flux/v0.64/stdlib/math/tan.md @@ -2,12 +2,12 @@ title: math.tan() function description: The math.tan() function returns the tangent of the radian argument `x`. menu: - flux_0_x: + flux_0_64: name: math.tan parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/tan/ + - /flux/v0.64/functions/math/tan/ --- The `math.tan()` function returns the tangent of the radian argument `x`. diff --git a/content/flux/v0.x/stdlib/math/tanh.md b/content/flux/v0.64/stdlib/math/tanh.md similarity index 91% rename from content/flux/v0.x/stdlib/math/tanh.md rename to content/flux/v0.64/stdlib/math/tanh.md index 78d5b54641..16582f7df6 100644 --- a/content/flux/v0.x/stdlib/math/tanh.md +++ b/content/flux/v0.64/stdlib/math/tanh.md @@ -2,12 +2,12 @@ title: math.tanh() function description: The math.tanh() function returns the hyperbolic tangent of `x`. menu: - flux_0_x: + flux_0_64: name: math.tanh parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/tanh/ + - /flux/v0.64/functions/math/tanh/ --- The `math.tanh()` function returns the hyperbolic tangent of `x`. diff --git a/content/flux/v0.x/stdlib/math/trunc.md b/content/flux/v0.64/stdlib/math/trunc.md similarity index 91% rename from content/flux/v0.x/stdlib/math/trunc.md rename to content/flux/v0.64/stdlib/math/trunc.md index dfc6396e09..8146f5b494 100644 --- a/content/flux/v0.x/stdlib/math/trunc.md +++ b/content/flux/v0.64/stdlib/math/trunc.md @@ -2,12 +2,12 @@ title: math.trunc() function description: The math.trunc() function returns the integer value of `x`. menu: - flux_0_x: + flux_0_64: name: math.trunc parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/trunc/ + - /flux/v0.64/functions/math/trunc/ --- The `math.trunc()` function returns the integer value of `x`. diff --git a/content/flux/v0.x/stdlib/math/y0.md b/content/flux/v0.64/stdlib/math/y0.md similarity index 92% rename from content/flux/v0.x/stdlib/math/y0.md rename to content/flux/v0.64/stdlib/math/y0.md index 365aa7a3b7..e976c18f2b 100644 --- a/content/flux/v0.x/stdlib/math/y0.md +++ b/content/flux/v0.64/stdlib/math/y0.md @@ -3,12 +3,12 @@ title: math.y0() function description: The math.y0() function returns the order-zero Bessel function of the second kind. menu: - flux_0_x: + flux_0_64: name: math.y0 parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/y0/ + - /flux/v0.64/functions/math/y0/ --- The `math.y0()` function returns the order-zero Bessel function of the second kind. diff --git a/content/flux/v0.x/stdlib/math/y1.md b/content/flux/v0.64/stdlib/math/y1.md similarity index 92% rename from content/flux/v0.x/stdlib/math/y1.md rename to content/flux/v0.64/stdlib/math/y1.md index 6981e85861..47b74b4537 100644 --- a/content/flux/v0.x/stdlib/math/y1.md +++ b/content/flux/v0.64/stdlib/math/y1.md @@ -3,12 +3,12 @@ title: math.y1() function description: The math.y1() function returns the order-one Bessel function of the second kind. menu: - flux_0_x: + flux_0_64: name: math.y1 parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/y1/ + - /flux/v0.64/functions/math/y1/ --- The `math.y1()` function returns the order-one Bessel function of the second kind. diff --git a/content/flux/v0.x/stdlib/math/yn.md b/content/flux/v0.64/stdlib/math/yn.md similarity index 94% rename from content/flux/v0.x/stdlib/math/yn.md rename to content/flux/v0.64/stdlib/math/yn.md index 35173853c4..c8024645be 100644 --- a/content/flux/v0.x/stdlib/math/yn.md +++ b/content/flux/v0.64/stdlib/math/yn.md @@ -3,12 +3,12 @@ title: math.yn() function description: The math.yn() function returns the order-n Bessel function of the second kind. menu: - flux_0_x: + flux_0_64: name: math.yn parent: Math weight: 1 aliases: - - /flux/v0.x/functions/math/yn/ + - /flux/v0.64/functions/math/yn/ --- The `math.yn()` function returns the order-n Bessel function of the second kind. diff --git a/content/flux/v0.x/stdlib/regexp/_index.md b/content/flux/v0.64/stdlib/regexp/_index.md similarity index 91% rename from content/flux/v0.x/stdlib/regexp/_index.md rename to content/flux/v0.64/stdlib/regexp/_index.md index 0884e5cfb6..1cc6a44cca 100644 --- a/content/flux/v0.x/stdlib/regexp/_index.md +++ b/content/flux/v0.64/stdlib/regexp/_index.md @@ -4,13 +4,13 @@ description: > The Flux regular expressions package includes functions that provide enhanced regular expression functionality. Import the `regexp` package. menu: - flux_0_x: + flux_0_64: name: Regular expressions identifier: regexp-package parent: Standard library weight: 1 aliases: - - /flux/v0.x/functions/regexp/ + - /flux/v0.64/functions/regexp/ --- The Flux regular expressions package includes functions that provide enhanced diff --git a/content/flux/v0.x/stdlib/regexp/compile.md b/content/flux/v0.64/stdlib/regexp/compile.md similarity index 94% rename from content/flux/v0.x/stdlib/regexp/compile.md rename to content/flux/v0.64/stdlib/regexp/compile.md index aabfab3900..7c45faea67 100644 --- a/content/flux/v0.x/stdlib/regexp/compile.md +++ b/content/flux/v0.64/stdlib/regexp/compile.md @@ -4,12 +4,12 @@ description: > The `regexp.compile()` function parses a regular expression and, if successful, returns a Regexp object that can be used to match against text. menu: - flux_0_x: + flux_0_64: name: regexp.compile parent: regexp-package weight: 1 aliases: - - /flux/v0.x/functions/regexp/compile/ + - /flux/v0.64/functions/regexp/compile/ --- The `regexp.compile()` function parses a regular expression and, if successful, diff --git a/content/flux/v0.x/stdlib/regexp/findstring.md b/content/flux/v0.64/stdlib/regexp/findstring.md similarity index 93% rename from content/flux/v0.x/stdlib/regexp/findstring.md rename to content/flux/v0.64/stdlib/regexp/findstring.md index fe759ead86..1d5e849a36 100644 --- a/content/flux/v0.x/stdlib/regexp/findstring.md +++ b/content/flux/v0.64/stdlib/regexp/findstring.md @@ -3,12 +3,12 @@ title: regexp.findString() function description: The `regexp.findString()` function returns the left-most regular expression match in a string. menu: - flux_0_x: + flux_0_64: name: regexp.findString parent: regexp-package weight: 1 aliases: - - /flux/v0.x/functions/regexp/findstring/ + - /flux/v0.64/functions/regexp/findstring/ --- The `regexp.findString()` function returns the left-most regular expression match in a string. diff --git a/content/flux/v0.x/stdlib/regexp/findstringindex.md b/content/flux/v0.64/stdlib/regexp/findstringindex.md similarity index 94% rename from content/flux/v0.x/stdlib/regexp/findstringindex.md rename to content/flux/v0.64/stdlib/regexp/findstringindex.md index 1229ca3c45..0ef958c97b 100644 --- a/content/flux/v0.x/stdlib/regexp/findstringindex.md +++ b/content/flux/v0.64/stdlib/regexp/findstringindex.md @@ -5,12 +5,12 @@ description: > of integers defining the beginning and ending indexes of the left-most regular expression match in a string. menu: - flux_0_x: + flux_0_64: name: regexp.findStringIndex parent: regexp-package weight: 1 aliases: - - /flux/v0.x/functions/regexp/findstringindex/ + - /flux/v0.64/functions/regexp/findstringindex/ --- The `regexp.findStringIndex()` function returns a two-element array of integers defining diff --git a/content/flux/v0.x/stdlib/regexp/getstring.md b/content/flux/v0.64/stdlib/regexp/getstring.md similarity index 93% rename from content/flux/v0.x/stdlib/regexp/getstring.md rename to content/flux/v0.64/stdlib/regexp/getstring.md index 95b391e508..05a7203f3d 100644 --- a/content/flux/v0.x/stdlib/regexp/getstring.md +++ b/content/flux/v0.64/stdlib/regexp/getstring.md @@ -3,12 +3,12 @@ title: regexp.getString() function description: The `regexp.getString()` function returns the source string used to compile a regular expression. menu: - flux_0_x: + flux_0_64: name: regexp.getString parent: regexp-package weight: 1 aliases: - - /flux/v0.x/functions/regexp/getstring/ + - /flux/v0.64/functions/regexp/getstring/ --- The `regexp.getString()` function returns the source string used to compile a regular expression. diff --git a/content/flux/v0.x/stdlib/regexp/matchregexpstring.md b/content/flux/v0.64/stdlib/regexp/matchregexpstring.md similarity index 93% rename from content/flux/v0.x/stdlib/regexp/matchregexpstring.md rename to content/flux/v0.64/stdlib/regexp/matchregexpstring.md index 37bcd91eaf..c6cc57c443 100644 --- a/content/flux/v0.x/stdlib/regexp/matchregexpstring.md +++ b/content/flux/v0.64/stdlib/regexp/matchregexpstring.md @@ -4,12 +4,12 @@ description: > The `regexp.matchRegexpString()` function tests if a string contains any match to a regular expression. menu: - flux_0_x: + flux_0_64: name: regexp.matchRegexpString parent: regexp-package weight: 1 aliases: - - /flux/v0.x/functions/regexp/matchregexpstring/ + - /flux/v0.64/functions/regexp/matchregexpstring/ --- The `regexp.matchRegexpString()` function tests if a string contains any match diff --git a/content/flux/v0.x/stdlib/regexp/quotemeta.md b/content/flux/v0.64/stdlib/regexp/quotemeta.md similarity index 93% rename from content/flux/v0.x/stdlib/regexp/quotemeta.md rename to content/flux/v0.64/stdlib/regexp/quotemeta.md index ac4d3d8812..6afc3b8f28 100644 --- a/content/flux/v0.x/stdlib/regexp/quotemeta.md +++ b/content/flux/v0.64/stdlib/regexp/quotemeta.md @@ -4,12 +4,12 @@ description: > The `regexp.quoteMeta()` function escapes all regular expression metacharacters inside of a string. menu: - flux_0_x: + flux_0_64: name: regexp.quoteMeta parent: regexp-package weight: 1 aliases: - - /flux/v0.x/functions/regexp/quotemeta/ + - /flux/v0.64/functions/regexp/quotemeta/ --- The `regexp.quoteMeta()` function escapes all regular expression metacharacters inside of a string. diff --git a/content/flux/v0.x/stdlib/regexp/replaceallstring.md b/content/flux/v0.64/stdlib/regexp/replaceallstring.md similarity index 94% rename from content/flux/v0.x/stdlib/regexp/replaceallstring.md rename to content/flux/v0.64/stdlib/regexp/replaceallstring.md index 4f02612ee9..5ca7e71e9d 100644 --- a/content/flux/v0.x/stdlib/regexp/replaceallstring.md +++ b/content/flux/v0.64/stdlib/regexp/replaceallstring.md @@ -4,12 +4,12 @@ description: > The `regexp.replaceAllString()` function replaces all regular expression matches in a string with a specified replacement. menu: - flux_0_x: + flux_0_64: name: regexp.replaceAllString parent: regexp-package weight: 1 aliases: - - /flux/v0.x/functions/regexp/replaceallstring/ + - /flux/v0.64/functions/regexp/replaceallstring/ --- The `regexp.replaceAllString()` function replaces all regular expression matches diff --git a/content/flux/v0.x/stdlib/regexp/splitregexp.md b/content/flux/v0.64/stdlib/regexp/splitregexp.md similarity index 93% rename from content/flux/v0.x/stdlib/regexp/splitregexp.md rename to content/flux/v0.64/stdlib/regexp/splitregexp.md index 9bb88d4931..43908c09bf 100644 --- a/content/flux/v0.x/stdlib/regexp/splitregexp.md +++ b/content/flux/v0.64/stdlib/regexp/splitregexp.md @@ -5,12 +5,12 @@ description: > separated by regular expression matches and returns an array of `i` substrings between matches. menu: - flux_0_x: + flux_0_64: name: regexp.splitRegexp parent: regexp-package weight: 1 aliases: - - /flux/v0.x/functions/regexp/splitregexp/ + - /flux/v0.64/functions/regexp/splitregexp/ --- The `regexp.splitRegexp()` function splits a string into substrings separated by diff --git a/content/flux/v0.x/stdlib/runtime/_index.md b/content/flux/v0.64/stdlib/runtime/_index.md similarity index 90% rename from content/flux/v0.x/stdlib/runtime/_index.md rename to content/flux/v0.64/stdlib/runtime/_index.md index b99124af38..41e350f90c 100644 --- a/content/flux/v0.x/stdlib/runtime/_index.md +++ b/content/flux/v0.64/stdlib/runtime/_index.md @@ -4,12 +4,12 @@ description: > The Flux runtime package includes functions that provide information about the current Flux runtime. Import the `runtime` package. menu: - flux_0_x: + flux_0_64: name: Runtime parent: Standard library weight: 1 aliases: - - /flux/v0.x/functions/runtime/ + - /flux/v0.64/functions/runtime/ --- The Flux runtime package includes functions that provide information about the diff --git a/content/flux/v0.x/stdlib/runtime/version.md b/content/flux/v0.64/stdlib/runtime/version.md similarity index 87% rename from content/flux/v0.x/stdlib/runtime/version.md rename to content/flux/v0.64/stdlib/runtime/version.md index de119d5b94..70033c494e 100644 --- a/content/flux/v0.x/stdlib/runtime/version.md +++ b/content/flux/v0.64/stdlib/runtime/version.md @@ -2,12 +2,12 @@ title: runtime.version() function description: The `runtime.version()` function returns the current Flux version. menu: - flux_0_x: + flux_0_64: name: runtime.version parent: Runtime weight: 1 aliases: - - /flux/v0.x/functions/runtime/version/ + - /flux/v0.64/functions/runtime/version/ --- The `runtime.version()` function returns the current Flux version. diff --git a/content/flux/v0.x/stdlib/sql/_index.md b/content/flux/v0.64/stdlib/sql/_index.md similarity index 90% rename from content/flux/v0.x/stdlib/sql/_index.md rename to content/flux/v0.64/stdlib/sql/_index.md index 8168072c5c..9b6ed7520b 100644 --- a/content/flux/v0.x/stdlib/sql/_index.md +++ b/content/flux/v0.64/stdlib/sql/_index.md @@ -4,12 +4,12 @@ description: > The Flux SQL package provides tools for working with data in SQL databases such as MySQL, PostgreSQL, and SQLite. menu: - flux_0_x: + flux_0_64: name: SQL parent: Standard library weight: 1 aliases: - - /flux/v0.x/functions/sql/ + - /flux/v0.64/functions/sql/ --- SQL Flux functions provide tools for working with data in SQL databases such as diff --git a/content/flux/v0.x/stdlib/sql/from.md b/content/flux/v0.64/stdlib/sql/from.md similarity index 92% rename from content/flux/v0.x/stdlib/sql/from.md rename to content/flux/v0.64/stdlib/sql/from.md index 6bc7a291dd..6ba5513b90 100644 --- a/content/flux/v0.x/stdlib/sql/from.md +++ b/content/flux/v0.64/stdlib/sql/from.md @@ -2,12 +2,12 @@ title: sql.from() function description: The `sql.from()` function retrieves data from a SQL data source. menu: - flux_0_x: + flux_0_64: name: sql.from parent: SQL weight: 202 aliases: - - /flux/v0.x/functions/sql/from/ + - /flux/v0.64/functions/sql/from/ --- The `sql.from()` function retrieves data from a SQL data source. @@ -90,7 +90,7 @@ sql.from( {{% warn %}} **InfluxDB OSS** and **InfluxDB Cloud** do not have direct access to the local filesystem and cannot query SQLite data sources. -Use the [Flux REPL](/flux/v0.x/guides/executing-queries#influx-cli-in-flux-mode) to query a SQLite data source +Use the [Flux REPL](/flux/v0.64/guides/executing-queries#influx-cli-in-flux-mode) to query a SQLite data source on your local filesystem. {{% /warn %}} diff --git a/content/flux/v0.x/stdlib/sql/to.md b/content/flux/v0.64/stdlib/sql/to.md similarity index 93% rename from content/flux/v0.x/stdlib/sql/to.md rename to content/flux/v0.64/stdlib/sql/to.md index ed0411a168..f1c3bd1546 100644 --- a/content/flux/v0.x/stdlib/sql/to.md +++ b/content/flux/v0.64/stdlib/sql/to.md @@ -2,12 +2,12 @@ title: sql.to() function description: The `sql.to()` function writes data to a SQL database. menu: - flux_0_x: + flux_0_64: name: sql.to parent: SQL weight: 1 aliases: - - /flux/v0.x/functions/sql/to/ + - /flux/v0.64/functions/sql/to/ --- The `sql.to()` function writes data to a SQL database. @@ -101,7 +101,7 @@ sql.to( {{% warn %}} **InfluxDB OSS** and **InfluxDB Cloud** do not have direct access to the local filesystem and cannot write to SQLite data sources. -Use the [Flux REPL](/flux/v0.x/guides/executing-queries#influx-cli-in-flux-mode) to write to an SQLite data +Use the [Flux REPL](/flux/v0.64/guides/executing-queries#influx-cli-in-flux-mode) to write to an SQLite data source on your local filesystem. {{% /warn %}} diff --git a/content/flux/v0.x/stdlib/strings/_index.md b/content/flux/v0.64/stdlib/strings/_index.md similarity index 89% rename from content/flux/v0.x/stdlib/strings/_index.md rename to content/flux/v0.64/stdlib/strings/_index.md index ec0feaf7a3..f803ff4787 100644 --- a/content/flux/v0.x/stdlib/strings/_index.md +++ b/content/flux/v0.64/stdlib/strings/_index.md @@ -4,12 +4,12 @@ description: > The Flux strings package provides functions to manipulate UTF-8 encoded strings. Import the `strings` package. menu: - flux_0_x: + flux_0_64: name: Strings parent: Standard library weight: 1 aliases: - - /flux/v0.x/functions/strings/ + - /flux/v0.64/functions/strings/ --- The Flux string package provides functions to manipulate UTF-8 encoded strings. diff --git a/content/flux/v0.x/stdlib/strings/compare.md b/content/flux/v0.64/stdlib/strings/compare.md similarity index 94% rename from content/flux/v0.x/stdlib/strings/compare.md rename to content/flux/v0.64/stdlib/strings/compare.md index b7d6812d36..295c201de7 100644 --- a/content/flux/v0.x/stdlib/strings/compare.md +++ b/content/flux/v0.64/stdlib/strings/compare.md @@ -3,12 +3,12 @@ title: strings.compare() function description: The strings.compare() function compares the lexicographical order of two strings. menu: - flux_0_x: + flux_0_64: name: strings.compare parent: Strings weight: 1 aliases: - - /flux/v0.x/functions/strings/compare/ + - /flux/v0.64/functions/strings/compare/ --- The `strings.compare()` function compares the lexicographical order of two strings. diff --git a/content/flux/v0.x/stdlib/strings/containsany.md b/content/flux/v0.64/stdlib/strings/containsany.md similarity index 93% rename from content/flux/v0.x/stdlib/strings/containsany.md rename to content/flux/v0.64/stdlib/strings/containsany.md index 0734646547..707ca8ee52 100644 --- a/content/flux/v0.x/stdlib/strings/containsany.md +++ b/content/flux/v0.64/stdlib/strings/containsany.md @@ -4,12 +4,12 @@ description: > The strings.containsAny() function reports whether a specified string contains any characters from from another string. menu: - flux_0_x: + flux_0_64: name: strings.containsAny parent: Strings weight: 1 aliases: - - /flux/v0.x/functions/strings/containsany/ + - /flux/v0.64/functions/strings/containsany/ --- The `strings.containsAny()` function reports whether a specified string contains diff --git a/content/flux/v0.x/stdlib/strings/containsstr.md b/content/flux/v0.64/stdlib/strings/containsstr.md similarity index 93% rename from content/flux/v0.x/stdlib/strings/containsstr.md rename to content/flux/v0.64/stdlib/strings/containsstr.md index 4130254bcc..de7ef2bd67 100644 --- a/content/flux/v0.x/stdlib/strings/containsstr.md +++ b/content/flux/v0.64/stdlib/strings/containsstr.md @@ -3,12 +3,12 @@ title: strings.containsStr() function description: The strings.containsStr() function reports whether a string contains a specified substring. menu: - flux_0_x: + flux_0_64: name: strings.containsStr parent: Strings weight: 1 aliases: - - /flux/v0.x/functions/strings/containsstr/ + - /flux/v0.64/functions/strings/containsstr/ --- The `strings.containsStr()` function reports whether a string contains a specified substring. diff --git a/content/flux/v0.x/stdlib/strings/countstr.md b/content/flux/v0.64/stdlib/strings/countstr.md similarity index 94% rename from content/flux/v0.x/stdlib/strings/countstr.md rename to content/flux/v0.64/stdlib/strings/countstr.md index a614ede9c3..b43571bae9 100644 --- a/content/flux/v0.x/stdlib/strings/countstr.md +++ b/content/flux/v0.64/stdlib/strings/countstr.md @@ -4,12 +4,12 @@ description: > The strings.countStr() function counts the number of non-overlapping instances of a substring appears in a string. menu: - flux_0_x: + flux_0_64: name: strings.countStr parent: Strings weight: 1 aliases: - - /flux/v0.x/functions/strings/countstr/ + - /flux/v0.64/functions/strings/countstr/ --- The `strings.countStr()` function counts the number of non-overlapping instances diff --git a/content/flux/v0.x/stdlib/strings/equalfold.md b/content/flux/v0.64/stdlib/strings/equalfold.md similarity index 93% rename from content/flux/v0.x/stdlib/strings/equalfold.md rename to content/flux/v0.64/stdlib/strings/equalfold.md index 67c31e5c90..b6cb2cf06a 100644 --- a/content/flux/v0.x/stdlib/strings/equalfold.md +++ b/content/flux/v0.64/stdlib/strings/equalfold.md @@ -4,12 +4,12 @@ description: > The strings.equalFold() function reports whether two UTF-8 strings are equal under Unicode case-folding. menu: - flux_0_x: + flux_0_64: name: strings.equalFold parent: Strings weight: 1 aliases: - - /flux/v0.x/functions/strings/equalfold/ + - /flux/v0.64/functions/strings/equalfold/ --- The `strings.equalFold()` function reports whether two UTF-8 strings are equal diff --git a/content/flux/v0.x/stdlib/strings/hasprefix.md b/content/flux/v0.64/stdlib/strings/hasprefix.md similarity index 92% rename from content/flux/v0.x/stdlib/strings/hasprefix.md rename to content/flux/v0.64/stdlib/strings/hasprefix.md index 98dda915bb..beab529899 100644 --- a/content/flux/v0.x/stdlib/strings/hasprefix.md +++ b/content/flux/v0.64/stdlib/strings/hasprefix.md @@ -3,12 +3,12 @@ title: strings.hasPrefix() function description: The strings.hasPrefix() function indicates if a string begins with a specific prefix. menu: - flux_0_x: + flux_0_64: name: strings.hasPrefix parent: Strings weight: 1 aliases: - - /flux/v0.x/functions/strings/hasprefix/ + - /flux/v0.64/functions/strings/hasprefix/ --- The `strings.hasPrefix()` function indicates if a string begins with a specified prefix. diff --git a/content/flux/v0.x/stdlib/strings/hassuffix.md b/content/flux/v0.64/stdlib/strings/hassuffix.md similarity index 92% rename from content/flux/v0.x/stdlib/strings/hassuffix.md rename to content/flux/v0.64/stdlib/strings/hassuffix.md index f026d3ff3d..0024cc088c 100644 --- a/content/flux/v0.x/stdlib/strings/hassuffix.md +++ b/content/flux/v0.64/stdlib/strings/hassuffix.md @@ -3,12 +3,12 @@ title: strings.hasSuffix() function description: The strings.hasSuffix() function indicates if a string ends with a specified suffix. menu: - flux_0_x: + flux_0_64: name: strings.hasSuffix parent: Strings weight: 1 aliases: - - /flux/v0.x/functions/strings/hassuffix/ + - /flux/v0.64/functions/strings/hassuffix/ --- The `strings.hasSuffix()` function indicates if a string ends with a specified suffix. diff --git a/content/flux/v0.x/stdlib/strings/index-func.md b/content/flux/v0.64/stdlib/strings/index-func.md similarity index 93% rename from content/flux/v0.x/stdlib/strings/index-func.md rename to content/flux/v0.64/stdlib/strings/index-func.md index 5e56fbb1c8..3596c2a238 100644 --- a/content/flux/v0.x/stdlib/strings/index-func.md +++ b/content/flux/v0.64/stdlib/strings/index-func.md @@ -4,12 +4,12 @@ description: > The strings.index() function returns the index of the first instance of a substring in another string. menu: - flux_0_x: + flux_0_64: name: strings.index parent: Strings weight: 1 aliases: - - /flux/v0.x/functions/strings/index-func/ + - /flux/v0.64/functions/strings/index-func/ --- The `strings.index()` function returns the index of the first instance of a substring diff --git a/content/flux/v0.x/stdlib/strings/indexany.md b/content/flux/v0.64/stdlib/strings/indexany.md similarity index 94% rename from content/flux/v0.x/stdlib/strings/indexany.md rename to content/flux/v0.64/stdlib/strings/indexany.md index d8302d5f34..24638b3fae 100644 --- a/content/flux/v0.x/stdlib/strings/indexany.md +++ b/content/flux/v0.64/stdlib/strings/indexany.md @@ -4,12 +4,12 @@ description: > The strings.indexAny() function returns the index of the first instance of specified characters in a string. menu: - flux_0_x: + flux_0_64: name: strings.indexAny parent: Strings weight: 1 aliases: - - /flux/v0.x/functions/strings/indexany/ + - /flux/v0.64/functions/strings/indexany/ --- The `strings.indexAny()` function returns the index of the first instance of specified characters in a string. diff --git a/content/flux/v0.x/stdlib/strings/isdigit.md b/content/flux/v0.64/stdlib/strings/isdigit.md similarity index 91% rename from content/flux/v0.x/stdlib/strings/isdigit.md rename to content/flux/v0.64/stdlib/strings/isdigit.md index 96f1ca1005..7914a79eb0 100644 --- a/content/flux/v0.x/stdlib/strings/isdigit.md +++ b/content/flux/v0.64/stdlib/strings/isdigit.md @@ -3,12 +3,12 @@ title: strings.isDigit() function description: The strings.isDigit() function tests if a single character string is a digit (0-9). menu: - flux_0_x: + flux_0_64: name: strings.isDigit parent: Strings weight: 1 aliases: - - /flux/v0.x/functions/strings/isdigit/ + - /flux/v0.64/functions/strings/isdigit/ --- The `strings.isDigit()` function tests if a single-character string is a digit (0-9). diff --git a/content/flux/v0.x/stdlib/strings/isletter.md b/content/flux/v0.64/stdlib/strings/isletter.md similarity index 92% rename from content/flux/v0.x/stdlib/strings/isletter.md rename to content/flux/v0.64/stdlib/strings/isletter.md index f43d000052..91e1b65324 100644 --- a/content/flux/v0.x/stdlib/strings/isletter.md +++ b/content/flux/v0.64/stdlib/strings/isletter.md @@ -3,12 +3,12 @@ title: strings.isLetter() function description: The strings.isLetter() function tests if a single character string is a letter (a-z, A-Z). menu: - flux_0_x: + flux_0_64: name: strings.isLetter parent: Strings weight: 1 aliases: - - /flux/v0.x/functions/strings/isletter/ + - /flux/v0.64/functions/strings/isletter/ --- The `strings.isLetter()` function tests if a single character string is a letter (a-z, A-Z). diff --git a/content/flux/v0.x/stdlib/strings/islower.md b/content/flux/v0.64/stdlib/strings/islower.md similarity index 92% rename from content/flux/v0.x/stdlib/strings/islower.md rename to content/flux/v0.64/stdlib/strings/islower.md index 57df346561..0df50dde26 100644 --- a/content/flux/v0.x/stdlib/strings/islower.md +++ b/content/flux/v0.64/stdlib/strings/islower.md @@ -3,12 +3,12 @@ title: strings.isLower() function description: The strings.isLower() function tests if a single-character string is lowercase. menu: - flux_0_x: + flux_0_64: name: strings.isLower parent: Strings weight: 1 aliases: - - /flux/v0.x/functions/strings/islower/ + - /flux/v0.64/functions/strings/islower/ --- The `strings.isLower()` function tests if a single-character string is lowercase. diff --git a/content/flux/v0.x/stdlib/strings/isupper.md b/content/flux/v0.64/stdlib/strings/isupper.md similarity index 92% rename from content/flux/v0.x/stdlib/strings/isupper.md rename to content/flux/v0.64/stdlib/strings/isupper.md index 75d5ed2ca2..a0ea72edb2 100644 --- a/content/flux/v0.x/stdlib/strings/isupper.md +++ b/content/flux/v0.64/stdlib/strings/isupper.md @@ -3,12 +3,12 @@ title: strings.isUpper() function description: The strings.isUpper() function tests if a single character string is uppercase. menu: - flux_0_x: + flux_0_64: name: strings.isUpper parent: Strings weight: 1 aliases: - - /flux/v0.x/functions/strings/isupper/ + - /flux/v0.64/functions/strings/isupper/ --- The `strings.isUpper()` function tests if a single character string is uppercase. diff --git a/content/flux/v0.x/stdlib/strings/joinstr.md b/content/flux/v0.64/stdlib/strings/joinstr.md similarity index 93% rename from content/flux/v0.x/stdlib/strings/joinstr.md rename to content/flux/v0.64/stdlib/strings/joinstr.md index 0c49f1b443..afb39d35d9 100644 --- a/content/flux/v0.x/stdlib/strings/joinstr.md +++ b/content/flux/v0.64/stdlib/strings/joinstr.md @@ -4,12 +4,12 @@ description: > The strings.joinStr() function concatenates the elements of a string array into a single string using a specified separator. menu: - flux_0_x: + flux_0_64: name: strings.joinStr parent: Strings weight: 1 aliases: - - /flux/v0.x/functions/strings/joinstr/ + - /flux/v0.64/functions/strings/joinstr/ --- The `strings.joinStr()` function concatenates elements of a string array into diff --git a/content/flux/v0.x/stdlib/strings/lastindex.md b/content/flux/v0.64/stdlib/strings/lastindex.md similarity index 93% rename from content/flux/v0.x/stdlib/strings/lastindex.md rename to content/flux/v0.64/stdlib/strings/lastindex.md index 97c07fc4f1..c6d385e04f 100644 --- a/content/flux/v0.x/stdlib/strings/lastindex.md +++ b/content/flux/v0.64/stdlib/strings/lastindex.md @@ -4,12 +4,12 @@ description: > The strings.lastIndex() function returns the index of the last instance of a substring in a string or `-1` if substring is not present. menu: - flux_0_x: + flux_0_64: name: strings.lastIndex parent: Strings weight: 1 aliases: - - /flux/v0.x/functions/strings/lastindex/ + - /flux/v0.64/functions/strings/lastindex/ --- The `strings.lastIndex()` function returns the index of the last instance of a substring diff --git a/content/flux/v0.x/stdlib/strings/lastindexany.md b/content/flux/v0.64/stdlib/strings/lastindexany.md similarity index 93% rename from content/flux/v0.x/stdlib/strings/lastindexany.md rename to content/flux/v0.64/stdlib/strings/lastindexany.md index 683a960e21..a45bfe11e5 100644 --- a/content/flux/v0.x/stdlib/strings/lastindexany.md +++ b/content/flux/v0.64/stdlib/strings/lastindexany.md @@ -3,12 +3,12 @@ title: strings.lastIndexAny() function description: The `strings.lastIndexAny()` function returns the index of the last instance of any specified characters in a string. menu: - flux_0_x: + flux_0_64: name: strings.lastIndexAny parent: Strings weight: 1 aliases: - - /flux/v0.x/functions/strings/lastindexany/ + - /flux/v0.64/functions/strings/lastindexany/ --- The `strings.lastIndexAny()` function returns the index of the last instance of any specified characters in a string. diff --git a/content/flux/v0.x/stdlib/strings/repeat.md b/content/flux/v0.64/stdlib/strings/repeat.md similarity index 93% rename from content/flux/v0.x/stdlib/strings/repeat.md rename to content/flux/v0.64/stdlib/strings/repeat.md index 1b6e266419..48d76819fe 100644 --- a/content/flux/v0.x/stdlib/strings/repeat.md +++ b/content/flux/v0.64/stdlib/strings/repeat.md @@ -3,12 +3,12 @@ title: strings.repeat() function description: The strings.repeat() function returns a string consisting of `i` copies of a specified string. menu: - flux_0_x: + flux_0_64: name: strings.repeat parent: Strings weight: 1 aliases: - - /flux/v0.x/functions/strings/repeat/ + - /flux/v0.64/functions/strings/repeat/ --- The `strings.repeat()` function returns a string consisting of `i` copies of a specified string. diff --git a/content/flux/v0.x/stdlib/strings/replace.md b/content/flux/v0.64/stdlib/strings/replace.md similarity index 94% rename from content/flux/v0.x/stdlib/strings/replace.md rename to content/flux/v0.64/stdlib/strings/replace.md index 4be42bd74a..1ad5d4c824 100644 --- a/content/flux/v0.x/stdlib/strings/replace.md +++ b/content/flux/v0.64/stdlib/strings/replace.md @@ -4,12 +4,12 @@ description: > The strings.replace() function replaces the first `i` non-overlapping instances of a substring with a specified replacement. menu: - flux_0_x: + flux_0_64: name: strings.replace parent: Strings weight: 1 aliases: - - /flux/v0.x/functions/strings/replace/ + - /flux/v0.64/functions/strings/replace/ --- The `strings.replace()` function replaces the first `i` non-overlapping instances diff --git a/content/flux/v0.x/stdlib/strings/replaceall.md b/content/flux/v0.64/stdlib/strings/replaceall.md similarity index 94% rename from content/flux/v0.x/stdlib/strings/replaceall.md rename to content/flux/v0.64/stdlib/strings/replaceall.md index 1c565369d2..9761a541b0 100644 --- a/content/flux/v0.x/stdlib/strings/replaceall.md +++ b/content/flux/v0.64/stdlib/strings/replaceall.md @@ -4,12 +4,12 @@ description: > The strings.replaceAll() function replaces all non-overlapping instances of a substring with a specified replacement. menu: - flux_0_x: + flux_0_64: name: strings.replaceAll parent: Strings weight: 1 aliases: - - /flux/v0.x/functions/strings/replaceall/ + - /flux/v0.64/functions/strings/replaceall/ --- The `strings.replaceAll()` function replaces all non-overlapping instances of a diff --git a/content/flux/v0.x/stdlib/strings/split.md b/content/flux/v0.64/stdlib/strings/split.md similarity index 93% rename from content/flux/v0.x/stdlib/strings/split.md rename to content/flux/v0.64/stdlib/strings/split.md index 479298c450..1e1d7abb63 100644 --- a/content/flux/v0.x/stdlib/strings/split.md +++ b/content/flux/v0.64/stdlib/strings/split.md @@ -4,12 +4,12 @@ description: > The strings.split() function splits a string on a specified separator and returns an array of substrings. menu: - flux_0_x: + flux_0_64: name: strings.split parent: Strings weight: 1 aliases: - - /flux/v0.x/functions/strings/split/ + - /flux/v0.64/functions/strings/split/ --- The `strings.split()` function splits a string on a specified separator and returns diff --git a/content/flux/v0.x/stdlib/strings/splitafter.md b/content/flux/v0.64/stdlib/strings/splitafter.md similarity index 93% rename from content/flux/v0.x/stdlib/strings/splitafter.md rename to content/flux/v0.64/stdlib/strings/splitafter.md index ac8723a52a..41d17fc614 100644 --- a/content/flux/v0.x/stdlib/strings/splitafter.md +++ b/content/flux/v0.64/stdlib/strings/splitafter.md @@ -4,12 +4,12 @@ description: > The strings.splitAfter() function splits a string after a specified separator and returns an array of substrings. menu: - flux_0_x: + flux_0_64: name: strings.splitAfter parent: Strings weight: 1 aliases: - - /flux/v0.x/functions/strings/splitafter/ + - /flux/v0.64/functions/strings/splitafter/ --- The `strings.splitAfter()` function splits a string after a specified separator and returns diff --git a/content/flux/v0.x/stdlib/strings/splitaftern.md b/content/flux/v0.64/stdlib/strings/splitaftern.md similarity index 94% rename from content/flux/v0.x/stdlib/strings/splitaftern.md rename to content/flux/v0.64/stdlib/strings/splitaftern.md index 7220a391de..bcc88e414c 100644 --- a/content/flux/v0.x/stdlib/strings/splitaftern.md +++ b/content/flux/v0.64/stdlib/strings/splitaftern.md @@ -4,12 +4,12 @@ description: > The strings.splitAfterN() function splits a string after a specified separator and returns an array of `i` substrings. menu: - flux_0_x: + flux_0_64: name: strings.splitAfterN parent: Strings weight: 1 aliases: - - /flux/v0.x/functions/strings/splitaftern/ + - /flux/v0.64/functions/strings/splitaftern/ --- The `strings.splitAfterN()` function splits a string after a specified separator and returns diff --git a/content/flux/v0.x/stdlib/strings/splitn.md b/content/flux/v0.64/stdlib/strings/splitn.md similarity index 94% rename from content/flux/v0.x/stdlib/strings/splitn.md rename to content/flux/v0.64/stdlib/strings/splitn.md index 5bc5a8f986..c5c3ec1217 100644 --- a/content/flux/v0.x/stdlib/strings/splitn.md +++ b/content/flux/v0.64/stdlib/strings/splitn.md @@ -4,12 +4,12 @@ description: > The strings.splitN() function splits a string on a specified separator and returns an array of `i` substrings. menu: - flux_0_x: + flux_0_64: name: strings.splitN parent: Strings weight: 1 aliases: - - /flux/v0.x/functions/strings/splitn/ + - /flux/v0.64/functions/strings/splitn/ --- The `strings.splitN()` function splits a string on a specified separator and returns diff --git a/content/flux/v0.x/stdlib/strings/strlen.md b/content/flux/v0.64/stdlib/strings/strlen.md similarity index 94% rename from content/flux/v0.x/stdlib/strings/strlen.md rename to content/flux/v0.64/stdlib/strings/strlen.md index 393edca84c..71afe1eb5d 100644 --- a/content/flux/v0.x/stdlib/strings/strlen.md +++ b/content/flux/v0.64/stdlib/strings/strlen.md @@ -4,12 +4,12 @@ description: > The strings.strlen() function returns the length of a string. String length is determined by the number of UTF code points a string contains. menu: - flux_0_x: + flux_0_64: name: strings.strlen parent: Strings weight: 301 aliases: - - /flux/v0.x/functions/strings/strlen/ + - /flux/v0.64/functions/strings/strlen/ --- The `strings.strlen()` function returns the length of a string. diff --git a/content/flux/v0.x/stdlib/strings/substring.md b/content/flux/v0.64/stdlib/strings/substring.md similarity index 94% rename from content/flux/v0.x/stdlib/strings/substring.md rename to content/flux/v0.64/stdlib/strings/substring.md index 9fa434aca4..e7e26f890a 100644 --- a/content/flux/v0.x/stdlib/strings/substring.md +++ b/content/flux/v0.64/stdlib/strings/substring.md @@ -4,12 +4,12 @@ description: > The strings.substring() function returns a substring based on `start` and `end` parameters. Indices are based on UTF code points. menu: - flux_0_x: + flux_0_64: name: strings.substring parent: Strings weight: 301 aliases: - - /flux/v0.x/functions/strings/substring/ + - /flux/v0.64/functions/strings/substring/ --- The `strings.substring()` function returns a substring based on `start` and `end` parameters. diff --git a/content/flux/v0.x/stdlib/strings/title.md b/content/flux/v0.64/stdlib/strings/title.md similarity index 92% rename from content/flux/v0.x/stdlib/strings/title.md rename to content/flux/v0.64/stdlib/strings/title.md index 9fd6a13e42..682eaed75f 100644 --- a/content/flux/v0.x/stdlib/strings/title.md +++ b/content/flux/v0.64/stdlib/strings/title.md @@ -2,12 +2,12 @@ title: strings.title() function description: The strings.title() function converts a string to title case. menu: - flux_0_x: + flux_0_64: name: strings.title parent: Strings weight: 1 aliases: - - /flux/v0.x/functions/strings/title/ + - /flux/v0.64/functions/strings/title/ --- The `strings.title()` function converts a string to title case. diff --git a/content/flux/v0.x/stdlib/strings/tolower.md b/content/flux/v0.64/stdlib/strings/tolower.md similarity index 91% rename from content/flux/v0.x/stdlib/strings/tolower.md rename to content/flux/v0.64/stdlib/strings/tolower.md index cdb012a4b6..4882f8ffa5 100644 --- a/content/flux/v0.x/stdlib/strings/tolower.md +++ b/content/flux/v0.64/stdlib/strings/tolower.md @@ -2,12 +2,12 @@ title: strings.toLower() function description: The strings.toLower() function converts a string to lowercase. menu: - flux_0_x: + flux_0_64: name: strings.toLower parent: Strings weight: 1 aliases: - - /flux/v0.x/functions/strings/tolower/ + - /flux/v0.64/functions/strings/tolower/ --- The `strings.toLower()` function converts a string to lowercase. diff --git a/content/flux/v0.x/stdlib/strings/totitle.md b/content/flux/v0.64/stdlib/strings/totitle.md similarity index 94% rename from content/flux/v0.x/stdlib/strings/totitle.md rename to content/flux/v0.64/stdlib/strings/totitle.md index d638c31cfc..911170293b 100644 --- a/content/flux/v0.x/stdlib/strings/totitle.md +++ b/content/flux/v0.64/stdlib/strings/totitle.md @@ -3,12 +3,12 @@ title: strings.toTitle() function description: The strings.toTitle() function converts all characters in a string to title case. menu: - flux_0_x: + flux_0_64: name: strings.toTitle parent: Strings weight: 1 aliases: - - /flux/v0.x/functions/strings/totitle/ + - /flux/v0.64/functions/strings/totitle/ --- The `strings.toTitle()` function converts all characters in a string to title case. diff --git a/content/flux/v0.x/stdlib/strings/toupper.md b/content/flux/v0.64/stdlib/strings/toupper.md similarity index 94% rename from content/flux/v0.x/stdlib/strings/toupper.md rename to content/flux/v0.64/stdlib/strings/toupper.md index ba8b6876f0..506b248686 100644 --- a/content/flux/v0.x/stdlib/strings/toupper.md +++ b/content/flux/v0.64/stdlib/strings/toupper.md @@ -2,12 +2,12 @@ title: strings.toUpper() function description: The strings.toUpper() function converts a string to uppercase. menu: - flux_0_x: + flux_0_64: name: strings.toUpper parent: Strings weight: 1 aliases: - - /flux/v0.x/functions/strings/toupper/ + - /flux/v0.64/functions/strings/toupper/ --- The `strings.toUpper()` function converts a string to uppercase. diff --git a/content/flux/v0.x/stdlib/strings/trim.md b/content/flux/v0.64/stdlib/strings/trim.md similarity index 94% rename from content/flux/v0.x/stdlib/strings/trim.md rename to content/flux/v0.64/stdlib/strings/trim.md index 8821026f0d..f991d5df7d 100644 --- a/content/flux/v0.x/stdlib/strings/trim.md +++ b/content/flux/v0.64/stdlib/strings/trim.md @@ -4,12 +4,12 @@ description: > The strings.trim() function removes leading and trailing characters specified in the cutset from a string. menu: - flux_0_x: + flux_0_64: name: strings.trim parent: Strings weight: 1 aliases: - - /flux/v0.x/functions/strings/trim/ + - /flux/v0.64/functions/strings/trim/ --- The `strings.trim()` function removes leading and trailing characters specified diff --git a/content/flux/v0.x/stdlib/strings/trimleft.md b/content/flux/v0.64/stdlib/strings/trimleft.md similarity index 93% rename from content/flux/v0.x/stdlib/strings/trimleft.md rename to content/flux/v0.64/stdlib/strings/trimleft.md index be54cdf913..bf78ba8e87 100644 --- a/content/flux/v0.x/stdlib/strings/trimleft.md +++ b/content/flux/v0.64/stdlib/strings/trimleft.md @@ -4,12 +4,12 @@ description: > The strings.trimLeft() function removes specified leading characters from a string. menu: - flux_0_x: + flux_0_64: name: strings.trimLeft parent: Strings weight: 1 aliases: - - /flux/v0.x/functions/strings/trimleft/ + - /flux/v0.64/functions/strings/trimleft/ --- The `strings.trimLeft()` function removes specified leading characters from a string. diff --git a/content/flux/v0.x/stdlib/strings/trimprefix.md b/content/flux/v0.64/stdlib/strings/trimprefix.md similarity index 93% rename from content/flux/v0.x/stdlib/strings/trimprefix.md rename to content/flux/v0.64/stdlib/strings/trimprefix.md index 12c5517f62..cf03667c67 100644 --- a/content/flux/v0.x/stdlib/strings/trimprefix.md +++ b/content/flux/v0.64/stdlib/strings/trimprefix.md @@ -4,12 +4,12 @@ description: > The `strings.trimPrefix()` function removes a prefix from a string. Strings that do not start with the prefix are returned unchanged. menu: - flux_0_x: + flux_0_64: name: strings.trimPrefix parent: Strings weight: 1 aliases: - - /flux/v0.x/functions/strings/trimprefix/ + - /flux/v0.64/functions/strings/trimprefix/ --- The `strings.trimPrefix()` function removes a prefix from a string. diff --git a/content/flux/v0.x/stdlib/strings/trimright.md b/content/flux/v0.64/stdlib/strings/trimright.md similarity index 94% rename from content/flux/v0.x/stdlib/strings/trimright.md rename to content/flux/v0.64/stdlib/strings/trimright.md index a335b56c43..0bdf070963 100644 --- a/content/flux/v0.x/stdlib/strings/trimright.md +++ b/content/flux/v0.64/stdlib/strings/trimright.md @@ -4,12 +4,12 @@ description: > The strings.trimRight() function removes trailing characters specified in the cutset from a string. menu: - flux_0_x: + flux_0_64: name: strings.trimRight parent: Strings weight: 1 aliases: - - /flux/v0.x/functions/strings/trimright/ + - /flux/v0.64/functions/strings/trimright/ --- The `strings.trimRight()` function removes trailing characters specified in the diff --git a/content/flux/v0.x/stdlib/strings/trimspace.md b/content/flux/v0.64/stdlib/strings/trimspace.md similarity index 92% rename from content/flux/v0.x/stdlib/strings/trimspace.md rename to content/flux/v0.64/stdlib/strings/trimspace.md index 3f070f8e66..db55ba9b1f 100644 --- a/content/flux/v0.x/stdlib/strings/trimspace.md +++ b/content/flux/v0.64/stdlib/strings/trimspace.md @@ -3,12 +3,12 @@ title: strings.trimSpace() function description: The strings.trimSpace() function removes leading and trailing spaces from a string. menu: - flux_0_x: + flux_0_64: name: strings.trimSpace parent: Strings weight: 1 aliases: - - /flux/v0.x/functions/strings/trimspace/ + - /flux/v0.64/functions/strings/trimspace/ --- The `strings.trimSpace()` function removes leading and trailing spaces from a string. diff --git a/content/flux/v0.x/stdlib/strings/trimsuffix.md b/content/flux/v0.64/stdlib/strings/trimsuffix.md similarity index 93% rename from content/flux/v0.x/stdlib/strings/trimsuffix.md rename to content/flux/v0.64/stdlib/strings/trimsuffix.md index b67ba84edd..911a758da7 100644 --- a/content/flux/v0.x/stdlib/strings/trimsuffix.md +++ b/content/flux/v0.64/stdlib/strings/trimsuffix.md @@ -4,12 +4,12 @@ description: > The `strings.trimSuffix()` function removes a suffix from a string. Strings that do not end with the suffix are returned unchanged. menu: - flux_0_x: + flux_0_64: name: strings.trimSuffix parent: Strings weight: 1 aliases: - - /flux/v0.x/functions/strings/trimsuffix/ + - /flux/v0.64/functions/strings/trimsuffix/ --- The `strings.trimSuffix()` function removes a suffix from a string. diff --git a/content/flux/v0.x/stdlib/system/_index.md b/content/flux/v0.64/stdlib/system/_index.md similarity index 96% rename from content/flux/v0.x/stdlib/system/_index.md rename to content/flux/v0.64/stdlib/system/_index.md index 6a68444500..763af7d2b9 100644 --- a/content/flux/v0.x/stdlib/system/_index.md +++ b/content/flux/v0.64/stdlib/system/_index.md @@ -4,7 +4,7 @@ description: > The Flux system package provides functions for reading values from the system. Import the `system` package. menu: - flux_0_x: + flux_0_64: name: System parent: Standard library weight: 1 diff --git a/content/flux/v0.x/stdlib/system/time.md b/content/flux/v0.64/stdlib/system/time.md similarity index 82% rename from content/flux/v0.x/stdlib/system/time.md rename to content/flux/v0.64/stdlib/system/time.md index 83ba87e98d..744bdedfa9 100644 --- a/content/flux/v0.x/stdlib/system/time.md +++ b/content/flux/v0.64/stdlib/system/time.md @@ -2,11 +2,11 @@ title: system.time() function description: The `system.time()` function returns the current system time. aliases: - - /flux/v0.x/functions/misc/systemtime - - /flux/v0.x/functions/built-in/misc/systemtime/ - - /flux/v0.x/stdlib/built-in/misc/systemtime/ + - /flux/v0.64/functions/misc/systemtime + - /flux/v0.64/functions/built-in/misc/systemtime/ + - /flux/v0.64/stdlib/built-in/misc/systemtime/ menu: - flux_0_x: + flux_0_64: name: system.time parent: System weight: 1 @@ -46,4 +46,4 @@ return the same value. --- ### Related functions -- [now()](/flux/v0.x/stdlib/built-in/misc/now/) +- [now()](/flux/v0.64/stdlib/built-in/misc/now/) diff --git a/content/flux/v0.x/stdlib/testing/_index.md b/content/flux/v0.64/stdlib/testing/_index.md similarity index 90% rename from content/flux/v0.x/stdlib/testing/_index.md rename to content/flux/v0.64/stdlib/testing/_index.md index 92e15ee9bd..762bc68ae7 100644 --- a/content/flux/v0.x/stdlib/testing/_index.md +++ b/content/flux/v0.64/stdlib/testing/_index.md @@ -4,12 +4,12 @@ description: > The Flux testing package provides functions that test piped-forward data in specific ways. Import the `testing` package. menu: - flux_0_x: + flux_0_64: name: Testing parent: Standard library weight: 1 aliases: - - /flux/v0.x/functions/testing/ + - /flux/v0.64/functions/testing/ --- The Flux testing package provides functions that test piped-forward data in specific ways. diff --git a/content/flux/v0.x/stdlib/testing/assertempty.md b/content/flux/v0.64/stdlib/testing/assertempty.md similarity index 86% rename from content/flux/v0.x/stdlib/testing/assertempty.md rename to content/flux/v0.64/stdlib/testing/assertempty.md index fca1822100..4a232b2213 100644 --- a/content/flux/v0.x/stdlib/testing/assertempty.md +++ b/content/flux/v0.64/stdlib/testing/assertempty.md @@ -2,12 +2,12 @@ title: testing.assertEmpty() function description: The testing.assertEmpty() function tests if an input stream is empty. menu: - flux_0_x: + flux_0_64: name: testing.assertEmpty parent: Testing weight: 1 aliases: - - /flux/v0.x/functions/testing/assertempty/ + - /flux/v0.64/functions/testing/assertempty/ --- The `testing.assertEmpty()` function tests if an input stream is empty. @@ -26,7 +26,7 @@ _The `testing.assertEmpty()` function can be used to perform in-line tests in a ## Examples #### Check if there is a difference between streams -This example uses the [`testing.diff()` function](/flux/v0.x/stdlib/testing/diff) +This example uses the [`testing.diff()` function](/flux/v0.64/stdlib/testing/diff) which outputs the diff for the two streams. The `.testing.assertEmpty()` function checks to see if the diff is empty. diff --git a/content/flux/v0.x/stdlib/testing/assertequals.md b/content/flux/v0.64/stdlib/testing/assertequals.md similarity index 92% rename from content/flux/v0.x/stdlib/testing/assertequals.md rename to content/flux/v0.64/stdlib/testing/assertequals.md index 21cb89ed9b..1283c68867 100644 --- a/content/flux/v0.x/stdlib/testing/assertequals.md +++ b/content/flux/v0.64/stdlib/testing/assertequals.md @@ -3,10 +3,10 @@ title: testing.assertEquals() function description: The testing.assertEquals() function tests whether two streams have identical data. aliases: - - /flux/v0.x/functions/tests/assertequals - - /flux/v0.x/functions/testing/assertequals/ + - /flux/v0.64/functions/tests/assertequals + - /flux/v0.64/functions/testing/assertequals/ menu: - flux_0_x: + flux_0_64: name: testing.assertEquals parent: Testing weight: 1 diff --git a/content/flux/v0.x/stdlib/testing/diff.md b/content/flux/v0.64/stdlib/testing/diff.md similarity index 96% rename from content/flux/v0.x/stdlib/testing/diff.md rename to content/flux/v0.64/stdlib/testing/diff.md index b958337894..a8be614a20 100644 --- a/content/flux/v0.x/stdlib/testing/diff.md +++ b/content/flux/v0.64/stdlib/testing/diff.md @@ -2,12 +2,12 @@ title: testing.diff() function description: The testing.diff() function produces a diff between two streams. menu: - flux_0_x: + flux_0_64: name: testing.diff parent: Testing weight: 1 aliases: - - /flux/v0.x/functions/testing/diff/ + - /flux/v0.64/functions/testing/diff/ --- The `testing.diff()` function produces a diff between two streams. diff --git a/content/flux/v0.x/introduction/flux-vs-influxql.md b/content/flux/v0.x/introduction/flux-vs-influxql.md deleted file mode 100644 index 547b24a38b..0000000000 --- a/content/flux/v0.x/introduction/flux-vs-influxql.md +++ /dev/null @@ -1,272 +0,0 @@ ---- -title: Flux vs InfluxQL -description: -menu: - flux_0_x: - name: Flux vs InfluxQL - parent: Introduction - weight: 5 ---- - -[InfluxQL](/influxdb/latest/query_language/) is InfluxData's SQL-like query language for interacting with data in InfluxDB. -Flux is an alternative to InfluxQL and other SQL-like query languages for querying and analyzing data. -It uses functional language patterns making it incredibly powerful, flexible, and able to overcome many of the limitations of InfluxQL. -This article outlines many of the tasks possible with Flux but not InfluxQL and provides information about Flux and InfluxQL parity. - -## Possible with Flux - -### Joins -InfluxQL has never supported joins. They can be accomplished using [TICKscript](/kapacitor/latest/tick/introduction/), -but even TICKscript's join capabilities are limited. -Flux's [`join()` function](/flux/v0.x/stdlib/built-in/transformations/join/) allows you -to join data **from any bucket, any measurement, and on any columns** as long as -each data set includes the columns on which they are to be joined. -This opens the door for really powerful and useful operations. - ---- - -_For an in-depth walkthrough of using the `join()` function, -see [How to join data with Flux](/flux/v0.x/guides/join)._ - ---- - -###### Example join operation -```js -dataStream1 = from(bucket: "bucket1") - |> range(start: -1h) - |> filter(fn: (r) => - r._measurement == "network" and - r._field == "bytes-transferred" - ) - -dataStream2 = from(bucket: "bucket1") - |> range(start: -1h) - |> filter(fn: (r) => - r._measurement == "httpd" and - r._field == "requests-per-sec" - ) - -join( - tables: {d1:dataStream1, d2:dataStream2}, - on: ["_time", "_stop", "_start", "host"] - ) -``` - -### Math across measurements -Being able to perform cross-measurement joins also allows you to run calculations using -data from separate measurements – a highly requested feature from the InfluxData community. -The example below takes two data streams from separate measurements, `mem` and `processes`, -joins them, then calculates the average amount of memory used per running process: - -###### Example of math across measurements -```js -// Memory used (in bytes) -memUsed = from(bucket: "telegraf/autogen") - |> range(start: -1h) - |> filter(fn: (r) => - r._measurement == "mem" and - r._field == "used" - ) - -// Total processes running -procTotal = from(bucket: "telegraf/autogen") - |> range(start: -1h) - |> filter(fn: (r) => - r._measurement == "processes" and - r._field == "total" - ) - -// Join memory used with total processes and calculate -// the average memory (in MB) used for running processes. -join( - tables: {mem:memUsed, proc:procTotal}, - on: ["_time", "_stop", "_start", "host"] - ) - |> map(fn: (r) => ({ - _time: r._time, - _value: (r._value_mem / r._value_proc) / 1000000 - }) -) -``` - -### Sort on any column -InfluxQL's sorting capabilities are very limited, allowing you only to control the -sort order of `time` using the `ORDER BY time` clause. -Flux's [`sort()` function](/flux/v0.x/stdlib/built-in/transformations/sort) sorts records based on list of columns. -Depending on the column type, records are sorted alphabetically, numerically, or chronologically. - -###### Example sort operation -```js -from(bucket:"telegraf/autogen") - |> range(start:-12h) - |> filter(fn: (r) => - r._measurement == "system" and - r._field == "uptime" - ) - |> sort(columns:["region", "host", "_value"]) -``` - -### Pivot -Pivoting data tables has never been supported in InfluxQL. -Flux's [`pivot()` function](/flux/v0.x/stdlib/built-in/transformations/pivot) provides the ability -to pivot data tables by specifying `rowKey`, `columnKey`, and `valueColumn` parameters. - -###### Example pivot operation -```js -from(bucket: "telegraf/autogen") - |> range(start: -1h) - |> filter(fn: (r) => - r._measurement == "cpu" and - r.cpu == "cpu-total" - ) - |> pivot( - rowKey:["_time"], - columnKey: ["_field"], - valueColumn: "_value" - ) -``` - -### Histograms -The ability to generate histograms has been a highly requested feature for InfluxQL, but has never been supported. -Flux's [`histogram()` function](/flux/v0.x/stdlib/built-in/transformations/histogram) uses input -data to generate a cumulative histogram with support for other histogram types coming in the future. - ---- - -_For an example of using Flux to create a cumulative histogram, see [Create histograms](/flux/v0.x/guides/histograms)._ - ---- - -###### Example histogram function -```js -from(bucket: "telegraf/autogen") - |> range(start: -1h) - |> filter(fn: (r) => - r._measurement == "mem" and - r._field == "used_percent" - ) - |> histogram( - buckets: [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] - ) -``` - -### Covariance -Flux provides functions for simple covariance calculation. -The [`covariance()` function](/flux/v0.x/stdlib/built-in/transformations/aggregates/covariance) -calculates the covariance between two columns and the [`cov()` function](/flux/v0.x/stdlib/built-in/transformations/aggregates/cov) -calculates the covariance between two data streams. - -###### Example covariance between two columns -```js -from(bucket: "telegraf/autogen") - |> range(start:-5m) - |> covariance(columns: ["x", "y"]) -``` - -###### Example covariance between two streams of data -```js -table1 = from(bucket: "telegraf/autogen") - |> range(start: -15m) - |> filter(fn: (r) => - r._measurement == "measurement_1" - ) - -table2 = from(bucket: "telegraf/autogen") - |> range(start: -15m) - |> filter(fn: (r) => - r._measurement == "measurement_2" - ) - -cov(x: table1, y: table2, on: ["_time", "_field"]) -``` - -## InfluxQL and Flux parity -Flux is working towards complete parity with InfluxQL and new functions are being added to that end. -The table below shows InfluxQL statements, clauses, and functions along with their equivalent Flux functions. - -> The current version of Flux included with InfluxDB is a technical preview and is still in active development. -> New functions are added often and the following table may not represent the current state of Flux. - -### InfluxQL and Flux parity - -| InfluxQL | Flux Functions | -| -------- | -------------- | -| SELECT | [filter()](/flux/v0.x/stdlib/built-in/transformations/filter/) | -| WHERE | [filter()](/flux/v0.x/stdlib/built-in/transformations/filter/), [range()](/flux/v0.x/stdlib/built-in/transformations/range/) | -| GROUP BY | [group()](/flux/v0.x/stdlib/built-in/transformations/group/) | -| INTO | [to()](/flux/v0.x/stdlib/built-in/outputs/to/) * | -| ORDER BY | [sort()](/flux/v0.x/stdlib/built-in/transformations/sort/) | -| LIMIT | [limit()](/flux/v0.x/stdlib/built-in/transformations/limit/) | -| SLIMIT | -- | -| OFFSET | -- | -| SOFFSET | -- | -| SHOW DATABASES | [buckets()](/flux/v0.x/stdlib/built-in/inputs/buckets/) | -| SHOW MEASUREMENTS | [v1.measurements](/flux/v0.x/stdlib/influxdb-v1/measurements) | -| SHOW FIELD KEYS | [keys()](/flux/v0.x/stdlib/built-in/transformations/keys/) | -| SHOW RETENTION POLICIES | [buckets()](/flux/v0.x/stdlib/built-in/inputs/buckets/) | -| SHOW TAG KEYS | [v1.tagKeys()](/flux/v0.x/stdlib/influxdb-v1/tagkeys), [v1.measurementTagKeys()](/flux/v0.x/stdlib/influxdb-v1/measurementtagkeys) | -| SHOW TAG VALUES | [v1.tagValues()](/flux/v0.x/stdlib/influxdb-v1/tagvalues), [v1.measurementTagValues()](/flux/v0.x/stdlib/influxdb-v1/measurementtagvalues) | -| SHOW SERIES | -- | -| CREATE DATABASE | -- | -| DROP DATABASE | -- | -| DROP SERIES | -- | -| DELETE | -- | -| DROP MEASUREMENT | -- | -| DROP SHARD | -- | -| CREATE RETENTION POLICY | -- | -| ALTER RETENTION POLICY | -- | -| DROP RETENTION POLICY | -- | -| COUNT | [count()](/flux/v0.x/stdlib/built-in/transformations/aggregates/count/) | -| DISTINCT | [distinct()](/flux/v0.x/stdlib/built-in/transformations/selectors/distinct/) | -| INTEGRAL | [integral()](/flux/v0.x/stdlib/built-in/transformations/aggregates/integral/) | -| MEAN | [mean()](/flux/v0.x/stdlib/built-in/transformations/aggregates/mean/) | -| MEDIAN | [median()](/flux/v0.x/stdlib/built-in/transformations/aggregates/median/) | -| MODE | [mode()](/flux/v0.x/stdlib/built-in/transformations/aggregates/mode/) | -| SPREAD | [spread()](/flux/v0.x/stdlib/built-in/transformations/aggregates/spread/) | -| STDDEV | [stddev()](/flux/v0.x/stdlib/built-in/transformations/aggregates/stddev/) | -| SUM | [sum()](/flux/v0.x/stdlib/built-in/transformations/aggregates/sum/) | -| BOTTOM | [bottom()](/flux/v0.x/stdlib/built-in/transformations/selectors/bottom/) | -| FIRST | [first()](/flux/v0.x/stdlib/built-in/transformations/selectors/first/) | -| LAST | [last()](/flux/v0.x/stdlib/built-in/transformations/selectors/last/) | -| MAX | [max()](/flux/v0.x/stdlib/built-in/transformations/selectors/max/) | -| MIN | [min()](/flux/v0.x/stdlib/built-in/transformations/selectors/min/) | -| PERCENTILE | [quantile()](/flux/v0.x/stdlib/built-in/transformations/aggregates/quantile/) | -| SAMPLE | [sample()](/flux/v0.x/stdlib/built-in/transformations/selectors/sample/) | -| TOP | [top()](/flux/v0.x/stdlib/built-in/transformations/selectors/top/) | -| ABS | [math.abs()](/flux/v0.x/stdlib/math/abs/) | -| ACOS | [math.acos()](/flux/v0.x/stdlib/math/acos/) | -| ASIN | [math.asin()](/flux/v0.x/stdlib/math/asin/) | -| ATAN | [math.atan()](/flux/v0.x/stdlib/math/atan/) | -| ATAN2 | [math.atan2()](/flux/v0.x/stdlib/math/atan2/) | -| CEIL | [math.ceil()](/flux/v0.x/stdlib/math/ceil/) | -| COS | [math.cos()](/flux/v0.x/stdlib/math/cos/) | -| CUMULATIVE_SUM | [cumulativeSum()](/flux/v0.x/stdlib/built-in/transformations/cumulativesum/) | -| DERIVATIVE | [derivative()](/flux/v0.x/stdlib/built-in/transformations/aggregates/derivative/) | -| DIFFERENCE | [difference()](/flux/v0.x/stdlib/built-in/transformations/aggregates/difference/) | -| ELAPSED | [elapsed()](/flux/v0.x/stdlib/built-in/transformations/elapsed/) | -| EXP | [math.exp()](/flux/v0.x/stdlib/math/exp/) | -| FLOOR | [math.floor()](/flux/v0.x/stdlib/math/floor/) | -| HISTOGRAM | [histogram()](/flux/v0.x/stdlib/built-in/transformations/histogram/) | -| LN | [math.log()](/flux/v0.x/stdlib/math/log/) | -| LOG | [math.logb()](/flux/v0.x/stdlib/math/logb/) | -| LOG2 | [math.log2()](/flux/v0.x/stdlib/math/log2/) | -| LOG10 | [math.log10()](/flux/v0.x/stdlib/math/log10/) | -| MOVING_AVERAGE | [movingAverage()](/flux/v0.x/stdlib/built-in/transformations/aggregates/movingaverage/) | -| NON_NEGATIVE_DERIVATIVE | [derivative(nonNegative:true)](/flux/v0.x/stdlib/built-in/transformations/aggregates/derivative/) | -| NON_NEGATIVE_DIFFERENCE | [difference(nonNegative:true)](/flux/v0.x/stdlib/built-in/transformations/aggregates/derivative/) | -| POW | [math.pow()](/flux/v0.x/stdlib/math/pow/) | -| ROUND | [math.round()](/flux/v0.x/stdlib/math/round/) | -| SIN | [math.sin()](/flux/v0.x/stdlib/math/sin/) | -| SQRT | [math.sqrt()](/flux/v0.x/stdlib/math/sqrt/) | -| TAN | [math.tan()](/flux/v0.x/stdlib/math/tan/) | -| HOLT_WINTERS | [holtWinters()](/flux/v0.x/stdlib/built-in/transformations/aggregates/holtwinters/) | -| CHANDE_MOMENTUM_OSCILLATOR | [chandeMomentumOscillator()](/flux/v0.x/stdlib/built-in/transformations/aggregates/chandemomentumoscillator/) | -| EXPONENTIAL_MOVING_AVERAGE | [exponentialMovingAverage()](/flux/v0.x/stdlib/built-in/transformations/aggregates/exponentialmovingaverage/) | -| DOUBLE_EXPONENTIAL_MOVING_AVERAGE | [doubleEMA()](/flux/v0.x/stdlib/built-in/transformations/aggregates/doubleema/) | -| KAUFMANS_EFFICIENCY_RATIO | [kaufmansER()](/flux/v0.x/stdlib/built-in/transformations/aggregates/kaufmanser/) | -| KAUFMANS_ADAPTIVE_MOVING_AVERAGE | [kaufmansAMA()](/flux/v0.x/stdlib/built-in/transformations/aggregates/kaufmansama/) | -| TRIPLE_EXPONENTIAL_MOVING_AVERAGE | [tripleEMA()](/flux/v0.x/stdlib/built-in/transformations/aggregates/tripleema/) | -| TRIPLE_EXPONENTIAL_DERIVATIVE | [tripleExponentialDerivative()](/flux/v0.x/stdlib/built-in/transformations/aggregates/tripleexponentialderivative/) | -| RELATIVE_STRENGTH_INDEX | [relativeStrengthIndex()](/flux/v0.x/stdlib/built-in/transformations/aggregates/relativestrengthindex/) | - -_* The to() function only writes to InfluxDB 2.0._ diff --git a/data/default_versions.toml b/data/default_versions.toml index 459e03d3df..757be98ba8 100644 --- a/data/default_versions.toml +++ b/data/default_versions.toml @@ -10,5 +10,5 @@ telegraf = "telegraf_1_12" telegraf_semver = "v1.12" enterprise_kapacitor = "enterprise_kapacitor_1_5" enterprise_kapacitor_semver = "v1.5" -flux = "flux_0_x" -flux_semver = "v0.x" +flux = "flux_0_64" +flux_semver = "v0.64" diff --git a/data/versions.toml b/data/versions.toml index 5f682f0fe0..11538f03e6 100644 --- a/data/versions.toml +++ b/data/versions.toml @@ -4,4 +4,4 @@ chronograf = ["v0.4", "v0.10", "v0.11", "v0.12", "v0.13", "v1.0", "deprecated", kapacitor = ["v0.2", "v0.10", "v0.11", "v0.12", "v0.13", "v1.0", "v1.1", "v1.2", "v1.3", "v1.4", "v1.5"] enterprise_influxdb = ["v1.0", "v1.1", "v1.2", "v1.3", "v1.5", "v1.6", "v1.7"] enterprise_kapacitor = ["v1.3", "v1.4", "v1.5"] -flux = ["v0.7", "v0.12", "v0.24", "v0.36", "v0.50", "v0.x"] +flux = ["v0.7", "v0.12", "v0.24", "v0.36", "v0.50", "v0.64"]